@elvatis_com/openclaw-cli-bridge-elvatis 3.4.0 → 3.4.1

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
@@ -2,7 +2,7 @@
2
2
 
3
3
  > OpenClaw plugin that bridges locally installed AI CLIs (Codex, Gemini, Claude Code, OpenCode, Pi) as model providers — with slash commands for instant model switching, restore, health testing, and model listing.
4
4
 
5
- **Current version:** `3.4.0`
5
+ **Current version:** `3.4.1`
6
6
 
7
7
  ---
8
8
 
package/SKILL.md CHANGED
@@ -68,4 +68,4 @@ On gateway restart, if any session has expired, a **WhatsApp alert** is sent aut
68
68
 
69
69
  See `README.md` for full configuration reference and architecture diagram.
70
70
 
71
- **Version:** 3.4.0
71
+ **Version:** 3.4.1
@@ -2,7 +2,7 @@
2
2
  "id": "openclaw-cli-bridge-elvatis",
3
3
  "slug": "openclaw-cli-bridge-elvatis",
4
4
  "name": "OpenClaw CLI Bridge",
5
- "version": "3.4.0",
5
+ "version": "3.4.1",
6
6
  "license": "MIT",
7
7
  "description": "Phase 1: openai-codex auth bridge. Phase 2: local HTTP proxy routing model calls through gemini/claude CLIs (vllm provider).",
8
8
  "providers": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elvatis_com/openclaw-cli-bridge-elvatis",
3
- "version": "3.4.0",
3
+ "version": "3.4.1",
4
4
  "description": "Bridges gemini, claude, and codex CLI tools as OpenClaw model providers. Reads existing CLI auth without re-login.",
5
5
  "type": "module",
6
6
  "openclaw": {
package/src/cli-runner.ts CHANGED
@@ -708,8 +708,8 @@ export async function runClaude(
708
708
 
709
709
  const stderr = result.stderr || "(no output)";
710
710
 
711
- // Session might be corrupted or expired — invalidate and retry with a fresh session
712
- if (stderr.includes("session") || stderr.includes("resume") || stderr.includes("not found")) {
711
+ // Session might be corrupted, expired, or locked by a zombie process — invalidate and retry
712
+ if (stderr.includes("session") || stderr.includes("resume") || stderr.includes("not found") || stderr.includes("already in use")) {
713
713
  debugLog("CLAUDE", `session ${session.sessionId.slice(0, 8)} invalid, creating fresh`, { error: stderr.slice(0, 100) });
714
714
  invalidateSession(model);
715
715
  // Retry once with a fresh session
@@ -724,6 +724,8 @@ export async function runClaude(
724
724
  recordSessionSuccess(model);
725
725
  return retry.stdout;
726
726
  }
727
+ // Retry also failed — invalidate the fresh session so the next request doesn't reuse it
728
+ invalidateSession(model);
727
729
  throw new Error(`claude exited ${retry.exitCode}: ${annotateExitError(retry.exitCode, retry.stderr || "(no output)", false, modelId)}`);
728
730
  }
729
731