mstro-app 0.3.1 → 0.3.4
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 +3 -19
- package/bin/mstro.js +0 -175
- package/dist/server/mcp/bouncer-integration.d.ts.map +1 -1
- package/dist/server/mcp/bouncer-integration.js +43 -135
- package/dist/server/mcp/bouncer-integration.js.map +1 -1
- package/dist/server/services/websocket/file-utils.d.ts.map +1 -1
- package/dist/server/services/websocket/file-utils.js +26 -20
- package/dist/server/services/websocket/file-utils.js.map +1 -1
- package/dist/server/utils/paths.d.ts +0 -12
- package/dist/server/utils/paths.d.ts.map +1 -1
- package/dist/server/utils/paths.js +0 -12
- package/dist/server/utils/paths.js.map +1 -1
- package/package.json +1 -2
- package/server/README.md +0 -1
- package/server/mcp/README.md +0 -5
- package/server/mcp/bouncer-integration.ts +55 -210
- package/server/services/websocket/file-utils.ts +29 -24
- package/server/utils/paths.ts +0 -14
- package/bin/configure-claude.js +0 -298
- package/dist/server/mcp/bouncer-cli.d.ts +0 -3
- package/dist/server/mcp/bouncer-cli.d.ts.map +0 -1
- package/dist/server/mcp/bouncer-cli.js +0 -138
- package/dist/server/mcp/bouncer-cli.js.map +0 -1
- package/hooks/bouncer.sh +0 -159
- package/server/mcp/bouncer-cli.ts +0 -180
package/README.md
CHANGED
|
@@ -42,32 +42,19 @@ npx mstro-app # Same thing — login + launch in one command
|
|
|
42
42
|
|
|
43
43
|
On first run, mstro will:
|
|
44
44
|
1. Open your browser to authenticate with your mstro.app account
|
|
45
|
-
2.
|
|
46
|
-
3. Connect to the platform
|
|
45
|
+
2. Connect to the platform
|
|
47
46
|
|
|
48
47
|
Then open [mstro.app](https://mstro.app) in your browser. Your machine appears as a connected workspace. Start prompting.
|
|
49
48
|
|
|
50
49
|
## Security Bouncer
|
|
51
50
|
|
|
52
|
-
The Bouncer automatically approves or blocks
|
|
51
|
+
The Bouncer automatically approves or blocks tool calls during mstro sessions. It is not active for standalone Claude Code.
|
|
53
52
|
|
|
54
|
-
**Mstro sessions (headless)** get the full 2-layer system:
|
|
53
|
+
**Mstro sessions (headless)** get the full 2-layer system via MCP:
|
|
55
54
|
|
|
56
55
|
1. **Pattern matching** (<5ms): Known-safe operations are allowed instantly. Known-dangerous patterns (destructive commands, fork bombs) are blocked instantly.
|
|
57
56
|
2. **AI analysis** (~200-500ms): Ambiguous operations are reviewed by a fast AI model to determine if they look like legitimate development work or prompt injection.
|
|
58
57
|
|
|
59
|
-
**Claude Code terminal REPL** (`claude`) gets 1-layer protection:
|
|
60
|
-
|
|
61
|
-
1. **Pattern matching only**: Blocks critical threats (fork bombs, `rm -rf /`, disk overwrites). Allows everything else. The AI analysis layer requires a running mstro server.
|
|
62
|
-
|
|
63
|
-
### Configure
|
|
64
|
-
|
|
65
|
-
The bouncer is set up automatically on first run. To reconfigure or install manually:
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
mstro configure-hooks
|
|
69
|
-
```
|
|
70
|
-
|
|
71
58
|
## CLI Reference
|
|
72
59
|
|
|
73
60
|
### Commands
|
|
@@ -79,7 +66,6 @@ mstro logout # Sign out
|
|
|
79
66
|
mstro whoami # Show current user and device info
|
|
80
67
|
mstro status # Show connection and auth status
|
|
81
68
|
mstro setup-terminal # Enable web terminal (compiles native module)
|
|
82
|
-
mstro configure-hooks # Install/reconfigure Security Bouncer
|
|
83
69
|
mstro telemetry [on|off] # Show/toggle anonymous telemetry
|
|
84
70
|
```
|
|
85
71
|
|
|
@@ -120,8 +106,6 @@ mstro stores config in `~/.mstro/`:
|
|
|
120
106
|
| File | Purpose |
|
|
121
107
|
|------|---------|
|
|
122
108
|
| `~/.mstro/credentials.json` | Device auth token (created by `mstro login`) |
|
|
123
|
-
| `~/.claude/hooks/bouncer.sh` | Security Bouncer hook |
|
|
124
|
-
| `~/.claude/logs/bouncer.log` | Bouncer audit log |
|
|
125
109
|
|
|
126
110
|
## Requirements
|
|
127
111
|
|
package/bin/mstro.js
CHANGED
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
* mstro whoami # Show current user
|
|
15
15
|
* mstro status # Show connection status
|
|
16
16
|
* mstro -p 4105 # Start on specific port (overrides auto port)
|
|
17
|
-
* mstro configure-hooks # Configure Claude Code security hooks
|
|
18
17
|
* mstro --help # Show help
|
|
19
18
|
*/
|
|
20
19
|
|
|
@@ -62,24 +61,8 @@ const USER_CWD = process.cwd();
|
|
|
62
61
|
|
|
63
62
|
// First-run detection paths
|
|
64
63
|
const MSTRO_CONFIG_DIR = join(homedir(), '.mstro');
|
|
65
|
-
const MSTRO_FIRST_RUN_FLAG = join(MSTRO_CONFIG_DIR, '.configured');
|
|
66
|
-
const CLAUDE_SETTINGS_FILE = join(homedir(), '.claude', 'settings.json');
|
|
67
|
-
const CLAUDE_HOOKS_DIR = join(homedir(), '.claude', 'hooks');
|
|
68
|
-
const BOUNCER_HOOK_FILE = join(CLAUDE_HOOKS_DIR, 'bouncer.sh');
|
|
69
64
|
const PTY_SETUP_DISMISSED_FLAG = join(MSTRO_CONFIG_DIR, '.pty-setup-dismissed');
|
|
70
65
|
|
|
71
|
-
/**
|
|
72
|
-
* Mark Mstro as configured by writing the first-run flag file
|
|
73
|
-
*/
|
|
74
|
-
function markConfigured() {
|
|
75
|
-
try {
|
|
76
|
-
mkdirSync(MSTRO_CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
77
|
-
writeFileSync(MSTRO_FIRST_RUN_FLAG, new Date().toISOString());
|
|
78
|
-
} catch (_) {
|
|
79
|
-
// Ignore errors — non-critical
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
66
|
/**
|
|
84
67
|
* Set the terminal tab title
|
|
85
68
|
* Format: "mstro: directory_name"
|
|
@@ -121,96 +104,6 @@ function prompt(question) {
|
|
|
121
104
|
});
|
|
122
105
|
}
|
|
123
106
|
|
|
124
|
-
/**
|
|
125
|
-
* Check if bouncer hooks are properly configured
|
|
126
|
-
* Returns true if both settings.json has the hook AND the hook file exists
|
|
127
|
-
*/
|
|
128
|
-
function isBouncerConfigured() {
|
|
129
|
-
if (!existsSync(BOUNCER_HOOK_FILE) || !existsSync(CLAUDE_SETTINGS_FILE)) {
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
try {
|
|
134
|
-
const settings = JSON.parse(readFileSync(CLAUDE_SETTINGS_FILE, 'utf-8'));
|
|
135
|
-
const preToolUseHooks = settings.hooks?.PreToolUse;
|
|
136
|
-
return Array.isArray(preToolUseHooks) &&
|
|
137
|
-
preToolUseHooks.some(matcher =>
|
|
138
|
-
Array.isArray(matcher.hooks) &&
|
|
139
|
-
matcher.hooks.some(hook => hook.command?.includes('bouncer.sh'))
|
|
140
|
-
);
|
|
141
|
-
} catch {
|
|
142
|
-
return false;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Check if user has dismissed the bouncer setup prompt
|
|
148
|
-
*/
|
|
149
|
-
function hasUserDismissedSetup() {
|
|
150
|
-
return existsSync(MSTRO_FIRST_RUN_FLAG);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Mark bouncer setup as dismissed by user
|
|
155
|
-
*/
|
|
156
|
-
function markSetupDismissed() {
|
|
157
|
-
if (!existsSync(MSTRO_CONFIG_DIR)) {
|
|
158
|
-
mkdirSync(MSTRO_CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
159
|
-
}
|
|
160
|
-
writeFileSync(MSTRO_FIRST_RUN_FLAG, new Date().toISOString());
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* Show a one-line warning that bouncer is not configured
|
|
165
|
-
*/
|
|
166
|
-
function showBouncerWarning() {
|
|
167
|
-
log(' Security Bouncer not configured. Run: mstro configure-hooks', colors.dim);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Prompt user to configure hooks
|
|
172
|
-
* Returns: 'configure' | 'skip' | 'never'
|
|
173
|
-
*/
|
|
174
|
-
async function promptBouncerSetup() {
|
|
175
|
-
log('\n Welcome to Mstro!\n', colors.bold + colors.cyan);
|
|
176
|
-
log(' Mstro includes a Security Bouncer that automatically manages', colors.dim);
|
|
177
|
-
log(' tool permissions for Claude Code - keeping you safe while you work.\n', colors.dim);
|
|
178
|
-
|
|
179
|
-
log(' The Security Bouncer:', colors.bold);
|
|
180
|
-
log(' - Blocks dangerous commands automatically', colors.dim);
|
|
181
|
-
log(' - Allows normal development work without interruption', colors.dim);
|
|
182
|
-
log(' - Uses AI to analyze ambiguous operations\n', colors.dim);
|
|
183
|
-
|
|
184
|
-
const isInteractive = process.stdin.isTTY;
|
|
185
|
-
|
|
186
|
-
if (!isInteractive) {
|
|
187
|
-
log(' Non-interactive mode: skipping bouncer setup.', colors.yellow);
|
|
188
|
-
log(' Run "mstro configure-hooks" to set up the Security Bouncer.\n', colors.dim);
|
|
189
|
-
return 'skip';
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
log(' Configure Security Bouncer now?', colors.bold);
|
|
193
|
-
log(' [Y] Yes, configure now', colors.dim);
|
|
194
|
-
log(' [n] Not now (ask again next time)', colors.dim);
|
|
195
|
-
log(' [d] Don\'t show this again\n', colors.dim);
|
|
196
|
-
|
|
197
|
-
const answer = await prompt(' Your choice [Y/n/d]: ');
|
|
198
|
-
const choice = answer.toLowerCase();
|
|
199
|
-
|
|
200
|
-
if (choice === '' || choice === 'y' || choice === 'yes') {
|
|
201
|
-
log('');
|
|
202
|
-
return 'configure';
|
|
203
|
-
} else if (choice === 'd' || choice === 'dont' || choice === "don't") {
|
|
204
|
-
log('\n Got it! You can configure later with: mstro configure-hooks\n', colors.dim);
|
|
205
|
-
markSetupDismissed(); // Don't show full prompt again
|
|
206
|
-
return 'never';
|
|
207
|
-
} else {
|
|
208
|
-
log('\n Skipping for now. Will ask again next time.', colors.yellow);
|
|
209
|
-
log(' You can also configure with: mstro configure-hooks\n', colors.dim);
|
|
210
|
-
return 'skip';
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
107
|
/**
|
|
215
108
|
* Check if node-pty native module is loadable
|
|
216
109
|
*/
|
|
@@ -424,7 +317,6 @@ function showHelp() {
|
|
|
424
317
|
log(' mstro status Show connection and auth status', colors.dim);
|
|
425
318
|
log(' mstro telemetry [on|off] Enable/disable anonymous telemetry', colors.dim);
|
|
426
319
|
log(' mstro -p 4105 Start on specific port (overrides auto port)', colors.dim);
|
|
427
|
-
log(' mstro configure-hooks Configure Claude Code security hooks', colors.dim);
|
|
428
320
|
log(' mstro setup-terminal Enable web terminal (compiles native module)', colors.dim);
|
|
429
321
|
log(' mstro --version Show version number', colors.dim);
|
|
430
322
|
log(' mstro --help Show this help message', colors.dim);
|
|
@@ -438,11 +330,6 @@ function showHelp() {
|
|
|
438
330
|
log(' Running "mstro" will prompt you to log in automatically if needed.', colors.dim);
|
|
439
331
|
log(' Once logged in, machines sync automatically with your web dashboard.', colors.dim);
|
|
440
332
|
log('');
|
|
441
|
-
log(' Security:', colors.bold);
|
|
442
|
-
log(' Mstro includes a Security Bouncer that automatically manages', colors.dim);
|
|
443
|
-
log(' tool permissions for Claude Code. It blocks dangerous operations', colors.dim);
|
|
444
|
-
log(' while allowing normal development work to proceed smoothly.', colors.dim);
|
|
445
|
-
log('');
|
|
446
333
|
}
|
|
447
334
|
|
|
448
335
|
function runNpmScript(script, args = [], envOverrides = {}) {
|
|
@@ -486,42 +373,6 @@ function runNpmScript(script, args = [], envOverrides = {}) {
|
|
|
486
373
|
});
|
|
487
374
|
}
|
|
488
375
|
|
|
489
|
-
function runConfigureHooks(andThenStart = false) {
|
|
490
|
-
const configScript = join(__dirname, 'configure-claude.js');
|
|
491
|
-
const child = spawn('node', [configScript, ...process.argv.slice(3)], {
|
|
492
|
-
cwd: CLIENT_ROOT,
|
|
493
|
-
stdio: 'inherit',
|
|
494
|
-
});
|
|
495
|
-
|
|
496
|
-
// Handle Ctrl+C: kill child process and exit immediately
|
|
497
|
-
process.on('SIGINT', () => {
|
|
498
|
-
child.kill('SIGTERM');
|
|
499
|
-
process.exit(0);
|
|
500
|
-
});
|
|
501
|
-
|
|
502
|
-
child.on('error', (err) => {
|
|
503
|
-
log(`Error: ${err.message}`, colors.red);
|
|
504
|
-
process.exit(1);
|
|
505
|
-
});
|
|
506
|
-
|
|
507
|
-
child.on('exit', async (code) => {
|
|
508
|
-
if (code === 0) {
|
|
509
|
-
markConfigured();
|
|
510
|
-
if (andThenStart) {
|
|
511
|
-
// After configuring bouncer, prompt for terminal setup before starting
|
|
512
|
-
await ensurePtySetup();
|
|
513
|
-
const requestedPort = parsePort(process.argv.slice(2));
|
|
514
|
-
const envOverrides = requestedPort ? { PORT: String(requestedPort) } : {};
|
|
515
|
-
runNpmScript('start', [], envOverrides);
|
|
516
|
-
} else {
|
|
517
|
-
process.exit(0);
|
|
518
|
-
}
|
|
519
|
-
} else {
|
|
520
|
-
process.exit(code || 0);
|
|
521
|
-
}
|
|
522
|
-
});
|
|
523
|
-
}
|
|
524
|
-
|
|
525
376
|
// Parse arguments
|
|
526
377
|
const args = process.argv.slice(2);
|
|
527
378
|
|
|
@@ -590,24 +441,6 @@ async function ensureLoggedIn() {
|
|
|
590
441
|
}
|
|
591
442
|
}
|
|
592
443
|
|
|
593
|
-
/**
|
|
594
|
-
* Prompt for bouncer setup if not configured
|
|
595
|
-
* Returns true if runConfigureHooks was called (async exit path)
|
|
596
|
-
*/
|
|
597
|
-
async function ensureBouncerSetup() {
|
|
598
|
-
if (isBouncerConfigured()) return false;
|
|
599
|
-
if (hasUserDismissedSetup()) {
|
|
600
|
-
showBouncerWarning();
|
|
601
|
-
return false;
|
|
602
|
-
}
|
|
603
|
-
const choice = await promptBouncerSetup();
|
|
604
|
-
if (choice === 'configure') {
|
|
605
|
-
runConfigureHooks(true);
|
|
606
|
-
return true;
|
|
607
|
-
}
|
|
608
|
-
return false;
|
|
609
|
-
}
|
|
610
|
-
|
|
611
444
|
/**
|
|
612
445
|
* Prompt for node-pty setup if not available
|
|
613
446
|
*/
|
|
@@ -627,8 +460,6 @@ async function ensurePtySetup() {
|
|
|
627
460
|
async function startServer(envOverrides) {
|
|
628
461
|
await ensureLoggedIn();
|
|
629
462
|
|
|
630
|
-
if (await ensureBouncerSetup()) return;
|
|
631
|
-
|
|
632
463
|
await ensurePtySetup();
|
|
633
464
|
|
|
634
465
|
showUpdateNotification();
|
|
@@ -667,7 +498,6 @@ async function main() {
|
|
|
667
498
|
const { telemetry } = await import('./commands/config.js');
|
|
668
499
|
await telemetry(args.slice(args.indexOf('telemetry') + 1));
|
|
669
500
|
}],
|
|
670
|
-
['configure-hooks', () => runConfigureHooks(false)],
|
|
671
501
|
['setup-terminal', async () => {
|
|
672
502
|
log('\n Mstro Terminal Setup\n', colors.bold + colors.cyan);
|
|
673
503
|
const alreadyAvailable = await isNodePtyAvailable();
|
|
@@ -697,11 +527,6 @@ async function main() {
|
|
|
697
527
|
return;
|
|
698
528
|
}
|
|
699
529
|
|
|
700
|
-
if (args.includes('--configure-hooks') || args.includes('-c')) {
|
|
701
|
-
runConfigureHooks(false);
|
|
702
|
-
return;
|
|
703
|
-
}
|
|
704
|
-
|
|
705
530
|
// Subcommand dispatch
|
|
706
531
|
const handler = subcommand ? commands.get(subcommand) : undefined;
|
|
707
532
|
if (handler) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bouncer-integration.d.ts","sourceRoot":"","sources":["../../../server/mcp/bouncer-integration.ts"],"names":[],"mappings":"AAiFA,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;QAEtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,YAAY,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"bouncer-integration.d.ts","sourceRoot":"","sources":["../../../server/mcp/bouncer-integration.ts"],"names":[],"mappings":"AAiFA,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;QAEtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,YAAY,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA0MD;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAqF7F;AAED;;GAEG;AACH,OAAO,EAAE,YAAY,IAAI,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/E;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,GAAE,OAAc,GACpB,OAAO,CAAC,eAAe,CAAC,CAS1B"}
|
|
@@ -204,15 +204,37 @@ or
|
|
|
204
204
|
});
|
|
205
205
|
});
|
|
206
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* Finalize a bouncer decision: log, track analytics, cache, and return.
|
|
209
|
+
*/
|
|
210
|
+
function finalizeDecision(operation, decision, layer, startTime, context, logFn, opts) {
|
|
211
|
+
const latencyMs = Math.round(performance.now() - startTime);
|
|
212
|
+
logFn(operation, decision.decision, decision.confidence, decision.reasoning, {
|
|
213
|
+
context, threatLevel: decision.threatLevel, layer, latencyMs, ...(opts?.error && { error: opts.error }),
|
|
214
|
+
});
|
|
215
|
+
if (!opts?.skipAnalytics) {
|
|
216
|
+
const event = decision.decision === 'deny' ? AnalyticsEvents.BOUNCER_TOOL_DENIED : AnalyticsEvents.BOUNCER_TOOL_ALLOWED;
|
|
217
|
+
trackEvent(event, {
|
|
218
|
+
layer,
|
|
219
|
+
operation_length: operation.length,
|
|
220
|
+
threat_level: decision.threatLevel,
|
|
221
|
+
confidence: decision.confidence,
|
|
222
|
+
latency_ms: latencyMs,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
if (!opts?.skipCache)
|
|
226
|
+
cacheDecision(operation, decision);
|
|
227
|
+
return decision;
|
|
228
|
+
}
|
|
207
229
|
/**
|
|
208
230
|
* Main bouncer review function - 2-layer hybrid system
|
|
209
231
|
*/
|
|
210
232
|
export async function reviewOperation(request) {
|
|
211
|
-
// Import audit logger
|
|
212
233
|
const { logBouncerDecision } = await import('./security-audit.js');
|
|
213
234
|
const startTime = performance.now();
|
|
214
235
|
const { operation } = request;
|
|
215
|
-
|
|
236
|
+
const fin = (d, layer, opts) => finalizeDecision(operation, d, layer, startTime, request.context, logBouncerDecision, opts);
|
|
237
|
+
// Check cache first
|
|
216
238
|
const cached = getCachedDecision(operation);
|
|
217
239
|
if (cached) {
|
|
218
240
|
console.error(`[Bouncer] ⚡ Cache hit: ${cached.decision} (${cached.confidence}%)`);
|
|
@@ -223,174 +245,60 @@ export async function reviewOperation(request) {
|
|
|
223
245
|
if (request.context?.userRequest) {
|
|
224
246
|
console.error(`[Bouncer] User request: ${request.context.userRequest}`);
|
|
225
247
|
}
|
|
226
|
-
//
|
|
227
|
-
// PRE-CHECK: Malformed/empty tool calls
|
|
228
|
-
// ========================================
|
|
229
|
-
// Empty-param Edit/Write calls are no-ops that will fail validation anyway.
|
|
230
|
-
// Allow immediately instead of wasting ~8s on Haiku analysis.
|
|
248
|
+
// PRE-CHECK: Empty-param Edit/Write calls are no-ops — allow immediately
|
|
231
249
|
const toolInput = request.context?.toolInput;
|
|
232
250
|
if (toolInput && typeof toolInput === 'object' && Object.keys(toolInput).length === 0) {
|
|
233
251
|
console.error('[Bouncer] ⚡ Fast path: Empty tool parameters (no-op)');
|
|
234
|
-
|
|
235
|
-
const decision = {
|
|
236
|
-
decision: 'allow',
|
|
237
|
-
confidence: 95,
|
|
238
|
-
reasoning: 'Empty tool parameters - operation is a no-op with no side effects.',
|
|
239
|
-
threatLevel: 'low'
|
|
240
|
-
};
|
|
241
|
-
logBouncerDecision(operation, decision.decision, decision.confidence, decision.reasoning, { context: request.context, threatLevel: decision.threatLevel, layer: 'pattern-noop', latencyMs });
|
|
242
|
-
cacheDecision(operation, decision);
|
|
243
|
-
return decision;
|
|
252
|
+
return fin({ decision: 'allow', confidence: 95, reasoning: 'Empty tool parameters - operation is a no-op with no side effects.', threatLevel: 'low' }, 'pattern-noop', { skipAnalytics: true });
|
|
244
253
|
}
|
|
245
|
-
// ========================================
|
|
246
254
|
// LAYER 1: Pattern-Based Fast Path (< 5ms)
|
|
247
|
-
//
|
|
248
|
-
// Check safe operations FIRST - allows trusted sources (e.g., brew, rustup)
|
|
255
|
+
// Check safe operations FIRST — allows trusted sources (e.g., brew, rustup)
|
|
249
256
|
// to pass before hitting critical threat patterns like curl|bash
|
|
250
257
|
const safeOperation = matchesPattern(operation, SAFE_OPERATIONS);
|
|
251
258
|
if (safeOperation) {
|
|
252
259
|
console.error('[Bouncer] ⚡ Fast path: Safe operation approved');
|
|
253
|
-
|
|
254
|
-
const decision = {
|
|
255
|
-
decision: 'allow',
|
|
256
|
-
confidence: 95,
|
|
257
|
-
reasoning: 'Operation matches known-safe patterns. No security concerns detected.',
|
|
258
|
-
threatLevel: 'low'
|
|
259
|
-
};
|
|
260
|
-
logBouncerDecision(operation, decision.decision, decision.confidence, decision.reasoning, { context: request.context, threatLevel: decision.threatLevel, layer: 'pattern-safe', latencyMs });
|
|
261
|
-
trackEvent(AnalyticsEvents.BOUNCER_TOOL_ALLOWED, {
|
|
262
|
-
layer: 'pattern-safe',
|
|
263
|
-
operation_length: operation.length,
|
|
264
|
-
threat_level: 'low',
|
|
265
|
-
confidence: 95,
|
|
266
|
-
latency_ms: latencyMs,
|
|
267
|
-
});
|
|
268
|
-
cacheDecision(operation, decision);
|
|
269
|
-
return decision;
|
|
260
|
+
return fin({ decision: 'allow', confidence: 95, reasoning: 'Operation matches known-safe patterns. No security concerns detected.', threatLevel: 'low' }, 'pattern-safe');
|
|
270
261
|
}
|
|
271
|
-
//
|
|
272
|
-
// These are ALWAYS denied - no context can justify them
|
|
262
|
+
// Critical threats (rm -rf /, fork bombs) — ALWAYS denied
|
|
273
263
|
const criticalThreat = matchesPattern(operation, CRITICAL_THREATS);
|
|
274
264
|
if (criticalThreat) {
|
|
275
265
|
console.error('[Bouncer] ⚡ Fast path: CRITICAL THREAT detected');
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
decision: 'deny',
|
|
279
|
-
confidence: 99,
|
|
280
|
-
reasoning: `🚨 CRITICAL THREAT: ${criticalThreat.reason}`,
|
|
281
|
-
threatLevel: 'critical',
|
|
266
|
+
return fin({
|
|
267
|
+
decision: 'deny', confidence: 99, reasoning: `🚨 CRITICAL THREAT: ${criticalThreat.reason}`, threatLevel: 'critical',
|
|
282
268
|
alternative: 'This operation should never be performed. If you need to accomplish a specific task, please describe your goal and I can suggest safe alternatives.',
|
|
283
|
-
enforceable: true
|
|
284
|
-
};
|
|
285
|
-
logBouncerDecision(operation, decision.decision, decision.confidence, decision.reasoning, { context: request.context, threatLevel: decision.threatLevel, layer: 'pattern-critical', latencyMs });
|
|
286
|
-
trackEvent(AnalyticsEvents.BOUNCER_TOOL_DENIED, {
|
|
287
|
-
layer: 'pattern-critical',
|
|
288
|
-
operation_length: operation.length,
|
|
289
|
-
threat_level: 'critical',
|
|
290
|
-
confidence: 99,
|
|
291
|
-
latency_ms: latencyMs,
|
|
292
|
-
});
|
|
293
|
-
cacheDecision(operation, decision);
|
|
294
|
-
return decision;
|
|
269
|
+
enforceable: true,
|
|
270
|
+
}, 'pattern-critical');
|
|
295
271
|
}
|
|
296
|
-
// ========================================
|
|
297
272
|
// LAYER 2: Haiku AI Analysis (~200-500ms)
|
|
298
|
-
//
|
|
299
|
-
// Only invoke AI for operations that truly need context
|
|
273
|
+
// Default allow for operations that don't need AI review
|
|
300
274
|
if (!requiresAIReview(operation)) {
|
|
301
|
-
// Default allow for operations that don't match any pattern
|
|
302
275
|
console.error('[Bouncer] ⚡ Fast path: No concerning patterns, allowing');
|
|
303
|
-
|
|
304
|
-
const decision = {
|
|
305
|
-
decision: 'allow',
|
|
306
|
-
confidence: 80,
|
|
307
|
-
reasoning: 'Operation appears safe based on pattern analysis. No obvious threats detected.',
|
|
308
|
-
threatLevel: 'low'
|
|
309
|
-
};
|
|
310
|
-
logBouncerDecision(operation, decision.decision, decision.confidence, decision.reasoning, { context: request.context, threatLevel: decision.threatLevel, layer: 'pattern-default', latencyMs });
|
|
311
|
-
trackEvent(AnalyticsEvents.BOUNCER_TOOL_ALLOWED, {
|
|
312
|
-
layer: 'pattern-default',
|
|
313
|
-
operation_length: operation.length,
|
|
314
|
-
threat_level: 'low',
|
|
315
|
-
confidence: 80,
|
|
316
|
-
latency_ms: latencyMs,
|
|
317
|
-
});
|
|
318
|
-
cacheDecision(operation, decision);
|
|
319
|
-
return decision;
|
|
276
|
+
return fin({ decision: 'allow', confidence: 80, reasoning: 'Operation appears safe based on pattern analysis. No obvious threats detected.', threatLevel: 'low' }, 'pattern-default');
|
|
320
277
|
}
|
|
321
|
-
|
|
322
|
-
const useAI = process.env.BOUNCER_USE_AI !== 'false';
|
|
323
|
-
if (!useAI) {
|
|
278
|
+
if (process.env.BOUNCER_USE_AI === 'false') {
|
|
324
279
|
console.error('[Bouncer] AI analysis disabled (BOUNCER_USE_AI=false)');
|
|
325
|
-
|
|
326
|
-
const decision = {
|
|
327
|
-
decision: 'warn_allow',
|
|
328
|
-
confidence: 60,
|
|
329
|
-
reasoning: 'Operation requires review but AI analysis is disabled. Proceeding with caution.',
|
|
330
|
-
threatLevel: 'medium'
|
|
331
|
-
};
|
|
332
|
-
logBouncerDecision(operation, decision.decision, decision.confidence, decision.reasoning, { context: request.context, threatLevel: decision.threatLevel, layer: 'ai-disabled', latencyMs });
|
|
333
|
-
return decision;
|
|
280
|
+
return fin({ decision: 'warn_allow', confidence: 60, reasoning: 'Operation requires review but AI analysis is disabled. Proceeding with caution.', threatLevel: 'medium' }, 'ai-disabled', { skipCache: true, skipAnalytics: true });
|
|
334
281
|
}
|
|
335
282
|
console.error('[Bouncer] 🤖 Invoking Haiku for AI analysis...');
|
|
336
|
-
trackEvent(AnalyticsEvents.BOUNCER_HAIKU_REVIEW, {
|
|
337
|
-
operation_length: operation.length,
|
|
338
|
-
});
|
|
339
|
-
// Get Claude command and working directory from context or use defaults
|
|
283
|
+
trackEvent(AnalyticsEvents.BOUNCER_HAIKU_REVIEW, { operation_length: operation.length });
|
|
340
284
|
const claudeCommand = process.env.CLAUDE_COMMAND || 'claude';
|
|
341
285
|
const workingDir = request.context?.workingDirectory || process.cwd();
|
|
342
286
|
try {
|
|
343
287
|
const decision = await analyzeWithHaiku(request, claudeCommand, workingDir);
|
|
344
|
-
|
|
345
|
-
console.error(`[Bouncer] ✓ Haiku decision: ${decision.decision} (${decision.confidence}% confidence) [${latencyMs}ms]`);
|
|
288
|
+
console.error(`[Bouncer] ✓ Haiku decision: ${decision.decision} (${decision.confidence}% confidence) [${Math.round(performance.now() - startTime)}ms]`);
|
|
346
289
|
console.error(`[Bouncer] Reasoning: ${decision.reasoning}`);
|
|
347
|
-
|
|
348
|
-
trackEvent(decision.decision === 'deny' ? AnalyticsEvents.BOUNCER_TOOL_DENIED : AnalyticsEvents.BOUNCER_TOOL_ALLOWED, {
|
|
349
|
-
layer: 'haiku-ai',
|
|
350
|
-
operation_length: operation.length,
|
|
351
|
-
threat_level: decision.threatLevel,
|
|
352
|
-
confidence: decision.confidence,
|
|
353
|
-
latency_ms: latencyMs,
|
|
354
|
-
});
|
|
355
|
-
cacheDecision(operation, decision);
|
|
356
|
-
return decision;
|
|
290
|
+
return fin(decision, 'haiku-ai');
|
|
357
291
|
}
|
|
358
292
|
catch (error) {
|
|
359
|
-
const latencyMs = Math.round(performance.now() - startTime);
|
|
360
293
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
361
|
-
|
|
362
|
-
if (isTimeout) {
|
|
363
|
-
// Timeout: default to ALLOW — prefer availability over security stall,
|
|
364
|
-
// since the user drove the interaction
|
|
294
|
+
if (errorMessage.includes('timed out')) {
|
|
365
295
|
console.error(`[Bouncer] ⚠️ Haiku analysis timed out after ${HAIKU_TIMEOUT_MS}ms — defaulting to ALLOW`);
|
|
366
296
|
captureException(error, { context: 'bouncer.haiku_timeout', operation });
|
|
367
|
-
|
|
368
|
-
decision: 'allow',
|
|
369
|
-
confidence: 50,
|
|
370
|
-
reasoning: `Security analysis timed out after ${HAIKU_TIMEOUT_MS}ms. Defaulting to allow — user initiated the action.`,
|
|
371
|
-
threatLevel: 'medium'
|
|
372
|
-
};
|
|
373
|
-
logBouncerDecision(operation, decision.decision, decision.confidence, decision.reasoning, { context: request.context, threatLevel: decision.threatLevel, layer: 'haiku-timeout', latencyMs, error: errorMessage });
|
|
374
|
-
trackEvent(AnalyticsEvents.BOUNCER_TOOL_ALLOWED, {
|
|
375
|
-
layer: 'haiku-timeout',
|
|
376
|
-
operation_length: operation.length,
|
|
377
|
-
threat_level: 'medium',
|
|
378
|
-
confidence: 50,
|
|
379
|
-
latency_ms: latencyMs,
|
|
380
|
-
});
|
|
381
|
-
return decision;
|
|
297
|
+
return fin({ decision: 'allow', confidence: 50, reasoning: `Security analysis timed out after ${HAIKU_TIMEOUT_MS}ms. Defaulting to allow — user initiated the action.`, threatLevel: 'medium' }, 'haiku-timeout', { skipCache: true });
|
|
382
298
|
}
|
|
383
299
|
console.error(`[Bouncer] ⚠️ Haiku analysis failed: ${errorMessage}`);
|
|
384
300
|
captureException(error, { context: 'bouncer.haiku_analysis', operation });
|
|
385
|
-
|
|
386
|
-
const decision = {
|
|
387
|
-
decision: 'deny',
|
|
388
|
-
confidence: 0,
|
|
389
|
-
reasoning: `Security analysis failed: ${errorMessage}. Denying for safety.`,
|
|
390
|
-
threatLevel: 'critical'
|
|
391
|
-
};
|
|
392
|
-
logBouncerDecision(operation, decision.decision, decision.confidence, decision.reasoning, { context: request.context, threatLevel: decision.threatLevel, layer: 'ai-error', latencyMs, error: errorMessage });
|
|
393
|
-
return decision;
|
|
301
|
+
return fin({ decision: 'deny', confidence: 0, reasoning: `Security analysis failed: ${errorMessage}. Denying for safety.`, threatLevel: 'critical' }, 'ai-error', { skipCache: true, skipAnalytics: true, error: errorMessage });
|
|
394
302
|
}
|
|
395
303
|
}
|
|
396
304
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bouncer-integration.js","sourceRoot":"","sources":["../../../server/mcp/bouncer-integration.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bouncer-integration.js","sourceRoot":"","sources":["../../../server/mcp/bouncer-integration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../../../server/services/websocket/file-utils.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAG,MAAM,YAAY,CAAC;AAW9C,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA4DhD,CAAC;AAGF,eAAO,MAAM,cAAc,yBAAgC,CAAC;AAC5D,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAiB3D;AAiCD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAInE;AAYD,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,MAAM,EAAE,EAC3B,OAAO,GAAE,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAM,EACnE,UAAU,GAAE,MAAa,EACzB,QAAQ,GAAE,MAAW,EACrB,YAAY,GAAE,MAAU,GACvB,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CA2BvD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAY9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAOD,KAAK,iBAAiB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../../../server/services/websocket/file-utils.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAG,MAAM,YAAY,CAAC;AAW9C,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA4DhD,CAAC;AAGF,eAAO,MAAM,cAAc,yBAAgC,CAAC;AAC5D,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAiB3D;AAiCD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAInE;AAYD,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,MAAM,EAAE,EAC3B,OAAO,GAAE,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAM,EACnE,UAAU,GAAE,MAAa,EACzB,QAAQ,GAAE,MAAW,EACrB,YAAY,GAAE,MAAU,GACvB,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CA2BvD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAY9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAOD,KAAK,iBAAiB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAwEvK;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAavF"}
|