@brainmcp/brainmcp 0.1.12 → 0.1.14
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 +79 -5
- package/dist/agent-config.js +155 -24
- package/dist/commands/auth.d.ts +47 -0
- package/dist/commands/auth.js +392 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/capture.d.ts +34 -0
- package/dist/commands/capture.js +349 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/dispatch.d.ts +43 -0
- package/dist/commands/dispatch.js +287 -0
- package/dist/commands/dispatch.js.map +1 -0
- package/dist/commands/index.d.ts +4 -0
- package/dist/commands/index.js +198 -36
- package/dist/commands/index.js.map +1 -1
- package/dist/hooks/adapters.d.ts +14 -0
- package/dist/hooks/adapters.js +41 -0
- package/dist/hooks/adapters.js.map +1 -0
- package/dist/hooks/claude.d.ts +24 -0
- package/dist/hooks/claude.js +36 -0
- package/dist/hooks/claude.js.map +1 -0
- package/dist/hooks/codex.d.ts +18 -0
- package/dist/hooks/codex.js +36 -0
- package/dist/hooks/codex.js.map +1 -0
- package/dist/hooks/cursor.d.ts +22 -0
- package/dist/hooks/cursor.js +26 -0
- package/dist/hooks/cursor.js.map +1 -0
- package/dist/hooks/managed-hooks.d.ts +30 -0
- package/dist/hooks/managed-hooks.js +189 -0
- package/dist/hooks/managed-hooks.js.map +1 -0
- package/dist/hooks/vscode.d.ts +22 -0
- package/dist/hooks/vscode.js +27 -0
- package/dist/hooks/vscode.js.map +1 -0
- package/dist/index.js +7 -102
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.d.ts +32 -0
- package/dist/lib/api-client.js +207 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/callback-server.d.ts +17 -0
- package/dist/lib/callback-server.js +145 -0
- package/dist/lib/callback-server.js.map +1 -0
- package/dist/lib/cli-contracts.d.ts +193 -0
- package/dist/lib/cli-contracts.js +242 -0
- package/dist/lib/cli-contracts.js.map +1 -0
- package/dist/lib/config.d.ts +2 -0
- package/dist/lib/config.js +11 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/credentials.d.ts +89 -0
- package/dist/lib/credentials.js +304 -0
- package/dist/lib/credentials.js.map +1 -0
- package/dist/lib/endpoints.d.ts +5 -0
- package/dist/lib/endpoints.js +31 -0
- package/dist/lib/endpoints.js.map +1 -0
- package/dist/lib/http.d.ts +3 -0
- package/dist/lib/http.js +51 -0
- package/dist/lib/http.js.map +1 -0
- package/dist/lib/managed.d.ts +8 -0
- package/dist/lib/managed.js +72 -6
- package/dist/lib/managed.js.map +1 -1
- package/dist/lib/oauth-client.d.ts +55 -0
- package/dist/lib/oauth-client.js +155 -0
- package/dist/lib/oauth-client.js.map +1 -0
- package/dist/lib/pkce.d.ts +14 -0
- package/dist/lib/pkce.js +33 -0
- package/dist/lib/pkce.js.map +1 -0
- package/dist/lib/vault.d.ts +26 -0
- package/dist/lib/vault.js +221 -0
- package/dist/lib/vault.js.map +1 -0
- package/dist/runtime/brainmcp-hook-runtime.mjs +3243 -0
- package/dist/runtime/capture.d.ts +83 -0
- package/dist/runtime/capture.js +332 -0
- package/dist/runtime/capture.js.map +1 -0
- package/dist/runtime/diagnostics.d.ts +7 -0
- package/dist/runtime/diagnostics.js +75 -0
- package/dist/runtime/diagnostics.js.map +1 -0
- package/dist/runtime/doctor-checks.d.ts +15 -0
- package/dist/runtime/doctor-checks.js +233 -0
- package/dist/runtime/doctor-checks.js.map +1 -0
- package/dist/runtime/flush.d.ts +30 -0
- package/dist/runtime/flush.js +193 -0
- package/dist/runtime/flush.js.map +1 -0
- package/dist/runtime/hook-dispatcher.d.ts +31 -0
- package/dist/runtime/hook-dispatcher.js +381 -0
- package/dist/runtime/hook-dispatcher.js.map +1 -0
- package/dist/runtime/index.d.ts +12 -0
- package/dist/runtime/index.js +69 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/installer.d.ts +26 -0
- package/dist/runtime/installer.js +134 -0
- package/dist/runtime/installer.js.map +1 -0
- package/dist/runtime/lock.d.ts +19 -0
- package/dist/runtime/lock.js +116 -0
- package/dist/runtime/lock.js.map +1 -0
- package/dist/runtime/orient.d.ts +55 -0
- package/dist/runtime/orient.js +256 -0
- package/dist/runtime/orient.js.map +1 -0
- package/dist/runtime/queue.d.ts +7 -0
- package/dist/runtime/queue.js +80 -0
- package/dist/runtime/queue.js.map +1 -0
- package/dist/runtime/retention.d.ts +26 -0
- package/dist/runtime/retention.js +175 -0
- package/dist/runtime/retention.js.map +1 -0
- package/dist/runtime/session.d.ts +68 -0
- package/dist/runtime/session.js +283 -0
- package/dist/runtime/session.js.map +1 -0
- package/dist/runtime/storage.d.ts +32 -0
- package/dist/runtime/storage.js +236 -0
- package/dist/runtime/storage.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import crypto from 'node:crypto';
|
|
5
|
+
import { validatePreferencesRecord } from '../lib/cli-contracts.js';
|
|
6
|
+
export const CURRENT_ACCOUNT_SCHEMA_VERSION = 1;
|
|
7
|
+
export const SERVICE_ACCOUNT_ID = 'service';
|
|
8
|
+
export const ACCOUNTS_DIR_NAME = 'accounts';
|
|
9
|
+
export const CURRENT_ACCOUNT_FILENAME = 'current.json';
|
|
10
|
+
const LEGACY_STATE_NAMES = [
|
|
11
|
+
'preferences.json',
|
|
12
|
+
'credentials.json',
|
|
13
|
+
'credentials.lock',
|
|
14
|
+
'credentials.backend.json',
|
|
15
|
+
'queue',
|
|
16
|
+
'sessions',
|
|
17
|
+
'cache',
|
|
18
|
+
'locks',
|
|
19
|
+
'logs',
|
|
20
|
+
];
|
|
21
|
+
export function getBrainHome() {
|
|
22
|
+
const override = process.env.BRAINMCP_HOME ?? process.env.BRAIN_HOME;
|
|
23
|
+
if (override) {
|
|
24
|
+
return path.resolve(override);
|
|
25
|
+
}
|
|
26
|
+
return path.join(os.homedir(), '.brainmcp');
|
|
27
|
+
}
|
|
28
|
+
export function sanitizeAccountId(accountId) {
|
|
29
|
+
const trimmed = accountId.trim();
|
|
30
|
+
if (!trimmed) {
|
|
31
|
+
throw new Error('Account id is required');
|
|
32
|
+
}
|
|
33
|
+
if (/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/.test(trimmed) && !trimmed.includes('..')) {
|
|
34
|
+
return trimmed;
|
|
35
|
+
}
|
|
36
|
+
const digest = crypto.createHash('sha256').update(trimmed).digest('hex').slice(0, 32);
|
|
37
|
+
return `id-${digest}`;
|
|
38
|
+
}
|
|
39
|
+
export function getCurrentAccountPath(brainHome) {
|
|
40
|
+
return path.join(brainHome ?? getBrainHome(), CURRENT_ACCOUNT_FILENAME);
|
|
41
|
+
}
|
|
42
|
+
export function validateCurrentAccountRecord(data) {
|
|
43
|
+
if (!data || typeof data !== 'object') {
|
|
44
|
+
throw new Error('Current account pointer must be an object');
|
|
45
|
+
}
|
|
46
|
+
const obj = data;
|
|
47
|
+
if (obj.version !== CURRENT_ACCOUNT_SCHEMA_VERSION) {
|
|
48
|
+
throw new Error(`Unsupported current-account schema version: ${String(obj.version)}`);
|
|
49
|
+
}
|
|
50
|
+
if (typeof obj.accountId !== 'string' || !obj.accountId.trim()) {
|
|
51
|
+
throw new Error('Current account pointer requires accountId');
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
version: CURRENT_ACCOUNT_SCHEMA_VERSION,
|
|
55
|
+
accountId: sanitizeAccountId(obj.accountId),
|
|
56
|
+
updatedAt: typeof obj.updatedAt === 'string' ? obj.updatedAt : new Date().toISOString(),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export function getCurrentAccountId(brainHome) {
|
|
60
|
+
const record = readSafeJson(getCurrentAccountPath(brainHome), validateCurrentAccountRecord);
|
|
61
|
+
return record?.accountId ?? null;
|
|
62
|
+
}
|
|
63
|
+
export function getAccountStateDir(brainHome, accountId) {
|
|
64
|
+
const home = path.resolve(brainHome);
|
|
65
|
+
const id = sanitizeAccountId(accountId);
|
|
66
|
+
return path.join(home, ACCOUNTS_DIR_NAME, id);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Per-account state directory when `current.json` is present.
|
|
70
|
+
* Without a current account, callers keep using the brain home (legacy layout and tests).
|
|
71
|
+
*/
|
|
72
|
+
export function resolveStateDir(brainHome) {
|
|
73
|
+
const home = brainHome ?? getBrainHome();
|
|
74
|
+
const accountId = getCurrentAccountId(home);
|
|
75
|
+
if (!accountId)
|
|
76
|
+
return home;
|
|
77
|
+
const accountsDir = path.join(path.resolve(home), ACCOUNTS_DIR_NAME);
|
|
78
|
+
ensureDirectory0700(accountsDir);
|
|
79
|
+
const dir = getAccountStateDir(home, accountId);
|
|
80
|
+
ensureDirectory0700(dir);
|
|
81
|
+
return dir;
|
|
82
|
+
}
|
|
83
|
+
export function switchCurrentAccount(brainHome, accountId) {
|
|
84
|
+
const home = path.resolve(brainHome);
|
|
85
|
+
ensureDirectory0700(home);
|
|
86
|
+
const id = sanitizeAccountId(accountId);
|
|
87
|
+
const accountsDir = path.join(home, ACCOUNTS_DIR_NAME);
|
|
88
|
+
ensureDirectory0700(accountsDir);
|
|
89
|
+
const stateDir = getAccountStateDir(home, id);
|
|
90
|
+
ensureDirectory0700(stateDir);
|
|
91
|
+
writeAtomic0600(getCurrentAccountPath(home), JSON.stringify({
|
|
92
|
+
version: CURRENT_ACCOUNT_SCHEMA_VERSION,
|
|
93
|
+
accountId: id,
|
|
94
|
+
updatedAt: new Date().toISOString(),
|
|
95
|
+
}, null, 2));
|
|
96
|
+
return stateDir;
|
|
97
|
+
}
|
|
98
|
+
export function clearCurrentAccount(brainHome) {
|
|
99
|
+
const currentPath = getCurrentAccountPath(brainHome);
|
|
100
|
+
if (!fs.existsSync(currentPath))
|
|
101
|
+
return;
|
|
102
|
+
assertNotSymlink(currentPath);
|
|
103
|
+
fs.unlinkSync(currentPath);
|
|
104
|
+
}
|
|
105
|
+
export function migrateLegacyFlatState(brainHome, accountId) {
|
|
106
|
+
const home = path.resolve(brainHome);
|
|
107
|
+
const dest = getAccountStateDir(home, accountId);
|
|
108
|
+
ensureDirectory0700(path.join(home, ACCOUNTS_DIR_NAME));
|
|
109
|
+
ensureDirectory0700(dest);
|
|
110
|
+
const migrated = [];
|
|
111
|
+
for (const name of LEGACY_STATE_NAMES) {
|
|
112
|
+
const from = path.join(home, name);
|
|
113
|
+
const to = path.join(dest, name);
|
|
114
|
+
if (!fs.existsSync(from) || fs.existsSync(to))
|
|
115
|
+
continue;
|
|
116
|
+
assertNotSymlink(from);
|
|
117
|
+
fs.renameSync(from, to);
|
|
118
|
+
migrated.push(name);
|
|
119
|
+
}
|
|
120
|
+
return migrated;
|
|
121
|
+
}
|
|
122
|
+
export function activateAccount(brainHome, accountId) {
|
|
123
|
+
const migratedInto = switchCurrentAccount(brainHome, accountId);
|
|
124
|
+
migrateLegacyFlatState(brainHome, accountId);
|
|
125
|
+
return migratedInto;
|
|
126
|
+
}
|
|
127
|
+
export function ensureDirectory0700(dirPath) {
|
|
128
|
+
const resolved = path.resolve(dirPath);
|
|
129
|
+
if (fs.existsSync(resolved)) {
|
|
130
|
+
const stat = fs.lstatSync(resolved);
|
|
131
|
+
if (stat.isSymbolicLink()) {
|
|
132
|
+
throw new Error(`Security violation: directory ${resolved} is a symbolic link`);
|
|
133
|
+
}
|
|
134
|
+
if (!stat.isDirectory()) {
|
|
135
|
+
throw new Error(`Path ${resolved} is not a directory`);
|
|
136
|
+
}
|
|
137
|
+
if (process.platform !== 'win32') {
|
|
138
|
+
const mode = stat.mode & 0o777;
|
|
139
|
+
if (mode !== 0o700) {
|
|
140
|
+
fs.chmodSync(resolved, 0o700);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
let existingParent = path.dirname(resolved);
|
|
146
|
+
while (!fs.existsSync(existingParent)) {
|
|
147
|
+
const next = path.dirname(existingParent);
|
|
148
|
+
if (next === existingParent)
|
|
149
|
+
break;
|
|
150
|
+
existingParent = next;
|
|
151
|
+
}
|
|
152
|
+
if (fs.existsSync(existingParent) && fs.lstatSync(existingParent).isSymbolicLink()) {
|
|
153
|
+
throw new Error(`Security violation: directory parent ${existingParent} is a symbolic link`);
|
|
154
|
+
}
|
|
155
|
+
fs.mkdirSync(resolved, { recursive: true, mode: 0o700 });
|
|
156
|
+
}
|
|
157
|
+
export function assertNotSymlink(targetPath) {
|
|
158
|
+
const resolved = path.resolve(targetPath);
|
|
159
|
+
const stat = fs.lstatSync(resolved, { throwIfNoEntry: false });
|
|
160
|
+
if (stat?.isSymbolicLink()) {
|
|
161
|
+
throw new Error(`Security violation: ${resolved} is a symbolic link`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
export function writeAtomic0600(filePath, content) {
|
|
165
|
+
const resolved = path.resolve(filePath);
|
|
166
|
+
const dir = path.dirname(resolved);
|
|
167
|
+
ensureDirectory0700(dir);
|
|
168
|
+
assertNotSymlink(resolved);
|
|
169
|
+
const tmpPath = `${resolved}.tmp.${crypto.randomUUID()}`;
|
|
170
|
+
const noFollow = typeof fs.constants.O_NOFOLLOW === 'number' ? fs.constants.O_NOFOLLOW : 0;
|
|
171
|
+
try {
|
|
172
|
+
const fd = fs.openSync(tmpPath, fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_WRONLY | noFollow, 0o600);
|
|
173
|
+
try {
|
|
174
|
+
fs.writeSync(fd, content, 0, 'utf8');
|
|
175
|
+
fs.fsyncSync(fd);
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
fs.closeSync(fd);
|
|
179
|
+
}
|
|
180
|
+
// Rename atomically
|
|
181
|
+
fs.renameSync(tmpPath, resolved);
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
try {
|
|
185
|
+
fs.unlinkSync(tmpPath);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// Best-effort cleanup of an uncommitted temporary file.
|
|
189
|
+
}
|
|
190
|
+
throw error;
|
|
191
|
+
}
|
|
192
|
+
if (process.platform !== 'win32') {
|
|
193
|
+
fs.chmodSync(resolved, 0o600);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
export function readSafeJson(filePath, validator) {
|
|
197
|
+
const resolved = path.resolve(filePath);
|
|
198
|
+
if (!fs.existsSync(resolved)) {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
assertNotSymlink(resolved);
|
|
202
|
+
const stat = fs.lstatSync(resolved);
|
|
203
|
+
if (!stat.isFile()) {
|
|
204
|
+
throw new Error(`Security violation: ${resolved} is not a regular file`);
|
|
205
|
+
}
|
|
206
|
+
if (process.platform !== 'win32') {
|
|
207
|
+
const mode = stat.mode & 0o777;
|
|
208
|
+
if (mode !== 0o600) {
|
|
209
|
+
throw new Error(`Security violation: ${resolved} permissions are ${mode.toString(8)}, expected 600`);
|
|
210
|
+
}
|
|
211
|
+
if (process.getuid && stat.uid !== process.getuid()) {
|
|
212
|
+
throw new Error(`Security violation: ${resolved} is not owned by the current user`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
const raw = fs.readFileSync(resolved, 'utf8');
|
|
216
|
+
try {
|
|
217
|
+
const parsed = JSON.parse(raw);
|
|
218
|
+
if (validator) {
|
|
219
|
+
return validator(parsed);
|
|
220
|
+
}
|
|
221
|
+
return parsed;
|
|
222
|
+
}
|
|
223
|
+
catch (err) {
|
|
224
|
+
throw new Error(`Corrupt or invalid JSON in ${resolved}: ${err instanceof Error ? err.message : String(err)}`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
export function getPreferencesPath(baseDir) {
|
|
228
|
+
return path.join(resolveStateDir(baseDir), 'preferences.json');
|
|
229
|
+
}
|
|
230
|
+
export function readPreferences(baseDir) {
|
|
231
|
+
return readSafeJson(getPreferencesPath(baseDir), validatePreferencesRecord);
|
|
232
|
+
}
|
|
233
|
+
export function writePreferences(prefs, baseDir) {
|
|
234
|
+
writeAtomic0600(getPreferencesPath(baseDir), JSON.stringify(prefs, null, 2));
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/runtime/storage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brainmcp/brainmcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.14",
|
|
4
4
|
"description": "Safely configure BrainMCP guidance and MCP connections across agent projects",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@types/node": "^26.1.0",
|
|
20
|
+
"esbuild": "0.28.1",
|
|
20
21
|
"tsx": "^4.23.0",
|
|
21
22
|
"typescript": "6.0.3",
|
|
22
23
|
"@braincp/agent-config": "0.0.1"
|
|
@@ -26,7 +27,7 @@
|
|
|
26
27
|
},
|
|
27
28
|
"license": "MIT",
|
|
28
29
|
"scripts": {
|
|
29
|
-
"build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json && node scripts/bundle-agent-config.mjs && chmod +x dist/index.js",
|
|
30
|
+
"build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json && node scripts/bundle-agent-config.mjs && node scripts/bundle-hook-runtime.mjs && chmod +x dist/index.js",
|
|
30
31
|
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
31
32
|
"test": "node --import tsx --test 'src/**/*.test.ts'"
|
|
32
33
|
}
|