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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -152,6 +152,45 @@ Credentials are stored locally in `~/.memwal/credentials.json`. To remove them:
152
152
  npx -y @mysten-incubation/memwal-mcp --logout
153
153
  ```
154
154
 
155
+ ### Per-project credentials
156
+
157
+ A project can keep its own `.memwal/credentials.json` so memory written from it
158
+ goes to a separate account. That file lives inside the repository, where anyone
159
+ who can commit to it — or who can get you to open a clone — could otherwise
160
+ choose the account and relayer your memories go to. So it is **ignored until you
161
+ approve it**, once per machine:
162
+
163
+ ```sh
164
+ cd path/to/project
165
+ npx -y @mysten-incubation/memwal-mcp approve-project
166
+ ```
167
+
168
+ Until then the global credentials are used, and a line on stderr names the file
169
+ that was skipped and the destination it wanted. An approval covers one exact
170
+ project path, account, delegate key and relayer: if any of those change, it has
171
+ to be approved again. The record is kept in `~/.memwal/project-approvals.json`,
172
+ outside the repository, so a repository cannot carry its own approval.
173
+ `revoke-project` withdraws it.
174
+
175
+ Approving also picks the file that is **written**: a later sign-in from that
176
+ project saves a delegate private key into `.memwal/credentials.json` in plain
177
+ text, inside the repository. `approve-project` says so, and so does the sign-in
178
+ warning. Add `.memwal/` to your `.gitignore`. (The short-lived login
179
+ write-ahead record is kept outside the repository either way.)
180
+
181
+ `MEMWAL_CREDS_DIR` points both the credentials and the approval record at a
182
+ directory of your choosing and overrides project resolution entirely, with no
183
+ approval. Because it skips the gate, it must be an **absolute path outside the
184
+ current project**: a relative value would resolve against the working directory
185
+ and put the approval record inside the repository, and an MCP client passes on
186
+ the `env` block it reads from `.cursor/mcp.json` / `.vscode/mcp.json` /
187
+ `.claude/settings.json` in the checkout — where `${workspaceFolder}` is expanded,
188
+ so an in-project absolute path is not proof you chose it. Anything else is
189
+ refused with an error naming the value, rather than quietly ignored. An empty
190
+ value means unset.
191
+
192
+ `memwal_health` reports the destination in use as `account=… relayer=…`.
193
+
155
194
  ## License
156
195
 
157
196
  Apache-2.0
package/dist/auth.d.ts CHANGED
@@ -21,25 +21,163 @@ export interface MemWalCredentials {
21
21
  version: 1;
22
22
  }
23
23
  /**
24
- * Which credentials file this process should read and write.
24
+ * Refusal of a `MEMWAL_CREDS_DIR` that cannot be trusted to sit outside a
25
+ * repository. Thrown, never swallowed — see {@link credsDirOverride}.
26
+ */
27
+ export declare class UntrustedCredsDirError extends Error {
28
+ constructor(message: string);
29
+ }
30
+ /** The approval store. Outside every repository, on purpose. */
31
+ export declare function projectApprovalsPath(): string;
32
+ /**
33
+ * What approval is granted against: the destination, not the file's bytes.
25
34
  *
26
- * The nearest project-local `.memwal/credentials.json` at or above the working
27
- * directory wins over the global one, the way `.npmrc` and `.git/config`
28
- * resolve. Signing in from one project otherwise repoints every other project
29
- * on the machine at a different account and delegate key, silently — memories
30
- * then land on the wrong account, on immutable storage, with no delete path
31
- * (GH #628).
35
+ * Account, delegate and relayer are the three fields that decide WHERE a
36
+ * memory ends up and WHO signs for it. Hashing them means a project file may
37
+ * be re-saved, relabelled or reformatted freely, while any edit that moves the
38
+ * destination invalidates the approval and has to be approved again. The
39
+ * delegate private key is deliberately NOT part of it it must never be read
40
+ * into a record that gets written back out.
41
+ */
42
+ export declare function credentialsFingerprint(creds: {
43
+ accountId: string;
44
+ delegateAddress: string;
45
+ relayerUrl: string;
46
+ }): string;
47
+ /** One approved project credentials file. Contains no secret. */
48
+ export interface ProjectApproval {
49
+ /** Canonical path of the approved `.memwal/credentials.json`. */
50
+ path: string;
51
+ fingerprint: string;
52
+ accountId: string;
53
+ delegateAddress: string;
54
+ relayerUrl: string;
55
+ approvedAt: string;
56
+ }
57
+ /** Why a project credentials file was, or was not, used. */
58
+ export type ProjectCredsDecision =
59
+ /** Approved for exactly this account + delegate + relayer: in use. */
60
+ "approved"
61
+ /** Never approved on this machine. Ignored. */
62
+ | "unapproved"
63
+ /** Approved once, but the destination has since changed. Ignored. */
64
+ | "changed"
65
+ /** Present but not valid credentials, so there is nothing to approve. */
66
+ | "unreadable";
67
+ export interface ProjectCredsInfo {
68
+ /** The project-local file that was found. */
69
+ path: string;
70
+ decision: ProjectCredsDecision;
71
+ /** Destination it points at. Absent when the file could not be read — and
72
+ * never the delegate private key, which no caller of this ever needs. */
73
+ accountId?: string;
74
+ relayerUrl?: string;
75
+ }
76
+ /** Which file won, and what happened to any project-local file that did not. */
77
+ export interface CredsResolution {
78
+ /** The file this process reads and writes. */
79
+ path: string;
80
+ source: "override" | "project" | "global";
81
+ /** The project-local file found by the walk, if any — present whether or
82
+ * not it was used, so callers can report one they ignored. */
83
+ project?: ProjectCredsInfo;
84
+ }
85
+ /**
86
+ * Which credentials file this process should read and write, and why.
32
87
  *
33
- * Presence-based on purpose: creating the local file is the opt-in, so this is
34
- * purely additive. Resolved per call rather than at module load, because the
35
- * working directory is not knowable at import time.
88
+ * `MEMWAL_CREDS_DIR` wins outright, and skips the approval gate but only a
89
+ * value {@link credsDirOverride} accepts, i.e. a non-empty ABSOLUTE path
90
+ * outside the current project. It is "trusted" exactly as far as whoever set
91
+ * the environment is, and an MCP client will hand this process an `env` block
92
+ * it read out of the checkout, so a value that could have been committed is
93
+ * refused rather than obeyed. Otherwise the nearest project-local
94
+ * `.memwal/credentials.json` at or above the working directory is used IF the
95
+ * user has approved that exact destination on this machine (WALM-639), and the
96
+ * global file is used in every other case — including an unapproved, altered
97
+ * or malformed project file. Falling back rather than failing keeps a machine
98
+ * that has never seen a project file behaving exactly as it always did.
36
99
  *
37
- * `MEMWAL_CREDS_DIR` overrides both project and global resolution when set,
38
- * and is re-read on every call.
100
+ * Resolved per call rather than at module load, because neither the working
101
+ * directory nor the approval store is knowable at import time.
39
102
  */
103
+ export declare function resolveCreds(): CredsResolution;
104
+ /** The credentials file in use. Thin wrapper over {@link resolveCreds} so the
105
+ * many callers that only need a path are unchanged. */
40
106
  export declare function credsPath(): string;
41
107
  /** Load credentials from disk. Returns null if missing or malformed. */
42
108
  export declare function loadCreds(): MemWalCredentials | null;
109
+ /** What {@link approveProjectCreds} did. */
110
+ export interface ApproveProjectResult {
111
+ outcome:
112
+ /** Newly approved. */
113
+ "approved"
114
+ /** Approved again after the destination changed. */
115
+ | "reapproved"
116
+ /** Already approved for this exact destination; nothing written. */
117
+ | "already-approved"
118
+ /** No project-local credentials file at or above the working directory. */
119
+ | "none"
120
+ /** A project file exists but is not valid credentials. */
121
+ | "unreadable"
122
+ /** `MEMWAL_CREDS_DIR` is set, so project resolution never runs. */
123
+ | "overridden";
124
+ projectPath?: string;
125
+ accountId?: string;
126
+ relayerUrl?: string;
127
+ /** Destination the previous approval covered, when this replaced one. */
128
+ previousAccountId?: string;
129
+ previousRelayerUrl?: string;
130
+ approvalsPath: string;
131
+ }
132
+ /**
133
+ * Approve the project-local credentials found from the working directory.
134
+ *
135
+ * Deliberately takes no arguments: it approves what resolution would otherwise
136
+ * ignore, from the same directory, so "what am I approving" and "what will be
137
+ * used" cannot drift apart.
138
+ */
139
+ export declare function approveProjectCreds(): ApproveProjectResult;
140
+ /** What {@link revokeProjectCredsApproval} did. */
141
+ export interface RevokeProjectResult {
142
+ outcome: "revoked" | "none";
143
+ projectPath?: string;
144
+ approvalsPath: string;
145
+ }
146
+ /**
147
+ * Withdraw the approval for the project-local credentials here.
148
+ *
149
+ * Keyed on the path rather than on the file's current contents, so an approval
150
+ * can be withdrawn even after the file it covered was edited or deleted — a
151
+ * revoke that only worked while the destination still matched would be
152
+ * useless exactly when it is wanted.
153
+ */
154
+ export declare function revokeProjectCredsApproval(): RevokeProjectResult;
155
+ /**
156
+ * The warning for a project credentials file that was found and NOT used, or
157
+ * null when there is nothing to report.
158
+ *
159
+ * Says which file was ignored, where memory is going instead, and the exact
160
+ * command that approves it — a silent fallback would be the mirror image of
161
+ * the silent redirect this gate exists to stop. Never contains a key: the only
162
+ * fields it reads are the account id and the relayer URL.
163
+ */
164
+ export declare function formatProjectCredsNotice(resolution?: CredsResolution): string | null;
165
+ /**
166
+ * What approving a project credentials file costs, beyond redirecting reads.
167
+ *
168
+ * Approval does not just decide which file is READ — it decides which file is
169
+ * WRITTEN. `saveCreds` writes to `credsPath()`, so from here on every sign-in
170
+ * from this project puts a fresh 64-hex Ed25519 delegate seed, in plaintext,
171
+ * into a directory that is inside the repository. An attacker who planted the
172
+ * file planted the directory too, so it is already tracked rather than ignored,
173
+ * and `git add -A` stages the key. The user cannot weigh that if nobody says
174
+ * it, and "you approved a destination" is not the same sentence as "you
175
+ * approved storing a private key in your repo".
176
+ *
177
+ * Separate from {@link formatProjectCredsNotice} on purpose: that one is about
178
+ * a file that was IGNORED, this one is about a file that is about to be used.
179
+ */
180
+ export declare function formatProjectCredsStorageWarning(projectPath: string): string;
43
181
  /**
44
182
  * Write credentials with secure (`0600`) permission, to whichever file
45
183
  * `credsPath()` resolves to.
@@ -102,6 +240,11 @@ export interface SaveCredsResult {
102
240
  * callback arrives, by which point a delegate key has already been registered
103
241
  * on-chain — so a warning that waits for both ids is a warning that arrives
104
242
  * too late to act on.
243
+ *
244
+ * When the file being replaced is an approved project one, that is also the
245
+ * last moment before a new private key lands inside a repository, so the
246
+ * storage warning is repeated here rather than left behind at approval time —
247
+ * approval may have been months ago, or done by someone else on the machine.
105
248
  */
106
249
  export declare function formatPendingSignInWarning(): string | null;
107
250
  /**
@@ -156,8 +299,26 @@ export interface PendingLogin {
156
299
  createdAt: string;
157
300
  version: 1;
158
301
  }
159
- /** Sits beside whichever credentials file `credsPath()` resolves to, so a
160
- * project-local sign-in recovers into that same project. */
302
+ /**
303
+ * Where the write-ahead record lives never inside a repository.
304
+ *
305
+ * It used to sit beside whichever credentials file `credsPath()` resolved to,
306
+ * which reads as "recover into the project you signed in from" and is the right
307
+ * intent. But for an approved project that path is `<repo>/.memwal/`, so every
308
+ * sign-in dropped a plaintext 64-hex delegate seed into the working tree —
309
+ * under a directory an attacker who planted the credentials file had already
310
+ * created, so tracked rather than ignored, and staged by `git add -A`.
311
+ *
312
+ * Nothing about this record needs to be in the repo. It is short-lived
313
+ * handshake state, nobody edits it by hand, and the only property that matters
314
+ * is that the project which started a sign-in is the one that can reclaim it.
315
+ * So it moves to the trusted state directory, keyed by a hash of the
316
+ * credentials path: same per-project scoping, no key material in the checkout.
317
+ *
318
+ * The non-project cases are byte-for-byte where they always were —
319
+ * `dirname(credsPath())` IS `trustedStateDir()` for both the override and the
320
+ * global file — so a machine that has never approved a project sees no change.
321
+ */
161
322
  export declare function pendingLoginPath(): string;
162
323
  /**
163
324
  * Persist the pending keypair. Throws if it cannot.
@@ -168,10 +329,10 @@ export declare function pendingLoginPath(): string;
168
329
  * the connect URL while claiming a durability that does not exist — the
169
330
  * original WALM-332 loss, now silent.
170
331
  *
171
- * Failing the login costs the user nothing: this file sits beside
172
- * `credentials.json`, so a directory that cannot take it cannot take the
173
- * credentials either. The same login would have failed at the callback anyway,
174
- * one on-chain `add_delegate_key` later.
332
+ * Failing the login costs the user nothing: this file lives in the same
333
+ * trusted state directory the approval record does, so a directory that cannot
334
+ * take it is one this process cannot keep state in at all. The same login would
335
+ * have failed at the callback anyway, one on-chain `add_delegate_key` later.
175
336
  */
176
337
  export declare function savePendingLogin(pending: PendingLogin): void;
177
338
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}