@promptbook/cli 0.103.0-8 → 0.103.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (482) hide show
  1. package/README.md +59 -39
  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 +130 -0
  5. package/apps/agents-server/next.config.ts +45 -0
  6. package/apps/agents-server/package-lock.json +27 -0
  7. package/apps/agents-server/package.json +12 -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 +53 -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 +314 -0
  33. package/apps/agents-server/src/app/agents/[agentName]/AgentProfileChat.tsx +91 -0
  34. package/apps/agents-server/src/app/agents/[agentName]/AgentProfileWrapper.tsx +48 -0
  35. package/apps/agents-server/src/app/agents/[agentName]/AgentUrlCopy.tsx +40 -0
  36. package/apps/agents-server/src/app/agents/[agentName]/ClearAgentChatFeedbackButton.tsx +63 -0
  37. package/apps/agents-server/src/app/agents/[agentName]/ClearAgentChatHistoryButton.tsx +63 -0
  38. package/apps/agents-server/src/app/agents/[agentName]/CloneAgentButton.tsx +41 -0
  39. package/apps/agents-server/src/app/agents/[agentName]/CopyField.tsx +44 -0
  40. package/apps/agents-server/src/app/agents/[agentName]/InstallPwaButton.tsx +74 -0
  41. package/apps/agents-server/src/app/agents/[agentName]/ServiceWorkerRegister.tsx +24 -0
  42. package/apps/agents-server/src/app/agents/[agentName]/TODO.txt +1 -0
  43. package/apps/agents-server/src/app/agents/[agentName]/_utils.ts +19 -0
  44. package/apps/agents-server/src/app/agents/[agentName]/agentLinks.tsx +80 -0
  45. package/apps/agents-server/src/app/agents/[agentName]/api/agents/route.ts +67 -0
  46. package/apps/agents-server/src/app/agents/[agentName]/api/book/route.ts +88 -0
  47. package/apps/agents-server/src/app/agents/[agentName]/api/book/test.http +37 -0
  48. package/apps/agents-server/src/app/agents/[agentName]/api/chat/route.ts +174 -0
  49. package/apps/agents-server/src/app/agents/[agentName]/api/feedback/route.ts +54 -0
  50. package/apps/agents-server/src/app/agents/[agentName]/api/mcp/route.ts +203 -0
  51. package/apps/agents-server/src/app/agents/[agentName]/api/modelRequirements/TODO.txt +1 -0
  52. package/apps/agents-server/src/app/agents/[agentName]/api/modelRequirements/route.ts +55 -0
  53. package/apps/agents-server/src/app/agents/[agentName]/api/modelRequirements/systemMessage/route.ts +47 -0
  54. package/apps/agents-server/src/app/agents/[agentName]/api/openai/chat/completions/route.ts +10 -0
  55. package/apps/agents-server/src/app/agents/[agentName]/api/openai/models/route.ts +93 -0
  56. package/apps/agents-server/src/app/agents/[agentName]/api/openai/v1/chat/completions/route.ts +10 -0
  57. package/apps/agents-server/src/app/agents/[agentName]/api/openai/v1/models/route.ts +93 -0
  58. package/apps/agents-server/src/app/agents/[agentName]/api/openrouter/chat/completions/route.ts +10 -0
  59. package/apps/agents-server/src/app/agents/[agentName]/api/profile/route.ts +76 -0
  60. package/apps/agents-server/src/app/agents/[agentName]/api/voice/route.ts +181 -0
  61. package/apps/agents-server/src/app/agents/[agentName]/book/BookEditorWrapper.tsx +139 -0
  62. package/apps/agents-server/src/app/agents/[agentName]/book/page.tsx +35 -0
  63. package/apps/agents-server/src/app/agents/[agentName]/book+chat/AgentBookAndChat.tsx +75 -0
  64. package/apps/agents-server/src/app/agents/[agentName]/book+chat/AgentBookAndChatComponent.tsx.todo +160 -0
  65. package/apps/agents-server/src/app/agents/[agentName]/book+chat/page.tsx +32 -0
  66. package/apps/agents-server/src/app/agents/[agentName]/book+chat/page.tsx.todo +21 -0
  67. package/apps/agents-server/src/app/agents/[agentName]/chat/AgentChatWrapper.tsx +68 -0
  68. package/apps/agents-server/src/app/agents/[agentName]/chat/page.tsx +33 -0
  69. package/apps/agents-server/src/app/agents/[agentName]/generateAgentMetadata.ts +46 -0
  70. package/apps/agents-server/src/app/agents/[agentName]/history/RestoreVersionButton.tsx +46 -0
  71. package/apps/agents-server/src/app/agents/[agentName]/history/actions.ts +12 -0
  72. package/apps/agents-server/src/app/agents/[agentName]/history/page.tsx +62 -0
  73. package/apps/agents-server/src/app/agents/[agentName]/images/icon-256.png/route.tsx +80 -0
  74. package/apps/agents-server/src/app/agents/[agentName]/images/screenshot-fullhd.png/route.tsx +92 -0
  75. package/apps/agents-server/src/app/agents/[agentName]/images/screenshot-phone.png/route.tsx +92 -0
  76. package/apps/agents-server/src/app/agents/[agentName]/integration/SdkCodeTabs.tsx +31 -0
  77. package/apps/agents-server/src/app/agents/[agentName]/integration/page.tsx +302 -0
  78. package/apps/agents-server/src/app/agents/[agentName]/layout.tsx +41 -0
  79. package/apps/agents-server/src/app/agents/[agentName]/links/page.tsx +182 -0
  80. package/apps/agents-server/src/app/agents/[agentName]/opengraph-image.tsx +102 -0
  81. package/apps/agents-server/src/app/agents/[agentName]/page.tsx +106 -0
  82. package/apps/agents-server/src/app/agents/[agentName]/website-integration/page.tsx +70 -0
  83. package/apps/agents-server/src/app/agents/page.tsx +11 -0
  84. package/apps/agents-server/src/app/api/agents/[agentName]/clone/route.ts +47 -0
  85. package/apps/agents-server/src/app/api/agents/[agentName]/route.ts +19 -0
  86. package/apps/agents-server/src/app/api/agents/route.ts +43 -0
  87. package/apps/agents-server/src/app/api/api-tokens/route.ts +76 -0
  88. package/apps/agents-server/src/app/api/auth/change-password/route.ts +75 -0
  89. package/apps/agents-server/src/app/api/auth/login/route.ts +27 -0
  90. package/apps/agents-server/src/app/api/auth/logout/route.ts +7 -0
  91. package/apps/agents-server/src/app/api/chat/route.ts +32 -0
  92. package/apps/agents-server/src/app/api/chat-feedback/[id]/route.ts +38 -0
  93. package/apps/agents-server/src/app/api/chat-feedback/export/route.ts +55 -0
  94. package/apps/agents-server/src/app/api/chat-feedback/route.ts +157 -0
  95. package/apps/agents-server/src/app/api/chat-history/[id]/route.ts +37 -0
  96. package/apps/agents-server/src/app/api/chat-history/export/route.ts +55 -0
  97. package/apps/agents-server/src/app/api/chat-history/route.ts +147 -0
  98. package/apps/agents-server/src/app/api/chat-streaming/route.ts +48 -0
  99. package/apps/agents-server/src/app/api/embed.js/route.ts +93 -0
  100. package/apps/agents-server/src/app/api/federated-agents/route.ts +17 -0
  101. package/apps/agents-server/src/app/api/long-running-task/route.ts +7 -0
  102. package/apps/agents-server/src/app/api/long-streaming/route.ts +20 -0
  103. package/apps/agents-server/src/app/api/metadata/route.ts +116 -0
  104. package/apps/agents-server/src/app/api/openai/v1/chat/completions/route.ts +6 -0
  105. package/apps/agents-server/src/app/api/openai/v1/models/route.ts +65 -0
  106. package/apps/agents-server/src/app/api/upload/route.ts +83 -0
  107. package/apps/agents-server/src/app/api/users/[username]/route.ts +75 -0
  108. package/apps/agents-server/src/app/api/users/route.ts +71 -0
  109. package/apps/agents-server/src/app/docs/[docId]/page.tsx +43 -0
  110. package/apps/agents-server/src/app/docs/page.tsx +59 -0
  111. package/apps/agents-server/src/app/embed/page.tsx +24 -0
  112. package/apps/agents-server/src/app/globals.css +276 -0
  113. package/apps/agents-server/src/app/humans.txt/route.ts +15 -0
  114. package/apps/agents-server/src/app/layout.tsx +139 -0
  115. package/apps/agents-server/src/app/manifest.ts +114 -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/robots.txt/route.ts +15 -0
  123. package/apps/agents-server/src/app/security.txt/route.ts +15 -0
  124. package/apps/agents-server/src/app/sitemap.xml/route.ts +37 -0
  125. package/apps/agents-server/src/app/test/og-image/README.md +1 -0
  126. package/apps/agents-server/src/app/test/og-image/opengraph-image.tsx +37 -0
  127. package/apps/agents-server/src/app/test/og-image/page.tsx +22 -0
  128. package/apps/agents-server/src/components/AgentProfile/AgentProfile.tsx +339 -0
  129. package/apps/agents-server/src/components/AgentProfile/AgentProfileFromSource.tsx +23 -0
  130. package/apps/agents-server/src/components/AgentProfile/AgentQrCode.tsx +62 -0
  131. package/apps/agents-server/src/components/AgentProfile/QrCodeModal.tsx +90 -0
  132. package/apps/agents-server/src/components/Auth/AuthControls.tsx +123 -0
  133. package/apps/agents-server/src/components/ChangePasswordDialog/ChangePasswordDialog.tsx +41 -0
  134. package/apps/agents-server/src/components/ChangePasswordForm/ChangePasswordForm.tsx +159 -0
  135. package/apps/agents-server/src/components/DocumentationContent/DocumentationContent.tsx +88 -0
  136. package/apps/agents-server/src/components/ErrorPage/ErrorPage.tsx +33 -0
  137. package/apps/agents-server/src/components/Footer/Footer.tsx +175 -0
  138. package/apps/agents-server/src/components/ForbiddenPage/ForbiddenPage.tsx +15 -0
  139. package/apps/agents-server/src/components/Header/Header.tsx +668 -0
  140. package/apps/agents-server/src/components/Homepage/AgentCard.tsx +60 -0
  141. package/apps/agents-server/src/components/Homepage/AgentsList.tsx +58 -0
  142. package/apps/agents-server/src/components/Homepage/Card.tsx +18 -0
  143. package/apps/agents-server/src/components/Homepage/ExternalAgentsSection.tsx +21 -0
  144. package/apps/agents-server/src/components/Homepage/ExternalAgentsSectionClient.tsx +183 -0
  145. package/apps/agents-server/src/components/Homepage/ModelCard.tsx +29 -0
  146. package/apps/agents-server/src/components/Homepage/ModelsSection.tsx +75 -0
  147. package/apps/agents-server/src/components/Homepage/Section.tsx +17 -0
  148. package/apps/agents-server/src/components/Homepage/TechInfoCard.tsx +20 -0
  149. package/apps/agents-server/src/components/LayoutWrapper/LayoutWrapper.tsx +57 -0
  150. package/apps/agents-server/src/components/LoginDialog/LoginDialog.tsx +41 -0
  151. package/apps/agents-server/src/components/LoginForm/LoginForm.tsx +109 -0
  152. package/apps/agents-server/src/components/NotFoundPage/NotFoundPage.tsx +17 -0
  153. package/apps/agents-server/src/components/OpenMojiIcon/OpenMojiIcon.tsx +20 -0
  154. package/apps/agents-server/src/components/Portal/Portal.tsx +38 -0
  155. package/apps/agents-server/src/components/PrintButton/PrintButton.tsx +18 -0
  156. package/apps/agents-server/src/components/PrintHeader/PrintHeader.tsx +18 -0
  157. package/apps/agents-server/src/components/UsersList/UsersList.tsx +141 -0
  158. package/apps/agents-server/src/components/UsersList/useUsersAdmin.ts +139 -0
  159. package/apps/agents-server/src/components/VercelDeploymentCard/VercelDeploymentCard.tsx +55 -0
  160. package/apps/agents-server/src/components/_utils/generateMetaTxt.ts +28 -0
  161. package/apps/agents-server/src/components/_utils/headlessParam.tsx +36 -0
  162. package/apps/agents-server/src/database/$getTableName.ts +18 -0
  163. package/apps/agents-server/src/database/$provideSupabase.ts +29 -0
  164. package/apps/agents-server/src/database/$provideSupabaseForBrowser.ts +41 -0
  165. package/apps/agents-server/src/database/$provideSupabaseForServer.ts +48 -0
  166. package/apps/agents-server/src/database/$provideSupabaseForWorker.ts +43 -0
  167. package/apps/agents-server/src/database/getMetadata.ts +31 -0
  168. package/apps/agents-server/src/database/metadataDefaults.ts +75 -0
  169. package/apps/agents-server/src/database/migrate.ts +131 -0
  170. package/apps/agents-server/src/database/migrations/2025-11-0001-initial-schema.sql +163 -0
  171. package/apps/agents-server/src/database/migrations/2025-11-0002-metadata-table.sql +16 -0
  172. package/apps/agents-server/src/database/migrations/2025-12-0010-llm-cache.sql +12 -0
  173. package/apps/agents-server/src/database/migrations/2025-12-0060-api-tokens.sql +13 -0
  174. package/apps/agents-server/src/database/migrations/2025-12-0070-chat-history-source.sql +2 -0
  175. package/apps/agents-server/src/database/schema.ts +308 -0
  176. package/apps/agents-server/src/deamons/longRunningTask.ts +37 -0
  177. package/apps/agents-server/src/middleware.ts +305 -0
  178. package/apps/agents-server/src/tools/$provideAgentCollectionForServer.ts +54 -0
  179. package/apps/agents-server/src/tools/$provideCdnForServer.ts +36 -0
  180. package/apps/agents-server/src/tools/$provideExecutionToolsForServer.ts +117 -0
  181. package/apps/agents-server/src/tools/$provideOpenAiAssistantExecutionToolsForServer.ts +35 -0
  182. package/apps/agents-server/src/tools/$provideServer.ts +39 -0
  183. package/apps/agents-server/src/utils/auth.ts +33 -0
  184. package/apps/agents-server/src/utils/authenticateUser.ts +42 -0
  185. package/apps/agents-server/src/utils/cache/SupabaseCacheStorage.ts +55 -0
  186. package/apps/agents-server/src/utils/cdn/classes/DigitalOceanSpaces.ts +119 -0
  187. package/apps/agents-server/src/utils/cdn/classes/VercelBlobStorage.ts +64 -0
  188. package/apps/agents-server/src/utils/cdn/interfaces/IFilesStorage.ts +32 -0
  189. package/apps/agents-server/src/utils/cdn/interfaces/IStorage.ts +14 -0
  190. package/apps/agents-server/src/utils/cdn/utils/getUserFileCdnKey.ts +28 -0
  191. package/apps/agents-server/src/utils/cdn/utils/nameToSubfolderPath.ts +9 -0
  192. package/apps/agents-server/src/utils/cdn/utils/nextRequestToNodeRequest.ts +27 -0
  193. package/apps/agents-server/src/utils/chatFeedbackAdmin.ts +96 -0
  194. package/apps/agents-server/src/utils/chatHistoryAdmin.ts +96 -0
  195. package/apps/agents-server/src/utils/convertToCsv.ts +31 -0
  196. package/apps/agents-server/src/utils/getCurrentUser.ts +32 -0
  197. package/apps/agents-server/src/utils/getEffectiveFederatedServers.ts +22 -0
  198. package/apps/agents-server/src/utils/getFederatedAgents.ts +89 -0
  199. package/apps/agents-server/src/utils/getFederatedServersFromMetadata.ts +10 -0
  200. package/apps/agents-server/src/utils/getVisibleCommitmentDefinitions.ts +12 -0
  201. package/apps/agents-server/src/utils/handleChatCompletion.ts +355 -0
  202. package/apps/agents-server/src/utils/isIpAllowed.ts +101 -0
  203. package/apps/agents-server/src/utils/isUserAdmin.ts +31 -0
  204. package/apps/agents-server/src/utils/resolveInheritedAgentSource.ts +100 -0
  205. package/apps/agents-server/src/utils/session.ts +50 -0
  206. package/apps/agents-server/src/utils/validateApiKey.ts +128 -0
  207. package/apps/agents-server/src/utils/validators/validateMimeType.ts +24 -0
  208. package/apps/agents-server/tailwind.config.ts +26 -0
  209. package/apps/agents-server/tsconfig.json +29 -0
  210. package/apps/agents-server/vercel.json +7 -0
  211. package/esm/index.es.js +5406 -443
  212. package/esm/index.es.js.map +1 -1
  213. package/esm/typings/books/index.d.ts +0 -81
  214. package/esm/typings/servers.d.ts +9 -7
  215. package/esm/typings/src/_packages/browser.index.d.ts +6 -0
  216. package/esm/typings/src/_packages/cli.index.d.ts +4 -0
  217. package/esm/typings/src/_packages/components.index.d.ts +22 -8
  218. package/esm/typings/src/_packages/core.index.d.ts +58 -18
  219. package/esm/typings/src/_packages/node.index.d.ts +2 -2
  220. package/esm/typings/src/_packages/remote-server.index.d.ts +2 -0
  221. package/esm/typings/src/_packages/types.index.d.ts +70 -8
  222. package/esm/typings/src/_packages/utils.index.d.ts +6 -0
  223. package/esm/typings/src/_packages/wizard.index.d.ts +4 -0
  224. package/esm/typings/src/book-2.0/agent-source/AgentBasicInformation.d.ts +20 -5
  225. package/esm/typings/src/book-2.0/agent-source/AgentModelRequirements.d.ts +17 -1
  226. package/esm/typings/src/book-2.0/agent-source/AgentSourceParseResult.d.ts +3 -2
  227. package/esm/typings/src/book-2.0/agent-source/computeAgentHash.d.ts +8 -0
  228. package/esm/typings/src/book-2.0/agent-source/createCommitmentRegex.d.ts +3 -3
  229. package/esm/typings/src/book-2.0/agent-source/createDefaultAgentName.d.ts +8 -0
  230. package/esm/typings/src/book-2.0/agent-source/normalizeAgentName.d.ts +9 -0
  231. package/esm/typings/src/book-2.0/agent-source/padBook.d.ts +18 -0
  232. package/esm/typings/src/book-2.0/agent-source/parseAgentSourceWithCommitments.d.ts +1 -1
  233. package/esm/typings/src/book-2.0/agent-source/string_book.d.ts +3 -0
  234. package/esm/typings/src/book-components/AvatarProfile/AvatarProfile/AvatarProfile.d.ts +6 -1
  235. package/esm/typings/src/book-components/BookEditor/BookEditor.d.ts +85 -14
  236. package/esm/typings/src/book-components/BookEditor/BookEditorActionbar.d.ts +18 -0
  237. package/esm/typings/src/book-components/BookEditor/BookEditorMonaco.d.ts +5 -0
  238. package/esm/typings/src/book-components/Chat/AgentChat/AgentChat.d.ts +17 -0
  239. package/esm/typings/src/book-components/Chat/AgentChat/AgentChatProps.d.ts +13 -0
  240. package/esm/typings/src/book-components/Chat/Chat/ChatProps.d.ts +16 -0
  241. package/esm/typings/src/book-components/Chat/LlmChat/LlmChatProps.d.ts +5 -0
  242. package/esm/typings/src/book-components/Chat/MarkdownContent/MarkdownContent.d.ts +15 -0
  243. package/esm/typings/src/book-components/Chat/MockedChat/MockedChat.d.ts +5 -0
  244. package/esm/typings/src/book-components/Chat/save/_common/ChatSaveFormatDefinition.d.ts +1 -1
  245. package/esm/typings/src/book-components/Chat/save/html/htmlSaveFormatDefinition.d.ts +1 -0
  246. package/esm/typings/src/book-components/Chat/save/pdf/pdfSaveFormatDefinition.d.ts +4 -0
  247. package/esm/typings/src/book-components/Chat/types/ChatParticipant.d.ts +1 -1
  248. package/esm/typings/src/book-components/PromptbookAgent/PromptbookAgentIntegration.d.ts +52 -0
  249. package/esm/typings/src/book-components/PromptbookAgent/PromptbookAgentSeamlessIntegration.d.ts +14 -0
  250. package/esm/typings/src/book-components/Qr/BrandedQrCode.d.ts +18 -0
  251. package/esm/typings/src/book-components/Qr/GenericQrCode.d.ts +10 -0
  252. package/esm/typings/src/book-components/Qr/PromptbookQrCode.d.ts +18 -0
  253. package/esm/typings/src/book-components/Qr/useQrCode.d.ts +15 -0
  254. package/esm/typings/src/book-components/_common/Dropdown/Dropdown.d.ts +15 -0
  255. package/esm/typings/src/book-components/_common/HamburgerMenu/HamburgerMenu.d.ts +12 -0
  256. package/esm/typings/src/book-components/_common/Modal/Modal.d.ts +2 -2
  257. package/esm/typings/src/book-components/_common/Tooltip/Tooltip.d.ts +47 -0
  258. package/esm/typings/src/book-components/icons/AboutIcon.d.ts +9 -0
  259. package/esm/typings/src/book-components/icons/CameraIcon.d.ts +11 -0
  260. package/esm/typings/src/book-components/icons/CloseIcon.d.ts +4 -8
  261. package/esm/typings/src/book-components/icons/DownloadIcon.d.ts +9 -0
  262. package/esm/typings/src/book-components/icons/ExitFullscreenIcon.d.ts +7 -0
  263. package/esm/typings/src/book-components/icons/FullscreenIcon.d.ts +7 -0
  264. package/esm/typings/src/book-components/icons/MenuIcon.d.ts +12 -0
  265. package/esm/typings/src/book-components/icons/MicIcon.d.ts +8 -0
  266. package/esm/typings/src/book-components/icons/SendIcon.d.ts +3 -0
  267. package/esm/typings/src/cli/cli-commands/_boilerplate.d.ts +2 -1
  268. package/esm/typings/src/cli/cli-commands/about.d.ts +3 -1
  269. package/esm/typings/src/cli/cli-commands/hello.d.ts +2 -1
  270. package/esm/typings/src/cli/cli-commands/list-models.d.ts +2 -1
  271. package/esm/typings/src/cli/cli-commands/list-scrapers.d.ts +2 -1
  272. package/esm/typings/src/cli/cli-commands/login.d.ts +2 -1
  273. package/esm/typings/src/cli/cli-commands/make.d.ts +2 -1
  274. package/esm/typings/src/cli/cli-commands/prettify.d.ts +2 -1
  275. package/esm/typings/src/cli/cli-commands/run.d.ts +2 -1
  276. package/esm/typings/src/cli/cli-commands/{start-server.d.ts → start-agents-server.d.ts} +3 -2
  277. package/esm/typings/src/cli/cli-commands/start-pipelines-server.d.ts +15 -0
  278. package/esm/typings/src/cli/cli-commands/test-command.d.ts +2 -1
  279. package/esm/typings/src/cli/common/$addGlobalOptionsToCommand.d.ts +2 -1
  280. package/esm/typings/src/collection/agent-collection/AgentCollection.d.ts +12 -0
  281. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +75 -0
  282. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabaseOptions.d.ts +10 -0
  283. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentsDatabaseSchema.d.ts +154 -0
  284. package/esm/typings/src/collection/{PipelineCollection.d.ts → pipeline-collection/PipelineCollection.d.ts} +7 -3
  285. package/esm/typings/src/collection/{SimplePipelineCollection.d.ts → pipeline-collection/SimplePipelineCollection.d.ts} +5 -5
  286. package/esm/typings/src/collection/{constructors/createCollectionFromDirectory.d.ts → pipeline-collection/constructors/createPipelineCollectionFromDirectory.d.ts} +8 -11
  287. package/esm/typings/src/collection/pipeline-collection/constructors/createPipelineCollectionFromJson.d.ts +13 -0
  288. package/esm/typings/src/collection/{constructors/createCollectionFromPromise.d.ts → pipeline-collection/constructors/createPipelineCollectionFromPromise.d.ts} +6 -5
  289. package/esm/typings/src/collection/pipeline-collection/constructors/createPipelineCollectionFromPromise.test.d.ts +1 -0
  290. package/esm/typings/src/collection/{constructors/createCollectionFromUrl.d.ts → pipeline-collection/constructors/createPipelineCollectionFromUrl.d.ts} +3 -3
  291. package/esm/typings/src/collection/{constructors/createSubcollection.d.ts → pipeline-collection/constructors/createPipelineSubcollection.d.ts} +3 -3
  292. package/esm/typings/src/collection/pipeline-collection/pipelineCollectionToJson.d.ts +13 -0
  293. package/esm/typings/src/commands/_common/types/CommandParser.d.ts +4 -5
  294. package/esm/typings/src/{book-2.0/commitments → commitments}/ACTION/ACTION.d.ts +5 -1
  295. package/esm/typings/src/commitments/CLOSED/CLOSED.d.ts +39 -0
  296. package/esm/typings/src/commitments/CLOSED/CLOSED.test.d.ts +4 -0
  297. package/esm/typings/src/commitments/COMPONENT/COMPONENT.d.ts +28 -0
  298. package/esm/typings/src/{book-2.0/commitments → commitments}/DELETE/DELETE.d.ts +5 -1
  299. package/esm/typings/src/{book-2.0/commitments → commitments}/FORMAT/FORMAT.d.ts +5 -1
  300. package/esm/typings/src/commitments/FROM/FROM.d.ts +34 -0
  301. package/esm/typings/src/{book-2.0/commitments → commitments}/GOAL/GOAL.d.ts +5 -1
  302. package/esm/typings/src/{book-2.0/commitments → commitments}/KNOWLEDGE/KNOWLEDGE.d.ts +5 -5
  303. package/esm/typings/src/commitments/LANGUAGE/LANGUAGE.d.ts +35 -0
  304. package/esm/typings/src/{book-2.0/commitments → commitments}/MEMORY/MEMORY.d.ts +5 -1
  305. package/esm/typings/src/commitments/MESSAGE/AgentMessageCommitmentDefinition.d.ts +32 -0
  306. package/esm/typings/src/commitments/MESSAGE/InitialMessageCommitmentDefinition.d.ts +32 -0
  307. package/esm/typings/src/{book-2.0/commitments → commitments}/MESSAGE/MESSAGE.d.ts +5 -1
  308. package/esm/typings/src/commitments/MESSAGE/UserMessageCommitmentDefinition.d.ts +32 -0
  309. package/esm/typings/src/{book-2.0/commitments → commitments}/META/META.d.ts +5 -1
  310. package/esm/typings/src/commitments/META_COLOR/META_COLOR.d.ts +48 -0
  311. package/esm/typings/src/commitments/META_FONT/META_FONT.d.ts +42 -0
  312. package/esm/typings/src/{book-2.0/commitments → commitments}/META_IMAGE/META_IMAGE.d.ts +5 -1
  313. package/esm/typings/src/{book-2.0/commitments → commitments}/META_LINK/META_LINK.d.ts +5 -1
  314. package/esm/typings/src/{book-2.0/commitments → commitments}/MODEL/MODEL.d.ts +5 -1
  315. package/esm/typings/src/{book-2.0/commitments → commitments}/NOTE/NOTE.d.ts +5 -1
  316. package/esm/typings/src/commitments/OPEN/OPEN.d.ts +35 -0
  317. package/esm/typings/src/{book-2.0/commitments → commitments}/PERSONA/PERSONA.d.ts +5 -1
  318. package/esm/typings/src/{book-2.0/commitments → commitments}/RULE/RULE.d.ts +5 -1
  319. package/esm/typings/src/{book-2.0/commitments → commitments}/SAMPLE/SAMPLE.d.ts +5 -1
  320. package/esm/typings/src/{book-2.0/commitments → commitments}/SCENARIO/SCENARIO.d.ts +5 -1
  321. package/esm/typings/src/{book-2.0/commitments → commitments}/STYLE/STYLE.d.ts +5 -1
  322. package/esm/typings/src/commitments/USE/USE.d.ts +53 -0
  323. package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.d.ts +42 -0
  324. package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.test.d.ts +1 -0
  325. package/esm/typings/src/commitments/USE_MCP/USE_MCP.d.ts +37 -0
  326. package/esm/typings/src/commitments/USE_SEARCH_ENGINE/USE_SEARCH_ENGINE.d.ts +38 -0
  327. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/BaseCommitmentDefinition.d.ts +14 -2
  328. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/CommitmentDefinition.d.ts +6 -1
  329. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/NotYetImplementedCommitmentDefinition.d.ts +5 -1
  330. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/createEmptyAgentModelRequirements.d.ts +1 -1
  331. package/esm/typings/src/commitments/index.d.ts +93 -0
  332. package/esm/typings/src/config.d.ts +24 -3
  333. package/esm/typings/src/conversion/validation/validatePipeline.d.ts +2 -0
  334. package/esm/typings/src/errors/0-index.d.ts +6 -0
  335. package/esm/typings/src/errors/DatabaseError.d.ts +12 -0
  336. package/esm/typings/src/errors/NotAllowed.d.ts +9 -0
  337. package/esm/typings/src/errors/WrappedError.d.ts +2 -2
  338. package/esm/typings/src/execution/AvailableModel.d.ts +1 -0
  339. package/esm/typings/src/execution/Executables.d.ts +3 -0
  340. package/esm/typings/src/execution/ExecutionTask.d.ts +12 -3
  341. package/esm/typings/src/execution/ExecutionTools.d.ts +5 -0
  342. package/esm/typings/src/execution/FilesystemTools.d.ts +1 -1
  343. package/esm/typings/src/execution/LlmExecutionTools.d.ts +26 -2
  344. package/esm/typings/src/execution/PromptResult.d.ts +7 -1
  345. package/esm/typings/src/execution/createPipelineExecutor/10-executePipeline.d.ts +5 -0
  346. package/esm/typings/src/execution/createPipelineExecutor/20-executeTask.d.ts +5 -0
  347. package/esm/typings/src/execution/createPipelineExecutor/30-executeFormatSubvalues.d.ts +5 -0
  348. package/esm/typings/src/execution/createPipelineExecutor/40-executeAttempts.d.ts +5 -0
  349. package/esm/typings/src/execution/utils/usage-constants.d.ts +4 -124
  350. package/esm/typings/src/execution/utils/validatePromptResult.d.ts +2 -0
  351. package/esm/typings/src/high-level-abstractions/_common/HighLevelAbstraction.d.ts +2 -1
  352. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForWizardOrCli.d.ts +2 -2
  353. package/esm/typings/src/llm-providers/_common/register/$registeredLlmToolsMessage.d.ts +2 -1
  354. package/esm/typings/src/llm-providers/_common/register/LlmToolsMetadata.d.ts +1 -1
  355. package/esm/typings/src/llm-providers/_common/utils/assertUniqueModels.d.ts +12 -0
  356. package/esm/typings/src/llm-providers/_multiple/getSingleLlmExecutionTools.d.ts +1 -0
  357. package/esm/typings/src/llm-providers/_multiple/joinLlmExecutionTools.d.ts +1 -0
  358. package/esm/typings/src/llm-providers/agent/Agent.d.ts +72 -0
  359. package/esm/typings/src/llm-providers/agent/AgentLlmExecutionTools.d.ts +26 -4
  360. package/esm/typings/src/llm-providers/agent/AgentOptions.d.ts +19 -0
  361. package/esm/typings/src/llm-providers/agent/CreateAgentLlmExecutionToolsOptions.d.ts +17 -0
  362. package/esm/typings/src/llm-providers/agent/RemoteAgent.d.ts +50 -0
  363. package/esm/typings/src/llm-providers/agent/RemoteAgentOptions.d.ts +11 -0
  364. package/esm/typings/src/llm-providers/agent/createAgentLlmExecutionTools.d.ts +1 -19
  365. package/esm/typings/src/llm-providers/anthropic-claude/anthropic-claude-models.d.ts +1 -1
  366. package/esm/typings/src/llm-providers/google/google-models.d.ts +1 -1
  367. package/esm/typings/src/llm-providers/ollama/OllamaExecutionTools.d.ts +4 -0
  368. package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +60 -2
  369. package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionToolsOptions.d.ts +7 -1
  370. package/esm/typings/src/llm-providers/openai/OpenAiCompatibleExecutionTools.d.ts +13 -1
  371. package/esm/typings/src/llm-providers/openai/OpenAiExecutionTools.d.ts +4 -0
  372. package/esm/typings/src/llm-providers/openai/createOpenAiCompatibleExecutionTools.d.ts +6 -6
  373. package/esm/typings/src/llm-providers/openai/openai-models.d.ts +1 -1
  374. package/esm/typings/src/llm-providers/openai/openai-models.test.d.ts +4 -0
  375. package/esm/typings/src/other/templates/getTemplatesPipelineCollection.d.ts +1 -1
  376. package/esm/typings/src/pipeline/validatePipelineString.d.ts +2 -0
  377. package/esm/typings/src/playground/permanent/_boilerplate.d.ts +5 -0
  378. package/esm/typings/src/playground/permanent/agent-with-browser-playground.d.ts +5 -0
  379. package/esm/typings/src/prepare/PrepareAndScrapeOptions.d.ts +1 -0
  380. package/esm/typings/src/remote-server/startAgentServer.d.ts +26 -0
  381. package/esm/typings/src/remote-server/startRemoteServer.d.ts +4 -1
  382. package/esm/typings/src/remote-server/types/RemoteServerOptions.d.ts +3 -8
  383. package/esm/typings/src/scrapers/_boilerplate/createBoilerplateScraper.d.ts +1 -12
  384. package/esm/typings/src/scrapers/_boilerplate/register-metadata.d.ts +1 -9
  385. package/esm/typings/src/scrapers/document/createDocumentScraper.d.ts +1 -12
  386. package/esm/typings/src/scrapers/document/register-metadata.d.ts +1 -9
  387. package/esm/typings/src/scrapers/document-legacy/createLegacyDocumentScraper.d.ts +1 -12
  388. package/esm/typings/src/scrapers/document-legacy/register-metadata.d.ts +1 -9
  389. package/esm/typings/src/scrapers/markdown/createMarkdownScraper.d.ts +1 -12
  390. package/esm/typings/src/scrapers/markdown/register-metadata.d.ts +1 -9
  391. package/esm/typings/src/scrapers/markitdown/createMarkitdownScraper.d.ts +1 -12
  392. package/esm/typings/src/scrapers/markitdown/register-metadata.d.ts +1 -9
  393. package/esm/typings/src/scrapers/pdf/createPdfScraper.d.ts +1 -12
  394. package/esm/typings/src/scrapers/pdf/register-metadata.d.ts +1 -9
  395. package/esm/typings/src/scrapers/website/createWebsiteScraper.d.ts +1 -12
  396. package/esm/typings/src/scrapers/website/register-metadata.d.ts +1 -9
  397. package/esm/typings/src/storage/_common/PromptbookStorage.d.ts +1 -0
  398. package/esm/typings/src/storage/env-storage/$EnvStorage.d.ts +2 -1
  399. package/esm/typings/src/transpilers/_common/BookTranspiler.d.ts +33 -0
  400. package/esm/typings/src/transpilers/_common/BookTranspilerOptions.d.ts +18 -0
  401. package/esm/typings/src/transpilers/_common/register/$bookTranspilersRegister.d.ts +15 -0
  402. package/esm/typings/src/transpilers/formatted-book-in-markdown/FormattedBookInMarkdownTranspiler.d.ts +16 -0
  403. package/esm/typings/src/transpilers/formatted-book-in-markdown/register.d.ts +15 -0
  404. package/esm/typings/src/transpilers/openai-sdk/OpenAiSdkTranspiler.d.ts +16 -0
  405. package/esm/typings/src/transpilers/openai-sdk/OpenAiSdkTranspiler.test.d.ts +1 -0
  406. package/esm/typings/src/transpilers/openai-sdk/playground/playground.d.ts +5 -0
  407. package/esm/typings/src/transpilers/openai-sdk/register.d.ts +15 -0
  408. package/esm/typings/src/types/LlmCall.d.ts +20 -0
  409. package/esm/typings/src/types/ModelRequirements.d.ts +13 -1
  410. package/esm/typings/src/types/ModelVariant.d.ts +1 -1
  411. package/esm/typings/src/types/Prompt.d.ts +13 -1
  412. package/esm/typings/src/types/Updatable.d.ts +19 -0
  413. package/esm/typings/src/types/typeAliases.d.ts +38 -2
  414. package/esm/typings/src/utils/color/$randomColor.d.ts +1 -0
  415. package/esm/typings/src/utils/color/Color.d.ts +16 -1
  416. package/esm/typings/src/utils/color/Color.test.d.ts +1 -0
  417. package/esm/typings/src/utils/color/css-colors.d.ts +1 -0
  418. package/esm/typings/src/utils/color/internal-utils/checkChannelValue.d.ts +0 -3
  419. package/esm/typings/src/utils/color/operators/darken.d.ts +1 -1
  420. package/esm/typings/src/utils/color/operators/grayscale.d.ts +1 -1
  421. package/esm/typings/src/utils/color/operators/lighten.d.ts +1 -1
  422. package/esm/typings/src/utils/color/operators/mixWithColor.d.ts +1 -1
  423. package/esm/typings/src/utils/color/operators/saturate.d.ts +1 -1
  424. package/esm/typings/src/utils/environment/$detectRuntimeEnvironment.d.ts +16 -0
  425. package/esm/typings/src/utils/environment/$getGlobalScope.d.ts +2 -2
  426. package/esm/typings/src/utils/execCommand/$execCommand.d.ts +2 -1
  427. package/esm/typings/src/utils/execCommand/$execCommands.d.ts +2 -1
  428. package/esm/typings/src/utils/files/$induceBookDownload.d.ts +13 -0
  429. package/esm/typings/src/utils/files/$induceFileDownload.d.ts +13 -0
  430. package/esm/typings/src/utils/files/ObjectUrl.d.ts +46 -0
  431. package/esm/typings/src/utils/files/listAllFiles.d.ts +2 -3
  432. package/esm/typings/src/utils/misc/aboutPromptbookInformation.d.ts +27 -0
  433. package/esm/typings/src/utils/misc/computeHash.d.ts +11 -0
  434. package/esm/typings/src/utils/misc/computeHash.test.d.ts +1 -0
  435. package/esm/typings/src/utils/misc/injectCssModuleIntoShadowRoot.d.ts +1 -0
  436. package/esm/typings/src/utils/misc/xAboutPromptbookInformation.d.ts +13 -0
  437. package/esm/typings/src/utils/normalization/normalize-to-kebab-case.d.ts +2 -0
  438. package/esm/typings/src/utils/normalization/normalizeMessageText.d.ts +9 -0
  439. package/esm/typings/src/utils/normalization/normalizeMessageText.test.d.ts +1 -0
  440. package/esm/typings/src/utils/normalization/normalizeTo_PascalCase.d.ts +3 -0
  441. package/esm/typings/src/utils/normalization/normalizeTo_camelCase.d.ts +2 -0
  442. package/esm/typings/src/utils/normalization/titleToName.d.ts +2 -0
  443. package/esm/typings/src/utils/organization/$sideEffect.d.ts +2 -2
  444. package/esm/typings/src/utils/organization/$side_effect.d.ts +7 -0
  445. package/esm/typings/src/utils/organization/TODO_USE.d.ts +2 -2
  446. package/esm/typings/src/utils/organization/keepUnused.d.ts +2 -2
  447. package/esm/typings/src/utils/organization/preserve.d.ts +3 -3
  448. package/esm/typings/src/utils/organization/really_any.d.ts +7 -0
  449. package/esm/typings/src/utils/random/$generateBookBoilerplate.d.ts +31 -0
  450. package/esm/typings/src/utils/random/$randomAgentPersona.d.ts +9 -0
  451. package/esm/typings/src/utils/random/$randomFullnameWithColor.d.ts +13 -0
  452. package/esm/typings/src/utils/random/$randomItem.d.ts +9 -0
  453. package/esm/typings/src/utils/random/$randomSeed.d.ts +3 -0
  454. package/esm/typings/src/utils/random/$randomToken.d.ts +2 -0
  455. package/esm/typings/src/utils/random/CzechNamePool.d.ts +7 -0
  456. package/esm/typings/src/utils/random/EnglishNamePool.d.ts +7 -0
  457. package/esm/typings/src/utils/random/NamePool.d.ts +17 -0
  458. package/esm/typings/src/utils/random/getNamePool.d.ts +10 -0
  459. package/esm/typings/src/utils/serialization/$deepFreeze.d.ts +2 -1
  460. package/esm/typings/src/utils/serialization/asSerializable.d.ts +2 -2
  461. package/esm/typings/src/utils/serialization/serializeToPromptbookJavascript.d.ts +2 -2
  462. package/esm/typings/src/utils/validators/parameterName/validateParameterName.d.ts +2 -0
  463. package/esm/typings/src/version.d.ts +1 -1
  464. package/esm/typings/src/wizard/$getCompiledBook.d.ts +1 -2
  465. package/package.json +16 -16
  466. package/umd/index.umd.js +5382 -417
  467. package/umd/index.umd.js.map +1 -1
  468. package/esm/typings/src/book-2.0/commitments/index.d.ts +0 -60
  469. package/esm/typings/src/book-components/BookEditor/BookEditorInner.d.ts +0 -5
  470. package/esm/typings/src/book-components/BookEditor/BookEditorWrapper.d.ts +0 -9
  471. package/esm/typings/src/book-components/BookEditor/config.d.ts +0 -10
  472. package/esm/typings/src/book-components/Chat/utils/renderMarkdown.d.ts +0 -21
  473. package/esm/typings/src/collection/collectionToJson.d.ts +0 -13
  474. package/esm/typings/src/collection/constructors/createCollectionFromJson.d.ts +0 -13
  475. /package/esm/typings/src/{book-components/Chat/utils/renderMarkdown.test.d.ts → book-2.0/agent-source/computeAgentHash.test.d.ts} +0 -0
  476. /package/esm/typings/src/{collection/constructors/createCollectionFromDirectory.test.d.ts → book-2.0/agent-source/normalizeAgentName.test.d.ts} +0 -0
  477. /package/esm/typings/src/{collection/constructors/createCollectionFromJson.test.d.ts → book-components/Chat/AgentChat/AgentChat.test.d.ts} +0 -0
  478. /package/esm/typings/src/collection/{constructors/createCollectionFromPromise.test.d.ts → pipeline-collection/constructors/createPipelineCollectionFromDirectory.test.d.ts} +0 -0
  479. /package/esm/typings/src/{commands/_common/parseCommand.test.d.ts → collection/pipeline-collection/constructors/createPipelineCollectionFromJson.test.d.ts} +0 -0
  480. /package/esm/typings/src/collection/{collectionToJson.test.d.ts → pipeline-collection/pipelineCollectionToJson.test.d.ts} +0 -0
  481. /package/esm/typings/src/{book-2.0/commitments → commitments}/_base/BookCommitment.d.ts +0 -0
  482. /package/esm/typings/src/{book-2.0/commitments → commitments}/_base/ParsedCommitment.d.ts +0 -0
@@ -0,0 +1,109 @@
1
+ 'use client';
2
+
3
+ import { loginAction } from '@/src/app/actions';
4
+ import { Loader2, Lock, User } from 'lucide-react';
5
+ import { useState } from 'react';
6
+
7
+ type LoginFormProps = {
8
+ onSuccess?: () => void;
9
+ className?: string;
10
+ };
11
+
12
+ export function LoginForm(props: LoginFormProps) {
13
+ const { onSuccess, className } = props;
14
+ const [isLoading, setIsLoading] = useState(false);
15
+ const [error, setError] = useState<string | null>(null);
16
+
17
+ const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {
18
+ event.preventDefault();
19
+ setIsLoading(true);
20
+ setError(null);
21
+
22
+ try {
23
+ const formData = new FormData(event.currentTarget);
24
+ const result = await loginAction(formData);
25
+
26
+ if (result.success) {
27
+ if (onSuccess) {
28
+ onSuccess();
29
+ }
30
+ } else {
31
+ setError(result.message || 'An error occurred');
32
+ }
33
+ } catch (error) {
34
+ setError('An unexpected error occurred');
35
+ console.error(error);
36
+ } finally {
37
+ setIsLoading(false);
38
+ }
39
+ };
40
+
41
+ return (
42
+ <form onSubmit={handleSubmit} className={`space-y-4 ${className || ''}`}>
43
+ <div className="space-y-2">
44
+ <label
45
+ htmlFor="username"
46
+ className="text-sm font-medium text-gray-700 block"
47
+ >
48
+ Username
49
+ </label>
50
+ <div className="relative">
51
+ <div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none text-gray-400">
52
+ <User className="w-4 h-4" />
53
+ </div>
54
+ <input
55
+ id="username"
56
+ name="username"
57
+ type="text"
58
+ required
59
+ className="block w-full pl-10 h-10 rounded-md border border-gray-300 bg-white px-3 py-2 text-sm placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-promptbook-blue focus:border-transparent disabled:opacity-50"
60
+ placeholder="Enter your username"
61
+ />
62
+ </div>
63
+ </div>
64
+
65
+ <div className="space-y-2">
66
+ <label
67
+ htmlFor="password"
68
+ className="text-sm font-medium text-gray-700 block"
69
+ >
70
+ Password
71
+ </label>
72
+ <div className="relative">
73
+ <div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none text-gray-400">
74
+ <Lock className="w-4 h-4" />
75
+ </div>
76
+ <input
77
+ id="password"
78
+ name="password"
79
+ type="password"
80
+ required
81
+ className="block w-full pl-10 h-10 rounded-md border border-gray-300 bg-white px-3 py-2 text-sm placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-promptbook-blue focus:border-transparent disabled:opacity-50"
82
+ placeholder="Enter your password"
83
+ />
84
+ </div>
85
+ </div>
86
+
87
+ {error && (
88
+ <div className="p-3 text-sm text-red-500 bg-red-50 border border-red-200 rounded-md">
89
+ {error}
90
+ </div>
91
+ )}
92
+
93
+ <button
94
+ type="submit"
95
+ disabled={isLoading}
96
+ className="w-full inline-flex items-center justify-center rounded-md text-sm font-medium h-10 px-4 py-2 bg-promptbook-blue-dark text-white hover:bg-promptbook-blue-dark/90 focus:outline-none focus:ring-2 focus:ring-promptbook-blue focus:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none transition-colors"
97
+ >
98
+ {isLoading ? (
99
+ <>
100
+ <Loader2 className="mr-2 w-4 h-4 animate-spin" />
101
+ Logging in...
102
+ </>
103
+ ) : (
104
+ 'Log in'
105
+ )}
106
+ </button>
107
+ </form>
108
+ );
109
+ }
@@ -0,0 +1,17 @@
1
+ import Link from 'next/link';
2
+ import { ErrorPage } from '../ErrorPage/ErrorPage';
3
+
4
+ export function NotFoundPage() {
5
+ return (
6
+ <ErrorPage title="404 Not Found" message="The page you are looking for does not exist.">
7
+ <div className="flex justify-center">
8
+ <Link
9
+ href="/"
10
+ className="bg-blue-600 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline"
11
+ >
12
+ Go Home
13
+ </Link>
14
+ </div>
15
+ </ErrorPage>
16
+ );
17
+ }
@@ -0,0 +1,20 @@
1
+ import { DetailedHTMLProps, HTMLAttributes } from 'react';
2
+
3
+ type OpenMojiIconProps = DetailedHTMLProps<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement> & {
4
+ icon: string;
5
+ };
6
+
7
+ /**
8
+ * Renders an emoji using the OpenMoji black and white font
9
+ */
10
+ export function OpenMojiIcon({ icon, className, style, ...rest }: OpenMojiIconProps) {
11
+ return (
12
+ <span
13
+ className={className}
14
+ style={{ ...style, fontFamily: '"OpenMojiBlack", sans-serif' }}
15
+ {...rest}
16
+ >
17
+ {icon}
18
+ </span>
19
+ );
20
+ }
@@ -0,0 +1,38 @@
1
+ 'use client';
2
+
3
+ import type { ReactNode } from 'react';
4
+ import { useEffect, useState } from 'react';
5
+ import { createPortal } from 'react-dom';
6
+
7
+ type PortalProps = {
8
+ children: ReactNode;
9
+ /**
10
+ * Optional container id. Defaults to "portal-root".
11
+ * This allows reusing the Portal component for different layers if needed.
12
+ */
13
+ containerId?: string;
14
+ };
15
+
16
+ /**
17
+ * Generic portal component that renders children into a DOM node
18
+ * outside of the normal React tree (by default #portal-root).
19
+ *
20
+ * This is useful for modals/popups that should visually overlay the
21
+ * whole app, independent of where the triggering component lives.
22
+ */
23
+ export function Portal(props: PortalProps) {
24
+ const { children, containerId = 'portal-root' } = props;
25
+ const [container, setContainer] = useState<Element | null>(null);
26
+
27
+ useEffect(() => {
28
+ const element = document.getElementById(containerId);
29
+ setContainer(element);
30
+ }, [containerId]);
31
+
32
+ if (!container) {
33
+ // In SSR or before the DOM node exists, render nothing.
34
+ return null;
35
+ }
36
+
37
+ return createPortal(children, container);
38
+ }
@@ -0,0 +1,18 @@
1
+ 'use client';
2
+
3
+ import { OpenMojiIcon } from '../OpenMojiIcon/OpenMojiIcon';
4
+
5
+ export function PrintButton() {
6
+ return (
7
+ <button
8
+ onClick={() => window.print()}
9
+ className="fixed bottom-8 right-8 bg-blue-600 hover:bg-blue-700 text-white rounded-full p-4 shadow-lg transition-all hover:scale-105 print:hidden z-50 flex items-center justify-center gap-2 group"
10
+ title="Print documentation"
11
+ >
12
+ <OpenMojiIcon icon="🖨️" className="text-2xl" />
13
+ <span className="max-w-0 overflow-hidden group-hover:max-w-xs transition-all duration-300 ease-in-out whitespace-nowrap">
14
+ Print
15
+ </span>
16
+ </button>
17
+ );
18
+ }
@@ -0,0 +1,18 @@
1
+ export function PrintHeader({ title }: { title?: string }) {
2
+ return (
3
+ <div className="hidden print:block mb-8 border-b-2 border-blue-600 pb-4">
4
+ <div className="flex justify-between items-end">
5
+ <div>
6
+ <h1 className="text-3xl font-bold text-gray-900 font-poppins">Agents Server</h1>
7
+ <div className="text-sm text-gray-500 mt-1 flex items-center gap-1">
8
+ Powered by <span className="font-semibold text-blue-600">Promptbook</span>
9
+ </div>
10
+ </div>
11
+ {title && <h2 className="text-xl font-semibold text-gray-700">{title}</h2>}
12
+ </div>
13
+ <div className="text-xs text-gray-400 mt-2 text-right">
14
+ {new Date().toLocaleDateString()}
15
+ </div>
16
+ </div>
17
+ );
18
+ }
@@ -0,0 +1,141 @@
1
+ 'use client';
2
+
3
+ import { FormEvent, useState } from 'react';
4
+ import { Card } from '../Homepage/Card';
5
+ import { Section } from '../Homepage/Section';
6
+ import { useUsersAdmin } from './useUsersAdmin';
7
+
8
+ type UsersListProps = {
9
+ /**
10
+ * Whether the UI should allow creating new users.
11
+ *
12
+ * On the main `/` page this should be `false` so that users
13
+ * can only be created from the `/admin/users` page.
14
+ */
15
+ allowCreate?: boolean;
16
+ };
17
+
18
+ export function UsersList({ allowCreate = true }: UsersListProps) {
19
+ const { users, loading, error, createUser, deleteUser, toggleAdmin } = useUsersAdmin();
20
+
21
+ const [newUsername, setNewUsername] = useState('');
22
+ const [newPassword, setNewPassword] = useState('');
23
+ const [newIsAdmin, setNewIsAdmin] = useState(false);
24
+
25
+ const handleCreateUser = async (e: FormEvent) => {
26
+ e.preventDefault();
27
+
28
+ try {
29
+ await createUser({
30
+ username: newUsername,
31
+ password: newPassword,
32
+ isAdmin: newIsAdmin,
33
+ });
34
+
35
+ setNewUsername('');
36
+ setNewPassword('');
37
+ setNewIsAdmin(false);
38
+ } catch {
39
+ // Error is already handled and exposed via `error` state from the hook
40
+ }
41
+ };
42
+
43
+ const handleDeleteUser = async (username: string) => {
44
+ await deleteUser(username);
45
+ };
46
+
47
+ const handleToggleAdmin = async (username: string, currentIsAdmin: boolean) => {
48
+ await toggleAdmin(username, currentIsAdmin);
49
+ };
50
+
51
+ if (loading) return <div>Loading users...</div>;
52
+
53
+ return (
54
+ <div className="space-y-6">
55
+ {error && <div className="bg-red-100 text-red-700 p-3 rounded">{error}</div>}
56
+
57
+ <Section title={`Users (${users.length})`}>
58
+ {users.map((user) => (
59
+ <Card key={user.id}>
60
+ <div className="flex justify-between items-start">
61
+ <div>
62
+ <h3 className="text-xl font-semibold text-gray-900">{user.username}</h3>
63
+ {user.isAdmin && (
64
+ <span className="inline-block bg-blue-100 text-blue-800 text-xs px-2 py-1 rounded mt-1">
65
+ Admin
66
+ </span>
67
+ )}
68
+ <p className="text-gray-500 text-sm mt-2">
69
+ Created: {new Date(user.createdAt).toLocaleDateString()}
70
+ </p>
71
+ </div>
72
+ <div className="space-x-2">
73
+ <button
74
+ onClick={() => handleToggleAdmin(user.username, user.isAdmin)}
75
+ className="text-sm text-blue-600 hover:text-blue-800"
76
+ >
77
+ {user.isAdmin ? 'Remove Admin' : 'Make Admin'}
78
+ </button>
79
+ <button
80
+ onClick={() => handleDeleteUser(user.username)}
81
+ className="text-sm text-red-600 hover:text-red-800"
82
+ >
83
+ Delete
84
+ </button>
85
+ </div>
86
+ </div>
87
+ </Card>
88
+ ))}
89
+
90
+ {allowCreate && (
91
+ <div
92
+ id="create-user"
93
+ className="block p-6 bg-gray-50 rounded-lg border border-dashed border-gray-300"
94
+ >
95
+ <h3 className="text-lg font-semibold text-gray-700 mb-4">Add New User</h3>
96
+ <form onSubmit={handleCreateUser} className="space-y-3">
97
+ <div>
98
+ <input
99
+ type="text"
100
+ placeholder="Username"
101
+ value={newUsername}
102
+ onChange={(e) => setNewUsername(e.target.value)}
103
+ className="w-full p-2 border border-gray-300 rounded"
104
+ required
105
+ />
106
+ </div>
107
+ <div>
108
+ <input
109
+ type="password"
110
+ placeholder="Password"
111
+ value={newPassword}
112
+ onChange={(e) => setNewPassword(e.target.value)}
113
+ className="w-full p-2 border border-gray-300 rounded"
114
+ required
115
+ />
116
+ </div>
117
+ <div className="flex items-center">
118
+ <input
119
+ type="checkbox"
120
+ id="newIsAdmin"
121
+ checked={newIsAdmin}
122
+ onChange={(e) => setNewIsAdmin(e.target.checked)}
123
+ className="mr-2"
124
+ />
125
+ <label htmlFor="newIsAdmin" className="text-gray-700">
126
+ Is Admin
127
+ </label>
128
+ </div>
129
+ <button
130
+ type="submit"
131
+ className="w-full bg-blue-600 text-white p-2 rounded hover:bg-blue-700 transition-colors"
132
+ >
133
+ Create User
134
+ </button>
135
+ </form>
136
+ </div>
137
+ )}
138
+ </Section>
139
+ </div>
140
+ );
141
+ }
@@ -0,0 +1,139 @@
1
+ import { useCallback, useEffect, useState } from 'react';
2
+
3
+ export type AdminUser = {
4
+ id: number;
5
+ username: string;
6
+ createdAt: string;
7
+ updatedAt: string;
8
+ isAdmin: boolean;
9
+ };
10
+
11
+ type CreateUserPayload = {
12
+ username: string;
13
+ password: string;
14
+ isAdmin: boolean;
15
+ };
16
+
17
+ /**
18
+ * Admin users management hook
19
+ *
20
+ * Centralizes fetching and mutating users so it can be reused
21
+ * from multiple places (homepage, admin pages, header menu, etc.).
22
+ */
23
+ export function useUsersAdmin() {
24
+ const [users, setUsers] = useState<AdminUser[]>([]);
25
+ const [loading, setLoading] = useState(true);
26
+ const [error, setError] = useState<string | null>(null);
27
+
28
+ const fetchUsers = useCallback(async () => {
29
+ try {
30
+ setLoading(true);
31
+ setError(null);
32
+
33
+ const response = await fetch('/api/users');
34
+ if (!response.ok) {
35
+ if (response.status === 401) {
36
+ // Not authorized, maybe session expired or non-admin user
37
+ return;
38
+ }
39
+ throw new Error('Failed to fetch users');
40
+ }
41
+
42
+ const data = await response.json();
43
+ setUsers(data);
44
+ } catch (err) {
45
+ setError(err instanceof Error ? err.message : 'An error occurred');
46
+ } finally {
47
+ setLoading(false);
48
+ }
49
+ }, []);
50
+
51
+ useEffect(() => {
52
+ fetchUsers();
53
+ }, [fetchUsers]);
54
+
55
+ const createUser = useCallback(
56
+ async ({ username, password, isAdmin }: CreateUserPayload) => {
57
+ setError(null);
58
+
59
+ try {
60
+ const response = await fetch('/api/users', {
61
+ method: 'POST',
62
+ headers: { 'Content-Type': 'application/json' },
63
+ body: JSON.stringify({
64
+ username,
65
+ password,
66
+ isAdmin,
67
+ }),
68
+ });
69
+
70
+ if (!response.ok) {
71
+ const data = await response.json().catch(() => ({}));
72
+ throw new Error(data.error || 'Failed to create user');
73
+ }
74
+
75
+ await fetchUsers();
76
+ } catch (err) {
77
+ setError(err instanceof Error ? err.message : 'An error occurred');
78
+ throw err;
79
+ }
80
+ },
81
+ [fetchUsers],
82
+ );
83
+
84
+ const deleteUser = useCallback(
85
+ async (username: string) => {
86
+ if (!confirm(`Are you sure you want to delete user ${username}?`)) return;
87
+
88
+ try {
89
+ const response = await fetch(`/api/users/${username}`, {
90
+ method: 'DELETE',
91
+ });
92
+
93
+ if (!response.ok) {
94
+ const data = await response.json().catch(() => ({}));
95
+ throw new Error(data.error || 'Failed to delete user');
96
+ }
97
+
98
+ await fetchUsers();
99
+ } catch (err) {
100
+ setError(err instanceof Error ? err.message : 'An error occurred');
101
+ throw err;
102
+ }
103
+ },
104
+ [fetchUsers],
105
+ );
106
+
107
+ const toggleAdmin = useCallback(
108
+ async (username: string, currentIsAdmin: boolean) => {
109
+ try {
110
+ const response = await fetch(`/api/users/${username}`, {
111
+ method: 'PATCH',
112
+ headers: { 'Content-Type': 'application/json' },
113
+ body: JSON.stringify({ isAdmin: !currentIsAdmin }),
114
+ });
115
+
116
+ if (!response.ok) {
117
+ const data = await response.json().catch(() => ({}));
118
+ throw new Error(data.error || 'Failed to update user');
119
+ }
120
+
121
+ await fetchUsers();
122
+ } catch (err) {
123
+ setError(err instanceof Error ? err.message : 'An error occurred');
124
+ throw err;
125
+ }
126
+ },
127
+ [fetchUsers],
128
+ );
129
+
130
+ return {
131
+ users,
132
+ loading,
133
+ error,
134
+ fetchUsers,
135
+ createUser,
136
+ deleteUser,
137
+ toggleAdmin,
138
+ };
139
+ }
@@ -0,0 +1,55 @@
1
+ import {
2
+ NEXT_PUBLIC_VERCEL_BRANCH_URL,
3
+ NEXT_PUBLIC_VERCEL_ENV,
4
+ NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_LOGIN,
5
+ NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_NAME,
6
+ NEXT_PUBLIC_VERCEL_GIT_COMMIT_MESSAGE,
7
+ NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF,
8
+ NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA,
9
+ NEXT_PUBLIC_VERCEL_GIT_PREVIOUS_SHA,
10
+ NEXT_PUBLIC_VERCEL_GIT_PROVIDER,
11
+ NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID,
12
+ NEXT_PUBLIC_VERCEL_GIT_REPO_ID,
13
+ NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER,
14
+ NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG,
15
+ NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL,
16
+ NEXT_PUBLIC_VERCEL_TARGET_ENV,
17
+ NEXT_PUBLIC_VERCEL_URL,
18
+ } from '@/config';
19
+ import { TechInfoCard } from '../Homepage/TechInfoCard';
20
+
21
+ /**
22
+ * [♐️] Expose Vercel environment variables to indentify the deployment
23
+ */
24
+ export default function VercelDeploymentCard() {
25
+ return (
26
+ <TechInfoCard title="Vercel Deployment">
27
+ <p className="text-gray-600">NEXT_PUBLIC_VERCEL_ENV: {NEXT_PUBLIC_VERCEL_ENV}</p>
28
+ <p className="text-gray-600">NEXT_PUBLIC_VERCEL_TARGET_ENV: {NEXT_PUBLIC_VERCEL_TARGET_ENV}</p>
29
+ <p className="text-gray-600">NEXT_PUBLIC_VERCEL_URL: {NEXT_PUBLIC_VERCEL_URL}</p>
30
+ <p className="text-gray-600">NEXT_PUBLIC_VERCEL_BRANCH_URL: {NEXT_PUBLIC_VERCEL_BRANCH_URL}</p>
31
+ <p className="text-gray-600">
32
+ NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL: {NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL}
33
+ </p>
34
+ <p className="text-gray-600">NEXT_PUBLIC_VERCEL_GIT_PROVIDER: {NEXT_PUBLIC_VERCEL_GIT_PROVIDER}</p>
35
+ <p className="text-gray-600">NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER: {NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER}</p>
36
+ <p className="text-gray-600">NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG: {NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG}</p>
37
+ <p className="text-gray-600">NEXT_PUBLIC_VERCEL_GIT_REPO_ID: {NEXT_PUBLIC_VERCEL_GIT_REPO_ID}</p>
38
+ <p className="text-gray-600">NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA: {NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA}</p>
39
+ <p className="text-gray-600">
40
+ NEXT_PUBLIC_VERCEL_GIT_COMMIT_MESSAGE: {NEXT_PUBLIC_VERCEL_GIT_COMMIT_MESSAGE}
41
+ </p>
42
+ <p className="text-gray-600">NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF: {NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF}</p>
43
+ <p className="text-gray-600">
44
+ NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_NAME: {NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_NAME}
45
+ </p>
46
+ <p className="text-gray-600">
47
+ NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_LOGIN: {NEXT_PUBLIC_VERCEL_GIT_COMMIT_AUTHOR_LOGIN}
48
+ </p>
49
+ <p className="text-gray-600">NEXT_PUBLIC_VERCEL_GIT_PREVIOUS_SHA: {NEXT_PUBLIC_VERCEL_GIT_PREVIOUS_SHA}</p>
50
+ <p className="text-gray-600">
51
+ NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID: {NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID}
52
+ </p>
53
+ </TechInfoCard>
54
+ );
55
+ }
@@ -0,0 +1,28 @@
1
+ // Utility to generate content for robots.txt, security.txt, and humans.txt [DRY]
2
+
3
+ import { NEXT_PUBLIC_SITE_URL } from '@/config';
4
+
5
+ // Get base URL from environment or config
6
+ const baseUrl = NEXT_PUBLIC_SITE_URL?.href || process.env.PUBLIC_URL || 'https://ptbk.io';
7
+
8
+ export function generateRobotsTxt(): string {
9
+ return ['User-agent: *', `Sitemap: ${baseUrl}sitemap.xml`, ''].join('\n');
10
+ }
11
+
12
+ export function generateSecurityTxt(): string {
13
+ // See https://securitytxt.org/ for more fields
14
+ return [
15
+ `Contact: mailto:security@ptbk.io`,
16
+ `Expires: ${new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toISOString().split('T')[0]}`,
17
+ `Canonical: ${baseUrl}security.txt`,
18
+ '',
19
+ ].join('\n');
20
+ }
21
+
22
+ export function generateHumansTxt(): string {
23
+ return ['/* TEAM */', 'Developer: Promptbook Team', `Site: https://ptbk.io`, `Instance: ${baseUrl}`].join('\n');
24
+ }
25
+
26
+ /**
27
+ * TODO: Use `spaceTrim`
28
+ */
@@ -0,0 +1,36 @@
1
+ // Utility to append ?headless param if present in current URL
2
+ import { usePathname, useSearchParams } from 'next/navigation';
3
+ import Link, { LinkProps } from 'next/link';
4
+ import { useMemo } from 'react';
5
+
6
+ // Returns true if ?headless is present in current search params
7
+ export function useIsHeadless() {
8
+ const searchParams = useSearchParams();
9
+ return searchParams.has('headless');
10
+ }
11
+
12
+ // Appends ?headless to a given href if needed
13
+ export function appendHeadlessParam(href: string, isHeadless: boolean): string {
14
+ if (!isHeadless) return href;
15
+ if (href.includes('headless')) return href;
16
+ const hasQuery = href.includes('?');
17
+ return hasQuery ? `${href}&headless` : `${href}?headless`;
18
+ }
19
+
20
+ // Custom Link that preserves headless param
21
+ export function HeadlessLink({ href, children, ...rest }: LinkProps & { children: React.ReactNode } & React.AnchorHTMLAttributes<HTMLAnchorElement>) {
22
+ const isHeadless = useIsHeadless();
23
+ const finalHref = useMemo(() => appendHeadlessParam(String(href), isHeadless), [href, isHeadless]);
24
+ return (
25
+ <Link href={finalHref} {...rest}>
26
+ {children}
27
+ </Link>
28
+ );
29
+ }
30
+
31
+ import { useRouter } from "next/navigation";
32
+
33
+ // Helper for router.push
34
+ export function pushWithHeadless(router: ReturnType<typeof useRouter>, href: string, isHeadless: boolean) {
35
+ router.push(appendHeadlessParam(href, isHeadless));
36
+ }
@@ -0,0 +1,18 @@
1
+ import { $provideServer } from '../tools/$provideServer';
2
+ import { AgentsServerDatabase } from './schema';
3
+
4
+ /**
5
+ * Type representing the non-prefixed table names in the AgentsServerDatabase public schema
6
+ */
7
+ type string_table_name = keyof AgentsServerDatabase['public']['Tables'];
8
+
9
+ /**
10
+ * Get the Supabase table name with prefix if it is configured
11
+ *
12
+ * @param tableName - The original table name
13
+ * @returns The prefixed table name
14
+ */
15
+ export async function $getTableName<TTable extends string_table_name>(tableName: TTable): Promise<TTable> {
16
+ const { tablePrefix } = await $provideServer();
17
+ return `${tablePrefix}${tableName}` as TTable;
18
+ }
@@ -0,0 +1,29 @@
1
+ import { $isRunningInBrowser, $isRunningInNode, $isRunningInWebWorker } from '@promptbook-local/utils';
2
+ import type { SupabaseClient } from '@supabase/supabase-js';
3
+ import { $provideSupabaseForBrowser } from './$provideSupabaseForBrowser';
4
+ import { $provideSupabaseForServer } from './$provideSupabaseForServer';
5
+ import { $provideSupabaseForWorker } from './$provideSupabaseForWorker';
6
+ import { AgentsServerDatabase } from './schema';
7
+
8
+ /**
9
+ * Get supabase client in any environment
10
+ *
11
+ * Note: The client is cached, so it's safe to call this function multiple times
12
+ *
13
+ * @returns instance of supabase client
14
+ */
15
+ export function $provideSupabase(): SupabaseClient<AgentsServerDatabase> {
16
+ if ($isRunningInNode()) {
17
+ return $provideSupabaseForServer();
18
+ } else if ($isRunningInBrowser()) {
19
+ return $provideSupabaseForBrowser();
20
+ } else if ($isRunningInWebWorker()) {
21
+ return $provideSupabaseForWorker();
22
+ } else {
23
+ throw new Error('Unknown environment, cannot determine how to get Supabase client');
24
+ }
25
+ }
26
+
27
+ /**
28
+ * Note: [🎇] Promptbook Agents Server is not using Supabase in Browser so maybe remove this file
29
+ */