fix(launch): el passthrough del usuario va DELANTE, o computer-use no existe (#2)

`claudemesh launch -- --computer-use-mcp` daba `error: unknown option`, y
parecía que mesh y computer-use fuesen incompatibles. No lo son.

Algunos flags de Claude Code solo se reconocen en la PRIMERA posición de argv.
Matriz de 8 combinaciones contra claude 2.1.280:

  --computer-use-mcp --resume <id>                      OK
  --computer-use-mcp --dangerously-skip-permissions     OK
  --dangerously-skip-permissions --computer-use-mcp     unknown option
  --resume <id> --computer-use-mcp                      unknown option
  --dangerously-load-development-channels … --flag      unknown option

Da igual QUÉ flag vaya delante. Como `claudeArgs` ponía `...filtered` al final
—detrás de dev-channels, --session-id, --resume y --dangerously-skip-permissions—
el passthrough caía siempre en la posición donde no funciona.

Verificado por efecto tras el cambio, no por el `ok` del build: el argv real de
un lanzamiento es ahora

  claude --computer-use-mcp --dangerously-load-development-channels \
         server:claudemesh --session-id … --dangerously-skip-permissions

sin error de parseo, con la sesión conectada al mesh y respondiendo DMs.

Siete de las ocho líneas añadidas son comentario a propósito: el orden de ese
array es load-bearing y no se ve que lo sea. Quien lo reordene «por limpieza»
rompe computer-use sin que falle ningún test.

150 tests · tsc limpio.
This commit is contained in:
Alejandro Gutiérrez
2026-09-24 13:53:20 +01:00
committed by GitHub
parent 629fd1652d
commit 8001f47e26

View File

@@ -978,6 +978,14 @@ export async function runLaunch(flags: LaunchFlags, rawArgs: string[]): Promise<
// session-token registration could include it. Reuse here. // session-token registration could include it. Reuse here.
const claudeArgs = [ const claudeArgs = [
// `filtered` va DELANTE de todo a propósito. Algunos flags de Claude Code
// solo se reconocen en la PRIMERA posición de argv: `--computer-use-mcp`
// parsea bien como primer argumento y da `unknown option` con CUALQUIER
// flag por delante —dev-channels, --dangerously-skip-permissions o
// --resume, da igual cuál— (comprobado 2026-09-23 contra claude 2.1.280,
// matriz de 8 combinaciones). Mientras el passthrough del usuario fuese al
// final, computer-use era inalcanzable desde claudemesh.
...filtered,
"--dangerously-load-development-channels", "--dangerously-load-development-channels",
"server:claudemesh", "server:claudemesh",
...(passSessionIdFlag && claudeSessionId ? ["--session-id", claudeSessionId] : []), ...(passSessionIdFlag && claudeSessionId ? ["--session-id", claudeSessionId] : []),
@@ -985,7 +993,6 @@ export async function runLaunch(flags: LaunchFlags, rawArgs: string[]): Promise<
...(args.continueSession ? ["--continue"] : []), ...(args.continueSession ? ["--continue"] : []),
...(args.skipPermConfirm ? ["--dangerously-skip-permissions"] : []), ...(args.skipPermConfirm ? ["--dangerously-skip-permissions"] : []),
...(args.systemPrompt ? ["--system-prompt", args.systemPrompt] : []), ...(args.systemPrompt ? ["--system-prompt", args.systemPrompt] : []),
...filtered,
]; ];
// Resolve the full path to `claude` — when launched from a non-interactive // Resolve the full path to `claude` — when launched from a non-interactive