@agenticmail/enterprise 0.5.324 → 0.5.326

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 (449) 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-CQYLRIQ3.js → chunk-DWHJYAV6.js} +143 -26
  7. package/dist/{chunk-HKCKMCPY.js → chunk-G4YSECQ4.js} +2 -2
  8. package/dist/{chunk-DM7FTF7W.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-USMKX7WN.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/docs/cluster.html +285 -0
  23. package/dist/dashboard/pages/cluster.js +400 -69
  24. package/dist/{deployer-3YK4RPUL.js → deployer-7NG7LCJW.js} +1 -1
  25. package/dist/{factory-JFWXTAWK.js → factory-4V2W4BSV.js} +1 -1
  26. package/dist/index.js +9 -9
  27. package/dist/{integrations-TF4EBCJ7.js → integrations-V2WXFDIV.js} +13 -13
  28. package/dist/{local-6MLIZDKO.js → local-OXFH4V7E.js} +2 -2
  29. package/dist/{meeting-voice-intelligence-CJLR52YV.js → meeting-voice-intelligence-RZZCAD6G.js} +2 -2
  30. package/dist/{meetings-FJ453ENF.js → meetings-SQNTB6GD.js} +1 -1
  31. package/dist/{microsoft-2IIHDLJB.js → microsoft-2PDVV6HX.js} +3 -3
  32. package/dist/{postgres-WGUVC2S7.js → postgres-USXBPTHX.js} +2 -2
  33. package/dist/{pw-ai-IBEF6HBF.js → pw-ai-NK5GKBDG.js} +1 -1
  34. package/dist/{routes-XYR2RNEC.js → routes-T3CDAQTD.js} +4 -4
  35. package/dist/{runtime-6BULDBR3.js → runtime-X4BTVICL.js} +1 -1
  36. package/dist/{server-7NT4LMSQ.js → server-WQ6LLYGB.js} +5 -5
  37. package/dist/{setup-2JBXMUDS.js → setup-6DRKSOMH.js} +2 -2
  38. package/dist/{skills-FR7I5V7H.js → skills-EL4RTJKK.js} +1 -1
  39. package/logs/cloudflared-error.log +14 -0
  40. package/logs/enterprise-out.log +2 -0
  41. package/package.json +1 -1
  42. package/src/admin/routes.ts +1 -1
  43. package/src/agent-tools/tool-resolver.ts +1 -1
  44. package/src/agent-tools/tools/agenticmail.ts +2 -2
  45. package/src/agent-tools/tools/browser.ts +1 -1
  46. package/src/agent-tools/tools/enterprise-code-sandbox.ts +1 -1
  47. package/src/agent-tools/tools/enterprise-diff.ts +1 -1
  48. package/src/agent-tools/tools/enterprise-http.ts +1 -3
  49. package/src/agent-tools/tools/enterprise-security-scan.ts +1 -1
  50. package/src/agent-tools/tools/google/forms.ts +2 -2
  51. package/src/agent-tools/tools/google/gmail.ts +1 -1
  52. package/src/agent-tools/tools/google/maps.ts +2 -2
  53. package/src/agent-tools/tools/google/meeting-voice.ts +1 -1
  54. package/src/agent-tools/tools/google/meetings.ts +1 -1
  55. package/src/agent-tools/tools/google/slides.ts +2 -2
  56. package/src/agent-tools/tools/grep.ts +1 -1
  57. package/src/agent-tools/tools/knowledge-search.ts +1 -1
  58. package/src/agent-tools/tools/local/coding.ts +5 -5
  59. package/src/agent-tools/tools/microsoft/excel-vba.ts +1 -1
  60. package/src/agent-tools/tools/microsoft/excel.ts +1 -1
  61. package/src/agent-tools/tools/microsoft/powerpoint.ts +1 -1
  62. package/src/agent-tools/tools/visual-memory/index.ts +11 -11
  63. package/src/agent-tools/tools/visual-memory/similarity.ts +2 -2
  64. package/src/agent-tools/tools/visual-memory/storage.ts +1 -1
  65. package/src/agenticmail/providers/imap.ts +2 -2
  66. package/src/browser/enterprise-compat.ts +1 -1
  67. package/src/cli-agent.ts +3 -3
  68. package/src/cli-serve.ts +1 -1
  69. package/src/dashboard/docs/cluster.html +285 -0
  70. package/src/dashboard/pages/cluster.js +400 -69
  71. package/src/database-access/connection-manager.ts +6 -6
  72. package/src/database-access/routes.ts +0 -1
  73. package/src/db/dynamodb.ts +1 -1
  74. package/src/db/postgres.ts +2 -2
  75. package/src/deploy/fly.ts +4 -4
  76. package/src/deploy/managed.ts +0 -1
  77. package/src/engine/agent-config.ts +1 -1
  78. package/src/engine/agent-heartbeat.ts +1 -1
  79. package/src/engine/agent-hierarchy.ts +1 -1
  80. package/src/engine/agent-memory.ts +1 -1
  81. package/src/engine/agent-routes.ts +2 -2
  82. package/src/engine/chat-poller.ts +1 -1
  83. package/src/engine/cluster.ts +14 -1
  84. package/src/engine/community-registry.ts +2 -2
  85. package/src/engine/db-adapter.ts +0 -1
  86. package/src/engine/deployer.ts +8 -8
  87. package/src/engine/email-poller.ts +1 -1
  88. package/src/engine/knowledge-contribution.ts +1 -1
  89. package/src/engine/knowledge-import/import-manager.ts +2 -3
  90. package/src/engine/knowledge-import/processors/extract-github.ts +1 -1
  91. package/src/engine/knowledge-import/processors/extract-sharepoint.ts +1 -1
  92. package/src/engine/knowledge-import/processors/validate.ts +1 -1
  93. package/src/engine/lifecycle.ts +1 -1
  94. package/src/engine/meeting-monitor.ts +2 -2
  95. package/src/engine/meeting-voice-intelligence.ts +3 -3
  96. package/src/engine/messaging-poller.ts +2 -2
  97. package/src/engine/org-integration-routes.ts +2 -2
  98. package/src/engine/org-integrations.ts +1 -1
  99. package/src/engine/routes.ts +119 -1
  100. package/src/engine/skills.ts +1 -1
  101. package/src/engine/tool-catalog.ts +1 -1
  102. package/src/engine/vault-routes.ts +1 -1
  103. package/src/engine/vault.ts +1 -1
  104. package/src/mcp/adapters/adp.adapter.ts +1 -1
  105. package/src/mcp/adapters/auth0.adapter.ts +1 -1
  106. package/src/mcp/adapters/clickup.adapter.ts +1 -1
  107. package/src/mcp/adapters/close.adapter.ts +1 -1
  108. package/src/mcp/adapters/firebase.adapter.ts +1 -1
  109. package/src/mcp/adapters/google-ads.adapter.ts +1 -1
  110. package/src/mcp/adapters/kubernetes.adapter.ts +1 -1
  111. package/src/mcp/adapters/mixpanel.adapter.ts +1 -1
  112. package/src/mcp/adapters/recurly.adapter.ts +1 -1
  113. package/src/mcp/adapters/sap.adapter.ts +2 -2
  114. package/src/mcp/adapters/shortcut.adapter.ts +1 -1
  115. package/src/mcp/adapters/snowflake.adapter.ts +1 -1
  116. package/src/mcp/adapters/stripe.adapter.ts +1 -1
  117. package/src/mcp/adapters/supabase.adapter.ts +1 -1
  118. package/src/mcp/adapters/zuora.adapter.ts +1 -1
  119. package/src/middleware/request-limits.ts +1 -1
  120. package/src/runtime/agent-loop.ts +3 -3
  121. package/src/runtime/compaction.ts +2 -2
  122. package/src/runtime/followup.ts +1 -1
  123. package/src/runtime/hooks.ts +3 -3
  124. package/src/runtime/index.ts +5 -6
  125. package/src/runtime/llm-client.ts +1 -1
  126. package/src/runtime/subagent.ts +0 -1
  127. package/src/runtime/types.ts +2 -0
  128. package/src/security/brute-force.ts +1 -1
  129. package/src/security/csp.ts +1 -1
  130. package/src/security/index.ts +3 -3
  131. package/src/security/input-sanitizer.ts +1 -1
  132. package/src/security/threat-logger.ts +2 -2
  133. package/src/server.ts +2 -2
  134. package/src/setup/database.ts +1 -1
  135. package/src/setup/index.ts +1 -2
  136. package/src/setup/provision.ts +1 -1
  137. package/dist/_seed-data-FQR5PY2W.js +0 -4554
  138. package/dist/agent-heartbeat-3FWNHZFX.js +0 -510
  139. package/dist/agent-heartbeat-4RWHZR7H.js +0 -510
  140. package/dist/agent-heartbeat-6ZGB5ILY.js +0 -510
  141. package/dist/agent-heartbeat-BBINFNL4.js +0 -510
  142. package/dist/agent-heartbeat-BIVHLKFM.js +0 -510
  143. package/dist/agent-heartbeat-HGVIAHS5.js +0 -510
  144. package/dist/agent-heartbeat-HRKVFK2T.js +0 -510
  145. package/dist/agent-heartbeat-JC5GWVXD.js +0 -510
  146. package/dist/agent-heartbeat-K6A4HMHB.js +0 -510
  147. package/dist/agent-heartbeat-LCDXWFVB.js +0 -510
  148. package/dist/agent-heartbeat-P7HZCZAQ.js +0 -510
  149. package/dist/agent-heartbeat-PUIRSNIO.js +0 -510
  150. package/dist/agent-heartbeat-SN5ILQ6Y.js +0 -510
  151. package/dist/agent-heartbeat-TW5YTDYC.js +0 -510
  152. package/dist/agent-heartbeat-YCSWP54H.js +0 -510
  153. package/dist/agent-heartbeat-Z2QQXROL.js +0 -510
  154. package/dist/agent-tools-3W7XLUYA.js +0 -13949
  155. package/dist/agent-tools-54VZGT6L.js +0 -9
  156. package/dist/agent-tools-AYYDPO27.js +0 -13949
  157. package/dist/agent-tools-F2X47FKF.js +0 -13949
  158. package/dist/agent-tools-O6W3QAZL.js +0 -13949
  159. package/dist/agent-tools-OAWVZBMW.js +0 -9
  160. package/dist/agent-tools-QCCU74PN.js +0 -13949
  161. package/dist/agent-tools-QGE26U6R.js +0 -9
  162. package/dist/chunk-2LHUARN6.js +0 -4929
  163. package/dist/chunk-2WVCNCYC.js +0 -5087
  164. package/dist/chunk-3FM6YQUK.js +0 -5087
  165. package/dist/chunk-46GOWZT4.js +0 -5087
  166. package/dist/chunk-5KYJAUZV.js +0 -1519
  167. package/dist/chunk-6ZMLNEHB.js +0 -1519
  168. package/dist/chunk-7HBGXW7Z.js +0 -4929
  169. package/dist/chunk-7UCKD25B.js +0 -551
  170. package/dist/chunk-BDCFOP7O.js +0 -537
  171. package/dist/chunk-BPZQT5N5.js +0 -25652
  172. package/dist/chunk-C52OQNNY.js +0 -5087
  173. package/dist/chunk-C7HGQF4Y.js +0 -25652
  174. package/dist/chunk-CAHNZGGK.js +0 -25656
  175. package/dist/chunk-CK7R6UHE.js +0 -4945
  176. package/dist/chunk-D36RPWB7.js +0 -25652
  177. package/dist/chunk-DJK2UPFH.js +0 -4891
  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-WDYJOEAI.js +0 -5087
  216. package/dist/chunk-WEAFQNOS.js +0 -195
  217. package/dist/chunk-XKUSAZGP.js +0 -5087
  218. package/dist/chunk-YCWOCIPH.js +0 -5101
  219. package/dist/chunk-ZGE3XAXY.js +0 -1519
  220. package/dist/cli-agent-33GWIF2D.js +0 -2300
  221. package/dist/cli-agent-4XK6LVQQ.js +0 -2357
  222. package/dist/cli-agent-64EOV3ST.js +0 -2300
  223. package/dist/cli-agent-67WP6KKO.js +0 -2300
  224. package/dist/cli-agent-7RW5Y7C4.js +0 -2294
  225. package/dist/cli-agent-7TB2BWS6.js +0 -2370
  226. package/dist/cli-agent-AKXFFST2.js +0 -2370
  227. package/dist/cli-agent-C3YSECO4.js +0 -2344
  228. package/dist/cli-agent-DZTKLITB.js +0 -2357
  229. package/dist/cli-agent-FNMDJN7T.js +0 -2357
  230. package/dist/cli-agent-FOF7PFEP.js +0 -2357
  231. package/dist/cli-agent-FXZ6DJKP.js +0 -2357
  232. package/dist/cli-agent-H74M2ZYN.js +0 -2357
  233. package/dist/cli-agent-HG4Y657I.js +0 -2300
  234. package/dist/cli-agent-HORWVPHB.js +0 -2370
  235. package/dist/cli-agent-HSZT6SKF.js +0 -2423
  236. package/dist/cli-agent-ION2W5JF.js +0 -2441
  237. package/dist/cli-agent-JLUQ4ZU6.js +0 -2424
  238. package/dist/cli-agent-KBPWY3CB.js +0 -2302
  239. package/dist/cli-agent-MVCDH4HV.js +0 -2370
  240. package/dist/cli-agent-NZXOEPJ2.js +0 -2357
  241. package/dist/cli-agent-OO6H57UQ.js +0 -2300
  242. package/dist/cli-agent-PADN3QRC.js +0 -2357
  243. package/dist/cli-agent-QAYEX3BE.js +0 -2441
  244. package/dist/cli-agent-QT64DT5J.js +0 -2370
  245. package/dist/cli-agent-TCTRKCHN.js +0 -2300
  246. package/dist/cli-agent-TFL2M6UK.js +0 -2424
  247. package/dist/cli-agent-TSOJG7EX.js +0 -2357
  248. package/dist/cli-agent-UIKXATTD.js +0 -2357
  249. package/dist/cli-agent-UJN6FYTO.js +0 -2370
  250. package/dist/cli-agent-VIQAYVY4.js +0 -2357
  251. package/dist/cli-agent-WNWFVOFM.js +0 -2370
  252. package/dist/cli-agent-XBQX67VJ.js +0 -2423
  253. package/dist/cli-agent-ZLSC6FF4.js +0 -2357
  254. package/dist/cli-agent-ZSHUPBBN.js +0 -2357
  255. package/dist/cli-recover-T32NABFA.js +0 -487
  256. package/dist/cli-serve-2IL5DTEY.js +0 -153
  257. package/dist/cli-serve-3NGBX5ER.js +0 -140
  258. package/dist/cli-serve-47N5UKKW.js +0 -153
  259. package/dist/cli-serve-4RS4UDHC.js +0 -140
  260. package/dist/cli-serve-4XGZFUV2.js +0 -140
  261. package/dist/cli-serve-53FVANQK.js +0 -260
  262. package/dist/cli-serve-57225XWV.js +0 -140
  263. package/dist/cli-serve-63BDPSOP.js +0 -140
  264. package/dist/cli-serve-657NRUOX.js +0 -140
  265. package/dist/cli-serve-6ER7QMLR.js +0 -140
  266. package/dist/cli-serve-6OT3UEAN.js +0 -140
  267. package/dist/cli-serve-7JQ4FVUQ.js +0 -260
  268. package/dist/cli-serve-7L6EY5UH.js +0 -153
  269. package/dist/cli-serve-BFNIW2LF.js +0 -153
  270. package/dist/cli-serve-C7MN6U5Q.js +0 -153
  271. package/dist/cli-serve-CQFI3LMK.js +0 -140
  272. package/dist/cli-serve-CR3OY3IM.js +0 -153
  273. package/dist/cli-serve-DAJFRWQ7.js +0 -153
  274. package/dist/cli-serve-DTQLN5UI.js +0 -140
  275. package/dist/cli-serve-EQS2SGT3.js +0 -140
  276. package/dist/cli-serve-FW6FHFW4.js +0 -153
  277. package/dist/cli-serve-GEEOQS77.js +0 -153
  278. package/dist/cli-serve-H562I3ZK.js +0 -153
  279. package/dist/cli-serve-HDQZF4C4.js +0 -153
  280. package/dist/cli-serve-KBJNXWYJ.js +0 -140
  281. package/dist/cli-serve-LICAOMEB.js +0 -140
  282. package/dist/cli-serve-LLGYLWFS.js +0 -153
  283. package/dist/cli-serve-LMZKQ5GX.js +0 -140
  284. package/dist/cli-serve-LNTT73P2.js +0 -140
  285. package/dist/cli-serve-MQKBUZ7X.js +0 -140
  286. package/dist/cli-serve-N3OISDNB.js +0 -153
  287. package/dist/cli-serve-NBFT7B42.js +0 -140
  288. package/dist/cli-serve-RTWO3AWY.js +0 -140
  289. package/dist/cli-serve-SIHTSW5P.js +0 -140
  290. package/dist/cli-serve-SP6TEURE.js +0 -140
  291. package/dist/cli-serve-TDKZA6I5.js +0 -140
  292. package/dist/cli-serve-TF5ZVVXF.js +0 -140
  293. package/dist/cli-serve-TIZ27EVR.js +0 -153
  294. package/dist/cli-serve-TUNI2RCN.js +0 -153
  295. package/dist/cli-serve-WCU66CHX.js +0 -140
  296. package/dist/cli-serve-WNOZMAWD.js +0 -153
  297. package/dist/cli-serve-YCCKRRUY.js +0 -140
  298. package/dist/cli-serve-ZD5V7I6G.js +0 -140
  299. package/dist/cli-validate-6XDDLVVQ.js +0 -150
  300. package/dist/cli-verify-I4WGRQNT.js +0 -149
  301. package/dist/connection-manager-4ZA4XAFA.js +0 -9
  302. package/dist/db-adapter-IK2EDK2N.js +0 -7
  303. package/dist/db-adapter-IRHOUMVC.js +0 -7
  304. package/dist/dependency-manager-G6D2XXNY.js +0 -11
  305. package/dist/dependency-manager-OCUKF72T.js +0 -543
  306. package/dist/dependency-manager-YULUXN34.js +0 -511
  307. package/dist/factory-MQASIPEB.js +0 -11
  308. package/dist/google-W5AYGNUJ.js +0 -33
  309. package/dist/integrations-VWANOHQ4.js +0 -43830
  310. package/dist/local-O2FN57UN.js +0 -1128
  311. package/dist/local-S7SDOQHN.js +0 -1128
  312. package/dist/microsoft-HPLA5ZL5.js +0 -2414
  313. package/dist/microsoft-UFLZBEAC.js +0 -1619
  314. package/dist/microsoft-VREAZ7M2.js +0 -3955
  315. package/dist/microsoft-YUT6EIGP.js +0 -3400
  316. package/dist/postgres-BOTHOPDW.js +0 -875
  317. package/dist/routes-3MMLQTB6.js +0 -90
  318. package/dist/routes-4ZUIJ4HE.js +0 -90
  319. package/dist/routes-5MXHKKH4.js +0 -90
  320. package/dist/routes-64NJFK3B.js +0 -90
  321. package/dist/routes-6AKQ2LBV.js +0 -90
  322. package/dist/routes-CRRBUDO4.js +0 -90
  323. package/dist/routes-D7SMYOLT.js +0 -90
  324. package/dist/routes-DIAF3MC3.js +0 -90
  325. package/dist/routes-KMUNU6CY.js +0 -90
  326. package/dist/routes-LRRLXIZR.js +0 -90
  327. package/dist/routes-N647AJYG.js +0 -90
  328. package/dist/routes-SSSELAAR.js +0 -90
  329. package/dist/routes-STERVGKJ.js +0 -90
  330. package/dist/routes-TZMPYLHJ.js +0 -90
  331. package/dist/routes-XNK2MAVO.js +0 -90
  332. package/dist/routes-ZEZZACZP.js +0 -90
  333. package/dist/runtime-4UVCTFNQ.js +0 -45
  334. package/dist/runtime-5EQN4GFM.js +0 -45
  335. package/dist/runtime-5LP7PUD4.js +0 -45
  336. package/dist/runtime-6YEENDN3.js +0 -45
  337. package/dist/runtime-7LQFRG3B.js +0 -45
  338. package/dist/runtime-AMXJU2MB.js +0 -45
  339. package/dist/runtime-D6WSE7FG.js +0 -45
  340. package/dist/runtime-EYVN7NFJ.js +0 -45
  341. package/dist/runtime-F6RPWQVW.js +0 -45
  342. package/dist/runtime-FYMJURFC.js +0 -45
  343. package/dist/runtime-GGF4P55M.js +0 -45
  344. package/dist/runtime-H3SAMWWF.js +0 -45
  345. package/dist/runtime-H7T4I7I7.js +0 -45
  346. package/dist/runtime-HTIM7GZR.js +0 -45
  347. package/dist/runtime-JRNBL4O4.js +0 -45
  348. package/dist/runtime-K4C7NQLW.js +0 -45
  349. package/dist/runtime-MWWZCPC2.js +0 -45
  350. package/dist/runtime-N7CM2DYA.js +0 -45
  351. package/dist/runtime-OM2NIBMI.js +0 -45
  352. package/dist/runtime-OVGSOTAH.js +0 -45
  353. package/dist/runtime-QQ6LAY4U.js +0 -45
  354. package/dist/runtime-QWPVD7CY.js +0 -45
  355. package/dist/runtime-SX3B5MG3.js +0 -45
  356. package/dist/runtime-YLIIPTE4.js +0 -45
  357. package/dist/runtime-YU6P22CG.js +0 -45
  358. package/dist/runtime-ZOC337DD.js +0 -45
  359. package/dist/server-3AVWBRIF.js +0 -28
  360. package/dist/server-5BKJI5OW.js +0 -28
  361. package/dist/server-6NDO2S52.js +0 -28
  362. package/dist/server-7TD3M2BW.js +0 -28
  363. package/dist/server-AMCSXINC.js +0 -28
  364. package/dist/server-BEJ6RAGL.js +0 -28
  365. package/dist/server-BFPYDHBG.js +0 -28
  366. package/dist/server-BKEWXGVX.js +0 -28
  367. package/dist/server-BMEJZGFG.js +0 -28
  368. package/dist/server-CU6LVQS4.js +0 -28
  369. package/dist/server-DFR7FI3Q.js +0 -28
  370. package/dist/server-DFYGH2CV.js +0 -28
  371. package/dist/server-DURRN3GJ.js +0 -28
  372. package/dist/server-EELWOC3X.js +0 -28
  373. package/dist/server-EN5E2OWQ.js +0 -28
  374. package/dist/server-EXZC3OJO.js +0 -28
  375. package/dist/server-GW2HYJYI.js +0 -28
  376. package/dist/server-J25NCRWJ.js +0 -28
  377. package/dist/server-JDGNOTFV.js +0 -28
  378. package/dist/server-KA6U3YNP.js +0 -28
  379. package/dist/server-L52A2ME4.js +0 -28
  380. package/dist/server-NE5HD5DJ.js +0 -28
  381. package/dist/server-NLQAXPOG.js +0 -28
  382. package/dist/server-NQOT7W77.js +0 -28
  383. package/dist/server-OHHAA34U.js +0 -28
  384. package/dist/server-PWE5PQTR.js +0 -28
  385. package/dist/server-Q2Q32H2B.js +0 -28
  386. package/dist/server-Q77ME7TL.js +0 -28
  387. package/dist/server-QDKO6OVO.js +0 -28
  388. package/dist/server-RR6QJIXM.js +0 -28
  389. package/dist/server-T3R6BO6A.js +0 -28
  390. package/dist/server-TRIBAHDV.js +0 -28
  391. package/dist/server-TXV3ZVVR.js +0 -28
  392. package/dist/server-VHSFJP3I.js +0 -28
  393. package/dist/server-VOJF2XGU.js +0 -28
  394. package/dist/server-W76YHPEC.js +0 -28
  395. package/dist/server-WLLH4WST.js +0 -28
  396. package/dist/server-WTUJ2O3F.js +0 -28
  397. package/dist/server-X4CJTHHF.js +0 -28
  398. package/dist/server-XK3ILCJC.js +0 -28
  399. package/dist/server-ZRD3NDJE.js +0 -28
  400. package/dist/setup-2JYXGTW6.js +0 -20
  401. package/dist/setup-3XOSZEW5.js +0 -20
  402. package/dist/setup-44VBAO4J.js +0 -20
  403. package/dist/setup-4OA7QNJW.js +0 -20
  404. package/dist/setup-4ONNQBWB.js +0 -20
  405. package/dist/setup-4OSBXSCL.js +0 -20
  406. package/dist/setup-4QFGRBLZ.js +0 -20
  407. package/dist/setup-52US54Z4.js +0 -20
  408. package/dist/setup-5CY3CKKT.js +0 -20
  409. package/dist/setup-6766SGAR.js +0 -20
  410. package/dist/setup-6NUSB4XO.js +0 -20
  411. package/dist/setup-7FZJEOD4.js +0 -20
  412. package/dist/setup-7LYYXBUL.js +0 -20
  413. package/dist/setup-ADSKKBGV.js +0 -20
  414. package/dist/setup-AMV2WKVH.js +0 -20
  415. package/dist/setup-AYY24DKM.js +0 -20
  416. package/dist/setup-B34N4HPU.js +0 -20
  417. package/dist/setup-CEF4QY4L.js +0 -20
  418. package/dist/setup-E2YLC2EY.js +0 -20
  419. package/dist/setup-ER6NXTY5.js +0 -20
  420. package/dist/setup-FIOAQJ6C.js +0 -20
  421. package/dist/setup-G76S7X44.js +0 -20
  422. package/dist/setup-H2AGCBW5.js +0 -20
  423. package/dist/setup-H4JZUHH5.js +0 -20
  424. package/dist/setup-ICOZRKCX.js +0 -20
  425. package/dist/setup-JFTJH7UF.js +0 -20
  426. package/dist/setup-JJHOT2ZU.js +0 -20
  427. package/dist/setup-KEAM2BCL.js +0 -20
  428. package/dist/setup-LW4MLU2N.js +0 -20
  429. package/dist/setup-NHAZABW4.js +0 -20
  430. package/dist/setup-PRFNI6YW.js +0 -20
  431. package/dist/setup-RAHBMYHE.js +0 -20
  432. package/dist/setup-T6KYFR7O.js +0 -20
  433. package/dist/setup-TGM6L362.js +0 -20
  434. package/dist/setup-TNANAH7C.js +0 -20
  435. package/dist/setup-TXPR5UQX.js +0 -20
  436. package/dist/setup-UJSNSCLM.js +0 -20
  437. package/dist/setup-XCJMELVU.js +0 -20
  438. package/dist/setup-XIYEIFVK.js +0 -20
  439. package/dist/setup-XP2VGBEU.js +0 -20
  440. package/dist/setup-Z4PZSHBI.js +0 -20
  441. package/dist/skills-HCVBA6PK.js +0 -16
  442. package/dist/skills-HFSW74KZ.js +0 -16
  443. package/dist/system-prompts-6OUTAMH6.js +0 -41
  444. package/dist/task-queue-YP2I54IA.js +0 -9
  445. package/dist/transport-encryption-F2NQYACT.js +0 -25
  446. package/seed-data.mjs +0 -455
  447. package/src/agent-tools/tools/integrations/_seed-data.json +0 -4548
  448. package/src/agent-tools/tools/integrations/_seed-data.ts +0 -4563
  449. package/src/engine/NOTE.MD +0 -52
@@ -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
- };