@agenticmail/enterprise 0.5.344 → 0.5.346

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 (43) hide show
  1. package/dist/{chunk-URC3SFYD.js → chunk-47GC5I25.js} +2 -2
  2. package/dist/{chunk-AA6OVVQD.js → chunk-QJKE4CP4.js} +98 -54
  3. package/dist/{cli-recover-K7A4IIQY.js → cli-recover-CO2RNTTL.js} +1 -1
  4. package/dist/{cli-serve-DUUELMXK.js → cli-serve-KE4WNPMF.js} +2 -2
  5. package/dist/cli.js +3 -3
  6. package/dist/index.js +2 -2
  7. package/dist/{server-ZFVGQJUL.js → server-EJBLWFHI.js} +1 -1
  8. package/dist/{setup-D7IXATAY.js → setup-IXC3WPV2.js} +1 -1
  9. package/package.json +1 -1
  10. package/dist/agent-heartbeat-ZFKA6GMI.js +0 -510
  11. package/dist/agent-tools-R6RSBDJQ.js +0 -13949
  12. package/dist/browser-tool-4KWE37RL.js +0 -4003
  13. package/dist/cli-agent-2NBPF3GN.js +0 -2473
  14. package/dist/cli-agent-HWEJ3REY.js +0 -2473
  15. package/dist/cli-agent-K6UFZRXC.js +0 -2473
  16. package/dist/cli-recover-7UPG4QZ6.js +0 -488
  17. package/dist/cli-recover-TTOR7CJR.js +0 -487
  18. package/dist/cli-serve-4MT7RDEL.js +0 -260
  19. package/dist/cli-serve-5VFU4GR4.js +0 -260
  20. package/dist/cli-serve-BQ7NJMGJ.js +0 -260
  21. package/dist/cli-verify-WICBVLAM.js +0 -149
  22. package/dist/factory-4V2W4BSV.js +0 -11
  23. package/dist/mysql-STM7UWYW.js +0 -580
  24. package/dist/postgres-USXBPTHX.js +0 -875
  25. package/dist/routes-T3CDAQTD.js +0 -92
  26. package/dist/runtime-L5ADJORP.js +0 -45
  27. package/dist/runtime-X4BTVICL.js +0 -45
  28. package/dist/server-AAGH5NRQ.js +0 -28
  29. package/dist/server-KSN56EZQ.js +0 -28
  30. package/dist/server-WQ6LLYGB.js +0 -28
  31. package/dist/setup-2E6ZFVSS.js +0 -20
  32. package/dist/setup-3LZARKFD.js +0 -20
  33. package/dist/setup-4AS2ASES.js +0 -20
  34. package/dist/setup-6DRKSOMH.js +0 -20
  35. package/dist/setup-EG5V6EKA.js +0 -20
  36. package/dist/setup-KHWRJILU.js +0 -20
  37. package/dist/setup-LOX32DNQ.js +0 -20
  38. package/dist/setup-MQYVGERK.js +0 -20
  39. package/dist/setup-UR2MFWCK.js +0 -20
  40. package/dist/setup-UUNBBOQH.js +0 -20
  41. package/dist/setup-ZZSBCXJ3.js +0 -20
  42. package/dist/sqlite-QXRWM272.js +0 -572
  43. package/dist/turso-QDQ4SSGE.js +0 -501
@@ -2405,7 +2405,7 @@ function createAdminRoutes(db) {
2405
2405
  const platform = os.default.platform();
2406
2406
  if (platform === "darwin") {
2407
2407
  try {
2408
- execSync("which brew", { timeout: 3e3 });
2408
+ execSync(process.platform === "win32" ? "where brew" : "which brew", { timeout: 3e3 });
2409
2409
  execSync("brew install cloudflared 2>&1", { encoding: "utf8", timeout: 12e4 });
2410
2410
  } catch {
2411
2411
  const arch = os.default.arch() === "arm64" ? "arm64" : "amd64";
@@ -2494,7 +2494,7 @@ function createAdminRoutes(db) {
2494
2494
  }
2495
2495
  }
2496
2496
  try {
2497
- execSync("which pm2", { timeout: 3e3 });
2497
+ execSync(process.platform === "win32" ? "where pm2" : "which pm2", { timeout: 3e3 });
2498
2498
  try {
2499
2499
  execSync("pm2 delete cloudflared 2>/dev/null", { timeout: 5e3 });
2500
2500
  } catch {
@@ -258,7 +258,7 @@ async function promptDatabase(inquirer, chalk) {
258
258
  // src/setup/deployment.ts
259
259
  import { execSync, exec as execCb } from "child_process";
260
260
  import { promisify } from "util";
261
- import { existsSync, writeFileSync, readFileSync } from "fs";
261
+ import { existsSync, writeFileSync, readFileSync, statSync } from "fs";
262
262
  import { join } from "path";
263
263
  import { homedir, platform, arch } from "os";
264
264
  var execP = promisify(execCb);
@@ -431,16 +431,32 @@ async function runCloudSetup(inquirer, chalk, existingSubdomain) {
431
431
  const archStr = arch() === "arm64" ? "arm64" : "amd64";
432
432
  execSync(`curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-${archStr} -o /usr/local/bin/cloudflared && chmod +x /usr/local/bin/cloudflared`, { stdio: "pipe", timeout: 12e4 });
433
433
  } else if (os === "win32") {
434
+ const localAppData = process.env.LOCALAPPDATA || `${process.env.USERPROFILE}\\AppData\\Local`;
435
+ const cfDir = `${localAppData}\\cloudflared`;
436
+ const cfExe = `${cfDir}\\cloudflared.exe`;
437
+ let found = false;
434
438
  try {
435
- execSync("winget install --id Cloudflare.cloudflared --accept-source-agreements --accept-package-agreements", { stdio: "pipe", timeout: 12e4 });
439
+ statSync(cfExe);
440
+ found = true;
436
441
  } catch {
437
- console.log(chalk.dim(" winget failed, trying direct download..."));
438
- const archStr = arch() === "arm64" ? "arm64" : "amd64";
439
- const localAppData = process.env.LOCALAPPDATA || `${process.env.USERPROFILE}\\AppData\\Local`;
440
- const cfDir = `${localAppData}\\cloudflared`;
441
- const cfExe = `${cfDir}\\cloudflared.exe`;
442
- const dlUrl = `https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-windows-${archStr}.exe`;
443
- execSync(`powershell -Command "New-Item -ItemType Directory -Force -Path '${cfDir}' | Out-Null; Invoke-WebRequest -Uri '${dlUrl}' -OutFile '${cfExe}'"`, { stdio: "pipe", timeout: 12e4 });
442
+ }
443
+ if (!found) {
444
+ try {
445
+ execSync("winget install --id Cloudflare.cloudflared --accept-source-agreements --accept-package-agreements", { stdio: "pipe", timeout: 12e4 });
446
+ found = true;
447
+ } catch {
448
+ console.log(chalk.dim(" winget failed, trying direct download..."));
449
+ try {
450
+ const archStr = arch() === "arm64" ? "arm64" : "amd64";
451
+ const dlUrl = `https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-windows-${archStr}.exe`;
452
+ execSync(`powershell -Command "New-Item -ItemType Directory -Force -Path '${cfDir}' | Out-Null; Invoke-WebRequest -Uri '${dlUrl}' -OutFile '${cfExe}'"`, { stdio: "inherit", timeout: 12e4 });
453
+ found = true;
454
+ } catch (dlErr) {
455
+ console.log(chalk.dim(` Download failed: ${dlErr.message?.substring(0, 100)}`));
456
+ }
457
+ }
458
+ }
459
+ if (found) {
444
460
  process.env.PATH = `${cfDir};${process.env.PATH}`;
445
461
  }
446
462
  } else {
@@ -1046,8 +1062,9 @@ async function promptRegistration(inquirer, chalk, ora, domain, companyName, adm
1046
1062
  // src/setup/provision.ts
1047
1063
  import { randomUUID, randomBytes as randomBytes2 } from "crypto";
1048
1064
  import { execSync as execSync2, spawn } from "child_process";
1049
- import { statSync } from "fs";
1065
+ import { statSync as statSync2, readFileSync as readFileSync2 } from "fs";
1050
1066
  import { join as join2 } from "path";
1067
+ import { homedir as homedir2 } from "os";
1051
1068
  function generateOrgId() {
1052
1069
  const chars = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
1053
1070
  const bytes = randomBytes2(10);
@@ -1160,8 +1177,8 @@ async function provision(config, ora, chalk) {
1160
1177
  try {
1161
1178
  const { writeFileSync: writeFileSync2, existsSync: existsSync2, mkdirSync } = await import("fs");
1162
1179
  const { join: join4 } = await import("path");
1163
- const { homedir: homedir2 } = await import("os");
1164
- const envDir = join4(homedir2(), ".agenticmail");
1180
+ const { homedir: homedir3 } = await import("os");
1181
+ const envDir = join4(homedir3(), ".agenticmail");
1165
1182
  if (!existsSync2(envDir)) mkdirSync(envDir, { recursive: true });
1166
1183
  const port = config.tunnel?.port || (config.deployTarget === "local" ? 3e3 : void 0) || (config.deployTarget === "docker" ? 3e3 : void 0) || 3200;
1167
1184
  let existingEnv = "";
@@ -1217,7 +1234,7 @@ async function deploy(config, db, jwtSecret, vaultKey, spinner, chalk) {
1217
1234
  const { deployTarget, company, database, domain, tunnel, cloud } = config;
1218
1235
  if (deployTarget === "cloudflare-tunnel" && tunnel) {
1219
1236
  spinner.start(`Starting local server on port ${tunnel.port}...`);
1220
- const { createServer: createServer2 } = await import("./server-ZFVGQJUL.js");
1237
+ const { createServer: createServer2 } = await import("./server-EJBLWFHI.js");
1221
1238
  const server2 = createServer2({ port: tunnel.port, db, jwtSecret });
1222
1239
  const handle2 = await server2.start();
1223
1240
  spinner.succeed("Server running");
@@ -1291,30 +1308,70 @@ async function deploy(config, db, jwtSecret, vaultKey, spinner, chalk) {
1291
1308
  const localAppData = process.env.LOCALAPPDATA || `${process.env.USERPROFILE}\\AppData\\Local`;
1292
1309
  const candidate = `${localAppData}\\cloudflared\\cloudflared.exe`;
1293
1310
  try {
1294
- statSync(candidate);
1311
+ statSync2(candidate);
1295
1312
  cfPath = candidate;
1296
1313
  } catch {
1297
1314
  }
1298
1315
  }
1299
1316
  if (!cfPath) throw new Error("cloudflared not found \u2014 install it first");
1300
- execSync2(`pm2 start "${cfPath}" --name cloudflared --interpreter none -- tunnel --no-autoupdate run --token ${cloud.tunnelToken}`, { stdio: "pipe", timeout: 15e3 });
1301
- let npxCmd = "npx";
1302
- if (process.platform === "win32") {
1303
- for (const candidate of [
1304
- join2(process.env.APPDATA || "", "npm", "npx.cmd"),
1305
- join2(process.env.ProgramFiles || "", "nodejs", "npx.cmd")
1306
- ]) {
1307
- try {
1308
- statSync(candidate);
1309
- npxCmd = candidate;
1310
- break;
1311
- } catch {
1317
+ const amDir = join2(homedir2(), ".agenticmail");
1318
+ const { writeFileSync: writeFileSync2, mkdirSync } = await import("fs");
1319
+ try {
1320
+ mkdirSync(amDir, { recursive: true });
1321
+ } catch {
1322
+ }
1323
+ const startScript = join2(amDir, "start.cjs");
1324
+ writeFileSync2(startScript, [
1325
+ `// Auto-generated by AgenticMail setup \u2014 do not edit`,
1326
+ `const { readFileSync } = require('fs');`,
1327
+ `const { join } = require('path');`,
1328
+ `// Load .env`,
1329
+ `try {`,
1330
+ ` const envFile = join(__dirname, '.env');`,
1331
+ ` const lines = readFileSync(envFile, 'utf8').split('\\n');`,
1332
+ ` for (const line of lines) {`,
1333
+ ` const m = line.match(/^([A-Z_]+)=(.*)$/);`,
1334
+ ` if (m && !process.env[m[1]]) process.env[m[1]] = m[2];`,
1335
+ ` }`,
1336
+ `} catch {}`,
1337
+ `// Run via npx (shell:true handles .cmd on Windows)`,
1338
+ `const { spawnSync } = require('child_process');`,
1339
+ `const r = spawnSync('npx', ['@agenticmail/enterprise', 'start'], {`,
1340
+ ` stdio: 'inherit', env: process.env, shell: true`,
1341
+ `});`,
1342
+ `process.exit(r.status || 0);`
1343
+ ].join("\n"));
1344
+ const cfScript = join2(amDir, "cloudflared.cjs");
1345
+ writeFileSync2(cfScript, [
1346
+ `// Auto-generated by AgenticMail setup \u2014 do not edit`,
1347
+ `const { spawnSync } = require('child_process');`,
1348
+ `const r = spawnSync(${JSON.stringify(cfPath)}, process.argv.slice(2), {`,
1349
+ ` stdio: 'inherit'`,
1350
+ `});`,
1351
+ `process.exit(r.status || 0);`
1352
+ ].join("\n"));
1353
+ execSync2(`pm2 start "${cfScript}" --name cloudflared -- tunnel --no-autoupdate run --token ${cloud.tunnelToken}`, { stdio: "pipe", timeout: 15e3 });
1354
+ const envLines = [
1355
+ `PORT=${cloud.port || 8080}`,
1356
+ `DATABASE_URL=${database.connectionString || ""}`,
1357
+ `JWT_SECRET=${jwtSecret}`,
1358
+ `AGENTICMAIL_VAULT_KEY=${vaultKey}`,
1359
+ `AGENTICMAIL_DOMAIN=${cloud.fqdn}`
1360
+ ];
1361
+ const envFile = join2(amDir, ".env");
1362
+ try {
1363
+ const existing = readFileSync2(envFile, "utf8");
1364
+ for (const line of envLines) {
1365
+ const key = line.split("=")[0];
1366
+ if (!existing.includes(`${key}=`)) {
1367
+ writeFileSync2(envFile, existing.trimEnd() + "\n" + line + "\n");
1312
1368
  }
1313
1369
  }
1370
+ } catch {
1314
1371
  }
1315
- execSync2(`pm2 start "${npxCmd}" --name enterprise --interpreter none -- @agenticmail/enterprise start`, {
1372
+ execSync2(`pm2 start "${startScript}" --name enterprise`, {
1316
1373
  stdio: "pipe",
1317
- timeout: 15e3,
1374
+ timeout: 3e4,
1318
1375
  env: {
1319
1376
  ...process.env,
1320
1377
  PORT: String(cloud.port || 8080),
@@ -1324,7 +1381,7 @@ async function deploy(config, db, jwtSecret, vaultKey, spinner, chalk) {
1324
1381
  AGENTICMAIL_DOMAIN: cloud.fqdn
1325
1382
  }
1326
1383
  });
1327
- await new Promise((r) => setTimeout(r, 3e3));
1384
+ await new Promise((r) => setTimeout(r, 5e3));
1328
1385
  const jlist = execSync2("pm2 jlist", { encoding: "utf8", timeout: 1e4 });
1329
1386
  const procs = JSON.parse(jlist);
1330
1387
  const cfOnline = procs.find((p) => p.name === "cloudflared")?.pm2_env?.status === "online";
@@ -1348,18 +1405,18 @@ async function deploy(config, db, jwtSecret, vaultKey, spinner, chalk) {
1348
1405
  } catch (e) {
1349
1406
  spinner.warn(`PM2 setup failed: ${e.message}`);
1350
1407
  console.log(chalk.dim(" Starting processes directly instead...\n"));
1351
- let cfPath = "";
1408
+ let fallbackCfPath = "";
1352
1409
  try {
1353
1410
  const whichBin = process.platform === "win32" ? "where" : "which";
1354
- cfPath = execSync2(`${whichBin} cloudflared`, { encoding: "utf8", timeout: 5e3 }).trim().split("\n")[0].trim();
1411
+ fallbackCfPath = execSync2(`${whichBin} cloudflared`, { encoding: "utf8", timeout: 5e3 }).trim().split("\n")[0].trim();
1355
1412
  } catch {
1356
1413
  }
1357
- if (!cfPath && process.platform === "win32") {
1414
+ if (!fallbackCfPath && process.platform === "win32") {
1358
1415
  const localAppData = process.env.LOCALAPPDATA || `${process.env.USERPROFILE}\\AppData\\Local`;
1359
1416
  const candidate = `${localAppData}\\cloudflared\\cloudflared.exe`;
1360
1417
  try {
1361
- statSync(candidate);
1362
- cfPath = candidate;
1418
+ statSync2(candidate);
1419
+ fallbackCfPath = candidate;
1363
1420
  } catch {
1364
1421
  }
1365
1422
  }
@@ -1371,36 +1428,23 @@ async function deploy(config, db, jwtSecret, vaultKey, spinner, chalk) {
1371
1428
  AGENTICMAIL_VAULT_KEY: vaultKey,
1372
1429
  AGENTICMAIL_DOMAIN: cloud.fqdn
1373
1430
  };
1374
- if (cfPath) {
1375
- const cfProc = spawn(cfPath, ["tunnel", "--no-autoupdate", "run", "--token", cloud.tunnelToken], {
1431
+ if (fallbackCfPath) {
1432
+ const cfProc = spawn(fallbackCfPath, ["tunnel", "--no-autoupdate", "run", "--token", cloud.tunnelToken], {
1376
1433
  detached: true,
1377
1434
  stdio: "ignore",
1378
1435
  env: process.env
1379
1436
  });
1380
1437
  cfProc.unref();
1381
1438
  }
1382
- let npxCmd = "npx";
1383
- if (process.platform === "win32") {
1384
- for (const candidate of [
1385
- join2(process.env.APPDATA || "", "npm", "npx.cmd"),
1386
- join2(process.env.ProgramFiles || "", "nodejs", "npx.cmd")
1387
- ]) {
1388
- try {
1389
- statSync(candidate);
1390
- npxCmd = candidate;
1391
- break;
1392
- } catch {
1393
- }
1394
- }
1395
- }
1396
- const entProc = spawn(npxCmd, ["@agenticmail/enterprise", "start"], {
1439
+ const entProc = spawn("npx", ["@agenticmail/enterprise", "start"], {
1397
1440
  detached: true,
1398
1441
  stdio: "ignore",
1399
1442
  env: serverEnv,
1400
- shell: process.platform === "win32"
1443
+ shell: true
1444
+ // Required on Windows for npx
1401
1445
  });
1402
1446
  entProc.unref();
1403
- await new Promise((r) => setTimeout(r, 5e3));
1447
+ await new Promise((r) => setTimeout(r, 8e3));
1404
1448
  spinner.succeed(`Live at https://${cloud.fqdn}`);
1405
1449
  console.log(chalk.yellow(" Note: Processes running in background. They will stop when you close this terminal."));
1406
1450
  console.log(chalk.dim(" For persistence, install PM2: npm install -g pm2"));
@@ -1491,7 +1535,7 @@ async function deploy(config, db, jwtSecret, vaultKey, spinner, chalk) {
1491
1535
  return {};
1492
1536
  }
1493
1537
  spinner.start("Starting local server...");
1494
- const { createServer } = await import("./server-ZFVGQJUL.js");
1538
+ const { createServer } = await import("./server-EJBLWFHI.js");
1495
1539
  const server = createServer({ port: 3e3, db, jwtSecret });
1496
1540
  const handle = await server.start();
1497
1541
  spinner.succeed("Server running");
@@ -418,7 +418,7 @@ async function runCloudRecover(args, inquirer, chalk, ora) {
418
418
  const { execSync } = await import("child_process");
419
419
  const { platform, arch } = await import("os");
420
420
  try {
421
- execSync("which cloudflared", { timeout: 3e3 });
421
+ execSync(process.platform === "win32" ? "where cloudflared" : "which cloudflared", { timeout: 3e3 });
422
422
  console.log(chalk.green(" cloudflared already installed"));
423
423
  } catch {
424
424
  const spinner2 = ora("Installing cloudflared...").start();
@@ -94,7 +94,7 @@ async function runServe(_args) {
94
94
  process.exit(1);
95
95
  }
96
96
  const { createAdapter, smartDbConfig } = await import("./factory-RTZU2K54.js");
97
- const { createServer } = await import("./server-ZFVGQJUL.js");
97
+ const { createServer } = await import("./server-EJBLWFHI.js");
98
98
  const db = await createAdapter(smartDbConfig(DATABASE_URL));
99
99
  await db.migrate();
100
100
  const server = createServer({
@@ -128,7 +128,7 @@ async function runServe(_args) {
128
128
  try {
129
129
  const { execSync, spawn } = await import("child_process");
130
130
  try {
131
- execSync("which cloudflared", { timeout: 3e3 });
131
+ execSync(process.platform === "win32" ? "where cloudflared" : "which cloudflared", { timeout: 3e3 });
132
132
  } catch {
133
133
  console.log("[startup] cloudflared not found \u2014 skipping tunnel auto-start");
134
134
  console.log("[startup] Install cloudflared to enable tunnel: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/");
package/dist/cli.js CHANGED
@@ -14,7 +14,7 @@ switch (command) {
14
14
  import("./cli-submit-skill-SNGAHVB7.js").then((m) => m.runSubmitSkill(args.slice(1))).catch(fatal);
15
15
  break;
16
16
  case "recover":
17
- import("./cli-recover-K7A4IIQY.js").then((m) => m.runRecover(args.slice(1))).catch(fatal);
17
+ import("./cli-recover-CO2RNTTL.js").then((m) => m.runRecover(args.slice(1))).catch(fatal);
18
18
  break;
19
19
  case "verify-domain":
20
20
  import("./cli-verify-7EMGBE46.js").then((m) => m.runVerifyDomain(args.slice(1))).catch(fatal);
@@ -57,14 +57,14 @@ Skill Development:
57
57
  break;
58
58
  case "serve":
59
59
  case "start":
60
- import("./cli-serve-DUUELMXK.js").then((m) => m.runServe(args.slice(1))).catch(fatal);
60
+ import("./cli-serve-KE4WNPMF.js").then((m) => m.runServe(args.slice(1))).catch(fatal);
61
61
  break;
62
62
  case "agent":
63
63
  import("./cli-agent-35EZUQ4N.js").then((m) => m.runAgent(args.slice(1))).catch(fatal);
64
64
  break;
65
65
  case "setup":
66
66
  default:
67
- import("./setup-4AS2ASES.js").then((m) => m.runSetupWizard()).catch(fatal);
67
+ import("./setup-IXC3WPV2.js").then((m) => m.runSetupWizard()).catch(fatal);
68
68
  break;
69
69
  }
70
70
  function fatal(err) {
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  provision,
15
15
  runSetupWizard
16
- } from "./chunk-AA6OVVQD.js";
16
+ } from "./chunk-QJKE4CP4.js";
17
17
  import {
18
18
  AgentRuntime,
19
19
  EmailChannel,
@@ -42,7 +42,7 @@ import {
42
42
  requireRole,
43
43
  securityHeaders,
44
44
  validate
45
- } from "./chunk-URC3SFYD.js";
45
+ } from "./chunk-47GC5I25.js";
46
46
  import "./chunk-DJBCRQTD.js";
47
47
  import {
48
48
  PROVIDER_REGISTRY,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-URC3SFYD.js";
3
+ } from "./chunk-47GC5I25.js";
4
4
  import "./chunk-DJBCRQTD.js";
5
5
  import "./chunk-UF3ZJMJO.js";
6
6
  import "./chunk-JDBIUPHF.js";
@@ -6,7 +6,7 @@ import {
6
6
  promptRegistration,
7
7
  provision,
8
8
  runSetupWizard
9
- } from "./chunk-2DE62O56.js";
9
+ } from "./chunk-QJKE4CP4.js";
10
10
  import "./chunk-Z3I6GNTS.js";
11
11
  import "./chunk-KFQGP6VL.js";
12
12
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticmail/enterprise",
3
- "version": "0.5.344",
3
+ "version": "0.5.346",
4
4
  "description": "AgenticMail Enterprise — cloud-hosted AI agent identity, email, auth & compliance for organizations",
5
5
  "type": "module",
6
6
  "bin": {