@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,40 @@
1
+ 'use client';
2
+
3
+ import { string_agent_url } from '@promptbook-local/types';
4
+ import { useState } from 'react';
5
+
6
+ export function AgentUrlCopy({ agentUrl }: { agentUrl: string_agent_url }) {
7
+ const [copied, setCopied] = useState(false);
8
+
9
+ const handleCopy = async () => {
10
+ try {
11
+ await navigator.clipboard.writeText(agentUrl);
12
+ setCopied(true);
13
+ setTimeout(() => setCopied(false), 2000);
14
+ } catch (err) {
15
+ console.error('Failed to copy:', err);
16
+ }
17
+ };
18
+
19
+ return (
20
+ <div className="w-full">
21
+ <label className="block text-xs text-gray-500 font-semibold mb-1">Agent Page URL</label>
22
+ <div className="flex gap-2 items-center">
23
+ <input
24
+ type="text"
25
+ value={agentUrl}
26
+ readOnly
27
+ className="flex-1 px-2 py-1 border rounded text-sm bg-gray-50 text-gray-700"
28
+ onFocus={(e) => e.target.select()}
29
+ />
30
+ <button
31
+ type="button"
32
+ className="px-2 py-1 text-white rounded text-xs font-semibold transition hover:opacity-90"
33
+ onClick={handleCopy}
34
+ >
35
+ {copied ? '✓ Copied' : 'Copy'}
36
+ </button>
37
+ </div>
38
+ </div>
39
+ );
40
+ }
@@ -0,0 +1,63 @@
1
+ 'use client';
2
+
3
+ import { useState } from 'react';
4
+ import { $clearAgentChatFeedback } from '../../../utils/chatFeedbackAdmin';
5
+
6
+ type ClearAgentChatFeedbackButtonProps = {
7
+ /**
8
+ * Agent name for which the chat feedback should be cleared.
9
+ */
10
+ agentName: string;
11
+
12
+ /**
13
+ * Optional callback invoked after successful clearing.
14
+ */
15
+ onCleared?: () => void;
16
+ };
17
+
18
+ /**
19
+ * Admin-only button to clear chat feedback for a specific agent.
20
+ *
21
+ * This is intentionally small and self-contained so it can be reused
22
+ * from different admin-oriented surfaces without duplicating logic.
23
+ */
24
+ export function ClearAgentChatFeedbackButton({ agentName, onCleared }: ClearAgentChatFeedbackButtonProps) {
25
+ const [loading, setLoading] = useState(false);
26
+ const [error, setError] = useState<string | null>(null);
27
+
28
+ const handleClick = async () => {
29
+ if (!agentName) return;
30
+
31
+ const confirmed = window.confirm(
32
+ `Are you sure you want to permanently delete all feedback for agent "${agentName}"?`,
33
+ );
34
+ if (!confirmed) return;
35
+
36
+ try {
37
+ setLoading(true);
38
+ setError(null);
39
+ await $clearAgentChatFeedback(agentName);
40
+ if (onCleared) {
41
+ onCleared();
42
+ }
43
+ } catch (err) {
44
+ setError(err instanceof Error ? err.message : 'Failed to clear chat feedback');
45
+ } finally {
46
+ setLoading(false);
47
+ }
48
+ };
49
+
50
+ return (
51
+ <div className="flex flex-col gap-2">
52
+ <button
53
+ type="button"
54
+ onClick={handleClick}
55
+ disabled={loading}
56
+ className="inline-flex items-center justify-center whitespace-nowrap rounded-md border border-red-300 bg-white px-3 py-1.5 text-xs font-semibold text-red-700 shadow-sm hover:bg-red-50 disabled:cursor-not-allowed disabled:opacity-60"
57
+ >
58
+ {loading ? 'Clearing feedback…' : 'Clear chat feedback'}
59
+ </button>
60
+ {error && <div className="text-xs text-red-600">{error}</div>}
61
+ </div>
62
+ );
63
+ }
@@ -0,0 +1,63 @@
1
+ 'use client';
2
+
3
+ import { useState } from 'react';
4
+ import { $clearAgentChatHistory } from '../../../utils/chatHistoryAdmin';
5
+
6
+ type ClearAgentChatHistoryButtonProps = {
7
+ /**
8
+ * Agent name for which the chat history should be cleared.
9
+ */
10
+ agentName: string;
11
+
12
+ /**
13
+ * Optional callback invoked after successful clearing.
14
+ */
15
+ onCleared?: () => void;
16
+ };
17
+
18
+ /**
19
+ * Admin-only button to clear chat history for a specific agent.
20
+ *
21
+ * This is intentionally small and self-contained so it can be reused
22
+ * from different admin-oriented surfaces without duplicating logic.
23
+ */
24
+ export function ClearAgentChatHistoryButton({ agentName, onCleared }: ClearAgentChatHistoryButtonProps) {
25
+ const [loading, setLoading] = useState(false);
26
+ const [error, setError] = useState<string | null>(null);
27
+
28
+ const handleClick = async () => {
29
+ if (!agentName) return;
30
+
31
+ const confirmed = window.confirm(
32
+ `Are you sure you want to permanently delete all chat history for agent "${agentName}"?`,
33
+ );
34
+ if (!confirmed) return;
35
+
36
+ try {
37
+ setLoading(true);
38
+ setError(null);
39
+ await $clearAgentChatHistory(agentName);
40
+ if (onCleared) {
41
+ onCleared();
42
+ }
43
+ } catch (err) {
44
+ setError(err instanceof Error ? err.message : 'Failed to clear chat history');
45
+ } finally {
46
+ setLoading(false);
47
+ }
48
+ };
49
+
50
+ return (
51
+ <div className="flex flex-col gap-2">
52
+ <button
53
+ type="button"
54
+ onClick={handleClick}
55
+ disabled={loading}
56
+ className="inline-flex items-center justify-center whitespace-nowrap rounded-md border border-red-300 bg-white px-3 py-1.5 text-xs font-semibold text-red-700 shadow-sm hover:bg-red-50 disabled:cursor-not-allowed disabled:opacity-60"
57
+ >
58
+ {loading ? 'Clearing history…' : 'Clear chat history'}
59
+ </button>
60
+ {error && <div className="text-xs text-red-600">{error}</div>}
61
+ </div>
62
+ );
63
+ }
@@ -0,0 +1,41 @@
1
+ 'use client';
2
+
3
+ import { CopyIcon } from 'lucide-react';
4
+ import { useRouter } from 'next/navigation';
5
+
6
+ type CloneAgentButtonProps = {
7
+ agentName: string;
8
+ };
9
+
10
+ export function CloneAgentButton({ agentName }: CloneAgentButtonProps) {
11
+ const router = useRouter();
12
+
13
+ const handleClone = async () => {
14
+ if (!window.confirm(`Clone agent "${agentName}"?`)) return;
15
+
16
+ try {
17
+ const response = await fetch(`/api/agents/${encodeURIComponent(agentName)}/clone`, { method: 'POST' });
18
+
19
+ if (!response.ok) {
20
+ throw new Error('Failed to clone agent');
21
+ }
22
+
23
+ const newAgent = await response.json();
24
+ router.push(`/${newAgent.agentName}`);
25
+ router.refresh();
26
+ } catch (error) {
27
+ alert('Failed to clone agent');
28
+ console.error(error);
29
+ }
30
+ };
31
+
32
+ return (
33
+ <button
34
+ onClick={handleClone}
35
+ className="inline-flex items-center justify-center whitespace-nowrap rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-semibold text-gray-700 shadow-sm hover:bg-gray-50"
36
+ >
37
+ <CopyIcon className="mr-2 w-3 h-3" />
38
+ Clone
39
+ </button>
40
+ );
41
+ }
@@ -0,0 +1,44 @@
1
+ 'use client';
2
+
3
+ import { useState } from 'react';
4
+
5
+ type CopyFieldProps = {
6
+ label: string;
7
+ value: string;
8
+ };
9
+
10
+ export function CopyField({ label, value }: CopyFieldProps) {
11
+ const [copied, setCopied] = useState(false);
12
+
13
+ const handleCopy = async () => {
14
+ try {
15
+ await navigator.clipboard.writeText(value);
16
+ setCopied(true);
17
+ setTimeout(() => setCopied(false), 2000);
18
+ } catch (err) {
19
+ console.error('Failed to copy:', err);
20
+ }
21
+ };
22
+
23
+ return (
24
+ <div className="w-full">
25
+ <label className="block text-xs text-gray-500 font-semibold mb-1">{label}</label>
26
+ <div className="flex gap-2 items-center">
27
+ <input
28
+ type="text"
29
+ value={value}
30
+ readOnly
31
+ className="flex-1 px-2 py-1 border rounded text-sm bg-gray-50 text-gray-700 focus:outline-none focus:ring-1 focus:ring-blue-500"
32
+ onFocus={(e) => e.target.select()}
33
+ />
34
+ <button
35
+ type="button"
36
+ className="px-3 py-1 bg-gray-800 text-white rounded text-xs font-semibold transition hover:bg-gray-700 active:bg-gray-900"
37
+ onClick={handleCopy}
38
+ >
39
+ {copied ? '✓ Copied' : 'Copy'}
40
+ </button>
41
+ </div>
42
+ </div>
43
+ );
44
+ }
@@ -0,0 +1,74 @@
1
+ 'use client';
2
+
3
+ import { TODO_any } from '@promptbook-local/types';
4
+ import { ShoppingBagIcon } from 'lucide-react';
5
+ import { useCallback, useEffect, useState } from 'react';
6
+
7
+ type BeforeInstallPromptEvent = Event & {
8
+ prompt: () => Promise<void>;
9
+ userChoice: Promise<{ outcome: 'accepted' | 'dismissed'; platform: string }>;
10
+ };
11
+
12
+ export function InstallPwaButton() {
13
+ const [installPromptEvent, setInstallPromptEvent] = useState<BeforeInstallPromptEvent | null>(null);
14
+ const [isInstalled, setIsInstalled] = useState(false);
15
+ const [hasPrompted, setHasPrompted] = useState(false);
16
+
17
+ useEffect(() => {
18
+ function handleBeforeInstallPrompt(e: Event) {
19
+ // Some browsers (Chrome) fire this event when PWA is installable
20
+ e.preventDefault();
21
+ setInstallPromptEvent(e as BeforeInstallPromptEvent);
22
+ }
23
+
24
+ function updateInstalledStatus() {
25
+ const mediaMatch = window.matchMedia('(display-mode: standalone)');
26
+ const standalone = mediaMatch.matches || (window.navigator as TODO_any).standalone === true;
27
+ setIsInstalled(standalone);
28
+ }
29
+
30
+ window.addEventListener('beforeinstallprompt', handleBeforeInstallPrompt);
31
+ updateInstalledStatus();
32
+ window.matchMedia('(display-mode: standalone)').addEventListener('change', updateInstalledStatus);
33
+
34
+ return () => {
35
+ window.removeEventListener('beforeinstallprompt', handleBeforeInstallPrompt);
36
+ window.matchMedia('(display-mode: standalone)').removeEventListener('change', updateInstalledStatus);
37
+ };
38
+ }, []);
39
+
40
+ const onInstall = useCallback(async () => {
41
+ if (!installPromptEvent) return;
42
+ try {
43
+ installPromptEvent.prompt();
44
+ setHasPrompted(true);
45
+ const choice = await installPromptEvent.userChoice.catch(() => null);
46
+ if (choice?.outcome === 'accepted') {
47
+ setIsInstalled(true);
48
+ }
49
+ } finally {
50
+ // Clear stored event so button hides if dismissed
51
+ setInstallPromptEvent(null);
52
+ }
53
+ }, [installPromptEvent]);
54
+
55
+ if (isInstalled || (!installPromptEvent && hasPrompted)) return null;
56
+
57
+ return (
58
+ <button
59
+ type="button"
60
+ onClick={onInstall}
61
+ className="inline-flex items-center justify-center whitespace-nowrap rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-semibold text-gray-700 shadow-sm hover:bg-gray-50"
62
+ style={{
63
+ opacity: installPromptEvent ? 1 : 0.5,
64
+ cursor: installPromptEvent ? 'pointer' : 'wait',
65
+ }}
66
+ aria-label="Install App"
67
+ disabled={!installPromptEvent}
68
+ >
69
+ {/* Simple icon substitute: download arrow */}
70
+ <ShoppingBagIcon className="mr-2 w-3 h-3" />
71
+ Install
72
+ </button>
73
+ );
74
+ }
@@ -0,0 +1,90 @@
1
+ 'use client';
2
+
3
+ import { AgentBasicInformation } from '@promptbook-local/types';
4
+ import { XIcon } from 'lucide-react';
5
+ import { useEffect } from 'react';
6
+ import { AgentQrCode } from './AgentQrCode';
7
+
8
+ type QrCodeModalProps = {
9
+ isOpen: boolean;
10
+ onClose: () => void;
11
+ agentName: string;
12
+ meta: AgentBasicInformation['meta'];
13
+ personaDescription: string;
14
+ agentUrl: string;
15
+ agentEmail: string;
16
+ brandColorHex: string;
17
+ };
18
+
19
+ export function QrCodeModal({
20
+ isOpen,
21
+ onClose,
22
+ agentName,
23
+ meta,
24
+ personaDescription,
25
+ agentUrl,
26
+ agentEmail,
27
+ brandColorHex,
28
+ }: QrCodeModalProps) {
29
+ useEffect(() => {
30
+ if (isOpen) {
31
+ document.body.style.overflow = 'hidden';
32
+ } else {
33
+ document.body.style.overflow = '';
34
+ }
35
+ return () => {
36
+ document.body.style.overflow = '';
37
+ };
38
+ }, [isOpen]);
39
+
40
+ useEffect(() => {
41
+ function handleEscape(event: KeyboardEvent) {
42
+ if (event.key === 'Escape') {
43
+ onClose();
44
+ }
45
+ }
46
+
47
+ if (isOpen) {
48
+ document.addEventListener('keydown', handleEscape);
49
+ }
50
+ return () => document.removeEventListener('keydown', handleEscape);
51
+ }, [isOpen, onClose]);
52
+
53
+ if (!isOpen) return null;
54
+
55
+ return (
56
+ <div
57
+ className="fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm"
58
+ onClick={onClose}
59
+ >
60
+ <div
61
+ className="relative bg-white rounded-2xl shadow-2xl p-8 max-w-sm w-full mx-4 animate-in zoom-in-95 duration-200"
62
+ onClick={(e) => e.stopPropagation()}
63
+ >
64
+ <button
65
+ onClick={onClose}
66
+ className="absolute top-4 right-4 p-2 rounded-full hover:bg-gray-100 transition-colors"
67
+ aria-label="Close"
68
+ >
69
+ <XIcon className="w-5 h-5 text-gray-500" />
70
+ </button>
71
+
72
+ <h3 className="text-xl font-semibold text-gray-900 mb-6 text-center">Scan to Chat</h3>
73
+
74
+ <div className="flex justify-center">
75
+ <AgentQrCode
76
+ agentName={agentName}
77
+ meta={meta}
78
+ personaDescription={personaDescription}
79
+ agentUrl={agentUrl}
80
+ agentEmail={agentEmail}
81
+ />
82
+ </div>
83
+
84
+ <p className="mt-6 text-sm text-gray-500 text-center">
85
+ Scan this QR code to start chatting with {(meta.fullname as string) || agentName}
86
+ </p>
87
+ </div>
88
+ </div>
89
+ );
90
+ }
@@ -0,0 +1,24 @@
1
+ 'use client';
2
+
3
+ import { useEffect } from 'react';
4
+
5
+ type ServiceWorkerRegisterProps = {
6
+ scope: string;
7
+ };
8
+
9
+ export function ServiceWorkerRegister({ scope }: ServiceWorkerRegisterProps) {
10
+ useEffect(() => {
11
+ if ('serviceWorker' in navigator) {
12
+ navigator.serviceWorker
13
+ .register('/sw.js', { scope })
14
+ .then((registration) => {
15
+ console.log('Service Worker registered with scope:', registration.scope);
16
+ })
17
+ .catch((error) => {
18
+ console.error('Service Worker registration failed:', error);
19
+ });
20
+ }
21
+ }, [scope]);
22
+
23
+ return null;
24
+ }
@@ -0,0 +1 @@
1
+ TODO: [🚗] Components and pages here should be just tiny UI wraper around proper agent logic and conponents
@@ -0,0 +1,19 @@
1
+ import { $provideAgentCollectionForServer } from '@/src/tools/$provideAgentCollectionForServer';
2
+ import { parseAgentSource } from '@promptbook-local/core';
3
+
4
+ export const AGENT_ACTIONS = ['Emails', 'Web chat', 'Read documents', 'Browser', 'WhatsApp', '<Coding/>'];
5
+
6
+ export async function getAgentName(params: Promise<{ agentName: string }>) {
7
+ const { agentName } = await params;
8
+ return decodeURIComponent(agentName);
9
+ }
10
+
11
+ export async function getAgentProfile(agentName: string) {
12
+ const collection = await $provideAgentCollectionForServer();
13
+ const agentSource = await collection.getAgentSource(agentName);
14
+ return parseAgentSource(agentSource);
15
+ }
16
+
17
+ /**
18
+ * TODO: Split to multiple files
19
+ */
@@ -0,0 +1,80 @@
1
+ import {
2
+ BookOpenIcon,
3
+ CodeIcon,
4
+ GlobeIcon,
5
+ HistoryIcon,
6
+ LinkIcon,
7
+ MessageSquareIcon,
8
+ NotebookPenIcon,
9
+ } from 'lucide-react';
10
+ import type { ComponentType } from 'react';
11
+
12
+ type AgentLink = {
13
+ title: string;
14
+ href: string;
15
+ icon: ComponentType<{ className?: string }>;
16
+ description?: string;
17
+ target?: '_blank' | '_self';
18
+ rel?: string;
19
+ };
20
+
21
+ export const getAgentLinks = (agentName: string): AgentLink[] => {
22
+ const encodedName = encodeURIComponent(agentName);
23
+ return [
24
+ {
25
+ title: 'Chat with Agent',
26
+ href: `/agents/${encodedName}`,
27
+ icon: MessageSquareIcon,
28
+ description: 'Direct interface to converse with the agent.',
29
+ },
30
+ {
31
+ title: 'Edit Book',
32
+ href: `/agents/${encodedName}/book`,
33
+ icon: NotebookPenIcon,
34
+ description: "Edit the agent's knowledge book.",
35
+ },
36
+ {
37
+ title: 'Integration',
38
+ href: `/agents/${encodedName}/integration`,
39
+ icon: CodeIcon,
40
+ description: 'Learn how to integrate this agent into your applications.',
41
+ },
42
+ {
43
+ title: 'History & Feedback',
44
+ href: `/agents/${encodedName}/history`,
45
+ icon: HistoryIcon,
46
+ description: 'View past conversations and provide feedback.',
47
+ },
48
+ {
49
+ title: 'All Links',
50
+ href: `/agents/${encodedName}/links`,
51
+ icon: LinkIcon,
52
+ description: 'Signpost & Links',
53
+ },
54
+ {
55
+ title: 'Website Integration',
56
+ href: `/agents/${encodedName}/website-integration`,
57
+ icon: GlobeIcon,
58
+ description: 'Embed the agent chat widget directly into your React application.',
59
+ },
60
+ ];
61
+ };
62
+
63
+ export const getAgentExternalLinks = (): AgentLink[] => [
64
+ {
65
+ title: 'Promptbook Studio',
66
+ href: 'https://promptbook.studio',
67
+ icon: BookOpenIcon,
68
+ description: 'Create and manage your own agents',
69
+ target: '_blank',
70
+ rel: 'noopener noreferrer',
71
+ },
72
+ {
73
+ title: 'GitHub Repository',
74
+ href: 'https://github.com/webgptorg/promptbook',
75
+ icon: CodeIcon,
76
+ description: 'Star us and contribute to the project',
77
+ target: '_blank',
78
+ rel: 'noopener noreferrer',
79
+ },
80
+ ];
@@ -0,0 +1,67 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+
3
+ export const dynamic = 'force-dynamic';
4
+
5
+ export async function GET(
6
+ request: NextRequest,
7
+ { params }: { params: Promise<{ agentName: string }> }
8
+ ) {
9
+ try {
10
+ const { agentName } = await params;
11
+ // agentName is likely the federated server URL (e.g., "https://s6.ptbk.io")
12
+ // It comes decoded from the URL params if it was encoded in the request path
13
+
14
+ let serverUrl = agentName;
15
+
16
+ // If the serverUrl doesn't look like a URL, it might be just a hostname or something else
17
+ // But the requirement says we look for /agents/[federated-server]/api/agents
18
+ // The client will likely pass the full URL or hostname.
19
+ // We'll assume if it doesn't start with http, we might need to prepend it, or it's invalid.
20
+ // However, the current federated servers list contains full URLs.
21
+
22
+ // If it was somehow double encoded or something, we might need to handle it, but standard Next.js behavior is single decode.
23
+
24
+ if (!serverUrl.startsWith('http')) {
25
+ // Maybe it is just a hostname?
26
+ // Let's try to assume https if missing
27
+ if (serverUrl.includes('.')) {
28
+ serverUrl = `https://${serverUrl}`;
29
+ } else {
30
+ return NextResponse.json(
31
+ { error: 'Invalid federated server URL' },
32
+ { status: 400 }
33
+ );
34
+ }
35
+ }
36
+
37
+ // Normalize URL (remove trailing slash)
38
+ serverUrl = serverUrl.replace(/\/$/, '');
39
+
40
+ const response = await fetch(`${serverUrl}/api/agents`, {
41
+ // Forward relevant headers if necessary, or just basic fetch
42
+ headers: {
43
+ 'Content-Type': 'application/json',
44
+ // Add any other needed headers
45
+ },
46
+ next: { revalidate: 600 }, // Cache for 10 minutes
47
+ });
48
+
49
+ if (!response.ok) {
50
+ console.warn(`Proxy failed to fetch agents from ${serverUrl}: ${response.status} ${response.statusText}`);
51
+ return NextResponse.json(
52
+ { error: `Failed to fetch from ${serverUrl}` },
53
+ { status: response.status }
54
+ );
55
+ }
56
+
57
+ const data = await response.json();
58
+ return NextResponse.json(data);
59
+
60
+ } catch (error) {
61
+ console.error('Proxy error fetching federated agents:', error);
62
+ return NextResponse.json(
63
+ { error: 'Internal Server Error' },
64
+ { status: 500 }
65
+ );
66
+ }
67
+ }