borgmcp 0.2.0-beta.8 → 0.3.0
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 +2 -2
- package/dist/auth.js +5 -5
- package/dist/auth.js.map +1 -1
- package/dist/claude.d.ts +9 -4
- package/dist/claude.d.ts.map +1 -1
- package/dist/claude.js +62 -26
- package/dist/claude.js.map +1 -1
- package/dist/config-utils.d.ts +32 -0
- package/dist/config-utils.d.ts.map +1 -1
- package/dist/config-utils.js +159 -0
- package/dist/config-utils.js.map +1 -1
- package/dist/cubes.d.ts +51 -0
- package/dist/cubes.d.ts.map +1 -0
- package/dist/cubes.js +161 -0
- package/dist/cubes.js.map +1 -0
- package/dist/inbox.d.ts +33 -0
- package/dist/inbox.d.ts.map +1 -0
- package/dist/inbox.js +125 -0
- package/dist/inbox.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +353 -25
- package/dist/index.js.map +1 -1
- package/dist/log-audit.d.ts +27 -0
- package/dist/log-audit.d.ts.map +1 -0
- package/dist/log-audit.js +161 -0
- package/dist/log-audit.js.map +1 -0
- package/dist/postinstall.d.ts +1 -1
- package/dist/postinstall.d.ts.map +1 -1
- package/dist/postinstall.js +4 -4
- package/dist/postinstall.js.map +1 -1
- package/dist/regen-format.d.ts +53 -0
- package/dist/regen-format.d.ts.map +1 -0
- package/dist/regen-format.js +164 -0
- package/dist/regen-format.js.map +1 -0
- package/dist/regen.d.ts +19 -0
- package/dist/regen.d.ts.map +1 -0
- package/dist/regen.js +35 -0
- package/dist/regen.js.map +1 -0
- package/dist/remote-client.d.ts +107 -2
- package/dist/remote-client.d.ts.map +1 -1
- package/dist/remote-client.js +141 -11
- package/dist/remote-client.js.map +1 -1
- package/dist/setup.js +43 -36
- package/dist/setup.js.map +1 -1
- package/dist/sync.js +1 -1
- package/dist/sync.js.map +1 -1
- package/package.json +6 -5
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ Local MCP client that syncs your `~/.claude/CLAUDE.md` file to the Borg MCP clou
|
|
|
16
16
|
2. **Google OAuth Credentials** (required for authentication)
|
|
17
17
|
- Client ID
|
|
18
18
|
- Client Secret
|
|
19
|
-
3. **Borg MCP Subscription** ($
|
|
19
|
+
3. **Borg MCP Subscription** ($1/month with 7-day trial)
|
|
20
20
|
|
|
21
21
|
## Installation
|
|
22
22
|
|
|
@@ -141,7 +141,7 @@ Delete the .conflict file once resolved.
|
|
|
141
141
|
|
|
142
142
|
Once configured, these tools are available in Claude Code:
|
|
143
143
|
|
|
144
|
-
- **subscribe**: Create Stripe checkout session for $
|
|
144
|
+
- **subscribe**: Create Stripe checkout session for $1/month (7-day free trial)
|
|
145
145
|
- **get_claude_md**: Manually fetch CLAUDE.md from cloud
|
|
146
146
|
- **set_claude_md**: Manually upload CLAUDE.md to cloud
|
|
147
147
|
- **delete_claude_md**: Delete CLAUDE.md from cloud
|
package/dist/auth.js
CHANGED
|
@@ -79,7 +79,7 @@ async function startCallbackServer() {
|
|
|
79
79
|
res.end(`
|
|
80
80
|
<html>
|
|
81
81
|
<body>
|
|
82
|
-
<h1
|
|
82
|
+
<h1>◼ Authentication Failed</h1>
|
|
83
83
|
<p>Error: ${error}</p>
|
|
84
84
|
<p>You can close this window.</p>
|
|
85
85
|
</body>
|
|
@@ -94,7 +94,7 @@ async function startCallbackServer() {
|
|
|
94
94
|
res.end(`
|
|
95
95
|
<html>
|
|
96
96
|
<body>
|
|
97
|
-
<h1
|
|
97
|
+
<h1>◼ Authentication Successful!</h1>
|
|
98
98
|
<p>You can close this window and return to your terminal.</p>
|
|
99
99
|
</body>
|
|
100
100
|
</html>
|
|
@@ -107,7 +107,7 @@ async function startCallbackServer() {
|
|
|
107
107
|
res.end(`
|
|
108
108
|
<html>
|
|
109
109
|
<body>
|
|
110
|
-
<h1
|
|
110
|
+
<h1>◼ Invalid Request</h1>
|
|
111
111
|
<p>Missing authorization code.</p>
|
|
112
112
|
</body>
|
|
113
113
|
</html>
|
|
@@ -158,7 +158,7 @@ async function exchangeCodeForTokens(code, codeVerifier, port) {
|
|
|
158
158
|
* Stores tokens in OS keychain on success
|
|
159
159
|
*/
|
|
160
160
|
export async function authenticateWithGoogle() {
|
|
161
|
-
console.error('\\n
|
|
161
|
+
console.error('\\n◼ Borg MCP Authentication');
|
|
162
162
|
console.error('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n');
|
|
163
163
|
// Step 1: Generate PKCE pair
|
|
164
164
|
console.error('Generating PKCE challenge...');
|
|
@@ -194,7 +194,7 @@ export async function authenticateWithGoogle() {
|
|
|
194
194
|
if (tokenData.refresh_token) {
|
|
195
195
|
await storeRefreshToken(tokenData.refresh_token);
|
|
196
196
|
}
|
|
197
|
-
console.error('\\n
|
|
197
|
+
console.error('\\n◼ Authentication successful!\\n');
|
|
198
198
|
}
|
|
199
199
|
/**
|
|
200
200
|
* Refresh ID token using refresh token
|
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,MAAM,aAAa,CAAC;AAE9D,iEAAiE;AACjE,uFAAuF;AACvF,mGAAmG;AACnG,MAAM,gBAAgB,GAAG,0EAA0E,CAAC;AACpG,MAAM,oBAAoB,GAAG,qCAAqC,CAAC;AAEnE,MAAM,oBAAoB,GAAG,8CAA8C,CAAC;AAC5E,MAAM,gBAAgB,GAAG,qCAAqC,CAAC;AAC/D,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAE9C,oDAAoD;AACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,cAAc,GAAG,IAAI,CAAC;AAc5B;;;GAGG;AACH,SAAS,YAAY;IACnB,oDAAoD;IACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE9D,6DAA6D;IAC7D,MAAM,SAAS,GAAG,MAAM;SACrB,UAAU,CAAC,QAAQ,CAAC;SACpB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,yDAAyD;QACzD,MAAM,UAAU,GAAG,YAAY,EAAE,CAAC;QAClC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE;YACxB,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;gBAC1B,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,mBAAmB;IAIhC,4BAA4B;IAC5B,MAAM,IAAI,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAEvC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAoB,EAAE,GAAmB,EAAE,EAAE;YACxE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAI,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAE1D,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAE5C,IAAI,KAAK,EAAE,CAAC;oBACV,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC;;;;4BAIU,KAAK;;;;WAItB,CAAC,CAAC;oBACH,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC3C,OAAO;gBACT,CAAC;gBAED,IAAI,IAAI,EAAE,CAAC;oBACT,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC;;;;;;;WAOP,CAAC,CAAC;oBACH,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,CAAC;oBACd,OAAO;gBACT,CAAC;gBAED,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC;;;;;;;SAOP,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YACvB,OAAO,CAAC,KAAK,CAAC,iDAAiD,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC;QACrE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAClC,IAAY,EACZ,YAAoB,EACpB,IAAY;IAEZ,MAAM,WAAW,GAAG,oBAAoB,IAAI,WAAW,CAAC;IAExD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE;QAC7C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,mCAAmC;SACpD;QACD,IAAI,EAAE,IAAI,eAAe,CAAC;YACxB,SAAS,EAAE,gBAAgB;YAC3B,aAAa,EAAE,oBAAoB;YACnC,IAAI;YACJ,aAAa,EAAE,YAAY;YAC3B,UAAU,EAAE,oBAAoB;YAChC,YAAY,EAAE,WAAW;SAC1B,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkB,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,OAAO,CAAC,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/claude.d.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Borg CLI
|
|
3
|
+
* Borg CLI launcher
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* Spawns Claude Code with a minimal kickoff prompt so the SessionStart
|
|
6
|
+
* hook's injected drone playbook actually fires on the first turn.
|
|
7
|
+
* Without this, Claude sits waiting for user input and the autonomous
|
|
8
|
+
* "look at the log and act" directive never executes.
|
|
9
|
+
*
|
|
10
|
+
* Commands:
|
|
11
|
+
* borg → Launch Claude with kickoff prompt
|
|
12
|
+
* borg setup → Re-route to the setup wizard
|
|
8
13
|
*/
|
|
9
14
|
export {};
|
|
10
15
|
//# sourceMappingURL=claude.d.ts.map
|
package/dist/claude.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
|
package/dist/claude.js
CHANGED
|
@@ -1,50 +1,86 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Borg CLI
|
|
3
|
+
* Borg CLI launcher
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* Spawns Claude Code with a minimal kickoff prompt so the SessionStart
|
|
6
|
+
* hook's injected drone playbook actually fires on the first turn.
|
|
7
|
+
* Without this, Claude sits waiting for user input and the autonomous
|
|
8
|
+
* "look at the log and act" directive never executes.
|
|
9
|
+
*
|
|
10
|
+
* Commands:
|
|
11
|
+
* borg → Launch Claude with kickoff prompt
|
|
12
|
+
* borg setup → Re-route to the setup wizard
|
|
8
13
|
*/
|
|
9
14
|
import { spawn } from 'child_process';
|
|
10
|
-
import { isAuthenticated } from './config.js';
|
|
11
15
|
import chalk from 'chalk';
|
|
16
|
+
import { getActiveCube, inboxPathForDrone } from './cubes.js';
|
|
12
17
|
async function main() {
|
|
13
|
-
//
|
|
18
|
+
// Re-route subcommands.
|
|
14
19
|
if (process.argv[2] === 'setup') {
|
|
15
|
-
// Import and run setup wizard
|
|
16
20
|
await import('./setup.js');
|
|
17
21
|
return;
|
|
18
22
|
}
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
// Forward any user-supplied flags (e.g. --resume <id>, --cwd, etc.) to
|
|
24
|
+
// claude unchanged, except for --autonomous which we intercept and
|
|
25
|
+
// translate into BORG_MODE=autonomous on the spawned env.
|
|
26
|
+
//
|
|
27
|
+
// The kickoff prompt goes at the end as the positional user-message
|
|
28
|
+
// argument so the SessionStart hook + drone playbook get a turn to
|
|
29
|
+
// execute on session start. Works for fresh sessions and resumed ones.
|
|
30
|
+
//
|
|
31
|
+
// The /loop wrapper (dynamic mode — no fixed interval) lets Claude
|
|
32
|
+
// self-pace iterations. We instruct it to arm a persistent Monitor on
|
|
33
|
+
// the inbox file so it wakes the moment another drone posts to the
|
|
34
|
+
// cube (the MCP client appends a line to that file in real time via
|
|
35
|
+
// the long-poll poller). A 30-min ScheduleWakeup heartbeat acts as a
|
|
36
|
+
// safety net so the loop never goes silent.
|
|
37
|
+
const argv = process.argv.slice(2);
|
|
38
|
+
const isAutonomous = argv.includes('--autonomous');
|
|
39
|
+
const mode = isAutonomous ? 'autonomous' : 'supervised';
|
|
40
|
+
const passthroughArgs = argv.filter((arg) => arg !== '--autonomous');
|
|
41
|
+
// Only include the Monitor instruction if this project is already
|
|
42
|
+
// assimilated to a cube — without one we don't know which inbox file
|
|
43
|
+
// to watch, and arming a Monitor on a not-yet-relevant path produces
|
|
44
|
+
// no signal. The user can assimilate and relaunch to engage real-time
|
|
45
|
+
// wake; the /loop heartbeat alone covers the meantime.
|
|
46
|
+
const active = await getActiveCube();
|
|
47
|
+
const monitorClause = active
|
|
48
|
+
? `If you haven't yet, arm a persistent Monitor that watches the file ${inboxPathForDrone(active.cubeId, active.droneId)} ` +
|
|
49
|
+
`for new lines so you wake immediately when other drones post to the cube. `
|
|
50
|
+
: '';
|
|
51
|
+
const kickoff = `/loop Call borg:regen and follow the playbook in its response. ` +
|
|
52
|
+
monitorClause +
|
|
53
|
+
`Use a 30-minute (1800s) fallback heartbeat for ScheduleWakeup.`;
|
|
54
|
+
console.error(chalk.blue(`◼ Launching Claude Code [${mode}]…`));
|
|
55
|
+
const spawnEnv = { ...process.env };
|
|
56
|
+
if (isAutonomous) {
|
|
57
|
+
spawnEnv.BORG_MODE = 'autonomous';
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
delete spawnEnv.BORG_MODE;
|
|
28
61
|
}
|
|
29
|
-
|
|
30
|
-
const instruction = "\"You are using Borg MCP for centralized context management. Run borg:regen on startup.\"";
|
|
31
|
-
console.error(chalk.blue('🧠 Launching Claude Code with Borg MCP...'));
|
|
32
|
-
const claudeProcess = spawn('claude', [instruction], {
|
|
62
|
+
const claudeProcess = spawn('claude', [...passthroughArgs, kickoff], {
|
|
33
63
|
stdio: 'inherit',
|
|
34
|
-
shell:
|
|
64
|
+
shell: false,
|
|
65
|
+
env: spawnEnv,
|
|
35
66
|
});
|
|
36
67
|
claudeProcess.on('error', (err) => {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
68
|
+
if (err.code === 'ENOENT') {
|
|
69
|
+
console.error(chalk.red('\n◼ Failed to launch Claude Code'));
|
|
70
|
+
console.error(chalk.gray('Make sure Claude Code is installed:'));
|
|
71
|
+
console.error(chalk.gray(' https://claude.ai/download\n'));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
console.error(chalk.red(`\n◼ Failed to launch Claude Code: ${err.message}\n`));
|
|
75
|
+
}
|
|
40
76
|
process.exit(1);
|
|
41
77
|
});
|
|
42
78
|
claudeProcess.on('exit', (code) => {
|
|
43
|
-
process.exit(code
|
|
79
|
+
process.exit(code ?? 0);
|
|
44
80
|
});
|
|
45
81
|
}
|
|
46
82
|
main().catch((error) => {
|
|
47
|
-
console.error(chalk.red(`\n
|
|
83
|
+
console.error(chalk.red(`\n◼ Error: ${error.message}\n`));
|
|
48
84
|
process.exit(1);
|
|
49
85
|
});
|
|
50
86
|
//# 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
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/config-utils.d.ts
CHANGED
|
@@ -3,6 +3,38 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Handles adding borg-mcp to Claude Code via the claude CLI
|
|
5
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* Register a Claude Code SessionStart hook that runs `borg-regen` at the
|
|
8
|
+
* start of every session. Idempotent: re-running won't add duplicates.
|
|
9
|
+
*
|
|
10
|
+
* Returns true if a change was made, false otherwise (already present, or
|
|
11
|
+
* settings.json could not be parsed).
|
|
12
|
+
*/
|
|
13
|
+
export declare function addSessionStartHook(): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Inverse of addSessionStartHook: remove any SessionStart hook entry whose
|
|
16
|
+
* inner hooks array contains a `borg-regen` command. If multiple commands
|
|
17
|
+
* share an entry, only the borg-regen command is removed; otherwise the
|
|
18
|
+
* entire entry is dropped. Empty containers are cleaned up.
|
|
19
|
+
*
|
|
20
|
+
* Returns true if a change was made, false otherwise.
|
|
21
|
+
*/
|
|
22
|
+
export declare function removeSessionStartHook(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Register a Claude Code UserPromptSubmit hook that runs `borg-log-audit`
|
|
25
|
+
* before each user prompt. The audit script nudges the drone if the
|
|
26
|
+
* previous assistant span used state-changing tools without calling
|
|
27
|
+
* `borg:log`. Idempotent: re-running won't add duplicates.
|
|
28
|
+
*
|
|
29
|
+
* Returns true if a change was made, false otherwise.
|
|
30
|
+
*/
|
|
31
|
+
export declare function addUserPromptSubmitHook(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Inverse of addUserPromptSubmitHook: remove any UserPromptSubmit hook
|
|
34
|
+
* entry that runs `borg-log-audit`. Symmetric cleanup to
|
|
35
|
+
* removeSessionStartHook.
|
|
36
|
+
*/
|
|
37
|
+
export declare function removeUserPromptSubmitHook(): boolean;
|
|
6
38
|
/**
|
|
7
39
|
* Get absolute path to borg index.js
|
|
8
40
|
* 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;AAkCH;;;;;;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;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAyBnC"}
|
package/dist/config-utils.js
CHANGED
|
@@ -4,12 +4,171 @@
|
|
|
4
4
|
* Handles adding borg-mcp to Claude Code via the claude CLI
|
|
5
5
|
*/
|
|
6
6
|
import { execSync } from 'child_process';
|
|
7
|
+
import fs from 'fs';
|
|
8
|
+
import os from 'os';
|
|
7
9
|
import path from 'path';
|
|
8
10
|
import { fileURLToPath } from 'url';
|
|
9
11
|
import { dirname } from 'path';
|
|
10
12
|
// Get __dirname equivalent in ESM
|
|
11
13
|
const __filename = fileURLToPath(import.meta.url);
|
|
12
14
|
const __dirname = dirname(__filename);
|
|
15
|
+
const HOOK_COMMAND = 'borg-regen';
|
|
16
|
+
const AUDIT_HOOK_COMMAND = 'borg-log-audit';
|
|
17
|
+
function settingsPath() {
|
|
18
|
+
return path.join(os.homedir(), '.claude', 'settings.json');
|
|
19
|
+
}
|
|
20
|
+
function readSettings() {
|
|
21
|
+
const p = settingsPath();
|
|
22
|
+
if (!fs.existsSync(p))
|
|
23
|
+
return {};
|
|
24
|
+
const text = fs.readFileSync(p, 'utf-8');
|
|
25
|
+
if (!text.trim())
|
|
26
|
+
return {};
|
|
27
|
+
return JSON.parse(text);
|
|
28
|
+
}
|
|
29
|
+
function writeSettings(settings) {
|
|
30
|
+
const p = settingsPath();
|
|
31
|
+
fs.mkdirSync(path.dirname(p), { recursive: true });
|
|
32
|
+
fs.writeFileSync(p, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Register a Claude Code SessionStart hook that runs `borg-regen` at the
|
|
36
|
+
* start of every session. Idempotent: re-running won't add duplicates.
|
|
37
|
+
*
|
|
38
|
+
* Returns true if a change was made, false otherwise (already present, or
|
|
39
|
+
* settings.json could not be parsed).
|
|
40
|
+
*/
|
|
41
|
+
export function addSessionStartHook() {
|
|
42
|
+
let settings;
|
|
43
|
+
try {
|
|
44
|
+
settings = readSettings();
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
console.error(`⚠ Could not parse ${settingsPath()}: ${err.message}. Skipping hook registration; you can add it manually.`);
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
settings.hooks ??= {};
|
|
51
|
+
settings.hooks.SessionStart ??= [];
|
|
52
|
+
const alreadyPresent = settings.hooks.SessionStart.some((entry) => Array.isArray(entry?.hooks) &&
|
|
53
|
+
entry.hooks.some((h) => h?.type === 'command' && h?.command === HOOK_COMMAND));
|
|
54
|
+
if (alreadyPresent)
|
|
55
|
+
return false;
|
|
56
|
+
settings.hooks.SessionStart.push({
|
|
57
|
+
matcher: '*',
|
|
58
|
+
hooks: [{ type: 'command', command: HOOK_COMMAND }],
|
|
59
|
+
});
|
|
60
|
+
writeSettings(settings);
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Inverse of addSessionStartHook: remove any SessionStart hook entry whose
|
|
65
|
+
* inner hooks array contains a `borg-regen` command. If multiple commands
|
|
66
|
+
* share an entry, only the borg-regen command is removed; otherwise the
|
|
67
|
+
* entire entry is dropped. Empty containers are cleaned up.
|
|
68
|
+
*
|
|
69
|
+
* Returns true if a change was made, false otherwise.
|
|
70
|
+
*/
|
|
71
|
+
export function removeSessionStartHook() {
|
|
72
|
+
let settings;
|
|
73
|
+
try {
|
|
74
|
+
settings = readSettings();
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
if (!settings?.hooks?.SessionStart)
|
|
80
|
+
return false;
|
|
81
|
+
let changed = false;
|
|
82
|
+
settings.hooks.SessionStart = settings.hooks.SessionStart
|
|
83
|
+
.map((entry) => {
|
|
84
|
+
if (!Array.isArray(entry?.hooks))
|
|
85
|
+
return entry;
|
|
86
|
+
const filtered = entry.hooks.filter((h) => !(h?.type === 'command' && h?.command === HOOK_COMMAND));
|
|
87
|
+
if (filtered.length !== entry.hooks.length) {
|
|
88
|
+
changed = true;
|
|
89
|
+
return { ...entry, hooks: filtered };
|
|
90
|
+
}
|
|
91
|
+
return entry;
|
|
92
|
+
})
|
|
93
|
+
.filter((entry) => Array.isArray(entry?.hooks) && entry.hooks.length > 0);
|
|
94
|
+
if (settings.hooks.SessionStart.length === 0) {
|
|
95
|
+
delete settings.hooks.SessionStart;
|
|
96
|
+
}
|
|
97
|
+
if (Object.keys(settings.hooks).length === 0) {
|
|
98
|
+
delete settings.hooks;
|
|
99
|
+
}
|
|
100
|
+
if (changed)
|
|
101
|
+
writeSettings(settings);
|
|
102
|
+
return changed;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Register a Claude Code UserPromptSubmit hook that runs `borg-log-audit`
|
|
106
|
+
* before each user prompt. The audit script nudges the drone if the
|
|
107
|
+
* previous assistant span used state-changing tools without calling
|
|
108
|
+
* `borg:log`. Idempotent: re-running won't add duplicates.
|
|
109
|
+
*
|
|
110
|
+
* Returns true if a change was made, false otherwise.
|
|
111
|
+
*/
|
|
112
|
+
export function addUserPromptSubmitHook() {
|
|
113
|
+
let settings;
|
|
114
|
+
try {
|
|
115
|
+
settings = readSettings();
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
console.error(`⚠ Could not parse ${settingsPath()}: ${err.message}. Skipping audit hook registration.`);
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
settings.hooks ??= {};
|
|
122
|
+
settings.hooks.UserPromptSubmit ??= [];
|
|
123
|
+
const alreadyPresent = settings.hooks.UserPromptSubmit.some((entry) => Array.isArray(entry?.hooks) &&
|
|
124
|
+
entry.hooks.some((h) => h?.type === 'command' && h?.command === AUDIT_HOOK_COMMAND));
|
|
125
|
+
if (alreadyPresent)
|
|
126
|
+
return false;
|
|
127
|
+
settings.hooks.UserPromptSubmit.push({
|
|
128
|
+
matcher: '*',
|
|
129
|
+
hooks: [{ type: 'command', command: AUDIT_HOOK_COMMAND }],
|
|
130
|
+
});
|
|
131
|
+
writeSettings(settings);
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Inverse of addUserPromptSubmitHook: remove any UserPromptSubmit hook
|
|
136
|
+
* entry that runs `borg-log-audit`. Symmetric cleanup to
|
|
137
|
+
* removeSessionStartHook.
|
|
138
|
+
*/
|
|
139
|
+
export function removeUserPromptSubmitHook() {
|
|
140
|
+
let settings;
|
|
141
|
+
try {
|
|
142
|
+
settings = readSettings();
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
if (!settings?.hooks?.UserPromptSubmit)
|
|
148
|
+
return false;
|
|
149
|
+
let changed = false;
|
|
150
|
+
settings.hooks.UserPromptSubmit = settings.hooks.UserPromptSubmit
|
|
151
|
+
.map((entry) => {
|
|
152
|
+
if (!Array.isArray(entry?.hooks))
|
|
153
|
+
return entry;
|
|
154
|
+
const filtered = entry.hooks.filter((h) => !(h?.type === 'command' && h?.command === AUDIT_HOOK_COMMAND));
|
|
155
|
+
if (filtered.length !== entry.hooks.length) {
|
|
156
|
+
changed = true;
|
|
157
|
+
return { ...entry, hooks: filtered };
|
|
158
|
+
}
|
|
159
|
+
return entry;
|
|
160
|
+
})
|
|
161
|
+
.filter((entry) => Array.isArray(entry?.hooks) && entry.hooks.length > 0);
|
|
162
|
+
if (settings.hooks.UserPromptSubmit.length === 0) {
|
|
163
|
+
delete settings.hooks.UserPromptSubmit;
|
|
164
|
+
}
|
|
165
|
+
if (Object.keys(settings.hooks).length === 0) {
|
|
166
|
+
delete settings.hooks;
|
|
167
|
+
}
|
|
168
|
+
if (changed)
|
|
169
|
+
writeSettings(settings);
|
|
170
|
+
return changed;
|
|
171
|
+
}
|
|
13
172
|
/**
|
|
14
173
|
* Get absolute path to borg index.js
|
|
15
174
|
* 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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,kCAAkC;AAClC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,qEAAqE;IACrE,uBAAuB;IACvB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,6EAA6E;QAC7E,IAAI,CAAC;YACH,QAAQ,CAAC,qCAAqC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;QAED,6EAA6E;QAC7E,MAAM,OAAO,GAAG,2CAA2C,CAAC;QAE5D,QAAQ,CAAC,OAAO,EAAE;YAChB,KAAK,EAAE,SAAS,EAAE,sBAAsB;YACxC,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,wBAAwB;aACnE;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"config-utils.js","sourceRoot":"","sources":["../src/config-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/cubes.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-project active-cube persistence for Borg MCP client
|
|
3
|
+
*
|
|
4
|
+
* Stores the currently-assimilated cube (name + drone session token + drone
|
|
5
|
+
* label + apiUrl) PER PROJECT in ~/.config/borgmcp/cubes.json. The "project"
|
|
6
|
+
* is identified by walking up from cwd to find a .git directory; if none is
|
|
7
|
+
* found, cwd itself is used as the project key.
|
|
8
|
+
*
|
|
9
|
+
* The session token is a bearer credential for drone-scoped REST endpoints,
|
|
10
|
+
* but it is not as sensitive as the OAuth tokens (which still live in the
|
|
11
|
+
* OS keychain via config.ts) — it only authorizes access within the cube
|
|
12
|
+
* the user has already been admitted to.
|
|
13
|
+
*
|
|
14
|
+
* apiUrl is captured at assimilate time so subprocess invocations (e.g. the
|
|
15
|
+
* SessionStart hook firing borg-regen) don't need BORG_API_URL in their env
|
|
16
|
+
* to know which worker to talk to.
|
|
17
|
+
*/
|
|
18
|
+
export interface ActiveCube {
|
|
19
|
+
cubeId: string;
|
|
20
|
+
droneId: string;
|
|
21
|
+
name: string;
|
|
22
|
+
sessionToken: string;
|
|
23
|
+
droneLabel: string;
|
|
24
|
+
apiUrl: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Walk up from cwd looking for a .git directory. If found, return that
|
|
28
|
+
* directory. If not found by filesystem root, return the original cwd.
|
|
29
|
+
* The returned absolute path is the "project key" used to scope cube state.
|
|
30
|
+
*/
|
|
31
|
+
export declare function findProjectRoot(cwd?: string): string;
|
|
32
|
+
export declare function inboxPathForDrone(cubeId: string, droneId: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Get the currently-active cube for the current project, or null if not
|
|
35
|
+
* assimilated in this project. Entries written by older client versions
|
|
36
|
+
* that lack the `cubeId` field are treated as absent — re-assimilate to
|
|
37
|
+
* refresh.
|
|
38
|
+
*/
|
|
39
|
+
export declare function getActiveCube(): Promise<ActiveCube | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Set the active cube for the current project. Preserves entries for all
|
|
42
|
+
* other projects.
|
|
43
|
+
*/
|
|
44
|
+
export declare function setActiveCube(active: ActiveCube): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Clear the active cube for the current project. If the projects map
|
|
47
|
+
* becomes empty as a result, remove the file entirely rather than leave
|
|
48
|
+
* an empty {projects:{}} skeleton.
|
|
49
|
+
*/
|
|
50
|
+
export declare function clearActiveCube(): Promise<void>;
|
|
51
|
+
//# sourceMappingURL=cubes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cubes.d.ts","sourceRoot":"","sources":["../src/cubes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAWH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAQnE;AAiBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIzE;AAkDD;;;;;GAKG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAQhE;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrE;AAED;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAerD"}
|