@rndmjoker/proton-mcp 0.4.7 → 0.4.12

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 (105) hide show
  1. package/README.md +69 -21
  2. package/dist/bridge/certificate.d.ts +33 -1
  3. package/dist/bridge/certificate.js +82 -9
  4. package/dist/bridge/certificate.js.map +1 -1
  5. package/dist/bridge/connection.js +31 -6
  6. package/dist/bridge/connection.js.map +1 -1
  7. package/dist/bridge/errors.d.ts +8 -0
  8. package/dist/bridge/errors.js +28 -3
  9. package/dist/bridge/errors.js.map +1 -1
  10. package/dist/config.d.ts +6 -0
  11. package/dist/config.js +1 -0
  12. package/dist/config.js.map +1 -1
  13. package/dist/credentials/availability.d.ts +5 -0
  14. package/dist/credentials/availability.js +7 -0
  15. package/dist/credentials/availability.js.map +1 -1
  16. package/dist/credentials/encrypted-file.js +7 -2
  17. package/dist/credentials/encrypted-file.js.map +1 -1
  18. package/dist/credentials/keyring.d.ts +12 -2
  19. package/dist/credentials/keyring.js +44 -6
  20. package/dist/credentials/keyring.js.map +1 -1
  21. package/dist/credentials/plain-file.js +8 -2
  22. package/dist/credentials/plain-file.js.map +1 -1
  23. package/dist/credentials/session-bus.d.ts +38 -0
  24. package/dist/credentials/session-bus.js +68 -0
  25. package/dist/credentials/session-bus.js.map +1 -0
  26. package/dist/credentials/store.d.ts +5 -1
  27. package/dist/credentials/store.js.map +1 -1
  28. package/dist/in-flight.d.ts +6 -3
  29. package/dist/in-flight.js +6 -3
  30. package/dist/in-flight.js.map +1 -1
  31. package/dist/mail/actions.d.ts +0 -2
  32. package/dist/mail/actions.js +8 -7
  33. package/dist/mail/actions.js.map +1 -1
  34. package/dist/mail/attachments.d.ts +12 -2
  35. package/dist/mail/attachments.js +19 -11
  36. package/dist/mail/attachments.js.map +1 -1
  37. package/dist/mail/compose.d.ts +70 -15
  38. package/dist/mail/compose.js +147 -11
  39. package/dist/mail/compose.js.map +1 -1
  40. package/dist/mail/drafts.d.ts +28 -2
  41. package/dist/mail/drafts.js +91 -21
  42. package/dist/mail/drafts.js.map +1 -1
  43. package/dist/mail/ids.d.ts +10 -0
  44. package/dist/mail/ids.js +16 -4
  45. package/dist/mail/ids.js.map +1 -1
  46. package/dist/mail/labels.js +9 -4
  47. package/dist/mail/labels.js.map +1 -1
  48. package/dist/mail/messages.d.ts +50 -10
  49. package/dist/mail/messages.js +94 -6
  50. package/dist/mail/messages.js.map +1 -1
  51. package/dist/mail/saved-attachments.d.ts +128 -0
  52. package/dist/mail/saved-attachments.js +448 -0
  53. package/dist/mail/saved-attachments.js.map +1 -0
  54. package/dist/mail/search.d.ts +73 -5
  55. package/dist/mail/search.js +150 -27
  56. package/dist/mail/search.js.map +1 -1
  57. package/dist/mail/send.js +24 -9
  58. package/dist/mail/send.js.map +1 -1
  59. package/dist/mail/uid-search.d.ts +17 -0
  60. package/dist/mail/uid-search.js +25 -0
  61. package/dist/mail/uid-search.js.map +1 -0
  62. package/dist/mime/filenames.d.ts +24 -0
  63. package/dist/mime/filenames.js +58 -0
  64. package/dist/mime/filenames.js.map +1 -0
  65. package/dist/mime/parts.d.ts +34 -0
  66. package/dist/mime/parts.js +92 -0
  67. package/dist/mime/parts.js.map +1 -0
  68. package/dist/server.js +39 -8
  69. package/dist/server.js.map +1 -1
  70. package/dist/session.d.ts +15 -3
  71. package/dist/session.js +35 -8
  72. package/dist/session.js.map +1 -1
  73. package/dist/tools/actions.js +2 -1
  74. package/dist/tools/actions.js.map +1 -1
  75. package/dist/tools/confirm.js +47 -11
  76. package/dist/tools/confirm.js.map +1 -1
  77. package/dist/tools/drafts.d.ts +3 -0
  78. package/dist/tools/drafts.js +31 -10
  79. package/dist/tools/drafts.js.map +1 -1
  80. package/dist/tools/format.d.ts +8 -0
  81. package/dist/tools/format.js +44 -6
  82. package/dist/tools/format.js.map +1 -1
  83. package/dist/tools/guidance.js +27 -3
  84. package/dist/tools/guidance.js.map +1 -1
  85. package/dist/tools/messages.js +41 -13
  86. package/dist/tools/messages.js.map +1 -1
  87. package/dist/tools/pending-view.d.ts +7 -0
  88. package/dist/tools/pending-view.js +4 -1
  89. package/dist/tools/pending-view.js.map +1 -1
  90. package/dist/tools/saved.d.ts +15 -0
  91. package/dist/tools/saved.js +107 -0
  92. package/dist/tools/saved.js.map +1 -0
  93. package/dist/tools/send.js +12 -4
  94. package/dist/tools/send.js.map +1 -1
  95. package/dist/web/layout.js +2 -0
  96. package/dist/web/layout.js.map +1 -1
  97. package/dist/web/pages.js +1 -0
  98. package/dist/web/pages.js.map +1 -1
  99. package/dist/web/pending.d.ts +4 -0
  100. package/dist/web/pending.js +32 -4
  101. package/dist/web/pending.js.map +1 -1
  102. package/dist/web/server.d.ts +16 -5
  103. package/dist/web/server.js +12 -8
  104. package/dist/web/server.js.map +1 -1
  105. package/package.json +21 -18
@@ -13,6 +13,23 @@ export class BridgeError extends Error {
13
13
  this.remedy = remedy;
14
14
  }
15
15
  }
16
+ /** The codes that mean the connection itself did not come about. */
17
+ const CONNECTION_CODES = new Set(['ECONNREFUSED', 'ETIMEDOUT', 'ECONNRESET', 'ENOTFOUND', 'EAI_AGAIN']);
18
+ /** The system code of an error, also where a library relabelled it. */
19
+ function systemCode(e) {
20
+ return e?.originalCode ?? e?.code;
21
+ }
22
+ /**
23
+ * Whether the connection itself failed, rather than something said over it.
24
+ *
25
+ * Sending learns this only from nodemailer, which relabels the system error,
26
+ * and since the certificate is no longer fetched before every send, a send is
27
+ * where a Bridge that is not running shows up first.
28
+ */
29
+ export function isConnectionFailure(error) {
30
+ const code = systemCode(error);
31
+ return code !== undefined && CONNECTION_CODES.has(code);
32
+ }
16
33
  /**
17
34
  * Builds an understandable message from an arbitrary failure.
18
35
  *
@@ -22,18 +39,19 @@ export class BridgeError extends Error {
22
39
  export function explainError(error, host, port) {
23
40
  const e = error;
24
41
  const address = `${host}:${port}`;
25
- if (e?.code === 'ECONNREFUSED') {
42
+ const code = systemCode(e);
43
+ if (code === 'ECONNREFUSED') {
26
44
  return new BridgeError(`Nothing is accepting connections on ${address}. Proton Mail Bridge is most likely not ` +
27
45
  'running: it is a desktop application that has to be started and unlocked by the person ' +
28
46
  'using it, and this server can neither start it nor unlock it. If it is running, it may ' +
29
47
  'be listening on a different port, which the Bridge shows under Settings, Advanced.', 'unreachable', { cause: error });
30
48
  }
31
- if (e?.code === 'ETIMEDOUT' || e?.code === 'ECONNRESET') {
49
+ if (code === 'ETIMEDOUT' || code === 'ECONNRESET') {
32
50
  return new BridgeError(`The connection to ${address} did not come up, or it was dropped. That happens while the ` +
33
51
  'Bridge is starting up and while it is locked, both of which pass on their own once the ' +
34
52
  'person at the machine has unlocked it.', 'not-ready', { cause: error });
35
53
  }
36
- if (e?.code === 'ENOTFOUND' || e?.code === 'EAI_AGAIN') {
54
+ if (code === 'ENOTFOUND' || code === 'EAI_AGAIN') {
37
55
  return new BridgeError(`The address "${host}" could not be resolved. Unless the Bridge was deliberately put on ` +
38
56
  'another machine, BRIDGE_HOST should be 127.0.0.1.', 'unreachable', { cause: error });
39
57
  }
@@ -50,6 +68,13 @@ export function explainError(error, host, port) {
50
68
  return new BridgeError('The Bridge certificate was rejected. The Bridge uses a self-signed certificate, ' +
51
69
  'which is only accepted for connections to 127.0.0.1.', 'none', { cause: error });
52
70
  }
71
+ // imapflow marks a STARTTLS that was required and did not happen. The Bridge
72
+ // always offers it, so the likelier story is something else on the port.
73
+ if (error?.tlsFailed === true || /STARTTLS/.test(text)) {
74
+ return new BridgeError(`Whatever answered on ${address} did not offer an encrypted connection, so the password was ` +
75
+ 'not sent. Proton Mail Bridge always offers one. If the Bridge is running, check that this ' +
76
+ 'is its port; otherwise another program may be listening there.', 'none', { cause: error });
77
+ }
53
78
  const raw = e?.message ?? String(error);
54
79
  return new BridgeError(`The Bridge reported an error: ${raw}`, 'none', { cause: error });
55
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/bridge/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,GAAG,aAAa,CAAA;IACpB,MAAM,CAAc;IAE7B,YAAY,OAAe,EAAE,MAAM,GAAiB,MAAM,EAAE,OAAsB;QAChF,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAQD;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,IAAY,EAAE,IAAY;IACrE,MAAM,CAAC,GAAG,KAAsB,CAAA;IAChC,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAA;IAEjC,IAAI,CAAC,EAAE,IAAI,KAAK,cAAc,EAAE,CAAC;QAC/B,OAAO,IAAI,WAAW,CACpB,uCAAuC,OAAO,0CAA0C;YACtF,yFAAyF;YACzF,yFAAyF;YACzF,oFAAoF,EACtF,aAAa,EACb,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAA;IACH,CAAC;IAED,IAAI,CAAC,EAAE,IAAI,KAAK,WAAW,IAAI,CAAC,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;QACxD,OAAO,IAAI,WAAW,CACpB,qBAAqB,OAAO,8DAA8D;YACxF,yFAAyF;YACzF,wCAAwC,EAC1C,WAAW,EACX,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAA;IACH,CAAC;IAED,IAAI,CAAC,EAAE,IAAI,KAAK,WAAW,IAAI,CAAC,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;QACvD,OAAO,IAAI,WAAW,CACpB,gBAAgB,IAAI,qEAAqE;YACvF,mDAAmD,EACrD,aAAa,EACb,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAA;IACH,CAAC;IAED,4DAA4D;IAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,YAAY,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,IAAI,EAAE,EAAE,CAAA;IAC3D,IAAI,wDAAwD,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,WAAW,CACpB,4FAA4F;YAC1F,2FAA2F;YAC3F,oFAAoF;YACpF,0FAA0F;YAC1F,oDAAoD,EACtD,aAAa,EACb,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAA;IACH,CAAC;IAED,IAAI,qCAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,WAAW,CACpB,kFAAkF;YAChF,sDAAsD,EACxD,MAAM,EACN,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAA;IACH,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAA;IACvC,OAAO,IAAI,WAAW,CAAC,iCAAiC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;AAC1F,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/bridge/errors.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -30,6 +30,12 @@ export interface Config {
30
30
  readOnly: boolean;
31
31
  /** Port for the local web interface. Fixed for the life of the process. */
32
32
  webPort: number;
33
+ /**
34
+ * Where save_attachment may write, from PROTON_MCP_ATTACHMENT_DIR. Absent
35
+ * means saving is off. Only from the environment, never from the web
36
+ * interface, whose address an assistant receives; see saved-attachments.ts.
37
+ */
38
+ attachmentDir: string | undefined;
33
39
  }
34
40
  /** Credentials, whether they come from the environment or from a store. */
35
41
  export interface BridgeCredentials {
package/dist/config.js CHANGED
@@ -111,6 +111,7 @@ export function loadConfig(env = process.env) {
111
111
  smtpPort: port(env.BRIDGE_SMTP_PORT, 1025, 'BRIDGE_SMTP_PORT'),
112
112
  readOnly: env.PROTON_MCP_READ_ONLY === 'true',
113
113
  webPort: port(env.PROTON_MCP_WEB_PORT, 7345, 'PROTON_MCP_WEB_PORT'),
114
+ attachmentDir: env.PROTON_MCP_ATTACHMENT_DIR?.trim() || undefined,
114
115
  };
115
116
  }
116
117
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -13,10 +13,13 @@
13
13
  * process can be killed.
14
14
  */
15
15
  import { type StoreKind, type StoreDescription } from './store.js';
16
+ import { type KeyringBackend } from './session-bus.js';
16
17
  export interface StoreAvailability extends StoreDescription {
17
18
  available: boolean;
18
19
  /** Why it cannot be used. Only set when available is false. */
19
20
  reason?: string;
21
+ /** What the option means on this machine, when that differs from its description. */
22
+ note?: string;
20
23
  /** How long the probe took, for diagnostics. Only for the keyring. */
21
24
  probeMs?: number;
22
25
  }
@@ -48,6 +51,8 @@ export declare function probeKeyring(timeoutMs?: number): Promise<ProbeResult>;
48
51
  export declare function listStores(options?: {
49
52
  probe?: (timeoutMs?: number) => Promise<ProbeResult>;
50
53
  os?: string;
54
+ /** Which store the keyring library uses. Replaced in tests. */
55
+ backend?: () => KeyringBackend;
51
56
  }): Promise<StoreAvailability[]>;
52
57
  /**
53
58
  * The option to preselect.
@@ -17,6 +17,7 @@ import { fileURLToPath } from 'node:url';
17
17
  import { dirname, join } from 'node:path';
18
18
  import { platform } from 'node:os';
19
19
  import { STORE_DESCRIPTIONS, PRESENTATION_ORDER, } from './store.js';
20
+ import { KERNEL_KEYRING_NOTE, prepareSessionBus } from './session-bus.js';
20
21
  /** How long the keyring probe may take before it counts as unusable. */
21
22
  export const PROBE_TIMEOUT_MS = 5000;
22
23
  /**
@@ -68,6 +69,8 @@ export function probeKeyring(timeoutMs = PROBE_TIMEOUT_MS) {
68
69
  */
69
70
  export async function listStores(options = {}) {
70
71
  const probe = options.probe ?? probeKeyring;
72
+ // Before the probe, so that the child it forks inherits the same address.
73
+ const backend = (options.backend ?? prepareSessionBus)();
71
74
  const started = Date.now();
72
75
  const keyring = await probe();
73
76
  const probeMs = Date.now() - started;
@@ -78,6 +81,10 @@ export async function listStores(options = {}) {
78
81
  entry.probeMs = probeMs;
79
82
  if (!keyring.ok)
80
83
  entry.reason = keyring.reason;
84
+ // The probe succeeds in the kernel's keyring too, so a working keyring
85
+ // alone does not say which one it is.
86
+ else if (backend === 'kernel')
87
+ entry.note = KERNEL_KEYRING_NOTE;
81
88
  }
82
89
  return entry;
83
90
  });
@@ -1 +1 @@
1
- {"version":3,"file":"availability.js","sourceRoot":"","sources":["../../src/credentials/availability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"availability.js","sourceRoot":"","sources":["../../src/credentials/availability.ts"],"names":[],"mappings":"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"}
@@ -148,8 +148,13 @@ export class EncryptedFileStore {
148
148
  try {
149
149
  await unlink(this.path);
150
150
  }
151
- catch {
152
- // Already gone is the outcome we wanted.
151
+ catch (error) {
152
+ // Already gone is the outcome we wanted. Anything else leaves the file
153
+ // where the next start offers to unlock it again (#52).
154
+ if (error.code === 'ENOENT')
155
+ return;
156
+ throw new BridgeError(`The encrypted file ${this.path} could not be deleted: ${error.message}. Delete it ` +
157
+ 'by hand.');
153
158
  }
154
159
  }
155
160
  }
@@ -1 +1 @@
1
- {"version":3,"file":"encrypted-file.js","sourceRoot":"","sources":["../../src/credentials/encrypted-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"encrypted-file.js","sourceRoot":"","sources":["../../src/credentials/encrypted-file.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * @napi-rs/keyring is an optional dependency. On a platform without a prebuilt
5
5
  * binary the install does not fail, this store simply becomes unavailable and
6
- * the others remain. So the import has to be dynamic and its failure has to be
7
- * an ordinary outcome rather than a crash.
6
+ * the others remain. So it is loaded at runtime, and its absence has to be an
7
+ * ordinary outcome rather than a crash.
8
8
  *
9
9
  * Every call here can block: a locked keyring opens a dialog, and the underlying
10
10
  * calls are synchronous. Callers must treat this store as potentially
@@ -31,6 +31,8 @@ interface KeyringModule {
31
31
  * dependency does not appear halfway through a session.
32
32
  */
33
33
  export declare function loadKeyringModule(): Promise<KeyringModule | undefined>;
34
+ /** For tests: replaces how the library is loaded. */
35
+ export declare function _setKeyringLoader(load: () => KeyringModule): void;
34
36
  /** For tests, which must not depend on what is installed here. */
35
37
  export declare function _setKeyringModule(module: KeyringModule | undefined): void;
36
38
  /** Resets the cache. For tests. */
@@ -43,6 +45,14 @@ export declare class KeyringStore implements CredentialStore {
43
45
  constructor(service?: string, account?: string);
44
46
  load(): Promise<Credentials | undefined>;
45
47
  save(credentials: Credentials): Promise<void>;
48
+ /**
49
+ * Removes the entry, and succeeds only once it is gone.
50
+ *
51
+ * Read before and after, because deletePassword() answers false both when
52
+ * there is nothing and when the entry is in a store it cannot see. Until
53
+ * 2026-11-02 its answer and every error were dropped here, and a sign-out
54
+ * reported success while the password stayed (#52).
55
+ */
46
56
  clear(): Promise<void>;
47
57
  }
48
58
  export {};
@@ -3,19 +3,31 @@
3
3
  *
4
4
  * @napi-rs/keyring is an optional dependency. On a platform without a prebuilt
5
5
  * binary the install does not fail, this store simply becomes unavailable and
6
- * the others remain. So the import has to be dynamic and its failure has to be
7
- * an ordinary outcome rather than a crash.
6
+ * the others remain. So it is loaded at runtime, and its absence has to be an
7
+ * ordinary outcome rather than a crash.
8
8
  *
9
9
  * Every call here can block: a locked keyring opens a dialog, and the underlying
10
10
  * calls are synchronous. Callers must treat this store as potentially
11
11
  * unresponsive, see probeKeyring in availability.ts.
12
12
  */
13
+ import { createRequire } from 'node:module';
13
14
  import { BridgeError } from '../bridge/errors.js';
15
+ import { prepareSessionBus } from './session-bus.js';
16
+ const require = createRequire(import.meta.url);
14
17
  /** Identifies our entries in the keyring. */
15
18
  export const SERVICE_NAME = 'proton-mcp';
16
19
  /** The account under which the Bridge credentials are stored. */
17
20
  export const ACCOUNT_NAME = 'bridge';
18
21
  let cached = undefined;
22
+ /**
23
+ * How the library is loaded: require rather than import(). The package is
24
+ * CommonJS, and on 2026-11-02 import() of it handed back an empty module once
25
+ * prepareSessionBus had looked at the D-Bus socket, in an installation that
26
+ * reaches the package through a symbolic link, the way pnpm and npm link lay
27
+ * packages out. Why is not known. require does not take that path, measured
28
+ * the same day in that very layout. Replaced in tests.
29
+ */
30
+ let loadLibrary = () => require('@napi-rs/keyring');
19
31
  /**
20
32
  * Loads the keyring module, or reports that it is not there.
21
33
  *
@@ -25,8 +37,11 @@ let cached = undefined;
25
37
  export async function loadKeyringModule() {
26
38
  if (cached !== undefined)
27
39
  return cached ?? undefined;
40
+ // Before the library: it decides by the environment which store it uses,
41
+ // see session-bus.ts.
42
+ prepareSessionBus();
28
43
  try {
29
- const module = (await import('@napi-rs/keyring'));
44
+ const module = loadLibrary();
30
45
  cached = module;
31
46
  return module;
32
47
  }
@@ -35,6 +50,10 @@ export async function loadKeyringModule() {
35
50
  return undefined;
36
51
  }
37
52
  }
53
+ /** For tests: replaces how the library is loaded. */
54
+ export function _setKeyringLoader(load) {
55
+ loadLibrary = load;
56
+ }
38
57
  /** For tests, which must not depend on what is installed here. */
39
58
  export function _setKeyringModule(module) {
40
59
  cached = module ?? null;
@@ -84,13 +103,32 @@ export class KeyringStore {
84
103
  // state possible.
85
104
  entry.setPassword(JSON.stringify({ user: credentials.user, pass: credentials.pass }));
86
105
  }
106
+ /**
107
+ * Removes the entry, and succeeds only once it is gone.
108
+ *
109
+ * Read before and after, because deletePassword() answers false both when
110
+ * there is nothing and when the entry is in a store it cannot see. Until
111
+ * 2026-11-02 its answer and every error were dropped here, and a sign-out
112
+ * reported success while the password stayed (#52).
113
+ */
87
114
  async clear() {
88
- const entry = await this.#entry();
115
+ const module = await loadKeyringModule();
116
+ // Without the module, this installation cannot have stored anything here.
117
+ if (!module)
118
+ return;
119
+ const entry = new module.Entry(this.service, this.account);
89
120
  try {
121
+ if (!entry.getPassword())
122
+ return;
90
123
  entry.deletePassword();
124
+ if (entry.getPassword())
125
+ throw new Error('the entry was still there after deleting it');
91
126
  }
92
- catch {
93
- // Nothing stored is the outcome we wanted anyway.
127
+ catch (error) {
128
+ const reason = error instanceof Error ? error.message.split('\n')[0] : String(error);
129
+ throw new BridgeError(`The Bridge password could not be removed from the system keyring: ${reason}. Remove the ` +
130
+ `entry "${this.service}" for "${this.account}" by hand, in the program that manages this ` +
131
+ 'keyring: Seahorse, KWalletManager, Keychain Access or the Credential Manager.');
94
132
  }
95
133
  }
96
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"keyring.js","sourceRoot":"","sources":["../../src/credentials/keyring.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keyring.js","sourceRoot":"","sources":["../../src/credentials/keyring.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ import { readFile, writeFile, unlink, mkdir, stat, chmod } from 'node:fs/promise
13
13
  import { dirname } from 'node:path';
14
14
  import { platform } from 'node:os';
15
15
  import { credentialsPath, parseEnvFile, permissionWarning } from '../config.js';
16
+ import { BridgeError } from '../bridge/errors.js';
16
17
  export class PlainFileStore {
17
18
  path;
18
19
  notify;
@@ -70,8 +71,13 @@ export class PlainFileStore {
70
71
  try {
71
72
  await unlink(this.path);
72
73
  }
73
- catch {
74
- // Already gone is the outcome we wanted.
74
+ catch (error) {
75
+ // Already gone is the outcome we wanted. Anything else leaves the
76
+ // password where the next start reads it again (#52).
77
+ if (error.code === 'ENOENT')
78
+ return;
79
+ throw new BridgeError(`The plain file ${this.path} could not be deleted: ${error.message}. It holds the ` +
80
+ 'Bridge password in plain text, so delete it by hand.');
75
81
  }
76
82
  }
77
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plain-file.js","sourceRoot":"","sources":["../../src/credentials/plain-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAE/E,MAAM,OAAO,cAAc;IAIN,IAAI;IAEJ,MAAM;IALhB,IAAI,GAAG,YAAqB,CAAA;IAErC,YACmB,IAAI,GAAW,eAAe,EAAE;IACjD,2EAA2E;IAC1D,MAAM,GAA8B,GAAG,EAAE,CAAC,SAAS;oBAFnD,IAAI;sBAEJ,MAAM;IACtB,CAAC;IAEJ,KAAK,CAAC,IAAI;QACR,IAAI,OAAe,CAAA;QACnB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,IAAI,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;gBAC/D,IAAI,OAAO;oBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,CAAA;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,8DAA8D;YAChE,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,CAAA;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAA;QAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAA;QACpC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAwB;QACjC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAEjE,6EAA6E;QAC7E,iCAAiC;QACjC,MAAM,OAAO,GAAG;YACd,kDAAkD;YAClD,GAAG;YACH,6EAA6E;YAC7E,4EAA4E;YAC5E,eAAe,WAAW,CAAC,IAAI,EAAE;YACjC,eAAe,WAAW,CAAC,IAAI,EAAE;YACjC,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QACpD,2EAA2E;QAC3E,uDAAuD;QACvD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;QAC3C,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"plain-file.js","sourceRoot":"","sources":["../../src/credentials/plain-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Which store "System keyring" means on Linux, and making it the desktop's.
3
+ *
4
+ * @napi-rs/keyring picks its store from one variable. Measured on 2026-11-02
5
+ * with version 1.3.0 under KDE Plasma: with DBUS_SESSION_BUS_ADDRESS set, an
6
+ * entry goes to the Secret Service, which is GNOME Keyring or KWallet. Without
7
+ * it, or with an address that leads nowhere, the entry goes to the kernel's
8
+ * keyrings instead. Those live in memory: gone after a restart, and the
9
+ * persistent one expires after days without use. Each process sees only its
10
+ * own store, so a server started with the variable cannot remove what one
11
+ * started without it stored, and the other way round.
12
+ *
13
+ * MCP clients leave the variable out unless told otherwise: the SDK passes on
14
+ * HOME, LOGNAME, PATH, SHELL, TERM and USER and nothing else. So what "System
15
+ * keyring" meant depended on how the client started this server. The address
16
+ * is therefore supplied here when it is missing and the session has a bus in
17
+ * the usual place, the way every desktop program finds it.
18
+ */
19
+ /** Where an entry ends up. "platform" is Keychain or Credential Manager. */
20
+ export type KeyringBackend = 'secret-service' | 'kernel' | 'platform';
21
+ export interface SessionBusOptions {
22
+ env?: NodeJS.ProcessEnv;
23
+ platform?: NodeJS.Platform;
24
+ uid?: number;
25
+ /** Whether a path is a socket. Replaced in tests. */
26
+ isSocket?: (path: string) => boolean;
27
+ }
28
+ /**
29
+ * Supplies DBUS_SESSION_BUS_ADDRESS when it is missing and a session bus is
30
+ * there, and says which store the keyring library will use.
31
+ *
32
+ * Has to run before the library is loaded, and in every process that loads it:
33
+ * the probe of the sign-in page runs in a child, which inherits what is set
34
+ * here.
35
+ */
36
+ export declare function prepareSessionBus(options?: SessionBusOptions): KeyringBackend;
37
+ /** What the sign-in page says when the keyring is the kernel's. */
38
+ export declare const KERNEL_KEYRING_NOTE: string;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Which store "System keyring" means on Linux, and making it the desktop's.
3
+ *
4
+ * @napi-rs/keyring picks its store from one variable. Measured on 2026-11-02
5
+ * with version 1.3.0 under KDE Plasma: with DBUS_SESSION_BUS_ADDRESS set, an
6
+ * entry goes to the Secret Service, which is GNOME Keyring or KWallet. Without
7
+ * it, or with an address that leads nowhere, the entry goes to the kernel's
8
+ * keyrings instead. Those live in memory: gone after a restart, and the
9
+ * persistent one expires after days without use. Each process sees only its
10
+ * own store, so a server started with the variable cannot remove what one
11
+ * started without it stored, and the other way round.
12
+ *
13
+ * MCP clients leave the variable out unless told otherwise: the SDK passes on
14
+ * HOME, LOGNAME, PATH, SHELL, TERM and USER and nothing else. So what "System
15
+ * keyring" meant depended on how the client started this server. The address
16
+ * is therefore supplied here when it is missing and the session has a bus in
17
+ * the usual place, the way every desktop program finds it.
18
+ */
19
+ import { statSync } from 'node:fs';
20
+ import { join } from 'node:path';
21
+ function socketAt(path) {
22
+ try {
23
+ return statSync(path).isSocket();
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ }
29
+ /** The path of a unix:path= address, if the address has one. */
30
+ function socketPath(address) {
31
+ return /(?:^|;)unix:(?:[^;]*,)?path=([^,;]+)/.exec(address)?.[1];
32
+ }
33
+ /**
34
+ * Supplies DBUS_SESSION_BUS_ADDRESS when it is missing and a session bus is
35
+ * there, and says which store the keyring library will use.
36
+ *
37
+ * Has to run before the library is loaded, and in every process that loads it:
38
+ * the probe of the sign-in page runs in a child, which inherits what is set
39
+ * here.
40
+ */
41
+ export function prepareSessionBus(options = {}) {
42
+ const env = options.env ?? process.env;
43
+ if ((options.platform ?? process.platform) !== 'linux')
44
+ return 'platform';
45
+ const isSocket = options.isSocket ?? socketAt;
46
+ const given = env.DBUS_SESSION_BUS_ADDRESS;
47
+ if (given) {
48
+ // An abstract or TCP address cannot be checked from here and is taken as
49
+ // given. A path that is not there leads to the kernel, as measured.
50
+ const path = socketPath(given);
51
+ return path === undefined || isSocket(path) ? 'secret-service' : 'kernel';
52
+ }
53
+ const uid = options.uid ?? process.getuid?.();
54
+ const candidates = [
55
+ ...(env.XDG_RUNTIME_DIR ? [join(env.XDG_RUNTIME_DIR, 'bus')] : []),
56
+ ...(uid !== undefined ? [`/run/user/${uid}/bus`] : []),
57
+ ];
58
+ const found = candidates.find((path) => isSocket(path));
59
+ if (found === undefined)
60
+ return 'kernel';
61
+ env.DBUS_SESSION_BUS_ADDRESS = `unix:path=${found}`;
62
+ return 'secret-service';
63
+ }
64
+ /** What the sign-in page says when the keyring is the kernel's. */
65
+ export const KERNEL_KEYRING_NOTE = 'No desktop session was found, so the password would go to the kernel\'s keyring rather than to ' +
66
+ 'GNOME Keyring or KWallet. That keyring lives in memory only: the password is gone after a ' +
67
+ 'restart, and after a few days without use, three by default.';
68
+ //# sourceMappingURL=session-bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-bus.js","sourceRoot":"","sources":["../../src/credentials/session-bus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAahC,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAA;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,SAAS,UAAU,CAAC,OAAe;IACjC,OAAO,sCAAsC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAClE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAsB,EAAE;IAC/D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAA;IACtC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO;QAAE,OAAO,UAAU,CAAA;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAA;IAE7C,MAAM,KAAK,GAAG,GAAG,CAAC,wBAAwB,CAAA;IAC1C,IAAI,KAAK,EAAE,CAAC;QACV,yEAAyE;QACzE,oEAAoE;QACpE,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;QAC9B,OAAO,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAA;IAC3E,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAA;IAC7C,MAAM,UAAU,GAAG;QACjB,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAA;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IACvD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAA;IACxC,GAAG,CAAC,wBAAwB,GAAG,aAAa,KAAK,EAAE,CAAA;IACnD,OAAO,gBAAgB,CAAA;AACzB,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,MAAM,mBAAmB,GAC9B,iGAAiG;IACjG,4FAA4F;IAC5F,8DAA8D,CAAA"}
@@ -26,7 +26,11 @@ export interface CredentialStore {
26
26
  /** Returns the credentials, or undefined when none are stored. */
27
27
  load(): Promise<Credentials | undefined>;
28
28
  save(credentials: Credentials): Promise<void>;
29
- /** Removes what is stored. Succeeds even when nothing was there. */
29
+ /**
30
+ * Removes what is stored. Succeeds when nothing is left, also when nothing
31
+ * was there, and otherwise throws an explanation that says how to remove it
32
+ * by hand. Until 2026-11-02 every store swallowed its failures here (#52).
33
+ */
30
34
  clear(): Promise<void>;
31
35
  /**
32
36
  * Whether something is stored, without unlocking it.
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/credentials/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA4DH,MAAM,CAAC,MAAM,eAAe,GAAiC;IAC3D,IAAI,EAAE,iBAAiB;IACvB,SAAS,EAAE,mBAAmB;IAC9B,cAAc,EAAE,4CAA4C;IAC5D,SAAS,EAAE,qBAAqB;CACjC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAwC;IACrE,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,gBAAgB;QACvB,OAAO,EACL,8FAA8F;YAC9F,mEAAmE;QACrE,OAAO,EACL,+FAA+F;YAC/F,+FAA+F;YAC/F,+DAA+D;QACjE,IAAI,EACF,gGAAgG;YAChG,8FAA8F;YAC9F,6FAA6F;YAC7F,SAAS;QACX,OAAO,EAAE,gEAAgE;QACzE,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,cAAc;KACxB;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,gBAAgB;QACvB,OAAO,EACL,+FAA+F;YAC/F,YAAY;QACd,OAAO,EACL,6FAA6F;YAC7F,6FAA6F;YAC7F,+BAA+B;QACjC,IAAI,EACF,+FAA+F;YAC/F,yFAAyF;YACzF,gFAAgF;QAClF,OAAO,EACL,0FAA0F;YAC1F,6BAA6B;QAC/B,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,uBAAuB;KACjC;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,mBAAmB;QAC1B,OAAO,EAAE,wFAAwF;QACjG,OAAO,EACL,8FAA8F;YAC9F,gEAAgE;QAClE,IAAI,EACF,uFAAuF;YACvF,+EAA+E;QACjF,OAAO,EACL,4FAA4F;YAC5F,sBAAsB;QACxB,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,uBAAuB;KACjC;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,YAAY;QACnB,OAAO,EACL,wFAAwF;YACxF,UAAU;QACZ,OAAO,EACL,8FAA8F;YAC9F,2FAA2F;QAC7F,IAAI,EACF,yFAAyF;YACzF,oFAAoF;YACpF,+CAA+C;QACjD,OAAO,EACL,4FAA4F;YAC5F,8BAA8B;QAChC,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,OAAO;KACjB;CACF,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAA"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/credentials/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgEH,MAAM,CAAC,MAAM,eAAe,GAAiC;IAC3D,IAAI,EAAE,iBAAiB;IACvB,SAAS,EAAE,mBAAmB;IAC9B,cAAc,EAAE,4CAA4C;IAC5D,SAAS,EAAE,qBAAqB;CACjC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAwC;IACrE,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,gBAAgB;QACvB,OAAO,EACL,8FAA8F;YAC9F,mEAAmE;QACrE,OAAO,EACL,+FAA+F;YAC/F,+FAA+F;YAC/F,+DAA+D;QACjE,IAAI,EACF,gGAAgG;YAChG,8FAA8F;YAC9F,6FAA6F;YAC7F,SAAS;QACX,OAAO,EAAE,gEAAgE;QACzE,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,cAAc;KACxB;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,gBAAgB;QACvB,OAAO,EACL,+FAA+F;YAC/F,YAAY;QACd,OAAO,EACL,6FAA6F;YAC7F,6FAA6F;YAC7F,+BAA+B;QACjC,IAAI,EACF,+FAA+F;YAC/F,yFAAyF;YACzF,gFAAgF;QAClF,OAAO,EACL,0FAA0F;YAC1F,6BAA6B;QAC/B,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,uBAAuB;KACjC;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,mBAAmB;QAC1B,OAAO,EAAE,wFAAwF;QACjG,OAAO,EACL,8FAA8F;YAC9F,gEAAgE;QAClE,IAAI,EACF,uFAAuF;YACvF,+EAA+E;QACjF,OAAO,EACL,4FAA4F;YAC5F,sBAAsB;QACxB,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,uBAAuB;KACjC;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,YAAY;QACnB,OAAO,EACL,wFAAwF;YACxF,UAAU;QACZ,OAAO,EACL,8FAA8F;YAC9F,2FAA2F;QAC7F,IAAI,EACF,yFAAyF;YACzF,oFAAoF;YACpF,+CAA+C;QACjD,OAAO,EACL,4FAA4F;YAC5F,8BAA8B;QAChC,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,OAAO;KACjB;CACF,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAA"}
@@ -2,9 +2,12 @@
2
2
  * Bookkeeping for tool calls that are still running.
3
3
  *
4
4
  * Background: a stdio server learns that its client is gone by its input
5
- * stream ending. If it exits right away it cuts off calls that are still in
6
- * progress and their answer is lost. If it waits forever it hangs whenever a
7
- * call never returns.
5
+ * stream ending. The MCP SDK closes the transport at that point, so a call
6
+ * still in progress no longer gets its answer written; the client has said it
7
+ * is leaving and is not waiting for one. The work behind the call is another
8
+ * matter. Exiting right away would cut it off halfway, a message in the middle
9
+ * of being handed to the Bridge or a draft half replaced. Waiting forever would
10
+ * hang whenever a call never returns.
8
11
  *
9
12
  * Hence: keep count, and wait for a bounded grace period on shutdown.
10
13
  */
package/dist/in-flight.js CHANGED
@@ -2,9 +2,12 @@
2
2
  * Bookkeeping for tool calls that are still running.
3
3
  *
4
4
  * Background: a stdio server learns that its client is gone by its input
5
- * stream ending. If it exits right away it cuts off calls that are still in
6
- * progress and their answer is lost. If it waits forever it hangs whenever a
7
- * call never returns.
5
+ * stream ending. The MCP SDK closes the transport at that point, so a call
6
+ * still in progress no longer gets its answer written; the client has said it
7
+ * is leaving and is not waiting for one. The work behind the call is another
8
+ * matter. Exiting right away would cut it off halfway, a message in the middle
9
+ * of being handed to the Bridge or a draft half replaced. Waiting forever would
10
+ * hang whenever a call never returns.
8
11
  *
9
12
  * Hence: keep count, and wait for a bounded grace period on shutdown.
10
13
  */
@@ -1 +1 @@
1
- {"version":3,"file":"in-flight.js","sourceRoot":"","sources":["../src/in-flight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC,IAAI,QAAQ,GAAG,CAAC,CAAA;AAChB,IAAI,aAAa,GAAsB,EAAE,CAAA;AAEzC,4EAA4E;AAC5E,MAAM,UAAU,aAAa;IAC3B,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAI,EAAoB,EAAE,IAAa;IAChE,QAAQ,EAAE,CAAA;IACV,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACpE,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAA;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,IAAI,CAAA;QACb,MAAM,KAAK,CAAA;IACb,CAAC;YAAS,CAAC;QACT,IAAI,MAAM,KAAK,SAAS;YAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC3E,QAAQ,EAAE,CAAA;QACV,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,aAAa,CAAA;YAC7B,aAAa,GAAG,EAAE,CAAA;YAClB,KAAK,MAAM,OAAO,IAAI,OAAO;gBAAE,OAAO,EAAE,CAAA;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAK,GAAG,IAAI;IACtC,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhD,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAA;YACzD,OAAO,CAAC,KAAK,CAAC,CAAA;QAChB,CAAC,EAAE,KAAK,CAAC,CAAA;QAET,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,OAAO,CAAC,IAAI,CAAC,CAAA;QACf,CAAC,CAAA;QACD,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,MAAM;IACpB,QAAQ,GAAG,CAAC,CAAA;IACZ,aAAa,GAAG,EAAE,CAAA;AACpB,CAAC"}
1
+ {"version":3,"file":"in-flight.js","sourceRoot":"","sources":["../src/in-flight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC,IAAI,QAAQ,GAAG,CAAC,CAAA;AAChB,IAAI,aAAa,GAAsB,EAAE,CAAA;AAEzC,4EAA4E;AAC5E,MAAM,UAAU,aAAa;IAC3B,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAI,EAAoB,EAAE,IAAa;IAChE,QAAQ,EAAE,CAAA;IACV,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACpE,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAA;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,IAAI,CAAA;QACb,MAAM,KAAK,CAAA;IACb,CAAC;YAAS,CAAC;QACT,IAAI,MAAM,KAAK,SAAS;YAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC3E,QAAQ,EAAE,CAAA;QACV,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,aAAa,CAAA;YAC7B,aAAa,GAAG,EAAE,CAAA;YAClB,KAAK,MAAM,OAAO,IAAI,OAAO;gBAAE,OAAO,EAAE,CAAA;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAK,GAAG,IAAI;IACtC,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhD,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAA;YACzD,OAAO,CAAC,KAAK,CAAC,CAAA;QAChB,CAAC,EAAE,KAAK,CAAC,CAAA;QAET,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,OAAO,CAAC,IAAI,CAAC,CAAA;QACf,CAAC,CAAA;QACD,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,MAAM;IACpB,QAAQ,GAAG,CAAC,CAAA;IACZ,aAAa,GAAG,EAAE,CAAA;AACpB,CAAC"}
@@ -102,8 +102,6 @@ export interface FlagChanges {
102
102
  * were correct immediately and unchanged twenty seconds later.
103
103
  */
104
104
  export declare function setFlags(connection: Connection, readOnly: boolean, messageIds: string[], changes: FlagChanges, hint?: string): Promise<BatchResult>;
105
- /** The mailbox Proton puts discarded messages in. Nothing here empties it. */
106
- export declare const TRASH = "Trash";
107
105
  /**
108
106
  * Moves messages to the trash.
109
107
  *