proton-mail-bridge-client 2.15.2 → 2.16.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 (85) hide show
  1. package/README.md +39 -7
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +49 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +56 -12
  7. package/dist/index.js.map +1 -1
  8. package/dist/scripts/install-claude-desktop.d.ts.map +1 -1
  9. package/dist/scripts/install-claude-desktop.js +13 -13
  10. package/dist/scripts/install-claude-desktop.js.map +1 -1
  11. package/dist/services/account-manager.d.ts +4 -0
  12. package/dist/services/account-manager.d.ts.map +1 -1
  13. package/dist/services/account-manager.js +6 -0
  14. package/dist/services/account-manager.js.map +1 -1
  15. package/dist/services/autoresponder-service.d.ts +1 -1
  16. package/dist/services/autoresponder-service.d.ts.map +1 -1
  17. package/dist/services/autoresponder-service.js +4 -0
  18. package/dist/services/autoresponder-service.js.map +1 -1
  19. package/dist/services/brief-service.d.ts +42 -0
  20. package/dist/services/brief-service.d.ts.map +1 -0
  21. package/dist/services/brief-service.js +47 -0
  22. package/dist/services/brief-service.js.map +1 -0
  23. package/dist/services/commitment-service.d.ts +39 -0
  24. package/dist/services/commitment-service.d.ts.map +1 -0
  25. package/dist/services/commitment-service.js +83 -0
  26. package/dist/services/commitment-service.js.map +1 -0
  27. package/dist/services/triage-plan-service.d.ts +56 -0
  28. package/dist/services/triage-plan-service.d.ts.map +1 -0
  29. package/dist/services/triage-plan-service.js +83 -0
  30. package/dist/services/triage-plan-service.js.map +1 -0
  31. package/dist/tools/args.d.ts +2 -0
  32. package/dist/tools/args.d.ts.map +1 -1
  33. package/dist/tools/args.js +16 -0
  34. package/dist/tools/args.js.map +1 -1
  35. package/dist/tools/brief.d.ts +4 -0
  36. package/dist/tools/brief.d.ts.map +1 -0
  37. package/dist/tools/brief.js +73 -0
  38. package/dist/tools/brief.js.map +1 -0
  39. package/dist/tools/commitments.d.ts +16 -0
  40. package/dist/tools/commitments.d.ts.map +1 -0
  41. package/dist/tools/commitments.js +145 -0
  42. package/dist/tools/commitments.js.map +1 -0
  43. package/dist/tools/context.d.ts +2 -0
  44. package/dist/tools/context.d.ts.map +1 -1
  45. package/dist/tools/context.js +3 -0
  46. package/dist/tools/context.js.map +1 -1
  47. package/dist/tools/definitions.d.ts +271 -0
  48. package/dist/tools/definitions.d.ts.map +1 -1
  49. package/dist/tools/definitions.js +123 -0
  50. package/dist/tools/definitions.js.map +1 -1
  51. package/dist/tools/drafts.js +14 -14
  52. package/dist/tools/drafts.js.map +1 -1
  53. package/dist/tools/reading.d.ts.map +1 -1
  54. package/dist/tools/reading.js +77 -23
  55. package/dist/tools/reading.js.map +1 -1
  56. package/dist/tools/rules-runner.d.ts.map +1 -1
  57. package/dist/tools/rules-runner.js +4 -1
  58. package/dist/tools/rules-runner.js.map +1 -1
  59. package/dist/tools/sending.js +11 -11
  60. package/dist/tools/sending.js.map +1 -1
  61. package/dist/tools/style.d.ts +4 -0
  62. package/dist/tools/style.d.ts.map +1 -0
  63. package/dist/tools/style.js +94 -0
  64. package/dist/tools/style.js.map +1 -0
  65. package/dist/tools/triage.d.ts +4 -0
  66. package/dist/tools/triage.d.ts.map +1 -0
  67. package/dist/tools/triage.js +197 -0
  68. package/dist/tools/triage.js.map +1 -0
  69. package/dist/utils/commitment-phrases.d.ts +10 -0
  70. package/dist/utils/commitment-phrases.d.ts.map +1 -0
  71. package/dist/utils/commitment-phrases.js +118 -0
  72. package/dist/utils/commitment-phrases.js.map +1 -0
  73. package/dist/utils/mail-security.d.ts +34 -0
  74. package/dist/utils/mail-security.d.ts.map +1 -0
  75. package/dist/utils/mail-security.js +173 -0
  76. package/dist/utils/mail-security.js.map +1 -0
  77. package/dist/utils/schedule-templates.d.ts +2 -0
  78. package/dist/utils/schedule-templates.d.ts.map +1 -1
  79. package/dist/utils/schedule-templates.js +20 -17
  80. package/dist/utils/schedule-templates.js.map +1 -1
  81. package/dist/utils/style-profile.d.ts +29 -0
  82. package/dist/utils/style-profile.d.ts.map +1 -0
  83. package/dist/utils/style-profile.js +125 -0
  84. package/dist/utils/style-profile.js.map +1 -0
  85. package/package.json +1 -1
@@ -0,0 +1,73 @@
1
+ import { BriefStore, briefLines } from "../services/brief-service.js";
2
+ import { assessMail } from "../utils/mail-security.js";
3
+ import { normalizeBoolean, normalizeLimit, withAccountPrefix } from "../utils/helpers.js";
4
+ import { optionalString } from "./args.js";
5
+ import { evaluateCommitments } from "./commitments.js";
6
+ import { maybeRefreshLocalIndex } from "./index-refresh.js";
7
+ import { tagAccountIds } from "./merge.js";
8
+ import { createTextResult } from "./results.js";
9
+ // get_brief: what changed since the last brief, from the local index: new mail (people against automatic), what waits
10
+ // for your reply, replies you wait for, and mail that looks written to steer an AI. Taking it with markSeen moves
11
+ // the "since" mark, so a daily run only reports the day.
12
+ export async function handleBriefTool(name, args, ctx) {
13
+ if (name !== "get_brief")
14
+ throw new Error(`Unknown brief tool: ${name}`);
15
+ const { primaryBundle, selectedBundles, slugForBundle, evaluateReminders } = ctx;
16
+ const store = new BriefStore(primaryBundle.account.dataDir);
17
+ const state = await store.read();
18
+ const now = new Date();
19
+ const sinceArg = optionalString(args, "since");
20
+ if (sinceArg !== undefined && Number.isNaN(Date.parse(sinceArg)))
21
+ throw new Error("since must be a date or a time, for example 2026-10-22T08:00:00Z.");
22
+ const since = sinceArg ?? state.lastAt ?? new Date(now.getTime() - 24 * 3_600_000).toISOString();
23
+ const limit = normalizeLimit(args.limit, 5, 1, 50);
24
+ const bundles = selectedBundles(args);
25
+ const perAccount = await Promise.all(bundles.map(async (bundle) => {
26
+ await maybeRefreshLocalIndex(bundle.imapService, bundle.localIndexService, { force: normalizeBoolean(args.syncBefore, false), folder: "INBOX", limitPerFolder: 100 });
27
+ const slug = slugForBundle(bundle);
28
+ const digest = await bundle.localIndexService.getInboxDigest({ limit });
29
+ const fresh = await bundle.localIndexService.search({ folder: "INBOX", dateFrom: since, limit: 200 });
30
+ return {
31
+ slug,
32
+ needsReply: tagAccountIds(slug, (digest.staleAwaitingYou ?? [])).concat(tagAccountIds(slug, (digest.topThreads ?? [])).filter((t) => t.pendingOn === "you")),
33
+ emails: fresh.emails.map((email) => ({ ...email, id: withAccountPrefix(slug, email.id) })),
34
+ };
35
+ }));
36
+ const needsReply = [...new Map(perAccount.flatMap((entry) => entry.needsReply).map((thread) => [thread.id, thread])).values()]
37
+ .sort((a, b) => b.score - a.score)
38
+ .slice(0, limit);
39
+ const emails = perAccount.flatMap((entry) => entry.emails);
40
+ const people = emails.filter((email) => email.isAutomated !== true);
41
+ const senderCounts = new Map();
42
+ for (const email of people) {
43
+ const sender = email.from[0]?.address ?? "";
44
+ if (sender)
45
+ senderCounts.set(sender, (senderCounts.get(sender) ?? 0) + 1);
46
+ }
47
+ const flagged = emails
48
+ .map((email) => ({ email, risk: assessMail({ from: email.from, replyTo: email.replyTo, subject: email.subject, text: email.preview, automated: email.isAutomated }) }))
49
+ .filter((entry) => entry.risk.level === "high")
50
+ .map(({ email, risk }) => ({ id: email.id, from: email.from[0]?.address ?? "", subject: email.subject, level: risk.level, reasons: risk.reasons }));
51
+ const own = ctx.accountManager.all().map((entry) => entry.account.address);
52
+ const commitments = (await Promise.all(bundles.map(async (bundle) => (await evaluateCommitments(bundle, own, "open", (id) => withAccountPrefix(slugForBundle(bundle), id))).filter((item) => item.state === "overdue" || item.state === "due-today")))).flat();
53
+ const reminders = (await evaluateReminders(bundles)).filter((reminder) => reminder.state === "due");
54
+ const brief = {
55
+ since,
56
+ generatedAt: now.toISOString(),
57
+ newMail: {
58
+ total: emails.length,
59
+ fromPeople: people.length,
60
+ automated: emails.length - people.length,
61
+ topSenders: [...senderCounts.entries()].sort((a, b) => b[1] - a[1]).slice(0, 3).map(([sender]) => sender),
62
+ },
63
+ needsReply: needsReply.map((thread) => ({ id: thread.latestEmailId, threadId: thread.id, subject: thread.subject, from: thread.latestFrom?.[0]?.address ?? "", ageHours: undefined })),
64
+ waitingOnOthers: reminders.map((reminder) => ({ id: reminder.emailId, subject: reminder.subject, to: reminder.to?.[0], daysOverdue: reminder.daysOverdue })),
65
+ flagged,
66
+ commitments: commitments.map((item) => ({ text: item.text, direction: item.direction, due: item.due, overdue: item.state === "overdue" })),
67
+ };
68
+ const lines = briefLines(brief);
69
+ if (normalizeBoolean(args.markSeen, false))
70
+ await store.markSeen(brief.generatedAt);
71
+ return createTextResult({ ...brief, text: lines });
72
+ }
73
+ //# sourceMappingURL=brief.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brief.js","sourceRoot":"","sources":["../../src/tools/brief.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { AccountBundle } from "../services/account-manager.js";
2
+ import type { ToolContext } from "./context.js";
3
+ import type { ToolResult } from "./results.js";
4
+ export declare function evaluateCommitments(bundle: AccountBundle, own: string[], status: "open" | "done" | "dismissed" | "all", idFor: (id: string) => string): Promise<{
5
+ id: string;
6
+ direction: import("../services/commitment-service.js").CommitmentDirection;
7
+ text: string;
8
+ state: string;
9
+ due?: string | undefined;
10
+ daysOverdue?: number | undefined;
11
+ with?: string | undefined;
12
+ emailId?: string | undefined;
13
+ threadMovedAt?: string | undefined;
14
+ }[]>;
15
+ export declare function handleCommitmentTool(name: string, args: Record<string, unknown>, ctx: ToolContext): Promise<ToolResult>;
16
+ //# sourceMappingURL=commitments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commitments.d.ts","sourceRoot":"","sources":["../../src/tools/commitments.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AASpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAU/C,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM;;;;;;;;;;KA8B3J;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAkG7H"}
@@ -0,0 +1,145 @@
1
+ import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
2
+ import { extractCommitments } from "../utils/commitment-phrases.js";
3
+ import { normalizeLimit } from "../utils/helpers.js";
4
+ import { withAudit } from "./audit.js";
5
+ import { optionalString, requireString } from "./args.js";
6
+ import { maybeRefreshLocalIndex } from "./index-refresh.js";
7
+ import { createTextResult } from "./results.js";
8
+ // find_commitments / set_commitment / list_commitments: a ledger of what you promised and what was promised to you.
9
+ // The server finds the sentences that look like promises (with the date they name) and keeps the ledger; the
10
+ // assistant confirms which are real. Listing says which open ones are overdue, and which probably settled because the
11
+ // thread moved on.
12
+ const FETCH_BATCH = 6;
13
+ const todayUtc = (now) => now.toISOString().slice(0, 10);
14
+ export async function evaluateCommitments(bundle, own, status, idFor) {
15
+ const now = new Date();
16
+ const today = todayUtc(now);
17
+ const items = (await bundle.commitmentService.list()).filter((item) => status === "all" || item.status === status);
18
+ return Promise.all(items.map(async (item) => {
19
+ let moved;
20
+ if (item.status === "open" && item.messageId) {
21
+ // Mine: I wrote again in the thread. Theirs: they did. Either way the promise has probably been kept.
22
+ const later = item.direction === "mine"
23
+ ? await bundle.localIndexService.getRepliesSince(item.messageId, item.createdAt, [], own)
24
+ : await bundle.localIndexService.getRepliesSince(item.messageId, item.createdAt, own, item.with ? [item.with] : undefined);
25
+ moved = later[0] ? later[0].internalDate || later[0].date : undefined;
26
+ }
27
+ const overdue = item.status === "open" && !moved && item.due !== undefined && item.due < today;
28
+ const state = item.status !== "open" ? item.status : moved ? "probably-done" : overdue ? "overdue" : item.due === today ? "due-today" : "open";
29
+ return {
30
+ id: item.id,
31
+ direction: item.direction,
32
+ text: item.text,
33
+ state,
34
+ ...(item.due ? { due: item.due } : {}),
35
+ ...(overdue ? { daysOverdue: Math.floor((Date.parse(today) - Date.parse(item.due)) / 86_400_000) } : {}),
36
+ ...(item.with ? { with: item.with } : {}),
37
+ ...(item.emailId ? { emailId: idFor(item.emailId) } : {}),
38
+ ...(moved ? { threadMovedAt: moved } : {}),
39
+ };
40
+ }));
41
+ }
42
+ export async function handleCommitmentTool(name, args, ctx) {
43
+ const { resolveAccountArg, primaryBundle, prefixedIdFor, resolveAccountForEmailId, accountManager } = ctx;
44
+ const bundle = resolveAccountArg(args) ?? primaryBundle;
45
+ const ledger = bundle.commitmentService;
46
+ const own = accountManager.all().map((entry) => entry.account.address);
47
+ switch (name) {
48
+ case "find_commitments": {
49
+ const days = normalizeLimit(args.days, 7, 1, 60);
50
+ const limit = normalizeLimit(args.limit, 10, 1, 100);
51
+ const direction = args.direction === "mine" || args.direction === "theirs" ? args.direction : "both";
52
+ await maybeRefreshLocalIndex(bundle.imapService, bundle.localIndexService, { force: false, folder: "INBOX", limitPerFolder: 100 });
53
+ const now = new Date();
54
+ const dateFrom = new Date(now.getTime() - days * 86_400_000).toISOString();
55
+ const known = await ledger.knownMessageIds();
56
+ const sources = [];
57
+ if (direction !== "theirs")
58
+ sources.push({ folder: "Sent", direction: "mine" });
59
+ if (direction !== "mine")
60
+ sources.push({ folder: "INBOX", direction: "theirs" });
61
+ // Which messages to read: the newest of each source, up to `limit` in all, none already in the ledger.
62
+ const toRead = [];
63
+ for (const source of sources) {
64
+ const found = await bundle.localIndexService.search({ folder: source.folder, dateFrom, limit: limit * 2 });
65
+ for (const email of found.emails) {
66
+ if (toRead.length >= limit)
67
+ break;
68
+ if (source.direction === "theirs" && email.isAutomated === true)
69
+ continue;
70
+ if (email.messageId && known.has(email.messageId))
71
+ continue;
72
+ toRead.push({ email, direction: source.direction });
73
+ }
74
+ }
75
+ const looked = toRead.length;
76
+ const candidates = [];
77
+ // A few at a time: each message is a round trip to Bridge, and one after the other they outlast a client's timeout.
78
+ for (let start = 0; start < toRead.length; start += FETCH_BATCH) {
79
+ const batch = toRead.slice(start, start + FETCH_BATCH);
80
+ const details = await Promise.all(batch.map(({ email }) => bundle.imapService.getEmailById(email.id).catch(() => undefined)));
81
+ details.forEach((detail, index) => {
82
+ const { email, direction: side } = batch[index];
83
+ if (!detail?.text)
84
+ return;
85
+ for (const hit of extractCommitments(detail.text, now)) {
86
+ candidates.push({
87
+ emailId: prefixedIdFor(bundle, email.id),
88
+ messageId: email.messageId,
89
+ direction: side,
90
+ with: (side === "mine" ? email.to[0]?.address : email.from[0]?.address) ?? "",
91
+ subject: email.subject,
92
+ sentence: hit.sentence,
93
+ ...(hit.due ? { due: hit.due } : {}),
94
+ });
95
+ }
96
+ });
97
+ }
98
+ return createTextResult({
99
+ account: bundle.account.address,
100
+ looked,
101
+ candidates,
102
+ next: "These sentences LOOK like promises; confirm with the user which are real, then set_commitment for each (text, direction, due, with, emailId). Nothing is recorded yet.",
103
+ });
104
+ }
105
+ case "set_commitment": {
106
+ const id = optionalString(args, "id");
107
+ if (id) {
108
+ const status = args.status;
109
+ if (status !== "done" && status !== "dismissed")
110
+ throw new McpError(ErrorCode.InvalidParams, 'To close a commitment pass status "done" or "dismissed".');
111
+ const closed = await withAudit(bundle.auditService, name, args, async () => ledger.close(id, status));
112
+ if (!closed)
113
+ throw new McpError(ErrorCode.InvalidParams, `No commitment ${id}.`);
114
+ return createTextResult({ account: bundle.account.address, commitment: closed });
115
+ }
116
+ let messageId = optionalString(args, "messageId");
117
+ let emailId = optionalString(args, "emailId");
118
+ let counterpart = optionalString(args, "with");
119
+ if (emailId) {
120
+ const resolved = resolveAccountForEmailId(emailId);
121
+ if (resolved.bundle !== bundle)
122
+ throw new McpError(ErrorCode.InvalidParams, "The message belongs to another account; pass that account.");
123
+ const detail = await bundle.imapService.getEmailById(resolved.rest);
124
+ messageId = messageId ?? detail.messageId;
125
+ emailId = detail.id;
126
+ counterpart = counterpart ?? (args.direction === "mine" ? detail.to[0]?.address : detail.from[0]?.address);
127
+ }
128
+ const item = await withAudit(bundle.auditService, name, args, async () => ledger.add({ direction: args.direction, text: requireString(args, "text"), due: optionalString(args, "due"), with: counterpart, emailId, messageId }));
129
+ return createTextResult({ account: bundle.account.address, commitment: item });
130
+ }
131
+ case "list_commitments": {
132
+ const status = args.status === "done" || args.status === "dismissed" || args.status === "all" ? args.status : "open";
133
+ const shown = await evaluateCommitments(bundle, own, status, (id) => prefixedIdFor(bundle, id));
134
+ const order = { overdue: 0, "due-today": 1, open: 2, "probably-done": 3, done: 4, dismissed: 5 };
135
+ shown.sort((a, b) => order[a.state] - order[b.state] || (a.due ?? "9").localeCompare(b.due ?? "9"));
136
+ return createTextResult({
137
+ account: bundle.account.address,
138
+ counts: { overdue: shown.filter((s) => s.state === "overdue").length, dueToday: shown.filter((s) => s.state === "due-today").length, total: shown.length },
139
+ commitments: shown,
140
+ });
141
+ }
142
+ }
143
+ throw new McpError(ErrorCode.MethodNotFound, `Unknown commitment tool: ${name}`);
144
+ }
145
+ //# sourceMappingURL=commitments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commitments.js","sourceRoot":"","sources":["../../src/tools/commitments.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import { AnalyticsService } from "../services/analytics-service.js";
2
2
  import { type SendEmailInput, type DraftRecord } from "../types/index.js";
3
3
  import { type ReplyReminderRecord } from "../services/reply-reminder-service.js";
4
+ import { MailTaint } from "../utils/mail-security.js";
4
5
  import type { AccountBundle, AccountManager } from "../services/account-manager.js";
5
6
  import type { ProtonMailConfig } from "../types/index.js";
6
7
  export declare function createToolContext(config: ProtonMailConfig, accountManager: AccountManager): {
8
+ taint: MailTaint;
7
9
  config: ProtonMailConfig;
8
10
  accountManager: AccountManager;
9
11
  primaryBundle: AccountBundle;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAQpE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAIjF,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc;;;;;;;;;;;;;;8BAkBvD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,aAAa,GAAG,SAAS;gCAmBjD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,MAAM,EAAE,KAAG;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE;4BAiB5F,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,aAAa,EAAE;8BAMvC,aAAa,UAAU,mBAAmB;;;;;;;;;;;iCAOjC,aAAa,EAAE;;;;;;;;;;;;;;;+BAyBzB,MAAM,EAAE;wCAIG,MAAM,KAAG;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;4BAU5D,aAAa,SAAS,MAAM,KAAG,MAAM;sBAS3C,CAAC,SAAS,MAAM,UAAU,aAAa,UAAU,CAAC,KAAG,CAAC;;;;;;;;;;;;;2BAsBjD,aAAa,KAAG,MAAM,GAAG,SAAS;qCAOxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAAM;4BAe9D,aAAa,WACZ,cAAc,qBACJ,MAAM,YACf,MAAM,YACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;mBA4BV,CAAC,SAAS,WAAW,UAAU,aAAa,SAAS,CAAC,KAAG,CAAC;EA8CjF;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAQpE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAIjF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc;;;;;;;;;;;;;;;8BAkBvD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,aAAa,GAAG,SAAS;gCAmBjD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,MAAM,EAAE,KAAG;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE;4BAiB5F,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,aAAa,EAAE;8BAMvC,aAAa,UAAU,mBAAmB;;;;;;;;;;;iCAOjC,aAAa,EAAE;;;;;;;;;;;;;;;+BAyBzB,MAAM,EAAE;wCAIG,MAAM,KAAG;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;4BAU5D,aAAa,SAAS,MAAM,KAAG,MAAM;sBAS3C,CAAC,SAAS,MAAM,UAAU,aAAa,UAAU,CAAC,KAAG,CAAC;;;;;;;;;;;;;2BAsBjD,aAAa,KAAG,MAAM,GAAG,SAAS;qCAOxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAAM;4BAe9D,aAAa,WACZ,cAAc,qBACJ,MAAM,YACf,MAAM,YACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;mBA4BV,CAAC,SAAS,WAAW,UAAU,aAAa,SAAS,CAAC,KAAG,CAAC;EAiDjF;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -8,6 +8,7 @@ import { withAudit } from "./audit.js";
8
8
  import { splitAccountPrefix, withAccountPrefix } from "../utils/helpers.js";
9
9
  import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
10
10
  import { optionalString } from "./args.js";
11
+ import { MailTaint } from "../utils/mail-security.js";
11
12
  export function createToolContext(config, accountManager) {
12
13
  const primaryBundle = accountManager.primary();
13
14
  const smtpService = primaryBundle.smtpService;
@@ -183,7 +184,9 @@ export function createToolContext(config, accountManager) {
183
184
  : draft.remoteDraft,
184
185
  };
185
186
  }
187
+ const taint = new MailTaint();
186
188
  return {
189
+ taint,
187
190
  config,
188
191
  accountManager,
189
192
  primaryBundle,
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,kHAAkH;AAClH,oHAAoH;AACpH,iHAAiH;AACjH,6DAA6D;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAI3C,MAAM,UAAU,iBAAiB,CAAC,MAAwB,EAAE,cAA8B;IACxF,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC;IAC/C,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC;IAC9C,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC;IAC9C,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAChD,MAAM,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC;IAChD,MAAM,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAC;IAC1D,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC;IAC5C,MAAM,qBAAqB,GAAG,aAAa,CAAC,qBAAqB,CAAC;IAClE,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC;IAChE,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC;IAClD,MAAM,eAAe,GAAG,aAAa,CAAC,eAAe,CAAC;IAEtD,qFAAqF;IACrF,uFAAuF;IACvF,8EAA8E;IAC9E,sFAAsF;IACtF,sFAAsF;IACtF,SAAS,iBAAiB,CAAC,IAA6B;QACtD,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,cAAc;aACzB,GAAG,EAAE;aACL,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC;QACrH,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpH,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,oBAAoB,GAAG,2BAA2B,KAAK,GAAG,CAAC,CAAC;QAC1G,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+GAA+G;IAC/G,6GAA6G;IAC7G,iHAAiH;IACjH,SAAS,mBAAmB,CAAC,IAA6B,EAAE,GAAG,KAAe;QAC5E,IAAI,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC/B,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,IAAI,EAAE,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC;YACzF,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,KAAK,GAAG,cAAc,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;gBAC1D,IAAI,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;oBAC/B,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,oEAAoE,CAAC,CAAC;gBACpH,CAAC;gBACD,MAAM,GAAG,KAAK,CAAC;YACjB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC3D,CAAC;IAED,iGAAiG;IACjG,SAAS,eAAe,CAAC,IAA6B;QACpD,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;IAC5C,CAAC;IAED,uFAAuF;IACvF,SAAS,eAAe,CAAC,MAAqB,EAAE,MAA2B;QACzE,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACjH,CAAC;IAED,gHAAgH;IAChH,kDAAkD;IAClD,KAAK,UAAU,iBAAiB,CAAC,OAAwB;QACvD,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;YACzD,OAAO,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC3B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnH,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClJ,MAAM,KAAK,GAAmC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;gBAClI,OAAO;oBACL,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;oBAClC,KAAK;oBACL,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjH,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvG,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QACF,OAAO,UAAU,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,gFAAgF;IAChF,SAAS,mBAAmB;QAC1B,OAAO,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IAED,SAAS,wBAAwB,CAAC,OAAe;QAC/C,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,OAAO,EAAE,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC;QAC5F,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;IACvE,CAAC;IAED,mFAAmF;IACnF,+EAA+E;IAC/E,uFAAuF;IACvF,uFAAuF;IACvF,mDAAmD;IACnD,SAAS,aAAa,CAAC,MAAqB,EAAE,KAAa;QACzD,OAAO,iBAAiB,CACtB,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAC/F,KAAK,CACN,CAAC;IACJ,CAAC;IAED,kHAAkH;IAClH,2EAA2E;IAC3E,SAAS,eAAe,CAAmB,MAAqB,EAAE,MAAS;QACzE,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,EAA6B,CAAC;QACtD,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACnF,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAW,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,IAAS,CAAC;IACnB,CAAC;IAED,8EAA8E;IAC9E,oFAAoF;IACpF,4EAA4E;IAC5E,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;IAC1D,kFAAkF;IAClF,qFAAqF;IACrF,mFAAmF;IACnF,kFAAkF;IAClF,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;IAC1D,MAAM,yBAAyB,GAAG,wBAAwB,CAAC;IAE3D,4EAA4E;IAC5E,8EAA8E;IAC9E,0DAA0D;IAC1D,SAAS,YAAY,CAAC,MAAqB;QACzC,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IACzG,CAAC;IAED,qFAAqF;IACrF,gFAAgF;IAChF,iEAAiE;IACjE,SAAS,wBAAwB,CAAC,IAA6B;QAC7D,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACzC,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;YACrE,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,yDAAyD,CAAC,CAAC;QACzG,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,sFAAsF;IACtF,qFAAqF;IACrF,sDAAsD;IACtD,KAAK,UAAU,aAAa,CAC1B,MAAqB,EACrB,OAAuB,EACvB,iBAAyB,EACzB,QAAgB,EAChB,QAAiC,EACjC,KAAK,GAA4B,EAAE;QAEnC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7E,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,CAC1E,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAClE,CAAC;QACF,OAAO,gBAAgB,CAAC;YACtB,MAAM,EAAE,IAAI;YACZ,EAAE,EAAE,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;YACtD,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,KAAK;YACR,IAAI,EAAE,gCAAgC,iBAAiB,kKAAkK;SAC1N,CAAC,CAAC;IACL,CAAC;IAED,+EAA+E;IAC/E,oFAAoF;IACpF,oDAAoD;IACpD,MAAM,aAAa,GAAG,YAAY,CAAC;IAEnC,mFAAmF;IACnF,4EAA4E;IAC5E,yEAAyE;IACzE,iFAAiF;IACjF,gFAAgF;IAChF,oFAAoF;IACpF,iFAAiF;IACjF,2DAA2D;IAC3D,SAAS,YAAY,CAAwB,MAAqB,EAAE,KAAQ;QAC1E,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO;YACL,GAAG,KAAK;YACR,EAAE,EAAE,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YACrC,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,OAAO;gBACrC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;gBACvF,CAAC,CAAC,KAAK,CAAC,WAAW;SACtB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM;QACN,cAAc;QACd,aAAa;QACb,WAAW;QACX,WAAW;QACX,gBAAgB;QAChB,YAAY;QACZ,iBAAiB;QACjB,UAAU;QACV,qBAAqB;QACrB,oBAAoB;QACpB,aAAa;QACb,eAAe;QACf,iBAAiB;QACjB,mBAAmB;QACnB,eAAe;QACf,eAAe;QACf,iBAAiB;QACjB,mBAAmB;QACnB,wBAAwB;QACxB,aAAa;QACb,eAAe;QACf,wBAAwB;QACxB,wBAAwB;QACxB,yBAAyB;QACzB,YAAY;QACZ,wBAAwB;QACxB,aAAa;QACb,aAAa;QACb,YAAY;KACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"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"}