@agenticmail/enterprise 0.5.319 → 0.5.321

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 (330) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/CODE_OF_CONDUCT.md +31 -0
  3. package/README.md +118 -38
  4. package/SECURITY.md +42 -0
  5. package/dist/agent-heartbeat-3FWNHZFX.js +510 -0
  6. package/dist/agent-heartbeat-4RWHZR7H.js +510 -0
  7. package/dist/agent-heartbeat-6ZGB5ILY.js +510 -0
  8. package/dist/agent-heartbeat-BIVHLKFM.js +510 -0
  9. package/dist/agent-heartbeat-HRKVFK2T.js +510 -0
  10. package/dist/agent-heartbeat-JC5GWVXD.js +510 -0
  11. package/dist/agent-heartbeat-K6A4HMHB.js +510 -0
  12. package/dist/agent-heartbeat-LCDXWFVB.js +510 -0
  13. package/dist/agent-heartbeat-P7HZCZAQ.js +510 -0
  14. package/dist/agent-heartbeat-PUIRSNIO.js +510 -0
  15. package/dist/agent-heartbeat-SN5ILQ6Y.js +510 -0
  16. package/dist/agent-heartbeat-TW5YTDYC.js +510 -0
  17. package/dist/agent-heartbeat-Z2QQXROL.js +510 -0
  18. package/dist/agent-notify-OEQBCZLN.js +43 -0
  19. package/dist/{agent-tools-263HM5QU.js → agent-tools-3W7XLUYA.js} +1 -1
  20. package/dist/agent-tools-4QK7LLNP.js +9 -0
  21. package/dist/agent-tools-54VZGT6L.js +9 -0
  22. package/dist/{agent-tools-AT4D276V.js → agent-tools-AYYDPO27.js} +7 -7
  23. package/dist/{agent-tools-MSTAPX2I.js → agent-tools-F2X47FKF.js} +7 -7
  24. package/dist/{agent-tools-FA26SY5O.js → agent-tools-O6W3QAZL.js} +11 -6
  25. package/dist/agent-tools-OAWVZBMW.js +9 -0
  26. package/dist/agent-tools-QCCU74PN.js +13949 -0
  27. package/dist/chunk-2LHUARN6.js +4929 -0
  28. package/dist/chunk-2WVCNCYC.js +5087 -0
  29. package/dist/{chunk-6PWDS7KY.js → chunk-3FM6YQUK.js} +20 -20
  30. package/dist/chunk-3UAFHUEC.js +212 -0
  31. package/dist/{chunk-WJO57PMO.js → chunk-46GOWZT4.js} +20 -20
  32. package/dist/{chunk-BNRE7TSX.js → chunk-5KYJAUZV.js} +3 -3
  33. package/dist/chunk-6C5PKREN.js +467 -0
  34. package/dist/{chunk-447MTPZF.js → chunk-6ZMLNEHB.js} +3 -3
  35. package/dist/chunk-BPZQT5N5.js +25652 -0
  36. package/dist/chunk-BQM7MBPS.js +1380 -0
  37. package/dist/{chunk-ZRFKGPIU.js → chunk-C52OQNNY.js} +20 -20
  38. package/dist/chunk-C7HGQF4Y.js +25652 -0
  39. package/dist/chunk-CAHNZGGK.js +25656 -0
  40. package/dist/{chunk-FL3CH3ET.js → chunk-CK7R6UHE.js} +51 -27
  41. package/dist/chunk-D36RPWB7.js +25652 -0
  42. package/dist/{chunk-36NM2B4C.js → chunk-DJK2UPFH.js} +63 -93
  43. package/dist/chunk-DM7FTF7W.js +4929 -0
  44. package/dist/chunk-DMD24UFZ.js +5101 -0
  45. package/dist/{chunk-36XNMIHA.js → chunk-DXZGPUAF.js} +20 -20
  46. package/dist/chunk-F46WB5IL.js +5087 -0
  47. package/dist/chunk-F5QG5SQH.js +5087 -0
  48. package/dist/{chunk-JGEVQZDR.js → chunk-FLQ5FLHW.js} +13 -16
  49. package/dist/chunk-H7GP733U.js +5087 -0
  50. package/dist/{chunk-OZSQLOV6.js → chunk-HHBXWB5U.js} +415 -19
  51. package/dist/{chunk-D24JY75H.js → chunk-IMXS4N6W.js} +3 -3
  52. package/dist/{chunk-6PVBV6ZP.js → chunk-JNMDD7JY.js} +3 -3
  53. package/dist/chunk-JTV5LA47.js +1519 -0
  54. package/dist/chunk-KV6G7NZX.js +1519 -0
  55. package/dist/chunk-MU5MEBIK.js +1519 -0
  56. package/dist/chunk-NLT5MC7X.js +465 -0
  57. package/dist/{chunk-GTFZZUXX.js → chunk-NVLYIM4J.js} +51 -27
  58. package/dist/{chunk-6G5SXLXC.js → chunk-NZY2BIZH.js} +63 -93
  59. package/dist/chunk-O42L6G67.js +1519 -0
  60. package/dist/chunk-OCNERGGM.js +4891 -0
  61. package/dist/chunk-OJSNHONE.js +1519 -0
  62. package/dist/{chunk-2TAZJWJN.js → chunk-OWL3QVH7.js} +18 -0
  63. package/dist/{chunk-P3HVY2HS.js → chunk-OWTLNV4Q.js} +382 -7
  64. package/dist/chunk-PCNYEP6T.js +4891 -0
  65. package/dist/{chunk-YL3Z5KPR.js → chunk-PI4AQ4Z6.js} +438 -15
  66. package/dist/chunk-PN3EGTCA.js +194 -0
  67. package/dist/chunk-Q37UKNRC.js +1519 -0
  68. package/dist/chunk-QXTC6J7H.js +5087 -0
  69. package/dist/{chunk-SPBQVNDI.js → chunk-RKERL5LZ.js} +25 -21
  70. package/dist/chunk-RVBK2IOX.js +25652 -0
  71. package/dist/chunk-SAKODCZ5.js +4891 -0
  72. package/dist/{chunk-XV4TU65E.js → chunk-SALGFC5L.js} +51 -27
  73. package/dist/chunk-STGWZ2MS.js +1519 -0
  74. package/dist/chunk-UY3ZVQDP.js +25652 -0
  75. package/dist/chunk-V6OSD62M.js +5087 -0
  76. package/dist/chunk-VP6YAHX4.js +1519 -0
  77. package/dist/chunk-WDYJOEAI.js +5087 -0
  78. package/dist/chunk-WEAFQNOS.js +195 -0
  79. package/dist/chunk-XKUSAZGP.js +5087 -0
  80. package/dist/chunk-Z6K5FKAB.js +548 -0
  81. package/dist/chunk-ZGE3XAXY.js +1519 -0
  82. package/dist/chunk-ZGYVXYQQ.js +3296 -0
  83. package/dist/cli-agent-7TB2BWS6.js +2370 -0
  84. package/dist/cli-agent-AKXFFST2.js +2370 -0
  85. package/dist/cli-agent-DZTKLITB.js +2357 -0
  86. package/dist/cli-agent-FOF7PFEP.js +2357 -0
  87. package/dist/cli-agent-H74M2ZYN.js +2357 -0
  88. package/dist/cli-agent-HORWVPHB.js +2370 -0
  89. package/dist/cli-agent-HSZT6SKF.js +2423 -0
  90. package/dist/cli-agent-JLUQ4ZU6.js +2424 -0
  91. package/dist/cli-agent-MVCDH4HV.js +2370 -0
  92. package/dist/cli-agent-NZXOEPJ2.js +2357 -0
  93. package/dist/cli-agent-PADN3QRC.js +2357 -0
  94. package/dist/cli-agent-QAYEX3BE.js +2441 -0
  95. package/dist/cli-agent-QT64DT5J.js +2370 -0
  96. package/dist/cli-agent-TFL2M6UK.js +2424 -0
  97. package/dist/cli-agent-UIKXATTD.js +2357 -0
  98. package/dist/cli-agent-UJN6FYTO.js +2370 -0
  99. package/dist/cli-agent-VIQAYVY4.js +2357 -0
  100. package/dist/cli-agent-WNWFVOFM.js +2370 -0
  101. package/dist/cli-agent-XBQX67VJ.js +2423 -0
  102. package/dist/cli-agent-ZLSC6FF4.js +2357 -0
  103. package/dist/cli-serve-2IL5DTEY.js +153 -0
  104. package/dist/cli-serve-47N5UKKW.js +153 -0
  105. package/dist/cli-serve-4XGZFUV2.js +140 -0
  106. package/dist/cli-serve-6OT3UEAN.js +140 -0
  107. package/dist/cli-serve-7L6EY5UH.js +153 -0
  108. package/dist/cli-serve-BDGOOOKQ.js +260 -0
  109. package/dist/cli-serve-BFNIW2LF.js +153 -0
  110. package/dist/cli-serve-C7MN6U5Q.js +153 -0
  111. package/dist/cli-serve-CR3OY3IM.js +153 -0
  112. package/dist/cli-serve-DAJFRWQ7.js +153 -0
  113. package/dist/cli-serve-FW6FHFW4.js +153 -0
  114. package/dist/cli-serve-GEEOQS77.js +153 -0
  115. package/dist/cli-serve-H562I3ZK.js +153 -0
  116. package/dist/cli-serve-HDQZF4C4.js +153 -0
  117. package/dist/cli-serve-LICAOMEB.js +140 -0
  118. package/dist/cli-serve-LLGYLWFS.js +153 -0
  119. package/dist/cli-serve-N3OISDNB.js +153 -0
  120. package/dist/cli-serve-TIZ27EVR.js +153 -0
  121. package/dist/cli-serve-TUNI2RCN.js +153 -0
  122. package/dist/cli-serve-WNOZMAWD.js +153 -0
  123. package/dist/cli-validate-Z726VJCN.js +150 -0
  124. package/dist/cli.js +4 -4
  125. package/dist/connection-manager-KAWEUWUR.js +9 -0
  126. package/dist/dashboard/app.js +9 -3
  127. package/dist/dashboard/components/knowledge-link.js +15 -0
  128. package/dist/dashboard/components/settings-help.js +4 -2
  129. package/dist/dashboard/docs/agent-deployment.html +33 -1
  130. package/dist/dashboard/docs/settings-network.html +321 -0
  131. package/dist/dashboard/docs/settings-security.html +347 -0
  132. package/dist/dashboard/docs/settings-tool-security.html +176 -0
  133. package/dist/dashboard/docs/settings.html +36 -16
  134. package/dist/dashboard/pages/agent-detail/deployment.js +39 -6
  135. package/dist/dashboard/pages/agent-detail/tools.js +10 -0
  136. package/dist/dashboard/pages/database-access.js +4 -3
  137. package/dist/dashboard/pages/settings.js +174 -37
  138. package/dist/dashboard/pages/task-pipeline.js +400 -843
  139. package/dist/db-adapter-2T56ORSD.js +7 -0
  140. package/dist/db-adapter-IRHOUMVC.js +7 -0
  141. package/dist/index.js +41 -41
  142. package/dist/microsoft-VREAZ7M2.js +3955 -0
  143. package/dist/routes-3MMLQTB6.js +90 -0
  144. package/dist/routes-4ZUIJ4HE.js +90 -0
  145. package/dist/routes-5MXHKKH4.js +90 -0
  146. package/dist/routes-64NJFK3B.js +90 -0
  147. package/dist/routes-6AKQ2LBV.js +90 -0
  148. package/dist/routes-CRRBUDO4.js +90 -0
  149. package/dist/routes-DIAF3MC3.js +90 -0
  150. package/dist/routes-KMUNU6CY.js +90 -0
  151. package/dist/routes-LRRLXIZR.js +90 -0
  152. package/dist/routes-N647AJYG.js +90 -0
  153. package/dist/routes-SSSELAAR.js +90 -0
  154. package/dist/routes-STERVGKJ.js +90 -0
  155. package/dist/routes-ZEZZACZP.js +90 -0
  156. package/dist/runtime-5EQN4GFM.js +45 -0
  157. package/dist/runtime-5LP7PUD4.js +45 -0
  158. package/dist/runtime-6BULDBR3.js +45 -0
  159. package/dist/runtime-6YEENDN3.js +45 -0
  160. package/dist/runtime-7LQFRG3B.js +45 -0
  161. package/dist/runtime-AMXJU2MB.js +45 -0
  162. package/dist/runtime-D6WSE7FG.js +45 -0
  163. package/dist/runtime-EYVN7NFJ.js +45 -0
  164. package/dist/runtime-F6RPWQVW.js +45 -0
  165. package/dist/runtime-FYMJURFC.js +45 -0
  166. package/dist/runtime-JRNBL4O4.js +45 -0
  167. package/dist/runtime-OM2NIBMI.js +45 -0
  168. package/dist/runtime-QWPVD7CY.js +45 -0
  169. package/dist/runtime-YLIIPTE4.js +45 -0
  170. package/dist/runtime-YU6P22CG.js +45 -0
  171. package/dist/screen-unlock-4RPZBHOI.js +118 -0
  172. package/dist/server-AMCSXINC.js +28 -0
  173. package/dist/server-CU6LVQS4.js +28 -0
  174. package/dist/server-DFYGH2CV.js +28 -0
  175. package/dist/server-EELWOC3X.js +28 -0
  176. package/dist/server-EN5E2OWQ.js +28 -0
  177. package/dist/server-GW2HYJYI.js +28 -0
  178. package/dist/server-J25NCRWJ.js +28 -0
  179. package/dist/server-JDGNOTFV.js +28 -0
  180. package/dist/server-NE5HD5DJ.js +28 -0
  181. package/dist/server-NQOT7W77.js +28 -0
  182. package/dist/server-PWE5PQTR.js +28 -0
  183. package/dist/server-Q2Q32H2B.js +28 -0
  184. package/dist/server-Q77ME7TL.js +28 -0
  185. package/dist/server-WLLH4WST.js +28 -0
  186. package/dist/server-WTUJ2O3F.js +28 -0
  187. package/dist/server-X4CJTHHF.js +28 -0
  188. package/dist/server-XK3ILCJC.js +28 -0
  189. package/dist/server-ZRD3NDJE.js +28 -0
  190. package/dist/setup-44VBAO4J.js +20 -0
  191. package/dist/setup-4ONNQBWB.js +20 -0
  192. package/dist/setup-4OSBXSCL.js +20 -0
  193. package/dist/setup-4QFGRBLZ.js +20 -0
  194. package/dist/setup-6766SGAR.js +20 -0
  195. package/dist/setup-AYY24DKM.js +20 -0
  196. package/dist/setup-B34N4HPU.js +20 -0
  197. package/dist/setup-E2YLC2EY.js +20 -0
  198. package/dist/setup-ER6NXTY5.js +20 -0
  199. package/dist/setup-H2AGCBW5.js +20 -0
  200. package/dist/setup-ICOZRKCX.js +20 -0
  201. package/dist/setup-JFTJH7UF.js +20 -0
  202. package/dist/setup-PRFNI6YW.js +20 -0
  203. package/dist/setup-RAHBMYHE.js +20 -0
  204. package/dist/setup-TXPR5UQX.js +20 -0
  205. package/dist/setup-XCJMELVU.js +20 -0
  206. package/dist/setup-XIYEIFVK.js +20 -0
  207. package/dist/setup-Z4PZSHBI.js +20 -0
  208. package/dist/skills-FR7I5V7H.js +16 -0
  209. package/dist/skills-HCVBA6PK.js +16 -0
  210. package/dist/system-prompts-TM7OA32C.js +913 -0
  211. package/dist/task-queue-O7IVZYUO.js +9 -0
  212. package/dist/transport-encryption-2T7PIXKG.js +25 -0
  213. package/logs/cloudflared-error.log +61 -0
  214. package/logs/cloudflared-out.log +0 -0
  215. package/logs/enterprise-error.log +0 -0
  216. package/logs/enterprise-out.log +3 -0
  217. package/logs/fola-error.log +0 -0
  218. package/logs/fola-out.log +0 -0
  219. package/logs/john-error.log +8 -0
  220. package/logs/john-out.log +0 -0
  221. package/package.json +31 -3
  222. package/src/agent-tools/tool-resolver.ts +50 -61
  223. package/src/agent-tools/tools/enterprise-database.ts +5 -5
  224. package/src/agent-tools/tools/local/dependency-manager.ts +2 -2
  225. package/src/agent-tools/tools/microsoft/graph-api.ts +137 -26
  226. package/src/agent-tools/tools/microsoft/outlook-mail.ts +392 -100
  227. package/src/agent-tools/tools/microsoft/teams.ts +267 -48
  228. package/src/auth/routes.ts +4 -4
  229. package/src/cli-agent.ts +108 -8
  230. package/src/cli-serve.ts +140 -0
  231. package/src/dashboard/app.js +9 -3
  232. package/src/dashboard/components/knowledge-link.js +15 -0
  233. package/src/dashboard/components/settings-help.js +4 -2
  234. package/src/dashboard/docs/agent-deployment.html +33 -1
  235. package/src/dashboard/docs/settings-network.html +321 -0
  236. package/src/dashboard/docs/settings-security.html +347 -0
  237. package/src/dashboard/docs/settings-tool-security.html +176 -0
  238. package/src/dashboard/docs/settings.html +36 -16
  239. package/src/dashboard/pages/agent-detail/deployment.js +39 -6
  240. package/src/dashboard/pages/agent-detail/tools.js +10 -0
  241. package/src/dashboard/pages/database-access.js +4 -3
  242. package/src/dashboard/pages/settings.js +174 -37
  243. package/src/dashboard/pages/task-pipeline.js +400 -843
  244. package/src/database-access/agent-tools.ts +78 -63
  245. package/src/database-access/connection-manager.ts +13 -2
  246. package/src/database-access/routes.ts +13 -1
  247. package/src/db/adapter.ts +1 -0
  248. package/src/engine/agent-memory.ts +2 -1
  249. package/src/engine/agent-notify.ts +50 -0
  250. package/src/engine/agent-routes.ts +257 -4
  251. package/src/engine/db-adapter.ts +16 -0
  252. package/src/engine/lifecycle.ts +4 -0
  253. package/src/engine/routes.ts +4 -3
  254. package/src/engine/screen-unlock.ts +136 -0
  255. package/src/engine/skills/database-access.ts +78 -0
  256. package/src/engine/skills/index.ts +3 -2
  257. package/src/engine/skills.ts +2 -0
  258. package/src/engine/task-queue-routes.ts +18 -0
  259. package/src/engine/task-queue.ts +15 -2
  260. package/src/middleware/transport-encryption.ts +1 -4
  261. package/src/runtime/agent-loop.ts +4 -0
  262. package/src/runtime/index.ts +15 -6
  263. package/src/server.ts +14 -1
  264. package/src/system-prompts/google/index.ts +1 -2
  265. package/src/system-prompts/index.ts +1 -1
  266. package/src/system-prompts/microsoft/contacts.ts +34 -0
  267. package/src/system-prompts/microsoft/excel.ts +52 -0
  268. package/src/system-prompts/microsoft/index.ts +31 -0
  269. package/src/system-prompts/microsoft/onedrive.ts +41 -0
  270. package/src/system-prompts/microsoft/onenote.ts +36 -0
  271. package/src/system-prompts/microsoft/outlook-calendar.ts +37 -0
  272. package/src/system-prompts/microsoft/outlook-mail.ts +46 -0
  273. package/src/system-prompts/microsoft/planner.ts +37 -0
  274. package/src/system-prompts/microsoft/powerbi.ts +38 -0
  275. package/src/system-prompts/microsoft/powerpoint.ts +35 -0
  276. package/src/system-prompts/microsoft/sharepoint.ts +44 -0
  277. package/src/system-prompts/microsoft/teams.ts +49 -0
  278. package/src/system-prompts/microsoft/todo.ts +37 -0
  279. package/src/types/hono-env.ts +4 -0
  280. package/.github/CODEOWNERS +0 -23
  281. package/.github/workflows/publish-community-skills.yml +0 -121
  282. package/.github/workflows/validate-community-skills.yml +0 -172
  283. package/agriculture_southwest_nigeria_research.txt +0 -10
  284. package/boa_credit_cards_research.txt +0 -10
  285. package/customer_support_research_feb2026.txt +0 -10
  286. package/dist/agent-tools-LRA7PPXG.js +0 -13922
  287. package/dist/agent-tools-VAU5DOQB.js +0 -13910
  288. package/dist/agent-tools-VWV7OWXU.js +0 -13922
  289. package/dist/chunk-2Z7MWTCX.js +0 -4977
  290. package/dist/chunk-3T4XU3VV.js +0 -5010
  291. package/dist/chunk-445QM4NX.js +0 -5061
  292. package/dist/chunk-5TW3Y7DJ.js +0 -1519
  293. package/dist/chunk-6I7VY3LT.js +0 -5060
  294. package/dist/chunk-6W5EK3UP.js +0 -4977
  295. package/dist/chunk-AQMSHJQT.js +0 -5069
  296. package/dist/chunk-ASSQW7HX.js +0 -5051
  297. package/dist/chunk-CIN27FGC.js +0 -5037
  298. package/dist/chunk-CMXY3NUB.js +0 -4977
  299. package/dist/chunk-DRLMRUDP.js +0 -5052
  300. package/dist/chunk-EHI7Z446.js +0 -1519
  301. package/dist/chunk-FEAILFAQ.js +0 -1519
  302. package/dist/chunk-GA3PYBZL.js +0 -1519
  303. package/dist/chunk-GWX63G5J.js +0 -1519
  304. package/dist/chunk-HHMZ4UY6.js +0 -1519
  305. package/dist/chunk-HVQMNF7E.js +0 -4921
  306. package/dist/chunk-HXM7F3YN.js +0 -1519
  307. package/dist/chunk-K6NGOUXG.js +0 -5060
  308. package/dist/chunk-KPG5WINJ.js +0 -4977
  309. package/dist/chunk-LBCUBYDL.js +0 -1519
  310. package/dist/chunk-LIRQSWLR.js +0 -5014
  311. package/dist/chunk-LRCKO5KE.js +0 -1519
  312. package/dist/chunk-M7XL3DJD.js +0 -5069
  313. package/dist/chunk-MHJULEIQ.js +0 -1519
  314. package/dist/chunk-MJGGW6MC.js +0 -106
  315. package/dist/chunk-MMYBDHDB.js +0 -4921
  316. package/dist/chunk-MQT5FXKD.js +0 -1519
  317. package/dist/chunk-OIMPEQF5.js +0 -4977
  318. package/dist/chunk-OOU7JUYE.js +0 -542
  319. package/dist/chunk-OW4GLBHP.js +0 -1519
  320. package/dist/chunk-Q4K4MMLU.js +0 -4977
  321. package/dist/chunk-RUK4CRPF.js +0 -1519
  322. package/dist/chunk-T7H65XQY.js +0 -1519
  323. package/dist/chunk-TQVFWG57.js +0 -5064
  324. package/dist/chunk-UEPK3IMC.js +0 -1519
  325. package/dist/chunk-VUWTXJH6.js +0 -1519
  326. package/dist/chunk-WCPGGSAD.js +0 -1519
  327. package/dist/chunk-WO63NZOJ.js +0 -1519
  328. package/dist/chunk-YPJDRVUM.js +0 -5064
  329. package/dist/chunk-ZROMH5DL.js +0 -4921
  330. package/src/dashboard/docs/_template.txt +0 -92
@@ -0,0 +1,465 @@
1
+ import {
2
+ AGENTICMAIL_SKILL_DEFS,
3
+ ENTERPRISE_SKILL_DEFS,
4
+ Emoji,
5
+ GWS_SKILL_DEFS,
6
+ M365_SKILL_DEFS,
7
+ SYSTEM_SKILL_DEFS,
8
+ init_emoji,
9
+ init_skills,
10
+ init_tool_catalog,
11
+ tool_catalog_exports
12
+ } from "./chunk-ZGYVXYQQ.js";
13
+ import {
14
+ __esm,
15
+ __toCommonJS
16
+ } from "./chunk-KFQGP6VL.js";
17
+
18
+ // src/engine/skills.ts
19
+ var SKILL_SUITES, PRESET_PROFILES, BUILTIN_SKILLS, PermissionEngine;
20
+ var init_skills2 = __esm({
21
+ "src/engine/skills.ts"() {
22
+ init_emoji();
23
+ init_skills();
24
+ SKILL_SUITES = [
25
+ {
26
+ id: "microsoft-365",
27
+ name: "Microsoft 365",
28
+ description: "Complete Microsoft 365 suite \u2014 Outlook, Teams, SharePoint, OneDrive, Word, Excel, PowerPoint, OneNote, Planner, Power BI, Power Automate, Forms, To Do, Bookings, Whiteboard, Admin Center, Copilot.",
29
+ icon: Emoji.building,
30
+ skills: [
31
+ "m365-outlook",
32
+ "m365-teams",
33
+ "m365-sharepoint",
34
+ "m365-onedrive",
35
+ "m365-word",
36
+ "m365-excel",
37
+ "m365-powerpoint",
38
+ "m365-onenote",
39
+ "m365-planner",
40
+ "m365-power-bi",
41
+ "m365-power-automate",
42
+ "m365-forms",
43
+ "m365-todo",
44
+ "m365-bookings",
45
+ "m365-whiteboard",
46
+ "m365-admin",
47
+ "m365-copilot"
48
+ ]
49
+ },
50
+ {
51
+ id: "google-workspace",
52
+ name: "Google Workspace",
53
+ description: "Complete Google Workspace suite \u2014 Gmail, Calendar, Drive, Docs, Sheets, Slides, Meet, Chat, Forms, Sites, Keep, Admin Console, Vault, Groups.",
54
+ icon: Emoji.blueCircle,
55
+ skills: [
56
+ "gws-gmail",
57
+ "gws-calendar",
58
+ "gws-drive",
59
+ "gws-docs",
60
+ "gws-sheets",
61
+ "gws-slides",
62
+ "gws-meet",
63
+ "gws-chat",
64
+ "gws-forms",
65
+ "gws-sites",
66
+ "gws-keep",
67
+ "gws-admin",
68
+ "gws-vault",
69
+ "gws-groups"
70
+ ]
71
+ },
72
+ {
73
+ id: "atlassian",
74
+ name: "Atlassian Suite",
75
+ description: "Jira, Confluence, Bitbucket, Trello, Statuspage, and Opsgenie.",
76
+ icon: Emoji.blueDiamond,
77
+ skills: ["jira", "confluence", "bitbucket", "trello", "statuspage", "opsgenie"]
78
+ },
79
+ {
80
+ id: "aws",
81
+ name: "Amazon Web Services",
82
+ description: "AWS cloud infrastructure \u2014 S3, EC2, Lambda, RDS, CloudWatch, IAM, SES, SNS, SQS, DynamoDB, CloudFormation.",
83
+ icon: Emoji.cloud,
84
+ skills: ["aws-s3", "aws-ec2", "aws-lambda", "aws-rds", "aws-cloudwatch", "aws-iam", "aws-ses", "aws-sns", "aws-sqs", "aws-dynamodb", "aws-cloudformation"]
85
+ },
86
+ {
87
+ id: "azure",
88
+ name: "Microsoft Azure",
89
+ description: "Azure cloud infrastructure \u2014 VMs, App Service, Functions, Storage, SQL, CosmosDB, DevOps, Active Directory.",
90
+ icon: Emoji.partlyCloudy,
91
+ skills: ["azure-vms", "azure-app-service", "azure-functions", "azure-storage", "azure-sql", "azure-cosmosdb", "azure-devops", "azure-ad"]
92
+ },
93
+ {
94
+ id: "gcp",
95
+ name: "Google Cloud Platform",
96
+ description: "GCP cloud infrastructure \u2014 Compute Engine, Cloud Functions, Cloud Storage, BigQuery, Cloud Run, Pub/Sub, Firestore.",
97
+ icon: Emoji.sunCloud,
98
+ skills: ["gcp-compute", "gcp-functions", "gcp-storage", "gcp-bigquery", "gcp-run", "gcp-pubsub", "gcp-firestore"]
99
+ },
100
+ {
101
+ id: "salesforce-suite",
102
+ name: "Salesforce Suite",
103
+ description: "Salesforce CRM, Service Cloud, Marketing Cloud, and Commerce Cloud.",
104
+ icon: Emoji.cloud,
105
+ skills: ["salesforce", "salesforce-service", "salesforce-marketing", "salesforce-commerce"]
106
+ },
107
+ {
108
+ id: "hubspot-suite",
109
+ name: "HubSpot Suite",
110
+ description: "HubSpot CRM, Marketing Hub, Sales Hub, Service Hub, and CMS.",
111
+ icon: Emoji.orangeCircle,
112
+ skills: ["hubspot-crm", "hubspot-marketing", "hubspot-sales", "hubspot-service"]
113
+ },
114
+ {
115
+ id: "adobe-creative",
116
+ name: "Adobe Creative Cloud",
117
+ description: "Adobe Photoshop, Illustrator, Premiere Pro, After Effects, InDesign, and XD.",
118
+ icon: Emoji.art,
119
+ skills: ["adobe-photoshop", "adobe-illustrator", "adobe-premiere", "adobe-after-effects", "adobe-indesign", "adobe-xd"]
120
+ },
121
+ {
122
+ id: "enterprise-utility",
123
+ name: "Enterprise Utility Tools",
124
+ description: "Built-in enterprise productivity tools \u2014 database queries, spreadsheets, documents, calendar, knowledge search, web research, translation, logs, workflow, notifications, finance, HTTP, security scanning, code sandbox, diff, and vision.",
125
+ icon: Emoji.construction,
126
+ skills: [
127
+ "enterprise-database",
128
+ "enterprise-spreadsheet",
129
+ "enterprise-documents",
130
+ "enterprise-http",
131
+ "enterprise-security-scan",
132
+ "enterprise-code-sandbox",
133
+ "enterprise-diff"
134
+ ]
135
+ }
136
+ ];
137
+ PRESET_PROFILES = [
138
+ {
139
+ name: "Research Assistant",
140
+ description: "Can search the web, read files, and summarize content. Cannot send messages, run code, or modify anything.",
141
+ skills: { mode: "allowlist", list: ["research", "summarize", "data-read"] },
142
+ tools: { blocked: ["exec", "write", "edit"], allowed: ["web_search", "web_fetch", "read", "memory_search", "memory_get"] },
143
+ maxRiskLevel: "low",
144
+ blockedSideEffects: ["sends-email", "sends-message", "sends-sms", "posts-social", "runs-code", "modifies-files", "deletes-data", "controls-device", "financial"],
145
+ requireApproval: { enabled: false, forRiskLevels: [], forSideEffects: [], approvers: [], timeoutMinutes: 30 },
146
+ rateLimits: { toolCallsPerMinute: 30, toolCallsPerHour: 500, toolCallsPerDay: 5e3, externalActionsPerHour: 0 },
147
+ constraints: { maxConcurrentTasks: 3, maxSessionDurationMinutes: 480, sandboxMode: false },
148
+ dependencyPolicy: { mode: "deny", allowGlobalInstalls: false, allowElevated: false, allowedManagers: [], blockedPackages: [], autoCleanup: true }
149
+ },
150
+ {
151
+ name: "Customer Support Agent",
152
+ description: "Can read/send emails, search knowledge base, and manage tickets. Cannot run code or access files.",
153
+ skills: { mode: "allowlist", list: ["communication", "research", "agenticmail", "m365-outlook", "m365-teams", "gws-gmail", "gws-calendar", "zendesk", "intercom"] },
154
+ tools: { blocked: ["exec", "browser", "write", "edit"], allowed: ["agenticmail_send", "agenticmail_reply", "agenticmail_inbox", "agenticmail_read", "agenticmail_search", "web_search", "web_fetch"] },
155
+ maxRiskLevel: "medium",
156
+ blockedSideEffects: ["runs-code", "modifies-files", "deletes-data", "controls-device", "financial", "posts-social"],
157
+ requireApproval: { enabled: true, forRiskLevels: ["high", "critical"], forSideEffects: ["sends-email"], approvers: [], timeoutMinutes: 60 },
158
+ rateLimits: { toolCallsPerMinute: 20, toolCallsPerHour: 300, toolCallsPerDay: 3e3, externalActionsPerHour: 50 },
159
+ constraints: { maxConcurrentTasks: 5, maxSessionDurationMinutes: 480, sandboxMode: false },
160
+ dependencyPolicy: { mode: "deny", allowGlobalInstalls: false, allowElevated: false, allowedManagers: [], blockedPackages: [], autoCleanup: true }
161
+ },
162
+ {
163
+ name: "Developer Assistant",
164
+ description: "Full development capabilities: code, git, GitHub, shell. Cannot send external messages or access smart home.",
165
+ skills: { mode: "allowlist", list: ["development", "github", "coding-agent", "research", "data", "docker", "github-actions", "jira", "linear", "slack"] },
166
+ tools: { blocked: ["agenticmail_send", "message", "tts", "nodes"], allowed: ["exec", "read", "write", "edit", "web_search", "web_fetch", "browser"] },
167
+ maxRiskLevel: "high",
168
+ blockedSideEffects: ["sends-email", "sends-message", "sends-sms", "posts-social", "controls-device", "financial"],
169
+ requireApproval: { enabled: true, forRiskLevels: ["critical"], forSideEffects: [], approvers: [], timeoutMinutes: 15 },
170
+ rateLimits: { toolCallsPerMinute: 60, toolCallsPerHour: 1e3, toolCallsPerDay: 1e4, externalActionsPerHour: 100 },
171
+ constraints: { maxConcurrentTasks: 3, maxSessionDurationMinutes: 720, sandboxMode: false },
172
+ dependencyPolicy: { mode: "auto", allowGlobalInstalls: true, allowElevated: false, allowedManagers: ["brew", "apt", "npm", "pip", "choco", "winget"], blockedPackages: [], autoCleanup: false }
173
+ },
174
+ {
175
+ name: "Full Access (Owner)",
176
+ description: "Unrestricted access to all skills and tools. Full system access including sudo, global installs, and all package managers.",
177
+ skills: { mode: "blocklist", list: [] },
178
+ tools: { blocked: [], allowed: [] },
179
+ maxRiskLevel: "critical",
180
+ blockedSideEffects: [],
181
+ requireApproval: { enabled: false, forRiskLevels: [], forSideEffects: [], approvers: [], timeoutMinutes: 30 },
182
+ rateLimits: { toolCallsPerMinute: 120, toolCallsPerHour: 5e3, toolCallsPerDay: 5e4, externalActionsPerHour: 500 },
183
+ constraints: { maxConcurrentTasks: 10, maxSessionDurationMinutes: 1440, sandboxMode: false },
184
+ dependencyPolicy: { mode: "auto", allowGlobalInstalls: true, allowElevated: true, allowedManagers: ["brew", "apt", "npm", "pip", "choco", "winget", "pacman", "dnf", "snap", "scoop"], blockedPackages: [], autoCleanup: false }
185
+ },
186
+ {
187
+ name: "Sandbox (Testing)",
188
+ description: "All tools available but in simulation mode. No real external actions are taken.",
189
+ skills: { mode: "blocklist", list: [] },
190
+ tools: { blocked: [], allowed: [] },
191
+ maxRiskLevel: "critical",
192
+ blockedSideEffects: [],
193
+ requireApproval: { enabled: false, forRiskLevels: [], forSideEffects: [], approvers: [], timeoutMinutes: 30 },
194
+ rateLimits: { toolCallsPerMinute: 60, toolCallsPerHour: 1e3, toolCallsPerDay: 1e4, externalActionsPerHour: 500 },
195
+ constraints: { maxConcurrentTasks: 5, maxSessionDurationMinutes: 480, sandboxMode: true },
196
+ dependencyPolicy: { mode: "auto", allowGlobalInstalls: false, allowElevated: false, allowedManagers: ["npm", "pip"], blockedPackages: [], autoCleanup: true }
197
+ }
198
+ ];
199
+ BUILTIN_SKILLS = [
200
+ // ═══ AgenticMail — Core Product (always available) ═══
201
+ ...AGENTICMAIL_SKILL_DEFS,
202
+ // ═══ Microsoft 365 Suite ═══
203
+ ...M365_SKILL_DEFS,
204
+ // ═══ Google Workspace Suite ═══
205
+ ...GWS_SKILL_DEFS,
206
+ // ═══ Enterprise Utility Tools ═══
207
+ ...ENTERPRISE_SKILL_DEFS,
208
+ // ═══ System / Core ═══
209
+ ...SYSTEM_SKILL_DEFS
210
+ ];
211
+ PermissionEngine = class {
212
+ skills = /* @__PURE__ */ new Map();
213
+ profiles = /* @__PURE__ */ new Map();
214
+ engineDb;
215
+ refreshTimer;
216
+ _onRefreshCallbacks = [];
217
+ constructor(skills) {
218
+ if (skills) {
219
+ for (const s of skills) this.skills.set(s.id, s);
220
+ }
221
+ }
222
+ /**
223
+ * Refresh all permission profiles from DB.
224
+ * Called periodically so dashboard changes take effect without agent restart.
225
+ */
226
+ async refreshProfiles() {
227
+ if (!this.engineDb) return;
228
+ try {
229
+ const profiles = await this.engineDb.getAllPermissionProfiles();
230
+ for (const profile of profiles) {
231
+ if (profile && profile.id) {
232
+ this.profiles.set(profile.id, profile);
233
+ }
234
+ }
235
+ for (const cb of this._onRefreshCallbacks) {
236
+ try {
237
+ cb(this.profiles);
238
+ } catch {
239
+ }
240
+ }
241
+ } catch {
242
+ }
243
+ }
244
+ /** Register a callback to run after profiles refresh (e.g., sync dependency policy) */
245
+ onRefresh(callback) {
246
+ this._onRefreshCallbacks.push(callback);
247
+ }
248
+ /**
249
+ * Start periodic profile refresh (default: every 30s).
250
+ * Call after setDb() to keep profiles in sync with dashboard changes.
251
+ */
252
+ startAutoRefresh(intervalMs = 3e4) {
253
+ if (this.refreshTimer) return;
254
+ this.refreshTimer = setInterval(() => {
255
+ this.refreshProfiles().catch(() => {
256
+ });
257
+ }, intervalMs);
258
+ if (this.refreshTimer?.unref) this.refreshTimer.unref();
259
+ }
260
+ stopAutoRefresh() {
261
+ if (this.refreshTimer) {
262
+ clearInterval(this.refreshTimer);
263
+ this.refreshTimer = void 0;
264
+ }
265
+ }
266
+ /**
267
+ * Set the database adapter and load existing profiles from DB
268
+ */
269
+ async setDb(db) {
270
+ this.engineDb = db;
271
+ try {
272
+ const profiles = await db.getAllPermissionProfiles();
273
+ for (const profile of profiles) {
274
+ if (profile && profile.id) {
275
+ this.profiles.set(profile.id, profile);
276
+ }
277
+ }
278
+ if (profiles.length > 0) console.log(`[permissions] Loaded ${profiles.length} permission profiles from DB`);
279
+ } catch {
280
+ }
281
+ }
282
+ registerSkill(skill) {
283
+ this.skills.set(skill.id, skill);
284
+ }
285
+ /**
286
+ * Register tools dynamically at runtime (e.g., MCP bridge tools loaded after init).
287
+ * Merges into an existing skill definition or creates a new one.
288
+ */
289
+ registerDynamicTools(skillId, tools) {
290
+ const existing = this.skills.get(skillId);
291
+ if (existing) {
292
+ const existingIds = new Set(existing.tools.map((t) => t.id));
293
+ const newTools = tools.filter((t) => !existingIds.has(t.id));
294
+ existing.tools = [...existing.tools, ...newTools];
295
+ } else {
296
+ this.skills.set(skillId, {
297
+ id: skillId,
298
+ name: `Dynamic: ${skillId}`,
299
+ description: "Dynamically registered tools",
300
+ category: "integration",
301
+ risk: "medium",
302
+ tools,
303
+ source: "builtin"
304
+ });
305
+ }
306
+ }
307
+ setProfile(agentId, profile, orgId) {
308
+ this.profiles.set(agentId, profile);
309
+ if (this.engineDb && orgId) {
310
+ this.engineDb.upsertPermissionProfile(orgId, profile).catch((err) => {
311
+ console.error(`[permissions] Failed to persist profile for agent ${agentId}:`, err);
312
+ });
313
+ }
314
+ }
315
+ getProfile(agentId) {
316
+ return this.profiles.get(agentId);
317
+ }
318
+ /**
319
+ * Core permission check: Can this agent use this tool right now?
320
+ * Returns { allowed, reason, requiresApproval }
321
+ */
322
+ checkPermission(agentId, toolId, context) {
323
+ const profile = this.profiles.get(agentId);
324
+ if (!profile) {
325
+ return { allowed: false, reason: "No permission profile assigned", requiresApproval: false };
326
+ }
327
+ if (profile.constraints.sandboxMode) {
328
+ return { allowed: true, reason: "Sandbox mode \u2014 action will be simulated", requiresApproval: false, sandbox: true };
329
+ }
330
+ if (profile.constraints.allowedWorkingHours) {
331
+ const now = context?.timestamp || /* @__PURE__ */ new Date();
332
+ const { start, end, timezone } = profile.constraints.allowedWorkingHours;
333
+ const hour = parseInt(new Intl.DateTimeFormat("en-US", { hour: "numeric", hour12: false, timeZone: timezone }).format(now));
334
+ const startHour = parseInt(start.split(":")[0]);
335
+ const endHour = parseInt(end.split(":")[0]);
336
+ if (hour < startHour || hour >= endHour) {
337
+ return { allowed: false, reason: `Outside working hours (${start}-${end} ${timezone})`, requiresApproval: false };
338
+ }
339
+ }
340
+ if (profile.constraints.allowedIPs?.length && context?.ip) {
341
+ if (!profile.constraints.allowedIPs.includes(context.ip)) {
342
+ return { allowed: false, reason: `IP ${context.ip} not in allowlist`, requiresApproval: false };
343
+ }
344
+ }
345
+ const blockedTools = profile.tools?.blocked || [];
346
+ const allowedTools = profile.tools?.allowed || [];
347
+ if (blockedTools.includes(toolId)) {
348
+ return { allowed: false, reason: `Tool "${toolId}" is explicitly blocked`, requiresApproval: false };
349
+ }
350
+ if (allowedTools.includes(toolId)) {
351
+ return this._checkApproval(profile, toolId);
352
+ }
353
+ const tool = this._findTool(toolId);
354
+ if (!tool) {
355
+ return { allowed: false, reason: `Unknown tool "${toolId}"`, requiresApproval: false };
356
+ }
357
+ const skillsMode = profile.skills?.mode || "blocklist";
358
+ const skillsList = profile.skills?.list || [];
359
+ const skillAllowed = skillsMode === "allowlist" ? skillsList.includes(tool.skillId || "") : !skillsList.includes(tool.skillId || "");
360
+ if (!skillAllowed) {
361
+ return { allowed: false, reason: `Skill "${tool.skillId}" is not permitted`, requiresApproval: false };
362
+ }
363
+ const riskOrder = ["low", "medium", "high", "critical"];
364
+ const toolRiskIdx = riskOrder.indexOf(tool.risk || "low");
365
+ const maxRiskIdx = riskOrder.indexOf(profile.maxRiskLevel);
366
+ if (toolRiskIdx > maxRiskIdx) {
367
+ return { allowed: false, reason: `Tool risk "${tool.risk}" exceeds max allowed "${profile.maxRiskLevel}"`, requiresApproval: false };
368
+ }
369
+ for (const effect of tool.sideEffects || []) {
370
+ if (profile.blockedSideEffects.includes(effect)) {
371
+ return { allowed: false, reason: `Side effect "${effect}" is blocked`, requiresApproval: false };
372
+ }
373
+ }
374
+ return this._checkApproval(profile, toolId, tool);
375
+ }
376
+ _checkApproval(profile, toolId, tool) {
377
+ if (!profile.requireApproval.enabled) {
378
+ return { allowed: true, reason: "Permitted", requiresApproval: false };
379
+ }
380
+ if (tool) {
381
+ if (profile.requireApproval.forRiskLevels.includes(tool.risk || "low")) {
382
+ return { allowed: true, reason: "Requires human approval (risk level)", requiresApproval: true };
383
+ }
384
+ for (const effect of tool.sideEffects || []) {
385
+ if (profile.requireApproval.forSideEffects.includes(effect)) {
386
+ return { allowed: true, reason: `Requires human approval (${effect})`, requiresApproval: true };
387
+ }
388
+ }
389
+ }
390
+ return { allowed: true, reason: "Permitted", requiresApproval: false };
391
+ }
392
+ _findTool(toolId) {
393
+ for (const skill of this.skills.values()) {
394
+ const tool = skill.tools.find((t) => t.id === toolId);
395
+ if (tool) return tool;
396
+ }
397
+ try {
398
+ const { TOOL_INDEX } = (init_tool_catalog(), __toCommonJS(tool_catalog_exports));
399
+ return TOOL_INDEX.get(toolId);
400
+ } catch {
401
+ return void 0;
402
+ }
403
+ }
404
+ /**
405
+ * Get the full resolved tool list for an agent — what they can actually use
406
+ */
407
+ getAvailableTools(agentId) {
408
+ const result = [];
409
+ for (const skill of this.skills.values()) {
410
+ for (const tool of skill.tools) {
411
+ const perm = this.checkPermission(agentId, tool.id || tool.name);
412
+ if (perm.allowed) {
413
+ result.push({
414
+ tool,
415
+ status: perm.sandbox ? "sandbox" : perm.requiresApproval ? "approval-required" : "allowed"
416
+ });
417
+ }
418
+ }
419
+ }
420
+ return result;
421
+ }
422
+ /**
423
+ * Generate the tool policy config for an agent based on their profile
424
+ */
425
+ generateToolPolicy(agentId) {
426
+ const profile = this.profiles.get(agentId);
427
+ if (!profile) return { allowedTools: [], blockedTools: [], approvalRequired: [], rateLimits: { toolCallsPerMinute: 10, toolCallsPerHour: 100, toolCallsPerDay: 1e3, externalActionsPerHour: 10 } };
428
+ const allowed = [];
429
+ const blocked = [];
430
+ const approval = [];
431
+ for (const skill of this.skills.values()) {
432
+ for (const tool of skill.tools) {
433
+ const perm = this.checkPermission(agentId, tool.id || tool.name);
434
+ if (perm.allowed) {
435
+ allowed.push(tool.id || tool.name);
436
+ if (perm.requiresApproval) approval.push(tool.id || tool.name);
437
+ } else {
438
+ blocked.push(tool.id || tool.name);
439
+ }
440
+ }
441
+ }
442
+ return { allowedTools: allowed, blockedTools: blocked, approvalRequired: approval, rateLimits: profile.rateLimits };
443
+ }
444
+ getAllSkills() {
445
+ return Array.from(this.skills.values());
446
+ }
447
+ getSkillsByCategory() {
448
+ const result = {};
449
+ for (const skill of this.skills.values()) {
450
+ if (!result[skill.category]) result[skill.category] = [];
451
+ result[skill.category].push(skill);
452
+ }
453
+ return result;
454
+ }
455
+ };
456
+ }
457
+ });
458
+
459
+ export {
460
+ SKILL_SUITES,
461
+ PRESET_PROFILES,
462
+ BUILTIN_SKILLS,
463
+ PermissionEngine,
464
+ init_skills2 as init_skills
465
+ };