@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 +39 -0
- package/dist/auth.d.ts +179 -18
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +458 -35
- package/dist/auth.js.map +1 -1
- package/dist/bridge.d.ts +10 -2
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +25 -8
- package/dist/bridge.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +143 -4
- package/dist/index.js.map +1 -1
- package/dist/recovery.d.ts +1 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +7 -3
- package/dist/recovery.js.map +1 -1
- package/package.json +1 -1
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
|
-
*
|
|
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
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
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
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
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
|
-
*
|
|
38
|
-
*
|
|
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
|
-
/**
|
|
160
|
-
*
|
|
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
|
|
172
|
-
*
|
|
173
|
-
*
|
|
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
|
/**
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|