agenticmail 0.4.0 → 0.5.0
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.
- package/dist/cli.js +57 -9
- package/package.json +3 -3
package/dist/cli.js
CHANGED
|
@@ -4215,6 +4215,8 @@ var c2 = {
|
|
|
4215
4215
|
yellow: (s) => `\x1B[33m${s}\x1B[0m`,
|
|
4216
4216
|
cyan: (s) => `\x1B[36m${s}\x1B[0m`,
|
|
4217
4217
|
magenta: (s) => `\x1B[35m${s}\x1B[0m`,
|
|
4218
|
+
pink: (s) => `\x1B[38;5;205m${s}\x1B[0m`,
|
|
4219
|
+
pinkBg: (s) => `\x1B[48;5;205m\x1B[97m${s}\x1B[0m`,
|
|
4218
4220
|
dim: (s) => `\x1B[90m${s}\x1B[0m`,
|
|
4219
4221
|
bold: (s) => `\x1B[1m${s}\x1B[0m`,
|
|
4220
4222
|
bgGreen: (s) => `\x1B[42m\x1B[30m${s}\x1B[0m`,
|
|
@@ -4299,6 +4301,8 @@ var Spinner = class {
|
|
|
4299
4301
|
msgChangeCounter = 0;
|
|
4300
4302
|
category;
|
|
4301
4303
|
currentMsg;
|
|
4304
|
+
progressPct = -1;
|
|
4305
|
+
// -1 = no progress bar
|
|
4302
4306
|
constructor(category, initialMsg) {
|
|
4303
4307
|
this.category = category;
|
|
4304
4308
|
const msgs = LOADING_MESSAGES[category] ?? LOADING_MESSAGES.general;
|
|
@@ -4308,13 +4312,23 @@ var Spinner = class {
|
|
|
4308
4312
|
this.frameIdx = 0;
|
|
4309
4313
|
this.msgIdx = 0;
|
|
4310
4314
|
this.msgChangeCounter = 0;
|
|
4315
|
+
this.progressPct = -1;
|
|
4311
4316
|
const msgs = LOADING_MESSAGES[this.category] ?? LOADING_MESSAGES.general;
|
|
4312
4317
|
this.interval = setInterval(() => {
|
|
4313
4318
|
const frame = SPINNER_FRAMES[this.frameIdx % SPINNER_FRAMES.length];
|
|
4314
|
-
|
|
4319
|
+
if (this.progressPct >= 0) {
|
|
4320
|
+
const barWidth = 20;
|
|
4321
|
+
const filled = Math.round(this.progressPct / 100 * barWidth);
|
|
4322
|
+
const empty = barWidth - filled;
|
|
4323
|
+
const bar = c2.pink("\u2588".repeat(filled)) + c2.dim("\u2591".repeat(empty));
|
|
4324
|
+
const pctStr = c2.pink(`${this.progressPct}%`);
|
|
4325
|
+
process.stdout.write(`\r ${c2.pink(frame)} ${bar} ${pctStr} ${c2.dim(this.currentMsg)}\x1B[K`);
|
|
4326
|
+
} else {
|
|
4327
|
+
process.stdout.write(`\r ${c2.cyan(frame)} ${c2.yellow(this.currentMsg)}\x1B[K`);
|
|
4328
|
+
}
|
|
4315
4329
|
this.frameIdx++;
|
|
4316
4330
|
this.msgChangeCounter++;
|
|
4317
|
-
if (this.msgChangeCounter >= 30) {
|
|
4331
|
+
if (this.msgChangeCounter >= 30 && this.progressPct < 0) {
|
|
4318
4332
|
this.msgChangeCounter = 0;
|
|
4319
4333
|
this.msgIdx = (this.msgIdx + 1) % msgs.length;
|
|
4320
4334
|
this.currentMsg = msgs[this.msgIdx];
|
|
@@ -4322,7 +4336,13 @@ var Spinner = class {
|
|
|
4322
4336
|
}, 100);
|
|
4323
4337
|
}
|
|
4324
4338
|
update(msg) {
|
|
4325
|
-
|
|
4339
|
+
const match = msg.match(/^__progress__:(\d+):(.*)$/);
|
|
4340
|
+
if (match) {
|
|
4341
|
+
this.progressPct = Math.min(100, parseInt(match[1], 10));
|
|
4342
|
+
this.currentMsg = match[2];
|
|
4343
|
+
} else {
|
|
4344
|
+
this.currentMsg = msg;
|
|
4345
|
+
}
|
|
4326
4346
|
this.msgChangeCounter = 0;
|
|
4327
4347
|
}
|
|
4328
4348
|
succeed(msg) {
|
|
@@ -4542,14 +4562,41 @@ async function cmdSetup() {
|
|
|
4542
4562
|
{
|
|
4543
4563
|
const spinner = new Spinner("docker");
|
|
4544
4564
|
spinner.start();
|
|
4565
|
+
const dockerSetup = new SetupManager((msg) => spinner.update(msg));
|
|
4545
4566
|
try {
|
|
4546
|
-
await
|
|
4567
|
+
await dockerSetup.ensureDocker();
|
|
4547
4568
|
spinner.succeed(`${c2.bold("Docker")} \u2014 engine running`);
|
|
4548
4569
|
} catch (err) {
|
|
4549
|
-
|
|
4550
|
-
|
|
4551
|
-
|
|
4552
|
-
|
|
4570
|
+
const msg = err.message;
|
|
4571
|
+
if (msg === "DOCKER_MANUAL_START") {
|
|
4572
|
+
spinner.fail(`Docker installed but couldn't start automatically`);
|
|
4573
|
+
log2("");
|
|
4574
|
+
log2(` ${c2.pink(c2.bold("Don't worry! Here's how to fix this:"))}`);
|
|
4575
|
+
log2("");
|
|
4576
|
+
log2(` ${c2.pink("Step 1:")} Open a ${c2.bold("new terminal window")}`);
|
|
4577
|
+
log2(` ${c2.dim("(Command + T on Mac, or open Terminal from your dock)")}`);
|
|
4578
|
+
log2("");
|
|
4579
|
+
log2(` ${c2.pink("Step 2:")} Run this command:`);
|
|
4580
|
+
log2(` ${c2.cyan("open -a Docker")}`);
|
|
4581
|
+
log2("");
|
|
4582
|
+
log2(` ${c2.pink("Step 3:")} Wait for Docker Desktop to fully load`);
|
|
4583
|
+
log2(` ${c2.dim("You'll see a whale icon in your menu bar (top of screen).")}`);
|
|
4584
|
+
log2(` ${c2.dim("Wait until it stops animating \u2014 that means it's ready.")}`);
|
|
4585
|
+
log2("");
|
|
4586
|
+
log2(` ${c2.pink("Step 4:")} Close that terminal window`);
|
|
4587
|
+
log2(` ${c2.dim("Just close the window normally (Command + W). Don't press Ctrl+C.")}`);
|
|
4588
|
+
log2("");
|
|
4589
|
+
log2(` ${c2.pink("Step 5:")} Come back here and run:`);
|
|
4590
|
+
log2(` ${c2.green("npx agenticmail@latest")}`);
|
|
4591
|
+
log2("");
|
|
4592
|
+
log2(` ${c2.dim("That's it! Docker only needs this manual start the first time.")}`);
|
|
4593
|
+
log2(` ${c2.dim("After that, it starts automatically.")}`);
|
|
4594
|
+
} else {
|
|
4595
|
+
spinner.fail(`Couldn't start Docker: ${msg}`);
|
|
4596
|
+
log2("");
|
|
4597
|
+
log2(` ${c2.yellow("Tip:")} Install Docker manually from ${c2.cyan("https://docker.com/get-docker")}`);
|
|
4598
|
+
log2(` ${c2.dim("Then run")} ${c2.green("agenticmail setup")} ${c2.dim("again.")}`);
|
|
4599
|
+
}
|
|
4553
4600
|
process.exit(1);
|
|
4554
4601
|
}
|
|
4555
4602
|
await new Promise((r) => setTimeout(r, 300));
|
|
@@ -4558,8 +4605,9 @@ async function cmdSetup() {
|
|
|
4558
4605
|
if (!stalwart?.installed) {
|
|
4559
4606
|
const spinner = new Spinner("stalwart");
|
|
4560
4607
|
spinner.start();
|
|
4608
|
+
const stalwartSetup = new SetupManager((msg) => spinner.update(msg));
|
|
4561
4609
|
try {
|
|
4562
|
-
await
|
|
4610
|
+
await stalwartSetup.ensureStalwart();
|
|
4563
4611
|
spinner.succeed(`${c2.bold("Mail Server")} \u2014 up and running!`);
|
|
4564
4612
|
} catch (err) {
|
|
4565
4613
|
spinner.fail(`Couldn't start the mail server: ${err.message}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agenticmail",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Email infrastructure for AI agents — send and receive real email programmatically",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"prepublishOnly": "npm run build"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@agenticmail/api": "^0.
|
|
30
|
-
"@agenticmail/core": "^0.
|
|
29
|
+
"@agenticmail/api": "^0.5.0",
|
|
30
|
+
"@agenticmail/core": "^0.5.0",
|
|
31
31
|
"json5": "^2.2.3"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|