@minicor/mcp-server 3.8.0 → 3.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +33 -1
  2. package/dist/__tests__/builder-discovery.test.d.ts +2 -0
  3. package/dist/__tests__/builder-discovery.test.d.ts.map +1 -0
  4. package/dist/__tests__/builder-discovery.test.js +120 -0
  5. package/dist/__tests__/builder-discovery.test.js.map +1 -0
  6. package/dist/__tests__/codemode.test.js +35 -0
  7. package/dist/__tests__/codemode.test.js.map +1 -1
  8. package/dist/__tests__/config-stores.test.d.ts +2 -0
  9. package/dist/__tests__/config-stores.test.d.ts.map +1 -0
  10. package/dist/__tests__/config-stores.test.js +88 -0
  11. package/dist/__tests__/config-stores.test.js.map +1 -0
  12. package/dist/__tests__/dev-mode-draft.test.d.ts +2 -0
  13. package/dist/__tests__/dev-mode-draft.test.d.ts.map +1 -0
  14. package/dist/__tests__/dev-mode-draft.test.js +260 -0
  15. package/dist/__tests__/dev-mode-draft.test.js.map +1 -0
  16. package/dist/__tests__/disk-token-store.test.d.ts +2 -0
  17. package/dist/__tests__/disk-token-store.test.d.ts.map +1 -0
  18. package/dist/__tests__/disk-token-store.test.js +231 -0
  19. package/dist/__tests__/disk-token-store.test.js.map +1 -0
  20. package/dist/__tests__/laminar-client.test.js +130 -0
  21. package/dist/__tests__/laminar-client.test.js.map +1 -1
  22. package/dist/__tests__/lib-dev-mode.test.d.ts +2 -0
  23. package/dist/__tests__/lib-dev-mode.test.d.ts.map +1 -0
  24. package/dist/__tests__/lib-dev-mode.test.js +48 -0
  25. package/dist/__tests__/lib-dev-mode.test.js.map +1 -0
  26. package/dist/__tests__/server-profile.test.d.ts +2 -0
  27. package/dist/__tests__/server-profile.test.d.ts.map +1 -0
  28. package/dist/__tests__/server-profile.test.js +311 -0
  29. package/dist/__tests__/server-profile.test.js.map +1 -0
  30. package/dist/builder-index.d.ts +3 -0
  31. package/dist/builder-index.d.ts.map +1 -0
  32. package/dist/builder-index.js +5 -0
  33. package/dist/builder-index.js.map +1 -0
  34. package/dist/codemode.d.ts +3 -1
  35. package/dist/codemode.d.ts.map +1 -1
  36. package/dist/codemode.js +20 -6
  37. package/dist/codemode.js.map +1 -1
  38. package/dist/disk-token-store.d.ts +101 -0
  39. package/dist/disk-token-store.d.ts.map +1 -0
  40. package/dist/disk-token-store.js +398 -0
  41. package/dist/disk-token-store.js.map +1 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +64 -118
  44. package/dist/index.js.map +1 -1
  45. package/dist/laminar-client.d.ts +105 -0
  46. package/dist/laminar-client.d.ts.map +1 -1
  47. package/dist/laminar-client.js +41 -1
  48. package/dist/laminar-client.js.map +1 -1
  49. package/dist/lib.d.ts +4 -0
  50. package/dist/lib.d.ts.map +1 -1
  51. package/dist/lib.js +16 -51
  52. package/dist/lib.js.map +1 -1
  53. package/dist/server-profile.d.ts +11 -0
  54. package/dist/server-profile.d.ts.map +1 -0
  55. package/dist/server-profile.js +104 -0
  56. package/dist/server-profile.js.map +1 -0
  57. package/dist/setup.d.ts +1 -0
  58. package/dist/setup.d.ts.map +1 -1
  59. package/dist/setup.js +21 -47
  60. package/dist/setup.js.map +1 -1
  61. package/dist/tools/builder-discovery.d.ts +17 -0
  62. package/dist/tools/builder-discovery.d.ts.map +1 -0
  63. package/dist/tools/builder-discovery.js +131 -0
  64. package/dist/tools/builder-discovery.js.map +1 -0
  65. package/dist/tools/core.d.ts.map +1 -1
  66. package/dist/tools/core.js +5 -45
  67. package/dist/tools/core.js.map +1 -1
  68. package/dist/tools/dev-mode-draft.d.ts +3 -0
  69. package/dist/tools/dev-mode-draft.d.ts.map +1 -0
  70. package/dist/tools/dev-mode-draft.js +279 -0
  71. package/dist/tools/dev-mode-draft.js.map +1 -0
  72. package/dist/tools/vm.d.ts.map +1 -1
  73. package/dist/tools/vm.js +3 -35
  74. package/dist/tools/vm.js.map +1 -1
  75. package/package.json +2 -1
@@ -0,0 +1,398 @@
1
+ /**
2
+ * Cross-process-safe storage for the OAuth credentials used by the MCP.
3
+ *
4
+ * Reads stay synchronous because they are used while constructing clients.
5
+ * Mutations are asynchronous and serialized with an exclusive lock file so
6
+ * multiple MCP processes cannot lose one another's updates or rotate the same
7
+ * refresh token at the same time.
8
+ */
9
+ import fs from "node:fs";
10
+ import path from "node:path";
11
+ import { randomUUID } from "node:crypto";
12
+ import { apiBaseToRegion, getTokenPath, getWriteTokenPath, } from "./paths.js";
13
+ // A different token only needs to be unexpired to prove another process won
14
+ // the refresh race. Callers that require additional usable lifetime can opt
15
+ // into a buffer matching their normal proactive-refresh policy.
16
+ const DEFAULT_REFRESH_BUFFER_MS = 0;
17
+ const DEFAULT_LOCK_RETRY_MS = 25;
18
+ const DEFAULT_LOCK_TIMEOUT_MS = 60_000;
19
+ const DEFAULT_STALE_LOCK_MS = 30_000;
20
+ function resolvePath(option) {
21
+ return typeof option === "function" ? option() : option;
22
+ }
23
+ function isRecord(value) {
24
+ return typeof value === "object" && value !== null && !Array.isArray(value);
25
+ }
26
+ /** Normalize the legacy flat shape while preserving the current shape as-is. */
27
+ export function normalizeStoredTokens(raw) {
28
+ if (!isRecord(raw))
29
+ return {};
30
+ if (raw.us || raw.ca)
31
+ return raw;
32
+ if (raw.access_token) {
33
+ const storedRegion = raw.region;
34
+ const region = storedRegion === "us" || storedRegion === "ca"
35
+ ? storedRegion
36
+ : apiBaseToRegion(typeof raw.api_base === "string" ? raw.api_base : "");
37
+ return { [region]: raw };
38
+ }
39
+ return {};
40
+ }
41
+ function processIsAlive(pid) {
42
+ if (!Number.isInteger(pid) || pid <= 0)
43
+ return false;
44
+ try {
45
+ process.kill(pid, 0);
46
+ return true;
47
+ }
48
+ catch (error) {
49
+ return error.code !== "ESRCH";
50
+ }
51
+ }
52
+ function delay(ms) {
53
+ return new Promise((resolve) => setTimeout(resolve, ms));
54
+ }
55
+ export class DiskTokenStore {
56
+ readPathOption;
57
+ writePathOption;
58
+ refreshBufferMs;
59
+ lockRetryMs;
60
+ lockTimeoutMs;
61
+ staleLockMs;
62
+ now;
63
+ constructor(options = {}) {
64
+ this.readPathOption = options.readPath ?? getTokenPath;
65
+ this.writePathOption = options.writePath ?? getWriteTokenPath;
66
+ this.refreshBufferMs =
67
+ options.refreshBufferMs ?? DEFAULT_REFRESH_BUFFER_MS;
68
+ this.lockRetryMs = options.lockRetryMs ?? DEFAULT_LOCK_RETRY_MS;
69
+ this.lockTimeoutMs = options.lockTimeoutMs ?? DEFAULT_LOCK_TIMEOUT_MS;
70
+ this.staleLockMs = options.staleLockMs ?? DEFAULT_STALE_LOCK_MS;
71
+ this.now = options.now ?? Date.now;
72
+ }
73
+ /**
74
+ * Read all stored regions synchronously. Once the write destination exists,
75
+ * it takes precedence over an injected or legacy fallback read path.
76
+ */
77
+ readAll() {
78
+ try {
79
+ const tokenPath = this.activeReadPath();
80
+ if (!fs.existsSync(tokenPath))
81
+ return {};
82
+ return normalizeStoredTokens(JSON.parse(fs.readFileSync(tokenPath, "utf8")));
83
+ }
84
+ catch {
85
+ return {};
86
+ }
87
+ }
88
+ readRegion(region) {
89
+ return this.readAll()[region] ?? null;
90
+ }
91
+ /** Replace one region while preserving every other stored region. */
92
+ async writeRegion(region, tokens) {
93
+ await this.withLock(async () => {
94
+ const all = this.readAll();
95
+ all[region] = tokens;
96
+ this.atomicWrite(all);
97
+ });
98
+ }
99
+ /** Remove current and legacy token files without racing a refresh/write. */
100
+ async clear() {
101
+ await this.withLock(async () => {
102
+ const remove = (tokenPath) => {
103
+ try {
104
+ fs.unlinkSync(tokenPath);
105
+ }
106
+ catch (error) {
107
+ if (error.code !== "ENOENT")
108
+ throw error;
109
+ }
110
+ };
111
+ const writePath = resolvePath(this.writePathOption);
112
+ const readPathBeforeClear = resolvePath(this.readPathOption);
113
+ remove(writePath);
114
+ if (readPathBeforeClear !== writePath)
115
+ remove(readPathBeforeClear);
116
+ // A fallback resolver such as getTokenPath() may reveal the legacy file
117
+ // only after the current ~/.minicor file has been removed.
118
+ const readPathAfterClear = resolvePath(this.readPathOption);
119
+ if (readPathAfterClear !== writePath &&
120
+ readPathAfterClear !== readPathBeforeClear) {
121
+ remove(readPathAfterClear);
122
+ }
123
+ });
124
+ }
125
+ /**
126
+ * Atomically update a region from the latest value on disk. This is useful
127
+ * for metadata changes (for example api_base) that must not overwrite a
128
+ * token concurrently refreshed by another process.
129
+ */
130
+ async updateRegion(region, update) {
131
+ return this.withLock(async () => {
132
+ const all = this.readAll();
133
+ const next = update(all[region] ?? null);
134
+ if (next === null)
135
+ return null;
136
+ all[region] = next;
137
+ this.atomicWrite(all);
138
+ return next;
139
+ });
140
+ }
141
+ /**
142
+ * Refresh a region without rotating the same refresh token in two MCPs.
143
+ *
144
+ * The caller supplies the access token it observed before requesting the
145
+ * refresh. After acquiring the cross-process lock, this method re-reads the
146
+ * file. If another process wrote a different, sufficiently valid access
147
+ * token, that token is adopted. Otherwise the callback runs under the lock
148
+ * with the latest refresh token and its result is merged and atomically
149
+ * persisted.
150
+ */
151
+ async refreshRegion(region, observedAccessToken, refresh) {
152
+ return this.withLock(async () => {
153
+ const all = this.readAll();
154
+ const latest = all[region];
155
+ if (!latest)
156
+ return null;
157
+ const anotherProcessRefreshed = latest.access_token !== observedAccessToken &&
158
+ this.isValidBeyondRefreshBuffer(latest);
159
+ if (anotherProcessRefreshed) {
160
+ return { tokens: latest, source: "adopted" };
161
+ }
162
+ if (!latest.refresh_token)
163
+ return null;
164
+ const refreshed = await refresh({
165
+ region,
166
+ tokens: { ...latest },
167
+ refreshToken: latest.refresh_token,
168
+ });
169
+ if (!refreshed)
170
+ return null;
171
+ const merged = {
172
+ ...latest,
173
+ ...refreshed,
174
+ refresh_token: refreshed.refresh_token === undefined
175
+ ? latest.refresh_token
176
+ : refreshed.refresh_token,
177
+ region,
178
+ };
179
+ all[region] = merged;
180
+ this.atomicWrite(all);
181
+ return { tokens: merged, source: "refreshed" };
182
+ });
183
+ }
184
+ activeReadPath() {
185
+ const writePath = resolvePath(this.writePathOption);
186
+ return fs.existsSync(writePath)
187
+ ? writePath
188
+ : resolvePath(this.readPathOption);
189
+ }
190
+ isValidBeyondRefreshBuffer(tokens) {
191
+ return (typeof tokens.access_token === "string" &&
192
+ tokens.access_token.length > 0 &&
193
+ Number.isFinite(tokens.expires_at) &&
194
+ this.now() < tokens.expires_at - this.refreshBufferMs);
195
+ }
196
+ async withLock(operation) {
197
+ const lock = await this.acquireLock();
198
+ try {
199
+ return await operation();
200
+ }
201
+ finally {
202
+ await this.releaseLock(lock);
203
+ }
204
+ }
205
+ async acquireLock() {
206
+ const writePath = resolvePath(this.writePathOption);
207
+ const directory = path.dirname(writePath);
208
+ fs.mkdirSync(directory, { recursive: true, mode: 0o700 });
209
+ const lockPath = `${writePath}.lock`;
210
+ const owner = `${process.pid}:${randomUUID()}`;
211
+ // Lock timing deliberately uses wall-clock time rather than the injectable
212
+ // token clock. A frozen clock is useful in expiry tests but must not stop
213
+ // lock timeouts or make a newly-created lock appear stale.
214
+ const deadline = Date.now() + this.lockTimeoutMs;
215
+ while (true) {
216
+ try {
217
+ const handle = await fs.promises.open(lockPath, "wx", 0o600);
218
+ try {
219
+ await handle.writeFile(JSON.stringify({ owner, pid: process.pid, createdAt: Date.now() }), "utf8");
220
+ await handle.sync();
221
+ return { handle, lockPath, owner };
222
+ }
223
+ catch (error) {
224
+ await handle.close().catch(() => undefined);
225
+ await fs.promises.unlink(lockPath).catch(() => undefined);
226
+ throw error;
227
+ }
228
+ }
229
+ catch (error) {
230
+ if (error.code !== "EEXIST")
231
+ throw error;
232
+ if (this.removeStaleLock(lockPath))
233
+ continue;
234
+ if (Date.now() >= deadline) {
235
+ throw new Error(`Timed out waiting for token-store lock: ${lockPath}`);
236
+ }
237
+ await delay(this.lockRetryMs);
238
+ }
239
+ }
240
+ }
241
+ removeStaleLock(lockPath) {
242
+ const cleanupPath = `${lockPath}.cleanup`;
243
+ const cleanupOwner = `${process.pid}:${randomUUID()}`;
244
+ let cleanupDescriptor;
245
+ try {
246
+ cleanupDescriptor = fs.openSync(cleanupPath, "wx", 0o600);
247
+ }
248
+ catch (error) {
249
+ if (error.code === "EEXIST") {
250
+ this.removeAbandonedCleanupGuard(cleanupPath);
251
+ return false;
252
+ }
253
+ throw error;
254
+ }
255
+ try {
256
+ fs.writeFileSync(cleanupDescriptor, JSON.stringify({
257
+ owner: cleanupOwner,
258
+ pid: process.pid,
259
+ createdAt: Date.now(),
260
+ }), "utf8");
261
+ fs.fsyncSync(cleanupDescriptor);
262
+ try {
263
+ const stat = fs.statSync(lockPath);
264
+ if (Date.now() - stat.mtimeMs < this.staleLockMs)
265
+ return false;
266
+ let pid = 0;
267
+ try {
268
+ const metadata = JSON.parse(fs.readFileSync(lockPath, "utf8"));
269
+ if (typeof metadata.pid === "number")
270
+ pid = metadata.pid;
271
+ }
272
+ catch {
273
+ // An old malformed lock can be removed after the stale threshold.
274
+ }
275
+ if (processIsAlive(pid))
276
+ return false;
277
+ fs.unlinkSync(lockPath);
278
+ return true;
279
+ }
280
+ catch (error) {
281
+ return error.code === "ENOENT";
282
+ }
283
+ }
284
+ finally {
285
+ fs.closeSync(cleanupDescriptor);
286
+ try {
287
+ fs.unlinkSync(cleanupPath);
288
+ }
289
+ catch (error) {
290
+ if (error.code !== "ENOENT")
291
+ throw error;
292
+ }
293
+ }
294
+ }
295
+ removeAbandonedCleanupGuard(cleanupPath) {
296
+ let descriptor;
297
+ try {
298
+ descriptor = fs.openSync(cleanupPath, "r");
299
+ const openedStat = fs.fstatSync(descriptor);
300
+ if (Date.now() - openedStat.mtimeMs < this.staleLockMs)
301
+ return false;
302
+ let pid = 0;
303
+ let owner;
304
+ try {
305
+ const metadata = JSON.parse(fs.readFileSync(descriptor, "utf8"));
306
+ if (typeof metadata.owner === "string")
307
+ owner = metadata.owner;
308
+ if (typeof metadata.pid === "number")
309
+ pid = metadata.pid;
310
+ }
311
+ catch {
312
+ // A malformed cleanup guard is recoverable after the stale threshold.
313
+ }
314
+ if (processIsAlive(pid))
315
+ return false;
316
+ // Do not remove a guard that was replaced while the abandoned one was
317
+ // being inspected.
318
+ const currentStat = fs.statSync(cleanupPath);
319
+ if (currentStat.dev !== openedStat.dev ||
320
+ currentStat.ino !== openedStat.ino) {
321
+ return false;
322
+ }
323
+ if (owner) {
324
+ try {
325
+ const currentMetadata = JSON.parse(fs.readFileSync(cleanupPath, "utf8"));
326
+ if (currentMetadata.owner !== owner)
327
+ return false;
328
+ }
329
+ catch {
330
+ return false;
331
+ }
332
+ }
333
+ fs.unlinkSync(cleanupPath);
334
+ return true;
335
+ }
336
+ catch (error) {
337
+ return error.code === "ENOENT";
338
+ }
339
+ finally {
340
+ if (descriptor !== undefined)
341
+ fs.closeSync(descriptor);
342
+ }
343
+ }
344
+ async releaseLock(lock) {
345
+ await lock.handle.close();
346
+ try {
347
+ const metadata = JSON.parse(await fs.promises.readFile(lock.lockPath, "utf8"));
348
+ if (metadata.owner === lock.owner) {
349
+ await fs.promises.unlink(lock.lockPath);
350
+ }
351
+ }
352
+ catch (error) {
353
+ if (error.code !== "ENOENT")
354
+ throw error;
355
+ }
356
+ }
357
+ atomicWrite(tokens) {
358
+ const writePath = resolvePath(this.writePathOption);
359
+ const directory = path.dirname(writePath);
360
+ fs.mkdirSync(directory, { recursive: true, mode: 0o700 });
361
+ const temporaryPath = `${writePath}.${process.pid}.${randomUUID()}.tmp`;
362
+ let descriptor;
363
+ try {
364
+ descriptor = fs.openSync(temporaryPath, "wx", 0o600);
365
+ fs.writeFileSync(descriptor, `${JSON.stringify(tokens, null, 2)}\n`, "utf8");
366
+ fs.fsyncSync(descriptor);
367
+ fs.closeSync(descriptor);
368
+ descriptor = undefined;
369
+ fs.renameSync(temporaryPath, writePath);
370
+ // Best-effort directory sync makes the rename durable on filesystems
371
+ // that support opening directories. Atomicity itself comes from rename.
372
+ try {
373
+ const directoryDescriptor = fs.openSync(directory, "r");
374
+ try {
375
+ fs.fsyncSync(directoryDescriptor);
376
+ }
377
+ finally {
378
+ fs.closeSync(directoryDescriptor);
379
+ }
380
+ }
381
+ catch {
382
+ // Some platforms do not allow fsync on directory descriptors.
383
+ }
384
+ }
385
+ finally {
386
+ if (descriptor !== undefined)
387
+ fs.closeSync(descriptor);
388
+ try {
389
+ fs.unlinkSync(temporaryPath);
390
+ }
391
+ catch (error) {
392
+ if (error.code !== "ENOENT")
393
+ throw error;
394
+ }
395
+ }
396
+ }
397
+ }
398
+ //# sourceMappingURL=disk-token-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disk-token-store.js","sourceRoot":"","sources":["../src/disk-token-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAOH,OAAO,EAML,KAAK,MAAM,EACZ,MAAM,YAAY,CAAC;AAuFpB,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAMlD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAKH,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,YAAY,CAAC;AA2CpB,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAOlD"}