nubot-lite 0.1.0 → 0.1.2

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 (272) hide show
  1. package/README.md +6 -5
  2. package/lib/api.mjs +6 -2
  3. package/lib/cloudflare.mjs +13 -12
  4. package/lib/commands/init.mjs +260 -251
  5. package/package.json +1 -1
  6. package/template/.claude/skills/nubot-lite/SKILL.md +7 -1
  7. package/template/panel/PANEL.md +1 -1
  8. package/template/panel/assets/AgendarDemoPage-Bn_BvTp1.js +1 -0
  9. package/template/panel/assets/{AgentDatasetsPage-D8vQhRWO.js → AgentDatasetsPage-wLtBtSB2.js} +2 -2
  10. package/template/panel/assets/AgentKnowledgeGroupsPage-BGHNFj-e.js +1 -0
  11. package/template/panel/assets/AgentListPage-F3ja9_o_.js +1 -0
  12. package/template/panel/assets/AgentQaTrainingPage-CojiU8_W.js +1 -0
  13. package/template/panel/assets/AiAgentWhatsappPage-Bn_BvTp1.js +1 -0
  14. package/template/panel/assets/BlogPage-Bn_BvTp1.js +1 -0
  15. package/template/panel/assets/BlogPostPage-Bn_BvTp1.js +1 -0
  16. package/template/panel/assets/CalculadoraTiempoRespuestaPage-Bn_BvTp1.js +1 -0
  17. package/template/panel/assets/{CampaignDetailPage-DFMctNEj.js → CampaignDetailPage-DUNnckvn.js} +1 -1
  18. package/template/panel/assets/CampaignsPage-CS60yZBd.js +1 -0
  19. package/template/panel/assets/ChannelSelector-C7R9zqrt.js +1 -0
  20. package/template/panel/assets/ChatbotParaWhatsappPage-Bn_BvTp1.js +1 -0
  21. package/template/panel/assets/ConfirmModal-B27OBQdm.js +1 -0
  22. package/template/panel/assets/ContactsPage-CvoDlFUN.js +14 -0
  23. package/template/panel/assets/CreateAgentPage-CbhikMY1.js +19 -0
  24. package/template/panel/assets/CreditLimitBanner-j72L7jgK.js +1 -0
  25. package/template/panel/assets/CrmParaWhatsappPage-Bn_BvTp1.js +1 -0
  26. package/template/panel/assets/DashboardPage-BGWkXY7W.js +1 -0
  27. package/template/panel/assets/{EmojiPicker-BToAe-MT.js → EmojiPicker-ByTMSXTj.js} +1 -1
  28. package/template/panel/assets/{EventTypesSettingsPage-DCedeQzM.js → EventTypesSettingsPage-CLpO1VBL.js} +1 -1
  29. package/template/panel/assets/GeneradorEnlacesPage-Bn_BvTp1.js +1 -0
  30. package/template/panel/assets/GeneradorQrWhatsappPage-Bn_BvTp1.js +1 -0
  31. package/template/panel/assets/{GeneralSettingsPage-B04ozcHb.js → GeneralSettingsPage-CY-5aGgL.js} +1 -1
  32. package/template/panel/assets/GoogleCalendarManagePage-oX7DuErV.js +1 -0
  33. package/template/panel/assets/{InvitationAcceptancePage-BPgtBFl5.js → InvitationAcceptancePage-BYllrAYs.js} +1 -1
  34. package/template/panel/assets/IrAlSitioPublico-Bn_BvTp1.js +1 -0
  35. package/template/panel/assets/LiteAiUsagePage-Dzm8jBL2.js +1 -0
  36. package/template/panel/assets/{LiteSetupPage-42rgAdnG.js → LiteSetupPage-CMSAur_e.js} +1 -1
  37. package/template/panel/assets/MarkdownRenderer-C3TD9KYa.js +3 -0
  38. package/template/panel/assets/MediaProcessingService-CG2DdSyN.js +1 -0
  39. package/template/panel/assets/NewCampaignPage-BfSEd075.js +1 -0
  40. package/template/panel/assets/OrdersConfigPage-BAKKaX0L.js +1 -0
  41. package/template/panel/assets/OrdersPage-CXiPOCXP.js +1 -0
  42. package/template/panel/assets/{PasswordStrengthIndicator-HZK_oU0W.js → PasswordStrengthIndicator-4h-Y0s2r.js} +1 -1
  43. package/template/panel/assets/PlantillaDetailPage-Bn_BvTp1.js +1 -0
  44. package/template/panel/assets/PlantillasIndexPage-Bn_BvTp1.js +1 -0
  45. package/template/panel/assets/PrivacyPolicy-Bn_BvTp1.js +1 -0
  46. package/template/panel/assets/{ProductManagementPage-DNM7DEgt.js → ProductManagementPage-CRkNTicv.js} +4 -4
  47. package/template/panel/assets/PublicFormPage-BxPxJ3Pq.js +1 -0
  48. package/template/panel/assets/QaForm-Px-cmakA.js +5 -0
  49. package/template/panel/assets/SelectPlanPage-Gyo5C1Hq.js +1 -0
  50. package/template/panel/assets/SignatureEditor-DIhmrXow.js +1 -0
  51. package/template/panel/assets/{TagSelector-ChoKzvjW.js → TagSelector-o6tVpRs9.js} +1 -1
  52. package/template/panel/assets/TagsSettingsPage-DT8MfW1H.js +2 -0
  53. package/template/panel/assets/TeamsPage-BuWuGxZo.js +1 -0
  54. package/template/panel/assets/WhatsappBusinessApiPage-Bn_BvTp1.js +1 -0
  55. package/template/panel/assets/WhatsappMultiagentePage-Bn_BvTp1.js +1 -0
  56. package/template/panel/assets/{account-D2ltXC_U.js → account-G3WXxisG.js} +1 -1
  57. package/template/panel/assets/{admin-lEgqZTsa.js → admin-CSMlOMR8.js} +1 -1
  58. package/template/panel/assets/{agent.service-BcAkMU7j.js → agent.service-BE2rJG_o.js} +1 -1
  59. package/template/panel/assets/{alert-dialog-D8P69s-m.js → alert-dialog-gzZZoAiu.js} +2 -2
  60. package/template/panel/assets/{alert-DI3GBLi1.js → alert-seLKo73M.js} +1 -1
  61. package/template/panel/assets/api-keys-BF33GS2N.js +1 -0
  62. package/template/panel/assets/{archive-LUe5bKi5.js → archive-CxUKRJwu.js} +1 -1
  63. package/template/panel/assets/{arrow-left-BeDdBs_Q.js → arrow-left-CI7mH7bD.js} +1 -1
  64. package/template/panel/assets/{arrow-up-BiBq8Pvx.js → arrow-up-DJzXCc8_.js} +1 -1
  65. package/template/panel/assets/{arrow-up-down-CaG2BONN.js → arrow-up-down-DkSCsCjR.js} +1 -1
  66. package/template/panel/assets/audit-slljESxh.js +1 -0
  67. package/template/panel/assets/{authService-Cbm8LdlJ.js → authService-CtvlzCDa.js} +1 -1
  68. package/template/panel/assets/{avatar-CILB1zwS.js → avatar-BXhSKQGY.js} +1 -1
  69. package/template/panel/assets/{billing-IVLNopU2.js → billing-Cy2XUBeY.js} +1 -1
  70. package/template/panel/assets/{brain-B9z7jZ7A.js → brain-BmrjUpsb.js} +1 -1
  71. package/template/panel/assets/{calendar-CIHhMjNy.js → calendar-Bu0aDtW1.js} +1 -1
  72. package/template/panel/assets/{calendar-days-BwJfOz8M.js → calendar-days-CXtOZxOF.js} +1 -1
  73. package/template/panel/assets/{card-DcKsxjXK.js → card-DdbmSh-v.js} +1 -1
  74. package/template/panel/assets/{checkbox-pcbjC0d3.js → checkbox-CuJh5AMO.js} +1 -1
  75. package/template/panel/assets/{chevrons-up-down-DC-BWTrj.js → chevrons-up-down-DNNdNhV8.js} +1 -1
  76. package/template/panel/assets/{circle-check-big-DzPo5zZX.js → circle-check-big-BOZQ_2Kv.js} +1 -1
  77. package/template/panel/assets/{circle-x-BwMKIs8b.js → circle-x-decmm7ip.js} +1 -1
  78. package/template/panel/assets/cloud-B3m0_VpL.js +1 -0
  79. package/template/panel/assets/{code-BMAyHFJe.js → code-C-UH-ZD-.js} +1 -1
  80. package/template/panel/assets/{cog-M7j64wa2.js → cog-BS-_-U4F.js} +1 -1
  81. package/template/panel/assets/{collapsible-B22t1J-V.js → collapsible-Ce_8EeFJ.js} +1 -1
  82. package/template/panel/assets/{command-COdSmSIB.js → command-aHRTWaYV.js} +1 -1
  83. package/template/panel/assets/connectionsService-BJg4S1e9.js +1 -0
  84. package/template/panel/assets/contactsApi-DI5dcMLo.js +1 -0
  85. package/template/panel/assets/creditErrors-DSbswjsG.js +1 -0
  86. package/template/panel/assets/{database-C1qvt3Py.js → database-Brb7Omak.js} +1 -1
  87. package/template/panel/assets/{datapath-C12uI_pT.js → datapath-CHeKabeh.js} +1 -1
  88. package/template/panel/assets/{datetime-BuZosCVk.js → datetime-D72Uxhjs.js} +1 -1
  89. package/template/panel/assets/{download-CiVQHPeB.js → download-CyfdxFCW.js} +1 -1
  90. package/template/panel/assets/{ellipsis-CMEJnUfK.js → ellipsis-GLu0u4ze.js} +1 -1
  91. package/template/panel/assets/{ellipsis-vertical-DTqbEYYp.js → ellipsis-vertical-CskGwbgN.js} +1 -1
  92. package/template/panel/assets/email-inbox-kyJ2qML5.js +1 -0
  93. package/template/panel/assets/es-BDgg6unH.js +1 -0
  94. package/template/panel/assets/external-link-w7K66ae2.js +1 -0
  95. package/template/panel/assets/{eye-HfQCUjxJ.js → eye-CR5C6hVv.js} +1 -1
  96. package/template/panel/assets/{eye-off-v1Z_lKS0.js → eye-off-CBiJXw4j.js} +1 -1
  97. package/template/panel/assets/facebook-D0SQMea2.js +1 -0
  98. package/template/panel/assets/{file-DMzjdlTL.js → file-CTZ8-xmL.js} +1 -1
  99. package/template/panel/assets/file-braces-54MsOnzo.js +1 -0
  100. package/template/panel/assets/file-spreadsheet-DpekIaV8.js +1 -0
  101. package/template/panel/assets/{folder-D0GKakGp.js → folder-DxTHNhQ_.js} +1 -1
  102. package/template/panel/assets/{folder-open-DQFc4qTJ.js → folder-open-BM4rA96e.js} +1 -1
  103. package/template/panel/assets/format-BG1mN6C0.js +1 -0
  104. package/template/panel/assets/{grip-vertical-FN-eTC2C.js → grip-vertical-CS-dU0tJ.js} +1 -1
  105. package/template/panel/assets/{hash-BoTE56iw.js → hash-ByrjK6gt.js} +1 -1
  106. package/template/panel/assets/{help-center-B1MAIBWA.js → help-center-fmvvoAkD.js} +1 -1
  107. package/template/panel/assets/{history-DhHayxUg.js → history-97D1GT_9.js} +1 -1
  108. package/template/panel/assets/house-CXew5LB-.js +1 -0
  109. package/template/panel/assets/{index-DsyZ_FlA.js → index-43NA2pdZ.js} +23 -23
  110. package/template/panel/assets/index-BG59-Kyv.js +6 -0
  111. package/template/panel/assets/{index-DUnioqCT.js → index-BGvtgHY3.js} +1 -1
  112. package/template/panel/assets/index-BL76lyPt.js +2 -0
  113. package/template/panel/assets/index-BUA9lP4J.js +1 -0
  114. package/template/panel/assets/index-Bfvq4Q3v.js +1 -0
  115. package/template/panel/assets/index-CK793Wzl.css +1 -0
  116. package/template/panel/assets/{index-BTxe6gLJ.js → index-ChrvveQm.js} +1 -1
  117. package/template/panel/assets/index-CoJIvJ6y.js +1 -0
  118. package/template/panel/assets/{index-CMEeV9dO.js → index-CsV1u-Y7.js} +2 -2
  119. package/template/panel/assets/{index-BiSc3WD9.js → index-DIxON2Dm.js} +1 -1
  120. package/template/panel/assets/index-DtoSJTyl.js +1 -0
  121. package/template/panel/assets/index-FBuxpbGF.js +36 -0
  122. package/template/panel/assets/index-YR5X3nd4.js +1 -0
  123. package/template/panel/assets/{instagram-CC7iYt7V.js → instagram-Bm17x-Fs.js} +1 -1
  124. package/template/panel/assets/interactiveLimits-C7Sx7s9W.js +1 -0
  125. package/template/panel/assets/landing-CEUFhLJ9.js +1 -0
  126. package/template/panel/assets/{layout-grid-Cm6hfBWZ.js → layout-grid-DN-t2Wjd.js} +1 -1
  127. package/template/panel/assets/{list-BKc6EXnV.js → list-B0uLKf1b.js} +1 -1
  128. package/template/panel/assets/{map-pin-CPmcofD3.js → map-pin-COYHwobx.js} +1 -1
  129. package/template/panel/assets/{maximize-2-WdbM7Kdx.js → maximize-2-SbmXBBYe.js} +1 -1
  130. package/template/panel/assets/mediaLimits-CAYdWqeQ.js +1 -0
  131. package/template/panel/assets/mediaValidation-Bg0xHQrv.js +1 -0
  132. package/template/panel/assets/message-circle-tNSzOeOW.js +1 -0
  133. package/template/panel/assets/{message-square-Dfn16oHc.js → message-square-B1_OirdW.js} +1 -1
  134. package/template/panel/assets/{meta-templates-C7yEjSOI.js → meta-templates-hhDdxBOR.js} +1 -1
  135. package/template/panel/assets/metadataSchemasApi-BmJko2eC.js +1 -0
  136. package/template/panel/assets/{mic-CT4vyzLZ.js → mic-ClFq9hMZ.js} +1 -1
  137. package/template/panel/assets/minus-vh4a51Mn.js +1 -0
  138. package/template/panel/assets/{music-Cu8AQMFp.js → music-CgtkroYi.js} +1 -1
  139. package/template/panel/assets/{page-components-o2TF52HV.js → page-components-DXOKtt_M.js} +1 -1
  140. package/template/panel/assets/{pages-Cj5Qd1QO.js → pages-BcYbyh_-.js} +1 -1
  141. package/template/panel/assets/{pages-B7digtXi.js → pages-BuibyrnC.js} +1 -1
  142. package/template/panel/assets/{pages-Dw7dvmaS.js → pages-CGXCBdff.js} +1 -1
  143. package/template/panel/assets/paperclip-DVRbzE7C.js +1 -0
  144. package/template/panel/assets/{pen-line-DLnhkIuw.js → pen-line-Cr0YFjAs.js} +1 -1
  145. package/template/panel/assets/{pencil-Cx8u1N8t.js → pencil-aqjc7AWb.js} +1 -1
  146. package/template/panel/assets/{popover-MyuU-yAK.js → popover-cWIhNmod.js} +1 -1
  147. package/template/panel/assets/{power-CdR2OkIX.js → power-CVFzhVJx.js} +1 -1
  148. package/template/panel/assets/{product.service-CRLZOQsr.js → product.service-FClit10f.js} +1 -1
  149. package/template/panel/assets/products.types-nZIsk2w8.js +1 -0
  150. package/template/panel/assets/proxy-CvX2KM2u.js +1 -0
  151. package/template/panel/assets/{save-Dua2yhWl.js → save-mwkHDnDL.js} +1 -1
  152. package/template/panel/assets/scroll-area-CSCo4HHB.js +1 -0
  153. package/template/panel/assets/{select-DlB_BbfM.js → select-DCY_lg9j.js} +1 -1
  154. package/template/panel/assets/{send-Dxmdupsl.js → send-DBQH77K9.js} +1 -1
  155. package/template/panel/assets/{separator-CPT3uVRM.js → separator-DznqP68l.js} +1 -1
  156. package/template/panel/assets/{settings-2-C-c8ECWW.js → settings-2-PhKPMrsj.js} +1 -1
  157. package/template/panel/assets/shield-alert-Fv3j9Wbv.js +1 -0
  158. package/template/panel/assets/{skeleton-B0zh8s_y.js → skeleton-CN6xlRXP.js} +1 -1
  159. package/template/panel/assets/{slider-CY71MXOW.js → slider-D0QB_Lme.js} +1 -1
  160. package/template/panel/assets/{square-BuGqLxJB.js → square-Dm5VC71z.js} +1 -1
  161. package/template/panel/assets/{square-pen-CJajoyrm.js → square-pen-Dbn7xmc-.js} +1 -1
  162. package/template/panel/assets/{star-Cuegk1GF.js → star-BMD3HmS6.js} +1 -1
  163. package/template/panel/assets/stat-card-W7s_-fHW.js +1 -0
  164. package/template/panel/assets/storage.api-C0ZJBoSz.js +20 -0
  165. package/template/panel/assets/{switch-ODBa0fCT.js → switch-C7XmAU1c.js} +1 -1
  166. package/template/panel/assets/{table-CvSELOPi.js → table-7NGq0kRw.js} +1 -1
  167. package/template/panel/assets/{tabs-DqXhuAr6.js → tabs-BGCKrmVw.js} +1 -1
  168. package/template/panel/assets/{tags-By_tlh_r.js → tags-HU2fuPFH.js} +1 -1
  169. package/template/panel/assets/{target-DEuCdeUI.js → target-CG_g4_Fj.js} +1 -1
  170. package/template/panel/assets/{textarea-BYtcLsMD.js → textarea-B1anutjq.js} +1 -1
  171. package/template/panel/assets/{ticket-CWba7G1i.js → ticket-CHs1Xojr.js} +1 -1
  172. package/template/panel/assets/{trash-2-Du2vmQCH.js → trash-2-D_kmHMwn.js} +1 -1
  173. package/template/panel/assets/{trending-up-Ba4HSvuW.js → trending-up-BnHeLWFs.js} +1 -1
  174. package/template/panel/assets/{upload-C7TwpdyA.js → upload-CQg4_W5r.js} +1 -1
  175. package/template/panel/assets/{useAiAgentsQuery-Bm6aRHKj.js → useAiAgentsQuery-CXo6TmU6.js} +1 -1
  176. package/template/panel/assets/useFunnelStats-Bk8wTET5.js +1 -0
  177. package/template/panel/assets/useFunnelsQuery-vDrahaDr.js +1 -0
  178. package/template/panel/assets/{useInfiniteQuery-BXUM1Z9V.js → useInfiniteQuery-D0sFT2K2.js} +1 -1
  179. package/template/panel/assets/{useMutation-a5tIBvQY.js → useMutation-0ypmz8SO.js} +1 -1
  180. package/template/panel/assets/useOrgSyncedFetch-FSgwRhpR.js +1 -0
  181. package/template/panel/assets/usePipelineBoardQuery-BysscZXI.js +9 -0
  182. package/template/panel/assets/{useUploadConfig-BuiF0X-3.js → useUploadConfig-CvVmSc6S.js} +1 -1
  183. package/template/panel/assets/{user-DwCALzIG.js → user-l48WDfDH.js} +1 -1
  184. package/template/panel/assets/{user-plus-BiUjcHil.js → user-plus-CWaaUP-O.js} +1 -1
  185. package/template/panel/assets/{video-VfwKgB6z.js → video-CILE66CA.js} +1 -1
  186. package/template/panel/assets/{volume-2-C5DMdOVq.js → volume-2-DfFqN0dw.js} +1 -1
  187. package/template/panel/assets/wrench-Dcbk4scY.js +1 -0
  188. package/template/panel/index.html +2 -2
  189. package/template/panel/version.json +2 -2
  190. package/template/worker/migrations/0006_ai_usage.sql +33 -0
  191. package/template/worker/migrations/0007_channels.sql +18 -0
  192. package/template/worker/src/agent/pricing.ts +37 -0
  193. package/template/worker/src/agent/prompt.ts +137 -134
  194. package/template/worker/src/agent/run.ts +350 -243
  195. package/template/worker/src/agent/sandbox.ts +2 -2
  196. package/template/worker/src/agent/tools.ts +463 -463
  197. package/template/worker/src/channels/accounts.ts +177 -0
  198. package/template/worker/src/channels/zernio.ts +161 -148
  199. package/template/worker/src/inbox/contacts.ts +2 -0
  200. package/template/worker/src/inbox/store.ts +199 -187
  201. package/template/worker/src/index.ts +2 -0
  202. package/template/worker/src/nubot/account.ts +163 -178
  203. package/template/worker/src/nubot/ai-usage.ts +197 -0
  204. package/template/worker/src/nubot/channels.ts +159 -0
  205. package/template/worker/src/nubot/contacts.ts +387 -386
  206. package/template/worker/src/nubot/funnels.ts +672 -670
  207. package/template/worker/src/nubot/inbox.ts +623 -616
  208. package/template/worker/src/nubot/index.ts +127 -122
  209. package/template/worker/src/nubot/mappers.ts +12 -5
  210. package/template/worker/src/routes/channels.ts +13 -0
  211. package/template/worker/src/routes/system.ts +110 -100
  212. package/template/worker/src/webhooks/zernio.ts +154 -125
  213. package/template/panel/assets/AgendarDemoPage-DOiS40FL.js +0 -1
  214. package/template/panel/assets/AgentKnowledgeGroupsPage-DEPS1lsk.js +0 -1
  215. package/template/panel/assets/AgentListPage-DqY9rze5.js +0 -1
  216. package/template/panel/assets/AgentQaTrainingPage-Ecis7xoc.js +0 -1
  217. package/template/panel/assets/AiAgentWhatsappPage-DOiS40FL.js +0 -1
  218. package/template/panel/assets/AiMetricsPage-DEPS1lsk.js +0 -1
  219. package/template/panel/assets/BlogPage-DOiS40FL.js +0 -1
  220. package/template/panel/assets/BlogPostPage-DOiS40FL.js +0 -1
  221. package/template/panel/assets/CalculadoraTiempoRespuestaPage-DOiS40FL.js +0 -1
  222. package/template/panel/assets/CampaignsPage-CLRaXGlj.js +0 -1
  223. package/template/panel/assets/ChannelSelector-q9tTirNo.js +0 -1
  224. package/template/panel/assets/ChatbotParaWhatsappPage-DOiS40FL.js +0 -1
  225. package/template/panel/assets/ConfirmModal-W7VUI3Z_.js +0 -1
  226. package/template/panel/assets/ContactsPage-CsOFsOPw.js +0 -14
  227. package/template/panel/assets/CreateAgentPage-Ifxx6_UX.js +0 -19
  228. package/template/panel/assets/CreditLimitBanner-J49rSVEn.js +0 -1
  229. package/template/panel/assets/CrmParaWhatsappPage-DOiS40FL.js +0 -1
  230. package/template/panel/assets/DashboardPage-3Viy83dd.js +0 -1
  231. package/template/panel/assets/GeneradorEnlacesPage-DOiS40FL.js +0 -1
  232. package/template/panel/assets/GeneradorQrWhatsappPage-DOiS40FL.js +0 -1
  233. package/template/panel/assets/IrAlSitioPublico-DOiS40FL.js +0 -1
  234. package/template/panel/assets/MediaProcessingService-glHGiE_o.js +0 -1
  235. package/template/panel/assets/NewCampaignPage-Cw99m3W8.js +0 -1
  236. package/template/panel/assets/OrdersConfigPage-B6BfM3lf.js +0 -1
  237. package/template/panel/assets/OrdersPage-Du7CJjty.js +0 -1
  238. package/template/panel/assets/PlantillaDetailPage-DOiS40FL.js +0 -1
  239. package/template/panel/assets/PlantillasIndexPage-DOiS40FL.js +0 -1
  240. package/template/panel/assets/PrivacyPolicy-DOiS40FL.js +0 -1
  241. package/template/panel/assets/PublicFormPage-DDb4OXEM.js +0 -1
  242. package/template/panel/assets/QaForm-BDboHNKo.js +0 -5
  243. package/template/panel/assets/SelectPlanPage-DALaf8E5.js +0 -1
  244. package/template/panel/assets/TagsSettingsPage-DYCKveQq.js +0 -2
  245. package/template/panel/assets/TeamsPage-DPUcRdlh.js +0 -1
  246. package/template/panel/assets/WhatsappBusinessApiPage-DOiS40FL.js +0 -1
  247. package/template/panel/assets/WhatsappMultiagentePage-DOiS40FL.js +0 -1
  248. package/template/panel/assets/api-keys-B0UQNR5E.js +0 -1
  249. package/template/panel/assets/audit-BrdHcTNl.js +0 -1
  250. package/template/panel/assets/connections-Dqwd01UI.js +0 -1
  251. package/template/panel/assets/connectionsService-BsJf8pFz.js +0 -3
  252. package/template/panel/assets/contactsApi-B851NME_.js +0 -1
  253. package/template/panel/assets/creditErrors-CrpkwwUI.js +0 -1
  254. package/template/panel/assets/email-inbox-LbGeQCty.js +0 -1
  255. package/template/panel/assets/es-BG480iA5.js +0 -1
  256. package/template/panel/assets/facebook-RxMBweMB.js +0 -1
  257. package/template/panel/assets/index-B183O0S5.js +0 -1
  258. package/template/panel/assets/index-BJCPaymI.css +0 -1
  259. package/template/panel/assets/index-BtxJGfLL.js +0 -6
  260. package/template/panel/assets/index-Bz-ixwph.js +0 -1
  261. package/template/panel/assets/index-CjQSv8hF.js +0 -2
  262. package/template/panel/assets/index-D3vkHHjD.js +0 -9
  263. package/template/panel/assets/index-D4WhIkMN.js +0 -1
  264. package/template/panel/assets/interactiveLimits-CfLJ1O4_.js +0 -1
  265. package/template/panel/assets/landing-If3oVsS0.js +0 -1
  266. package/template/panel/assets/mediaValidation-BR-ZOj5w.js +0 -1
  267. package/template/panel/assets/minus-CyVEzdqL.js +0 -1
  268. package/template/panel/assets/products.types-46xSxBS8.js +0 -1
  269. package/template/panel/assets/scroll-area-CavEOIyz.js +0 -1
  270. package/template/panel/assets/shield-alert-04pSYngI.js +0 -1
  271. package/template/panel/assets/storage.api-CFU3KJNp.js +0 -20
  272. package/template/panel/assets/useFunnelStats-tvjpmWIC.js +0 -1
@@ -1,134 +1,137 @@
1
- // Prompt por bloques.
2
- // Orden pensado para la caché de Anthropic: lo que no cambia entre conversaciones
3
- // va en `system`; lo que cambia (hora, datos del cliente) va como mensaje de sistema al final.
4
-
5
- import type Anthropic from "@anthropic-ai/sdk";
6
- import type { MessageRow } from "../inbox/store";
7
- import type { StoredAttachment } from "../media/files";
8
-
9
- export interface AgentSettings {
10
- businessName: string;
11
- agentName: string;
12
- agentRole: string;
13
- instructions: string;
14
- /** Para qué conversa el agente: vender, agendar, dar soporte… */
15
- purpose: string;
16
- timezone: string;
17
- model: string;
18
- /** Herramientas activas; null = todas las del plan. */
19
- tools: string[] | null;
20
- /** Apagado, no responde y las conversaciones nuevas quedan en espera de un asesor. */
21
- active: boolean;
22
- }
23
-
24
- export interface TurnContext {
25
- contact: { name: string | null; phone: string | null; metadata: Record<string, string> };
26
- tags: string[];
27
- availableTags: string[];
28
- stage: string | null;
29
- stages: string[];
30
- productOfInterest: string | null;
31
- requestTypes: { name: string; description: string; fields: { name: string; label: string; required: boolean }[] }[];
32
- }
33
-
34
- export function buildSystemPrompt(s: AgentSettings): string {
35
- return [
36
- `<base_rules>
37
- Atiendes a clientes por WhatsApp en nombre de ${s.businessName}.
38
- - Responde en el idioma del cliente, con mensajes cortos, como en un chat.
39
- - No inventes precios, stock, horarios ni condiciones: si no lo sabes, búscalo con tus herramientas; si no aparece, dilo y ofrece pasar con una persona.
40
- - No uses markdown: WhatsApp no muestra encabezados ni tablas.
41
- - Si el cliente manda una nota de voz, verás su transcripción; respóndela como si la hubieras escuchado.
42
- </base_rules>`,
43
- `<agent_profile>
44
- Nombre: ${s.agentName}
45
- Rol: ${s.agentRole}${s.purpose.trim() ? `\nObjetivo: ${s.purpose.trim()}` : ""}
46
- </agent_profile>`,
47
- `<tool_instructions>
48
- - Datos de la empresa: search_knowledge antes de responder.
49
- - Productos: search_products; muestra fotos con send_product_images cuando ayude; registra el producto que le interesa con set_product_of_interest.
50
- - Cuando el cliente dé datos suyos, guárdalos con update_lead_info.
51
- - Cuando avance en la compra, muévelo de etapa con move_to_funnel_stage.
52
- - Fechas relativas: resolve_date.
53
- - Si el cliente quiere agendar o pedir algo de los tipos de solicitud: junta los datos con validate_request, resume y pide confirmación, y recién entonces create_request. Si se arrepiente: cancel_request.
54
- - Si pide hablar con una persona, está molesto o no puedes ayudar: transfer_to_human.
55
- </tool_instructions>`,
56
- s.instructions.trim() ? `<custom_instructions>\n${s.instructions.trim()}\n</custom_instructions>` : "",
57
- ]
58
- .filter(Boolean)
59
- .join("\n\n");
60
- }
61
-
62
- /** Contexto que cambia en cada turno; va al final para no romper la caché del prefijo. */
63
- export function buildTurnContext(s: AgentSettings, ctx: TurnContext, now: Date): string {
64
- const when = new Intl.DateTimeFormat("es-PE", { timeZone: s.timezone, dateStyle: "full", timeStyle: "short" }).format(now);
65
- const data = Object.entries(ctx.contact.metadata).map(([k, v]) => `${k}: ${v}`);
66
- const customer = [
67
- ctx.contact.name && `Nombre: ${ctx.contact.name}`,
68
- ctx.contact.phone && `Teléfono: ${ctx.contact.phone}`,
69
- ...data,
70
- ctx.tags.length > 0 && `Etiquetas: ${ctx.tags.join(", ")}`,
71
- ctx.productOfInterest && `Producto de interés: ${ctx.productOfInterest}`,
72
- ].filter(Boolean);
73
- return [
74
- `<timestamp>${when} (${s.timezone})</timestamp>`,
75
- customer.length ? `<customer_context>\n${customer.join("\n")}\n</customer_context>` : "",
76
- ctx.stages.length ? `<funnel>\nEtapa actual: ${ctx.stage ?? "sin etapa"}\nEtapas: ${ctx.stages.join(" → ")}\n</funnel>` : "",
77
- `<available_tags>${ctx.availableTags.join(", ") || "ninguna"}</available_tags>`,
78
- ctx.requestTypes.length
79
- ? `<request_types>\n${ctx.requestTypes
80
- .map(
81
- (t) =>
82
- `${t.name}${t.description ? ` (${t.description})` : ""}: ${t.fields.map((f) => `${f.name} = ${f.label}${f.required ? "" : " (opcional)"}`).join("; ")}`,
83
- )
84
- .join("\n")}\n</request_types>`
85
- : "",
86
- ]
87
- .filter(Boolean)
88
- .join("\n");
89
- }
90
-
91
- export function describeAttachments(raw: string): string {
92
- const list = JSON.parse(raw || "[]") as StoredAttachment[];
93
- return list
94
- .map((a) => {
95
- if (a.type === "audio") {
96
- const label = a.voice ? "nota de voz" : "audio";
97
- return a.transcript ? `[${label}: "${a.transcript}"]` : `[${label} sin transcribir]`;
98
- }
99
- if (a.type === "image") return "[imagen]";
100
- if (a.type === "video") return "[video]";
101
- if (a.type === "sticker") return "[sticker]";
102
- return `[archivo${a.name ? `: ${a.name}` : ""}]`;
103
- })
104
- .join(" ");
105
- }
106
-
107
- /** true si el mensaje tiene adjuntos que todavía se están descargando o transcribiendo. */
108
- export function hasPendingMedia(m: MessageRow): boolean {
109
- const list = JSON.parse(m.attachments || "[]") as StoredAttachment[];
110
- return list.some((a) => !a.key && !a.error);
111
- }
112
-
113
- /**
114
- * Convierte el historial a mensajes de Claude. El cliente es `user`; el bot y los asesores, `assistant`.
115
- * `images` agrega fotos (ya en base64) a mensajes del cliente por id.
116
- * Devuelve null si el último mensaje no es del cliente: no hay nada que responder.
117
- */
118
- export function toClaudeMessages(
119
- history: MessageRow[],
120
- images: Map<string, Anthropic.ImageBlockParam[]> = new Map(),
121
- ): Anthropic.MessageParam[] | null {
122
- const turns: Anthropic.MessageParam[] = [];
123
- for (const m of history) {
124
- if (m.sender_type === "system" || m.sender_type === "note") continue;
125
- const text = [m.content?.trim(), describeAttachments(m.attachments)].filter(Boolean).join(" ");
126
- if (!text) continue;
127
- const role = m.sender_type === "contact" ? "user" : "assistant";
128
- if (turns.length === 0 && role === "assistant") continue; // el primer turno tiene que ser del cliente
129
- const pics = role === "user" ? images.get(m.id) : undefined;
130
- turns.push({ role, content: pics?.length ? [...pics, { type: "text", text }] : text });
131
- }
132
- if (turns.length === 0 || turns[turns.length - 1].role !== "user") return null;
133
- return turns;
134
- }
1
+ // Prompt por bloques.
2
+ // Orden pensado para la caché de Anthropic: lo que no cambia entre conversaciones
3
+ // va en `system`; lo que cambia (hora, datos del cliente) va como mensaje de sistema al final.
4
+
5
+ import type Anthropic from "@anthropic-ai/sdk";
6
+ import type { MessageRow } from "../inbox/store";
7
+ import type { StoredAttachment } from "../media/files";
8
+
9
+ export interface AgentSettings {
10
+ businessName: string;
11
+ agentName: string;
12
+ agentRole: string;
13
+ instructions: string;
14
+ /** Para qué conversa el agente: vender, agendar, dar soporte… */
15
+ purpose: string;
16
+ timezone: string;
17
+ model: string;
18
+ /** Herramientas activas; null = todas las del plan. */
19
+ tools: string[] | null;
20
+ /** Apagado, no responde y las conversaciones nuevas quedan en espera de un asesor. */
21
+ active: boolean;
22
+ }
23
+
24
+ export interface TurnContext {
25
+ /** La red por la que escribe el cliente. */
26
+ channel: string;
27
+ contact: { name: string | null; phone: string | null; metadata: Record<string, string> };
28
+ tags: string[];
29
+ availableTags: string[];
30
+ stage: string | null;
31
+ stages: string[];
32
+ productOfInterest: string | null;
33
+ requestTypes: { name: string; description: string; fields: { name: string; label: string; required: boolean }[] }[];
34
+ }
35
+
36
+ export function buildSystemPrompt(s: AgentSettings): string {
37
+ return [
38
+ `<base_rules>
39
+ Atiendes a clientes por chat (WhatsApp, Instagram o Facebook) en nombre de ${s.businessName}.
40
+ - Responde en el idioma del cliente, con mensajes cortos, como en un chat.
41
+ - No inventes precios, stock, horarios ni condiciones: si no lo sabes, búscalo con tus herramientas; si no aparece, dilo y ofrece pasar con una persona.
42
+ - No uses markdown: estos chats no muestran encabezados ni tablas.
43
+ - Si el cliente manda una nota de voz, verás su transcripción; respóndela como si la hubieras escuchado.
44
+ </base_rules>`,
45
+ `<agent_profile>
46
+ Nombre: ${s.agentName}
47
+ Rol: ${s.agentRole}${s.purpose.trim() ? `\nObjetivo: ${s.purpose.trim()}` : ""}
48
+ </agent_profile>`,
49
+ `<tool_instructions>
50
+ - Datos de la empresa: search_knowledge antes de responder.
51
+ - Productos: search_products; muestra fotos con send_product_images cuando ayude; registra el producto que le interesa con set_product_of_interest.
52
+ - Cuando el cliente dé datos suyos, guárdalos con update_lead_info.
53
+ - Cuando avance en la compra, muévelo de etapa con move_to_funnel_stage.
54
+ - Fechas relativas: resolve_date.
55
+ - Si el cliente quiere agendar o pedir algo de los tipos de solicitud: junta los datos con validate_request, resume y pide confirmación, y recién entonces create_request. Si se arrepiente: cancel_request.
56
+ - Si pide hablar con una persona, está molesto o no puedes ayudar: transfer_to_human.
57
+ </tool_instructions>`,
58
+ s.instructions.trim() ? `<custom_instructions>\n${s.instructions.trim()}\n</custom_instructions>` : "",
59
+ ]
60
+ .filter(Boolean)
61
+ .join("\n\n");
62
+ }
63
+
64
+ /** Contexto que cambia en cada turno; va al final para no romper la caché del prefijo. */
65
+ export function buildTurnContext(s: AgentSettings, ctx: TurnContext, now: Date): string {
66
+ const when = new Intl.DateTimeFormat("es-PE", { timeZone: s.timezone, dateStyle: "full", timeStyle: "short" }).format(now);
67
+ const data = Object.entries(ctx.contact.metadata).map(([k, v]) => `${k}: ${v}`);
68
+ const customer = [
69
+ ctx.contact.name && `Nombre: ${ctx.contact.name}`,
70
+ ctx.contact.phone && `Teléfono: ${ctx.contact.phone}`,
71
+ ...data,
72
+ ctx.tags.length > 0 && `Etiquetas: ${ctx.tags.join(", ")}`,
73
+ ctx.productOfInterest && `Producto de interés: ${ctx.productOfInterest}`,
74
+ ].filter(Boolean);
75
+ return [
76
+ `<timestamp>${when} (${s.timezone})</timestamp>`,
77
+ `<channel>${ctx.channel}</channel>`,
78
+ customer.length ? `<customer_context>\n${customer.join("\n")}\n</customer_context>` : "",
79
+ ctx.stages.length ? `<funnel>\nEtapa actual: ${ctx.stage ?? "sin etapa"}\nEtapas: ${ctx.stages.join(" → ")}\n</funnel>` : "",
80
+ `<available_tags>${ctx.availableTags.join(", ") || "ninguna"}</available_tags>`,
81
+ ctx.requestTypes.length
82
+ ? `<request_types>\n${ctx.requestTypes
83
+ .map(
84
+ (t) =>
85
+ `${t.name}${t.description ? ` (${t.description})` : ""}: ${t.fields.map((f) => `${f.name} = ${f.label}${f.required ? "" : " (opcional)"}`).join("; ")}`,
86
+ )
87
+ .join("\n")}\n</request_types>`
88
+ : "",
89
+ ]
90
+ .filter(Boolean)
91
+ .join("\n");
92
+ }
93
+
94
+ export function describeAttachments(raw: string): string {
95
+ const list = JSON.parse(raw || "[]") as StoredAttachment[];
96
+ return list
97
+ .map((a) => {
98
+ if (a.type === "audio") {
99
+ const label = a.voice ? "nota de voz" : "audio";
100
+ return a.transcript ? `[${label}: "${a.transcript}"]` : `[${label} sin transcribir]`;
101
+ }
102
+ if (a.type === "image") return "[imagen]";
103
+ if (a.type === "video") return "[video]";
104
+ if (a.type === "sticker") return "[sticker]";
105
+ return `[archivo${a.name ? `: ${a.name}` : ""}]`;
106
+ })
107
+ .join(" ");
108
+ }
109
+
110
+ /** true si el mensaje tiene adjuntos que todavía se están descargando o transcribiendo. */
111
+ export function hasPendingMedia(m: MessageRow): boolean {
112
+ const list = JSON.parse(m.attachments || "[]") as StoredAttachment[];
113
+ return list.some((a) => !a.key && !a.error);
114
+ }
115
+
116
+ /**
117
+ * Convierte el historial a mensajes de Claude. El cliente es `user`; el bot y los asesores, `assistant`.
118
+ * `images` agrega fotos (ya en base64) a mensajes del cliente por id.
119
+ * Devuelve null si el último mensaje no es del cliente: no hay nada que responder.
120
+ */
121
+ export function toClaudeMessages(
122
+ history: MessageRow[],
123
+ images: Map<string, Anthropic.ImageBlockParam[]> = new Map(),
124
+ ): Anthropic.MessageParam[] | null {
125
+ const turns: Anthropic.MessageParam[] = [];
126
+ for (const m of history) {
127
+ if (m.sender_type === "system" || m.sender_type === "note") continue;
128
+ const text = [m.content?.trim(), describeAttachments(m.attachments)].filter(Boolean).join(" ");
129
+ if (!text) continue;
130
+ const role = m.sender_type === "contact" ? "user" : "assistant";
131
+ if (turns.length === 0 && role === "assistant") continue; // el primer turno tiene que ser del cliente
132
+ const pics = role === "user" ? images.get(m.id) : undefined;
133
+ turns.push({ role, content: pics?.length ? [...pics, { type: "text", text }] : text });
134
+ }
135
+ if (turns.length === 0 || turns[turns.length - 1].role !== "user") return null;
136
+ return turns;
137
+ }