ente-cli 0.4.59 → 0.4.60
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 +16 -4
- package/dist/SKILL.md +15 -3
- package/dist/cli.mjs +22 -2
- package/dist/cli.mjs.map +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -114,7 +114,7 @@ ente notification send --subject "Weekly brief" --text "Your brief is ready." --
|
|
|
114
114
|
ente agent config show
|
|
115
115
|
ente agent threads
|
|
116
116
|
ente agent mail threads --unread
|
|
117
|
-
ente agent mail send --to person@example.net --subject "Update" --text "Plain fallback" --attachment ./handoff.md --html "<p><strong>Update</strong></p>" --idempotency-key agent-update-2026-09-01
|
|
117
|
+
ente agent mail send --to person@example.net --cc owner@example.net --subject "Update" --text "Plain fallback" --attachment ./handoff.md --html "<p><strong>Update</strong></p>" --idempotency-key agent-update-2026-09-01
|
|
118
118
|
ente tasks
|
|
119
119
|
ente guide # concepts; `ente guide <topic>`: entities, tasks, activities, search, patterns, limits
|
|
120
120
|
```
|
|
@@ -173,8 +173,8 @@ ente agent schedules configure --file ./schedules.json
|
|
|
173
173
|
ente agent mail address
|
|
174
174
|
ente agent mail threads --unread --limit 20
|
|
175
175
|
ente agent mail show <thread-id>
|
|
176
|
-
ente agent mail send --to person@example.net --subject "Update" --text "Plain fallback" --html "<p>Rich update</p>" --attachment ./reference.pdf --idempotency-key update-2026-09-01
|
|
177
|
-
ente agent mail reply <thread-id> --message <message-id> --text-file ./reply.txt --html-file ./reply.html --attachment ./handoff.docx --idempotency-key reply-2026-09-01
|
|
176
|
+
ente agent mail send --to person@example.net --cc owner@example.net --subject "Update" --text "Plain fallback" --html "<p>Rich update</p>" --attachment ./reference.pdf --idempotency-key update-2026-09-01
|
|
177
|
+
ente agent mail reply <thread-id> --message <message-id> --reply-all --text-file ./reply.txt --html-file ./reply.html --attachment ./handoff.docx --idempotency-key reply-2026-09-01
|
|
178
178
|
ente agent mail mark <thread-id> --state-version 4 --handled
|
|
179
179
|
```
|
|
180
180
|
|
|
@@ -192,6 +192,18 @@ deleted:
|
|
|
192
192
|
]
|
|
193
193
|
```
|
|
194
194
|
|
|
195
|
+
Send and reply accept repeatable `--cc ADDRESS`, up to 24 CC addresses and 25
|
|
196
|
+
recipients total. Ente normalizes and deduplicates addresses and checks every
|
|
197
|
+
recipient against the owner's sending policy. Add a person only when the owner
|
|
198
|
+
has authorized that conversation and its content for them.
|
|
199
|
+
|
|
200
|
+
Replies default to the exact inbound sender. `--reply-all` resumes recipients
|
|
201
|
+
from prior outbound mail in the same thread; it never copies inbound To, CC, or
|
|
202
|
+
Bcc headers. On a new inbound thread, use explicit `--cc` to add an authorized
|
|
203
|
+
person. All resumed recipients are checked again, so a removed sending grant
|
|
204
|
+
blocks the reply. Keep CC and reply-all choices unchanged when retrying an
|
|
205
|
+
ambiguous send with the same idempotency key.
|
|
206
|
+
|
|
195
207
|
Send and reply support repeatable `--inline-image CONTENT_ID=PATH` alongside
|
|
196
208
|
`--attachment PATH`. Supply HTML containing `<img src="cid:readiness">` and
|
|
197
209
|
`--inline-image readiness=./readiness.png`. The CLI embeds local file bytes in
|
|
@@ -211,7 +223,7 @@ For example:
|
|
|
211
223
|
|
|
212
224
|
```bash
|
|
213
225
|
ente agent mail send --to owner@example.net --subject "Readiness" --text-file ./report.txt --html-file ./report.html --inline-image readiness=./readiness.png --idempotency-key readiness-report-v1
|
|
214
|
-
ente agent mail reply <thread-id> --message <message-id> --text-file ./report.txt --html-file ./report.html --inline-image readiness=./readiness.png --attachment ./notes.txt --idempotency-key readiness-reply-v1
|
|
226
|
+
ente agent mail reply <thread-id> --message <message-id> --reply-all --text-file ./report.txt --html-file ./report.html --inline-image readiness=./readiness.png --attachment ./notes.txt --idempotency-key readiness-reply-v1
|
|
215
227
|
```
|
|
216
228
|
|
|
217
229
|
Retries must keep filenames, MIME types, Content-IDs, file order, and exact file
|
package/dist/SKILL.md
CHANGED
|
@@ -184,8 +184,8 @@ ente agent schedules configure --file ./schedules.json [--json]
|
|
|
184
184
|
ente agent mail address [--profile <name>] [--json]
|
|
185
185
|
ente agent mail threads [--profile <name>] [--unread] [--needs-reply] [--limit 20] [--cursor <cursor>] [--json]
|
|
186
186
|
ente agent mail show <thread-id> [--cursor <cursor>] [--json]
|
|
187
|
-
ente agent mail send --to person@example.net --subject "Update" --text "Plain fallback" [--html "<p>Rich update</p>" | --html-file ./message.html] [--attachment ./reference.pdf] [--idempotency-key <stable-key>] [--json]
|
|
188
|
-
ente agent mail reply <thread-id> --message <message-id> (--text "Reply" | --text-file ./reply.txt) [--html "<p>Reply</p>" | --html-file ./reply.html] [--attachment ./handoff.docx] [--idempotency-key <stable-key>] [--json]
|
|
187
|
+
ente agent mail send --to person@example.net --cc owner@example.net --subject "Update" --text "Plain fallback" [--html "<p>Rich update</p>" | --html-file ./message.html] [--attachment ./reference.pdf] [--idempotency-key <stable-key>] [--json]
|
|
188
|
+
ente agent mail reply <thread-id> --message <message-id> --reply-all (--text "Reply" | --text-file ./reply.txt) [--html "<p>Reply</p>" | --html-file ./reply.html] [--attachment ./handoff.docx] [--idempotency-key <stable-key>] [--json]
|
|
189
189
|
ente agent mail mark <thread-id> --state-version <version> (--handled | --open | --needs-reply | --read | --unread) [--json]
|
|
190
190
|
```
|
|
191
191
|
|
|
@@ -200,6 +200,18 @@ not work instructions or scheduler settings for the external operator. The key
|
|
|
200
200
|
cannot select a different agent, mailbox, or sender. All authenticated commands
|
|
201
201
|
accept optional `--profile <name>`; use `ENTE_PROFILE` only when a launcher must
|
|
202
202
|
select one of several stored credentials.
|
|
203
|
+
Send and reply accept repeatable `--cc ADDRESS`, up to 24 CC addresses and 25
|
|
204
|
+
recipients total. Ente normalizes and deduplicates addresses and checks every
|
|
205
|
+
recipient against the owner's sending policy. Add a person only when the owner
|
|
206
|
+
has authorized that conversation and its content for them.
|
|
207
|
+
|
|
208
|
+
Replies default to the exact inbound sender. `--reply-all` resumes recipients
|
|
209
|
+
from prior outbound mail in the same thread; it never copies inbound To, CC, or
|
|
210
|
+
Bcc headers. On a new inbound thread, use explicit `--cc` to add an authorized
|
|
211
|
+
person. All resumed recipients are checked again, so a removed sending grant
|
|
212
|
+
blocks the reply. Keep CC and reply-all choices unchanged when retrying an
|
|
213
|
+
ambiguous send with the same idempotency key.
|
|
214
|
+
|
|
203
215
|
Send and reply support repeatable `--inline-image CONTENT_ID=PATH` alongside
|
|
204
216
|
`--attachment PATH`. Supply HTML containing `<img src="cid:readiness">` and
|
|
205
217
|
`--inline-image readiness=./readiness.png`. The CLI embeds local file bytes in
|
|
@@ -219,7 +231,7 @@ For example:
|
|
|
219
231
|
|
|
220
232
|
```bash
|
|
221
233
|
ente agent mail send --to owner@example.net --subject "Readiness" --text-file ./report.txt --html-file ./report.html --inline-image readiness=./readiness.png --idempotency-key readiness-report-v1
|
|
222
|
-
ente agent mail reply <thread-id> --message <message-id> --text-file ./report.txt --html-file ./report.html --inline-image readiness=./readiness.png --attachment ./notes.txt --idempotency-key readiness-reply-v1
|
|
234
|
+
ente agent mail reply <thread-id> --message <message-id> --reply-all --text-file ./report.txt --html-file ./report.html --inline-image readiness=./readiness.png --attachment ./notes.txt --idempotency-key readiness-reply-v1
|
|
223
235
|
```
|
|
224
236
|
|
|
225
237
|
Retries must keep filenames, MIME types, Content-IDs, file order, and exact file
|
package/dist/cli.mjs
CHANGED
|
@@ -3711,7 +3711,7 @@ function warn(opts, latest) {
|
|
|
3711
3711
|
}
|
|
3712
3712
|
|
|
3713
3713
|
// ente/version.ts
|
|
3714
|
-
var VERSION = "0.4.
|
|
3714
|
+
var VERSION = "0.4.60";
|
|
3715
3715
|
|
|
3716
3716
|
// ente/branding.ts
|
|
3717
3717
|
var NPM_REGISTRY = "https://registry.npmjs.org";
|
|
@@ -16282,6 +16282,7 @@ import { readFileSync as readFileSync14 } from "node:fs";
|
|
|
16282
16282
|
var AGENT_MAIL_CLI_SURFACE = {
|
|
16283
16283
|
sendInputProperties: {
|
|
16284
16284
|
to: { flags: ["--to"] },
|
|
16285
|
+
cc: { flags: ["--cc"], maxItems: 24 },
|
|
16285
16286
|
subject: { flags: ["--subject"] },
|
|
16286
16287
|
text: { flags: ["--text", "--text-file"] },
|
|
16287
16288
|
html: { flags: ["--html", "--html-file"] },
|
|
@@ -16291,6 +16292,8 @@ var AGENT_MAIL_CLI_SURFACE = {
|
|
|
16291
16292
|
replyInputProperties: {
|
|
16292
16293
|
threadId: { source: "positional argument" },
|
|
16293
16294
|
replyToMessageId: { flags: ["--message"] },
|
|
16295
|
+
cc: { flags: ["--cc"], maxItems: 24 },
|
|
16296
|
+
replyAll: { flags: ["--reply-all"], default: false },
|
|
16294
16297
|
text: { flags: ["--text", "--text-file"] },
|
|
16295
16298
|
html: { flags: ["--html", "--html-file"] },
|
|
16296
16299
|
attachments: { flags: ["--attachment", "--inline-image"] },
|
|
@@ -16351,6 +16354,15 @@ function agentMailInlineReferenceError(html, attachments) {
|
|
|
16351
16354
|
}
|
|
16352
16355
|
|
|
16353
16356
|
// ente/commands/agentMail.ts
|
|
16357
|
+
function normalizeAgentMailCc(value = []) {
|
|
16358
|
+
if (value.length > AGENT_MAIL_CLI_SURFACE.sendInputProperties.cc.maxItems) {
|
|
16359
|
+
throw new Error("agent mail: --cc accepts at most 24 addresses.");
|
|
16360
|
+
}
|
|
16361
|
+
if (!value.every((item) => item.trim().length > 0 && item.length <= 320 && !/[\r\n]/u.test(item))) {
|
|
16362
|
+
throw new Error("agent mail: each --cc must be one single-line email address.");
|
|
16363
|
+
}
|
|
16364
|
+
return value.length ? value.map((item) => item.trim()) : void 0;
|
|
16365
|
+
}
|
|
16354
16366
|
function renderAgentMailOperation(noun, response) {
|
|
16355
16367
|
return `${response.data.deliveryStatus} ${noun} ${response.data.messageId} in thread ${response.data.threadId}.`;
|
|
16356
16368
|
}
|
|
@@ -16447,7 +16459,9 @@ function renderMessage2(message) {
|
|
|
16447
16459
|
const date = message.receivedAt ?? message.sentAt;
|
|
16448
16460
|
const body = message.text ? `
|
|
16449
16461
|
${message.text}` : "";
|
|
16450
|
-
|
|
16462
|
+
const cc = message.cc?.length ? `
|
|
16463
|
+
CC: ${message.cc.join(", ")}` : "";
|
|
16464
|
+
return `${direction} ${fmtTime2(date)} ${message.from ?? "unknown"} [${message.deliveryStatus}] ${message.messageId}${cc}${body}`;
|
|
16451
16465
|
}
|
|
16452
16466
|
var AgentMailAddress = class extends ClientCommand {
|
|
16453
16467
|
static paths = [["agent", "mail", "address"]];
|
|
@@ -16539,10 +16553,12 @@ var AgentMailSend = class extends AgentMailBodyCommand {
|
|
|
16539
16553
|
]]
|
|
16540
16554
|
});
|
|
16541
16555
|
to = options_exports.String("--to", { required: true });
|
|
16556
|
+
cc = options_exports.Array("--cc", { description: "Copy an owner-allowed address (repeatable; maximum 24)" });
|
|
16542
16557
|
subject = options_exports.String("--subject", { required: true });
|
|
16543
16558
|
async run() {
|
|
16544
16559
|
const response = await this.client().sendAgentMail({
|
|
16545
16560
|
to: this.to,
|
|
16561
|
+
cc: normalizeAgentMailCc(this.cc),
|
|
16546
16562
|
subject: this.subject,
|
|
16547
16563
|
...this.bodies()
|
|
16548
16564
|
}, normalizeAgentMailIdempotencyKey(this.key));
|
|
@@ -16561,10 +16577,14 @@ var AgentMailReply = class extends AgentMailBodyCommand {
|
|
|
16561
16577
|
});
|
|
16562
16578
|
threadId = options_exports.String();
|
|
16563
16579
|
messageId = options_exports.String("--message", { required: true });
|
|
16580
|
+
cc = options_exports.Array("--cc", { description: "Copy an owner-allowed address (repeatable; maximum 24)" });
|
|
16581
|
+
replyAll = options_exports.Boolean("--reply-all", false, { description: "Resume only prior outbound recipients in this thread; never copy inbound headers" });
|
|
16564
16582
|
async run() {
|
|
16565
16583
|
const response = await this.client().replyAgentMail({
|
|
16566
16584
|
threadId: this.threadId,
|
|
16567
16585
|
replyToMessageId: this.messageId,
|
|
16586
|
+
cc: normalizeAgentMailCc(this.cc),
|
|
16587
|
+
replyAll: this.replyAll,
|
|
16568
16588
|
...this.bodies()
|
|
16569
16589
|
}, normalizeAgentMailIdempotencyKey(this.key));
|
|
16570
16590
|
this.emitText(response, () => renderAgentMailOperation("reply", response));
|