@rndmjoker/proton-mcp 0.4.13 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +138 -21
  2. package/dist/browser/channel.d.ts +76 -0
  3. package/dist/browser/channel.js +162 -0
  4. package/dist/browser/channel.js.map +1 -0
  5. package/dist/browser/client.d.ts +50 -0
  6. package/dist/browser/client.js +284 -0
  7. package/dist/browser/client.js.map +1 -0
  8. package/dist/browser/connector.d.ts +15 -0
  9. package/dist/browser/connector.js +26 -0
  10. package/dist/browser/connector.js.map +1 -0
  11. package/dist/browser/host.d.ts +50 -0
  12. package/dist/browser/host.js +258 -0
  13. package/dist/browser/host.js.map +1 -0
  14. package/dist/browser/messages.d.ts +163 -0
  15. package/dist/browser/messages.js +338 -0
  16. package/dist/browser/messages.js.map +1 -0
  17. package/dist/browser/paths.d.ts +51 -0
  18. package/dist/browser/paths.js +92 -0
  19. package/dist/browser/paths.js.map +1 -0
  20. package/dist/browser/setup.d.ts +42 -0
  21. package/dist/browser/setup.js +170 -0
  22. package/dist/browser/setup.js.map +1 -0
  23. package/dist/filters/order.d.ts +66 -0
  24. package/dist/filters/order.js +108 -0
  25. package/dist/filters/order.js.map +1 -0
  26. package/dist/filters/sieve.d.ts +184 -0
  27. package/dist/filters/sieve.js +1312 -0
  28. package/dist/filters/sieve.js.map +1 -0
  29. package/dist/instances.d.ts +58 -0
  30. package/dist/instances.js +145 -0
  31. package/dist/instances.js.map +1 -0
  32. package/dist/mail/compose.d.ts +10 -0
  33. package/dist/mail/compose.js.map +1 -1
  34. package/dist/mail/record.d.ts +36 -0
  35. package/dist/mail/record.js +74 -0
  36. package/dist/mail/record.js.map +1 -0
  37. package/dist/permissions.d.ts +139 -0
  38. package/dist/permissions.js +355 -0
  39. package/dist/permissions.js.map +1 -0
  40. package/dist/server.js +330 -16
  41. package/dist/server.js.map +1 -1
  42. package/dist/session.d.ts +12 -0
  43. package/dist/session.js +23 -0
  44. package/dist/session.js.map +1 -1
  45. package/dist/settings.d.ts +81 -11
  46. package/dist/settings.js +160 -25
  47. package/dist/settings.js.map +1 -1
  48. package/dist/tools/confirm.d.ts +4 -2
  49. package/dist/tools/confirm.js +12 -3
  50. package/dist/tools/confirm.js.map +1 -1
  51. package/dist/tools/failures.d.ts +6 -8
  52. package/dist/tools/failures.js +36 -17
  53. package/dist/tools/failures.js.map +1 -1
  54. package/dist/tools/filter-tools.d.ts +82 -0
  55. package/dist/tools/filter-tools.js +729 -0
  56. package/dist/tools/filter-tools.js.map +1 -0
  57. package/dist/tools/filters.d.ts +8 -1
  58. package/dist/tools/filters.js +24 -12
  59. package/dist/tools/filters.js.map +1 -1
  60. package/dist/tools/format.d.ts +15 -0
  61. package/dist/tools/format.js +4 -3
  62. package/dist/tools/format.js.map +1 -1
  63. package/dist/tools/guidance.js +12 -7
  64. package/dist/tools/guidance.js.map +1 -1
  65. package/dist/tools/interface.d.ts +20 -6
  66. package/dist/tools/interface.js +40 -16
  67. package/dist/tools/interface.js.map +1 -1
  68. package/dist/tools/send.d.ts +9 -0
  69. package/dist/tools/send.js +51 -9
  70. package/dist/tools/send.js.map +1 -1
  71. package/dist/tools/sign-in-required.d.ts +15 -2
  72. package/dist/tools/sign-in-required.js +30 -2
  73. package/dist/tools/sign-in-required.js.map +1 -1
  74. package/dist/web/layout.d.ts +12 -5
  75. package/dist/web/layout.js +32 -9
  76. package/dist/web/layout.js.map +1 -1
  77. package/dist/web/pages.d.ts +4 -2
  78. package/dist/web/pages.js +10 -9
  79. package/dist/web/pages.js.map +1 -1
  80. package/dist/web/pending.d.ts +9 -6
  81. package/dist/web/pending.js +9 -7
  82. package/dist/web/pending.js.map +1 -1
  83. package/dist/web/preview-server.d.ts +33 -0
  84. package/dist/web/preview-server.js +102 -0
  85. package/dist/web/preview-server.js.map +1 -0
  86. package/dist/web/sections.d.ts +86 -1
  87. package/dist/web/sections.js +290 -7
  88. package/dist/web/sections.js.map +1 -1
  89. package/dist/web/security.d.ts +48 -13
  90. package/dist/web/security.js +68 -16
  91. package/dist/web/security.js.map +1 -1
  92. package/dist/web/server.d.ts +81 -24
  93. package/dist/web/server.js +478 -117
  94. package/dist/web/server.js.map +1 -1
  95. package/package.json +1 -1
@@ -1,11 +1,17 @@
1
1
  /**
2
2
  * Settings the user can change while the server runs.
3
3
  *
4
- * Only the Bridge ports, and that is the whole point of the file: the Bridge
5
- * lets you change them, they are the setting most likely to be wrong, and
6
- * getting them wrong looks exactly like a Bridge that is not running. Editing an
7
- * environment variable in a client's configuration and restarting is a poor way
8
- * to find that out.
4
+ * One file for every running server. Each client session starts its own server,
5
+ * and until 2026-11-05 a setting changed in one interface held for that one
6
+ * server only. Now the interface has one fixed address, the first server to
7
+ * start serves it, and every server watches this file, so a change applies to
8
+ * all of them at once.
9
+ *
10
+ * What lives here: the Bridge ports, the PIN that guards changes, what the
11
+ * assistant may do per tool and within which bounds, what a filter from it may
12
+ * do beyond filing and flags, a recipient added to every message sent, and a
13
+ * counter that tells every server to reread the stored credentials after a
14
+ * sign-in or a sign-out somewhere else.
9
15
  *
10
16
  * **The host is deliberately not settable here.** It stays with the environment,
11
17
  * where changing it is a conscious act. A host field in a web form is a field
@@ -16,6 +22,27 @@
16
22
  * it, and having a stored value silently override it would make their setting a
17
23
  * lie.
18
24
  */
25
+ import type { StoredPin } from './web/security.js';
26
+ import { type Unlockable } from './filters/sieve.js';
27
+ /** What the assistant may do with one tool. */
28
+ export type Level = 'off' | 'ask' | 'act';
29
+ /**
30
+ * Bounds on sending without asking. Every one of them is optional, and a send
31
+ * outside a bound asks rather than failing.
32
+ */
33
+ export interface SendLimits {
34
+ /** Addresses or domains (written as "@example.com") that may be sent to. */
35
+ allowed?: string[];
36
+ /** How many messages may go out without asking per rolling hour. */
37
+ maxPerHour?: number;
38
+ /** The last day, YYYY-MM-DD, on which sending without asking applies. */
39
+ until?: string;
40
+ }
41
+ /** One recipient added to every message this server sends. */
42
+ export interface RecordCopy {
43
+ address: string;
44
+ mode: 'cc' | 'bcc';
45
+ }
19
46
  export interface StoredSettings {
20
47
  imapPort?: number;
21
48
  smtpPort?: number;
@@ -28,25 +55,68 @@ export interface StoredSettings {
28
55
  * `unofficial` mark beside the name stays whatever this says.
29
56
  */
30
57
  noticeDismissed?: boolean;
58
+ /** The PIN every change in the interface asks for. Absent means none is set. */
59
+ pin?: StoredPin;
60
+ /**
61
+ * Raised by the server that showed the interface whenever somebody signed in
62
+ * or out there. Every other server rereads the stored credentials when it
63
+ * sees the number change.
64
+ */
65
+ credentialsGeneration?: number;
66
+ /** Per tool name, where it departs from the default. */
67
+ levels?: Record<string, Level>;
68
+ limits?: SendLimits;
69
+ record?: RecordCopy;
70
+ /** What a filter from an assistant may do beyond filing and flags. Absent means nothing more. */
71
+ filterActions?: Unlockable[];
31
72
  }
32
73
  /** Where the settings live. Next to the credentials, under the user's own data. */
33
74
  export declare function settingsPath(env?: NodeJS.ProcessEnv): string;
34
75
  /** True for something that can be an IMAP or SMTP port. */
35
76
  export declare function isPort(value: unknown): value is number;
77
+ /**
78
+ * Keeps what has the right shape and drops the rest, field by field.
79
+ *
80
+ * Exported for the tests and for anything that receives settings from
81
+ * somewhere other than this file. Whether a tool name exists is not decided
82
+ * here: an entry for a tool a later version removed must not break the file.
83
+ */
84
+ export declare function sanitise(candidate: Record<string, unknown>): StoredSettings;
36
85
  /**
37
86
  * Reads the stored settings.
38
87
  *
39
88
  * A missing, unreadable or broken file yields no settings rather than an error:
40
- * these are conveniences, and none of them is worth refusing to start over.
41
- * Values that are not ports are dropped individually, so one bad entry does not
42
- * discard a good one.
89
+ * none of them is worth refusing to start over, and every one has a default
90
+ * that is today's behaviour. Values of the wrong shape are dropped
91
+ * individually, so one bad entry does not discard a good one.
43
92
  */
44
93
  export declare function loadSettings(path?: string): Promise<StoredSettings>;
45
94
  /**
46
95
  * Writes the settings.
47
96
  *
48
- * Mode 600 like everything else this server puts on disk. Port numbers are not
49
- * secret, but a directory of mixed permissions is how the file that does matter
50
- * ends up readable one day.
97
+ * Mode 600 like everything else this server puts on disk: the file holds the
98
+ * hash of the PIN now, and a directory of mixed permissions is how the file that
99
+ * does matter ends up readable one day.
100
+ *
101
+ * Written to a neighbouring file and renamed into place, because several
102
+ * servers read this file whenever it changes. A rename is atomic on the same
103
+ * file system, so a reader sees the old settings or the new ones and never half
104
+ * of each.
51
105
  */
52
106
  export declare function saveSettings(settings: StoredSettings, path?: string): Promise<void>;
107
+ /**
108
+ * Changes some settings and keeps the rest as they are on disk.
109
+ *
110
+ * Reads first rather than writing a copy held in memory: another server may
111
+ * have written since, and the copy would quietly undo that.
112
+ */
113
+ export declare function updateSettings(change: (current: StoredSettings) => StoredSettings, path?: string): Promise<StoredSettings>;
114
+ /**
115
+ * Calls `onChange` with the settings whenever the file changes.
116
+ *
117
+ * Watches the directory rather than the file, because the file is replaced by a
118
+ * rename on every write, and a watch on the old file would see nothing after
119
+ * the first change. Bursts are collected for a moment so one write leads to one
120
+ * call. Returns a function that stops watching.
121
+ */
122
+ export declare function watchSettings(onChange: (settings: StoredSettings) => void, path?: string, delayMs?: number): () => void;
package/dist/settings.js CHANGED
@@ -1,11 +1,17 @@
1
1
  /**
2
2
  * Settings the user can change while the server runs.
3
3
  *
4
- * Only the Bridge ports, and that is the whole point of the file: the Bridge
5
- * lets you change them, they are the setting most likely to be wrong, and
6
- * getting them wrong looks exactly like a Bridge that is not running. Editing an
7
- * environment variable in a client's configuration and restarting is a poor way
8
- * to find that out.
4
+ * One file for every running server. Each client session starts its own server,
5
+ * and until 2026-11-05 a setting changed in one interface held for that one
6
+ * server only. Now the interface has one fixed address, the first server to
7
+ * start serves it, and every server watches this file, so a change applies to
8
+ * all of them at once.
9
+ *
10
+ * What lives here: the Bridge ports, the PIN that guards changes, what the
11
+ * assistant may do per tool and within which bounds, what a filter from it may
12
+ * do beyond filing and flags, a recipient added to every message sent, and a
13
+ * counter that tells every server to reread the stored credentials after a
14
+ * sign-in or a sign-out somewhere else.
9
15
  *
10
16
  * **The host is deliberately not settable here.** It stays with the environment,
11
17
  * where changing it is a conscious act. A host field in a web form is a field
@@ -16,9 +22,11 @@
16
22
  * it, and having a stored value silently override it would make their setting a
17
23
  * lie.
18
24
  */
19
- import { readFile, writeFile, mkdir } from 'node:fs/promises';
20
- import { dirname, join } from 'node:path';
25
+ import { readFile, writeFile, mkdir, rename, rm } from 'node:fs/promises';
26
+ import { watch, mkdirSync } from 'node:fs';
27
+ import { basename, dirname, join } from 'node:path';
21
28
  import { homedir } from 'node:os';
29
+ import { UNLOCKABLE } from './filters/sieve.js';
22
30
  /** Where the settings live. Next to the credentials, under the user's own data. */
23
31
  export function settingsPath(env = process.env) {
24
32
  if (env.PROTON_MCP_SETTINGS_FILE)
@@ -29,13 +37,82 @@ export function settingsPath(env = process.env) {
29
37
  export function isPort(value) {
30
38
  return typeof value === 'number' && Number.isInteger(value) && value >= 1 && value <= 65535;
31
39
  }
40
+ const LEVELS = new Set(['off', 'ask', 'act']);
41
+ const TOOL_NAME = /^[a-z][a-z_]{1,63}$/;
42
+ const DAY = /^\d{4}-\d{2}-\d{2}$/;
43
+ /**
44
+ * Keeps what has the right shape and drops the rest, field by field.
45
+ *
46
+ * Exported for the tests and for anything that receives settings from
47
+ * somewhere other than this file. Whether a tool name exists is not decided
48
+ * here: an entry for a tool a later version removed must not break the file.
49
+ */
50
+ export function sanitise(candidate) {
51
+ const settings = {};
52
+ if (isPort(candidate.imapPort))
53
+ settings.imapPort = candidate.imapPort;
54
+ if (isPort(candidate.smtpPort))
55
+ settings.smtpPort = candidate.smtpPort;
56
+ // Only a literal true hides it. Anything else, including a string "true" from
57
+ // a hand-edited file, leaves the notice where it is.
58
+ if (candidate.noticeDismissed === true)
59
+ settings.noticeDismissed = true;
60
+ const pin = candidate.pin;
61
+ if (pin && typeof pin.salt === 'string' && typeof pin.hash === 'string' && pin.salt && pin.hash) {
62
+ settings.pin = { salt: pin.salt, hash: pin.hash };
63
+ }
64
+ const generation = candidate.credentialsGeneration;
65
+ if (typeof generation === 'number' && Number.isSafeInteger(generation) && generation >= 0) {
66
+ settings.credentialsGeneration = generation;
67
+ }
68
+ if (typeof candidate.levels === 'object' && candidate.levels !== null) {
69
+ const levels = {};
70
+ for (const [tool, level] of Object.entries(candidate.levels)) {
71
+ if (TOOL_NAME.test(tool) && typeof level === 'string' && LEVELS.has(level)) {
72
+ levels[tool] = level;
73
+ }
74
+ }
75
+ if (Object.keys(levels).length > 0)
76
+ settings.levels = levels;
77
+ }
78
+ if (typeof candidate.limits === 'object' && candidate.limits !== null) {
79
+ const raw = candidate.limits;
80
+ const limits = {};
81
+ if (Array.isArray(raw.allowed)) {
82
+ const allowed = raw.allowed.filter((entry) => typeof entry === 'string' && entry.length > 0 && entry.length < 255);
83
+ if (allowed.length > 0)
84
+ limits.allowed = allowed;
85
+ }
86
+ if (typeof raw.maxPerHour === 'number' && Number.isInteger(raw.maxPerHour) && raw.maxPerHour > 0) {
87
+ limits.maxPerHour = raw.maxPerHour;
88
+ }
89
+ if (typeof raw.until === 'string' && DAY.test(raw.until))
90
+ limits.until = raw.until;
91
+ if (Object.keys(limits).length > 0)
92
+ settings.limits = limits;
93
+ }
94
+ const record = candidate.record;
95
+ if (record &&
96
+ typeof record.address === 'string' &&
97
+ record.address.length > 0 &&
98
+ (record.mode === 'cc' || record.mode === 'bcc')) {
99
+ settings.record = { address: record.address, mode: record.mode };
100
+ }
101
+ // Names a later version no longer knows are dropped, one by one.
102
+ if (Array.isArray(candidate.filterActions)) {
103
+ const known = UNLOCKABLE.filter((action) => candidate.filterActions.includes(action));
104
+ if (known.length > 0)
105
+ settings.filterActions = known;
106
+ }
107
+ return settings;
108
+ }
32
109
  /**
33
110
  * Reads the stored settings.
34
111
  *
35
112
  * A missing, unreadable or broken file yields no settings rather than an error:
36
- * these are conveniences, and none of them is worth refusing to start over.
37
- * Values that are not ports are dropped individually, so one bad entry does not
38
- * discard a good one.
113
+ * none of them is worth refusing to start over, and every one has a default
114
+ * that is today's behaviour. Values of the wrong shape are dropped
115
+ * individually, so one bad entry does not discard a good one.
39
116
  */
40
117
  export async function loadSettings(path = settingsPath()) {
41
118
  let raw;
@@ -54,27 +131,85 @@ export async function loadSettings(path = settingsPath()) {
54
131
  }
55
132
  if (typeof parsed !== 'object' || parsed === null)
56
133
  return {};
57
- const candidate = parsed;
58
- const settings = {};
59
- if (isPort(candidate.imapPort))
60
- settings.imapPort = candidate.imapPort;
61
- if (isPort(candidate.smtpPort))
62
- settings.smtpPort = candidate.smtpPort;
63
- // Only a literal true hides it. Anything else, including a string "true" from
64
- // a hand-edited file, leaves the notice where it is.
65
- if (candidate.noticeDismissed === true)
66
- settings.noticeDismissed = true;
67
- return settings;
134
+ return sanitise(parsed);
68
135
  }
69
136
  /**
70
137
  * Writes the settings.
71
138
  *
72
- * Mode 600 like everything else this server puts on disk. Port numbers are not
73
- * secret, but a directory of mixed permissions is how the file that does matter
74
- * ends up readable one day.
139
+ * Mode 600 like everything else this server puts on disk: the file holds the
140
+ * hash of the PIN now, and a directory of mixed permissions is how the file that
141
+ * does matter ends up readable one day.
142
+ *
143
+ * Written to a neighbouring file and renamed into place, because several
144
+ * servers read this file whenever it changes. A rename is atomic on the same
145
+ * file system, so a reader sees the old settings or the new ones and never half
146
+ * of each.
75
147
  */
76
148
  export async function saveSettings(settings, path = settingsPath()) {
77
149
  await mkdir(dirname(path), { recursive: true, mode: 0o700 });
78
- await writeFile(path, `${JSON.stringify(settings, null, 2)}\n`, { mode: 0o600 });
150
+ const temporary = `${path}.${process.pid}.tmp`;
151
+ try {
152
+ await writeFile(temporary, `${JSON.stringify(settings, null, 2)}\n`, { mode: 0o600 });
153
+ await rename(temporary, path);
154
+ }
155
+ catch (error) {
156
+ await rm(temporary, { force: true });
157
+ throw error;
158
+ }
159
+ }
160
+ /**
161
+ * Changes some settings and keeps the rest as they are on disk.
162
+ *
163
+ * Reads first rather than writing a copy held in memory: another server may
164
+ * have written since, and the copy would quietly undo that.
165
+ */
166
+ export async function updateSettings(change, path = settingsPath()) {
167
+ const next = change(await loadSettings(path));
168
+ await saveSettings(next, path);
169
+ return next;
170
+ }
171
+ /**
172
+ * Calls `onChange` with the settings whenever the file changes.
173
+ *
174
+ * Watches the directory rather than the file, because the file is replaced by a
175
+ * rename on every write, and a watch on the old file would see nothing after
176
+ * the first change. Bursts are collected for a moment so one write leads to one
177
+ * call. Returns a function that stops watching.
178
+ */
179
+ export function watchSettings(onChange, path = settingsPath(), delayMs = 100) {
180
+ let watcher;
181
+ let timer;
182
+ const name = basename(path);
183
+ const reload = () => {
184
+ if (timer)
185
+ clearTimeout(timer);
186
+ timer = setTimeout(() => {
187
+ void loadSettings(path).then(onChange);
188
+ }, delayMs);
189
+ timer.unref();
190
+ };
191
+ try {
192
+ // Created here when missing, or the watch would have nothing to attach to
193
+ // and the first save by another server would go unnoticed.
194
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
195
+ watcher = watch(dirname(path), { persistent: false }, (_event, file) => {
196
+ // Some platforms leave the name out. Rereading then costs one read.
197
+ if (file === null || file === name)
198
+ reload();
199
+ });
200
+ watcher.on('error', () => {
201
+ // A directory that disappears ends the watch. The settings in memory stay
202
+ // as they were, which is the same as nobody having changed anything.
203
+ });
204
+ }
205
+ catch {
206
+ // Not watchable on this system. Settings then apply to the server that
207
+ // showed the interface and to every server started afterwards.
208
+ }
209
+ return () => {
210
+ if (timer)
211
+ clearTimeout(timer);
212
+ watcher?.close();
213
+ };
79
214
  }
80
215
  //# sourceMappingURL=settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAgBjC,mFAAmF;AACnF,MAAM,UAAU,YAAY,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IAC/D,IAAI,GAAG,CAAC,wBAAwB;QAAE,OAAO,GAAG,CAAC,wBAAwB,CAAA;IACrE,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,CAAC,CAAA;AAClE,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,KAAK,CAAA;AAC7F,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAI,GAAG,YAAY,EAAE;IACtD,IAAI,GAAW,CAAA;IACf,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,CAAA;IAE5D,MAAM,SAAS,GAAG,MAAiC,CAAA;IACnD,MAAM,QAAQ,GAAmB,EAAE,CAAA;IACnC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;QAAE,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAA;IACtE,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;QAAE,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAA;IACtE,8EAA8E;IAC9E,qDAAqD;IACrD,IAAI,SAAS,CAAC,eAAe,KAAK,IAAI;QAAE,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAA;IACvE,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAwB,EACxB,IAAI,GAAG,YAAY,EAAE;IAErB,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5D,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;AAClF,CAAC"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
@@ -101,9 +101,11 @@ export declare function clientCanConfirm(ctx: unknown): boolean;
101
101
  * a wall of them is how the answer became unreachable, and half a wall read
102
102
  * halfway is worse than a sentence that says where to look.
103
103
  */
104
- export declare function describeForConfirmation(draft: Draft, what: string, previewUrl?: string): string;
104
+ export declare function describeForConfirmation(draft: Draft, what: string, previewUrl?: string,
105
+ /** Why the question is asked although the tool may send on its own. */
106
+ heldBack?: string): string;
105
107
  /** The question, returned from the handler rather than pushed to the client. */
106
- export declare function confirmationRequest(draft: Draft, what: string, requestState: string, previewUrl?: string): InputRequiredResult;
108
+ export declare function confirmationRequest(draft: Draft, what: string, requestState: string, previewUrl?: string, heldBack?: string): InputRequiredResult;
107
109
  /** What the client sent back, if anything. */
108
110
  export declare function confirmationAnswer(ctx: unknown): 'missing' | 'yes' | 'no';
109
111
  /** The sealed state from a previous round, already verified by the SDK. */
@@ -140,13 +140,22 @@ export function clientCanConfirm(ctx) {
140
140
  * a wall of them is how the answer became unreachable, and half a wall read
141
141
  * halfway is worse than a sentence that says where to look.
142
142
  */
143
- export function describeForConfirmation(draft, what, previewUrl) {
143
+ export function describeForConfirmation(draft, what, previewUrl,
144
+ /** Why the question is asked although the tool may send on its own. */
145
+ heldBack) {
144
146
  const lines = [
145
147
  `${what} would be sent from ${showRecipient(draft.from)}.`,
146
148
  '',
147
149
  describeRecipients(draft),
148
150
  `Subject: ${draft.subject || '(no subject)'}`,
149
151
  ];
152
+ if (draft.record) {
153
+ lines.push(`Added by your settings as a copy of everything sent: ${draft.record.address} ` +
154
+ `(${draft.record.mode === 'cc' ? 'Cc' : 'Bcc'}).`);
155
+ }
156
+ if (heldBack) {
157
+ lines.push('', `This tool may send without asking, but ${heldBack}, so you are asked.`);
158
+ }
150
159
  const counts = countsFor(draft);
151
160
  if (counts)
152
161
  lines.push('', counts);
@@ -224,12 +233,12 @@ function countsFor(draft) {
224
233
  return `It carries ${list}.`;
225
234
  }
226
235
  /** The question, returned from the handler rather than pushed to the client. */
227
- export function confirmationRequest(draft, what, requestState, previewUrl) {
236
+ export function confirmationRequest(draft, what, requestState, previewUrl, heldBack) {
228
237
  return inputRequired({
229
238
  requestState,
230
239
  inputRequests: {
231
240
  [CONFIRM_KEY]: inputRequired.elicit({
232
- message: describeForConfirmation(draft, what, previewUrl),
241
+ message: describeForConfirmation(draft, what, previewUrl, heldBack),
233
242
  requestedSchema: {
234
243
  type: 'object',
235
244
  properties: {
@@ -1 +1 @@
1
- {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../src/tools/confirm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../src/tools/confirm.ts"],"names":[],"mappings":"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"}
@@ -13,23 +13,21 @@ import type { CallToolResult, InputRequiredResult } from '@modelcontextprotocol/
13
13
  import { type MissingCredentials } from './sign-in-required.js';
14
14
  export declare function setSignInHint(hint: () => string | undefined): void;
15
15
  export declare function setLockedCheck(check: () => Promise<boolean>): void;
16
+ export declare function setElsewhereCheck(check: () => boolean): void;
16
17
  /** For tests, which must not inherit a hint from another test. */
17
18
  export declare function _clearSignInHint(): void;
18
19
  /** The sign-in address, when the interface is running. */
19
20
  export declare function signInUrl(): string | undefined;
21
+ export declare function setPreviewBase(base: (digest: string) => string | undefined): void;
20
22
  /**
21
23
  * Where a message waiting for confirmation can be read.
22
24
  *
23
- * Built from the same address as the sign-in hint, which already carries the
24
- * access token: the interface refuses anything without it, so a link that
25
- * dropped the token would lead to a refusal page rather than to the message.
26
- *
27
- * Returns nothing when no interface is running. The confirmation then says so
28
- * rather than offering a link that goes nowhere, because a question asked with
29
- * less behind it than usual should say as much.
25
+ * Returns nothing when this server cannot show previews. The confirmation then
26
+ * says so rather than offering a link that goes nowhere, because a question
27
+ * asked with less behind it than usual should say as much.
30
28
  */
31
29
  export declare function previewUrl(digest: string): string | undefined;
32
- /** Which of the two situations the caller is in. */
30
+ /** Which of the three situations the caller is in. */
33
31
  export declare function missingCredentials(): Promise<MissingCredentials>;
34
32
  /**
35
33
  * Describes a failure, and for the ones with a remedy says who has to act.
@@ -39,41 +39,60 @@ let lockedCheck;
39
39
  export function setLockedCheck(check) {
40
40
  lockedCheck = check;
41
41
  }
42
+ /**
43
+ * Whether the server that shows the page is signed in with a password that
44
+ * stays with it, while this one is not.
45
+ *
46
+ * Asked before the locked check, because it overrules it: while that server
47
+ * shows the page, the page offers neither the sign-in form nor the unlock
48
+ * form, so the remedy the other two answers name is out of reach.
49
+ */
50
+ let elsewhereCheck;
51
+ export function setElsewhereCheck(check) {
52
+ elsewhereCheck = check;
53
+ }
42
54
  /** For tests, which must not inherit a hint from another test. */
43
55
  export function _clearSignInHint() {
44
56
  signInHint = undefined;
45
57
  lockedCheck = undefined;
58
+ elsewhereCheck = undefined;
59
+ previewBase = undefined;
46
60
  }
47
61
  /** The sign-in address, when the interface is running. */
48
62
  export function signInUrl() {
49
63
  return signInHint?.();
50
64
  }
51
65
  /**
52
- * Where a message waiting for confirmation can be read.
66
+ * Where this server shows the messages waiting for confirmation.
53
67
  *
54
- * Built from the same address as the sign-in hint, which already carries the
55
- * access token: the interface refuses anything without it, so a link that
56
- * dropped the token would lead to a refusal page rather than to the message.
68
+ * Its own source rather than the sign-in address. Since 2026-11-05 every
69
+ * running server shares one interface, but a waiting message is held only in
70
+ * the memory of the server that asked, so that server shows it on a port of
71
+ * its own.
72
+ */
73
+ let previewBase;
74
+ export function setPreviewBase(base) {
75
+ previewBase = base;
76
+ }
77
+ /**
78
+ * Where a message waiting for confirmation can be read.
57
79
  *
58
- * Returns nothing when no interface is running. The confirmation then says so
59
- * rather than offering a link that goes nowhere, because a question asked with
60
- * less behind it than usual should say as much.
80
+ * Returns nothing when this server cannot show previews. The confirmation then
81
+ * says so rather than offering a link that goes nowhere, because a question
82
+ * asked with less behind it than usual should say as much.
61
83
  */
62
84
  export function previewUrl(digest) {
63
- const base = signInHint?.();
64
- if (!base)
65
- return undefined;
85
+ return previewBase?.(digest);
86
+ }
87
+ /** Which of the three situations the caller is in. */
88
+ export async function missingCredentials() {
66
89
  try {
67
- const url = new URL(base);
68
- url.pathname = `/pending/${digest}`;
69
- return url.toString();
90
+ if (elsewhereCheck?.() === true)
91
+ return 'elsewhere';
70
92
  }
71
93
  catch {
72
- return undefined;
94
+ // A list of servers that cannot be read leaves the other two answers.
73
95
  }
74
- }
75
- /** Which of the two situations the caller is in. */
76
- export async function missingCredentials() {
77
96
  try {
78
97
  return (await lockedCheck?.()) === true ? 'locked' : 'not-signed-in';
79
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"failures.js","sourceRoot":"","sources":["../../src/tools/failures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"failures.js","sourceRoot":"","sources":["../../src/tools/failures.ts"],"names":[],"mappings":"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"}