borgmcp 0.2.0-beta.9 → 0.4.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 +701 -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 +59 -0
- package/dist/regen-format.d.ts.map +1 -0
- package/dist/regen-format.js +172 -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 +36 -0
- package/dist/regen.js.map +1 -0
- package/dist/remote-client.d.ts +186 -2
- package/dist/remote-client.d.ts.map +1 -1
- package/dist/remote-client.js +232 -11
- package/dist/remote-client.js.map +1 -1
- package/dist/setup.js +40 -33
- package/dist/setup.js.map +1 -1
- package/dist/sync.js +1 -1
- package/dist/sync.js.map +1 -1
- package/dist/templates.d.ts +33 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +96 -0
- package/dist/templates.js.map +1 -0
- package/package.json +11 -10
package/dist/setup.js
CHANGED
|
@@ -13,14 +13,13 @@ import open from 'open';
|
|
|
13
13
|
import which from 'which';
|
|
14
14
|
import { authenticateWithGoogle } from './auth.js';
|
|
15
15
|
import { checkSubscriptionStatus, createSubscription } from './remote-client.js';
|
|
16
|
-
import { addMcpServer } from './config-utils.js';
|
|
16
|
+
import { addMcpServer, addSessionStartHook } from './config-utils.js';
|
|
17
17
|
import { isAuthenticated } from './config.js';
|
|
18
18
|
/**
|
|
19
19
|
* Main setup wizard
|
|
20
20
|
*/
|
|
21
21
|
async function main() {
|
|
22
|
-
console.log(chalk.blue.bold('\n
|
|
23
|
-
console.log(chalk.blue('━'.repeat(40)) + '\n');
|
|
22
|
+
console.log(chalk.blue.bold('\n◼ Borg MCP Setup Wizard ◼'));
|
|
24
23
|
// Step 0: Check if Claude CLI exists
|
|
25
24
|
let claudeCliPath;
|
|
26
25
|
try {
|
|
@@ -28,13 +27,13 @@ async function main() {
|
|
|
28
27
|
console.log(chalk.gray(`Found Claude CLI: ${claudeCliPath}\n`));
|
|
29
28
|
}
|
|
30
29
|
catch (error) {
|
|
31
|
-
console.error(chalk.red('
|
|
30
|
+
console.error(chalk.red('◼ Claude CLI not found\n'));
|
|
32
31
|
console.error(chalk.yellow('Please install Claude Code first:'));
|
|
33
32
|
console.error(chalk.gray(' https://claude.ai/download\n'));
|
|
34
33
|
process.exit(1);
|
|
35
34
|
}
|
|
36
35
|
// Step 1: MCP Configuration
|
|
37
|
-
console.log(chalk.blue('
|
|
36
|
+
console.log(chalk.blue('◼ MCP Server Configuration'));
|
|
38
37
|
const { confirmConfig } = await prompts({
|
|
39
38
|
type: 'confirm',
|
|
40
39
|
name: 'confirmConfig',
|
|
@@ -42,67 +41,74 @@ async function main() {
|
|
|
42
41
|
initial: true
|
|
43
42
|
});
|
|
44
43
|
if (!confirmConfig) {
|
|
45
|
-
console.log(chalk.red('\n
|
|
44
|
+
console.log(chalk.red('\n◼ Setup cancelled\n'));
|
|
46
45
|
process.exit(0);
|
|
47
46
|
}
|
|
48
47
|
try {
|
|
49
48
|
addMcpServer();
|
|
50
|
-
console.log(chalk.green('
|
|
49
|
+
console.log(chalk.green('◼ borg added to Claude Code'));
|
|
51
50
|
}
|
|
52
51
|
catch (error) {
|
|
53
|
-
console.error(chalk.red(`\n
|
|
52
|
+
console.error(chalk.red(`\n◼ Failed to add MCP server: ${error.message}\n`));
|
|
54
53
|
process.exit(1);
|
|
55
54
|
}
|
|
55
|
+
const hookAdded = addSessionStartHook();
|
|
56
|
+
if (hookAdded) {
|
|
57
|
+
console.log(chalk.green('◼ Registered SessionStart hook (borg-regen on session start)\n'));
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
console.log(chalk.gray('◼ SessionStart hook already registered (or settings could not be parsed)\n'));
|
|
61
|
+
}
|
|
56
62
|
// Step 2: Authentication
|
|
57
|
-
console.log(chalk.blue('
|
|
63
|
+
console.log(chalk.blue('◼ Google Authentication'));
|
|
58
64
|
const authed = await isAuthenticated();
|
|
59
65
|
if (!authed) {
|
|
60
66
|
try {
|
|
61
67
|
await authenticateWithGoogle();
|
|
62
68
|
}
|
|
63
69
|
catch (error) {
|
|
64
|
-
console.error(chalk.red(`\n
|
|
70
|
+
console.error(chalk.red(`\n◼ Authentication failed: ${error.message}\n`));
|
|
65
71
|
process.exit(1);
|
|
66
72
|
}
|
|
67
73
|
}
|
|
68
74
|
else {
|
|
69
|
-
console.log(chalk.green('
|
|
75
|
+
console.log(chalk.green('◼ Already authenticated\n'));
|
|
70
76
|
}
|
|
71
77
|
// Step 3: Subscription
|
|
72
|
-
console.log(chalk.blue('
|
|
78
|
+
console.log(chalk.blue('◼ Subscription Check'));
|
|
73
79
|
let status;
|
|
74
80
|
try {
|
|
75
81
|
status = await checkSubscriptionStatus();
|
|
76
82
|
}
|
|
77
83
|
catch (error) {
|
|
78
|
-
console.error(chalk.red(`\n
|
|
84
|
+
console.error(chalk.red(`\n◼ Failed to check subscription: ${error.message}\n`));
|
|
79
85
|
process.exit(1);
|
|
80
86
|
}
|
|
81
87
|
if (!status.hasAccess) {
|
|
82
|
-
console.log(chalk.yellow('
|
|
83
|
-
console.log(chalk.gray('
|
|
88
|
+
console.log(chalk.yellow('◼ No active subscription found'));
|
|
89
|
+
console.log(chalk.gray('◼ $1/month with 7-day free trial\n'));
|
|
84
90
|
const { subscribeMethod } = await prompts({
|
|
85
91
|
type: 'select',
|
|
86
92
|
name: 'subscribeMethod',
|
|
87
93
|
message: 'How would you like to subscribe?',
|
|
88
94
|
choices: [
|
|
89
95
|
{
|
|
90
|
-
title: '
|
|
96
|
+
title: '◼ Open web dashboard (recommended)',
|
|
91
97
|
value: 'web',
|
|
92
98
|
description: 'Full onboarding experience with features & pricing'
|
|
93
99
|
},
|
|
94
100
|
{
|
|
95
|
-
title: '
|
|
101
|
+
title: '◼ Quick Stripe checkout',
|
|
96
102
|
value: 'stripe',
|
|
97
103
|
description: 'Fast checkout in browser'
|
|
98
104
|
},
|
|
99
105
|
{
|
|
100
|
-
title: '
|
|
106
|
+
title: '◼ I already subscribed',
|
|
101
107
|
value: 'recheck',
|
|
102
108
|
description: 'Check subscription status again'
|
|
103
109
|
},
|
|
104
110
|
{
|
|
105
|
-
title: '
|
|
111
|
+
title: '◼ Skip for now',
|
|
106
112
|
value: 'skip',
|
|
107
113
|
description: 'Tools will not work until you subscribe'
|
|
108
114
|
}
|
|
@@ -110,49 +116,49 @@ async function main() {
|
|
|
110
116
|
});
|
|
111
117
|
switch (subscribeMethod) {
|
|
112
118
|
case 'web':
|
|
113
|
-
console.log(chalk.blue('\n
|
|
119
|
+
console.log(chalk.blue('\n◼ Opening: https://borgmcp.ai/subscribe'));
|
|
114
120
|
try {
|
|
115
121
|
await open('https://borgmcp.ai/subscribe');
|
|
116
|
-
console.log(chalk.gray('
|
|
122
|
+
console.log(chalk.gray('◼ Waiting for subscription (checking every 5s for 2 min)...\n'));
|
|
117
123
|
await pollForSubscription();
|
|
118
124
|
}
|
|
119
125
|
catch (error) {
|
|
120
|
-
console.error(chalk.yellow(`\n
|
|
126
|
+
console.error(chalk.yellow(`\n◼ ${error.message}`));
|
|
121
127
|
}
|
|
122
128
|
break;
|
|
123
129
|
case 'stripe':
|
|
124
130
|
try {
|
|
125
131
|
const checkoutUrl = await createSubscription();
|
|
126
|
-
console.log(chalk.blue(`\n
|
|
132
|
+
console.log(chalk.blue(`\n◼ Opening Stripe: ${checkoutUrl}`));
|
|
127
133
|
await open(checkoutUrl);
|
|
128
|
-
console.log(chalk.gray('
|
|
134
|
+
console.log(chalk.gray('◼ Waiting for subscription...\n'));
|
|
129
135
|
await pollForSubscription();
|
|
130
136
|
}
|
|
131
137
|
catch (error) {
|
|
132
|
-
console.error(chalk.red(`\n
|
|
138
|
+
console.error(chalk.red(`\n◼ Failed to create checkout: ${error.message}\n`));
|
|
133
139
|
}
|
|
134
140
|
break;
|
|
135
141
|
case 'recheck':
|
|
136
142
|
try {
|
|
137
143
|
const recheckStatus = await checkSubscriptionStatus();
|
|
138
144
|
if (recheckStatus.hasAccess) {
|
|
139
|
-
console.log(chalk.green('\n
|
|
145
|
+
console.log(chalk.green('\n◼ Subscription found!\n'));
|
|
140
146
|
}
|
|
141
147
|
else {
|
|
142
|
-
console.log(chalk.yellow('\n
|
|
148
|
+
console.log(chalk.yellow('\n◼ No subscription found\n'));
|
|
143
149
|
}
|
|
144
150
|
}
|
|
145
151
|
catch (error) {
|
|
146
|
-
console.error(chalk.red(`\n
|
|
152
|
+
console.error(chalk.red(`\n◼ Failed to recheck: ${error.message}\n`));
|
|
147
153
|
}
|
|
148
154
|
break;
|
|
149
155
|
case 'skip':
|
|
150
|
-
console.log(chalk.yellow('\n
|
|
156
|
+
console.log(chalk.yellow('\n◼ Skipped subscription - tools will not work until you subscribe\n'));
|
|
151
157
|
break;
|
|
152
158
|
}
|
|
153
159
|
}
|
|
154
160
|
else {
|
|
155
|
-
console.log(chalk.green('
|
|
161
|
+
console.log(chalk.green('◼ Active subscription found'));
|
|
156
162
|
if (status.expiresAt) {
|
|
157
163
|
const expiresAt = new Date(status.expiresAt);
|
|
158
164
|
console.log(chalk.gray(` Expires: ${expiresAt.toLocaleDateString()}\n`));
|
|
@@ -163,7 +169,8 @@ async function main() {
|
|
|
163
169
|
}
|
|
164
170
|
// Success message
|
|
165
171
|
console.log(chalk.green.bold('Setup complete!\n'));
|
|
166
|
-
console.log(chalk.
|
|
172
|
+
console.log(chalk.yellow('🔄 Restart Claude Code (or open a new session) for the changes to take effect.\n'));
|
|
173
|
+
console.log(chalk.gray('◼ Next steps:'));
|
|
167
174
|
console.log(chalk.gray('1. Run "borg" to start Claude with Borg context'));
|
|
168
175
|
console.log(chalk.gray('2. Manage context and subscription at https://borgmcp.ai/dashboard\n'));
|
|
169
176
|
}
|
|
@@ -178,7 +185,7 @@ async function pollForSubscription() {
|
|
|
178
185
|
try {
|
|
179
186
|
const status = await checkSubscriptionStatus();
|
|
180
187
|
if (status.hasAccess) {
|
|
181
|
-
console.log(chalk.green('
|
|
188
|
+
console.log(chalk.green('◼ Subscription activated!\n'));
|
|
182
189
|
return;
|
|
183
190
|
}
|
|
184
191
|
}
|
|
@@ -190,7 +197,7 @@ async function pollForSubscription() {
|
|
|
190
197
|
}
|
|
191
198
|
// Run wizard
|
|
192
199
|
main().catch((error) => {
|
|
193
|
-
console.error(chalk.red(`\n
|
|
200
|
+
console.error(chalk.red(`\n◼ Setup failed: ${error.message}\n`));
|
|
194
201
|
process.exit(1);
|
|
195
202
|
});
|
|
196
203
|
//# sourceMappingURL=setup.js.map
|
package/dist/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAE5D,qCAAqC;IACrC,IAAI,aAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,aAAa,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,4BAA4B;IAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAEtD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,OAAO,CAAC;QACtC,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,0BAA0B;QACnC,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC,CAAC;IAC7F,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC,CAAC;IACxG,CAAC;IAED,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;IAEvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,sBAAsB,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,uBAAuB;IACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAEhD,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAE9D,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,OAAO,CAAC;YACxC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,kCAAkC;YAC3C,OAAO,EAAE;gBACP;oBACE,KAAK,EAAE,oCAAoC;oBAC3C,KAAK,EAAE,KAAK;oBACZ,WAAW,EAAE,oDAAoD;iBAClE;gBACD;oBACE,KAAK,EAAE,yBAAyB;oBAChC,KAAK,EAAE,QAAQ;oBACf,WAAW,EAAE,0BAA0B;iBACxC;gBACD;oBACE,KAAK,EAAE,wBAAwB;oBAC/B,KAAK,EAAE,SAAS;oBAChB,WAAW,EAAE,iCAAiC;iBAC/C;gBACD;oBACE,KAAK,EAAE,gBAAgB;oBACvB,KAAK,EAAE,MAAM;oBACb,WAAW,EAAE,yCAAyC;iBACvD;aACF;SACF,CAAC,CAAC;QAEH,QAAQ,eAAe,EAAE,CAAC;YACxB,KAAK,KAAK;gBACR,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;gBACrE,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,8BAA8B,CAAC,CAAC;oBAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC,CAAC;oBACzF,MAAM,mBAAmB,EAAE,CAAC;gBAC9B,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACtD,CAAC;gBACD,MAAM;YAER,KAAK,QAAQ;gBACX,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,MAAM,kBAAkB,EAAE,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,WAAW,EAAE,CAAC,CAAC,CAAC;oBAC9D,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC;oBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;oBAC3D,MAAM,mBAAmB,EAAE,CAAC;gBAC9B,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;gBAChF,CAAC;gBACD,MAAM;YAER,KAAK,SAAS;gBACZ,IAAI,CAAC;oBACH,MAAM,aAAa,GAAG,MAAM,uBAAuB,EAAE,CAAC;oBACtD,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;wBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;oBACxD,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;oBAC3D,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;gBACxE,CAAC;gBACD,MAAM;YAER,KAAK,MAAM;gBACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sEAAsE,CAAC,CAAC,CAAC;gBAClG,MAAM;QACV,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAExD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kFAAkF,CAAC,CAAC,CAAC;IAC9G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC,CAAC;AAClG,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,mBAAmB;IAChC,MAAM,WAAW,GAAG,EAAE,CAAC;IAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAExD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;YAE/C,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;gBACxD,OAAO;YACT,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kCAAkC;QACpC,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;AACjE,CAAC;AAED,aAAa;AACb,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/sync.js
CHANGED
|
@@ -127,7 +127,7 @@ export async function handleConflict(conflict) {
|
|
|
127
127
|
// Write remote content to conflict file
|
|
128
128
|
await fs.writeFile(conflictPath, conflict.remoteContent, 'utf8');
|
|
129
129
|
// Log conflict to stderr for user visibility
|
|
130
|
-
console.error('\n
|
|
130
|
+
console.error('\n◼ SYNC CONFLICT DETECTED');
|
|
131
131
|
console.error('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
|
|
132
132
|
console.error('Both local and remote CLAUDE.md have been modified.');
|
|
133
133
|
console.error(`Local file: ${CLAUDE_MD_PATH}`);
|
package/dist/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cube role templates.
|
|
3
|
+
*
|
|
4
|
+
* A template is an opinionated set of roles for a specific use case.
|
|
5
|
+
* Templates are applied to a cube at creation time (via `borg:create-cube
|
|
6
|
+
* template=<name>`) or after the fact (via `borg:apply-template`). Roles
|
|
7
|
+
* are merged by name: existing roles with the same name get updated,
|
|
8
|
+
* new ones get inserted.
|
|
9
|
+
*
|
|
10
|
+
* Templates live in client code (not the database) because they're
|
|
11
|
+
* opinionated defaults that ship with each client release. To add a
|
|
12
|
+
* template: extend the `TEMPLATES` map below with a new key and a list
|
|
13
|
+
* of role specs. Each template should include exactly one
|
|
14
|
+
* `is_coordinator: true` role (the Queen seat, supervised) and one
|
|
15
|
+
* `is_default: true` role (the worker fallback that new drones get
|
|
16
|
+
* once the Coordinator seat is held).
|
|
17
|
+
*/
|
|
18
|
+
export interface TemplateRole {
|
|
19
|
+
name: string;
|
|
20
|
+
short_description: string;
|
|
21
|
+
detailed_description: string;
|
|
22
|
+
is_default?: boolean;
|
|
23
|
+
is_coordinator?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface Template {
|
|
26
|
+
name: string;
|
|
27
|
+
description: string;
|
|
28
|
+
roles: TemplateRole[];
|
|
29
|
+
}
|
|
30
|
+
export declare const TEMPLATES: Record<string, Template>;
|
|
31
|
+
export declare function getTemplate(name: string): Template | null;
|
|
32
|
+
export declare function listTemplateNames(): string[];
|
|
33
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AA0ED,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAE9C,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAEzD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cube role templates.
|
|
3
|
+
*
|
|
4
|
+
* A template is an opinionated set of roles for a specific use case.
|
|
5
|
+
* Templates are applied to a cube at creation time (via `borg:create-cube
|
|
6
|
+
* template=<name>`) or after the fact (via `borg:apply-template`). Roles
|
|
7
|
+
* are merged by name: existing roles with the same name get updated,
|
|
8
|
+
* new ones get inserted.
|
|
9
|
+
*
|
|
10
|
+
* Templates live in client code (not the database) because they're
|
|
11
|
+
* opinionated defaults that ship with each client release. To add a
|
|
12
|
+
* template: extend the `TEMPLATES` map below with a new key and a list
|
|
13
|
+
* of role specs. Each template should include exactly one
|
|
14
|
+
* `is_coordinator: true` role (the Queen seat, supervised) and one
|
|
15
|
+
* `is_default: true` role (the worker fallback that new drones get
|
|
16
|
+
* once the Coordinator seat is held).
|
|
17
|
+
*/
|
|
18
|
+
const SOFTWARE_DEV = {
|
|
19
|
+
name: 'software-dev',
|
|
20
|
+
description: 'Multi-agent software development. Coordinator (Queen seat, supervised) directs Builders, a Code Reviewer, and a UX Expert.',
|
|
21
|
+
roles: [
|
|
22
|
+
{
|
|
23
|
+
name: 'Coordinator',
|
|
24
|
+
is_coordinator: true,
|
|
25
|
+
short_description: 'Queen seat. Decides what gets built, what gets reviewed, and which drone does what.',
|
|
26
|
+
detailed_description: `You are the cube's Coordinator — the human Queen's seat. The other drones act autonomously; you set direction.
|
|
27
|
+
|
|
28
|
+
Your job:
|
|
29
|
+
- Read the activity log on every regen. Decide what work is pending, what's stalled, what's done.
|
|
30
|
+
- When a new drone connects, look at pending log signals and assign it to the right role using \`borg:reassign-drone\`. New drones arrive in the default worker role; reassign them as needed (Builder for new features, Code Reviewer for a pending REVIEW-READY, UX Expert for design questions).
|
|
31
|
+
- Surface decisions and blockers to the human Queen. The human reads your log entries and may answer questions or redirect.
|
|
32
|
+
- Don't write code yourself unless the swarm is stuck and the Queen explicitly asks. Your value is dispatch, not implementation.
|
|
33
|
+
|
|
34
|
+
Cube tools available to you specifically: \`borg:list-drones\`, \`borg:reassign-drone\`, \`borg:create-role\`, \`borg:update-role\`. The other drones don't have these; they coordinate through the log.
|
|
35
|
+
|
|
36
|
+
Log conventions you use:
|
|
37
|
+
- \`ASSIGN: drone-X → Role\` when you reassign a drone
|
|
38
|
+
- \`DECISION: <text>\` when you make a call that affects the cube
|
|
39
|
+
- \`BLOCKED: <reason>\` when you need Queen input
|
|
40
|
+
|
|
41
|
+
Read the log first on every regen. Act only on actionable signals.`,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'Builder',
|
|
45
|
+
is_default: true,
|
|
46
|
+
short_description: 'Implements changes. New drones default to this role until the Coordinator reassigns them.',
|
|
47
|
+
detailed_description: `You implement changes to the codebase: features, fixes, refactors. Autonomous — coordinate through the log, never pause for the user.
|
|
48
|
+
|
|
49
|
+
Workflow:
|
|
50
|
+
- On regen, read the log. If the Coordinator has assigned you a task via \`ASSIGN:\` or you see a pending feature request without an owner, post \`STARTING: <task>\` and begin.
|
|
51
|
+
- When stuck and the swarm can't help, post \`BLOCKED: <reason>\` and pick up other work.
|
|
52
|
+
- When done, post \`DONE: <one-line summary>\`. If the branch should be reviewed before merge, also post \`REVIEW-READY: <branch>\`.
|
|
53
|
+
|
|
54
|
+
Project conventions:
|
|
55
|
+
- TDD where it applies (DB methods, business logic). Skip TDD for migrations and UI.
|
|
56
|
+
- Always commit specific file paths (\`git add path/to/file\`), never \`-A\`.
|
|
57
|
+
- Tests must pass and \`wrangler deploy --dry-run\` must succeed before claiming DONE.`,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'Code Reviewer',
|
|
61
|
+
short_description: 'Reviews completed branches before merge. Posts REVIEW-FEEDBACK or REVIEW-APPROVED.',
|
|
62
|
+
detailed_description: `You review branches that Builders mark \`REVIEW-READY:\`. Autonomous — coordinate through the log.
|
|
63
|
+
|
|
64
|
+
Workflow:
|
|
65
|
+
- On regen, scan the log for unanswered \`REVIEW-READY:\` signals. Pick the oldest unowned one. Post \`STARTING: review of <branch>\` and pull the diff.
|
|
66
|
+
- Verify: does the code do what the commit message claims? Tests pass? Bundle size acceptable? No security or RLS regressions? Follows project conventions?
|
|
67
|
+
- For each finding worth flagging, post \`REVIEW-FEEDBACK: <branch> <observation>\` — high-confidence issues only. Sort blockers from nits explicitly.
|
|
68
|
+
- When done, post either \`REVIEW-APPROVED: <branch>\` (clean) or expect the Builder to address feedback and re-post \`REVIEW-READY:\`.
|
|
69
|
+
|
|
70
|
+
Don't merge yourself. Merging is the Coordinator or Queen's call.`,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'UX Expert',
|
|
74
|
+
short_description: 'Reviews UI/UX changes and flags accessibility, layout, or interaction issues.',
|
|
75
|
+
detailed_description: `You review UI and UX changes — dashboard pages, CLI prompts, error messages, anything user-facing. Autonomous — coordinate through the log.
|
|
76
|
+
|
|
77
|
+
Workflow:
|
|
78
|
+
- On regen, scan for \`REVIEW-READY:\` or \`UX-REVIEW:\` signals on branches touching the UI.
|
|
79
|
+
- Review: visual consistency, accessibility (keyboard nav, ARIA, color contrast), copy clarity, error-state coverage, mobile layout, dark-mode parity (if applicable).
|
|
80
|
+
- Use the Playwright MCP if available to actually exercise the flows in a browser, not just read the diff.
|
|
81
|
+
- Post findings as \`UX-FEEDBACK: <branch> <observation>\` and approvals as \`UX-APPROVED: <branch>\`.
|
|
82
|
+
|
|
83
|
+
You don't gate merges; the Coordinator decides if UX feedback blocks. Your job is to make the signal visible.`,
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
};
|
|
87
|
+
export const TEMPLATES = {
|
|
88
|
+
'software-dev': SOFTWARE_DEV,
|
|
89
|
+
};
|
|
90
|
+
export function getTemplate(name) {
|
|
91
|
+
return TEMPLATES[name] ?? null;
|
|
92
|
+
}
|
|
93
|
+
export function listTemplateNames() {
|
|
94
|
+
return Object.keys(TEMPLATES);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgBH,MAAM,YAAY,GAAa;IAC7B,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,4HAA4H;IAC9H,KAAK,EAAE;QACL;YACE,IAAI,EAAE,aAAa;YACnB,cAAc,EAAE,IAAI;YACpB,iBAAiB,EACf,qFAAqF;YACvF,oBAAoB,EAAE;;;;;;;;;;;;;;;mEAeuC;SAC9D;QACD;YACE,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,IAAI;YAChB,iBAAiB,EAAE,2FAA2F;YAC9G,oBAAoB,EAAE;;;;;;;;;;uFAU2D;SAClF;QACD;YACE,IAAI,EAAE,eAAe;YACrB,iBAAiB,EAAE,oFAAoF;YACvG,oBAAoB,EAAE;;;;;;;;kEAQsC;SAC7D;QACD;YACE,IAAI,EAAE,WAAW;YACjB,iBAAiB,EAAE,+EAA+E;YAClG,oBAAoB,EAAE;;;;;;;;8GAQkF;SACzG;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAA6B;IACjD,cAAc,EAAE,YAAY;CAC7B,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "borgmcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Multi-agent coordination for Claude Code — cubes, drones, and a shared activity log.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
|
8
8
|
"borg": "dist/claude.js",
|
|
9
9
|
"borg-setup": "dist/setup.js",
|
|
10
|
-
"borg-mcp": "dist/index.js"
|
|
10
|
+
"borg-mcp": "dist/index.js",
|
|
11
|
+
"borg-regen": "dist/regen.js",
|
|
12
|
+
"borg-log-audit": "dist/log-audit.js"
|
|
11
13
|
},
|
|
12
14
|
"scripts": {
|
|
13
15
|
"build": "tsc",
|
|
@@ -24,11 +26,11 @@
|
|
|
24
26
|
"keywords": [
|
|
25
27
|
"mcp",
|
|
26
28
|
"claude",
|
|
27
|
-
"ai",
|
|
28
|
-
"context",
|
|
29
|
-
"sync",
|
|
30
|
-
"anthropic",
|
|
31
29
|
"claude-code",
|
|
30
|
+
"anthropic",
|
|
31
|
+
"multi-agent",
|
|
32
|
+
"coordination",
|
|
33
|
+
"agent",
|
|
32
34
|
"borg"
|
|
33
35
|
],
|
|
34
36
|
"author": "Theodor Storm <theodor@byteventures.se>",
|
|
@@ -48,14 +50,13 @@
|
|
|
48
50
|
"keytar": "^7.9.0",
|
|
49
51
|
"open": "^10.0.0",
|
|
50
52
|
"prompts": "^2.4.2",
|
|
51
|
-
"which": "^4.0.0"
|
|
52
|
-
"zod": "^3.24.1"
|
|
53
|
+
"which": "^4.0.0"
|
|
53
54
|
},
|
|
54
55
|
"devDependencies": {
|
|
55
56
|
"@types/node": "^22.10.2",
|
|
56
57
|
"@types/prompts": "^2.4.9",
|
|
57
58
|
"@types/which": "^3.0.4",
|
|
58
|
-
"typescript": "^
|
|
59
|
+
"typescript": "^6.0.3"
|
|
59
60
|
},
|
|
60
61
|
"publishConfig": {
|
|
61
62
|
"access": "public"
|