borgmcp 2.0.2 → 2.0.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 +16 -10
- package/dist/claude.d.ts +1 -0
- package/dist/claude.d.ts.map +1 -1
- package/dist/claude.js +5 -0
- package/dist/claude.js.map +1 -1
- package/dist/cli-help.d.ts +2 -0
- package/dist/cli-help.d.ts.map +1 -1
- package/dist/cli-help.js +12 -0
- package/dist/cli-help.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +41 -18
- package/dist/config.js.map +1 -1
- package/dist/credential-paths.d.ts +3 -0
- package/dist/credential-paths.d.ts.map +1 -0
- package/dist/credential-paths.js +7 -0
- package/dist/credential-paths.js.map +1 -0
- package/dist/seat-store.d.ts +11 -5
- package/dist/seat-store.d.ts.map +1 -1
- package/dist/seat-store.js +147 -14
- package/dist/seat-store.js.map +1 -1
- package/dist/server-facade.d.ts +50 -0
- package/dist/server-facade.d.ts.map +1 -0
- package/dist/server-facade.js +126 -0
- package/dist/server-facade.js.map +1 -0
- package/dist/token-store.d.ts +2 -1
- package/dist/token-store.d.ts.map +1 -1
- package/dist/token-store.js +5 -3
- package/dist/token-store.js.map +1 -1
- package/dist/unknown-subcommand.d.ts +1 -1
- package/dist/unknown-subcommand.d.ts.map +1 -1
- package/dist/unknown-subcommand.js +1 -0
- package/dist/unknown-subcommand.js.map +1 -1
- package/docs/EXTRACTION_PROVENANCE.md +6 -5
- package/docs/LOCAL_SERVER.md +81 -42
- package/docs/RELEASING.md +10 -1
- package/package.json +1 -1
- package/src/claude.ts +5 -0
- package/src/cli-help.ts +15 -0
- package/src/config.ts +40 -18
- package/src/credential-paths.ts +8 -0
- package/src/seat-store.ts +159 -16
- package/src/server-facade.ts +192 -0
- package/src/token-store.ts +9 -4
- package/src/unknown-subcommand.ts +1 -0
package/dist/seat-store.js
CHANGED
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
* 2. ATOMIC RENAME — temp in the SAME dir/fs, created 0600, fsync THEN rename;
|
|
14
14
|
* a crash never leaves a torn/readable partial, and the temp is cleaned up
|
|
15
15
|
* on any write failure.
|
|
16
|
-
* 3. PARENT DIR
|
|
16
|
+
* 3. PARENT DIR — private stores require 0700. The canonical ~/.borg parent
|
|
17
|
+
* may explicitly use the owner-controlled policy (0755 accepted, 0022
|
|
18
|
+
* forbidden) without rewriting its established mode.
|
|
17
19
|
* 4. flock DISCIPLINE — a single advisory lock (O_EXCL lockfile), RULED option
|
|
18
20
|
* (b) (Coordinator cca6957a): NO automatic reclaim, EVER. Acquire is an atomic
|
|
19
21
|
* `open(lockPath,'wx',0o600)`; the whole read-compare-write runs inside ONE
|
|
@@ -28,11 +30,74 @@
|
|
|
28
30
|
* this module never logs it, and the digest-only observation discipline of the
|
|
29
31
|
* callers keeps the raw bearer from leaving the store owner.
|
|
30
32
|
*/
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
+
import { constants } from 'node:fs';
|
|
34
|
+
import { open, link, lstat, mkdir, readFile, realpath, rename, stat, unlink } from 'node:fs/promises';
|
|
35
|
+
import { dirname, isAbsolute, resolve } from 'node:path';
|
|
33
36
|
import { randomBytes } from 'node:crypto';
|
|
34
37
|
const LOCK_WAIT_MS = 10;
|
|
35
38
|
const LOCK_ATTEMPTS = 500;
|
|
39
|
+
function expectedUid() {
|
|
40
|
+
return typeof process.getuid === 'function' ? process.getuid() : null;
|
|
41
|
+
}
|
|
42
|
+
async function assertSecureRoot(root, rootMode = 'private') {
|
|
43
|
+
if (!isAbsolute(root) || resolve(root) !== root) {
|
|
44
|
+
throw new Error(`Borg credential store path ${root} is not canonical`);
|
|
45
|
+
}
|
|
46
|
+
let metadata;
|
|
47
|
+
try {
|
|
48
|
+
metadata = await lstat(root);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (error.code !== 'ENOENT')
|
|
52
|
+
throw error;
|
|
53
|
+
await mkdir(root, { recursive: true, mode: 0o700 });
|
|
54
|
+
metadata = await lstat(root);
|
|
55
|
+
}
|
|
56
|
+
if (metadata.isSymbolicLink() || !metadata.isDirectory()) {
|
|
57
|
+
throw new Error(`Borg credential store root ${root} must be a real directory, not a symlink`);
|
|
58
|
+
}
|
|
59
|
+
const mode = metadata.mode & 0o777;
|
|
60
|
+
if (rootMode === 'private' ? mode !== 0o700 : (mode & 0o022) !== 0) {
|
|
61
|
+
throw new Error(`Borg credential store root ${root} has insecure permissions; ` +
|
|
62
|
+
(rootMode === 'private' ? 'expected 0700' : 'group/world write access is forbidden'));
|
|
63
|
+
}
|
|
64
|
+
const uid = expectedUid();
|
|
65
|
+
if (uid !== null && metadata.uid !== uid) {
|
|
66
|
+
throw new Error(`Borg credential store root ${root} is not owned by the current user`);
|
|
67
|
+
}
|
|
68
|
+
if (await realpath(root) !== root) {
|
|
69
|
+
throw new Error(`Borg credential store root ${root} is not canonical or contains a symlink`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function assertSecureFile(filePath) {
|
|
73
|
+
let metadata;
|
|
74
|
+
try {
|
|
75
|
+
metadata = await lstat(filePath);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (error.code === 'ENOENT')
|
|
79
|
+
return null;
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
if (metadata.isSymbolicLink() || !metadata.isFile()) {
|
|
83
|
+
throw new Error(`Borg credential store file ${filePath} must be a regular file, not a symlink`);
|
|
84
|
+
}
|
|
85
|
+
if ((metadata.mode & 0o777) !== 0o600) {
|
|
86
|
+
throw new Error(`Borg credential store file ${filePath} has insecure permissions; expected 0600`);
|
|
87
|
+
}
|
|
88
|
+
const uid = expectedUid();
|
|
89
|
+
if (uid !== null && metadata.uid !== uid) {
|
|
90
|
+
throw new Error(`Borg credential store file ${filePath} is not owned by the current user`);
|
|
91
|
+
}
|
|
92
|
+
return metadata;
|
|
93
|
+
}
|
|
94
|
+
async function assertSecurePath(filePath, options) {
|
|
95
|
+
const secureRoot = options.secureRoot;
|
|
96
|
+
if (!isAbsolute(filePath) || resolve(filePath) !== filePath || dirname(filePath) !== secureRoot) {
|
|
97
|
+
throw new Error(`Borg credential store file path ${filePath} is not canonical`);
|
|
98
|
+
}
|
|
99
|
+
await assertSecureRoot(secureRoot, options.rootMode);
|
|
100
|
+
}
|
|
36
101
|
/**
|
|
37
102
|
* Liveness check for the alive/dead branch (RULED option b). `process.kill(pid, 0)`
|
|
38
103
|
* sends no signal but validates the target: ESRCH ⇒ no such process (DEAD → fail
|
|
@@ -91,20 +156,30 @@ function staleLockError(lockPath, held) {
|
|
|
91
156
|
* beneath it.
|
|
92
157
|
*/
|
|
93
158
|
async function ensureParentDir(filePath) {
|
|
159
|
+
if (!isAbsolute(filePath) || resolve(filePath) !== filePath) {
|
|
160
|
+
throw new Error(`Borg store file path ${filePath} is not canonical`);
|
|
161
|
+
}
|
|
94
162
|
const dir = dirname(filePath);
|
|
95
163
|
let existing = null;
|
|
96
164
|
try {
|
|
97
|
-
existing = await
|
|
165
|
+
existing = await lstat(dir);
|
|
98
166
|
}
|
|
99
167
|
catch (err) {
|
|
100
168
|
if (err.code !== 'ENOENT')
|
|
101
169
|
throw err;
|
|
102
170
|
}
|
|
103
171
|
if (existing) {
|
|
172
|
+
if (existing.isSymbolicLink() || !existing.isDirectory()) {
|
|
173
|
+
throw new Error(`Borg store directory ${dir} must be a real directory, not a symlink`);
|
|
174
|
+
}
|
|
104
175
|
if ((existing.mode & 0o777) !== 0o700) {
|
|
105
176
|
throw new Error(`Borg store directory ${dir} has insecure permissions ` +
|
|
106
177
|
`(0${(existing.mode & 0o777).toString(8)}, expected 0700); refusing to write a credential under it`);
|
|
107
178
|
}
|
|
179
|
+
const uid = expectedUid();
|
|
180
|
+
if (uid !== null && existing.uid !== uid) {
|
|
181
|
+
throw new Error(`Borg store directory ${dir} is not owned by the current user`);
|
|
182
|
+
}
|
|
108
183
|
return;
|
|
109
184
|
}
|
|
110
185
|
await mkdir(dir, { recursive: true, mode: 0o700 });
|
|
@@ -115,8 +190,13 @@ async function ensureParentDir(filePath) {
|
|
|
115
190
|
* rename over the target (atomic; the mode carries across). A failed write
|
|
116
191
|
* cleans up the temp so no leftover file ever holds the secret.
|
|
117
192
|
*/
|
|
118
|
-
export async function atomicWrite0600(filePath, data) {
|
|
119
|
-
|
|
193
|
+
export async function atomicWrite0600(filePath, data, options = {}) {
|
|
194
|
+
if (options.secureRoot)
|
|
195
|
+
await assertSecurePath(filePath, options);
|
|
196
|
+
else
|
|
197
|
+
await ensureParentDir(filePath);
|
|
198
|
+
if (options.secureRoot)
|
|
199
|
+
await assertSecureFile(filePath);
|
|
120
200
|
const tmp = `${filePath}.${process.pid}.${randomBytes(6).toString('hex')}.tmp`;
|
|
121
201
|
const handle = await open(tmp, 'wx', 0o600);
|
|
122
202
|
try {
|
|
@@ -130,6 +210,10 @@ export async function atomicWrite0600(filePath, data) {
|
|
|
130
210
|
}
|
|
131
211
|
await handle.close();
|
|
132
212
|
try {
|
|
213
|
+
if (options.secureRoot) {
|
|
214
|
+
await assertSecurePath(filePath, options);
|
|
215
|
+
await assertSecureFile(filePath);
|
|
216
|
+
}
|
|
133
217
|
await rename(tmp, filePath);
|
|
134
218
|
}
|
|
135
219
|
catch (err) {
|
|
@@ -169,16 +253,57 @@ async function assertSecureStorePerms(filePath, fileMode) {
|
|
|
169
253
|
* perms are enforced BEFORE the bytes are read (CR#2) — a loosely-permissioned
|
|
170
254
|
* secret fails closed and is never read.
|
|
171
255
|
*/
|
|
172
|
-
export async function readStoreFile(filePath) {
|
|
256
|
+
export async function readStoreFile(filePath, options = {}) {
|
|
257
|
+
if (!isAbsolute(filePath) || resolve(filePath) !== filePath) {
|
|
258
|
+
throw new Error(`Borg store file path ${filePath} is not canonical`);
|
|
259
|
+
}
|
|
260
|
+
if (options.secureRoot)
|
|
261
|
+
await assertSecurePath(filePath, options);
|
|
262
|
+
if (options.secureRoot) {
|
|
263
|
+
const before = await assertSecureFile(filePath);
|
|
264
|
+
if (!before)
|
|
265
|
+
return null;
|
|
266
|
+
let handle;
|
|
267
|
+
try {
|
|
268
|
+
handle = await open(filePath, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
if (error.code === 'ENOENT')
|
|
272
|
+
return null;
|
|
273
|
+
throw error;
|
|
274
|
+
}
|
|
275
|
+
try {
|
|
276
|
+
const opened = await handle.stat();
|
|
277
|
+
if (opened.dev !== before.dev || opened.ino !== before.ino) {
|
|
278
|
+
throw new Error('Borg credential store file changed while it was being opened');
|
|
279
|
+
}
|
|
280
|
+
const raw = await handle.readFile('utf8');
|
|
281
|
+
const after = await handle.stat();
|
|
282
|
+
if (after.dev !== before.dev || after.ino !== before.ino || after.size !== before.size) {
|
|
283
|
+
throw new Error('Borg credential store file changed while it was being read');
|
|
284
|
+
}
|
|
285
|
+
return raw;
|
|
286
|
+
}
|
|
287
|
+
finally {
|
|
288
|
+
await handle.close();
|
|
289
|
+
}
|
|
290
|
+
}
|
|
173
291
|
let fileStat;
|
|
174
292
|
try {
|
|
175
|
-
fileStat = await
|
|
293
|
+
fileStat = await lstat(filePath);
|
|
176
294
|
}
|
|
177
295
|
catch (err) {
|
|
178
296
|
if (err.code === 'ENOENT')
|
|
179
297
|
return null;
|
|
180
298
|
throw err;
|
|
181
299
|
}
|
|
300
|
+
if (fileStat.isSymbolicLink() || !fileStat.isFile()) {
|
|
301
|
+
throw new Error(`Borg store file ${filePath} must be a regular file, not a symlink`);
|
|
302
|
+
}
|
|
303
|
+
const uid = expectedUid();
|
|
304
|
+
if (uid !== null && fileStat.uid !== uid) {
|
|
305
|
+
throw new Error(`Borg store file ${filePath} is not owned by the current user`);
|
|
306
|
+
}
|
|
182
307
|
await assertSecureStorePerms(filePath, fileStat.mode);
|
|
183
308
|
try {
|
|
184
309
|
return await readFile(filePath, 'utf8');
|
|
@@ -205,7 +330,10 @@ export async function readStoreFile(filePath) {
|
|
|
205
330
|
export async function withStoreLock(lockPath, op, opts = {}) {
|
|
206
331
|
const attempts = opts.attempts ?? LOCK_ATTEMPTS;
|
|
207
332
|
const waitMs = opts.waitMs ?? LOCK_WAIT_MS;
|
|
208
|
-
|
|
333
|
+
if (opts.secureRoot)
|
|
334
|
+
await assertSecurePath(lockPath, opts);
|
|
335
|
+
else
|
|
336
|
+
await mkdir(dirname(lockPath), { recursive: true, mode: 0o700 });
|
|
209
337
|
const myPayload = JSON.stringify({ pid: process.pid, startTime: processStartTime() });
|
|
210
338
|
// Stage the FULLY-WRITTEN payload in a same-dir temp, then acquire by atomically
|
|
211
339
|
// hard-linking it into place. `link` is atomic (EEXIST when the lock is held), and
|
|
@@ -232,7 +360,12 @@ export async function withStoreLock(lockPath, op, opts = {}) {
|
|
|
232
360
|
// The lock is held. Inspect the holder — but NEVER reclaim/steal it.
|
|
233
361
|
let raw;
|
|
234
362
|
try {
|
|
235
|
-
|
|
363
|
+
const stored = await readStoreFile(lockPath, opts.secureRoot
|
|
364
|
+
? { secureRoot: opts.secureRoot, rootMode: opts.rootMode }
|
|
365
|
+
: {});
|
|
366
|
+
if (stored === null)
|
|
367
|
+
continue;
|
|
368
|
+
raw = stored;
|
|
236
369
|
}
|
|
237
370
|
catch (readErr) {
|
|
238
371
|
if (readErr.code === 'ENOENT')
|
|
@@ -273,9 +406,9 @@ export async function withStoreLock(lockPath, op, opts = {}) {
|
|
|
273
406
|
* + an atomic commit, and release the lock on every path. The entire read →
|
|
274
407
|
* compare → (mutate) → commit happens inside ONE lock hold — no TOCTOU.
|
|
275
408
|
*/
|
|
276
|
-
export async function withStore(storePath, emptyState, parse, op) {
|
|
409
|
+
export async function withStore(storePath, emptyState, parse, op, options = {}) {
|
|
277
410
|
return withStoreLock(`${storePath}.lock`, async () => {
|
|
278
|
-
const raw = await readStoreFile(storePath);
|
|
411
|
+
const raw = await readStoreFile(storePath, options);
|
|
279
412
|
// CR4 fail-closed: ONLY a missing file (ENOENT → readStoreFile returns null)
|
|
280
413
|
// may initialize an empty state. A present-but-malformed / wrong-version /
|
|
281
414
|
// schema-invalid store must NEVER be silently mapped to empty and then
|
|
@@ -301,9 +434,9 @@ export async function withStore(storePath, emptyState, parse, op) {
|
|
|
301
434
|
}
|
|
302
435
|
const txn = {
|
|
303
436
|
data,
|
|
304
|
-
commit: () => atomicWrite0600(storePath, JSON.stringify(data, null, 2) + '\n'),
|
|
437
|
+
commit: () => atomicWrite0600(storePath, JSON.stringify(data, null, 2) + '\n', options),
|
|
305
438
|
};
|
|
306
439
|
return op(txn);
|
|
307
|
-
});
|
|
440
|
+
}, options);
|
|
308
441
|
}
|
|
309
442
|
//# sourceMappingURL=seat-store.js.map
|
package/dist/seat-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seat-store.js","sourceRoot":"","sources":["../src/seat-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seat-store.js","sourceRoot":"","sources":["../src/seat-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type SpawnOptions } from 'node:child_process';
|
|
2
|
+
export declare const SERVER_LIFECYCLE_COMMANDS: readonly ["setup", "start", "status", "update", "invite"];
|
|
3
|
+
export type ServerLifecycleCommand = typeof SERVER_LIFECYCLE_COMMANDS[number];
|
|
4
|
+
export type ParsedServerFacadeArgs = {
|
|
5
|
+
kind: 'help';
|
|
6
|
+
} | {
|
|
7
|
+
kind: 'command';
|
|
8
|
+
command: ServerLifecycleCommand;
|
|
9
|
+
args: string[];
|
|
10
|
+
} | {
|
|
11
|
+
kind: 'error';
|
|
12
|
+
reason: 'unknown-command';
|
|
13
|
+
command: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function parseServerFacadeArgs(args: readonly string[]): ParsedServerFacadeArgs;
|
|
16
|
+
interface ServerFacadeChild {
|
|
17
|
+
once(event: 'error', listener: (error: Error) => void): this;
|
|
18
|
+
once(event: 'exit', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
|
|
19
|
+
kill(signal: NodeJS.Signals): boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface ServerFacadeProcessDeps {
|
|
22
|
+
spawn(command: string, args: readonly string[], options: Pick<SpawnOptions, 'shell' | 'stdio'>): ServerFacadeChild;
|
|
23
|
+
addSignalListener(signal: NodeJS.Signals, listener: () => void): void;
|
|
24
|
+
removeSignalListener(signal: NodeJS.Signals, listener: () => void): void;
|
|
25
|
+
}
|
|
26
|
+
export interface ServerFacadeOutputDeps {
|
|
27
|
+
writeStdout(text: string): void;
|
|
28
|
+
writeStderr(text: string): void;
|
|
29
|
+
}
|
|
30
|
+
export type ServerFacadeProcessResult = {
|
|
31
|
+
kind: 'exited';
|
|
32
|
+
code: number;
|
|
33
|
+
} | {
|
|
34
|
+
kind: 'signaled';
|
|
35
|
+
signal: NodeJS.Signals;
|
|
36
|
+
} | {
|
|
37
|
+
kind: 'spawn-error';
|
|
38
|
+
error: Error;
|
|
39
|
+
};
|
|
40
|
+
export declare function unknownServerCommandText(command: string): string;
|
|
41
|
+
export declare function missingServerExecutableText(command: ServerLifecycleCommand): string;
|
|
42
|
+
export declare function serverCommandStartupFailureText(command: ServerLifecycleCommand): string;
|
|
43
|
+
export declare function runServerFacadeProcess(input: {
|
|
44
|
+
command: ServerLifecycleCommand;
|
|
45
|
+
args: readonly string[];
|
|
46
|
+
}, deps?: ServerFacadeProcessDeps): Promise<ServerFacadeProcessResult>;
|
|
47
|
+
/** Routes every facade outcome before client initialization or network work. */
|
|
48
|
+
export declare function runEarlyServerFacade(argv: readonly string[], deps?: ServerFacadeProcessDeps, output?: ServerFacadeOutputDeps): Promise<number | null>;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=server-facade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-facade.d.ts","sourceRoot":"","sources":["../src/server-facade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAI5E,eAAO,MAAM,yBAAyB,2DAA4D,CAAC;AACnG,MAAM,MAAM,sBAAsB,GAAG,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAE9E,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,sBAAsB,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,sBAAsB,CAarF;AAED,UAAU,iBAAiB;IACzB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IAC7D,IAAI,CACF,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,KAAK,IAAI,GACrE,IAAI,CAAC;IACR,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CACH,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,GAC7C,iBAAiB,CAAC;IACrB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACtE,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAC1E;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,MAAM,yBAAyB,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AA+B1C,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMhE;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAMnF;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAMvF;AAMD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE;IAAE,OAAO,EAAE,sBAAsB,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,EACnE,IAAI,GAAE,uBAA4C,GACjD,OAAO,CAAC,yBAAyB,CAAC,CAyCpC;AAQD,gFAAgF;AAChF,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,GAAE,uBAA4C,EAClD,MAAM,GAAE,sBAA0C,GACjD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqBxB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { spawn as spawnChild } from 'node:child_process';
|
|
2
|
+
import { constants } from 'node:os';
|
|
3
|
+
import { serverHelpText } from './cli-help.js';
|
|
4
|
+
export const SERVER_LIFECYCLE_COMMANDS = ['setup', 'start', 'status', 'update', 'invite'];
|
|
5
|
+
export function parseServerFacadeArgs(args) {
|
|
6
|
+
const [command, ...rest] = args;
|
|
7
|
+
if (command === undefined || command === '--help' || command === '-h') {
|
|
8
|
+
return { kind: 'help' };
|
|
9
|
+
}
|
|
10
|
+
if (!SERVER_LIFECYCLE_COMMANDS.includes(command)) {
|
|
11
|
+
return { kind: 'error', reason: 'unknown-command', command };
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
kind: 'command',
|
|
15
|
+
command: command,
|
|
16
|
+
args: rest,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const defaultProcessDeps = {
|
|
20
|
+
spawn: (command, args, options) => spawnChild(command, [...args], options),
|
|
21
|
+
addSignalListener: (signal, listener) => process.on(signal, listener),
|
|
22
|
+
removeSignalListener: (signal, listener) => process.off(signal, listener),
|
|
23
|
+
};
|
|
24
|
+
const defaultOutputDeps = {
|
|
25
|
+
writeStdout: (text) => process.stdout.write(text),
|
|
26
|
+
writeStderr: (text) => process.stderr.write(text),
|
|
27
|
+
};
|
|
28
|
+
const MAX_RENDERED_COMMAND_CODE_POINTS = 80;
|
|
29
|
+
function inertCommand(command) {
|
|
30
|
+
const rendered = [];
|
|
31
|
+
let truncated = false;
|
|
32
|
+
for (const codePoint of command) {
|
|
33
|
+
if (rendered.length === MAX_RENDERED_COMMAND_CODE_POINTS) {
|
|
34
|
+
truncated = true;
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
rendered.push(/\p{Cc}/u.test(codePoint) ? '?' : codePoint);
|
|
38
|
+
}
|
|
39
|
+
if (truncated) {
|
|
40
|
+
return `${rendered.slice(0, MAX_RENDERED_COMMAND_CODE_POINTS - 3).join('')}...`;
|
|
41
|
+
}
|
|
42
|
+
return rendered.join('');
|
|
43
|
+
}
|
|
44
|
+
export function unknownServerCommandText(command) {
|
|
45
|
+
return (`Unknown server command: ${inertCommand(command)}.\n` +
|
|
46
|
+
`Available commands: setup, start, status, update, invite.\n` +
|
|
47
|
+
`Next: run borg server --help.\n`);
|
|
48
|
+
}
|
|
49
|
+
export function missingServerExecutableText(command) {
|
|
50
|
+
return (`Local server command is unavailable: borg-mcp-server was not found.\n` +
|
|
51
|
+
`Next: install a verified borgmcp-server release, then rerun borg server ${command}.\n` +
|
|
52
|
+
`No checkout fallback is attempted.\n`);
|
|
53
|
+
}
|
|
54
|
+
export function serverCommandStartupFailureText(command) {
|
|
55
|
+
return (`Local server command could not be started.\n` +
|
|
56
|
+
`Next: check local permissions and system resources, then rerun borg server ${inertCommand(command)}.\n` +
|
|
57
|
+
`No server command was started.\n`);
|
|
58
|
+
}
|
|
59
|
+
function isMissingServerExecutable(error) {
|
|
60
|
+
return error.code === 'ENOENT';
|
|
61
|
+
}
|
|
62
|
+
export function runServerFacadeProcess(input, deps = defaultProcessDeps) {
|
|
63
|
+
const child = deps.spawn('borg-mcp-server', [input.command, ...input.args], { shell: false, stdio: 'inherit' });
|
|
64
|
+
const signals = ['SIGINT', 'SIGTERM'];
|
|
65
|
+
return new Promise((resolve) => {
|
|
66
|
+
let settled = false;
|
|
67
|
+
const forwarders = new Map();
|
|
68
|
+
const cleanup = () => {
|
|
69
|
+
for (const [signal, listener] of forwarders) {
|
|
70
|
+
deps.removeSignalListener(signal, listener);
|
|
71
|
+
}
|
|
72
|
+
forwarders.clear();
|
|
73
|
+
};
|
|
74
|
+
const settle = (result) => {
|
|
75
|
+
if (settled)
|
|
76
|
+
return;
|
|
77
|
+
settled = true;
|
|
78
|
+
cleanup();
|
|
79
|
+
resolve(result);
|
|
80
|
+
};
|
|
81
|
+
for (const signal of signals) {
|
|
82
|
+
const listener = () => {
|
|
83
|
+
child.kill(signal);
|
|
84
|
+
};
|
|
85
|
+
forwarders.set(signal, listener);
|
|
86
|
+
deps.addSignalListener(signal, listener);
|
|
87
|
+
}
|
|
88
|
+
child.once('error', (error) => settle({ kind: 'spawn-error', error }));
|
|
89
|
+
child.once('exit', (code, signal) => {
|
|
90
|
+
if (signal) {
|
|
91
|
+
settle({ kind: 'signaled', signal });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
settle({ kind: 'exited', code: code ?? 1 });
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
function processResultExitCode(result) {
|
|
99
|
+
if (result.kind === 'exited')
|
|
100
|
+
return result.code;
|
|
101
|
+
if (result.kind === 'spawn-error')
|
|
102
|
+
return isMissingServerExecutable(result.error) ? 127 : 1;
|
|
103
|
+
return 128 + (constants.signals[result.signal] ?? 1);
|
|
104
|
+
}
|
|
105
|
+
/** Routes every facade outcome before client initialization or network work. */
|
|
106
|
+
export async function runEarlyServerFacade(argv, deps = defaultProcessDeps, output = defaultOutputDeps) {
|
|
107
|
+
if (argv[2] !== 'server')
|
|
108
|
+
return null;
|
|
109
|
+
const parsed = parseServerFacadeArgs(argv.slice(3));
|
|
110
|
+
if (parsed.kind === 'help') {
|
|
111
|
+
output.writeStdout(serverHelpText());
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
if (parsed.kind === 'error') {
|
|
115
|
+
output.writeStderr(unknownServerCommandText(parsed.command));
|
|
116
|
+
return 1;
|
|
117
|
+
}
|
|
118
|
+
const result = await runServerFacadeProcess(parsed, deps);
|
|
119
|
+
if (result.kind === 'spawn-error') {
|
|
120
|
+
output.writeStderr(isMissingServerExecutable(result.error)
|
|
121
|
+
? missingServerExecutableText(parsed.command)
|
|
122
|
+
: serverCommandStartupFailureText(parsed.command));
|
|
123
|
+
}
|
|
124
|
+
return processResultExitCode(result);
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=server-facade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-facade.js","sourceRoot":"","sources":["../src/server-facade.ts"],"names":[],"mappings":"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"}
|
package/dist/token-store.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* The raw secret rests only in the 0600 file, parity with the server's own TLS
|
|
7
7
|
* private keys; there is no keychain and no obfuscation-grade fallback.
|
|
8
8
|
*/
|
|
9
|
+
import { type SecureStoreOptions } from './seat-store.js';
|
|
9
10
|
export type TokenBackendName = 'file';
|
|
10
11
|
/**
|
|
11
12
|
* Account-agnostic key/value store over the 0600 credential file.
|
|
@@ -28,5 +29,5 @@ export interface TokenBackend {
|
|
|
28
29
|
* lockfile. Pure reads (get) are safe lock-free because atomicWrite0600's rename
|
|
29
30
|
* guarantees a reader only ever sees a complete file.
|
|
30
31
|
*/
|
|
31
|
-
export declare function makeFileBackend(filePath: string): TokenBackend;
|
|
32
|
+
export declare function makeFileBackend(filePath: string, storeOptions?: SecureStoreOptions): TokenBackend;
|
|
32
33
|
//# sourceMappingURL=token-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAkC,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAK1F,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,YAAY,GAAE,kBAAuB,GACpC,YAAY,CA+Dd"}
|
package/dist/token-store.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* private keys; there is no keychain and no obfuscation-grade fallback.
|
|
8
8
|
*/
|
|
9
9
|
import { atomicWrite0600, readStoreFile } from './seat-store.js';
|
|
10
|
+
import { dirname } from 'node:path';
|
|
10
11
|
// ─── 0600 file backend (Queen rescope: replaces the OS keychain) ─────────────
|
|
11
12
|
/**
|
|
12
13
|
* Build a TokenBackend over a single 0600 store file, all accounts held in one
|
|
@@ -20,9 +21,10 @@ import { atomicWrite0600, readStoreFile } from './seat-store.js';
|
|
|
20
21
|
* lockfile. Pure reads (get) are safe lock-free because atomicWrite0600's rename
|
|
21
22
|
* guarantees a reader only ever sees a complete file.
|
|
22
23
|
*/
|
|
23
|
-
export function makeFileBackend(filePath) {
|
|
24
|
+
export function makeFileBackend(filePath, storeOptions = {}) {
|
|
25
|
+
const options = { secureRoot: dirname(filePath), ...storeOptions };
|
|
24
26
|
const load = async () => {
|
|
25
|
-
const raw = await readStoreFile(filePath);
|
|
27
|
+
const raw = await readStoreFile(filePath, options);
|
|
26
28
|
// CR4 fail-closed: ONLY a missing file initializes empty. A present-but-
|
|
27
29
|
// malformed / wrong-version / schema-invalid credential store MUST NOT read as
|
|
28
30
|
// empty — a subsequent set/delete would OVERWRITE it and erase every stored
|
|
@@ -57,7 +59,7 @@ export function makeFileBackend(filePath) {
|
|
|
57
59
|
}
|
|
58
60
|
return { ...accounts };
|
|
59
61
|
};
|
|
60
|
-
const save = (accounts) => atomicWrite0600(filePath, JSON.stringify({ version: 1, accounts }, null, 2) + '\n');
|
|
62
|
+
const save = (accounts) => atomicWrite0600(filePath, JSON.stringify({ version: 1, accounts }, null, 2) + '\n', options);
|
|
61
63
|
return {
|
|
62
64
|
name: 'file',
|
|
63
65
|
async get(account) {
|
package/dist/token-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* (`--cli`, `--remote`, agent passthrough, …) still fall through to launch.
|
|
12
12
|
*/
|
|
13
13
|
/** The subcommands the claude.ts router dispatches on (lines 107-176). */
|
|
14
|
-
export declare const KNOWN_SUBCOMMANDS: readonly ["setup", "assimilate", "reset-local-seat", "spawn", "sync", "cleanup", "launch-all"];
|
|
14
|
+
export declare const KNOWN_SUBCOMMANDS: readonly ["setup", "assimilate", "reset-local-seat", "spawn", "sync", "cleanup", "launch-all", "server"];
|
|
15
15
|
/**
|
|
16
16
|
* Returns the offending command string when argv[2] is an unknown non-flag
|
|
17
17
|
* positional (caller should error + exit 1), or null when it's bare `borg`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unknown-subcommand.d.ts","sourceRoot":"","sources":["../src/unknown-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"unknown-subcommand.d.ts","sourceRoot":"","sources":["../src/unknown-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,0GASpB,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAK1E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unknown-subcommand.js","sourceRoot":"","sources":["../src/unknown-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO;IACP,YAAY;IACZ,kBAAkB;IAClB,OAAO;IACP,MAAM;IACN,SAAS;IACT,YAAY;
|
|
1
|
+
{"version":3,"file":"unknown-subcommand.js","sourceRoot":"","sources":["../src/unknown-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO;IACP,YAAY;IACZ,kBAAkB;IAClB,OAAO;IACP,MAAM;IACN,SAAS;IACT,YAAY;IACZ,QAAQ;CACA,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,CAAC,cAAc;IACpD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,8BAA8B;IACtE,IAAK,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,OAAO,KAAK,CAAC,CAAC,wCAAwC;AACxD,CAAC"}
|
|
@@ -19,8 +19,9 @@ The extraction copied the monorepo's `client/src/` production boundary and top-l
|
|
|
19
19
|
repository-idempotent cube creation required for local dogfood.
|
|
20
20
|
- Initially set the standalone package identity to `2.0.0`. Its immutable
|
|
21
21
|
lightweight release tag failed before packaging. The reviewed `2.0.1`
|
|
22
|
-
recovery
|
|
23
|
-
`2.0.
|
|
22
|
+
recovery and `2.0.2` successor were published and registry-verified; the next
|
|
23
|
+
candidate identity is `2.0.3`. Extraction and versioning do not authorize
|
|
24
|
+
publication.
|
|
24
25
|
|
|
25
26
|
## Review Holds
|
|
26
27
|
|
|
@@ -36,7 +37,7 @@ Local enrollment now uses the reviewed client-generated credential/retry
|
|
|
36
37
|
contract, with a pre-request `PENDING` record in the local 0600-permission seat
|
|
37
38
|
store, exact-tuple ambiguous retry, and verified activation. The contract now
|
|
38
39
|
resolves to the audited registry `borgmcp-shared@0.4.3`. The matching
|
|
39
|
-
`borgmcp-server@0.1.
|
|
40
|
-
`borgmcp@2.0.
|
|
41
|
-
candidate remains gated by reviewed `v2.0.
|
|
40
|
+
`borgmcp-server@0.1.8` release is published and registry-verified. Client
|
|
41
|
+
`borgmcp@2.0.2` is published and registry-verified. Publication of the next
|
|
42
|
+
candidate remains gated by reviewed `v2.0.3` source, a fresh annotated tag, and
|
|
42
43
|
exact registry integrity and signature verification.
|