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 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. Offer to set up the **Security Bouncer** — say yes
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 Claude Code tool calls so you don't have to. It installs as a hook at `~/.claude/hooks/bouncer.sh` and applies to all Claude Code sessions.
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;AAyKD;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAiR7F;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"}
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
- // Check cache first (pattern-layer decisions and prior Haiku results)
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
- const latencyMs = Math.round(performance.now() - startTime);
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
- const latencyMs = Math.round(performance.now() - startTime);
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
- // Check critical threats (catastrophic operations like rm -rf /, fork bombs)
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
- const latencyMs = Math.round(performance.now() - startTime);
277
- const decision = {
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
- const latencyMs = Math.round(performance.now() - startTime);
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
- // Check if AI analysis is enabled
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
- const latencyMs = Math.round(performance.now() - startTime);
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
- const latencyMs = Math.round(performance.now() - startTime);
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
- logBouncerDecision(operation, decision.decision, decision.confidence, decision.reasoning, { context: request.context, threatLevel: decision.threatLevel, layer: 'haiku-ai', latencyMs });
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
- const isTimeout = errorMessage.includes('timed out');
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
- const decision = {
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
- // Fail-safe: deny on non-timeout AI failure
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;AA+CvK;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAiCvF"}
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"}