@wirecat/cli-memo 0.23.0 → 0.25.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.
Files changed (232) hide show
  1. package/README.md +24 -21
  2. package/dist/actions/actions.d.ts +1 -1
  3. package/dist/actions/actions.d.ts.map +1 -1
  4. package/dist/actions/command.d.ts.map +1 -1
  5. package/dist/actions/command.js +14 -15
  6. package/dist/actions/command.js.map +1 -1
  7. package/dist/agents/command.d.ts.map +1 -1
  8. package/dist/agents/command.js +3 -2
  9. package/dist/agents/command.js.map +1 -1
  10. package/dist/answers/command.d.ts +1 -1
  11. package/dist/answers/command.d.ts.map +1 -1
  12. package/dist/answers/command.js +8 -8
  13. package/dist/answers/command.js.map +1 -1
  14. package/dist/author.d.ts +11 -0
  15. package/dist/author.d.ts.map +1 -0
  16. package/dist/author.js +16 -0
  17. package/dist/author.js.map +1 -0
  18. package/dist/bin/memo.js +6 -4
  19. package/dist/bin/memo.js.map +1 -1
  20. package/dist/config.d.ts +15 -2
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +15 -2
  23. package/dist/config.js.map +1 -1
  24. package/dist/context/command.d.ts.map +1 -1
  25. package/dist/context/command.js +4 -4
  26. package/dist/context/command.js.map +1 -1
  27. package/dist/context/context.d.ts +3 -3
  28. package/dist/context/context.d.ts.map +1 -1
  29. package/dist/context/context.js +3 -3
  30. package/dist/context/context.js.map +1 -1
  31. package/dist/discovery/command.d.ts +2 -0
  32. package/dist/discovery/command.d.ts.map +1 -1
  33. package/dist/discovery/command.js +18 -10
  34. package/dist/discovery/command.js.map +1 -1
  35. package/dist/examples.d.ts +5 -0
  36. package/dist/examples.d.ts.map +1 -0
  37. package/dist/examples.js +135 -0
  38. package/dist/examples.js.map +1 -0
  39. package/dist/facts/command.d.ts.map +1 -1
  40. package/dist/facts/command.js +19 -18
  41. package/dist/facts/command.js.map +1 -1
  42. package/dist/install/postinstall.d.ts +7 -0
  43. package/dist/install/postinstall.d.ts.map +1 -0
  44. package/dist/install/postinstall.js +28 -0
  45. package/dist/install/postinstall.js.map +1 -0
  46. package/dist/knowledge/command.d.ts.map +1 -1
  47. package/dist/knowledge/command.js +107 -62
  48. package/dist/knowledge/command.js.map +1 -1
  49. package/dist/knowledge/key-documents.d.ts +29 -0
  50. package/dist/knowledge/key-documents.d.ts.map +1 -0
  51. package/dist/knowledge/key-documents.js +76 -0
  52. package/dist/knowledge/key-documents.js.map +1 -0
  53. package/dist/knowledge/meeting-projects-command.js +4 -4
  54. package/dist/knowledge/meeting-projects-command.js.map +1 -1
  55. package/dist/mail/accounts.d.ts +11 -0
  56. package/dist/mail/accounts.d.ts.map +1 -0
  57. package/dist/mail/accounts.js +26 -0
  58. package/dist/mail/accounts.js.map +1 -0
  59. package/dist/mail/command.d.ts +1 -1
  60. package/dist/mail/command.d.ts.map +1 -1
  61. package/dist/mail/command.js +132 -98
  62. package/dist/mail/command.js.map +1 -1
  63. package/dist/mail/gmail.d.ts +7 -2
  64. package/dist/mail/gmail.d.ts.map +1 -1
  65. package/dist/mail/gmail.js +76 -37
  66. package/dist/mail/gmail.js.map +1 -1
  67. package/dist/mail/headers.d.ts +17 -0
  68. package/dist/mail/headers.d.ts.map +1 -0
  69. package/dist/mail/headers.js +28 -0
  70. package/dist/mail/headers.js.map +1 -0
  71. package/dist/mail/himalaya.d.ts +3 -1
  72. package/dist/mail/himalaya.d.ts.map +1 -1
  73. package/dist/mail/himalaya.js +2 -2
  74. package/dist/mail/himalaya.js.map +1 -1
  75. package/dist/mail/import.d.ts +15 -6
  76. package/dist/mail/import.d.ts.map +1 -1
  77. package/dist/mail/import.js +130 -87
  78. package/dist/mail/import.js.map +1 -1
  79. package/dist/mail/mbox.d.ts +9 -0
  80. package/dist/mail/mbox.d.ts.map +1 -0
  81. package/dist/mail/mbox.js +218 -0
  82. package/dist/mail/mbox.js.map +1 -0
  83. package/dist/mail/messages-command.d.ts +4 -0
  84. package/dist/mail/messages-command.d.ts.map +1 -0
  85. package/dist/mail/messages-command.js +32 -0
  86. package/dist/mail/messages-command.js.map +1 -0
  87. package/dist/mail/parse.d.ts +2 -2
  88. package/dist/mail/parse.d.ts.map +1 -1
  89. package/dist/mail/parse.js +27 -63
  90. package/dist/mail/parse.js.map +1 -1
  91. package/dist/mail/probe.d.ts +31 -0
  92. package/dist/mail/probe.d.ts.map +1 -0
  93. package/dist/mail/probe.js +55 -0
  94. package/dist/mail/probe.js.map +1 -0
  95. package/dist/mail/rules.d.ts +18 -0
  96. package/dist/mail/rules.d.ts.map +1 -0
  97. package/dist/mail/rules.js +26 -0
  98. package/dist/mail/rules.js.map +1 -0
  99. package/dist/mail/source.d.ts +20 -0
  100. package/dist/mail/source.d.ts.map +1 -0
  101. package/dist/mail/source.js +99 -0
  102. package/dist/mail/source.js.map +1 -0
  103. package/dist/mcp/command.js +1 -1
  104. package/dist/mcp/command.js.map +1 -1
  105. package/dist/mcp/knowledge.js +4 -4
  106. package/dist/mcp/knowledge.js.map +1 -1
  107. package/dist/mcp/server.js +11 -11
  108. package/dist/mcp/server.js.map +1 -1
  109. package/dist/mcp/task-relations.d.ts +3 -3
  110. package/dist/mcp/task-relations.d.ts.map +1 -1
  111. package/dist/mcp/task-relations.js +17 -8
  112. package/dist/mcp/task-relations.js.map +1 -1
  113. package/dist/mcp/tool.d.ts +1 -1
  114. package/dist/mcp/tool.d.ts.map +1 -1
  115. package/dist/mcp/vocabulary.d.ts +2 -3
  116. package/dist/mcp/vocabulary.d.ts.map +1 -1
  117. package/dist/mcp/vocabulary.js +23 -18
  118. package/dist/mcp/vocabulary.js.map +1 -1
  119. package/dist/memories/command.d.ts +1 -0
  120. package/dist/memories/command.d.ts.map +1 -1
  121. package/dist/memories/command.js +23 -21
  122. package/dist/memories/command.js.map +1 -1
  123. package/dist/memories/memories.d.ts +1 -1
  124. package/dist/memories/memories.d.ts.map +1 -1
  125. package/dist/notes/about.d.ts +12 -3
  126. package/dist/notes/about.d.ts.map +1 -1
  127. package/dist/notes/about.js +35 -31
  128. package/dist/notes/about.js.map +1 -1
  129. package/dist/notes/bound.d.ts +4 -1
  130. package/dist/notes/bound.d.ts.map +1 -1
  131. package/dist/notes/bound.js +9 -1
  132. package/dist/notes/bound.js.map +1 -1
  133. package/dist/notes/command.d.ts.map +1 -1
  134. package/dist/notes/command.js +18 -61
  135. package/dist/notes/command.js.map +1 -1
  136. package/dist/notes/embed.d.ts +1 -1
  137. package/dist/notes/embed.d.ts.map +1 -1
  138. package/dist/notes/embed.js +1 -1
  139. package/dist/notes/embed.js.map +1 -1
  140. package/dist/notes/folders-command.d.ts.map +1 -1
  141. package/dist/notes/folders-command.js +13 -7
  142. package/dist/notes/folders-command.js.map +1 -1
  143. package/dist/notes/import.d.ts +2 -2
  144. package/dist/notes/import.d.ts.map +1 -1
  145. package/dist/notes/import.js +2 -2
  146. package/dist/notes/import.js.map +1 -1
  147. package/dist/notes/internal.d.ts +1 -1
  148. package/dist/notes/internal.d.ts.map +1 -1
  149. package/dist/notes/links.d.ts +1 -1
  150. package/dist/notes/links.d.ts.map +1 -1
  151. package/dist/notes/list.d.ts +22 -0
  152. package/dist/notes/list.d.ts.map +1 -0
  153. package/dist/notes/list.js +24 -0
  154. package/dist/notes/list.js.map +1 -0
  155. package/dist/notes/search.d.ts +3 -3
  156. package/dist/notes/search.d.ts.map +1 -1
  157. package/dist/notes/search.js +3 -3
  158. package/dist/notes/search.js.map +1 -1
  159. package/dist/options.d.ts +2 -0
  160. package/dist/options.d.ts.map +1 -1
  161. package/dist/options.js +2 -0
  162. package/dist/options.js.map +1 -1
  163. package/dist/people/command.js +3 -3
  164. package/dist/people/command.js.map +1 -1
  165. package/dist/people/identity.d.ts +1 -1
  166. package/dist/people/identity.d.ts.map +1 -1
  167. package/dist/people/identity.js +1 -1
  168. package/dist/people/identity.js.map +1 -1
  169. package/dist/people/notes-map.d.ts +1 -1
  170. package/dist/people/notes-map.d.ts.map +1 -1
  171. package/dist/people/subject.d.ts +1 -1
  172. package/dist/people/subject.d.ts.map +1 -1
  173. package/dist/people/subject.js +1 -1
  174. package/dist/people/subject.js.map +1 -1
  175. package/dist/program.d.ts +5 -0
  176. package/dist/program.d.ts.map +1 -1
  177. package/dist/program.js +35 -4
  178. package/dist/program.js.map +1 -1
  179. package/dist/records/run.d.ts +1 -1
  180. package/dist/records/run.d.ts.map +1 -1
  181. package/dist/records/run.js +1 -1
  182. package/dist/records/run.js.map +1 -1
  183. package/dist/run/auto.d.ts.map +1 -1
  184. package/dist/run/auto.js +11 -13
  185. package/dist/run/auto.js.map +1 -1
  186. package/dist/run/import.d.ts +2 -2
  187. package/dist/run/import.d.ts.map +1 -1
  188. package/dist/run/import.js +71 -28
  189. package/dist/run/import.js.map +1 -1
  190. package/dist/run/lock.d.ts +1 -1
  191. package/dist/run/lock.d.ts.map +1 -1
  192. package/dist/run/lock.js +2 -2
  193. package/dist/run/lock.js.map +1 -1
  194. package/dist/search/command.d.ts +16 -21
  195. package/dist/search/command.d.ts.map +1 -1
  196. package/dist/search/command.js +101 -51
  197. package/dist/search/command.js.map +1 -1
  198. package/dist/store/gone.d.ts +1 -1
  199. package/dist/store/gone.d.ts.map +1 -1
  200. package/dist/store/held.d.ts +1 -1
  201. package/dist/store/held.d.ts.map +1 -1
  202. package/dist/store/scope.d.ts +1 -1
  203. package/dist/store/scope.d.ts.map +1 -1
  204. package/dist/store/scope.js +1 -1
  205. package/dist/store/scope.js.map +1 -1
  206. package/dist/store/source-target.d.ts +1 -1
  207. package/dist/store/source-target.d.ts.map +1 -1
  208. package/dist/store/source-target.js +1 -1
  209. package/dist/store/source-target.js.map +1 -1
  210. package/dist/tags/command.d.ts.map +1 -1
  211. package/dist/tags/command.js +19 -9
  212. package/dist/tags/command.js.map +1 -1
  213. package/dist/tasks/command.d.ts.map +1 -1
  214. package/dist/tasks/command.js +19 -9
  215. package/dist/tasks/command.js.map +1 -1
  216. package/dist/tasks/context.d.ts +2 -2
  217. package/dist/tasks/context.d.ts.map +1 -1
  218. package/dist/tasks/context.js +2 -2
  219. package/dist/tasks/context.js.map +1 -1
  220. package/dist/tasks/relations-command.d.ts.map +1 -1
  221. package/dist/tasks/relations-command.js +9 -22
  222. package/dist/tasks/relations-command.js.map +1 -1
  223. package/dist/version.d.ts +1 -1
  224. package/dist/version.js +1 -1
  225. package/dist/vocabulary/command.d.ts.map +1 -1
  226. package/dist/vocabulary/command.js +45 -33
  227. package/dist/vocabulary/command.js.map +1 -1
  228. package/dist/vocabulary/project.d.ts +1 -1
  229. package/dist/vocabulary/project.d.ts.map +1 -1
  230. package/install/postinstall.mjs +9 -0
  231. package/package.json +9 -4
  232. package/skills/cli-memo/SKILL.md +60 -0
@@ -1,105 +1,139 @@
1
- import { CliError, createRenderer } from "@wirecat/cli-base";
2
- import { parseLocator, resolveOutput } from "@wirecat/cli-messaging";
3
- import { readMail } from "@wirecat/cli-messaging/services";
4
- import { openStore } from "@wirecat/cli-messaging/store";
5
- import { InvalidArgumentError } from "commander";
6
- import { loadConfig } from "../config.js";
7
- import { positive, whole } from "../options.js";
8
- import { withImportLock } from "../run/lock.js";
9
- import { found } from "../search/command.js";
10
- import { himalaya } from "./himalaya.js";
11
- import { importMail } from "./import.js";
12
- const DAY = 86_400_000;
13
- const day = (value) => {
14
- const date = new Date(`${value}T00:00:00Z`);
15
- if (!/^\d{4}-\d{2}-\d{2}$/.test(value) || Number.isNaN(date.getTime()))
16
- throw new InvalidArgumentError("a date as YYYY-MM-DD");
17
- return date;
1
+ import { CliError } from "@wirecat/cli-base";
2
+ import { loadConfig, updateConfig } from "../config.js";
3
+ import { positive } from "../options.js";
4
+ import { printing } from "../records/run.js";
5
+ import { mailAccounts, mailFolders, mailSource } from "./accounts.js";
6
+ import { probeMail, SUGGEST_RULE } from "./probe.js";
7
+ import { sameMatch } from "./rules.js";
8
+ const accountOf = (config, name) => mailAccounts(config.mail?.accounts ?? [], [name])[0];
9
+ const matchOf = ({ from, domain, listId }) => {
10
+ const given = [from, domain, listId].filter((value) => value !== undefined);
11
+ if (given.length !== 1)
12
+ throw new CliError("validation_error", "give exactly one of --from, --domain, --list-id");
13
+ return from !== undefined ? { from } : domain !== undefined ? { domain } : { listId: listId };
18
14
  };
19
- const text = (result) => [
20
- `${result.account}: ${result.listed} in All Mail since ${result.since.slice(0, 10)}, ` +
21
- `${result.saved} saved, ${result.alreadyStored} already stored, ${result.deleted} marked deleted.`,
22
- ...(result.complete ? [] : ["Not every new message was read — run it again to continue."]),
23
- ...(result.deletionsSkipped === undefined ? [] : [`Deletions skipped: ${result.deletionsSkipped}`]),
24
- ].join("\n");
25
- const chooseAccount = (accounts, name) => {
26
- if (accounts.length === 0)
27
- throw new CliError("configuration_error", "no mail account: add mail.accounts [{ name, address }] to the config");
28
- const found = accounts.find((account) => account.name === name);
29
- if (found !== undefined)
30
- return found;
31
- const choices = accounts.map((account) => account.name).join(", ");
32
- throw new CliError(name === undefined || name === "import" ? "validation_error" : "not_found", name === undefined || name === "import"
33
- ? `name the account: memo mail <account> import — mail.accounts holds ${choices}`
34
- : `no mail account "${name}" in mail.accounts — it holds ${choices}`);
15
+ const describe = (match) => match.from !== undefined
16
+ ? `from ${match.from}`
17
+ : match.domain !== undefined
18
+ ? `domain ${match.domain}`
19
+ : `list-id ${match.listId}`;
20
+ const ruleLine = (rule) => [rule.action.padEnd(4), describe(rule.match), rule.decidedAt.slice(0, 10), rule.reason ?? ""].join(" ").trimEnd();
21
+ const changeRules = (env, name, change) => {
22
+ let changed = [];
23
+ updateConfig((config) => {
24
+ const account = accountOf(config, name);
25
+ changed = change(account.rules ?? []);
26
+ const accounts = (config.mail?.accounts ?? []).map((each) => each === account ? { ...each, rules: changed } : each);
27
+ return { ...config, mail: { ...config.mail, accounts } };
28
+ }, env);
29
+ return changed;
30
+ };
31
+ const megabytes = (bytes) => (bytes / 1024 / 1024).toFixed(1);
32
+ const percent = (value) => (value === null ? "?" : `${Math.round(value * 100)}%`);
33
+ const probeText = (probe) => {
34
+ const rows = probe.items.map((group) => [
35
+ String(group.emails),
36
+ megabytes(group.bytes),
37
+ percent(group.unread),
38
+ percent(group.bulk),
39
+ group.firstYear === group.lastYear ? String(group.firstYear) : `${group.firstYear}-${group.lastYear}`,
40
+ group.replied ? "yes" : "no",
41
+ group.suggest ?? "",
42
+ group.listId === null ? (group.from ?? "") : `${group.listId} (${group.from ?? "?"})`,
43
+ ]);
44
+ const header = ["emails", "MB", "unread", "bulk", "years", "replied", "suggest", "sender or list"];
45
+ const widths = header.map((title, column) => Math.max(title.length, ...rows.map((row) => row[column]?.length ?? 0)));
46
+ const line = (row) => row
47
+ .map((cell, column) => (column < 2 ? cell.padStart(widths[column] ?? 0) : cell.padEnd(widths[column] ?? 0)))
48
+ .join(" ")
49
+ .trimEnd();
50
+ return [
51
+ `${probe.emails} emails, ${megabytes(probe.bytes)} MB, ${probe.groups} groups; ${probe.sent} sent, ` +
52
+ `${probe.withoutHeaders} without readable headers; ${probe.seconds}s`,
53
+ line(header),
54
+ ...rows.map(line),
55
+ ].join("\n");
35
56
  };
36
57
  export const mailCommand = (program, streams, env) => {
37
- /** One stored email of the named account, whole, with the emails of its thread asked for either side. */
38
- const show = async (account, reference, options) => {
39
- if (reference === undefined)
40
- throw new CliError("validation_error", `which email? memo mail ${account.name} show <msg:email/… reference>`);
41
- const { provider, account: address } = parseLocator(reference);
42
- if (provider !== "email" || address.toLowerCase() !== account.address.toLowerCase())
43
- throw new CliError("validation_error", `${reference} is not an email of ${account.name} (${account.address})`);
44
- const store = await openStore({ env });
45
- try {
46
- const emails = await readMail(store, reference, { before: options.beforeN, after: options.afterN });
47
- if (options.json)
48
- resolveOutput({ json: true, streams }).renderer.result(options.beforeN || options.afterN ? { items: emails } : emails[0]);
49
- else
50
- streams.data(`${emails.map((email) => found(email, "full")).join("\n\n")}\n`);
51
- }
52
- finally {
53
- await store.close();
54
- }
55
- };
56
- program
57
- .command("mail")
58
- .description("Read one mail account through Himalaya into the shared message store")
59
- .usage("<account> import [options] | <account> show <reference> [options]")
60
- .argument("[account]", "the account's name in mail.accounts of the config, also its name in Himalaya")
61
- .argument("[action]", "import: read the account's mail, and drop the text of mail deleted at the source; show: one stored email")
62
- .argument("[reference]", "show: the email's msg:email/… reference, as search answers give it")
63
- .option("--since <date>", "first day to read, YYYY-MM-DD (default: 30 days ago)", day)
64
- .option("--max <n>", "most new messages to read in this run", positive, 200)
58
+ const print = printing(streams);
59
+ const mail = program.command("mail").description("look at a mail account before importing it, and the owner's rules");
60
+ mail
61
+ .command("probe")
62
+ .description("group an account's mail by sender and list, to decide what to keep or skip")
63
+ .argument("<account>", "the account's name in mail.accounts, or its address")
64
+ .option("--since-time <time>", "only mail from this time, ISO 8601 or 30d ago (default: all mail)")
65
+ .option("--limit-groups <n>", "show this many of the largest groups", positive, 50)
66
+ .option("--json", "print JSON")
67
+ .addHelpText("after", "\nRead-only and headers only: about 300 bytes per email (From, To, Cc, List-Id, List-Unsubscribe, " +
68
+ "Precedence), against Gmail's daily download limit. An mbox account reads the whole file once.\n\n" +
69
+ `Each group's ${SUGGEST_RULE}. The owner decides; add a rule with memo mail rules add.`)
70
+ .action(async (name, options) => {
71
+ const account = accountOf(loadConfig(env), name);
72
+ const since = new Date(options.sinceTime === undefined
73
+ ? 0
74
+ : (await import("@wirecat/cli-core/cli")).momentOf(options.sinceTime, "--since-time"));
75
+ const started = Date.now();
76
+ const source = mailSource(account, env);
77
+ const listed = new Map();
78
+ for (const folder of mailFolders(account))
79
+ for (const item of await source.list(since, folder, { headers: true }))
80
+ listed.set(item.messageId, item);
81
+ const probe = { ...probeMail([...listed.values()], options.limitGroups), seconds: 0 };
82
+ probe.seconds = Math.round((Date.now() - started) / 100) / 10;
83
+ print(options.json, probe, probeText(probe));
84
+ });
85
+ const rules = mail
86
+ .command("rules")
87
+ .description("the owner's decisions on which mail to skip or keep, by sender, domain or list");
88
+ rules
89
+ .command("list")
90
+ .description("one account's rules")
91
+ .argument("<account>", "the account's name in mail.accounts, or its address")
92
+ .option("--json", "print JSON")
93
+ .action((name, options) => {
94
+ const items = accountOf(loadConfig(env), name).rules ?? [];
95
+ print(options.json, { items }, items.map(ruleLine).join("\n") || "no rules");
96
+ });
97
+ rules
98
+ .command("add")
99
+ .description("skip or keep mail by sender, domain or list; a repeated match replaces its rule")
100
+ .argument("<account>", "the account's name in mail.accounts, or its address")
101
+ .option("--from <address>", "one sender address")
102
+ .option("--domain <domain>", "a sender domain, and its subdomains")
103
+ .option("--list-id <id>", "a mailing list, by its List-Id")
104
+ .option("--skip", "never import this mail")
105
+ .option("--keep", "import this mail even when a skip rule matches it")
106
+ .option("--reason <text>", "why, for the owner later")
107
+ .option("--json", "print JSON")
108
+ .addHelpText("after", "\nA keep wins over a skip, so --keep --from one sender overrides --skip --domain of its domain. " +
109
+ "A skipped email is never read or stored by memo sync; mail already stored stays.")
110
+ .action((name, options) => {
111
+ const match = matchOf(options);
112
+ if (Boolean(options.skip) === Boolean(options.keep))
113
+ throw new CliError("validation_error", "give exactly one of --skip, --keep");
114
+ const rule = {
115
+ match,
116
+ action: options.skip ? "skip" : "keep",
117
+ ...(options.reason === undefined ? {} : { reason: options.reason }),
118
+ decidedAt: new Date().toISOString(),
119
+ };
120
+ changeRules(env, name, (current) => [...current.filter((each) => !sameMatch(each.match, match)), rule]);
121
+ print(options.json, rule, ruleLine(rule));
122
+ });
123
+ rules
124
+ .command("remove")
125
+ .description("drop the rule for a sender, domain or list")
126
+ .argument("<account>", "the account's name in mail.accounts, or its address")
127
+ .option("--from <address>", "one sender address")
128
+ .option("--domain <domain>", "a sender domain")
129
+ .option("--list-id <id>", "a mailing list, by its List-Id")
65
130
  .option("--json", "print JSON")
66
- .option("--no-embed", "skip semantic embedding; local words remain searchable")
67
- .option("--retry-attachments", "reread bounded stored messages after installing an extraction engine")
68
- .option("--before-n <n>", "show: also this many earlier emails of its thread", whole, 0)
69
- .option("--after-n <n>", "show: also this many later emails of its thread", whole, 0)
70
- .action(async (name, action, reference, options) => {
71
- const mailConfig = loadConfig(env).mail;
72
- const account = chooseAccount(mailConfig?.accounts ?? [], name);
73
- if (action === "show")
74
- return show(account, reference, options);
75
- if (action !== "import")
76
- throw new CliError("validation_error", `memo mail ${account.name} takes import or show: memo mail ${account.name} import`);
77
- const result = await withImportLock(env, async () => {
78
- const store = await openStore({ env });
79
- try {
80
- return await importMail({
81
- store,
82
- run: himalaya(env),
83
- account,
84
- since: options.since ?? new Date(Date.now() - 30 * DAY),
85
- max: options.max,
86
- env,
87
- embed: options.embed,
88
- ...(mailConfig?.maxBodyChars === undefined ? {} : { maxBodyChars: mailConfig.maxBodyChars }),
89
- ...(mailConfig?.maxAttachmentChars === undefined
90
- ? {}
91
- : { maxAttachmentChars: mailConfig.maxAttachmentChars }),
92
- retryAttachments: options.retryAttachments,
93
- });
94
- }
95
- finally {
96
- await store.close();
97
- }
98
- });
99
- if (options.json)
100
- createRenderer({ format: "json", color: false, streams }).result(result);
101
- else
102
- streams.data(`${text(result)}\n`);
131
+ .action((name, options) => {
132
+ const match = matchOf(options);
133
+ if (!(accountOf(loadConfig(env), name).rules ?? []).some((rule) => sameMatch(rule.match, match)))
134
+ throw new CliError("not_found", `no rule for ${describe(match)}; memo mail rules list ${name} shows them`);
135
+ const left = changeRules(env, name, (current) => current.filter((rule) => !sameMatch(rule.match, match)));
136
+ print(options.json, { removed: match, items: left }, `removed the rule for ${describe(match)}`);
103
137
  });
104
138
  };
105
139
  //# sourceMappingURL=command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/mail/command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/mail/command.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type MailHeaders } from "./headers.js";
1
2
  import type { Himalaya } from "./himalaya.js";
2
3
  export interface Listed {
3
4
  uid: string;
@@ -6,21 +7,25 @@ export interface Listed {
6
7
  threadId: string;
7
8
  receivedAt: string;
8
9
  folder?: string;
9
- scopeFolder?: string;
10
10
  /** Gmail labels, plain names; absent when the answer could not be read, so nothing is changed. */
11
11
  labels?: string[];
12
12
  seen?: boolean;
13
13
  flagged?: boolean;
14
+ /** RFC822.SIZE in bytes, to size fetch batches. */
15
+ size?: number;
16
+ /** Read only when asked for; absent when not asked or unreadable, so no rule applies to it. */
17
+ headers?: MailHeaders;
14
18
  }
15
19
  /** IMAP's modified UTF-7 (RFC 3501 §5.1.3): `&` opens base64 of UTF-16BE, `,` stands for `/`, `-` closes. */
16
20
  export declare const decodeMailboxName: (name: string) => string;
21
+ export declare const systemLabel: (name: string) => string;
17
22
  /** A label as people read it: `\\Important` and `Important` are one label, and names are decoded. */
18
23
  export declare const labelName: (raw: string) => string;
19
24
  /**
20
25
  * Every message in All Mail received since `since`, read with EXAMINE so nothing can change a flag.
21
26
  * All Mail rather than INBOX: an archived message leaves INBOX but is not deleted.
22
27
  */
23
- export declare const listAllMail: (run: Himalaya, account: string, since: Date, folder?: string) => Promise<Listed[]>;
28
+ export declare const listAllMail: (run: Himalaya, account: string, since: Date, folder?: string, headers?: boolean) => Promise<Listed[]>;
24
29
  /** Message-ID is stable across folders; absent headers fall back to a UIDVALIDITY-scoped identity. */
25
30
  export declare const listImapMail: (run: Himalaya, account: string, since: Date, folder: string) => Promise<Listed[]>;
26
31
  //# sourceMappingURL=gmail.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gmail.d.ts","sourceRoot":"","sources":["../../src/mail/gmail.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kGAAkG;IAClG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAcD,6GAA6G;AAC7G,eAAO,MAAM,iBAAiB,SAAU,MAAM,KAAG,MAO7C,CAAA;AA2BJ,qGAAqG;AACrG,eAAO,MAAM,SAAS,QAAS,MAAM,KAAG,MAGvC,CAAA;AAkCD;;;GAGG;AACH,eAAO,MAAM,WAAW,QACjB,QAAQ,WACJ,MAAM,SACR,IAAI,sBAEV,OAAO,CAAC,MAAM,EAAE,CAwDlB,CAAA;AAED,sGAAsG;AACtG,eAAO,MAAM,YAAY,QAAe,QAAQ,WAAW,MAAM,SAAS,IAAI,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CA2DhH,CAAA"}
1
+ {"version":3,"file":"gmail.d.ts","sourceRoot":"","sources":["../../src/mail/gmail.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kGAAkG;IAClG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+FAA+F;IAC/F,OAAO,CAAC,EAAE,WAAW,CAAA;CACtB;AAcD,6GAA6G;AAC7G,eAAO,MAAM,iBAAiB,SAAU,MAAM,KAAG,MAO7C,CAAA;AA2BJ,eAAO,MAAM,WAAW,SAAU,MAAM,KAAG,MAAmD,CAAA;AAE9F,qGAAqG;AACrG,eAAO,MAAM,SAAS,QAAS,MAAM,KAAG,MAGvC,CAAA;AAmDD;;;GAGG;AACH,eAAO,MAAM,WAAW,QACjB,QAAQ,WACJ,MAAM,SACR,IAAI,yCAGV,OAAO,CAAC,MAAM,EAAE,CA6ElB,CAAA;AAED,sGAAsG;AACtG,eAAO,MAAM,YAAY,QAAe,QAAQ,WAAW,MAAM,SAAS,IAAI,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CA8DhH,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { CliError } from "@wirecat/cli-base";
3
+ import { HEADER_FIELDS, headersOf } from "./headers.js";
3
4
  const SYSTEM_LABELS = {
4
5
  inbox: "Inbox",
5
6
  sent: "Sent",
@@ -52,13 +53,29 @@ const imapList = (items, name) => {
52
53
  }
53
54
  return undefined;
54
55
  };
56
+ export const systemLabel = (name) => SYSTEM_LABELS[name.toLowerCase()] ?? name;
55
57
  /** A label as people read it: `\\Important` and `Important` are one label, and names are decoded. */
56
58
  export const labelName = (raw) => {
57
59
  const system = raw.startsWith("\\") ? raw.slice(1) : raw;
58
60
  return SYSTEM_LABELS[system.toLowerCase()] ?? decodeMailboxName(system);
59
61
  };
62
+ /** One FETCH answer per email, across lines, since a header field comes back as a multi-line literal. */
63
+ const FETCH_ANSWERS = /^\* \d+ FETCH \(([\s\S]*?)(?=^\* \d+ FETCH|^[a-z]\d* (?:OK|NO|BAD)|$(?![\s\S]))/gm;
64
+ /** Each answer's UID and header text; the UID is looked for outside the literal, so a header cannot fake it. */
65
+ const fetchedHeaders = (output) => [...output.matchAll(FETCH_ANSWERS)].flatMap(([, fields = ""]) => {
66
+ const literal = /\{\d+\}\r?\n/.exec(fields);
67
+ if (literal === null)
68
+ return [];
69
+ const start = literal.index + literal[0].length;
70
+ const blank = fields.slice(start).search(/\r?\n\r?\n/);
71
+ const end = blank === -1 ? fields.length : start + blank;
72
+ const uid = /(?:^|\s)UID (\d+)/.exec(`${fields.slice(0, literal.index)} ${fields.slice(end)}`)?.[1];
73
+ return uid === undefined ? [] : [[uid, fields.slice(start, end)]];
74
+ });
60
75
  const MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
61
76
  const FETCH_BATCH = 500;
77
+ /** One himalaya call reads its whole answer into memory, so a mailbox of 300,000+ emails is listed in parts. */
78
+ const CALL_UIDS = 10_000;
62
79
  const imapDate = (day) => `${day.getUTCDate()}-${MONTHS[day.getUTCMonth()]}-${day.getUTCFullYear()}`;
63
80
  /** IMAP's `INTERNALDATE`: `"04-Oct-2026 19:51:09 +0000"`. */
64
81
  const isoOf = (internal) => {
@@ -83,7 +100,7 @@ const assertCompleted = (output, tags) => {
83
100
  * Every message in All Mail received since `since`, read with EXAMINE so nothing can change a flag.
84
101
  * All Mail rather than INBOX: an archived message leaves INBOX but is not deleted.
85
102
  */
86
- export const listAllMail = async (run, account, since, folder = "[Gmail]/All Mail") => {
103
+ export const listAllMail = async (run, account, since, folder = "[Gmail]/All Mail", headers = false) => {
87
104
  if (/[\r\n]/.test(folder) || folder.includes(String.fromCharCode(0)))
88
105
  throw new CliError("validation_error", "invalid mailbox name");
89
106
  const mailbox = JSON.stringify(folder);
@@ -92,43 +109,62 @@ export const listAllMail = async (run, account, since, folder = "[Gmail]/All Mai
92
109
  const uids = (/^\* SEARCH(.*)$/m.exec(search)?.[1] ?? "").trim().split(/\s+/).filter(Boolean);
93
110
  if (uids.length === 0)
94
111
  return [];
95
- const batches = [];
96
- for (let start = 0; start < uids.length; start += FETCH_BATCH)
97
- batches.push(uids.slice(start, start + FETCH_BATCH).join(","));
98
- const tags = batches.map((_, index) => `f${index}`);
99
- const fetched = await run(["imap", "raw", "-a", account], `a EXAMINE ${mailbox}\r\n${batches
100
- .map((set, index) => `${tags[index]} UID FETCH ${set} (UID X-GM-MSGID X-GM-THRID INTERNALDATE)\r\n`)
101
- .join("")}`);
102
- assertCompleted(fetched, ["a", ...tags]);
103
- const listed = [...fetched.matchAll(/^\* \d+ FETCH \((.*)\)\s*$/gm)].map(([, items = ""]) => {
104
- const item = (name) => new RegExp(`${name} (\\d+)`).exec(items)?.[1];
105
- const internal = /INTERNALDATE "([^"]+)"/.exec(items)?.[1];
106
- const uid = item("UID");
107
- const messageId = item("X-GM-MSGID");
108
- const threadId = item("X-GM-THRID");
109
- if (!uid || !messageId || !threadId || !internal)
110
- throw new CliError("invalid_response", `IMAP FETCH answer without the Gmail ids: ${items}`);
111
- return { uid, messageId, threadId, receivedAt: isoOf(internal) };
112
- });
113
- if (listed.length !== uids.length)
114
- throw new CliError("invalid_response", `IMAP listed ${uids.length} messages but fetched ${listed.length}`);
115
- // A separate answer, so a label the parser cannot read costs that message its labels, never the listing.
116
- const labelled = await run(["imap", "raw", "-a", account], `a EXAMINE ${mailbox}\r\n${batches
117
- .map((set, index) => `l${index} UID FETCH ${set} (UID X-GM-LABELS FLAGS)\r\n`)
118
- .join("")}`);
112
+ const listed = [];
119
113
  const marks = new Map();
120
- for (const [, items = ""] of labelled.matchAll(/^\* \d+ FETCH \((.*)\)\s*$/gm)) {
121
- const uid = /(?:^|\s)UID (\d+)/.exec(items)?.[1];
122
- const labels = imapList(items, "X-GM-LABELS");
123
- const flags = imapList(items, "FLAGS");
124
- if (!uid || labels === undefined || flags === undefined)
125
- continue;
126
- const flagged = flags.includes("\\Flagged");
127
- const names = new Set(labels.map(labelName));
128
- if (flagged)
129
- names.add("Starred");
130
- marks.set(uid, { labels: [...names].sort(), seen: flags.includes("\\Seen"), flagged });
114
+ for (let from = 0; from < uids.length; from += CALL_UIDS) {
115
+ const batches = [];
116
+ for (let start = from; start < Math.min(from + CALL_UIDS, uids.length); start += FETCH_BATCH)
117
+ batches.push(uids.slice(start, start + FETCH_BATCH).join(","));
118
+ const tags = batches.map((_, index) => `f${index}`);
119
+ const fetched = await run(["imap", "raw", "-a", account], `a EXAMINE ${mailbox}\r\n${batches
120
+ .map((set, index) => `${tags[index]} UID FETCH ${set} (UID X-GM-MSGID X-GM-THRID INTERNALDATE RFC822.SIZE)\r\n`)
121
+ .join("")}`);
122
+ assertCompleted(fetched, ["a", ...tags]);
123
+ for (const [, items = ""] of fetched.matchAll(/^\* \d+ FETCH \((.*)\)\s*$/gm)) {
124
+ const item = (name) => new RegExp(`${name} (\\d+)`).exec(items)?.[1];
125
+ const internal = /INTERNALDATE "([^"]+)"/.exec(items)?.[1];
126
+ const uid = item("UID");
127
+ const messageId = item("X-GM-MSGID");
128
+ const threadId = item("X-GM-THRID");
129
+ const size = item("RFC822\\.SIZE");
130
+ if (!uid || !messageId || !threadId || !internal)
131
+ throw new CliError("invalid_response", `IMAP FETCH answer without the Gmail ids: ${items}`);
132
+ listed.push({
133
+ uid,
134
+ messageId,
135
+ threadId,
136
+ receivedAt: isoOf(internal),
137
+ ...(size === undefined ? {} : { size: Number(size) }),
138
+ });
139
+ }
140
+ // A separate answer, so a label the parser cannot read costs that message its labels, never the listing.
141
+ const labelled = await run(["imap", "raw", "-a", account], `a EXAMINE ${mailbox}\r\n${batches
142
+ .map((set, index) => `l${index} UID FETCH ${set} (UID X-GM-LABELS FLAGS)\r\n`)
143
+ .join("")}`);
144
+ for (const [, items = ""] of labelled.matchAll(/^\* \d+ FETCH \((.*)\)\s*$/gm)) {
145
+ const uid = /(?:^|\s)UID (\d+)/.exec(items)?.[1];
146
+ const labels = imapList(items, "X-GM-LABELS");
147
+ const flags = imapList(items, "FLAGS");
148
+ if (!uid || labels === undefined || flags === undefined)
149
+ continue;
150
+ const flagged = flags.includes("\\Flagged");
151
+ const names = new Set(labels.map(labelName));
152
+ if (flagged)
153
+ names.add("Starred");
154
+ marks.set(uid, { labels: [...names].sort(), seen: flags.includes("\\Seen"), flagged });
155
+ }
156
+ if (headers) {
157
+ const headed = await run(["imap", "raw", "-a", account], `a EXAMINE ${mailbox}\r\n${batches
158
+ .map((set, index) => `h${index} UID FETCH ${set} (UID BODY.PEEK[HEADER.FIELDS (${HEADER_FIELDS})])\r\n`)
159
+ .join("")}`);
160
+ // A refused fetch would leave a whole batch without headers, and rules would not keep its mail out.
161
+ assertCompleted(headed, ["a", ...batches.map((_, index) => `h${index}`)]);
162
+ for (const [uid, text] of fetchedHeaders(headed))
163
+ marks.set(uid, { ...marks.get(uid), headers: headersOf(text) });
164
+ }
131
165
  }
166
+ if (listed.length !== uids.length)
167
+ throw new CliError("invalid_response", `IMAP listed ${uids.length} messages but fetched ${listed.length}`);
132
168
  return listed.map((item) => ({ ...item, ...marks.get(item.uid) }));
133
169
  };
134
170
  /** Message-ID is stable across folders; absent headers fall back to a UIDVALIDITY-scoped identity. */
@@ -149,7 +185,7 @@ export const listImapMail = async (run, account, since, folder) => {
149
185
  for (let start = 0; start < uids.length; start += FETCH_BATCH) {
150
186
  const batch = uids.slice(start, start + FETCH_BATCH);
151
187
  const before = listed.length;
152
- const output = await run(["imap", "raw", "-a", account], `a EXAMINE ${mailbox}\r\nf UID FETCH ${batch.join(",")} (UID FLAGS INTERNALDATE BODY.PEEK[HEADER.FIELDS (MESSAGE-ID REFERENCES IN-REPLY-TO)])\r\n`);
188
+ const output = await run(["imap", "raw", "-a", account], `a EXAMINE ${mailbox}\r\nf UID FETCH ${batch.join(",")} (UID FLAGS INTERNALDATE RFC822.SIZE BODY.PEEK[HEADER.FIELDS (MESSAGE-ID REFERENCES IN-REPLY-TO ${HEADER_FIELDS})])\r\n`);
153
189
  assertCompleted(output, ["a", "f"]);
154
190
  for (const match of output.matchAll(/^\* \d+ FETCH \(([\s\S]*?)(?=^\* \d+ FETCH|^[af] (?:OK|NO|BAD)|$(?![\s\S]))/gm)) {
155
191
  const fields = match[1] ?? "", uid = /(?:^|\s)UID (\d+)/.exec(fields)?.[1], internal = /INTERNALDATE "([^"]+)"/.exec(fields)?.[1];
@@ -161,12 +197,15 @@ export const listImapMail = async (run, account, since, folder) => {
161
197
  const parent = /^In-Reply-To:\s*(<[^>]+>)/im.exec(unfolded)?.[1];
162
198
  const identity = messageId ?? `uid:${folder}:${validity}:${uid}`;
163
199
  const flags = imapList(fields, "FLAGS");
200
+ const size = /RFC822\.SIZE (\d+)/.exec(fields)?.[1];
164
201
  listed.push({
165
202
  uid,
203
+ ...(size === undefined ? {} : { size: Number(size) }),
166
204
  messageId: digest(identity),
167
205
  threadId: digest(refs?.[0] ?? parent ?? identity),
168
206
  receivedAt: isoOf(internal),
169
207
  folder,
208
+ headers: headersOf(unfolded),
170
209
  // IMAP has no labels; a flagged message is Starred, as in Gmail, so one search finds both.
171
210
  ...(flags === undefined
172
211
  ? {}
@@ -1 +1 @@
1
- {"version":3,"file":"gmail.js","sourceRoot":"","sources":["../../src/mail/gmail.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gmail.js","sourceRoot":"","sources":["../../src/mail/gmail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /** The header fields memo reads at list time: enough to group mail by sender and apply the owner's rules. */
2
+ export declare const HEADER_FIELDS = "FROM TO CC LIST-ID LIST-UNSUBSCRIBE PRECEDENCE";
3
+ export interface MailHeaders {
4
+ /** The sender's address, lower case; absent when From holds none. */
5
+ from?: string;
6
+ /** To and Cc addresses, lower case. */
7
+ to: string[];
8
+ listId?: string;
9
+ /** List-Id, List-Unsubscribe or `Precedence: bulk|list|junk`: mail sent to many, not written to one. */
10
+ bulk: boolean;
11
+ }
12
+ export declare const unfold: (text: string) => string;
13
+ export declare const field: (unfolded: string, name: string) => string | undefined;
14
+ export declare const addressesOf: (value: string | undefined) => string[];
15
+ /** The header fields of one email, from its header text. */
16
+ export declare const headersOf: (text: string) => MailHeaders;
17
+ //# sourceMappingURL=headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/mail/headers.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAC7G,eAAO,MAAM,aAAa,mDAAmD,CAAA;AAE7E,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,EAAE,EAAE,MAAM,EAAE,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wGAAwG;IACxG,IAAI,EAAE,OAAO,CAAA;CACd;AAED,eAAO,MAAM,MAAM,SAAU,MAAM,KAAG,MAA2C,CAAA;AAEjF,eAAO,MAAM,KAAK,aAAc,MAAM,QAAQ,MAAM,KAAG,MAAM,GAAG,SACI,CAAA;AAEpE,eAAO,MAAM,WAAW,UAAW,MAAM,GAAG,SAAS,KAAG,MAAM,EAK7D,CAAA;AAED,4DAA4D;AAC5D,eAAO,MAAM,SAAS,SAAU,MAAM,KAAG,WAexC,CAAA"}