borgmcp 0.8.14 → 0.8.20
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/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +27 -20
- package/dist/auth.js.map +1 -1
- package/dist/claude.js +17 -10
- package/dist/claude.js.map +1 -1
- package/dist/config-utils.d.ts +22 -0
- package/dist/config-utils.d.ts.map +1 -1
- package/dist/config-utils.js +51 -0
- package/dist/config-utils.js.map +1 -1
- package/dist/console-prefix.d.ts +48 -0
- package/dist/console-prefix.d.ts.map +1 -0
- package/dist/console-prefix.js +86 -0
- package/dist/console-prefix.js.map +1 -0
- package/dist/inbox-monitor.d.ts +34 -0
- package/dist/inbox-monitor.d.ts.map +1 -0
- package/dist/inbox-monitor.js +90 -0
- package/dist/inbox-monitor.js.map +1 -0
- package/dist/index.js +12 -8
- package/dist/index.js.map +1 -1
- package/dist/regen-format.d.ts.map +1 -1
- package/dist/regen-format.js +5 -1
- package/dist/regen-format.js.map +1 -1
- package/dist/remote-client.d.ts.map +1 -1
- package/dist/remote-client.js +2 -1
- package/dist/remote-client.js.map +1 -1
- package/dist/roster-render.js +1 -1
- package/dist/roster-render.js.map +1 -1
- package/dist/setup.js +41 -31
- package/dist/setup.js.map +1 -1
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +79 -2
- package/dist/templates.js.map +1 -1
- package/package.json +3 -2
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH;;;;;;;;;;;GAWG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;aACrB,SAAS,EAAE,MAAM;aAAkB,gBAAgB,CAAC,EAAE,MAAM;gBAA5D,SAAS,EAAE,MAAM,EAAkB,gBAAgB,CAAC,EAAE,MAAM,YAAA;CAQzF;AAED;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AA8MD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwE5D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,cAAc,CAClC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAiGf"}
|
package/dist/auth.js
CHANGED
|
@@ -16,6 +16,7 @@ import { URL } from 'url';
|
|
|
16
16
|
import crypto from 'crypto';
|
|
17
17
|
import open from 'open';
|
|
18
18
|
import { storeIdToken, storeRefreshToken, getRefreshToken } from './config.js';
|
|
19
|
+
import { cerr } from './console-prefix.js';
|
|
19
20
|
/**
|
|
20
21
|
* Refresh-token-revoked / expired — the user must re-run `borg setup`
|
|
21
22
|
* to recover. Anchored on Google's canonical signal: HTTP 400 + JSON
|
|
@@ -159,7 +160,7 @@ async function startCallbackServer() {
|
|
|
159
160
|
}
|
|
160
161
|
});
|
|
161
162
|
server.listen(port, () => {
|
|
162
|
-
|
|
163
|
+
cerr(`Callback server listening on http://localhost:${port}`);
|
|
163
164
|
});
|
|
164
165
|
// Timeout after 5 minutes. .unref() so the timer doesn't keep the
|
|
165
166
|
// Node event loop alive after auth succeeds — without it, borg-setup
|
|
@@ -208,9 +209,15 @@ async function exchangeCodeForTokens(code, codeVerifier, port) {
|
|
|
208
209
|
*/
|
|
209
210
|
async function revokeRefreshTokenAtGoogle(refreshToken) {
|
|
210
211
|
try {
|
|
211
|
-
|
|
212
|
+
// gh#55: per RFC 7009 §2.1, the token MUST be sent in the request
|
|
213
|
+
// body (application/x-www-form-urlencoded), not the query string.
|
|
214
|
+
// Google accepts both shapes in practice, but the prior query-string
|
|
215
|
+
// transport contradicted the declared `Content-Type` header and was
|
|
216
|
+
// a code-clarity issue drone-2 flagged in PR #38 retrospective.
|
|
217
|
+
await fetch(GOOGLE_REVOKE_URL, {
|
|
212
218
|
method: 'POST',
|
|
213
219
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
220
|
+
body: `token=${encodeURIComponent(refreshToken)}`,
|
|
214
221
|
});
|
|
215
222
|
}
|
|
216
223
|
catch {
|
|
@@ -233,21 +240,21 @@ async function revokeRefreshTokenAtGoogle(refreshToken) {
|
|
|
233
240
|
* id_token TTL expires.)
|
|
234
241
|
*/
|
|
235
242
|
export async function authenticateWithGoogle() {
|
|
236
|
-
|
|
237
|
-
|
|
243
|
+
cerr('\n◼ Borg MCP Authentication');
|
|
244
|
+
cerr('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
|
|
238
245
|
// Step 0: revoke any existing refresh_token to force Google to re-issue
|
|
239
246
|
// one in the fresh consent flow below (defeats Google's consent dedup
|
|
240
247
|
// behavior that leaves clients in a no-refresh-token state).
|
|
241
248
|
const existingRefreshToken = await getRefreshToken();
|
|
242
249
|
if (existingRefreshToken) {
|
|
243
|
-
|
|
250
|
+
cerr('Revoking previous refresh_token to force fresh consent...');
|
|
244
251
|
await revokeRefreshTokenAtGoogle(existingRefreshToken);
|
|
245
252
|
}
|
|
246
253
|
// Step 1: Generate PKCE pair
|
|
247
|
-
|
|
254
|
+
cerr('Generating PKCE challenge...');
|
|
248
255
|
const pkce = generatePKCE();
|
|
249
256
|
// Step 2: Start local callback server (gets dynamic port)
|
|
250
|
-
|
|
257
|
+
cerr('Starting local callback server...');
|
|
251
258
|
const { port, codePromise } = await startCallbackServer();
|
|
252
259
|
// Step 3: Build authorization URL with dynamic redirect URI
|
|
253
260
|
const redirectUri = `http://localhost:${port}/callback`;
|
|
@@ -264,15 +271,15 @@ export async function authenticateWithGoogle() {
|
|
|
264
271
|
// a fresh refresh_token instead of deduping the consent.
|
|
265
272
|
authUrl.searchParams.set('prompt', 'consent select_account');
|
|
266
273
|
// Step 4: Open browser
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
274
|
+
cerr('\n📱 Opening browser for authorization...');
|
|
275
|
+
cerr('If browser does not open, visit:');
|
|
276
|
+
cerr(`${authUrl.toString()}\n`);
|
|
270
277
|
await open(authUrl.toString());
|
|
271
278
|
// Step 5: Wait for authorization code
|
|
272
|
-
|
|
279
|
+
cerr('Waiting for authorization...');
|
|
273
280
|
const code = await codePromise;
|
|
274
281
|
// Step 6: Exchange code for tokens
|
|
275
|
-
|
|
282
|
+
cerr('Exchanging authorization code for tokens...');
|
|
276
283
|
const tokenData = await exchangeCodeForTokens(code, pkce.verifier, port);
|
|
277
284
|
// Step 7: Store tokens securely
|
|
278
285
|
const expiresAt = Date.now() + tokenData.expires_in * 1000;
|
|
@@ -286,15 +293,15 @@ export async function authenticateWithGoogle() {
|
|
|
286
293
|
// sometimes dedupes consent and skips the refresh_token even when
|
|
287
294
|
// prompt=consent is set. Surface this so the user can revoke and
|
|
288
295
|
// reconsent if they want durable sessions.
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
+
cerr('\n⚠ No refresh_token returned by Google.');
|
|
297
|
+
cerr(' Your session will expire after ~1 hour and require');
|
|
298
|
+
cerr(' re-running `borg setup`. To enable auto-refresh:');
|
|
299
|
+
cerr(' 1. Visit https://myaccount.google.com/permissions');
|
|
300
|
+
cerr(' 2. Find "Borg MCP" and click "Remove access"');
|
|
301
|
+
cerr(' 3. Re-run `borg setup`');
|
|
302
|
+
cerr(' (Google will then issue a fresh refresh_token.)\n');
|
|
296
303
|
}
|
|
297
|
-
|
|
304
|
+
cerr('\n◼ Authentication successful!\n');
|
|
298
305
|
}
|
|
299
306
|
/**
|
|
300
307
|
* Refresh ID token using refresh token (gh#34 hardened).
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAmC,MAAM,MAAM,CAAC;AACrE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/claude.js
CHANGED
|
@@ -23,9 +23,13 @@ import { handleVersionFlag } from './version.js';
|
|
|
23
23
|
import { parseSpawnArgs, runSpawn } from './spawn.js';
|
|
24
24
|
import { parseSyncArgs, runSync } from './sync.js';
|
|
25
25
|
import { setTerminalTitle } from './terminal-title.js';
|
|
26
|
+
import { initConsolePrefix, consolePrefix } from './console-prefix.js';
|
|
26
27
|
async function main() {
|
|
27
28
|
// Honor `--version` / `-v` before any other work.
|
|
28
29
|
handleVersionFlag();
|
|
30
|
+
// Resolve drone self-identification prefix (gh#25) before any error
|
|
31
|
+
// emission so messages carry `[drone-X · cube]` from launch onward.
|
|
32
|
+
await initConsolePrefix();
|
|
29
33
|
// Re-route subcommands.
|
|
30
34
|
if (process.argv[2] === 'setup') {
|
|
31
35
|
await import('./setup.js');
|
|
@@ -34,7 +38,7 @@ async function main() {
|
|
|
34
38
|
if (process.argv[2] === 'spawn') {
|
|
35
39
|
const parsed = parseSpawnArgs(process.argv.slice(3));
|
|
36
40
|
if (!parsed.ok) {
|
|
37
|
-
process.stderr.write(chalk.red(
|
|
41
|
+
process.stderr.write(chalk.red(`${consolePrefix()}◼ borg spawn: ${parsed.error}\n`));
|
|
38
42
|
process.exit(1);
|
|
39
43
|
}
|
|
40
44
|
const code = await runSpawn(parsed.args);
|
|
@@ -43,7 +47,7 @@ async function main() {
|
|
|
43
47
|
if (process.argv[2] === 'sync') {
|
|
44
48
|
const parsed = parseSyncArgs(process.argv.slice(3));
|
|
45
49
|
if (!parsed.ok) {
|
|
46
|
-
process.stderr.write(chalk.red(
|
|
50
|
+
process.stderr.write(chalk.red(`${consolePrefix()}◼ borg sync: ${parsed.error}\n`));
|
|
47
51
|
process.exit(1);
|
|
48
52
|
}
|
|
49
53
|
const code = await runSync();
|
|
@@ -75,8 +79,11 @@ async function main() {
|
|
|
75
79
|
// not set its own title, so this persists for the session.
|
|
76
80
|
setTerminalTitle(active ? { label: active.droneLabel, cubeName: active.name } : null, basename(process.cwd()));
|
|
77
81
|
const monitorClause = active
|
|
78
|
-
? `If you haven't yet, arm a persistent Monitor
|
|
79
|
-
|
|
82
|
+
? `If you haven't yet, arm a persistent Monitor running the command ` +
|
|
83
|
+
`\`borg-inbox-monitor ${inboxPathForDrone(active.cubeId, active.droneId)}\` ` +
|
|
84
|
+
`so each event's task-notification title summarizes the new cube log entry ` +
|
|
85
|
+
`(drone label, role, and first ~80 chars of the message body) — letting you ` +
|
|
86
|
+
`triage events without reading the full body. `
|
|
80
87
|
: '';
|
|
81
88
|
const kickoff = `/loop Call borg:regen and follow the playbook in its response. ` +
|
|
82
89
|
`Note: at session start the borg MCP server is still spinning up in ` +
|
|
@@ -86,19 +93,19 @@ async function main() {
|
|
|
86
93
|
`available within a few seconds. ` +
|
|
87
94
|
monitorClause +
|
|
88
95
|
`Use a 30-minute (1800s) fallback heartbeat for ScheduleWakeup.`;
|
|
89
|
-
console.error(chalk.blue('◼ Launching Claude Code…'));
|
|
96
|
+
console.error(`${consolePrefix()}${chalk.blue('◼ Launching Claude Code…')}`);
|
|
90
97
|
const claudeProcess = spawn('claude', [...passthroughArgs, kickoff], {
|
|
91
98
|
stdio: 'inherit',
|
|
92
99
|
shell: false,
|
|
93
100
|
});
|
|
94
101
|
claudeProcess.on('error', (err) => {
|
|
95
102
|
if (err.code === 'ENOENT') {
|
|
96
|
-
console.error(chalk.red('\n◼ Failed to launch Claude Code'));
|
|
97
|
-
console.error(chalk.gray('Make sure Claude Code is installed:'));
|
|
98
|
-
console.error(chalk.gray(' https://claude.ai/download\n'));
|
|
103
|
+
console.error(`${consolePrefix()}${chalk.red('\n◼ Failed to launch Claude Code')}`);
|
|
104
|
+
console.error(`${consolePrefix()}${chalk.gray('Make sure Claude Code is installed:')}`);
|
|
105
|
+
console.error(`${consolePrefix()}${chalk.gray(' https://claude.ai/download\n')}`);
|
|
99
106
|
}
|
|
100
107
|
else {
|
|
101
|
-
console.error(chalk.red(`\n◼ Failed to launch Claude Code: ${err.message}\n`));
|
|
108
|
+
console.error(`${consolePrefix()}${chalk.red(`\n◼ Failed to launch Claude Code: ${err.message}\n`)}`);
|
|
102
109
|
}
|
|
103
110
|
process.exit(1);
|
|
104
111
|
});
|
|
@@ -107,7 +114,7 @@ async function main() {
|
|
|
107
114
|
});
|
|
108
115
|
}
|
|
109
116
|
main().catch((error) => {
|
|
110
|
-
console.error(chalk.red(`\n◼ Error: ${error.message}\n`));
|
|
117
|
+
console.error(`${consolePrefix()}${chalk.red(`\n◼ Error: ${error.message}\n`)}`);
|
|
111
118
|
process.exit(1);
|
|
112
119
|
});
|
|
113
120
|
//# sourceMappingURL=claude.js.map
|
package/dist/claude.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/config-utils.d.ts
CHANGED
|
@@ -35,6 +35,28 @@ export declare function addUserPromptSubmitHook(): boolean;
|
|
|
35
35
|
* removeSessionStartHook.
|
|
36
36
|
*/
|
|
37
37
|
export declare function removeUserPromptSubmitHook(): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Detect whether the borg MCP server is already registered in the Claude
|
|
40
|
+
* Code CLI config (`~/.claude.json` `mcpServers.borg`).
|
|
41
|
+
*
|
|
42
|
+
* Per gh#79: when a user re-runs `borg setup` to refresh OAuth (the
|
|
43
|
+
* canonical re-run reason), the setup wizard's "Add borg to Claude Code?"
|
|
44
|
+
* prompt is redundant — the answer is deterministic ("already
|
|
45
|
+
* configured"). This detect lets the wizard silently skip Step 1 entirely
|
|
46
|
+
* when borg is present. Per the dispatch's Queen-implicit anti-scope,
|
|
47
|
+
* "silent means silent" — callers must not log an "already configured"
|
|
48
|
+
* notice when this returns true.
|
|
49
|
+
*
|
|
50
|
+
* Safe-default contract: any read error (file missing, malformed JSON,
|
|
51
|
+
* permission denied, empty file, unexpected shape) returns `false` so
|
|
52
|
+
* the caller still prompts. The dispatch's edge-case framing is "if
|
|
53
|
+
* indeterminate → prompt fires" — never silent-skip when state is
|
|
54
|
+
* ambiguous. The prompt is the safe path; silent-skip is the
|
|
55
|
+
* optimization layered on top of a verified-present signal.
|
|
56
|
+
*
|
|
57
|
+
* @param configPath Override the config-file path; primarily for tests.
|
|
58
|
+
*/
|
|
59
|
+
export declare function isMcpServerConfigured(configPath?: string): boolean;
|
|
38
60
|
/**
|
|
39
61
|
* Get absolute path to borg index.js
|
|
40
62
|
* Returns the actual index.js file, not the npm symlink
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-utils.d.ts","sourceRoot":"","sources":["../src/config-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"config-utils.d.ts","sourceRoot":"","sources":["../src/config-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8CH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAyB7C;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CA+BhD;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAyBjD;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CA+BpD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,GAAE,MAA2B,GACtC,OAAO,CAaT;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAyBnC"}
|
package/dist/config-utils.js
CHANGED
|
@@ -14,6 +14,17 @@ const __filename = fileURLToPath(import.meta.url);
|
|
|
14
14
|
const __dirname = dirname(__filename);
|
|
15
15
|
const HOOK_COMMAND = 'borg-regen';
|
|
16
16
|
const AUDIT_HOOK_COMMAND = 'borg-log-audit';
|
|
17
|
+
/**
|
|
18
|
+
* Claude Code CLI config path. The CLI reads `mcpServers.<name>` from
|
|
19
|
+
* this file to discover registered MCP servers; `addMcpServer()` (below)
|
|
20
|
+
* writes to it via the `claude mcp add --scope user borg borg-mcp` shell
|
|
21
|
+
* command. Server name is `borg` (not `borgmcp` — `borg-mcp` is the
|
|
22
|
+
* binary that backs it). NOTE: distinct from
|
|
23
|
+
* `~/Library/Application Support/Claude/claude_desktop_config.json`,
|
|
24
|
+
* which is the Claude Desktop app's config (different product).
|
|
25
|
+
*/
|
|
26
|
+
const CLAUDE_CONFIG_PATH = path.join(os.homedir(), '.claude.json');
|
|
27
|
+
const MCP_SERVER_NAME = 'borg';
|
|
17
28
|
function settingsPath() {
|
|
18
29
|
return path.join(os.homedir(), '.claude', 'settings.json');
|
|
19
30
|
}
|
|
@@ -169,6 +180,46 @@ export function removeUserPromptSubmitHook() {
|
|
|
169
180
|
writeSettings(settings);
|
|
170
181
|
return changed;
|
|
171
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* Detect whether the borg MCP server is already registered in the Claude
|
|
185
|
+
* Code CLI config (`~/.claude.json` `mcpServers.borg`).
|
|
186
|
+
*
|
|
187
|
+
* Per gh#79: when a user re-runs `borg setup` to refresh OAuth (the
|
|
188
|
+
* canonical re-run reason), the setup wizard's "Add borg to Claude Code?"
|
|
189
|
+
* prompt is redundant — the answer is deterministic ("already
|
|
190
|
+
* configured"). This detect lets the wizard silently skip Step 1 entirely
|
|
191
|
+
* when borg is present. Per the dispatch's Queen-implicit anti-scope,
|
|
192
|
+
* "silent means silent" — callers must not log an "already configured"
|
|
193
|
+
* notice when this returns true.
|
|
194
|
+
*
|
|
195
|
+
* Safe-default contract: any read error (file missing, malformed JSON,
|
|
196
|
+
* permission denied, empty file, unexpected shape) returns `false` so
|
|
197
|
+
* the caller still prompts. The dispatch's edge-case framing is "if
|
|
198
|
+
* indeterminate → prompt fires" — never silent-skip when state is
|
|
199
|
+
* ambiguous. The prompt is the safe path; silent-skip is the
|
|
200
|
+
* optimization layered on top of a verified-present signal.
|
|
201
|
+
*
|
|
202
|
+
* @param configPath Override the config-file path; primarily for tests.
|
|
203
|
+
*/
|
|
204
|
+
export function isMcpServerConfigured(configPath = CLAUDE_CONFIG_PATH) {
|
|
205
|
+
try {
|
|
206
|
+
if (!fs.existsSync(configPath))
|
|
207
|
+
return false;
|
|
208
|
+
const text = fs.readFileSync(configPath, 'utf-8');
|
|
209
|
+
if (!text.trim())
|
|
210
|
+
return false;
|
|
211
|
+
const parsed = JSON.parse(text);
|
|
212
|
+
if (!parsed || typeof parsed !== 'object')
|
|
213
|
+
return false;
|
|
214
|
+
const servers = parsed.mcpServers;
|
|
215
|
+
if (!servers || typeof servers !== 'object')
|
|
216
|
+
return false;
|
|
217
|
+
return MCP_SERVER_NAME in servers;
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
172
223
|
/**
|
|
173
224
|
* Get absolute path to borg index.js
|
|
174
225
|
* Returns the actual index.js file, not the npm symlink
|
package/dist/config-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-utils.js","sourceRoot":"","sources":["../src/config-utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config-utils.js","sourceRoot":"","sources":["../src/config-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drone self-identification prefix for client-emitted console messages.
|
|
3
|
+
*
|
|
4
|
+
* Per gh#25: when a drone session emits a console error (e.g.
|
|
5
|
+
* "Authentication expired. Run: borg setup"), the Queen has no way to
|
|
6
|
+
* tell which drone window the message came from without scanning every
|
|
7
|
+
* open terminal. Window title alone (set by terminal-title.ts) is
|
|
8
|
+
* insufficient — the Queen reads the active terminal's output stream,
|
|
9
|
+
* not its title bar.
|
|
10
|
+
*
|
|
11
|
+
* This module exports a one-shot initializer that resolves the prefix
|
|
12
|
+
* from the local cube state cache, plus a synchronous getter that
|
|
13
|
+
* call sites use to wrap each console.error.
|
|
14
|
+
*
|
|
15
|
+
* Format (matches the terminal-title.ts middle-dot convention so
|
|
16
|
+
* surfaces stay internally consistent):
|
|
17
|
+
* `[<drone-label> · <cube-name>]` (assimilated)
|
|
18
|
+
* `[unassimilated · <repo-basename>]` (no cube cached)
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Resolve the drone-self-identification prefix from cube state and
|
|
22
|
+
* cache it for subsequent synchronous reads. Idempotent — calling
|
|
23
|
+
* multiple times returns the same value. Falls back silently to the
|
|
24
|
+
* unassimilated shape on any read error so console emission is never
|
|
25
|
+
* blocked.
|
|
26
|
+
*/
|
|
27
|
+
export declare function initConsolePrefix(): Promise<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Synchronous prefix getter. Returns the cached value if initialized,
|
|
30
|
+
* otherwise the unassimilated fallback — safe to call before
|
|
31
|
+
* initConsolePrefix() resolves.
|
|
32
|
+
*/
|
|
33
|
+
export declare function droneIdPrefix(): string;
|
|
34
|
+
/**
|
|
35
|
+
* Prefix + trailing space, styled dim/gray so the prefix is metadata
|
|
36
|
+
* and the message body retains visual emphasis. Use as
|
|
37
|
+
* `${consolePrefix()}<message>`.
|
|
38
|
+
*/
|
|
39
|
+
export declare function consolePrefix(): string;
|
|
40
|
+
/**
|
|
41
|
+
* Drop-in replacement for `console.error` that prepends the drone
|
|
42
|
+
* self-id prefix. If the first arg is a string, the prefix is
|
|
43
|
+
* concatenated to it; otherwise the prefix is emitted as its own arg
|
|
44
|
+
* (handles the `console.error('label:', value)` shape).
|
|
45
|
+
*/
|
|
46
|
+
export declare function cerr(...args: any[]): void;
|
|
47
|
+
export declare function _resetCachedPrefixForTests(): void;
|
|
48
|
+
//# sourceMappingURL=console-prefix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-prefix.d.ts","sourceRoot":"","sources":["../src/console-prefix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH;;;;;;GAMG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAazD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAUzC;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drone self-identification prefix for client-emitted console messages.
|
|
3
|
+
*
|
|
4
|
+
* Per gh#25: when a drone session emits a console error (e.g.
|
|
5
|
+
* "Authentication expired. Run: borg setup"), the Queen has no way to
|
|
6
|
+
* tell which drone window the message came from without scanning every
|
|
7
|
+
* open terminal. Window title alone (set by terminal-title.ts) is
|
|
8
|
+
* insufficient — the Queen reads the active terminal's output stream,
|
|
9
|
+
* not its title bar.
|
|
10
|
+
*
|
|
11
|
+
* This module exports a one-shot initializer that resolves the prefix
|
|
12
|
+
* from the local cube state cache, plus a synchronous getter that
|
|
13
|
+
* call sites use to wrap each console.error.
|
|
14
|
+
*
|
|
15
|
+
* Format (matches the terminal-title.ts middle-dot convention so
|
|
16
|
+
* surfaces stay internally consistent):
|
|
17
|
+
* `[<drone-label> · <cube-name>]` (assimilated)
|
|
18
|
+
* `[unassimilated · <repo-basename>]` (no cube cached)
|
|
19
|
+
*/
|
|
20
|
+
import { basename } from 'node:path';
|
|
21
|
+
import chalk from 'chalk';
|
|
22
|
+
import { getActiveCube } from './cubes.js';
|
|
23
|
+
let cachedPrefix = null;
|
|
24
|
+
/**
|
|
25
|
+
* Resolve the drone-self-identification prefix from cube state and
|
|
26
|
+
* cache it for subsequent synchronous reads. Idempotent — calling
|
|
27
|
+
* multiple times returns the same value. Falls back silently to the
|
|
28
|
+
* unassimilated shape on any read error so console emission is never
|
|
29
|
+
* blocked.
|
|
30
|
+
*/
|
|
31
|
+
export async function initConsolePrefix() {
|
|
32
|
+
if (cachedPrefix !== null)
|
|
33
|
+
return cachedPrefix;
|
|
34
|
+
try {
|
|
35
|
+
const active = await getActiveCube();
|
|
36
|
+
if (active?.droneLabel && active?.name) {
|
|
37
|
+
cachedPrefix = `[${active.droneLabel} · ${active.name}]`;
|
|
38
|
+
return cachedPrefix;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Fall through to unassimilated fallback.
|
|
43
|
+
}
|
|
44
|
+
cachedPrefix = `[unassimilated · ${basename(process.cwd())}]`;
|
|
45
|
+
return cachedPrefix;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Synchronous prefix getter. Returns the cached value if initialized,
|
|
49
|
+
* otherwise the unassimilated fallback — safe to call before
|
|
50
|
+
* initConsolePrefix() resolves.
|
|
51
|
+
*/
|
|
52
|
+
export function droneIdPrefix() {
|
|
53
|
+
if (cachedPrefix !== null)
|
|
54
|
+
return cachedPrefix;
|
|
55
|
+
return `[unassimilated · ${basename(process.cwd())}]`;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Prefix + trailing space, styled dim/gray so the prefix is metadata
|
|
59
|
+
* and the message body retains visual emphasis. Use as
|
|
60
|
+
* `${consolePrefix()}<message>`.
|
|
61
|
+
*/
|
|
62
|
+
export function consolePrefix() {
|
|
63
|
+
return chalk.gray(droneIdPrefix()) + ' ';
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Drop-in replacement for `console.error` that prepends the drone
|
|
67
|
+
* self-id prefix. If the first arg is a string, the prefix is
|
|
68
|
+
* concatenated to it; otherwise the prefix is emitted as its own arg
|
|
69
|
+
* (handles the `console.error('label:', value)` shape).
|
|
70
|
+
*/
|
|
71
|
+
export function cerr(...args) {
|
|
72
|
+
if (args.length === 0) {
|
|
73
|
+
console.error(consolePrefix());
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (typeof args[0] === 'string') {
|
|
77
|
+
console.error(consolePrefix() + args[0], ...args.slice(1));
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.error(consolePrefix(), ...args);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export function _resetCachedPrefixForTests() {
|
|
84
|
+
cachedPrefix = null;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=console-prefix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-prefix.js","sourceRoot":"","sources":["../src/console-prefix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,IAAI,YAAY,GAAkB,IAAI,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO,YAAY,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;QACrC,IAAI,MAAM,EAAE,UAAU,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;YACvC,YAAY,GAAG,IAAI,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,IAAI,GAAG,CAAC;YACzD,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IACD,YAAY,GAAG,oBAAoB,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;IAC9D,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO,YAAY,CAAC;IAC/C,OAAO,oBAAoB,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,GAAG,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,IAAI,CAAC,GAAG,IAAW;IACjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* borg-inbox-monitor — per-entry pretty-printer for borgmcp inbox files.
|
|
4
|
+
*
|
|
5
|
+
* Per gh#8: Claude Code's task-notification title is the Monitor's
|
|
6
|
+
* `description`, set once at arm-time. When the Monitor command is
|
|
7
|
+
* `tail -F <inbox>`, every event's notification title is the same
|
|
8
|
+
* static "Monitor event: ..." string regardless of which drone posted
|
|
9
|
+
* what. Recipients have to read the body to triage.
|
|
10
|
+
*
|
|
11
|
+
* Replacement: tail the inbox file and emit one stdout line per cube
|
|
12
|
+
* log entry, summarizing drone label + role + first ~80 chars of the
|
|
13
|
+
* message body. Claude Code's Monitor batching then uses that single
|
|
14
|
+
* line as the per-event task-notification title.
|
|
15
|
+
*
|
|
16
|
+
* Inbox file format (per client/src/log-stream.ts formatInboxLine):
|
|
17
|
+
* <iso-ts> <drone-label> (<role-name>): <message>
|
|
18
|
+
*
|
|
19
|
+
* Multi-line messages are appended as a single fs.appendFile() call
|
|
20
|
+
* with embedded `\n` characters, so they become multiple physical
|
|
21
|
+
* lines in the file. Continuation lines (those that don't start with
|
|
22
|
+
* an ISO-8601 timestamp) are dropped — only the first line of each
|
|
23
|
+
* entry surfaces, which is the part that summarizes the entry.
|
|
24
|
+
*
|
|
25
|
+
* Usage:
|
|
26
|
+
* borg-inbox-monitor <inbox-file-path>
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* Pure: parse one inbox-file line and produce the pretty summary line
|
|
30
|
+
* (or null if the line is a continuation or unrecognized shape).
|
|
31
|
+
* Exported so tests can exercise the parsing without spawning tail.
|
|
32
|
+
*/
|
|
33
|
+
export declare function formatEventLine(inboxLine: string): string | null;
|
|
34
|
+
//# sourceMappingURL=inbox-monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox-monitor.d.ts","sourceRoot":"","sources":["../src/inbox-monitor.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAWH;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUhE"}
|