@agenticmail/cli 0.8.36 → 0.9.1
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/README.md +7 -1
- package/dist/public/js/message-view.js +16 -3
- package/dist/public/styles.css +22 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -23,7 +23,13 @@ It bundles a setup wizard, API server launcher, and a full interactive shell wit
|
|
|
23
23
|
>
|
|
24
24
|
> Zero prompts, ~2 minutes, fully autonomous. Then tell the user to restart Claude Code. Full agent-facing runbook — including verification, common failures, and "what if Node < 22" — is at [`AGENTS.md`](https://github.com/agenticmail/agenticmail/blob/main/AGENTS.md) in the repo (the [agents.md](https://agents.md) convention).
|
|
25
25
|
|
|
26
|
-
## ✨ What's new in 0.
|
|
26
|
+
## ✨ What's new in 0.9.0
|
|
27
|
+
|
|
28
|
+
- **🧠 Layered wake-context** — every wake gets a `## Thread context` block prepended to the prompt: facts from the dispatcher's ThreadCache (last 10 envelopes per thread) + your own AgentMemory (markdown you write at end-of-wake via the new `save_thread_memory` MCP tool). Re-reading the full thread on every wake is no longer required.
|
|
29
|
+
- **🎯 `wake` default = `To:` only** — the giant token saver. CC'd local agents accumulate context but don't wake unless explicitly named. `wake: 'all'` opts back into the pre-0.9.0 "wake everyone CC'd" behaviour. The wake-thrash failure mode (one agent producing 4 status reports for one logical handoff) is gone.
|
|
30
|
+
- **⏱ Wake coalescing** — back-to-back wakes on the same `(agent, thread)` inside 30 s collapse into ONE Agent turn that sees the burst as a batch. Wake budget charges once. Configurable via `wakeCoalesceMs`.
|
|
31
|
+
|
|
32
|
+
## ✨ Earlier — 0.8.31
|
|
27
33
|
|
|
28
34
|
- **⏱ Compact-and-continue** — workers run across multiple SDK turns when one turn isn't enough. On context overflow the dispatcher synthesises a breadcrumb checkpoint from the captured log, builds a "resuming after context reset / do NOT redo" continuation prompt, and loops (4-iter cap so cost is bounded).
|
|
29
35
|
- **📐 Typed task contracts** — `call_agent` / `POST /tasks/assign` accept an `outputSchema` (JSON Schema, draft-7 subset). The wake prompt renders the schema into the worker's instructions and `submit_result` validates against it; mismatches return 400 with a flat `schemaErrors: [{ path, message }]` list so the worker can retry with a corrected shape.
|
|
@@ -50,11 +50,22 @@ function renderMessage(msg) {
|
|
|
50
50
|
if (!view) return;
|
|
51
51
|
const fromAddr = msg.from?.[0]?.address ?? '?';
|
|
52
52
|
const fromName = msg.from?.[0]?.name || fromAddr;
|
|
53
|
-
const toStr = (msg.to ?? []).map(a => a.name ? `${a.name} <${a.address}>` : a.address).join(', ') || '?';
|
|
54
|
-
const ccStr = (msg.cc ?? []).map(a => a.address).join(', ');
|
|
55
53
|
const senderPseudo = { name: fromName }; // for avatar generation
|
|
56
54
|
const bodyText = msg.text ?? stripHtml(msg.html ?? '');
|
|
57
55
|
|
|
56
|
+
// Build separate To / Cc / Bcc lines so the user can actually
|
|
57
|
+
// tell who was on the action list vs CC'd for awareness. The
|
|
58
|
+
// previous renderer concatenated everything onto one "to" line.
|
|
59
|
+
const formatAddr = (a) => a?.name && a.name !== a.address
|
|
60
|
+
? `${a.name} <${a.address}>`
|
|
61
|
+
: (a?.address ?? '');
|
|
62
|
+
const renderAddrRow = (label, list, cls) => {
|
|
63
|
+
if (!Array.isArray(list) || list.length === 0) return '';
|
|
64
|
+
const rendered = list.map(formatAddr).filter(Boolean).map(escapeHtml).join(', ');
|
|
65
|
+
if (!rendered) return '';
|
|
66
|
+
return `<div class="message-recipient-row ${cls}"><span class="message-recipient-label">${label}</span><span class="message-recipient-list">${rendered}</span></div>`;
|
|
67
|
+
};
|
|
68
|
+
|
|
58
69
|
const attachmentsHtml = (msg.attachments ?? []).length > 0
|
|
59
70
|
? `<div class="message-attachments">${msg.attachments.map((a, i) =>
|
|
60
71
|
`<button class="message-attachment" data-att-index="${i}" data-att-filename="${escapeHtml(a.filename ?? 'attachment')}" title="Click to download">
|
|
@@ -75,7 +86,9 @@ function renderMessage(msg) {
|
|
|
75
86
|
<span class="name">${escapeHtml(fromName)}</span>
|
|
76
87
|
<span class="addr"><${escapeHtml(fromAddr)}></span>
|
|
77
88
|
</div>
|
|
78
|
-
|
|
89
|
+
${renderAddrRow('To', msg.to, 'message-to')}
|
|
90
|
+
${renderAddrRow('Cc', msg.cc, 'message-cc')}
|
|
91
|
+
${renderAddrRow('Bcc', msg.bcc, 'message-bcc')}
|
|
79
92
|
</div>
|
|
80
93
|
<div class="message-date">${escapeHtml(formatDateFull(msg.date))}</div>
|
|
81
94
|
</div>
|
package/dist/public/styles.css
CHANGED
|
@@ -583,7 +583,28 @@ mark.search-hl {
|
|
|
583
583
|
}
|
|
584
584
|
.message-from .name { font-weight: 500; }
|
|
585
585
|
.message-from .addr { color: var(--muted); margin-left: 4px; }
|
|
586
|
-
|
|
586
|
+
/* Recipient rows — one per field (To / Cc / Bcc). Renders only
|
|
587
|
+
when the field is non-empty. The label is a fixed-width tag
|
|
588
|
+
so the addresses align cleanly across the three rows. */
|
|
589
|
+
.message-recipient-row {
|
|
590
|
+
display: flex; gap: 6px;
|
|
591
|
+
font-size: 12px; color: var(--muted);
|
|
592
|
+
margin-top: 4px;
|
|
593
|
+
line-height: 1.5;
|
|
594
|
+
}
|
|
595
|
+
.message-recipient-label {
|
|
596
|
+
flex: 0 0 28px;
|
|
597
|
+
font-weight: 600;
|
|
598
|
+
color: var(--ink-soft);
|
|
599
|
+
text-transform: none;
|
|
600
|
+
}
|
|
601
|
+
.message-recipient-list {
|
|
602
|
+
flex: 1 1 auto;
|
|
603
|
+
min-width: 0;
|
|
604
|
+
word-break: break-word;
|
|
605
|
+
}
|
|
606
|
+
.message-cc .message-recipient-label,
|
|
607
|
+
.message-bcc .message-recipient-label { color: var(--muted); }
|
|
587
608
|
.message-date {
|
|
588
609
|
font-size: 12px; color: var(--muted);
|
|
589
610
|
white-space: nowrap;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agenticmail/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.1",
|
|
4
4
|
"description": "Email and SMS infrastructure for AI agents — the first platform to give agents real email addresses and phone numbers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -29,12 +29,12 @@
|
|
|
29
29
|
"prepublishOnly": "npm run build"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@agenticmail/api": "^0.
|
|
33
|
-
"@agenticmail/core": "^0.
|
|
32
|
+
"@agenticmail/api": "^0.9.1",
|
|
33
|
+
"@agenticmail/core": "^0.9.1",
|
|
34
34
|
"json5": "^2.2.3"
|
|
35
35
|
},
|
|
36
36
|
"optionalDependencies": {
|
|
37
|
-
"@agenticmail/claudecode": "^0.1
|
|
37
|
+
"@agenticmail/claudecode": "^0.2.1"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"tsup": "^8.4.0",
|