@agenticmail/enterprise 0.5.325 → 0.5.327

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/dist/{agent-heartbeat-77N4OOQL.js → agent-heartbeat-ZFKA6GMI.js} +2 -2
  2. package/dist/{agent-tools-BNSTIK4P.js → agent-tools-R6RSBDJQ.js} +25 -25
  3. package/dist/{agenticmail-EDO5XOTP.js → agenticmail-QMWQNUY2.js} +1 -1
  4. package/dist/{browser-tool-JF3LNRGX.js → browser-tool-4KWE37RL.js} +4 -4
  5. package/dist/{chunk-JEGYVXYC.js → chunk-CQV7GGHT.js} +1 -1
  6. package/dist/{chunk-VBTHTPZ6.js → chunk-DWHJYAV6.js} +27 -27
  7. package/dist/{chunk-HKCKMCPY.js → chunk-G4YSECQ4.js} +2 -2
  8. package/dist/{chunk-7HBGXW7Z.js → chunk-GNABVGDZ.js} +31 -32
  9. package/dist/{chunk-DMD24UFZ.js → chunk-HTT6LUPP.js} +19 -19
  10. package/dist/{chunk-3FMK32KQ.js → chunk-LHQP7QRX.js} +9 -9
  11. package/dist/{chunk-6C5PKREN.js → chunk-NOAQG5CY.js} +1 -1
  12. package/dist/{chunk-4EKXYIJF.js → chunk-PAHT4ABL.js} +4 -4
  13. package/dist/{chunk-JNMDD7JY.js → chunk-RHO7WRVJ.js} +5 -5
  14. package/dist/{chunk-BQM7MBPS.js → chunk-WYDVMFGJ.js} +5 -5
  15. package/dist/{chunk-TPLVQFXM.js → chunk-X2YL6KSY.js} +13 -13
  16. package/dist/{cli-agent-ZIIFI77N.js → cli-agent-2NBPF3GN.js} +11 -11
  17. package/dist/{cli-recover-XEZ2SKPU.js → cli-recover-TTOR7CJR.js} +2 -2
  18. package/dist/{cli-serve-BDGOOOKQ.js → cli-serve-5VFU4GR4.js} +3 -3
  19. package/dist/{cli-verify-CZIITRED.js → cli-verify-WICBVLAM.js} +2 -2
  20. package/dist/cli.js +5 -5
  21. package/dist/{connection-manager-KAWEUWUR.js → connection-manager-Y7CCQK4X.js} +1 -1
  22. package/dist/dashboard/pages/cluster.js +1 -1
  23. package/dist/{deployer-3YK4RPUL.js → deployer-7NG7LCJW.js} +1 -1
  24. package/dist/{factory-JFWXTAWK.js → factory-4V2W4BSV.js} +1 -1
  25. package/dist/index.js +9 -9
  26. package/dist/{integrations-TF4EBCJ7.js → integrations-V2WXFDIV.js} +13 -13
  27. package/dist/{local-6MLIZDKO.js → local-OXFH4V7E.js} +2 -2
  28. package/dist/{meeting-voice-intelligence-CJLR52YV.js → meeting-voice-intelligence-RZZCAD6G.js} +2 -2
  29. package/dist/{meetings-FJ453ENF.js → meetings-SQNTB6GD.js} +1 -1
  30. package/dist/{microsoft-2IIHDLJB.js → microsoft-2PDVV6HX.js} +3 -3
  31. package/dist/{postgres-WGUVC2S7.js → postgres-USXBPTHX.js} +2 -2
  32. package/dist/{pw-ai-IBEF6HBF.js → pw-ai-NK5GKBDG.js} +1 -1
  33. package/dist/{routes-XYR2RNEC.js → routes-T3CDAQTD.js} +4 -4
  34. package/dist/{runtime-6BULDBR3.js → runtime-X4BTVICL.js} +1 -1
  35. package/dist/{server-7NT4LMSQ.js → server-WQ6LLYGB.js} +5 -5
  36. package/dist/{setup-2JBXMUDS.js → setup-6DRKSOMH.js} +2 -2
  37. package/dist/{skills-FR7I5V7H.js → skills-EL4RTJKK.js} +1 -1
  38. package/logs/cloudflared-error.log +12 -0
  39. package/logs/enterprise-out.log +2 -0
  40. package/package.json +1 -1
  41. package/src/admin/routes.ts +1 -1
  42. package/src/agent-tools/tool-resolver.ts +1 -1
  43. package/src/agent-tools/tools/agenticmail.ts +2 -2
  44. package/src/agent-tools/tools/browser.ts +1 -1
  45. package/src/agent-tools/tools/enterprise-code-sandbox.ts +1 -1
  46. package/src/agent-tools/tools/enterprise-diff.ts +1 -1
  47. package/src/agent-tools/tools/enterprise-http.ts +1 -3
  48. package/src/agent-tools/tools/enterprise-security-scan.ts +1 -1
  49. package/src/agent-tools/tools/google/forms.ts +2 -2
  50. package/src/agent-tools/tools/google/gmail.ts +1 -1
  51. package/src/agent-tools/tools/google/maps.ts +2 -2
  52. package/src/agent-tools/tools/google/meeting-voice.ts +1 -1
  53. package/src/agent-tools/tools/google/meetings.ts +1 -1
  54. package/src/agent-tools/tools/google/slides.ts +2 -2
  55. package/src/agent-tools/tools/grep.ts +1 -1
  56. package/src/agent-tools/tools/knowledge-search.ts +1 -1
  57. package/src/agent-tools/tools/local/coding.ts +5 -5
  58. package/src/agent-tools/tools/microsoft/excel-vba.ts +1 -1
  59. package/src/agent-tools/tools/microsoft/excel.ts +1 -1
  60. package/src/agent-tools/tools/microsoft/powerpoint.ts +1 -1
  61. package/src/agent-tools/tools/visual-memory/index.ts +11 -11
  62. package/src/agent-tools/tools/visual-memory/similarity.ts +2 -2
  63. package/src/agent-tools/tools/visual-memory/storage.ts +1 -1
  64. package/src/agenticmail/providers/imap.ts +2 -2
  65. package/src/browser/enterprise-compat.ts +1 -1
  66. package/src/cli-agent.ts +3 -3
  67. package/src/cli-serve.ts +1 -1
  68. package/src/dashboard/pages/cluster.js +1 -1
  69. package/src/database-access/connection-manager.ts +6 -6
  70. package/src/database-access/routes.ts +0 -1
  71. package/src/db/dynamodb.ts +1 -1
  72. package/src/db/postgres.ts +2 -2
  73. package/src/deploy/fly.ts +4 -4
  74. package/src/deploy/managed.ts +0 -1
  75. package/src/engine/agent-config.ts +1 -1
  76. package/src/engine/agent-heartbeat.ts +1 -1
  77. package/src/engine/agent-hierarchy.ts +1 -1
  78. package/src/engine/agent-memory.ts +1 -1
  79. package/src/engine/agent-routes.ts +2 -2
  80. package/src/engine/chat-poller.ts +1 -1
  81. package/src/engine/community-registry.ts +2 -2
  82. package/src/engine/db-adapter.ts +0 -1
  83. package/src/engine/deployer.ts +8 -8
  84. package/src/engine/email-poller.ts +1 -1
  85. package/src/engine/knowledge-contribution.ts +1 -1
  86. package/src/engine/knowledge-import/import-manager.ts +2 -3
  87. package/src/engine/knowledge-import/processors/extract-github.ts +1 -1
  88. package/src/engine/knowledge-import/processors/extract-sharepoint.ts +1 -1
  89. package/src/engine/knowledge-import/processors/validate.ts +1 -1
  90. package/src/engine/lifecycle.ts +1 -1
  91. package/src/engine/meeting-monitor.ts +2 -2
  92. package/src/engine/meeting-voice-intelligence.ts +3 -3
  93. package/src/engine/messaging-poller.ts +2 -2
  94. package/src/engine/org-integration-routes.ts +2 -2
  95. package/src/engine/org-integrations.ts +1 -1
  96. package/src/engine/routes.ts +2 -2
  97. package/src/engine/skills.ts +1 -1
  98. package/src/engine/tool-catalog.ts +1 -1
  99. package/src/engine/vault-routes.ts +1 -1
  100. package/src/engine/vault.ts +1 -1
  101. package/src/mcp/adapters/adp.adapter.ts +1 -1
  102. package/src/mcp/adapters/auth0.adapter.ts +1 -1
  103. package/src/mcp/adapters/clickup.adapter.ts +1 -1
  104. package/src/mcp/adapters/close.adapter.ts +1 -1
  105. package/src/mcp/adapters/firebase.adapter.ts +1 -1
  106. package/src/mcp/adapters/google-ads.adapter.ts +1 -1
  107. package/src/mcp/adapters/kubernetes.adapter.ts +1 -1
  108. package/src/mcp/adapters/mixpanel.adapter.ts +1 -1
  109. package/src/mcp/adapters/recurly.adapter.ts +1 -1
  110. package/src/mcp/adapters/sap.adapter.ts +2 -2
  111. package/src/mcp/adapters/shortcut.adapter.ts +1 -1
  112. package/src/mcp/adapters/snowflake.adapter.ts +1 -1
  113. package/src/mcp/adapters/stripe.adapter.ts +1 -1
  114. package/src/mcp/adapters/supabase.adapter.ts +1 -1
  115. package/src/mcp/adapters/zuora.adapter.ts +1 -1
  116. package/src/middleware/request-limits.ts +1 -1
  117. package/src/runtime/agent-loop.ts +3 -3
  118. package/src/runtime/compaction.ts +2 -2
  119. package/src/runtime/followup.ts +1 -1
  120. package/src/runtime/hooks.ts +3 -3
  121. package/src/runtime/index.ts +5 -6
  122. package/src/runtime/llm-client.ts +1 -1
  123. package/src/runtime/subagent.ts +0 -1
  124. package/src/runtime/types.ts +2 -0
  125. package/src/security/brute-force.ts +1 -1
  126. package/src/security/csp.ts +1 -1
  127. package/src/security/index.ts +3 -3
  128. package/src/security/input-sanitizer.ts +1 -1
  129. package/src/security/threat-logger.ts +2 -2
  130. package/src/server.ts +2 -2
  131. package/src/setup/database.ts +1 -1
  132. package/src/setup/index.ts +1 -2
  133. package/src/setup/provision.ts +1 -1
  134. package/dist/_seed-data-FQR5PY2W.js +0 -4554
  135. package/dist/agent-heartbeat-3FWNHZFX.js +0 -510
  136. package/dist/agent-heartbeat-4RWHZR7H.js +0 -510
  137. package/dist/agent-heartbeat-6ZGB5ILY.js +0 -510
  138. package/dist/agent-heartbeat-BBINFNL4.js +0 -510
  139. package/dist/agent-heartbeat-BIVHLKFM.js +0 -510
  140. package/dist/agent-heartbeat-HGVIAHS5.js +0 -510
  141. package/dist/agent-heartbeat-HRKVFK2T.js +0 -510
  142. package/dist/agent-heartbeat-JC5GWVXD.js +0 -510
  143. package/dist/agent-heartbeat-K6A4HMHB.js +0 -510
  144. package/dist/agent-heartbeat-LCDXWFVB.js +0 -510
  145. package/dist/agent-heartbeat-P7HZCZAQ.js +0 -510
  146. package/dist/agent-heartbeat-PUIRSNIO.js +0 -510
  147. package/dist/agent-heartbeat-SN5ILQ6Y.js +0 -510
  148. package/dist/agent-heartbeat-TW5YTDYC.js +0 -510
  149. package/dist/agent-heartbeat-UF2RKKS2.js +0 -510
  150. package/dist/agent-heartbeat-YCSWP54H.js +0 -510
  151. package/dist/agent-heartbeat-Z2QQXROL.js +0 -510
  152. package/dist/agent-tools-3W7XLUYA.js +0 -13949
  153. package/dist/agent-tools-54VZGT6L.js +0 -9
  154. package/dist/agent-tools-AYYDPO27.js +0 -13949
  155. package/dist/agent-tools-F2X47FKF.js +0 -13949
  156. package/dist/agent-tools-O6W3QAZL.js +0 -13949
  157. package/dist/agent-tools-OAWVZBMW.js +0 -9
  158. package/dist/agent-tools-QCCU74PN.js +0 -13949
  159. package/dist/agent-tools-QGE26U6R.js +0 -9
  160. package/dist/chunk-2LHUARN6.js +0 -4929
  161. package/dist/chunk-2WVCNCYC.js +0 -5087
  162. package/dist/chunk-3FM6YQUK.js +0 -5087
  163. package/dist/chunk-46GOWZT4.js +0 -5087
  164. package/dist/chunk-4DBWU3P5.js +0 -4929
  165. package/dist/chunk-5KYJAUZV.js +0 -1519
  166. package/dist/chunk-6ZMLNEHB.js +0 -1519
  167. package/dist/chunk-7UCKD25B.js +0 -551
  168. package/dist/chunk-BDCFOP7O.js +0 -537
  169. package/dist/chunk-BPZQT5N5.js +0 -25652
  170. package/dist/chunk-C52OQNNY.js +0 -5087
  171. package/dist/chunk-C7HGQF4Y.js +0 -25652
  172. package/dist/chunk-CAHNZGGK.js +0 -25656
  173. package/dist/chunk-CK7R6UHE.js +0 -4945
  174. package/dist/chunk-CQYLRIQ3.js +0 -25938
  175. package/dist/chunk-D36RPWB7.js +0 -25652
  176. package/dist/chunk-DJK2UPFH.js +0 -4891
  177. package/dist/chunk-DM7FTF7W.js +0 -4929
  178. package/dist/chunk-DXZGPUAF.js +0 -5087
  179. package/dist/chunk-F46WB5IL.js +0 -5087
  180. package/dist/chunk-F5QG5SQH.js +0 -5087
  181. package/dist/chunk-GYB2WHMN.js +0 -5101
  182. package/dist/chunk-H7GP733U.js +0 -5087
  183. package/dist/chunk-HHBXWB5U.js +0 -25640
  184. package/dist/chunk-HS5YWSGM.js +0 -3206
  185. package/dist/chunk-IMXS4N6W.js +0 -1519
  186. package/dist/chunk-JTV5LA47.js +0 -1519
  187. package/dist/chunk-KN3T3CTD.js +0 -4929
  188. package/dist/chunk-KV6G7NZX.js +0 -1519
  189. package/dist/chunk-M6ZIC5H3.js +0 -1370
  190. package/dist/chunk-MU5MEBIK.js +0 -1519
  191. package/dist/chunk-NLT5MC7X.js +0 -465
  192. package/dist/chunk-NVLYIM4J.js +0 -4945
  193. package/dist/chunk-NZY2BIZH.js +0 -4891
  194. package/dist/chunk-O42L6G67.js +0 -1519
  195. package/dist/chunk-OCNERGGM.js +0 -4891
  196. package/dist/chunk-OJSNHONE.js +0 -1519
  197. package/dist/chunk-OWTLNV4Q.js +0 -25623
  198. package/dist/chunk-PCNYEP6T.js +0 -4891
  199. package/dist/chunk-PI4AQ4Z6.js +0 -25652
  200. package/dist/chunk-PN3EGTCA.js +0 -194
  201. package/dist/chunk-PWWV2U5P.js +0 -195
  202. package/dist/chunk-Q37UKNRC.js +0 -1519
  203. package/dist/chunk-QXTC6J7H.js +0 -5087
  204. package/dist/chunk-RF2LGX3E.js +0 -1519
  205. package/dist/chunk-RH7KPWRQ.js +0 -465
  206. package/dist/chunk-RKERL5LZ.js +0 -4925
  207. package/dist/chunk-RVBK2IOX.js +0 -25652
  208. package/dist/chunk-SAKODCZ5.js +0 -4891
  209. package/dist/chunk-SALGFC5L.js +0 -4945
  210. package/dist/chunk-STGWZ2MS.js +0 -1519
  211. package/dist/chunk-SVSLIQYN.js +0 -1519
  212. package/dist/chunk-UY3ZVQDP.js +0 -25652
  213. package/dist/chunk-V6OSD62M.js +0 -5087
  214. package/dist/chunk-VP6YAHX4.js +0 -1519
  215. package/dist/chunk-WD72IOF2.js +0 -5101
  216. package/dist/chunk-WDYJOEAI.js +0 -5087
  217. package/dist/chunk-WEAFQNOS.js +0 -195
  218. package/dist/chunk-XKUSAZGP.js +0 -5087
  219. package/dist/chunk-YCWOCIPH.js +0 -5101
  220. package/dist/chunk-ZGE3XAXY.js +0 -1519
  221. package/dist/chunk-ZGFDTW4H.js +0 -1519
  222. package/dist/cli-agent-33GWIF2D.js +0 -2300
  223. package/dist/cli-agent-4XK6LVQQ.js +0 -2357
  224. package/dist/cli-agent-64EOV3ST.js +0 -2300
  225. package/dist/cli-agent-67WP6KKO.js +0 -2300
  226. package/dist/cli-agent-7RW5Y7C4.js +0 -2294
  227. package/dist/cli-agent-7TB2BWS6.js +0 -2370
  228. package/dist/cli-agent-AKXFFST2.js +0 -2370
  229. package/dist/cli-agent-C3YSECO4.js +0 -2344
  230. package/dist/cli-agent-DZTKLITB.js +0 -2357
  231. package/dist/cli-agent-FNMDJN7T.js +0 -2357
  232. package/dist/cli-agent-FOF7PFEP.js +0 -2357
  233. package/dist/cli-agent-FXZ6DJKP.js +0 -2357
  234. package/dist/cli-agent-H74M2ZYN.js +0 -2357
  235. package/dist/cli-agent-HG4Y657I.js +0 -2300
  236. package/dist/cli-agent-HORWVPHB.js +0 -2370
  237. package/dist/cli-agent-HSZT6SKF.js +0 -2423
  238. package/dist/cli-agent-ION2W5JF.js +0 -2441
  239. package/dist/cli-agent-JLUQ4ZU6.js +0 -2424
  240. package/dist/cli-agent-KBPWY3CB.js +0 -2302
  241. package/dist/cli-agent-MVCDH4HV.js +0 -2370
  242. package/dist/cli-agent-NZXOEPJ2.js +0 -2357
  243. package/dist/cli-agent-OO6H57UQ.js +0 -2300
  244. package/dist/cli-agent-PADN3QRC.js +0 -2357
  245. package/dist/cli-agent-QAYEX3BE.js +0 -2441
  246. package/dist/cli-agent-QT64DT5J.js +0 -2370
  247. package/dist/cli-agent-TCTRKCHN.js +0 -2300
  248. package/dist/cli-agent-TFL2M6UK.js +0 -2424
  249. package/dist/cli-agent-TSOJG7EX.js +0 -2357
  250. package/dist/cli-agent-UIKXATTD.js +0 -2357
  251. package/dist/cli-agent-UJN6FYTO.js +0 -2370
  252. package/dist/cli-agent-USMKX7WN.js +0 -2473
  253. package/dist/cli-agent-VIQAYVY4.js +0 -2357
  254. package/dist/cli-agent-WNWFVOFM.js +0 -2370
  255. package/dist/cli-agent-XBQX67VJ.js +0 -2423
  256. package/dist/cli-agent-ZLSC6FF4.js +0 -2357
  257. package/dist/cli-agent-ZSHUPBBN.js +0 -2357
  258. package/dist/cli-recover-T32NABFA.js +0 -487
  259. package/dist/cli-serve-2IL5DTEY.js +0 -153
  260. package/dist/cli-serve-3NGBX5ER.js +0 -140
  261. package/dist/cli-serve-47N5UKKW.js +0 -153
  262. package/dist/cli-serve-4RS4UDHC.js +0 -140
  263. package/dist/cli-serve-4XGZFUV2.js +0 -140
  264. package/dist/cli-serve-53FVANQK.js +0 -260
  265. package/dist/cli-serve-57225XWV.js +0 -140
  266. package/dist/cli-serve-63BDPSOP.js +0 -140
  267. package/dist/cli-serve-657NRUOX.js +0 -140
  268. package/dist/cli-serve-6ER7QMLR.js +0 -140
  269. package/dist/cli-serve-6OT3UEAN.js +0 -140
  270. package/dist/cli-serve-7JQ4FVUQ.js +0 -260
  271. package/dist/cli-serve-7L6EY5UH.js +0 -153
  272. package/dist/cli-serve-BFNIW2LF.js +0 -153
  273. package/dist/cli-serve-C7MN6U5Q.js +0 -153
  274. package/dist/cli-serve-CQFI3LMK.js +0 -140
  275. package/dist/cli-serve-CR3OY3IM.js +0 -153
  276. package/dist/cli-serve-DAJFRWQ7.js +0 -153
  277. package/dist/cli-serve-DTQLN5UI.js +0 -140
  278. package/dist/cli-serve-EQS2SGT3.js +0 -140
  279. package/dist/cli-serve-FW6FHFW4.js +0 -153
  280. package/dist/cli-serve-GEEOQS77.js +0 -153
  281. package/dist/cli-serve-H562I3ZK.js +0 -153
  282. package/dist/cli-serve-HDQZF4C4.js +0 -153
  283. package/dist/cli-serve-KBJNXWYJ.js +0 -140
  284. package/dist/cli-serve-LICAOMEB.js +0 -140
  285. package/dist/cli-serve-LLGYLWFS.js +0 -153
  286. package/dist/cli-serve-LMZKQ5GX.js +0 -140
  287. package/dist/cli-serve-LNTT73P2.js +0 -140
  288. package/dist/cli-serve-MLR4KAE2.js +0 -260
  289. package/dist/cli-serve-MQKBUZ7X.js +0 -140
  290. package/dist/cli-serve-N3OISDNB.js +0 -153
  291. package/dist/cli-serve-NBFT7B42.js +0 -140
  292. package/dist/cli-serve-RTWO3AWY.js +0 -140
  293. package/dist/cli-serve-SIHTSW5P.js +0 -140
  294. package/dist/cli-serve-SP6TEURE.js +0 -140
  295. package/dist/cli-serve-TDKZA6I5.js +0 -140
  296. package/dist/cli-serve-TF5ZVVXF.js +0 -140
  297. package/dist/cli-serve-TIZ27EVR.js +0 -153
  298. package/dist/cli-serve-TUNI2RCN.js +0 -153
  299. package/dist/cli-serve-WCU66CHX.js +0 -140
  300. package/dist/cli-serve-WNOZMAWD.js +0 -153
  301. package/dist/cli-serve-YCCKRRUY.js +0 -140
  302. package/dist/cli-serve-ZD5V7I6G.js +0 -140
  303. package/dist/cli-validate-6XDDLVVQ.js +0 -150
  304. package/dist/cli-verify-I4WGRQNT.js +0 -149
  305. package/dist/connection-manager-4ZA4XAFA.js +0 -9
  306. package/dist/db-adapter-IK2EDK2N.js +0 -7
  307. package/dist/db-adapter-IRHOUMVC.js +0 -7
  308. package/dist/dependency-manager-G6D2XXNY.js +0 -11
  309. package/dist/dependency-manager-OCUKF72T.js +0 -543
  310. package/dist/dependency-manager-YULUXN34.js +0 -511
  311. package/dist/factory-MQASIPEB.js +0 -11
  312. package/dist/google-W5AYGNUJ.js +0 -33
  313. package/dist/integrations-VWANOHQ4.js +0 -43830
  314. package/dist/local-O2FN57UN.js +0 -1128
  315. package/dist/local-S7SDOQHN.js +0 -1128
  316. package/dist/microsoft-HPLA5ZL5.js +0 -2414
  317. package/dist/microsoft-UFLZBEAC.js +0 -1619
  318. package/dist/microsoft-VREAZ7M2.js +0 -3955
  319. package/dist/microsoft-YUT6EIGP.js +0 -3400
  320. package/dist/postgres-BOTHOPDW.js +0 -875
  321. package/dist/routes-3MMLQTB6.js +0 -90
  322. package/dist/routes-4ZUIJ4HE.js +0 -90
  323. package/dist/routes-5MXHKKH4.js +0 -90
  324. package/dist/routes-64NJFK3B.js +0 -90
  325. package/dist/routes-6AKQ2LBV.js +0 -90
  326. package/dist/routes-CRRBUDO4.js +0 -90
  327. package/dist/routes-D7SMYOLT.js +0 -90
  328. package/dist/routes-DIAF3MC3.js +0 -90
  329. package/dist/routes-IGR6PZCA.js +0 -92
  330. package/dist/routes-KMUNU6CY.js +0 -90
  331. package/dist/routes-LRRLXIZR.js +0 -90
  332. package/dist/routes-N647AJYG.js +0 -90
  333. package/dist/routes-SSSELAAR.js +0 -90
  334. package/dist/routes-STERVGKJ.js +0 -90
  335. package/dist/routes-TZMPYLHJ.js +0 -90
  336. package/dist/routes-XNK2MAVO.js +0 -90
  337. package/dist/routes-ZEZZACZP.js +0 -90
  338. package/dist/runtime-4UVCTFNQ.js +0 -45
  339. package/dist/runtime-5EQN4GFM.js +0 -45
  340. package/dist/runtime-5LP7PUD4.js +0 -45
  341. package/dist/runtime-6YEENDN3.js +0 -45
  342. package/dist/runtime-7LQFRG3B.js +0 -45
  343. package/dist/runtime-AMXJU2MB.js +0 -45
  344. package/dist/runtime-D6WSE7FG.js +0 -45
  345. package/dist/runtime-EAWOE6JZ.js +0 -45
  346. package/dist/runtime-EYVN7NFJ.js +0 -45
  347. package/dist/runtime-F6RPWQVW.js +0 -45
  348. package/dist/runtime-FYMJURFC.js +0 -45
  349. package/dist/runtime-GGF4P55M.js +0 -45
  350. package/dist/runtime-H3SAMWWF.js +0 -45
  351. package/dist/runtime-H7T4I7I7.js +0 -45
  352. package/dist/runtime-HTIM7GZR.js +0 -45
  353. package/dist/runtime-JRNBL4O4.js +0 -45
  354. package/dist/runtime-K4C7NQLW.js +0 -45
  355. package/dist/runtime-MWWZCPC2.js +0 -45
  356. package/dist/runtime-N7CM2DYA.js +0 -45
  357. package/dist/runtime-OM2NIBMI.js +0 -45
  358. package/dist/runtime-OVGSOTAH.js +0 -45
  359. package/dist/runtime-QQ6LAY4U.js +0 -45
  360. package/dist/runtime-QWPVD7CY.js +0 -45
  361. package/dist/runtime-SX3B5MG3.js +0 -45
  362. package/dist/runtime-YLIIPTE4.js +0 -45
  363. package/dist/runtime-YU6P22CG.js +0 -45
  364. package/dist/runtime-ZOC337DD.js +0 -45
  365. package/dist/server-3AVWBRIF.js +0 -28
  366. package/dist/server-5BKJI5OW.js +0 -28
  367. package/dist/server-6NDO2S52.js +0 -28
  368. package/dist/server-7TD3M2BW.js +0 -28
  369. package/dist/server-AMCSXINC.js +0 -28
  370. package/dist/server-B3VJ6MSA.js +0 -28
  371. package/dist/server-BEJ6RAGL.js +0 -28
  372. package/dist/server-BFPYDHBG.js +0 -28
  373. package/dist/server-BKEWXGVX.js +0 -28
  374. package/dist/server-BMEJZGFG.js +0 -28
  375. package/dist/server-CU6LVQS4.js +0 -28
  376. package/dist/server-DFR7FI3Q.js +0 -28
  377. package/dist/server-DFYGH2CV.js +0 -28
  378. package/dist/server-DURRN3GJ.js +0 -28
  379. package/dist/server-EELWOC3X.js +0 -28
  380. package/dist/server-EN5E2OWQ.js +0 -28
  381. package/dist/server-EXZC3OJO.js +0 -28
  382. package/dist/server-GW2HYJYI.js +0 -28
  383. package/dist/server-J25NCRWJ.js +0 -28
  384. package/dist/server-JDGNOTFV.js +0 -28
  385. package/dist/server-KA6U3YNP.js +0 -28
  386. package/dist/server-L52A2ME4.js +0 -28
  387. package/dist/server-NE5HD5DJ.js +0 -28
  388. package/dist/server-NLQAXPOG.js +0 -28
  389. package/dist/server-NQOT7W77.js +0 -28
  390. package/dist/server-OHHAA34U.js +0 -28
  391. package/dist/server-PWE5PQTR.js +0 -28
  392. package/dist/server-Q2Q32H2B.js +0 -28
  393. package/dist/server-Q77ME7TL.js +0 -28
  394. package/dist/server-QDKO6OVO.js +0 -28
  395. package/dist/server-RR6QJIXM.js +0 -28
  396. package/dist/server-T3R6BO6A.js +0 -28
  397. package/dist/server-TRIBAHDV.js +0 -28
  398. package/dist/server-TXV3ZVVR.js +0 -28
  399. package/dist/server-VHSFJP3I.js +0 -28
  400. package/dist/server-VOJF2XGU.js +0 -28
  401. package/dist/server-W76YHPEC.js +0 -28
  402. package/dist/server-WLLH4WST.js +0 -28
  403. package/dist/server-WTUJ2O3F.js +0 -28
  404. package/dist/server-X4CJTHHF.js +0 -28
  405. package/dist/server-XK3ILCJC.js +0 -28
  406. package/dist/server-ZRD3NDJE.js +0 -28
  407. package/dist/setup-2JYXGTW6.js +0 -20
  408. package/dist/setup-3XOSZEW5.js +0 -20
  409. package/dist/setup-44VBAO4J.js +0 -20
  410. package/dist/setup-4OA7QNJW.js +0 -20
  411. package/dist/setup-4ONNQBWB.js +0 -20
  412. package/dist/setup-4OSBXSCL.js +0 -20
  413. package/dist/setup-4QFGRBLZ.js +0 -20
  414. package/dist/setup-52US54Z4.js +0 -20
  415. package/dist/setup-5CY3CKKT.js +0 -20
  416. package/dist/setup-5YRQUOW2.js +0 -20
  417. package/dist/setup-6766SGAR.js +0 -20
  418. package/dist/setup-6NUSB4XO.js +0 -20
  419. package/dist/setup-7FZJEOD4.js +0 -20
  420. package/dist/setup-7LYYXBUL.js +0 -20
  421. package/dist/setup-ADSKKBGV.js +0 -20
  422. package/dist/setup-AMV2WKVH.js +0 -20
  423. package/dist/setup-AYY24DKM.js +0 -20
  424. package/dist/setup-B34N4HPU.js +0 -20
  425. package/dist/setup-CEF4QY4L.js +0 -20
  426. package/dist/setup-E2YLC2EY.js +0 -20
  427. package/dist/setup-ER6NXTY5.js +0 -20
  428. package/dist/setup-FIOAQJ6C.js +0 -20
  429. package/dist/setup-G76S7X44.js +0 -20
  430. package/dist/setup-H2AGCBW5.js +0 -20
  431. package/dist/setup-H4JZUHH5.js +0 -20
  432. package/dist/setup-ICOZRKCX.js +0 -20
  433. package/dist/setup-JFTJH7UF.js +0 -20
  434. package/dist/setup-JJHOT2ZU.js +0 -20
  435. package/dist/setup-KEAM2BCL.js +0 -20
  436. package/dist/setup-LW4MLU2N.js +0 -20
  437. package/dist/setup-NHAZABW4.js +0 -20
  438. package/dist/setup-PRFNI6YW.js +0 -20
  439. package/dist/setup-RAHBMYHE.js +0 -20
  440. package/dist/setup-T6KYFR7O.js +0 -20
  441. package/dist/setup-TGM6L362.js +0 -20
  442. package/dist/setup-TNANAH7C.js +0 -20
  443. package/dist/setup-TXPR5UQX.js +0 -20
  444. package/dist/setup-UJSNSCLM.js +0 -20
  445. package/dist/setup-XCJMELVU.js +0 -20
  446. package/dist/setup-XIYEIFVK.js +0 -20
  447. package/dist/setup-XP2VGBEU.js +0 -20
  448. package/dist/setup-Z4PZSHBI.js +0 -20
  449. package/dist/skills-HCVBA6PK.js +0 -16
  450. package/dist/skills-HFSW74KZ.js +0 -16
  451. package/dist/system-prompts-6OUTAMH6.js +0 -41
  452. package/dist/task-queue-YP2I54IA.js +0 -9
  453. package/dist/transport-encryption-F2NQYACT.js +0 -25
  454. package/god_is_great.html +0 -35
  455. package/seed-data.mjs +0 -455
  456. package/src/agent-tools/tools/integrations/_seed-data.json +0 -4548
  457. package/src/agent-tools/tools/integrations/_seed-data.ts +0 -4563
@@ -1,875 +0,0 @@
1
- import {
2
- getAllCreateStatements
3
- } from "./chunk-XMDE2NGH.js";
4
- import {
5
- DatabaseAdapter
6
- } from "./chunk-FLRYMSKY.js";
7
- import "./chunk-KFQGP6VL.js";
8
-
9
- // src/db/postgres.ts
10
- import { randomUUID, createHash } from "crypto";
11
- var pg;
12
- async function getPg() {
13
- if (!pg) {
14
- const { resolveDriver } = await import("./resolve-driver-VQXMFKLJ.js");
15
- pg = await resolveDriver(
16
- "pg",
17
- "PostgreSQL driver not found. Install it: npm install pg\nFor Supabase/Neon/CockroachDB, the same pg driver works."
18
- );
19
- }
20
- return pg;
21
- }
22
- var PostgresAdapter = class extends DatabaseAdapter {
23
- type = "postgres";
24
- pool = null;
25
- ended = false;
26
- _directUrl;
27
- _connectionString;
28
- _isPgBouncer = false;
29
- async connect(config) {
30
- this.ended = false;
31
- const { Pool } = await getPg();
32
- const connUrl = config.connectionString ? new URL(config.connectionString) : null;
33
- const port = config.port || (connUrl ? connUrl.port : "5432");
34
- const hostname = connUrl?.hostname || config.host || "";
35
- const isPgBouncer = String(port) === "6543" || String(port) === "5433" || hostname.includes(".pooler.supabase.") || hostname.includes(".pooler.") || connUrl?.searchParams.get("pgbouncer") === "true";
36
- this._directUrl = config.directUrl || void 0;
37
- this._connectionString = config.connectionString;
38
- this._isPgBouncer = isPgBouncer;
39
- const envMax = process.env.DB_POOL_MAX ? parseInt(process.env.DB_POOL_MAX, 10) : 0;
40
- const defaultMax = isPgBouncer ? 3 : 10;
41
- const poolMax = envMax || defaultMax;
42
- const idleTimeout = isPgBouncer ? 2e3 : 3e4;
43
- this.pool = new Pool({
44
- connectionString: config.connectionString,
45
- host: config.host,
46
- port: config.port,
47
- database: config.database,
48
- user: config.username,
49
- password: config.password,
50
- ssl: config.ssl ? { rejectUnauthorized: false } : void 0,
51
- max: poolMax,
52
- idleTimeoutMillis: idleTimeout,
53
- connectionTimeoutMillis: 15e3,
54
- // PgBouncer doesn't support prepared statements in transaction mode
55
- ...isPgBouncer ? { allowExitOnIdle: true } : {}
56
- });
57
- this.pool.on("error", (err) => {
58
- if (this.ended) return;
59
- if (err.code === "XX000" || err.code === "53300" || err.code === "57P01") {
60
- console.warn(`[postgres] Pool connection error (${err.code}): ${err.message?.slice(0, 100) || "unknown"} \u2014 will retry`);
61
- } else {
62
- console.error(`[postgres] Unexpected pool error:`, err.message?.slice(0, 200));
63
- }
64
- });
65
- const client = await this.pool.connect();
66
- client.release();
67
- console.log(`[postgres] Connected (pool: max=${poolMax}, idle=${idleTimeout}ms, pgbouncer=${isPgBouncer})`);
68
- }
69
- async disconnect() {
70
- this.ended = true;
71
- if (this.pool) {
72
- try {
73
- await this.pool.end();
74
- } catch {
75
- }
76
- }
77
- }
78
- isConnected() {
79
- return this.pool !== null && !this.ended;
80
- }
81
- /**
82
- * Execute a query with automatic retry on transient connection errors.
83
- * Retries once after a 500ms delay for: connection limit exceeded (XX000, 53300),
84
- * admin shutdown (57P01), connection refused, client already released.
85
- */
86
- async _query(sql, params) {
87
- const RETRYABLE = /* @__PURE__ */ new Set(["XX000", "53300", "57P01", "ECONNREFUSED", "ECONNRESET", "57P03", "25P02"]);
88
- for (let attempt = 0; attempt < 3; attempt++) {
89
- try {
90
- return await this.pool.query(sql, params);
91
- } catch (err) {
92
- const code = err.code || "";
93
- const msg = err.message || "";
94
- const isAbortedTx = code === "25P02" || msg.includes("current transaction is aborted");
95
- const isRetryable = RETRYABLE.has(code) || msg.includes("remaining connection") || msg.includes("terminating connection") || msg.includes("Connection terminated") || msg.includes("MaxClientsInSessionMode");
96
- if ((isRetryable || isAbortedTx) && attempt < 2) {
97
- if (isAbortedTx) {
98
- try {
99
- await this.pool.query("ROLLBACK");
100
- } catch {
101
- }
102
- }
103
- await new Promise((r) => setTimeout(r, 500 + Math.random() * 1e3));
104
- continue;
105
- }
106
- throw err;
107
- }
108
- }
109
- }
110
- // ─── Engine Integration ──────────────────────────────────
111
- getEngineDB() {
112
- if (!this.pool || this.ended) return null;
113
- const pool = this.pool;
114
- const self = this;
115
- const pgSql = (sql) => {
116
- let i = 0;
117
- return sql.replace(/\?/g, () => `$${++i}`);
118
- };
119
- return {
120
- run: async (sql, params) => {
121
- if (self.ended) return;
122
- await self._query(pgSql(sql), params);
123
- },
124
- get: async (sql, params) => {
125
- if (self.ended) return void 0;
126
- const result = await self._query(pgSql(sql), params);
127
- return result.rows[0];
128
- },
129
- all: async (sql, params) => {
130
- if (self.ended) return [];
131
- const result = await self._query(pgSql(sql), params);
132
- return result.rows;
133
- }
134
- };
135
- }
136
- getDialect() {
137
- return "postgres";
138
- }
139
- async migrate() {
140
- const stmts = getAllCreateStatements();
141
- let directPool = null;
142
- let client;
143
- if (this._isPgBouncer && this._directUrl) {
144
- try {
145
- const { Pool } = await getPg();
146
- directPool = new Pool({
147
- connectionString: this._directUrl,
148
- ssl: { rejectUnauthorized: false },
149
- max: 1,
150
- idleTimeoutMillis: 5e3,
151
- connectionTimeoutMillis: 8e3
152
- });
153
- directPool.on("error", () => {
154
- });
155
- client = await directPool.connect();
156
- console.log("[postgres] Using direct connection for migrations (bypassing PgBouncer)");
157
- } catch (err) {
158
- console.warn(`[postgres] Direct connection unavailable (${err.message?.slice(0, 80)}), using pooler for migrations`);
159
- if (directPool) {
160
- try {
161
- await directPool.end();
162
- } catch {
163
- }
164
- }
165
- directPool = null;
166
- client = await this.pool.connect();
167
- }
168
- } else {
169
- client = await this.pool.connect();
170
- }
171
- try {
172
- await client.query("BEGIN");
173
- for (const stmt of stmts) {
174
- await client.query(stmt);
175
- }
176
- await client.query(`
177
- INSERT INTO retention_policy (id) VALUES ('default')
178
- ON CONFLICT (id) DO NOTHING
179
- `);
180
- await client.query(`
181
- ALTER TABLE company_settings ADD COLUMN IF NOT EXISTS org_id TEXT
182
- `).catch(() => {
183
- });
184
- await client.query(`
185
- ALTER TABLE company_settings ADD COLUMN IF NOT EXISTS cf_api_token TEXT;
186
- ALTER TABLE company_settings ADD COLUMN IF NOT EXISTS cf_account_id TEXT;
187
- `).catch(() => {
188
- });
189
- await client.query(`
190
- ALTER TABLE company_settings ADD COLUMN IF NOT EXISTS org_email_config JSONB;
191
- `).catch(() => {
192
- });
193
- await client.query(`
194
- ALTER TABLE company_settings ADD COLUMN IF NOT EXISTS platform_capabilities JSONB;
195
- `).catch(() => {
196
- });
197
- await client.query(`
198
- ALTER TABLE company_settings ADD COLUMN IF NOT EXISTS branding JSONB;
199
- `).catch(() => {
200
- });
201
- await client.query(`
202
- ALTER TABLE users ADD COLUMN IF NOT EXISTS totp_secret TEXT;
203
- ALTER TABLE users ADD COLUMN IF NOT EXISTS totp_enabled BOOLEAN DEFAULT FALSE;
204
- ALTER TABLE users ADD COLUMN IF NOT EXISTS totp_backup_codes TEXT;
205
- ALTER TABLE users ADD COLUMN IF NOT EXISTS permissions JSONB DEFAULT '"*"';
206
- ALTER TABLE users ADD COLUMN IF NOT EXISTS must_reset_password BOOLEAN DEFAULT FALSE;
207
- ALTER TABLE users ADD COLUMN IF NOT EXISTS is_active BOOLEAN DEFAULT TRUE;
208
- ALTER TABLE users ADD COLUMN IF NOT EXISTS client_org_id TEXT;
209
- ALTER TABLE agents ADD COLUMN IF NOT EXISTS billing_rate NUMERIC(10,2) DEFAULT 0;
210
- `).catch(() => {
211
- });
212
- await client.query(`
213
- CREATE TABLE IF NOT EXISTS client_organizations (
214
- id TEXT PRIMARY KEY DEFAULT gen_random_uuid(),
215
- name TEXT NOT NULL,
216
- slug TEXT NOT NULL UNIQUE,
217
- contact_name TEXT,
218
- contact_email TEXT,
219
- description TEXT,
220
- is_active BOOLEAN DEFAULT TRUE,
221
- settings JSONB DEFAULT '{}',
222
- created_at TIMESTAMP DEFAULT NOW(),
223
- updated_at TIMESTAMP DEFAULT NOW()
224
- );
225
- `);
226
- await client.query(`
227
- ALTER TABLE client_organizations ADD COLUMN IF NOT EXISTS billing_rate_per_agent NUMERIC(10,2) DEFAULT 0;
228
- ALTER TABLE client_organizations ADD COLUMN IF NOT EXISTS currency TEXT DEFAULT 'USD';
229
- ALTER TABLE agents ADD COLUMN IF NOT EXISTS client_org_id TEXT REFERENCES client_organizations(id);
230
-
231
- CREATE TABLE IF NOT EXISTS org_billing_records (
232
- id TEXT PRIMARY KEY DEFAULT gen_random_uuid(),
233
- org_id TEXT NOT NULL REFERENCES client_organizations(id) ON DELETE CASCADE,
234
- agent_id TEXT,
235
- month TEXT NOT NULL,
236
- revenue NUMERIC(10,2) DEFAULT 0,
237
- token_cost NUMERIC(10,4) DEFAULT 0,
238
- input_tokens BIGINT DEFAULT 0,
239
- output_tokens BIGINT DEFAULT 0,
240
- notes TEXT,
241
- created_at TIMESTAMP DEFAULT NOW(),
242
- updated_at TIMESTAMP DEFAULT NOW(),
243
- UNIQUE(org_id, agent_id, month)
244
- );
245
- `).catch(() => {
246
- });
247
- await client.query(`
248
- CREATE TABLE IF NOT EXISTS agent_knowledge_access (
249
- id TEXT PRIMARY KEY DEFAULT gen_random_uuid(),
250
- agent_id TEXT NOT NULL,
251
- knowledge_base_id TEXT NOT NULL,
252
- access_type TEXT NOT NULL DEFAULT 'read',
253
- created_at TIMESTAMP DEFAULT NOW(),
254
- UNIQUE(agent_id, knowledge_base_id)
255
- );
256
- `);
257
- await client.query("COMMIT");
258
- } catch (err) {
259
- await client.query("ROLLBACK");
260
- throw err;
261
- } finally {
262
- client.release();
263
- if (directPool) {
264
- try {
265
- await directPool.end();
266
- } catch {
267
- }
268
- }
269
- }
270
- }
271
- // ─── Company ─────────────────────────────────────────────
272
- async getSettings() {
273
- const { rows } = await this._query(
274
- "SELECT * FROM company_settings WHERE id = $1",
275
- ["default"]
276
- );
277
- return rows[0] ? this.mapSettings(rows[0]) : null;
278
- }
279
- async updateSettings(updates) {
280
- await this.pool.query(
281
- `INSERT INTO company_settings (id, name, subdomain) VALUES ('default', '', '')
282
- ON CONFLICT (id) DO NOTHING`
283
- );
284
- const fields = [];
285
- const values = [];
286
- let i = 1;
287
- const map = {
288
- name: "name",
289
- orgId: "org_id",
290
- domain: "domain",
291
- subdomain: "subdomain",
292
- smtpHost: "smtp_host",
293
- smtpPort: "smtp_port",
294
- smtpUser: "smtp_user",
295
- smtpPass: "smtp_pass",
296
- dkimPrivateKey: "dkim_private_key",
297
- logoUrl: "logo_url",
298
- primaryColor: "primary_color",
299
- plan: "plan",
300
- deploymentKeyHash: "deployment_key_hash",
301
- domainRegistrationId: "domain_registration_id",
302
- domainDnsChallenge: "domain_dns_challenge",
303
- domainVerifiedAt: "domain_verified_at",
304
- domainRegisteredAt: "domain_registered_at",
305
- domainStatus: "domain_status",
306
- useRootDomain: "use_root_domain",
307
- cfApiToken: "cf_api_token",
308
- cfAccountId: "cf_account_id",
309
- signatureTemplate: "signature_template"
310
- };
311
- for (const [key, col] of Object.entries(map)) {
312
- if (updates[key] !== void 0) {
313
- fields.push(`${col} = $${i}`);
314
- values.push(updates[key]);
315
- i++;
316
- }
317
- }
318
- if (updates.ssoConfig !== void 0) {
319
- fields.push(`sso_config = $${i}`);
320
- values.push(JSON.stringify(updates.ssoConfig));
321
- i++;
322
- }
323
- if (updates.toolSecurityConfig !== void 0) {
324
- fields.push(`tool_security_config = $${i}`);
325
- values.push(JSON.stringify(updates.toolSecurityConfig));
326
- i++;
327
- }
328
- if (updates.firewallConfig !== void 0) {
329
- fields.push(`firewall_config = $${i}`);
330
- values.push(JSON.stringify(updates.firewallConfig));
331
- i++;
332
- }
333
- if (updates.modelPricingConfig !== void 0) {
334
- fields.push(`model_pricing_config = $${i}`);
335
- values.push(JSON.stringify(updates.modelPricingConfig));
336
- i++;
337
- }
338
- if (updates.securityConfig !== void 0) {
339
- fields.push(`security_config = $${i}`);
340
- values.push(JSON.stringify(updates.securityConfig));
341
- i++;
342
- }
343
- if (updates.orgEmailConfig !== void 0) {
344
- fields.push(`org_email_config = $${i}`);
345
- values.push(JSON.stringify(updates.orgEmailConfig));
346
- i++;
347
- }
348
- if (updates.platformCapabilities !== void 0) {
349
- fields.push(`platform_capabilities = $${i}`);
350
- values.push(JSON.stringify(updates.platformCapabilities));
351
- i++;
352
- }
353
- if (updates.branding !== void 0) {
354
- fields.push(`branding = $${i}`);
355
- values.push(JSON.stringify(updates.branding));
356
- i++;
357
- }
358
- fields.push(`updated_at = NOW()`);
359
- values.push("default");
360
- const { rows } = await this.pool.query(
361
- `UPDATE company_settings SET ${fields.join(", ")} WHERE id = $${i} RETURNING *`,
362
- values
363
- );
364
- return this.mapSettings(rows[0]);
365
- }
366
- // ─── Agents ──────────────────────────────────────────────
367
- async createAgent(input) {
368
- const id = input.id || randomUUID();
369
- const email = input.email || `${input.name.toLowerCase().replace(/\s+/g, "-")}@localhost`;
370
- const { rows } = await this.pool.query(
371
- `INSERT INTO agents (id, name, email, role, metadata, created_by)
372
- VALUES ($1, $2, $3, $4, $5, $6) RETURNING *`,
373
- [id, input.name, email, input.role || "assistant", JSON.stringify(input.metadata || {}), input.createdBy]
374
- );
375
- return this.mapAgent(rows[0]);
376
- }
377
- async getAgent(id) {
378
- const { rows } = await this.pool.query("SELECT * FROM agents WHERE id = $1", [id]);
379
- return rows[0] ? this.mapAgent(rows[0]) : null;
380
- }
381
- async getAgentByName(name) {
382
- const { rows } = await this.pool.query("SELECT * FROM agents WHERE name = $1", [name]);
383
- return rows[0] ? this.mapAgent(rows[0]) : null;
384
- }
385
- async listAgents(opts) {
386
- let q = "SELECT * FROM agents";
387
- const params = [];
388
- if (opts?.status) {
389
- q += " WHERE status = $1";
390
- params.push(opts.status);
391
- }
392
- q += " ORDER BY created_at DESC";
393
- if (opts?.limit) {
394
- q += ` LIMIT ${opts.limit}`;
395
- }
396
- if (opts?.offset) {
397
- q += ` OFFSET ${opts.offset}`;
398
- }
399
- const { rows } = await this.pool.query(q, params);
400
- return rows.map((r) => this.mapAgent(r));
401
- }
402
- async updateAgent(id, updates) {
403
- const fields = [];
404
- const values = [];
405
- let i = 1;
406
- for (const [key, col] of Object.entries({ name: "name", email: "email", role: "role", status: "status" })) {
407
- if (updates[key] !== void 0) {
408
- fields.push(`${col} = $${i}`);
409
- values.push(updates[key]);
410
- i++;
411
- }
412
- }
413
- if (updates.metadata) {
414
- fields.push(`metadata = $${i}`);
415
- values.push(JSON.stringify(updates.metadata));
416
- i++;
417
- }
418
- if (updates.securityOverrides !== void 0) {
419
- fields.push(`security_overrides = $${i}`);
420
- values.push(JSON.stringify(updates.securityOverrides));
421
- i++;
422
- }
423
- fields.push("updated_at = NOW()");
424
- values.push(id);
425
- const { rows } = await this.pool.query(
426
- `UPDATE agents SET ${fields.join(", ")} WHERE id = $${i} RETURNING *`,
427
- values
428
- );
429
- return this.mapAgent(rows[0]);
430
- }
431
- async archiveAgent(id) {
432
- await this.pool.query("UPDATE agents SET status = 'archived', updated_at = NOW() WHERE id = $1", [id]);
433
- }
434
- async deleteAgent(id) {
435
- await this.pool.query("DELETE FROM agents WHERE id = $1", [id]);
436
- }
437
- async countAgents(status) {
438
- const q = status ? await this.pool.query("SELECT COUNT(*) FROM agents WHERE status = $1", [status]) : await this.pool.query("SELECT COUNT(*) FROM agents");
439
- return parseInt(q.rows[0].count, 10);
440
- }
441
- // ─── Users ───────────────────────────────────────────────
442
- async createUser(input) {
443
- const id = randomUUID();
444
- let passwordHash = null;
445
- if (input.password) {
446
- const { default: bcrypt } = await import("bcryptjs");
447
- passwordHash = await bcrypt.hash(input.password, 12);
448
- }
449
- const { rows } = await this.pool.query(
450
- `INSERT INTO users (id, email, name, role, password_hash, sso_provider, sso_subject)
451
- VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING *`,
452
- [id, input.email, input.name, input.role, passwordHash, input.ssoProvider || null, input.ssoSubject || null]
453
- );
454
- return this.mapUser(rows[0]);
455
- }
456
- async getUser(id) {
457
- const { rows } = await this.pool.query("SELECT * FROM users WHERE id = $1", [id]);
458
- return rows[0] ? this.mapUser(rows[0]) : null;
459
- }
460
- async getUserByEmail(email) {
461
- const { rows } = await this.pool.query("SELECT * FROM users WHERE email = $1", [email]);
462
- return rows[0] ? this.mapUser(rows[0]) : null;
463
- }
464
- async getUserBySso(provider, subject) {
465
- const { rows } = await this.pool.query(
466
- "SELECT * FROM users WHERE sso_provider = $1 AND sso_subject = $2",
467
- [provider, subject]
468
- );
469
- return rows[0] ? this.mapUser(rows[0]) : null;
470
- }
471
- async listUsers(opts) {
472
- let q = "SELECT * FROM users ORDER BY created_at DESC";
473
- if (opts?.limit) q += ` LIMIT ${opts.limit}`;
474
- if (opts?.offset) q += ` OFFSET ${opts.offset}`;
475
- const { rows } = await this.pool.query(q);
476
- return rows.map((r) => this.mapUser(r));
477
- }
478
- async updateUser(id, updates) {
479
- const fields = [];
480
- const values = [];
481
- let i = 1;
482
- for (const key of ["email", "name", "role", "sso_provider", "sso_subject", "totp_secret", "totp_enabled", "totp_backup_codes", "last_login_at"]) {
483
- const camelKey = key.replace(/_([a-z])/g, (_, c) => c.toUpperCase());
484
- if (updates[camelKey] !== void 0) {
485
- fields.push(`${key} = $${i}`);
486
- values.push(updates[camelKey]);
487
- i++;
488
- }
489
- }
490
- fields.push("updated_at = NOW()");
491
- values.push(id);
492
- const { rows } = await this.pool.query(
493
- `UPDATE users SET ${fields.join(", ")} WHERE id = $${i} RETURNING *`,
494
- values
495
- );
496
- return this.mapUser(rows[0]);
497
- }
498
- async deleteUser(id) {
499
- await this.pool.query("DELETE FROM users WHERE id = $1", [id]);
500
- }
501
- // ─── Audit ───────────────────────────────────────────────
502
- async logEvent(event) {
503
- await this.pool.query(
504
- `INSERT INTO audit_log (id, actor, actor_type, action, resource, details, ip, org_id)
505
- VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`,
506
- [
507
- randomUUID(),
508
- event.actor,
509
- event.actorType,
510
- event.action,
511
- event.resource,
512
- JSON.stringify(event.details || {}),
513
- event.ip || null,
514
- event.orgId || null
515
- ]
516
- );
517
- }
518
- async queryAudit(filters) {
519
- const where = [];
520
- const params = [];
521
- let i = 1;
522
- if (filters.actor) {
523
- where.push(`actor = $${i++}`);
524
- params.push(filters.actor);
525
- }
526
- if (filters.action) {
527
- where.push(`action = $${i++}`);
528
- params.push(filters.action);
529
- }
530
- if (filters.resource) {
531
- where.push(`resource LIKE $${i++}`);
532
- params.push(`%${filters.resource}%`);
533
- }
534
- if (filters.orgId) {
535
- where.push(`org_id = $${i++}`);
536
- params.push(filters.orgId);
537
- }
538
- if (filters.from) {
539
- where.push(`timestamp >= $${i++}`);
540
- params.push(filters.from);
541
- }
542
- if (filters.to) {
543
- where.push(`timestamp <= $${i++}`);
544
- params.push(filters.to);
545
- }
546
- const whereClause = where.length > 0 ? `WHERE ${where.join(" AND ")}` : "";
547
- const countResult = await this.pool.query(`SELECT COUNT(*) FROM audit_log ${whereClause}`, params);
548
- const total = parseInt(countResult.rows[0].count, 10);
549
- let q = `SELECT * FROM audit_log ${whereClause} ORDER BY timestamp DESC`;
550
- if (filters.limit) q += ` LIMIT ${filters.limit}`;
551
- if (filters.offset) q += ` OFFSET ${filters.offset}`;
552
- const { rows } = await this.pool.query(q, params);
553
- return {
554
- events: rows.map((r) => ({
555
- id: r.id,
556
- timestamp: r.timestamp,
557
- actor: r.actor,
558
- actorType: r.actor_type,
559
- action: r.action,
560
- resource: r.resource,
561
- details: typeof r.details === "string" ? JSON.parse(r.details || "{}") : r.details || {},
562
- ip: r.ip
563
- })),
564
- total
565
- };
566
- }
567
- // ─── API Keys ────────────────────────────────────────────
568
- async createApiKey(input) {
569
- const id = randomUUID();
570
- const plaintext = `ek_${randomUUID().replace(/-/g, "")}`;
571
- const keyHash = createHash("sha256").update(plaintext).digest("hex");
572
- const keyPrefix = plaintext.substring(0, 11);
573
- const { rows } = await this.pool.query(
574
- `INSERT INTO api_keys (id, name, key_hash, key_prefix, scopes, created_by, expires_at)
575
- VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING *`,
576
- [id, input.name, keyHash, keyPrefix, JSON.stringify(input.scopes), input.createdBy, input.expiresAt || null]
577
- );
578
- return { key: this.mapApiKey(rows[0]), plaintext };
579
- }
580
- async getApiKey(id) {
581
- const { rows } = await this.pool.query("SELECT * FROM api_keys WHERE id = $1", [id]);
582
- return rows[0] ? this.mapApiKey(rows[0]) : null;
583
- }
584
- async validateApiKey(plaintext) {
585
- const keyHash = createHash("sha256").update(plaintext).digest("hex");
586
- const { rows } = await this.pool.query(
587
- "SELECT * FROM api_keys WHERE key_hash = $1 AND (revoked IS NULL OR revoked = 0)",
588
- [keyHash]
589
- );
590
- if (!rows[0]) return null;
591
- const key = this.mapApiKey(rows[0]);
592
- if (key.expiresAt && /* @__PURE__ */ new Date() > key.expiresAt) return null;
593
- await this.pool.query("UPDATE api_keys SET last_used_at = NOW() WHERE id = $1", [key.id]);
594
- return key;
595
- }
596
- async listApiKeys(opts) {
597
- let q = "SELECT * FROM api_keys WHERE (revoked IS NULL OR revoked = 0)";
598
- const params = [];
599
- if (opts?.createdBy) {
600
- q += " AND created_by = $" + (params.length + 1);
601
- params.push(opts.createdBy);
602
- }
603
- q += " ORDER BY created_at DESC";
604
- const { rows } = await this.pool.query(q, params);
605
- return rows.map((r) => this.mapApiKey(r));
606
- }
607
- async revokeApiKey(id) {
608
- await this.pool.query("UPDATE api_keys SET revoked = 1 WHERE id = $1", [id]);
609
- }
610
- // ─── Rules ───────────────────────────────────────────────
611
- async createRule(rule) {
612
- const id = randomUUID();
613
- const { rows } = await this.pool.query(
614
- `INSERT INTO email_rules (id, name, agent_id, conditions, actions, priority, enabled)
615
- VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING *`,
616
- [
617
- id,
618
- rule.name,
619
- rule.agentId || null,
620
- JSON.stringify(rule.conditions),
621
- JSON.stringify(rule.actions),
622
- rule.priority,
623
- rule.enabled ? 1 : 0
624
- ]
625
- );
626
- return this.mapRule(rows[0]);
627
- }
628
- async getRules(agentId) {
629
- let q = "SELECT * FROM email_rules";
630
- const params = [];
631
- if (agentId) {
632
- q += " WHERE agent_id = $1 OR agent_id IS NULL";
633
- params.push(agentId);
634
- }
635
- q += " ORDER BY priority DESC";
636
- const { rows } = await this.pool.query(q, params);
637
- return rows.map((r) => this.mapRule(r));
638
- }
639
- async updateRule(id, updates) {
640
- const fields = [];
641
- const values = [];
642
- let i = 1;
643
- if (updates.name !== void 0) {
644
- fields.push(`name = $${i++}`);
645
- values.push(updates.name);
646
- }
647
- if (updates.conditions) {
648
- fields.push(`conditions = $${i++}`);
649
- values.push(JSON.stringify(updates.conditions));
650
- }
651
- if (updates.actions) {
652
- fields.push(`actions = $${i++}`);
653
- values.push(JSON.stringify(updates.actions));
654
- }
655
- if (updates.priority !== void 0) {
656
- fields.push(`priority = $${i++}`);
657
- values.push(updates.priority);
658
- }
659
- if (updates.enabled !== void 0) {
660
- fields.push(`enabled = $${i++}`);
661
- values.push(updates.enabled ? 1 : 0);
662
- }
663
- fields.push("updated_at = NOW()");
664
- values.push(id);
665
- const { rows } = await this.pool.query(
666
- `UPDATE email_rules SET ${fields.join(", ")} WHERE id = $${i} RETURNING *`,
667
- values
668
- );
669
- return this.mapRule(rows[0]);
670
- }
671
- async deleteRule(id) {
672
- await this.pool.query("DELETE FROM email_rules WHERE id = $1", [id]);
673
- }
674
- // ─── Retention ───────────────────────────────────────────
675
- async getRetentionPolicy() {
676
- const { rows } = await this.pool.query("SELECT * FROM retention_policy WHERE id = $1", ["default"]);
677
- if (!rows[0]) return { enabled: false, retainDays: 365, archiveFirst: true };
678
- return {
679
- enabled: !!rows[0].enabled,
680
- retainDays: rows[0].retain_days,
681
- excludeTags: typeof rows[0].exclude_tags === "string" ? JSON.parse(rows[0].exclude_tags || "[]") : rows[0].exclude_tags || [],
682
- archiveFirst: !!rows[0].archive_first
683
- };
684
- }
685
- async setRetentionPolicy(policy) {
686
- await this.pool.query(
687
- `UPDATE retention_policy SET enabled = $1, retain_days = $2, exclude_tags = $3, archive_first = $4
688
- WHERE id = 'default'`,
689
- [policy.enabled ? 1 : 0, policy.retainDays, JSON.stringify(policy.excludeTags || []), policy.archiveFirst ? 1 : 0]
690
- );
691
- }
692
- // ─── Stats ───────────────────────────────────────────────
693
- async getStats() {
694
- const [agents, active, users, audit] = await Promise.all([
695
- this.pool.query("SELECT COUNT(*) FROM agents"),
696
- this.pool.query("SELECT COUNT(*) FROM agents WHERE status = 'active'"),
697
- this.pool.query("SELECT COUNT(*) FROM users"),
698
- this.pool.query("SELECT COUNT(*) FROM audit_log")
699
- ]);
700
- return {
701
- totalAgents: parseInt(agents.rows[0].count, 10),
702
- activeAgents: parseInt(active.rows[0].count, 10),
703
- totalUsers: parseInt(users.rows[0].count, 10),
704
- totalEmails: 0,
705
- // TODO: wire to email storage
706
- totalAuditEvents: parseInt(audit.rows[0].count, 10)
707
- };
708
- }
709
- // ─── Security Events ─────────────────────────────────────
710
- async logSecurityEvent(event) {
711
- const id = randomUUID();
712
- await this.pool.query(
713
- `INSERT INTO security_events (id, event_type, severity, agent_id, details, source_ip)
714
- VALUES ($1, $2, $3, $4, $5, $6)`,
715
- [id, event.eventType, event.severity, event.agentId, JSON.stringify(event.details), event.sourceIp]
716
- );
717
- }
718
- async getSecurityEvents(filter = {}) {
719
- let query = "SELECT * FROM security_events WHERE 1=1";
720
- const params = [];
721
- let paramIndex = 1;
722
- if (filter.eventType && filter.eventType.length > 0) {
723
- query += ` AND event_type = ANY($${paramIndex++})`;
724
- params.push(filter.eventType);
725
- }
726
- if (filter.severity && filter.severity.length > 0) {
727
- query += ` AND severity = ANY($${paramIndex++})`;
728
- params.push(filter.severity);
729
- }
730
- if (filter.agentId) {
731
- query += ` AND agent_id = $${paramIndex++}`;
732
- params.push(filter.agentId);
733
- }
734
- if (filter.sourceIp) {
735
- query += ` AND source_ip = $${paramIndex++}`;
736
- params.push(filter.sourceIp);
737
- }
738
- if (filter.fromDate) {
739
- query += ` AND created_at >= $${paramIndex++}`;
740
- params.push(filter.fromDate);
741
- }
742
- if (filter.toDate) {
743
- query += ` AND created_at <= $${paramIndex++}`;
744
- params.push(filter.toDate);
745
- }
746
- query += " ORDER BY created_at DESC";
747
- if (filter.limit) {
748
- query += ` LIMIT ${filter.limit}`;
749
- }
750
- if (filter.offset) {
751
- query += ` OFFSET ${filter.offset}`;
752
- }
753
- const { rows } = await this.pool.query(query, params);
754
- return rows.map((row) => ({
755
- id: row.id,
756
- eventType: row.event_type,
757
- severity: row.severity,
758
- agentId: row.agent_id,
759
- details: typeof row.details === "string" ? JSON.parse(row.details) : row.details,
760
- sourceIp: row.source_ip,
761
- timestamp: row.created_at
762
- }));
763
- }
764
- // ─── Mappers ─────────────────────────────────────────────
765
- mapAgent(r) {
766
- return {
767
- id: r.id,
768
- name: r.name,
769
- email: r.email,
770
- role: r.role,
771
- status: r.status,
772
- metadata: typeof r.metadata === "string" ? JSON.parse(r.metadata) : r.metadata,
773
- securityOverrides: r.security_overrides ? typeof r.security_overrides === "string" ? JSON.parse(r.security_overrides) : r.security_overrides : void 0,
774
- createdAt: new Date(r.created_at),
775
- updatedAt: new Date(r.updated_at),
776
- createdBy: r.created_by,
777
- client_org_id: r.client_org_id || null
778
- };
779
- }
780
- mapUser(r) {
781
- return {
782
- id: r.id,
783
- email: r.email,
784
- name: r.name,
785
- role: r.role,
786
- passwordHash: r.password_hash,
787
- ssoProvider: r.sso_provider,
788
- ssoSubject: r.sso_subject,
789
- totpSecret: r.totp_secret,
790
- totpEnabled: !!r.totp_enabled,
791
- totpBackupCodes: r.totp_backup_codes,
792
- permissions: r.permissions != null ? typeof r.permissions === "string" ? (() => {
793
- try {
794
- return JSON.parse(r.permissions);
795
- } catch {
796
- return "*";
797
- }
798
- })() : r.permissions : "*",
799
- mustResetPassword: !!r.must_reset_password,
800
- isActive: r.is_active !== false && r.is_active !== 0,
801
- // default true
802
- clientOrgId: r.client_org_id || null,
803
- createdAt: new Date(r.created_at),
804
- updatedAt: new Date(r.updated_at),
805
- lastLoginAt: r.last_login_at ? new Date(r.last_login_at) : void 0
806
- };
807
- }
808
- mapApiKey(r) {
809
- return {
810
- id: r.id,
811
- name: r.name,
812
- keyHash: r.key_hash,
813
- keyPrefix: r.key_prefix,
814
- scopes: typeof r.scopes === "string" ? JSON.parse(r.scopes) : r.scopes,
815
- createdBy: r.created_by,
816
- createdAt: new Date(r.created_at),
817
- lastUsedAt: r.last_used_at ? new Date(r.last_used_at) : void 0,
818
- expiresAt: r.expires_at ? new Date(r.expires_at) : void 0,
819
- revoked: !!r.revoked
820
- };
821
- }
822
- mapRule(r) {
823
- return {
824
- id: r.id,
825
- name: r.name,
826
- agentId: r.agent_id,
827
- conditions: typeof r.conditions === "string" ? JSON.parse(r.conditions) : r.conditions,
828
- actions: typeof r.actions === "string" ? JSON.parse(r.actions) : r.actions,
829
- priority: r.priority,
830
- enabled: !!r.enabled,
831
- createdAt: new Date(r.created_at),
832
- updatedAt: new Date(r.updated_at)
833
- };
834
- }
835
- mapSettings(r) {
836
- return {
837
- id: r.id,
838
- orgId: r.org_id || void 0,
839
- name: r.name,
840
- domain: r.domain,
841
- subdomain: r.subdomain,
842
- smtpHost: r.smtp_host,
843
- smtpPort: r.smtp_port,
844
- smtpUser: r.smtp_user,
845
- smtpPass: r.smtp_pass,
846
- dkimPrivateKey: r.dkim_private_key,
847
- logoUrl: r.logo_url,
848
- primaryColor: r.primary_color,
849
- ssoConfig: r.sso_config ? typeof r.sso_config === "string" ? JSON.parse(r.sso_config) : r.sso_config : void 0,
850
- toolSecurityConfig: r.tool_security_config ? typeof r.tool_security_config === "string" ? JSON.parse(r.tool_security_config) : r.tool_security_config : {},
851
- firewallConfig: r.firewall_config ? typeof r.firewall_config === "string" ? JSON.parse(r.firewall_config) : r.firewall_config : {},
852
- securityConfig: r.security_config ? typeof r.security_config === "string" ? JSON.parse(r.security_config) : r.security_config : {},
853
- modelPricingConfig: r.model_pricing_config ? typeof r.model_pricing_config === "string" ? JSON.parse(r.model_pricing_config) : r.model_pricing_config : {},
854
- plan: r.plan,
855
- createdAt: new Date(r.created_at),
856
- updatedAt: new Date(r.updated_at),
857
- deploymentKeyHash: r.deployment_key_hash,
858
- domainRegistrationId: r.domain_registration_id,
859
- domainDnsChallenge: r.domain_dns_challenge,
860
- domainVerifiedAt: r.domain_verified_at || void 0,
861
- domainRegisteredAt: r.domain_registered_at || void 0,
862
- domainStatus: r.domain_status || "unregistered",
863
- useRootDomain: r.use_root_domain || false,
864
- cfApiToken: r.cf_api_token || void 0,
865
- cfAccountId: r.cf_account_id || void 0,
866
- orgEmailConfig: r.org_email_config ? typeof r.org_email_config === "string" ? JSON.parse(r.org_email_config) : r.org_email_config : void 0,
867
- platformCapabilities: r.platform_capabilities ? typeof r.platform_capabilities === "string" ? JSON.parse(r.platform_capabilities) : r.platform_capabilities : void 0,
868
- signatureTemplate: r.signature_template || void 0,
869
- branding: r.branding ? typeof r.branding === "string" ? JSON.parse(r.branding) : r.branding : void 0
870
- };
871
- }
872
- };
873
- export {
874
- PostgresAdapter
875
- };