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.
- package/README.md +39 -7
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +49 -2
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +56 -12
- package/dist/index.js.map +1 -1
- package/dist/scripts/install-claude-desktop.d.ts.map +1 -1
- package/dist/scripts/install-claude-desktop.js +13 -13
- package/dist/scripts/install-claude-desktop.js.map +1 -1
- package/dist/services/account-manager.d.ts +4 -0
- package/dist/services/account-manager.d.ts.map +1 -1
- package/dist/services/account-manager.js +6 -0
- package/dist/services/account-manager.js.map +1 -1
- package/dist/services/autoresponder-service.d.ts +1 -1
- package/dist/services/autoresponder-service.d.ts.map +1 -1
- package/dist/services/autoresponder-service.js +4 -0
- package/dist/services/autoresponder-service.js.map +1 -1
- package/dist/services/brief-service.d.ts +42 -0
- package/dist/services/brief-service.d.ts.map +1 -0
- package/dist/services/brief-service.js +47 -0
- package/dist/services/brief-service.js.map +1 -0
- package/dist/services/commitment-service.d.ts +39 -0
- package/dist/services/commitment-service.d.ts.map +1 -0
- package/dist/services/commitment-service.js +83 -0
- package/dist/services/commitment-service.js.map +1 -0
- package/dist/services/triage-plan-service.d.ts +56 -0
- package/dist/services/triage-plan-service.d.ts.map +1 -0
- package/dist/services/triage-plan-service.js +83 -0
- package/dist/services/triage-plan-service.js.map +1 -0
- package/dist/tools/args.d.ts +2 -0
- package/dist/tools/args.d.ts.map +1 -1
- package/dist/tools/args.js +16 -0
- package/dist/tools/args.js.map +1 -1
- package/dist/tools/brief.d.ts +4 -0
- package/dist/tools/brief.d.ts.map +1 -0
- package/dist/tools/brief.js +73 -0
- package/dist/tools/brief.js.map +1 -0
- package/dist/tools/commitments.d.ts +16 -0
- package/dist/tools/commitments.d.ts.map +1 -0
- package/dist/tools/commitments.js +145 -0
- package/dist/tools/commitments.js.map +1 -0
- package/dist/tools/context.d.ts +2 -0
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +3 -0
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/definitions.d.ts +271 -0
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +123 -0
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/drafts.js +14 -14
- package/dist/tools/drafts.js.map +1 -1
- package/dist/tools/reading.d.ts.map +1 -1
- package/dist/tools/reading.js +77 -23
- package/dist/tools/reading.js.map +1 -1
- package/dist/tools/rules-runner.d.ts.map +1 -1
- package/dist/tools/rules-runner.js +4 -1
- package/dist/tools/rules-runner.js.map +1 -1
- package/dist/tools/sending.js +11 -11
- package/dist/tools/sending.js.map +1 -1
- package/dist/tools/style.d.ts +4 -0
- package/dist/tools/style.d.ts.map +1 -0
- package/dist/tools/style.js +94 -0
- package/dist/tools/style.js.map +1 -0
- package/dist/tools/triage.d.ts +4 -0
- package/dist/tools/triage.d.ts.map +1 -0
- package/dist/tools/triage.js +197 -0
- package/dist/tools/triage.js.map +1 -0
- package/dist/utils/commitment-phrases.d.ts +10 -0
- package/dist/utils/commitment-phrases.d.ts.map +1 -0
- package/dist/utils/commitment-phrases.js +118 -0
- package/dist/utils/commitment-phrases.js.map +1 -0
- package/dist/utils/mail-security.d.ts +34 -0
- package/dist/utils/mail-security.d.ts.map +1 -0
- package/dist/utils/mail-security.js +173 -0
- package/dist/utils/mail-security.js.map +1 -0
- package/dist/utils/schedule-templates.d.ts +2 -0
- package/dist/utils/schedule-templates.d.ts.map +1 -1
- package/dist/utils/schedule-templates.js +20 -17
- package/dist/utils/schedule-templates.js.map +1 -1
- package/dist/utils/style-profile.d.ts +29 -0
- package/dist/utils/style-profile.d.ts.map +1 -0
- package/dist/utils/style-profile.js +125 -0
- package/dist/utils/style-profile.js.map +1 -0
- 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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"}
|
package/dist/tools/context.d.ts
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/tools/context.js
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"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"}
|