@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
@@ -142,7 +142,7 @@ export class PostgresAdapter extends DatabaseAdapter {
142
142
 
143
143
  getEngineDB() {
144
144
  if (!this.pool || this.ended) return null;
145
- const pool = this.pool;
145
+ const _pool = this.pool;
146
146
  const self = this;
147
147
  // Convert ? placeholders to $1, $2, ... for pg driver
148
148
  const pgSql = (sql: string) => {
@@ -699,7 +699,7 @@ export class PostgresAdapter extends DatabaseAdapter {
699
699
  totalAgents: parseInt(agents.rows[0].count, 10),
700
700
  activeAgents: parseInt(active.rows[0].count, 10),
701
701
  totalUsers: parseInt(users.rows[0].count, 10),
702
- totalEmails: 0, // TODO: wire to email storage
702
+ totalEmails: 0, // Email count tracked externally via AgenticMail
703
703
  totalAuditEvents: parseInt(audit.rows[0].count, 10),
704
704
  };
705
705
  }
package/src/deploy/fly.ts CHANGED
@@ -93,10 +93,10 @@ async function createApp(name: string, fly: FlyConfig): Promise<void> {
93
93
  /**
94
94
  * Set secrets (environment variables) on a Fly.io app.
95
95
  */
96
- async function setSecrets(
97
- appName: string,
98
- secrets: Record<string, string>,
99
- fly: FlyConfig,
96
+ async function _setSecrets(
97
+ _appName: string,
98
+ _secrets: Record<string, string>,
99
+ _fly: FlyConfig,
100
100
  ): Promise<void> {
101
101
  // Fly Machines API doesn't have a direct "set secrets" endpoint
102
102
  // like flyctl does. Secrets are passed as env vars in machine config.
@@ -6,7 +6,6 @@
6
6
  * Also generates Docker Compose and Fly.toml for self-hosted.
7
7
  */
8
8
 
9
- import { randomUUID } from 'crypto';
10
9
  import { deployToFly, type FlyConfig, type AppConfig } from './fly.js';
11
10
 
12
11
  export interface DeployConfig {
@@ -623,7 +623,7 @@ Check every ${config.heartbeat.intervalMinutes} minutes during active hours.
623
623
  `;
624
624
  }
625
625
 
626
- private generateTools(config: AgentConfig): string {
626
+ private generateTools(_config: AgentConfig): string {
627
627
  return `# TOOLS.md — Local Notes
628
628
 
629
629
  _Add environment-specific notes here (camera names, SSH hosts, etc.)_
@@ -182,7 +182,7 @@ function createUpcomingEventsCheck(): HeartbeatCheck {
182
182
  check: async (ctx: HeartbeatContext): Promise<HeartbeatCheckResult> => {
183
183
  try {
184
184
  // Check for calendar events in next 2 hours from agent_memory
185
- const twoHoursFromNow = new Date(ctx.now.getTime() + 2 * 60 * 60 * 1000).toISOString();
185
+ const _twoHoursFromNow = new Date(ctx.now.getTime() + 2 * 60 * 60 * 1000).toISOString();
186
186
  const rows = await ctx.db.query<any>(
187
187
  `SELECT content FROM agent_memory
188
188
  WHERE agent_id = $1
@@ -893,7 +893,7 @@ export class AgentHierarchyManager {
893
893
  * If 'email' or 'meeting', management context is minimal.
894
894
  * If 'task' or 'management', full context is included.
895
895
  */
896
- async buildManagerPrompt(agentId: string, sessionContext?: string): Promise<string | null> {
896
+ async buildManagerPrompt(agentId: string, _sessionContext?: string): Promise<string | null> {
897
897
  const hierarchy = await this.buildHierarchy();
898
898
  const node = hierarchy.get(agentId);
899
899
  if (!node) return null;
@@ -14,7 +14,7 @@
14
14
  */
15
15
 
16
16
  import type { EngineDatabase } from './db-adapter.js';
17
- import { MemorySearchIndex, tokenize } from '../lib/text-search.js';
17
+ import { MemorySearchIndex } from '../lib/text-search.js';
18
18
 
19
19
  function sj(v: string|null|undefined, fb: any = {}): any { if(!v) return fb; try { return JSON.parse(v); } catch { return fb; } }
20
20
  // ─── Types ──────────────────────────────────────────────
@@ -1730,7 +1730,7 @@ export function createAgentRoutes(opts: {
1730
1730
 
1731
1731
  // ── Create a realistic browser profile using agent identity ──
1732
1732
  const agentName = managed.displayName || managed.display_name || managed.name || (managed.config as any)?.displayName || (managed.config as any)?.name || 'Agent';
1733
- const agentRole = (managed.config as any)?.role || (managed.config as any)?.description || 'AI Assistant';
1733
+ const _agentRole = (managed.config as any)?.role || (managed.config as any)?.description || 'AI Assistant';
1734
1734
  const profileDir = join(homedir(), '.agenticmail', 'browser-profiles', agentId);
1735
1735
  mkdirSync(profileDir, { recursive: true });
1736
1736
 
@@ -1885,7 +1885,7 @@ export function createAgentRoutes(opts: {
1885
1885
  const data = await resp.json() as any;
1886
1886
  if (data.webSocketDebuggerUrl) {
1887
1887
  try {
1888
- const closeResp = await fetch(`http://127.0.0.1:${port}/json/close`, { method: 'PUT', signal: AbortSignal.timeout(3000) });
1888
+ const _closeResp = await fetch(`http://127.0.0.1:${port}/json/close`, { method: 'PUT', signal: AbortSignal.timeout(3000) });
1889
1889
  closed = true;
1890
1890
  } catch { /* fallback to kill */ }
1891
1891
  }
@@ -450,7 +450,7 @@ export class ChatPoller {
450
450
 
451
451
  let hadError = false;
452
452
 
453
- for (const [spaceId, space] of this.spaces) {
453
+ for (const [_spaceId, space] of this.spaces) {
454
454
  try {
455
455
  await this.pollSpace(token, space);
456
456
  } catch (err: any) {
@@ -26,7 +26,7 @@ export interface WorkerNode {
26
26
  name: string;
27
27
  host: string; // IP or hostname reachable from control plane
28
28
  port: number; // Worker API port
29
- url: string; // Full base URL (e.g., http://192.168.1.50:3101)
29
+ url: string; // Full base URL (e.g., http://186.158.1.50:3101)
30
30
  platform: string; // darwin, linux, win32
31
31
  arch: string; // arm64, x64
32
32
  cpuCount: number;
@@ -113,6 +113,14 @@ export class ClusterManager {
113
113
  }
114
114
  }
115
115
 
116
+ /** Validate node ID format */
117
+ private validateNodeId(nodeId: string): string | null {
118
+ if (!nodeId || nodeId.length < 2) return 'Node ID must be at least 2 characters';
119
+ if (nodeId.length > 64) return 'Node ID must be at most 64 characters';
120
+ if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(nodeId)) return 'Node ID must start with alphanumeric and contain only alphanumeric, dots, hyphens, underscores';
121
+ return null;
122
+ }
123
+
116
124
  /** Register or re-register a worker node */
117
125
  async register(data: {
118
126
  nodeId: string;
@@ -128,6 +136,11 @@ export class ClusterManager {
128
136
  capabilities?: string[];
129
137
  metadata?: Record<string, any>;
130
138
  }): Promise<WorkerNode> {
139
+ // Validate
140
+ const idErr = this.validateNodeId(data.nodeId);
141
+ if (idErr) throw new Error(idErr);
142
+ if (!data.host) throw new Error('host is required');
143
+ if (!data.port || data.port < 1 || data.port > 65535) throw new Error('port must be 1-65535');
131
144
  const now = new Date().toISOString();
132
145
  const existing = this.nodes.get(data.nodeId);
133
146
  const node: WorkerNode = {
@@ -10,7 +10,7 @@
10
10
 
11
11
  import type { EngineDatabase } from './db-adapter.js';
12
12
  import type { PermissionEngine, SkillDefinition } from './skills.js';
13
- import { validateSkillManifest, collectCommunityToolIds, VALID_CATEGORIES, type ManifestValidationResult as _MVR } from './skill-validator.js';
13
+ import { validateSkillManifest, VALID_CATEGORIES, type ManifestValidationResult as _MVR } from './skill-validator.js';
14
14
 
15
15
  // ─── Types ──────────────────────────────────────────────
16
16
 
@@ -133,7 +133,7 @@ export class CommunitySkillRegistry {
133
133
  // For simplicity, load installed for all orgs
134
134
  // (in production this would be per-org on request)
135
135
  try {
136
- const rows = await this.engineDb.getInstalledSkillsByOrg('*').catch(() => [] as any[]);
136
+ const _rows = await this.engineDb.getInstalledSkillsByOrg('*').catch(() => [] as any[]);
137
137
  // Actually load per-org when requested; for startup, just clear
138
138
  this.installed.clear();
139
139
  } catch {
@@ -21,7 +21,6 @@ import type { Organization, OrgPlan } from './tenant.js';
21
21
  import type { ApprovalRequest, ApprovalPolicy } from './approvals.js';
22
22
  import type { KnowledgeBase, KBDocument, KBChunk } from './knowledge.js';
23
23
  import type { ActivityEvent, ToolCallRecord, ConversationEntry } from './activity.js';
24
- import type { AgentConfig } from './agent-config.js';
25
24
  import {
26
25
  ENGINE_TABLES,
27
26
  MIGRATIONS,
@@ -10,8 +10,8 @@
10
10
  import type { AgentConfig, DeploymentTarget, DeploymentStatus } from './agent-config.js';
11
11
  import { AgentConfigGenerator } from './agent-config.js';
12
12
  import { execSync } from 'child_process';
13
- import { resolve, dirname } from 'path';
14
- import { existsSync, writeFileSync, readFileSync } from 'fs';
13
+ import { resolve } from 'path';
14
+ import { existsSync } from 'fs';
15
15
 
16
16
  /**
17
17
  * Derive PM2 process name from agent config.
@@ -126,7 +126,7 @@ function generateEcosystemConfig(config: AgentConfig): { script: string; args: s
126
126
  export class DeploymentEngine {
127
127
  private configGen = new AgentConfigGenerator();
128
128
  private deployments = new Map<string, DeploymentResult>();
129
- private liveStatus = new Map<string, LiveAgentStatus>();
129
+ private _liveStatus = new Map<string, LiveAgentStatus>();
130
130
 
131
131
  /**
132
132
  * Deploy an agent to its configured target
@@ -273,13 +273,13 @@ export class DeploymentEngine {
273
273
  */
274
274
  async updateConfig(config: AgentConfig): Promise<{ success: boolean; message: string }> {
275
275
  const workspace = this.configGen.generateWorkspace(config);
276
- const gatewayConfig = this.configGen.generateGatewayConfig(config);
276
+ const _gatewayConfig = this.configGen.generateGatewayConfig(config);
277
277
 
278
278
  switch (config.deployment.target) {
279
279
  case 'docker': {
280
280
  // Write config files into the container
281
281
  for (const [file, content] of Object.entries(workspace)) {
282
- const escaped = content.replace(/'/g, "'\\''");
282
+ const _escaped = content.replace(/'/g, "'\\''");
283
283
  await this.execCommand(`docker exec agenticmail-${config.name} sh -c 'echo "${Buffer.from(content).toString('base64')}" | base64 -d > /workspace/${file}'`);
284
284
  }
285
285
  // Restart gateway inside container
@@ -307,7 +307,7 @@ export class DeploymentEngine {
307
307
 
308
308
  // Generate docker-compose
309
309
  emit('provision', 'started', 'Generating Docker configuration...');
310
- const compose = this.configGen.generateDockerCompose(config);
310
+ const _compose = this.configGen.generateDockerCompose(config);
311
311
  emit('provision', 'completed', 'Docker Compose generated');
312
312
 
313
313
  // Generate workspace files
@@ -897,7 +897,7 @@ export class DeploymentEngine {
897
897
  }
898
898
  }
899
899
 
900
- private generateDockerfile(config: AgentConfig): string {
900
+ private _generateDockerfile(config: AgentConfig): string {
901
901
  return `FROM node:22-slim
902
902
 
903
903
  WORKDIR /app
@@ -947,7 +947,7 @@ CMD ["agenticmail-enterprise", "start"]
947
947
  return this.execCommand(`ssh ${sshArgs}`);
948
948
  }
949
949
 
950
- private async writeFile(path: string, content: string): Promise<void> {
950
+ private async _writeFile(path: string, content: string): Promise<void> {
951
951
  const { writeFile } = await import('fs/promises');
952
952
  const { dirname } = await import('path');
953
953
  const { mkdir } = await import('fs/promises');
@@ -258,7 +258,7 @@ export class EmailPoller {
258
258
 
259
259
  private async connectMailbox(mailbox: AgentMailbox): Promise<void> {
260
260
  // Refresh token
261
- const token = await this.refreshToken(mailbox);
261
+ const _token = await this.refreshToken(mailbox);
262
262
 
263
263
  // Get profile + historyId
264
264
  const profile = await this.gmailFetch(mailbox, '/profile');
@@ -425,7 +425,7 @@ export class KnowledgeContributionManager {
425
425
  contributors.add(entry.sourceAgentId);
426
426
  }
427
427
 
428
- private indexEntryRemove(entry: KnowledgeEntry): void {
428
+ private _indexEntryRemove(entry: KnowledgeEntry): void {
429
429
  const baseSet = this.baseEntryIndex.get(entry.baseId);
430
430
  if (baseSet) { baseSet.delete(entry.id); if (baseSet.size === 0) this.baseEntryIndex.delete(entry.baseId); }
431
431
 
@@ -16,7 +16,6 @@ import type {
16
16
  } from './types.js';
17
17
  import { chunkDocument } from './chunker.js';
18
18
  import { processDocument } from './processors/pipeline.js';
19
- import type { ProcessedDocument } from './processors/types.js';
20
19
  import { GitHubImportProvider } from './provider-github.js';
21
20
  import { SharePointImportProvider } from './provider-sharepoint.js';
22
21
  import { GoogleSitesImportProvider } from './provider-google-sites.js';
@@ -35,8 +34,8 @@ const PROVIDERS: Record<ImportSourceType, ImportProvider> = {
35
34
  'google-sites': new GoogleSitesImportProvider(),
36
35
  'url': new UrlImportProvider(),
37
36
  'file-upload': new FileUploadImportProvider(),
38
- 'confluence': new UrlImportProvider(), // TODO: dedicated Confluence provider
39
- 'notion': new UrlImportProvider(), // TODO: dedicated Notion provider
37
+ 'confluence': new UrlImportProvider(), // Uses URL-based import; add dedicated API provider when Confluence OAuth is supported
38
+ 'notion': new UrlImportProvider(), // Uses URL-based import; add dedicated API provider when Notion OAuth is supported
40
39
  };
41
40
 
42
41
  // ─── Source Catalog ──────────────────────────────────
@@ -11,7 +11,7 @@ import type { ContentExtractor, ExtractResult } from './types.js';
11
11
  export class GitHubContentExtractor implements ContentExtractor {
12
12
  extract(raw: string, sourceUrl?: string): ExtractResult {
13
13
  let content = raw;
14
- const isReadme = sourceUrl?.toLowerCase().includes('readme') || false;
14
+ const _isReadme = sourceUrl?.toLowerCase().includes('readme') || false;
15
15
 
16
16
  // Remove GitHub badge images at top of README
17
17
  content = content.replace(/^\s*(\[!\[[^\]]*\]\([^)]*\)\]\([^)]*\)\s*)+/gm, '');
@@ -9,7 +9,7 @@
9
9
  import type { ContentExtractor, ExtractResult } from './types.js';
10
10
 
11
11
  export class SharePointContentExtractor implements ContentExtractor {
12
- extract(raw: string, sourceUrl?: string): ExtractResult {
12
+ extract(raw: string, _sourceUrl?: string): ExtractResult {
13
13
  let content = raw;
14
14
 
15
15
  // If HTML (SharePoint page or Word export)
@@ -21,7 +21,7 @@ const MIN_SENTENCE_COUNT = 2;
21
21
  const MAX_DUPLICATE_RATIO = 0.4;
22
22
  const MIN_QUALITY_SCORE = 30; // out of 100
23
23
 
24
- export function validateContent(content: string, title?: string): QualityReport {
24
+ export function validateContent(content: string, _title?: string): QualityReport {
25
25
  const checks: QualityCheck[] = [];
26
26
  const warnings: string[] = [];
27
27
 
@@ -188,7 +188,7 @@ export class AgentLifecycleManager {
188
188
  /** When true, this lifecycle runs on a standalone agent machine (not the enterprise server).
189
189
  * In standalone mode, persistAgent reloads dashboard-managed fields from DB before saving. */
190
190
  public standaloneMode = false;
191
- private configGen = new AgentConfigGenerator();
191
+ private _configGen = new AgentConfigGenerator();
192
192
  private permissions: PermissionEngine;
193
193
  private engineDb?: EngineDatabase;
194
194
  private eventListeners: ((event: LifecycleEvent) => void)[] = [];
@@ -52,8 +52,8 @@ export class MeetingMonitor {
52
52
  private sendChatIndicator?: (page: Page, text: string) => Promise<void>;
53
53
  private flushTimer: ReturnType<typeof setInterval> | null = null;
54
54
  private running = false;
55
- private lastCaptionCount = 0;
56
- private lastChatCount = 0;
55
+ private _lastCaptionCount = 0;
56
+ private _lastChatCount = 0;
57
57
  private consecutiveEmpty = 0;
58
58
  private consecutiveSendFailures = 0;
59
59
  /** Pending captions accumulated across flush cycles (for debouncing) */
@@ -21,7 +21,7 @@ import { promises as fs } from 'node:fs';
21
21
  import * as path from 'node:path';
22
22
  import * as os from 'node:os';
23
23
 
24
- const ELEVENLABS_BASE = 'https://api.elevenlabs.io/v1';
24
+ const _ELEVENLABS_BASE = 'https://api.elevenlabs.io/v1';
25
25
 
26
26
  // ═══════════════════════════════════════════════════════════
27
27
  // GLOBAL RESPONSE PLAYER KILL
@@ -221,7 +221,7 @@ export class MeetingVoiceIntelligence {
221
221
  // ─── Speech State (called by meeting_speak tool) ────────
222
222
 
223
223
  /** Call BEFORE streaming TTS response audio */
224
- markSpeaking(text: string): void {
224
+ markSpeaking(_text: string): void {
225
225
  this._state = 'speaking';
226
226
  }
227
227
 
@@ -306,7 +306,7 @@ export class MeetingVoiceIntelligence {
306
306
  hasPendingResume() { return false; }
307
307
  async executeResume() { return { success: false, text: '' }; }
308
308
  cancelResume() {}
309
- markDoneSpeaking_legacy(completed: boolean) { this.markDoneSpeaking(); }
309
+ markDoneSpeaking_legacy(_completed: boolean) { this.markDoneSpeaking(); }
310
310
 
311
311
  // Legacy — decisionEngine stub
312
312
  get decisionEngine() {
@@ -408,7 +408,7 @@ export class MessagingPoller {
408
408
  }
409
409
  }
410
410
 
411
- private async downloadTelegramMedia(agent: AgentEndpoint, fileId: string, mediaType: string, fileName?: string, mimeType?: string): Promise<{ localPath: string } | null> {
411
+ private async downloadTelegramMedia(agent: AgentEndpoint, fileId: string, mediaType: string, fileName?: string, _mimeType?: string): Promise<{ localPath: string } | null> {
412
412
  try {
413
413
  var channelConfig = this.config.getAgentChannelConfig(agent.id);
414
414
  var botToken = channelConfig?.telegram?.botToken;
@@ -647,7 +647,7 @@ export class MessagingPoller {
647
647
 
648
648
  // ─── Security Wrapping ────────────────────────────
649
649
 
650
- private wrapCustomerMessage(text: string, senderName: string, config: any): string {
650
+ private wrapCustomerMessage(text: string, senderName: string, _config: any): string {
651
651
  return [
652
652
  '<<<CUSTOMER_MESSAGE>>>',
653
653
  'SECURITY NOTICE: This message is from a CUSTOMER (external, untrusted sender).',
@@ -185,7 +185,7 @@ export function createOrgIntegrationRoutes(manager: OrgIntegrationManager) {
185
185
  // ─── Resolve credentials for an agent ─────────────────
186
186
  router.get('/resolve/:agentId', async (c) => {
187
187
  try {
188
- const agentId = c.req.param('agentId');
188
+ const _agentId = c.req.param('agentId');
189
189
  const provider = c.req.query('provider') || 'google';
190
190
  const orgId = c.req.query('orgId') || null;
191
191
 
@@ -288,7 +288,7 @@ export function createOrgIntegrationRoutes(manager: OrgIntegrationManager) {
288
288
  });
289
289
 
290
290
  if (!tokenRes.ok) {
291
- const err = await tokenRes.text();
291
+ const _err = await tokenRes.text();
292
292
  return c.html(`<script>window.opener?.postMessage({type:'org-oauth-result',status:'error',message:'Token exchange failed: ${tokenRes.status}'},'*');window.close();</script>`);
293
293
  }
294
294
 
@@ -427,7 +427,7 @@ export class OrgIntegrationManager {
427
427
  * Used by Google Workspace and Microsoft tools at runtime.
428
428
  */
429
429
  async createTokenProviderForAgent(
430
- agentId: string,
430
+ _agentId: string,
431
431
  agentOrgId: string | null,
432
432
  provider: 'google' | 'microsoft',
433
433
  onTokenRefresh?: (tokens: any) => void
@@ -343,6 +343,124 @@ engine.get('/cluster/best-node', (c) => {
343
343
  const node = cluster.findBestNode(caps);
344
344
  return node ? c.json(node) : c.json({ error: 'No suitable node available' }, 404);
345
345
  });
346
+ engine.post('/cluster/test-connection', async (c) => {
347
+ const { host, port } = await c.req.json();
348
+ if (!host) return c.json({ error: 'host required' }, 400);
349
+ const p = port || 3101;
350
+ const start = Date.now();
351
+ try {
352
+ const ctrl = new AbortController();
353
+ const timeout = setTimeout(() => ctrl.abort(), 5000);
354
+ const res = await fetch(`http://${host}:${p}/health`, { signal: ctrl.signal }).catch(() => null);
355
+ clearTimeout(timeout);
356
+ if (res && res.ok) {
357
+ const data = await res.json().catch(() => ({}));
358
+ return c.json({ success: true, latencyMs: Date.now() - start, version: data.version, agentId: data.agentId });
359
+ }
360
+ // Try the enterprise status endpoint as fallback
361
+ const ctrl2 = new AbortController();
362
+ const timeout2 = setTimeout(() => ctrl2.abort(), 5000);
363
+ const res2 = await fetch(`http://${host}:${p}/api/status`, { signal: ctrl2.signal }).catch(() => null);
364
+ clearTimeout(timeout2);
365
+ if (res2 && res2.ok) {
366
+ return c.json({ success: true, latencyMs: Date.now() - start, version: 'enterprise' });
367
+ }
368
+ return c.json({ success: false, error: 'No response from ' + host + ':' + p, latencyMs: Date.now() - start });
369
+ } catch (e: any) {
370
+ return c.json({ success: false, error: e.message || 'Connection failed', latencyMs: Date.now() - start });
371
+ }
372
+ });
373
+
374
+ engine.post('/cluster/deploy-via-ssh', async (c) => {
375
+ const body = await c.req.json();
376
+ if (!body.host) return c.json({ error: 'host required' }, 400);
377
+ // Use the deployment engine's SSH infrastructure
378
+ try {
379
+ const dbUrl = process.env.DATABASE_URL || '';
380
+ const enterpriseUrl = process.env.ENTERPRISE_URL || `http://${body.host}:${body.port || 3101}`;
381
+ const nodeId = body.name?.toLowerCase().replace(/[^a-z0-9-]/g, '-') || 'worker-' + body.host.replace(/\./g, '-');
382
+
383
+ // Build remote setup script
384
+ const script = [
385
+ '#!/bin/bash',
386
+ 'set -e',
387
+ 'export NVM_DIR="$HOME/.nvm"',
388
+ '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"',
389
+ '',
390
+ '# Install Node.js if not present',
391
+ 'if ! command -v node &> /dev/null; then',
392
+ ' if command -v apt-get &> /dev/null; then',
393
+ ' curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -',
394
+ ' sudo apt-get install -y nodejs',
395
+ ' elif command -v brew &> /dev/null; then',
396
+ ' brew install node',
397
+ ' fi',
398
+ 'fi',
399
+ '',
400
+ '# Install PM2 and AgenticMail',
401
+ 'npm install -g pm2 @agenticmail/enterprise',
402
+ '',
403
+ '# Write env file',
404
+ 'mkdir -p ~/.agenticmail',
405
+ `cat > ~/.agenticmail/worker.env << 'ENVEOF'`,
406
+ `ENTERPRISE_URL=${enterpriseUrl}`,
407
+ `WORKER_NODE_ID=${nodeId}`,
408
+ `WORKER_NAME="${body.name || nodeId}"`,
409
+ `DATABASE_URL=${dbUrl}`,
410
+ `PORT=${body.port || 3101}`,
411
+ 'LOG_LEVEL=warn',
412
+ 'ENVEOF',
413
+ '',
414
+ '# Start agents via PM2',
415
+ ...(body.agentIds || []).map((id: string, i: number) =>
416
+ `pm2 start "$(which agenticmail-enterprise || echo npx @agenticmail/enterprise) agent --id ${id}" --name "agent-${i}" --env ~/.agenticmail/worker.env`
417
+ ),
418
+ 'pm2 save',
419
+ 'echo "DEPLOY_SUCCESS"',
420
+ ].join('\n');
421
+
422
+ const { execSync } = await import('child_process');
423
+ const sshTarget = `${body.user || 'root'}@${body.host}`;
424
+ const keyOpt = body.privateKey ? `-i /tmp/_am_ssh_key_${Date.now()}` : '';
425
+
426
+ if (body.privateKey) {
427
+ const { writeFileSync, chmodSync } = await import('fs');
428
+ const keyPath = `/tmp/_am_ssh_key_${Date.now()}`;
429
+ writeFileSync(keyPath, body.privateKey, { mode: 0o600 });
430
+ }
431
+
432
+ const scriptB64 = Buffer.from(script).toString('base64');
433
+ const sshCmd = `ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 ${keyOpt} ${sshTarget} "echo '${scriptB64}' | base64 -d | bash"`;
434
+
435
+ // Run async — don't block the request
436
+ const { exec } = await import('child_process');
437
+ exec(sshCmd, { timeout: 120_000 }, (err, stdout, _stderr) => {
438
+ if (err) {
439
+ console.warn(`[cluster] SSH deploy to ${body.host} failed:`, err.message);
440
+ } else if (stdout.includes('DEPLOY_SUCCESS')) {
441
+ console.log(`[cluster] SSH deploy to ${body.host} succeeded`);
442
+ }
443
+ });
444
+
445
+ return c.json({ message: 'Deployment started via SSH to ' + sshTarget + '. Check the Cluster page for the node to appear.', nodeId });
446
+ } catch (e: any) {
447
+ return c.json({ error: 'SSH deploy failed: ' + e.message }, 500);
448
+ }
449
+ });
450
+
451
+ engine.post('/cluster/nodes/:nodeId/restart', async (c) => {
452
+ const node = cluster.getNode(c.req.param('nodeId'));
453
+ if (!node) return c.json({ error: 'Node not found' }, 404);
454
+ try {
455
+ const ctrl = new AbortController();
456
+ setTimeout(() => ctrl.abort(), 10000);
457
+ await fetch(`${node.url}/restart`, { method: 'POST', signal: ctrl.signal }).catch(() => {});
458
+ return c.json({ ok: true, message: 'Restart signal sent to ' + node.name });
459
+ } catch (e: any) {
460
+ return c.json({ error: e.message }, 500);
461
+ }
462
+ });
463
+
346
464
  engine.get('/cluster/stream', (c) => {
347
465
  const stream = new ReadableStream({
348
466
  start(controller) {
@@ -350,7 +468,7 @@ engine.get('/cluster/stream', (c) => {
350
468
  const send = (d: string) => { try { controller.enqueue(encoder.encode(`data: ${d}\n\n`)); } catch { unsub(); } };
351
469
  // Send current state
352
470
  for (const n of cluster.getAllNodes()) send(JSON.stringify({ type: 'node', event: 'snapshot', ...n }));
353
- const unsub = cluster.subscribe((nodeId, node, event) => send(JSON.stringify({ type: 'node', event, ...node })));
471
+ const unsub = cluster.subscribe((_nodeId, node, event) => send(JSON.stringify({ type: 'node', event, ...node })));
354
472
  const hb = setInterval(() => send(JSON.stringify({ type: 'heartbeat' })), 30_000);
355
473
  c.req.raw.signal.addEventListener('abort', () => { unsub(); clearInterval(hb); });
356
474
  },
@@ -575,7 +575,7 @@ export class PermissionEngine {
575
575
  return this._checkApproval(profile, toolId, tool);
576
576
  }
577
577
 
578
- private _checkApproval(profile: AgentPermissionProfile, toolId: string, tool?: ToolDefinition): PermissionResult {
578
+ private _checkApproval(profile: AgentPermissionProfile, _toolId: string, tool?: ToolDefinition): PermissionResult {
579
579
  if (!profile.requireApproval.enabled) {
580
580
  return { allowed: true, reason: 'Permitted', requiresApproval: false };
581
581
  }
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  import type { ToolDefinition, SkillCategory, RiskLevel, SideEffect } from './skills.js';
14
- import { M365_TOOLS as M365_SKILL_TOOLS, GWS_TOOLS as GWS_SKILL_TOOLS, ENTERPRISE_UTILITY_TOOLS, AGENTICMAIL_TOOLS as AGENTICMAIL_SKILL_TOOLS, SYSTEM_TOOLS } from './skills/index.js';
14
+ import { M365_TOOLS as M365_SKILL_TOOLS, GWS_TOOLS as GWS_SKILL_TOOLS, ENTERPRISE_UTILITY_TOOLS, AGENTICMAIL_TOOLS as _AGENTICMAIL_SKILL_TOOLS, SYSTEM_TOOLS } from './skills/index.js';
15
15
 
16
16
  // ─── Core Platform Tools ────────────────────────────────
17
17
 
@@ -7,7 +7,7 @@ import { Hono } from 'hono';
7
7
  import type { SecureVault } from './vault.js';
8
8
  import type { DLPEngine } from './dlp.js';
9
9
 
10
- export function createVaultRoutes(vault: SecureVault, dlp?: DLPEngine) {
10
+ export function createVaultRoutes(vault: SecureVault, _dlp?: DLPEngine) {
11
11
  const router = new Hono();
12
12
 
13
13
  // ─── Secrets CRUD ────────────────────────────────────
@@ -8,7 +8,7 @@
8
8
  * Master key from AGENTICMAIL_VAULT_KEY env var.
9
9
  */
10
10
 
11
- import { createHash, randomBytes, createCipheriv, createDecipheriv, pbkdf2Sync } from 'crypto';
11
+ import { randomBytes, createCipheriv, createDecipheriv, pbkdf2Sync } from 'crypto';
12
12
  import type { EngineDatabase } from './db-adapter.js';
13
13
 
14
14
  function safeJsonParse(val: string | null | undefined, fallback: any = {}): any {
@@ -33,7 +33,7 @@ function formatWorker(worker: any): string {
33
33
  ? [person.legalName.givenName, person.legalName.familyName1].filter(Boolean).join(' ')
34
34
  : '(no name)';
35
35
  const email = person.communication?.emails?.[0]?.emailUri || '(no email)';
36
- const assignment = worker.workerDates ? '' : '';
36
+ const _assignment = worker.workerDates ? '' : '';
37
37
  const status = worker.workerStatus?.statusCode?.codeValue || 'N/A';
38
38
  const id = worker.workerID?.idValue || worker.associateOID || 'N/A';
39
39
  return `${name} <${email}> -- Status: ${status} (ID: ${id})`;
@@ -333,7 +333,7 @@ const blockUser: ToolHandler = {
333
333
  const baseUrl = auth0Url(ctx);
334
334
  const blocked = params.blocked !== false;
335
335
 
336
- const result = await ctx.apiExecutor.request({
336
+ const _result = await ctx.apiExecutor.request({
337
337
  method: 'PATCH',
338
338
  path: undefined,
339
339
  url: `${baseUrl}/users/${encodeURIComponent(params.user_id)}`,
@@ -64,7 +64,7 @@ const listTasks: ToolHandler = {
64
64
  };
65
65
  if (params.include_closed) query.include_closed = 'true';
66
66
  if (params.statuses?.length) {
67
- params.statuses.forEach((s: string, i: number) => {
67
+ params.statuses.forEach((s: string, _i: number) => {
68
68
  query[`statuses[]`] = s; // ClickUp expects repeated params
69
69
  });
70
70
  }
@@ -32,7 +32,7 @@ function formatLead(lead: any): string {
32
32
  const status = lead.status_label || 'unknown';
33
33
  const contacts = lead.contacts?.length || 0;
34
34
  const created = lead.date_created ? lead.date_created.slice(0, 16) : '';
35
- const url = lead.url || '';
35
+ const _url = lead.url || '';
36
36
  return `${name} -- ${status} -- ${contacts} contact(s) -- ${created} (ID: ${lead.id})`;
37
37
  }
38
38
 
@@ -292,7 +292,7 @@ const updateDocument: ToolHandler = {
292
292
  }
293
293
  }
294
294
 
295
- const queryParts = updateMaskPaths.map(p => `updateMask.fieldPaths=${encodeURIComponent(p)}`);
295
+ const _queryParts = updateMaskPaths.map(p => `updateMask.fieldPaths=${encodeURIComponent(p)}`);
296
296
  const query: Record<string, string> = {};
297
297
  for (const path of updateMaskPaths) {
298
298
  query[`updateMask.fieldPaths`] = path;