@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,109 @@
1
+ import { PROMPTBOOK_COLOR } from '@promptbook-local/core';
2
+ import { MetadataRoute } from 'next';
3
+ import { headers } from 'next/headers';
4
+ import { Color } from '../../../../src/utils/color/Color';
5
+ import { getMetadata } from '../database/getMetadata';
6
+ import { $provideServer } from '../tools/$provideServer';
7
+ import { getAgentProfile } from './agents/[agentName]/_utils';
8
+
9
+ export default async function manifest(): Promise<MetadataRoute.Manifest> {
10
+ const { publicUrl } = await $provideServer();
11
+ const serverName = (await getMetadata('SERVER_NAME')) || 'Promptbook Agents Server';
12
+ const serverDescription = (await getMetadata('SERVER_DESCRIPTION')) || 'Agents server powered by Promptbook';
13
+
14
+ const referer = (await headers()).get('referer') || '';
15
+ const isAgentManifest = referer.includes('/agents/');
16
+
17
+ if (!isAgentManifest) {
18
+ return {
19
+ name: serverName,
20
+ short_name: serverName,
21
+ description: serverDescription,
22
+ start_url: publicUrl.href,
23
+ display_override: ['fullscreen', 'minimal-ui'],
24
+ display: 'standalone',
25
+ background_color: PROMPTBOOK_COLOR.toHex(),
26
+ theme_color: PROMPTBOOK_COLOR.toHex(),
27
+ icons: [
28
+ // TODO: Create icons for the server homepage
29
+ ],
30
+ scope: publicUrl.href,
31
+ } satisfies MetadataRoute.Manifest;
32
+ }
33
+
34
+ const agentName = decodeURIComponent(referer.split('/agents/')[1]?.split('/')[0]);
35
+
36
+ try {
37
+ const agentProfile = await getAgentProfile(agentName);
38
+
39
+ const name = agentProfile.meta.fullname || agentProfile.agentName;
40
+ const short_name = agentProfile.agentName;
41
+ const description = agentProfile.meta.description || agentProfile.personaDescription || `Agent ${name}`;
42
+
43
+ // Extract brand color from meta
44
+ const brandColor = Color.fromSafe(agentProfile.meta.color || PROMPTBOOK_COLOR);
45
+ const theme_color = brandColor.toHex();
46
+ const background_color = '#ffffff';
47
+
48
+ const agentUrl = `${publicUrl.href}agents/${encodeURIComponent(agentName)}`;
49
+
50
+ const icons: MetadataRoute.Manifest['icons'] = [
51
+ {
52
+ src: `${agentUrl}/images/icon-256.png`,
53
+ sizes: '256x256',
54
+ type: 'image/png',
55
+ purpose: 'any',
56
+ },
57
+ {
58
+ src: `${agentUrl}/images/icon-256.png`,
59
+ sizes: '256x256',
60
+ type: 'image/png',
61
+ purpose: 'maskable',
62
+ },
63
+ ];
64
+
65
+ const screenshots: MetadataRoute.Manifest['screenshots'] = [
66
+ {
67
+ src: `${agentUrl}/images/screenshot-fullhd.png`,
68
+ sizes: '1920x1080',
69
+ type: 'image/png',
70
+ form_factor: 'wide',
71
+ label: 'Full HD Screenshot',
72
+ },
73
+ {
74
+ src: `${agentUrl}/images/screenshot-phone.png`,
75
+ sizes: '1080x1920',
76
+ type: 'image/png',
77
+ form_factor: 'narrow',
78
+ label: 'Phone Screenshot',
79
+ },
80
+ ];
81
+
82
+ return {
83
+ id: agentUrl,
84
+ name,
85
+ short_name,
86
+ description,
87
+ start_url: `${agentUrl}/chat`,
88
+ scope: agentUrl,
89
+ display_override: ['fullscreen', 'minimal-ui'],
90
+ display: 'standalone',
91
+ background_color,
92
+ theme_color,
93
+ icons,
94
+ screenshots,
95
+ } satisfies MetadataRoute.Manifest;
96
+ } catch (error) {
97
+ console.warn(`Failed to generate manifest for agent ${agentName}`, error);
98
+ return {
99
+ name: agentName,
100
+ short_name: agentName,
101
+ start_url: `${publicUrl.href}agents/${encodeURIComponent(agentName)}/chat`,
102
+ display_override: ['fullscreen', 'minimal-ui'],
103
+ display: 'standalone',
104
+ background_color: '#ffffff',
105
+ theme_color: PROMPTBOOK_COLOR.toHex(),
106
+ icons: [],
107
+ } satisfies MetadataRoute.Manifest;
108
+ }
109
+ }
@@ -0,0 +1,5 @@
1
+ import { NotFoundPage } from '../components/NotFoundPage/NotFoundPage';
2
+
3
+ export default function NotFound() {
4
+ return <NotFoundPage />;
5
+ }
@@ -0,0 +1,96 @@
1
+ 'use server';
2
+
3
+ import { getSingleLlmExecutionTools } from '@promptbook-local/core';
4
+ import moment from 'moment';
5
+ import { headers } from 'next/headers';
6
+ import { AboutPromptbookInformation } from '../../../../src/utils/misc/xAboutPromptbookInformation';
7
+ import { $sideEffect } from '../../../../src/utils/organization/$sideEffect';
8
+ import { AgentsList } from '../components/Homepage/AgentsList';
9
+ import { ExternalAgentsSectionClient } from '../components/Homepage/ExternalAgentsSectionClient';
10
+ import { ModelsSection } from '../components/Homepage/ModelsSection';
11
+ import { Section } from '../components/Homepage/Section';
12
+ import { TechInfoCard } from '../components/Homepage/TechInfoCard';
13
+ import { UsersList } from '../components/UsersList/UsersList';
14
+ import VercelDeploymentCard from '../components/VercelDeploymentCard/VercelDeploymentCard';
15
+ import { getLongRunningTask } from '../deamons/longRunningTask';
16
+ import { $provideAgentCollectionForServer } from '../tools/$provideAgentCollectionForServer';
17
+ import { $provideExecutionToolsForServer } from '../tools/$provideExecutionToolsForServer';
18
+ import { $provideServer } from '../tools/$provideServer';
19
+ import { isUserAdmin } from '../utils/isUserAdmin';
20
+
21
+ // Add calendar formats that include seconds
22
+ const calendarWithSeconds = {
23
+ sameDay: '[Today at] LTS',
24
+ nextDay: '[Tomorrow at] LTS',
25
+ nextWeek: 'dddd [at] LTS',
26
+ lastDay: '[Yesterday at] LTS',
27
+ lastWeek: '[Last] dddd [at] LTS',
28
+ sameElse: 'L [at] LTS',
29
+ };
30
+
31
+ export default async function HomePage() {
32
+ $sideEffect(/* Note: [🐶] This will ensure dynamic rendering of page and avoid Next.js pre-render */ headers());
33
+
34
+ const isAdmin = await isUserAdmin(); /* <- TODO: [👹] Here should be user permissions */
35
+
36
+ const collection = await $provideAgentCollectionForServer();
37
+ const agents = await collection.listAgents();
38
+
39
+ const longRunningTask = getLongRunningTask();
40
+
41
+ const executionTools = await $provideExecutionToolsForServer();
42
+ const models = await getSingleLlmExecutionTools(executionTools.llm).listModels();
43
+
44
+ const host = (await headers()).get('host') || 'unknown';
45
+
46
+ return (
47
+ <div className="min-h-screen bg-gradient-to-br from-blue-50 via-white to-purple-50">
48
+ <div className="container mx-auto px-4 py-16">
49
+ <AgentsList agents={[...agents]} isAdmin={isAdmin} />
50
+
51
+ <ExternalAgentsSectionClient />
52
+
53
+ {isAdmin && <UsersList allowCreate={false} />}
54
+
55
+ {isAdmin && (
56
+ <ModelsSection models={models} maxVisible={11} showViewAllLink />
57
+ )}
58
+
59
+ {isAdmin && (
60
+ <>
61
+ {/* Note: Shown in <AboutPromptbookInformation />: <h2 className="text-3xl text-gray-900 mt-16 mb-4">About Promptbook</h2> */}
62
+ <AboutPromptbookInformation />
63
+ </>
64
+ )}
65
+
66
+ {isAdmin && (
67
+ <Section title="Technical Information">
68
+ <TechInfoCard title={`Long running task ${longRunningTask.taskId}`}>
69
+ <p className="text-gray-600">Tick: {longRunningTask.tick}</p>
70
+ <p className="text-gray-600">
71
+ Created At: {moment(longRunningTask.createdAt).calendar(undefined, calendarWithSeconds)}
72
+ </p>
73
+ <p className="text-gray-600">
74
+ Updated At: {moment(longRunningTask.updatedAt).calendar(undefined, calendarWithSeconds)}
75
+ </p>
76
+ </TechInfoCard>
77
+
78
+ <VercelDeploymentCard />
79
+
80
+ <TechInfoCard title="HTTP Information">
81
+ <p className="text-gray-600">Host: {host}</p>
82
+ </TechInfoCard>
83
+
84
+ <TechInfoCard title="Server">
85
+ <pre>{JSON.stringify(await $provideServer(), null, 2)}</pre>
86
+ </TechInfoCard>
87
+ </Section>
88
+ )}
89
+ </div>
90
+ </div>
91
+ );
92
+ }
93
+
94
+ /**
95
+ * TODO: [🕋] Use here `AboutPromptbookInformation`
96
+ */
@@ -0,0 +1,40 @@
1
+ 'use client';
2
+
3
+ import { RefreshCcwIcon } from 'lucide-react';
4
+ import { useRouter } from 'next/navigation';
5
+ import { useState } from 'react';
6
+ import { restoreDeletedAgent } from './actions';
7
+
8
+ type RestoreAgentButtonProps = {
9
+ agentName: string;
10
+ };
11
+
12
+ export function RestoreAgentButton({ agentName }: RestoreAgentButtonProps) {
13
+ const router = useRouter();
14
+ const [isRestoring, setIsRestoring] = useState(false);
15
+
16
+ const handleRestore = async () => {
17
+ try {
18
+ setIsRestoring(true);
19
+ await restoreDeletedAgent(agentName);
20
+ router.refresh();
21
+ } catch (error) {
22
+ console.error('Failed to restore agent:', error);
23
+ alert('Failed to restore agent');
24
+ } finally {
25
+ setIsRestoring(false);
26
+ }
27
+ };
28
+
29
+ return (
30
+ <button
31
+ onClick={handleRestore}
32
+ disabled={isRestoring}
33
+ className="flex items-center gap-2 px-3 py-2 bg-white border border-gray-300 rounded hover:bg-gray-50 text-gray-700 disabled:opacity-50"
34
+ title="Restore agent"
35
+ >
36
+ <RefreshCcwIcon className={`w-4 h-4 ${isRestoring ? 'animate-spin' : ''}`} />
37
+ {isRestoring ? 'Restoring...' : 'Restore'}
38
+ </button>
39
+ );
40
+ }
@@ -0,0 +1,27 @@
1
+ 'use server';
2
+
3
+ import { $provideAgentCollectionForServer } from '@/src/tools/$provideAgentCollectionForServer';
4
+ import { revalidatePath } from 'next/cache';
5
+
6
+ export async function restoreDeletedAgent(agentName: string) {
7
+ const collection = await $provideAgentCollectionForServer();
8
+
9
+ // Find the latest history item for this agent
10
+ const history = await collection.listAgentHistory(agentName);
11
+
12
+ if (history.length === 0) {
13
+ throw new Error(`No history found for agent ${agentName}`);
14
+ }
15
+
16
+ const latestVersion = history[0];
17
+
18
+ if (!latestVersion) {
19
+ throw new Error(`No history found for agent ${agentName}`);
20
+ }
21
+
22
+ await collection.restoreAgent(latestVersion.id);
23
+
24
+ revalidatePath('/recycle-bin');
25
+ revalidatePath(`/agents/${agentName}`);
26
+ revalidatePath('/');
27
+ }
@@ -0,0 +1,58 @@
1
+ import { $provideAgentCollectionForServer } from '@/src/tools/$provideAgentCollectionForServer';
2
+ import { TrashIcon } from 'lucide-react';
3
+ import Link from 'next/link';
4
+ import { RestoreAgentButton } from './RestoreAgentButton';
5
+
6
+ export const metadata = {
7
+ title: 'Recycle Bin',
8
+ };
9
+
10
+ export default async function RecycleBinPage() {
11
+ const collection = await $provideAgentCollectionForServer();
12
+ const deletedAgents = await collection.listDeletedAgents();
13
+
14
+ return (
15
+ <div className="container mx-auto p-6 max-w-4xl">
16
+ <header className="flex items-center gap-4 mb-8">
17
+ <div className="bg-red-100 p-3 rounded-full">
18
+ <TrashIcon className="w-8 h-8 text-red-600" />
19
+ </div>
20
+ <div>
21
+ <h1 className="text-3xl font-bold text-gray-900">Recycle Bin</h1>
22
+ <p className="text-gray-600">Restore deleted agents from here.</p>
23
+ </div>
24
+ </header>
25
+
26
+ {deletedAgents.length === 0 ? (
27
+ <div className="text-center py-12 bg-gray-50 rounded-lg border border-dashed border-gray-300">
28
+ <p className="text-gray-500 text-lg">Recycle bin is empty</p>
29
+ <Link href="/" className="text-blue-600 hover:underline mt-2 inline-block">
30
+ Go back to agents
31
+ </Link>
32
+ </div>
33
+ ) : (
34
+ <div className="grid gap-4">
35
+ {deletedAgents.map((agentName) => (
36
+ <div
37
+ key={agentName}
38
+ className="bg-white p-4 rounded-lg shadow-sm border border-gray-200 flex items-center justify-between hover:shadow-md transition-shadow"
39
+ >
40
+ <div className="flex items-center gap-3">
41
+ <div className="w-10 h-10 bg-gray-100 rounded-full flex items-center justify-center text-gray-500 font-bold text-lg">
42
+ {agentName.charAt(0).toUpperCase()}
43
+ </div>
44
+ <div>
45
+ <h3 className="font-semibold text-lg text-gray-900">{agentName}</h3>
46
+ <p className="text-sm text-gray-500">Deleted agent</p>
47
+ </div>
48
+ </div>
49
+ <div className="flex gap-2">
50
+ <RestoreAgentButton agentName={agentName} />
51
+ </div>
52
+ </div>
53
+ ))}
54
+ </div>
55
+ )}
56
+ </div>
57
+ );
58
+ }
@@ -0,0 +1,33 @@
1
+ import { ShieldAlert } from 'lucide-react';
2
+ import Link from 'next/link';
3
+
4
+ export default function RestrictedPage() {
5
+ return (
6
+ <div className="flex flex-col items-center justify-center min-h-[calc(100vh-4rem)] p-4 text-center">
7
+ <div className="bg-red-50 p-6 rounded-full mb-6">
8
+ <ShieldAlert className="w-12 h-12 text-red-600" />
9
+ </div>
10
+ <h1 className="text-2xl font-bold text-gray-900 mb-2">Access Restricted</h1>
11
+ <p className="text-gray-600 max-w-md mb-8">
12
+ This server is restricted to authorized users or specific IP addresses.
13
+ Please log in to continue or contact the administrator if you believe this is an error.
14
+ </p>
15
+
16
+ {/* The Login button in the header is available, so we can just point to it or instruct the user */}
17
+ <div className="p-4 bg-blue-50 text-blue-800 rounded-lg max-w-md text-sm">
18
+ <p>
19
+ <strong>Tip:</strong> Use the <strong>Log in</strong> button in the top right corner to access your account.
20
+ </p>
21
+ </div>
22
+
23
+ <div className="mt-8 flex gap-4">
24
+ <Link
25
+ href="/"
26
+ className="px-4 py-2 bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-md transition-colors"
27
+ >
28
+ Go Home
29
+ </Link>
30
+ </div>
31
+ </div>
32
+ );
33
+ }
@@ -0,0 +1 @@
1
+ In this folder we are testing miscellaneous things related to Promptbook Agents Server
@@ -0,0 +1,37 @@
1
+ import { ImageResponse } from 'next/og';
2
+
3
+ export const runtime = 'edge';
4
+
5
+ export const alt = 'Agent Profile';
6
+ export const size = {
7
+ width: 1200,
8
+ height: 630,
9
+ };
10
+
11
+ export const contentType = 'image/png';
12
+
13
+ export default async function Image() {
14
+ return new ImageResponse(
15
+ (
16
+ <div
17
+ style={{
18
+ display: 'flex',
19
+ flexDirection: 'row',
20
+ width: '100%',
21
+ height: '100%',
22
+ backgroundColor: 'white',
23
+ }}
24
+ >
25
+ <h1>Hello</h1>
26
+ </div>
27
+ ),
28
+ {
29
+ ...size,
30
+ emoji: 'openmoji',
31
+ },
32
+ );
33
+ }
34
+
35
+ /**
36
+ * TODO: [webpack.cache.PackFileCacheStrategy] Serializing big strings (126kiB) impacts deserialization performance (consider using Buffer instead and decode when needed)
37
+ */
@@ -0,0 +1,22 @@
1
+ import { NEXT_PUBLIC_SITE_URL } from '@/config';
2
+ import type { Metadata } from 'next';
3
+
4
+ export const metadata: Metadata = {
5
+ metadataBase: NEXT_PUBLIC_SITE_URL,
6
+ title: 'Test OG Image',
7
+ description: 'Testing og-image',
8
+ };
9
+
10
+ export default function TestPage() {
11
+ return (
12
+ <div className="min-h-screen flex items-center justify-center bg-gray-100">
13
+ <div className="bg-white p-8 rounded-lg shadow-md max-w-md w-full">
14
+ <h1 className="text-3xl font-bold text-red-600 mb-4 text-center">Test page</h1>
15
+ <p className="text-gray-700 mb-6 text-center">Testing og-image</p>
16
+ <p className="text-gray-600 text-sm text-center mt-4">
17
+ View page source or share this URL to see the OG image in action
18
+ </p>
19
+ </div>
20
+ </div>
21
+ );
22
+ }
@@ -0,0 +1,123 @@
1
+ 'use client';
2
+
3
+ import { useState } from 'react';
4
+ import { useRouter } from 'next/navigation';
5
+
6
+ type AuthControlsProps = {
7
+ initialUser: { username: string; isAdmin: boolean } | null;
8
+ };
9
+
10
+ export function AuthControls({ initialUser }: AuthControlsProps) {
11
+ const router = useRouter();
12
+ const [user, setUser] = useState(initialUser);
13
+ const [isLoginOpen, setIsLoginOpen] = useState(false);
14
+ const [username, setUsername] = useState('');
15
+ const [password, setPassword] = useState('');
16
+ const [error, setError] = useState<string | null>(null);
17
+
18
+ const handleLogin = async (e: React.FormEvent) => {
19
+ e.preventDefault();
20
+ setError(null);
21
+
22
+ try {
23
+ const response = await fetch('/api/auth/login', {
24
+ method: 'POST',
25
+ headers: { 'Content-Type': 'application/json' },
26
+ body: JSON.stringify({ username, password }),
27
+ });
28
+
29
+ if (!response.ok) {
30
+ const data = await response.json();
31
+ throw new Error(data.error || 'Login failed');
32
+ }
33
+
34
+ // Reload page to reflect state
35
+ window.location.reload();
36
+ } catch (err) {
37
+ setError(err instanceof Error ? err.message : 'An error occurred');
38
+ }
39
+ };
40
+
41
+ const handleLogout = async () => {
42
+ try {
43
+ await fetch('/api/auth/logout', { method: 'POST' });
44
+ window.location.reload();
45
+ } catch (err) {
46
+ console.error('Logout failed', err);
47
+ }
48
+ };
49
+
50
+ if (user) {
51
+ return (
52
+ <div className="flex items-center space-x-4">
53
+ <span className="text-gray-600">
54
+ Logged in as <strong>{user.username}</strong>
55
+ {user.isAdmin && <span className="ml-2 bg-blue-100 text-blue-800 text-xs px-2 py-1 rounded">Admin</span>}
56
+ </span>
57
+ <button
58
+ onClick={handleLogout}
59
+ className="bg-gray-200 text-gray-700 px-4 py-2 rounded hover:bg-gray-300 transition-colors"
60
+ >
61
+ Logout
62
+ </button>
63
+ </div>
64
+ );
65
+ }
66
+
67
+ return (
68
+ <div>
69
+ {!isLoginOpen ? (
70
+ <button
71
+ onClick={() => setIsLoginOpen(true)}
72
+ className="bg-blue-600 text-white px-4 py-2 rounded hover:bg-blue-700 transition-colors"
73
+ >
74
+ Login
75
+ </button>
76
+ ) : (
77
+ <div className="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50">
78
+ <div className="bg-white p-6 rounded-lg shadow-xl w-full max-w-md">
79
+ <h2 className="text-2xl font-bold mb-4">Login</h2>
80
+ {error && <div className="bg-red-100 text-red-700 p-3 rounded mb-4">{error}</div>}
81
+ <form onSubmit={handleLogin} className="space-y-4">
82
+ <div>
83
+ <label className="block text-gray-700 mb-1">Username</label>
84
+ <input
85
+ type="text"
86
+ value={username}
87
+ onChange={(e) => setUsername(e.target.value)}
88
+ className="w-full p-2 border border-gray-300 rounded"
89
+ required
90
+ />
91
+ </div>
92
+ <div>
93
+ <label className="block text-gray-700 mb-1">Password</label>
94
+ <input
95
+ type="password"
96
+ value={password}
97
+ onChange={(e) => setPassword(e.target.value)}
98
+ className="w-full p-2 border border-gray-300 rounded"
99
+ required
100
+ />
101
+ </div>
102
+ <div className="flex justify-end space-x-2">
103
+ <button
104
+ type="button"
105
+ onClick={() => setIsLoginOpen(false)}
106
+ className="px-4 py-2 text-gray-600 hover:text-gray-800"
107
+ >
108
+ Cancel
109
+ </button>
110
+ <button
111
+ type="submit"
112
+ className="px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700"
113
+ >
114
+ Login
115
+ </button>
116
+ </div>
117
+ </form>
118
+ </div>
119
+ </div>
120
+ )}
121
+ </div>
122
+ );
123
+ }
@@ -0,0 +1,41 @@
1
+ 'use client';
2
+
3
+ import { X } from 'lucide-react';
4
+ import { ChangePasswordForm } from '../ChangePasswordForm/ChangePasswordForm';
5
+ import { Portal } from '../Portal/Portal';
6
+
7
+ type ChangePasswordDialogProps = {
8
+ isOpen: boolean;
9
+ onClose: () => void;
10
+ };
11
+
12
+ export function ChangePasswordDialog(props: ChangePasswordDialogProps) {
13
+ const { isOpen, onClose } = props;
14
+
15
+ if (!isOpen) {
16
+ return null;
17
+ }
18
+
19
+ return (
20
+ <Portal>
21
+ <div className="fixed inset-0 z-[9999] flex items-center justify-center bg-black/50 backdrop-blur-sm animate-in fade-in duration-200">
22
+ <div className="relative w-full max-w-md bg-white rounded-lg shadow-lg border border-gray-200 p-6 animate-in zoom-in-95 duration-200">
23
+ <button
24
+ onClick={onClose}
25
+ className="absolute top-4 right-4 text-gray-400 hover:text-gray-500 transition-colors"
26
+ >
27
+ <X className="w-5 h-5" />
28
+ <span className="sr-only">Close</span>
29
+ </button>
30
+
31
+ <div className="mb-6">
32
+ <h2 className="text-xl font-semibold text-gray-900">Change Password</h2>
33
+ <p className="text-sm text-gray-500 mt-1">Update your password to keep your account secure</p>
34
+ </div>
35
+
36
+ <ChangePasswordForm onSuccess={onClose} />
37
+ </div>
38
+ </div>
39
+ </Portal>
40
+ );
41
+ }