@mysten-incubation/memwal-mcp 0.0.14-dev.1 → 0.0.14-dev.11

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 (56) hide show
  1. package/README.md +238 -1
  2. package/dist/auth-required.d.ts +105 -0
  3. package/dist/auth-required.d.ts.map +1 -1
  4. package/dist/auth-required.js +48 -14
  5. package/dist/auth-required.js.map +1 -1
  6. package/dist/auth.d.ts +179 -18
  7. package/dist/auth.d.ts.map +1 -1
  8. package/dist/auth.js +458 -35
  9. package/dist/auth.js.map +1 -1
  10. package/dist/auto-save.d.ts +100 -0
  11. package/dist/auto-save.d.ts.map +1 -0
  12. package/dist/auto-save.js +290 -0
  13. package/dist/auto-save.js.map +1 -0
  14. package/dist/bridge.d.ts +10 -2
  15. package/dist/bridge.d.ts.map +1 -1
  16. package/dist/bridge.js +155 -25
  17. package/dist/bridge.js.map +1 -1
  18. package/dist/compatibility.d.ts.map +1 -1
  19. package/dist/compatibility.js +17 -2
  20. package/dist/compatibility.js.map +1 -1
  21. package/dist/consent.d.ts +36 -0
  22. package/dist/consent.d.ts.map +1 -0
  23. package/dist/consent.js +129 -0
  24. package/dist/consent.js.map +1 -0
  25. package/dist/crypto.d.ts.map +1 -1
  26. package/dist/crypto.js +13 -1
  27. package/dist/crypto.js.map +1 -1
  28. package/dist/health-probe.d.ts +35 -0
  29. package/dist/health-probe.d.ts.map +1 -0
  30. package/dist/health-probe.js +87 -0
  31. package/dist/health-probe.js.map +1 -0
  32. package/dist/index.d.ts +11 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +266 -5
  35. package/dist/index.js.map +1 -1
  36. package/dist/instructions.d.ts +17 -21
  37. package/dist/instructions.d.ts.map +1 -1
  38. package/dist/instructions.js +74 -12
  39. package/dist/instructions.js.map +1 -1
  40. package/dist/login.d.ts +15 -1
  41. package/dist/login.d.ts.map +1 -1
  42. package/dist/login.js +109 -9
  43. package/dist/login.js.map +1 -1
  44. package/dist/memory-policy.d.ts +38 -0
  45. package/dist/memory-policy.d.ts.map +1 -0
  46. package/dist/memory-policy.js +80 -0
  47. package/dist/memory-policy.js.map +1 -0
  48. package/dist/messages.d.ts +10 -3
  49. package/dist/messages.d.ts.map +1 -1
  50. package/dist/messages.js +16 -5
  51. package/dist/messages.js.map +1 -1
  52. package/dist/recovery.d.ts +1 -0
  53. package/dist/recovery.d.ts.map +1 -1
  54. package/dist/recovery.js +15 -13
  55. package/dist/recovery.js.map +1 -1
  56. package/package.json +1 -1
package/dist/login.d.ts CHANGED
@@ -18,7 +18,19 @@ export interface LoginOptions {
18
18
  * can't see the spawned browser tab.
19
19
  */
20
20
  onUrl?: (connectUrl: string) => void;
21
+ freshKey?: boolean;
22
+ /** When set, `startOrReuseLoginFlow` aborts this listener so a newer
23
+ * sign-in can mint a key without the old timeout or callback writing
24
+ * over it. */
25
+ signal?: AbortSignal;
26
+ /** Fired when `freshKey` drops a pending record. The public key is no
27
+ * longer in the write-ahead file after the replacement is saved. */
28
+ onDiscarded?: (key: {
29
+ publicKey: string;
30
+ address: string;
31
+ }) => void;
21
32
  }
33
+ export declare function isLoginSuperseded(err: unknown): boolean;
22
34
  /** How long the background login listener stays bound, shared by every
23
35
  * caller (auth-required mode and the bridge) so one env var controls the
24
36
  * same deadline everywhere instead of each call site hard-coding its own.
@@ -46,6 +58,8 @@ export declare function startOrReuseLoginFlow(opts?: LoginOptions, onSuccess?: (
46
58
  * URL and returned. Without this the failure is unobservable — see the
47
59
  * catch below. */
48
60
  onFailure?: (err: unknown) => void): InflightLogin;
49
- /** Drop the in-flight handle. Does not abort a listener already bound. */
61
+ /** Drop the in-flight handle and close its listener. A late callback or
62
+ * timeout on that listener must not save credentials or clear the pending
63
+ * record a newer login just wrote. */
50
64
  export declare function resetInflightLogin(): void;
51
65
  //# sourceMappingURL=login.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAYnD,MAAM,WAAW,YAAY;IACzB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAUD;;;;wEAIwE;AACxE,wBAAgB,qBAAqB,IAAI,MAAM,CAM9C;AAsID;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAqTnF;AAED,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACtC;AAID;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACjC,IAAI,GAAE,YAAiB,EACvB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;AAC9D;;kBAEkB;AAClB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GACnC,aAAa,CA2Ef;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAYnD,MAAM,WAAW,YAAY;IACzB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;kBAEc;IACd,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;wEACoE;IACpE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACvE;AAQD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEvD;AAUD;;;;wEAIwE;AACxE,wBAAgB,qBAAqB,IAAI,MAAM,CAM9C;AAsID;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8XnF;AAED,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACtC;AAKD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACjC,IAAI,GAAE,YAAiB,EACvB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;AAC9D;;kBAEkB;AAClB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GACnC,aAAa,CAsFf;AAED;;sCAEsC;AACtC,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC"}
package/dist/login.js CHANGED
@@ -22,6 +22,14 @@ import open from "open";
22
22
  import { saveCreds, formatReplacementNotice, formatPendingSignInWarning, savePendingLogin, clearPendingLogin, reusablePendingLogin, } from "./auth.js";
23
23
  import { generateKeypair } from "./crypto.js";
24
24
  import { log, note } from "./logger.js";
25
+ function loginSupersededError() {
26
+ const err = new Error("Sign-in was replaced by a newer login. This listener is closed.");
27
+ err.name = "MemWalLoginSuperseded";
28
+ return err;
29
+ }
30
+ export function isLoginSuperseded(err) {
31
+ return err instanceof Error && err.name === "MemWalLoginSuperseded";
32
+ }
25
33
  const DEFAULTS = {
26
34
  webUrl: process.env.MEMWAL_WEB_URL ?? "https://memory.walrus.xyz",
27
35
  relayerUrl: process.env.MEMWAL_SERVER_URL ?? "https://relayer.memory.walrus.xyz",
@@ -156,18 +164,48 @@ export async function loginFlow(opts = {}) {
156
164
  ...opts,
157
165
  timeoutMs: opts.timeoutMs ?? resolveLoginTimeoutMs(),
158
166
  };
167
+ // A newer freshKey can abort during generateKeypair, before the listener
168
+ // below is subscribed. Bail before this flow writes the pending record or
169
+ // hands out a URL whose server is already closed.
170
+ const superseded = () => cfg.signal?.aborted === true;
171
+ if (superseded())
172
+ throw loginSupersededError();
159
173
  // Adopt a still-valid record for this relayer rather than minting over it.
160
174
  // Recovery only runs at process start and is skipped for `--login`, so a
161
175
  // timed-out login followed by `memwal_login` in the same process would
162
176
  // otherwise replace the only copy of a key the browser may already have
163
177
  // paid to register.
164
- const reusable = reusablePendingLogin(cfg.relayerUrl);
178
+ const onDisk = reusablePendingLogin(cfg.relayerUrl);
179
+ const discarded = opts.freshKey ? onDisk : null;
180
+ const reusable = discarded ? null : onDisk;
165
181
  if (reusable) {
166
182
  log.info("login.pending.reused", {
167
183
  publicKey: reusable.delegatePublicKeyHex,
168
184
  createdAt: reusable.createdAt,
169
185
  });
170
186
  }
187
+ if (discarded) {
188
+ log.warn("login.pending.discarded", {
189
+ publicKey: discarded.delegatePublicKeyHex,
190
+ address: discarded.delegateAddress,
191
+ createdAt: discarded.createdAt,
192
+ });
193
+ note(`Minting a fresh delegate key and abandoning the one left by the last ` +
194
+ `unfinished sign-in:\n` +
195
+ ` public key: ${discarded.delegatePublicKeyHex}\n` +
196
+ ` address: ${discarded.delegateAddress}\n` +
197
+ `If you approved that key in your wallet, nothing will use it again — ` +
198
+ `remove it from the dashboard.`);
199
+ try {
200
+ opts.onDiscarded?.({
201
+ publicKey: discarded.delegatePublicKeyHex,
202
+ address: discarded.delegateAddress,
203
+ });
204
+ }
205
+ catch {
206
+ /* caller errors don't break the flow */
207
+ }
208
+ }
171
209
  const keypair = reusable
172
210
  ? {
173
211
  privateKeyHex: reusable.delegatePrivateKey,
@@ -175,6 +213,8 @@ export async function loginFlow(opts = {}) {
175
213
  suiAddress: reusable.delegateAddress,
176
214
  }
177
215
  : await generateKeypair();
216
+ if (superseded())
217
+ throw loginSupersededError();
178
218
  // Write-ahead (WALM-332). From the moment anything can hand this public key
179
219
  // to a browser, the private half has to survive losing this process — the
180
220
  // browser's on-chain `add_delegate_key` costs gas and cannot be undone, and
@@ -230,6 +270,10 @@ export async function loginFlow(opts = {}) {
230
270
  // The callback POST *body* field stays `state` (localhost POST, never
231
271
  // part of a redirect_uri, so no collision there).
232
272
  `&connectState=${stateToken}`;
273
+ if (superseded()) {
274
+ server.close();
275
+ throw loginSupersededError();
276
+ }
233
277
  note(`Opening browser to authorize this MCP client...`);
234
278
  note(`If your browser doesn't open, visit: ${connectUrl}`);
235
279
  log.info("login.start", { port, publicKey: keypair.publicKeyHex, label: cfg.label });
@@ -254,16 +298,49 @@ export async function loginFlow(opts = {}) {
254
298
  // server-side prevents callers from bypassing the consent-page preflight
255
299
  // and posting a valid-looking callback directly.
256
300
  let preflightVerified = false;
301
+ let retired = false;
302
+ let timer;
303
+ // One winner. The timeout, an abort from a newer `freshKey` login, and the
304
+ // callback all try to finish this listener. Claiming first closes the
305
+ // others out so a late callback cannot saveCreds over the replacement key.
306
+ const claim = () => {
307
+ if (retired)
308
+ return false;
309
+ retired = true;
310
+ if (timer)
311
+ clearTimeout(timer);
312
+ return true;
313
+ };
257
314
  const done = new Promise((resolve) => {
258
- const timer = setTimeout(() => {
315
+ const retire = (err) => {
316
+ if (!claim())
317
+ return;
318
+ error = err;
319
+ server.close();
320
+ resolve();
321
+ };
322
+ timer = setTimeout(() => {
259
323
  if (!creds) {
260
- error = new Error(`Login timed out after ${cfg.timeoutMs}ms. If you already approved the wallet transaction, that delegate key is saved on disk: the next start reclaims it, and running login again cannot register it a second time. Only remove it from the dashboard if you mean to abandon it.`);
261
- server.close();
262
- resolve();
324
+ retire(new Error(`Login timed out after ${cfg.timeoutMs}ms. A restart retries the same key. ` +
325
+ `If the wallet keeps rejecting it, call memwal_login with freshKey: true. ` +
326
+ `That mints a new key and closes the sign-in already open; remove the old ` +
327
+ `one from the dashboard if you already approved it on-chain.`));
263
328
  }
264
- }, cfg.timeoutMs).unref?.();
265
- void timer;
329
+ }, cfg.timeoutMs);
330
+ timer.unref?.();
331
+ if (cfg.signal) {
332
+ const onAbort = () => retire(loginSupersededError());
333
+ if (cfg.signal.aborted)
334
+ onAbort();
335
+ else
336
+ cfg.signal.addEventListener("abort", onAbort, { once: true });
337
+ }
266
338
  server.on("request", async (req, res) => {
339
+ if (retired) {
340
+ res.writeHead(409, { "content-type": "text/html" });
341
+ res.end(FAIL_HTML_TEMPLATE("This sign-in was replaced by a newer login."));
342
+ return;
343
+ }
267
344
  // CORS — only the dashboard origin we control may POST. `*` would
268
345
  // let any web page on the internet talk to this localhost port.
269
346
  res.setHeader("access-control-allow-origin", expectedOrigin);
@@ -376,6 +453,13 @@ export async function loginFlow(opts = {}) {
376
453
  // closing after success, but this also rejects a duplicate
377
454
  // callback that races during the response-flush window.
378
455
  preflightVerified = false;
456
+ // After `readBody` awaits, a newer freshKey login may already
457
+ // own the write-ahead record. Losing the claim must not save.
458
+ if (!claim()) {
459
+ res.writeHead(409, { "content-type": "text/html" });
460
+ res.end(FAIL_HTML_TEMPLATE("This sign-in was replaced by a newer login."));
461
+ return;
462
+ }
379
463
  creds = {
380
464
  delegatePrivateKey: keypair.privateKeyHex,
381
465
  delegatePublicKeyHex: keypair.publicKeyHex,
@@ -437,6 +521,7 @@ export async function loginFlow(opts = {}) {
437
521
  return creds;
438
522
  }
439
523
  let inflightLogin = null;
524
+ let inflightAbort = null;
440
525
  /**
441
526
  * Start a login flow, or join one already in progress in this process.
442
527
  * Concurrent `memwal_login` calls share the same listener and URL so a
@@ -449,8 +534,14 @@ export function startOrReuseLoginFlow(opts = {}, onSuccess,
449
534
  * URL and returned. Without this the failure is unobservable — see the
450
535
  * catch below. */
451
536
  onFailure) {
452
- if (inflightLogin)
537
+ if (opts.freshKey) {
538
+ resetInflightLogin();
539
+ }
540
+ else if (inflightLogin) {
453
541
  return inflightLogin;
542
+ }
543
+ const abort = new AbortController();
544
+ inflightAbort = abort;
454
545
  let resolveUrl;
455
546
  let rejectUrl;
456
547
  const url = new Promise((resolve, reject) => {
@@ -460,6 +551,7 @@ onFailure) {
460
551
  const userOnUrl = opts.onUrl;
461
552
  const result = loginFlow({
462
553
  ...opts,
554
+ signal: abort.signal,
463
555
  onUrl: (connectUrl) => {
464
556
  resolveUrl(connectUrl);
465
557
  try {
@@ -476,6 +568,10 @@ onFailure) {
476
568
  // failure twice for one flow.
477
569
  result.catch((err) => {
478
570
  rejectUrl(err);
571
+ // The replacement login is the one the caller was just handed. The
572
+ // old timeout and its onFailure must not talk over that.
573
+ if (isLoginSuperseded(err))
574
+ return;
479
575
  const msg = err instanceof Error ? err.message : String(err);
480
576
  // This used to be a `warn` and nothing else, which made a background
481
577
  // login failure invisible: `handleLocalLogin` has already returned the
@@ -524,8 +620,12 @@ onFailure) {
524
620
  });
525
621
  return session;
526
622
  }
527
- /** Drop the in-flight handle. Does not abort a listener already bound. */
623
+ /** Drop the in-flight handle and close its listener. A late callback or
624
+ * timeout on that listener must not save credentials or clear the pending
625
+ * record a newer login just wrote. */
528
626
  export function resetInflightLogin() {
627
+ inflightAbort?.abort();
628
+ inflightAbort = null;
529
629
  inflightLogin = null;
530
630
  }
531
631
  //# sourceMappingURL=login.js.map
package/dist/login.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Shared automatic-memory policy — the MCP client's copy.
3
+ *
4
+ * Consumed by `instructions.ts` (the MCP `instructions` field, which is the
5
+ * only proactive-usage channel that survives lazy tool loading) and by
6
+ * `auth-required.ts` (the cold-start / signed-out `tools/list`).
7
+ *
8
+ * WALM-642: before this module the secret rules did not exist at all, and the
9
+ * save guidance was written out three times — here, in the plugin hooks, and in
10
+ * the relayer sidecar's tool descriptions — with nothing tying them together.
11
+ * A preference stated next to a password was forwarded whole.
12
+ */
13
+ /**
14
+ * The secret-exclusion and do-not-save rules, stated verbatim by every
15
+ * automatic-save surface.
16
+ *
17
+ * These are model-facing rules, not enforcement. The programmatic backstop is
18
+ * the redactor in the relayer sidecar's write path
19
+ * (services/server/scripts/mcp/tools/redaction.ts), which runs before any text
20
+ * reaches the SDK.
21
+ */
22
+ export declare const SECRET_EXCLUSION_RULES: string;
23
+ /**
24
+ * One-line form, for surfaces with no room for the full block (a per-turn
25
+ * nudge, a tool description tail). It is a reminder of the block above, never a
26
+ * replacement for it: any surface that drives an automatic save states the full
27
+ * `SECRET_EXCLUSION_RULES`.
28
+ */
29
+ export declare const SECRET_EXCLUSION_SUMMARY: string;
30
+ /**
31
+ * Whether to save unprompted is the user's standing choice, and this is the
32
+ * sentence that says so. A direct request ("remember that ...") is never gated
33
+ * by it — the gate is only on saving something the user did not ask you to save.
34
+ */
35
+ export declare const AUTO_SAVE_OPT_IN_RULE: string;
36
+ /** Bumped whenever the text above changes, so a stale copy is identifiable. */
37
+ export declare const MEMORY_POLICY_VERSION = "2026-09-17.2";
38
+ //# sourceMappingURL=memory-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-policy.d.ts","sourceRoot":"","sources":["../src/memory-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAuBH;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,QAWxB,CAAC;AAEZ;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,QAI1B,CAAC;AAEZ;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAMvB,CAAC;AAEZ,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,iBAAiB,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Shared automatic-memory policy — the MCP client's copy.
3
+ *
4
+ * Consumed by `instructions.ts` (the MCP `instructions` field, which is the
5
+ * only proactive-usage channel that survives lazy tool loading) and by
6
+ * `auth-required.ts` (the cold-start / signed-out `tools/list`).
7
+ *
8
+ * WALM-642: before this module the secret rules did not exist at all, and the
9
+ * save guidance was written out three times — here, in the plugin hooks, and in
10
+ * the relayer sidecar's tool descriptions — with nothing tying them together.
11
+ * A preference stated next to a password was forwarded whole.
12
+ */
13
+ // ─── memwal:policy-block:start ───────────────────────────────────────────────
14
+ // WALM-642. The lines between these two markers are BYTE-IDENTICAL in three
15
+ // files that cannot import one another, because the three packages have no
16
+ // workspace link:
17
+ //
18
+ // packages/mcp/src/memory-policy.ts — MCP client: initialize
19
+ // instructions + the
20
+ // cold-start tools/list
21
+ // packages/mcp/plugin/scripts/lib/memory-policy.mjs — plugin hooks: the
22
+ // guidance injected at
23
+ // SessionStart /
24
+ // UserPromptSubmit /
25
+ // PostToolUse
26
+ // services/server/scripts/mcp/tools/memory-policy.ts — relayer sidecar: the
27
+ // live tool descriptions
28
+ //
29
+ // The duplication is deliberate and pinned: `memory-policy-sync` tests on both
30
+ // sides extract this block from each file and compare the bytes, so editing one
31
+ // copy fails the suite until the other two match. Edit the block, then copy it
32
+ // verbatim — markers included — into the other two files.
33
+ /**
34
+ * The secret-exclusion and do-not-save rules, stated verbatim by every
35
+ * automatic-save surface.
36
+ *
37
+ * These are model-facing rules, not enforcement. The programmatic backstop is
38
+ * the redactor in the relayer sidecar's write path
39
+ * (services/server/scripts/mcp/tools/redaction.ts), which runs before any text
40
+ * reaches the SDK.
41
+ */
42
+ export const SECRET_EXCLUSION_RULES = [
43
+ "NEVER save a credential, even when it sits next to something worth saving: passwords,",
44
+ "API keys, access or refresh tokens, private keys, seed or recovery phrases, authorization",
45
+ "headers, session cookies, and connection strings or URLs that embed a user:password.",
46
+ "When a message mixes a preference with a credential, save the preference alone and leave",
47
+ "the credential out; never store the line verbatim.",
48
+ "If the user says not to save something ('don't save this', 'off the record', or the same",
49
+ "in any language), do not save it, and do not save a paraphrase of it either.",
50
+ "Do not store quoted or pasted third-party material — log excerpts, code, articles, other",
51
+ "people's messages — as if it were a fact about this user. Save only what the user is",
52
+ "telling you about themselves or their work, in your own words.",
53
+ ].join(" ");
54
+ /**
55
+ * One-line form, for surfaces with no room for the full block (a per-turn
56
+ * nudge, a tool description tail). It is a reminder of the block above, never a
57
+ * replacement for it: any surface that drives an automatic save states the full
58
+ * `SECRET_EXCLUSION_RULES`.
59
+ */
60
+ export const SECRET_EXCLUSION_SUMMARY = [
61
+ "Never save passwords, keys, tokens or other credentials — not even beside a fact worth",
62
+ "saving; honour an explicit 'do not save this'; never store pasted third-party content as",
63
+ "a fact about the user.",
64
+ ].join(" ");
65
+ /**
66
+ * Whether to save unprompted is the user's standing choice, and this is the
67
+ * sentence that says so. A direct request ("remember that ...") is never gated
68
+ * by it — the gate is only on saving something the user did not ask you to save.
69
+ */
70
+ export const AUTO_SAVE_OPT_IN_RULE = [
71
+ "Whether to save things the user did not ask you to save is their standing choice, made once",
72
+ "in a terminal. When automatic memory is on, save durable facts as they state them; when it is",
73
+ "off, save only what they ask you to save in that turn. That question is put by `memwal-mcp",
74
+ "login` and set by `memwal-mcp auto-save on|off` — never ask the user to answer it in chat,",
75
+ "and never answer it on their behalf.",
76
+ ].join(" ");
77
+ /** Bumped whenever the text above changes, so a stale copy is identifiable. */
78
+ export const MEMORY_POLICY_VERSION = "2026-09-17.2";
79
+ // ─── memwal:policy-block:end ─────────────────────────────────────────────────
80
+ //# sourceMappingURL=memory-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-policy.js","sourceRoot":"","sources":["../src/memory-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,gFAAgF;AAChF,4EAA4E;AAC5E,2EAA2E;AAC3E,kBAAkB;AAClB,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,+EAA+E;AAC/E,2EAA2E;AAC3E,8EAA8E;AAC9E,wEAAwE;AACxE,4EAA4E;AAC5E,qEAAqE;AACrE,8EAA8E;AAC9E,gFAAgF;AAChF,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,0DAA0D;AAE1D;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,uFAAuF;IACvF,2FAA2F;IAC3F,sFAAsF;IACtF,0FAA0F;IAC1F,oDAAoD;IACpD,0FAA0F;IAC1F,8EAA8E;IAC9E,0FAA0F;IAC1F,sFAAsF;IACtF,gEAAgE;CACnE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACpC,wFAAwF;IACxF,0FAA0F;IAC1F,wBAAwB;CAC3B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACjC,6FAA6F;IAC7F,+FAA+F;IAC/F,4FAA4F;IAC5F,4FAA4F;IAC5F,sCAAsC;CACzC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,+EAA+E;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,cAAc,CAAC;AACpD,gFAAgF"}
@@ -23,6 +23,12 @@ export interface LoginPromptInfo {
23
23
  credentialsPath: string;
24
24
  /** True when credentials already exist, so signing in REPLACES them. */
25
25
  signedIn: boolean;
26
+ /** Set when `freshKey` dropped a pending delegate key. The write-ahead
27
+ * file no longer has it, so the prompt is the place that names it. */
28
+ discardedKey?: {
29
+ publicKey: string;
30
+ address: string;
31
+ };
26
32
  }
27
33
  /**
28
34
  * The `memwal_login` tool result, for both modes.
@@ -62,9 +68,10 @@ export declare function loginSuccessNotification(info: LoginSuccessInfo): string
62
68
  * can prefix unconditionally.
63
69
  *
64
70
  * The advice splits on whether the user approved the wallet step. If they did,
65
- * the key is on-chain and in the write-ahead record (WALM-332), so a restart
66
- * reclaims it. Signing in again would reuse that same key, and the dashboard's
67
- * `add_delegate_key` aborts on a key that is already registered.
71
+ * the key is on-chain and in the write-ahead record (WALM-332). A restart
72
+ * retries that same key. `freshKey: true` mints a new one and closes the
73
+ * sign-in that is already open. A key already approved on-chain has to be
74
+ * removed from the dashboard; nothing else will use it.
68
75
  */
69
76
  export declare function loginFailureNotice(reason: string | null): string;
70
77
  //# sourceMappingURL=messages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB;;6EAEyE;IACzE,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC5B,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,eAAe,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CA4BzD;AAOD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAajE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAKvE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAiBhE"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB;;6EAEyE;IACzE,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC5B,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,eAAe,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB;0EACsE;IACtE,YAAY,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAqCzD;AAOD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAajE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAKvE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAkBhE"}
package/dist/messages.js CHANGED
@@ -40,6 +40,15 @@ export function loginPrompt(info) {
40
40
  `**Note:** you are already signed in. Completing this replaces the stored delegate key at \`${info.credentialsPath}\` with the new wallet's.`,
41
41
  ]
42
42
  : []),
43
+ ...(info.discardedKey
44
+ ? [
45
+ ``,
46
+ `**Abandoned key:** this sign-in replaced an unfinished delegate key.`,
47
+ `Public key: \`${info.discardedKey.publicKey}\``,
48
+ `Address: \`${info.discardedKey.address}\``,
49
+ `If you already approved that key on-chain, remove it from the dashboard.`,
50
+ ]
51
+ : []),
43
52
  ``,
44
53
  `_The login link stays valid for 5 minutes. If it expires, call \`memwal_login\` again to get a fresh URL._`,
45
54
  ].join("\n");
@@ -92,9 +101,10 @@ export function loginSuccessNotification(info) {
92
101
  * can prefix unconditionally.
93
102
  *
94
103
  * The advice splits on whether the user approved the wallet step. If they did,
95
- * the key is on-chain and in the write-ahead record (WALM-332), so a restart
96
- * reclaims it. Signing in again would reuse that same key, and the dashboard's
97
- * `add_delegate_key` aborts on a key that is already registered.
104
+ * the key is on-chain and in the write-ahead record (WALM-332). A restart
105
+ * retries that same key. `freshKey: true` mints a new one and closes the
106
+ * sign-in that is already open. A key already approved on-chain has to be
107
+ * removed from the dashboard; nothing else will use it.
98
108
  */
99
109
  export function loginFailureNotice(reason) {
100
110
  if (!reason)
@@ -105,8 +115,9 @@ export function loginFailureNotice(reason) {
105
115
  `Reason: ${reason}`,
106
116
  "",
107
117
  "If you approved the wallet step, that key is registered and saved on this machine.",
108
- "Restart the MCP client within 24 hours and it is reclaimed. Signing in again cannot",
109
- "register the same key twice, and removing it from the dashboard abandons it.",
118
+ "A restart retries the same key. Call",
119
+ "`memwal_login` with `freshKey: true` to mint a new one, and remove it from the",
120
+ "dashboard if you already approved the old key on-chain.",
110
121
  "",
111
122
  "If you did not approve it, sign in again and open the new link straight away. A",
112
123
  "retry only helps once the MCP client is left running through the wallet prompt.",
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsBH;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,IAAqB;IAC7C,OAAO;QACH,4DAA4D;QAC5D,EAAE;QACF,YAAY,IAAI,CAAC,GAAG,EAAE;QACtB,EAAE;QACF,KAAK;QACL,IAAI,CAAC,GAAG;QACR,KAAK;QACL,EAAE;QACF,8CAA8C,IAAI,CAAC,GAAG,GAAG;QACzD,EAAE;QACF,0EAA0E;QAC1E,2EAA2E;QAC3E,wCAAwC;QACxC,EAAE;QACF,2EAA2E;QAC3E,2FAA2F;QAC3F,qIAAqI,IAAI,CAAC,eAAe,IAAI;QAC7J,GAAG,CAAC,IAAI,CAAC,QAAQ;YACb,CAAC,CAAC;gBACI,EAAE;gBACF,8FAA8F,IAAI,CAAC,eAAe,2BAA2B;aAChJ;YACH,CAAC,CAAC,EAAE,CAAC;QACT,EAAE;QACF,4GAA4G;KAC/G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,uEAAuE;AACvE,SAAS,OAAO,CAAC,EAAU;IACvB,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAsB;IACrD,OAAO;QACH,+BAA+B;QAC/B,EAAE;QACF,aAAa,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QACtC,aAAa,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;QAC5C,aAAa,IAAI,CAAC,eAAe,EAAE;QACnC,EAAE;QACF,kEAAkE;QAClE,EAAE;QACF,KAAK;QACL,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAsB;IAC3D,OAAO,CACH,4CAA4C,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;QACvE,wBAAwB,IAAI,CAAC,eAAe,GAAG,CAClD,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAqB;IACpD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO;QACH,kFAAkF;QAClF,EAAE;QACF,WAAW,MAAM,EAAE;QACnB,EAAE;QACF,oFAAoF;QACpF,qFAAqF;QACrF,8EAA8E;QAC9E,EAAE;QACF,iFAAiF;QACjF,iFAAiF;QACjF,EAAE;QACF,KAAK;QACL,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyBH;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,IAAqB;IAC7C,OAAO;QACH,4DAA4D;QAC5D,EAAE;QACF,YAAY,IAAI,CAAC,GAAG,EAAE;QACtB,EAAE;QACF,KAAK;QACL,IAAI,CAAC,GAAG;QACR,KAAK;QACL,EAAE;QACF,8CAA8C,IAAI,CAAC,GAAG,GAAG;QACzD,EAAE;QACF,0EAA0E;QAC1E,2EAA2E;QAC3E,wCAAwC;QACxC,EAAE;QACF,2EAA2E;QAC3E,2FAA2F;QAC3F,qIAAqI,IAAI,CAAC,eAAe,IAAI;QAC7J,GAAG,CAAC,IAAI,CAAC,QAAQ;YACb,CAAC,CAAC;gBACI,EAAE;gBACF,8FAA8F,IAAI,CAAC,eAAe,2BAA2B;aAChJ;YACH,CAAC,CAAC,EAAE,CAAC;QACT,GAAG,CAAC,IAAI,CAAC,YAAY;YACjB,CAAC,CAAC;gBACI,EAAE;gBACF,sEAAsE;gBACtE,iBAAiB,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI;gBAChD,cAAc,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI;gBAC3C,0EAA0E;aAC7E;YACH,CAAC,CAAC,EAAE,CAAC;QACT,EAAE;QACF,4GAA4G;KAC/G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,uEAAuE;AACvE,SAAS,OAAO,CAAC,EAAU;IACvB,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAsB;IACrD,OAAO;QACH,+BAA+B;QAC/B,EAAE;QACF,aAAa,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QACtC,aAAa,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;QAC5C,aAAa,IAAI,CAAC,eAAe,EAAE;QACnC,EAAE;QACF,kEAAkE;QAClE,EAAE;QACF,KAAK;QACL,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAsB;IAC3D,OAAO,CACH,4CAA4C,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;QACvE,wBAAwB,IAAI,CAAC,eAAe,GAAG,CAClD,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAqB;IACpD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO;QACH,kFAAkF;QAClF,EAAE;QACF,WAAW,MAAM,EAAE;QACnB,EAAE;QACF,oFAAoF;QACpF,sCAAsC;QACtC,gFAAgF;QAChF,yDAAyD;QACzD,EAAE;QACF,iFAAiF;QACjF,iFAAiF;QACjF,EAAE;QACF,KAAK;QACL,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC"}
@@ -15,6 +15,7 @@ export interface RecoveryResult {
15
15
  /** Set when a key may be registered on-chain but is not usable locally. */
16
16
  strandedPublicKey?: string;
17
17
  credentials?: MemWalCredentials;
18
+ replacementNotice?: string;
18
19
  }
19
20
  /**
20
21
  * Build the exact string the relayer will rebuild and verify against.
@@ -1 +1 @@
1
- {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAKnD,MAAM,MAAM,eAAe;AACvB,2DAA2D;AACzD,YAAY;AACd,uEAAuE;GACrE,WAAW;AACb,mEAAmE;GACjE,YAAY;AACd,4EAA4E;GAC1E,UAAU;AACZ,wEAAwE;GACtE,aAAa,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACnC;AA2BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAGT;AAED,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,QAAgD,CAAC;AAkE/E;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC,CAkFnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAgC/E"}
1
+ {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAWnD,MAAM,MAAM,eAAe;AACvB,2DAA2D;AACzD,YAAY;AACd,uEAAuE;GACrE,WAAW;AACb,mEAAmE;GACjE,YAAY;AACd,4EAA4E;GAC1E,UAAU;AACZ,wEAAwE;GACtE,aAAa,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AA2BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAGT;AAED,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,QAAgD,CAAC;AAkE/E;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC,CAoFnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAmC/E"}
package/dist/recovery.js CHANGED
@@ -11,7 +11,7 @@
11
11
  * back the identity the key already proves.
12
12
  */
13
13
  import { randomUUID, createHash } from "node:crypto";
14
- import { loadCreds, saveCreds, loadPendingLogin, clearPendingLogin } from "./auth.js";
14
+ import { loadCreds, saveCreds, loadPendingLogin, clearPendingLogin, formatReplacementNotice, } from "./auth.js";
15
15
  import { signMessage } from "./crypto.js";
16
16
  import { log } from "./logger.js";
17
17
  /** Same wall-clock budget as a normal cold-start probe: recovery must never
@@ -146,8 +146,7 @@ export async function recoverPendingLogin() {
146
146
  // again, after removing the key from the dashboard if it was already
147
147
  // registered — is worth giving. During a transient upstream
148
148
  // failure that advice is worse than silence: the key is still good, and
149
- // `unavailable` correctly says the next start retries it with no action
150
- // from the user.
149
+ // `unavailable` correctly says the next start retries it.
151
150
  //
152
151
  // So only 401/403 is a denial. A 503 carrying
153
152
  // `x-auth-error: AUTH_UPSTREAM_UNAVAILABLE` is Sui RPC being down, and
@@ -158,12 +157,11 @@ export async function recoverPendingLogin() {
158
157
  res.authError !== AUTH_UPSTREAM_UNAVAILABLE;
159
158
  const outcome = denied ? "rejected" : "unavailable";
160
159
  // Non-destructive either way. A 401 is ambiguous even when it IS a
161
- // denial: on testnet the registry scan is disabled outright and a
162
- // genuinely registered key is refused for want of an x-account-id hint
163
- // (services/server/src/auth.rs — "x-account-id is required for
164
- // delegate-key authentication on testnet"). Clearing here would destroy
165
- // a recoverable key in exactly that environment, so the record is
166
- // always left for its TTL to retire.
160
+ // denial: a genuinely registered key is refused when the request has
161
+ // no x-account-id (services/server/src/auth.rs — "x-account-id is
162
+ // required for delegate-key authentication"). Clearing here would
163
+ // destroy a recoverable key, so the record is always left for its
164
+ // TTL to retire.
167
165
  log.warn(`login.pending.${outcome}`, {
168
166
  publicKey: pending.delegatePublicKeyHex,
169
167
  status: res.status,
@@ -183,13 +181,17 @@ export async function recoverPendingLogin() {
183
181
  createdAt: new Date().toISOString(),
184
182
  version: 1,
185
183
  };
186
- saveCreds(creds);
184
+ const saved = saveCreds(creds);
187
185
  clearPendingLogin();
188
186
  log.info("login.pending.recovered", {
189
187
  accountId: creds.accountId,
190
188
  delegateAddress: creds.delegateAddress,
191
189
  });
192
- return { outcome: "recovered", credentials: creds };
190
+ return {
191
+ outcome: "recovered",
192
+ credentials: creds,
193
+ replacementNotice: formatReplacementNotice(saved, creds.accountId) ?? undefined,
194
+ };
193
195
  }
194
196
  /**
195
197
  * The line to show the user when a stranded key could not be reclaimed.
@@ -217,10 +219,10 @@ export function formatStrandedLoginNotice(result) {
217
219
  lines.push(`You have since signed in again, so your current credentials are fine.`, `Revoke the key above from the dashboard if you don't recognise it.`);
218
220
  }
219
221
  else if (result.outcome === "unavailable") {
220
- lines.push(`The relayer could not be reached to check. This will be retried on the`, `next start — no action needed yet.`);
222
+ lines.push(`The relayer could not be reached to check. This will be retried on the`, `next start. If sign-in keeps failing, run`, `\`npx -y @mysten-incubation/memwal-mcp login\`, or call \`memwal_login\` with`, `\`freshKey: true\`: both mint a new key instead of waiting on this one.`, `That abandons the key above, so if you approved it on-chain, remove it`, `from the dashboard — nothing will use it again.`);
221
223
  }
222
224
  else {
223
- lines.push(`The relayer did not accept it. If you never approved the wallet step, run`, `\`memwal_login\`: it reuses this key. If you did, remove the key above from`, `the dashboard first and then run \`memwal_login\`, because the wallet step`, `cannot register a key that is already there. This is expected on Testnet,`, `where the relayer cannot confirm a registered key at start.`);
225
+ lines.push(`The relayer did not accept it. If you never approved the wallet step, run`, `\`memwal_login\`: it reuses this key. If you did, remove the key above from`, `the dashboard first and then run \`memwal_login\`, because the wallet step`, `cannot register a key that is already there.`);
224
226
  }
225
227
  return lines.join("\n");
226
228
  }