@elvatis_com/openclaw-cli-bridge-elvatis 1.9.1 → 2.1.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.
@@ -7,7 +7,7 @@ _Last updated: 2026-03-13_
7
7
 
8
8
  | Status | Count |
9
9
  |---------|-------|
10
- | Done | 13 |
10
+ | Done | 16 |
11
11
  | Ready | 0 |
12
12
  | Blocked | 0 |
13
13
  <!-- /SECTION: summary -->
@@ -30,6 +30,9 @@ _No blocked tasks._
30
30
 
31
31
  | Task | Title | Date |
32
32
  |-------|--------------------------------------------------------------------|------------|
33
+ | T-016 | Issue #2: Codex auth auto-import into agent auth store | 2026-03-19 |
34
+ | T-015 | Issue #4: Background session mgmt with workdir isolation | 2026-03-19 |
35
+ | T-014 | Issue #6: Workdir isolation (createIsolatedWorkdir, cleanup, sweep) | 2026-03-19 |
33
36
  | T-013 | Fix cookie expiry tracking — longest-lived auth cookie (all 4) | 2026-03-13 |
34
37
  | T-012 | Persistent browser fallback for Claude/Gemini/ChatGPT (no CDP) | 2026-03-12 |
35
38
  | T-011 | Session-safe staged model switching (/cli-apply, /cli-pending) | 2026-03-11 |
@@ -1,55 +1,60 @@
1
1
  # STATUS — openclaw-cli-bridge-elvatis
2
2
 
3
- ## Current Version: 1.7.3
3
+ ## Current Version: 2.1.0
4
4
 
5
- ## All 4 Providers Available persistent Chromium profiles
6
- | Provider | Status | Models | Login Cmd | Cookie Expiry |
7
- |---|---|---|---|---|
8
- | Grok | ✅ | web-grok/grok-3, grok-3-fast, grok-3-mini, grok-3-mini-fast | /grok-login | ~178d |
9
- | Gemini | | web-gemini/gemini-2-5-pro, gemini-2-5-flash, gemini-3-pro, gemini-3-flash | /gemini-login | ~398d |
10
- | Claude.ai | | web-claude/claude-sonnet, claude-opus, claude-haiku | /claude-login | ~364d |
11
- | ChatGPT | ✅ | web-chatgpt/gpt-4o, gpt-4o-mini, gpt-4.1, o3, o4-mini, gpt-5, gpt-5-mini | /chatgpt-login | ~6d (re-run /chatgpt-login to refresh) |
5
+ - **npm:** @elvatis_com/openclaw-cli-bridge-elvatis (not yet published to npm)
6
+ - **ClawHub:** openclaw-cli-bridge-elvatis@1.9.2
7
+ - **GitHub:** https://github.com/elvatis/openclaw-cli-bridge-elvatis/releases/tag/v1.9.2
8
+
9
+ ## CLI Model Token Limits (corrected in v1.9.2)
10
+ | Model | Context Window | Max Output |
11
+ |---|---|---|
12
+ | Claude Opus 4.6 (CLI) | 1,000,000 | 128,000 |
13
+ | Claude Sonnet 4.6 (CLI) | 1,000,000 | 64,000 |
14
+ | Claude Haiku 4.5 (CLI) | 200,000 | 64,000 |
15
+ | Gemini 2.5 Pro (CLI) | 1,048,576 | 65,535 |
16
+ | Gemini 2.5 Flash (CLI) | 1,048,576 | 65,535 |
17
+ | Gemini 3 Pro Preview (CLI) | 1,048,576 | 65,536 |
18
+ | Gemini 3 Flash Preview (CLI) | 1,048,576 | 65,536 |
19
+
20
+ ## Architecture
21
+ - **Proxy server:** `http://127.0.0.1:31337/v1` (OpenAI-compatible)
22
+ - **OpenClaw connects via** `vllm` provider with `api: openai-completions`
23
+ - **CLI models** (`cli-claude/*`, `cli-gemini/*`): plain text completions only — NO tool/function call support
24
+ - **Web-session models** (`web-grok/*`, `web-gemini/*`): browser-based, require `/xxx-login`
25
+ - **Codex models** (`openai-codex/*`): OAuth auth bridge
26
+ - **BitNet** (`local-bitnet/*`): local CPU inference
27
+
28
+ ## Tool Support Limitation
29
+ CLI models explicitly reject tool/function call requests (HTTP 400):
30
+ ```
31
+ Model cli-claude/claude-opus-4-6 does not support tool/function calls.
32
+ Use a native API model (e.g. github-copilot/gpt-5-mini) for agents that need tools.
33
+ ```
34
+ This is by design — CLI tools output plain text only.
35
+
36
+ ## All 4 Browser Providers
37
+ | Provider | Models | Login Cmd | Profile Dir |
38
+ |---|---|---|---|
39
+ | Grok | web-grok/grok-3, grok-3-fast, grok-3-mini, grok-3-mini-fast | /grok-login | ~/.openclaw/grok-profile/ |
40
+ | Gemini | web-gemini/gemini-2-5-pro, gemini-2-5-flash, gemini-3-pro, gemini-3-flash | /gemini-login | ~/.openclaw/gemini-profile/ |
41
+ | Claude | web-claude/* (removed in v1.6.x) | /claude-login | ~/.openclaw/claude-profile/ |
42
+ | ChatGPT | web-chatgpt/* (removed in v1.6.x) | /chatgpt-login | ~/.openclaw/chatgpt-profile/ |
12
43
 
13
44
  ## Stats
14
- - 22 total models (6 CLI + 16 web-session)
15
- - 96/96 tests green (8 test files)
16
- - All 4 providers use launchPersistentContext — sessions survive gateway restarts
17
- - /bridge-status shows cookie-based status (independent of in-memory context)
18
-
19
- ## Architecture: Browser Lifecycle
20
- - **Profile dirs:** `~/.openclaw/{grok,gemini,claude,chatgpt}-profile/`
21
- - **On plugin start:** startup restore attempts headless reconnect from saved profiles (5s delay)
22
- - **On /xxx-login:** headed browser, user logs in, cookies baked to profile automatically
23
- - **On request (no in-memory ctx):** proxy lazy-launches persistent context on first request
24
- - **On /xxx-logout:** closes context + deletes profile + clears expiry file
25
- - **bridge-status:** uses cookie expiry files as source of truth (not in-memory state)
26
- - ✅ active — browser connected and verified
27
- - 🟡 logged in, browser not loaded — cookies valid, lazy-loads on first request
28
- - 🔴 session expiredneeds /xxx-login
29
- - never logged in
30
-
31
- ## Cookie Expiry Tracking (fixed in v1.7.3)
32
- All 4 providers now track the **longest-lived** auth cookie instead of the shortest:
33
- - Claude: `sessionKey` (~1 year) — was `__cf_bm` (Cloudflare, ~30 min) causing false alerts
34
- - ChatGPT: longest of `__Secure-next-auth.session-token` / `_puid` / `oai-did`
35
- - Gemini: longest of `__Secure-1PSID` / `__Secure-3PSID` / `SID`
36
- - Grok: longest of `sso` / `sso-rw`
37
-
38
- ## Release History
39
- - v1.7.3 (2026-03-13): Fix cookie expiry tracking — use longest-lived auth cookie for all 4 providers
40
- - v1.7.2 (2026-03-13): Cookie-first startup restore (skip fragile browser selector check)
41
- - v1.7.1 (2026-03-13): /status HTML dashboard at :31337
42
- - v1.7.0 (2026-03-13): Startup restore timeout fix, auto-relogin, keep-alive verification, vitest suite
43
- - v1.6.1 (2026-03-13): Fix /bridge-status — use cookie expiry as source of truth
44
- - v1.6.0 (2026-03-13): Persistent Chromium profiles for all 4 providers (Claude web + ChatGPT)
45
- - v1.5.1 (2026-03-12): Fix hardcoded plugin version
46
- - v1.5.0 (2026-03-12): Remove /claude-login and /chatgpt-login (pre-v1.6.0 interim)
47
- - v1.4.0 (2026-03-12): Persistent browser fallback for Claude/Gemini/ChatGPT (no CDP required)
48
- - v1.3.5 (2026-03-12): Startup restore guard (SIGUSR1 OOM fix)
49
- - v1.3.0 (2026-03-11): Browser auto-reconnect after gateway restart
50
- - v1.0.0 (2026-03-11): All 4 providers headless — 96/96 tests
51
-
52
- ## Next Steps
53
- - /chatgpt-login should be re-run soon (~6d left on _puid cookie)
54
- - Gemini model switching via UI (2.5 Pro vs Flash vs 3)
55
- - Context-window management for long conversations
45
+ - 22+ total models (7 CLI + 5 Codex + 4 Grok + 4 Gemini + 1 BitNet)
46
+ - Persistent Chromium profiles survive gateway restarts
47
+ - /bridge-status shows cookie-based status
48
+
49
+ ## Release History (recent)
50
+ - v2.1.0 (2026-03-19): Issue #6 workdir isolation, Issue #4 session mgmt enhancements, Issue #2 codex auth auto-import
51
+ - v2.0.0: Major version bump
52
+ - v1.9.2 (2026-03-15): Fix maxTokens/contextWindow for all CLI_MODELS (were 8192, now correct per vendor specs)
53
+ - v1.9.1: Previous stable
54
+ - v1.7.3 (2026-03-13): Fix cookie expiry tracking
55
+ - v1.7.0 (2026-03-13): Startup restore timeout fix, auto-relogin, vitest suite
56
+ - v1.6.0 (2026-03-13): Persistent Chromium profiles for all 4 providers
57
+
58
+ ## Known Issues
59
+ - CLI models cannot do tool calls (by design plain text proxy)
60
+ - Opus via CLI proxy may halluzinate XML tool-call tags when maxTokens was too low (fixed in v1.9.2)
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: Bug Report
3
+ about: Report a bug to help us improve
4
+ labels: bug
5
+ ---
6
+
7
+ **Describe the bug**
8
+ A clear description of what the bug is.
9
+
10
+ **To Reproduce**
11
+ Steps to reproduce:
12
+ 1. ...
13
+ 2. ...
14
+
15
+ **Expected behavior**
16
+ What you expected to happen.
17
+
18
+ **Additional context**
19
+ Any other context about the problem.
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: Feature Request
3
+ about: Suggest an idea for this project
4
+ labels: enhancement
5
+ ---
6
+
7
+ **Is your feature request related to a problem?**
8
+ Describe the problem.
9
+
10
+ **Describe the solution you'd like**
11
+ What you want to happen.
12
+
13
+ **Additional context**
14
+ Any other context or screenshots.
@@ -0,0 +1,11 @@
1
+ ## Summary
2
+
3
+ Describe the change and why it is needed.
4
+
5
+ Closes #
6
+
7
+ ## Checklist
8
+
9
+ - [ ] Tests pass (if applicable)
10
+ - [ ] Documentation updated if behavior changes
11
+ - [ ] No secrets in the commit history
@@ -0,0 +1,11 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "npm"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ day: "monday"
8
+ open-pull-requests-limit: 5
9
+ labels:
10
+ - "dependencies"
11
+
@@ -0,0 +1,68 @@
1
+ name: Auto-Publish (npm + ClawHub)
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ publish-npm:
12
+ name: Publish to npm
13
+ runs-on: ubuntu-latest
14
+
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+
18
+ - uses: actions/setup-node@v4
19
+ with:
20
+ node-version: 22
21
+ registry-url: "https://registry.npmjs.org"
22
+
23
+ - run: npm ci --ignore-scripts
24
+
25
+ - name: Build (if script exists)
26
+ run: npm run build --if-present || true
27
+
28
+ - name: Verify version matches tag
29
+ run: |
30
+ PKG_VERSION=$(node -p "require('./package.json').version")
31
+ TAG_VERSION="${GITHUB_REF_NAME#v}"
32
+ if [ "$PKG_VERSION" != "$TAG_VERSION" ]; then
33
+ echo "::error::package.json version ($PKG_VERSION) != tag ($TAG_VERSION)"
34
+ exit 1
35
+ fi
36
+
37
+ - name: Publish to npm
38
+ run: npm publish --access public
39
+ env:
40
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
41
+
42
+ publish-clawhub:
43
+ name: Publish to ClawHub
44
+ runs-on: ubuntu-latest
45
+ needs: publish-npm
46
+
47
+ steps:
48
+ - uses: actions/checkout@v4
49
+
50
+ - uses: actions/setup-node@v4
51
+ with:
52
+ node-version: 22
53
+
54
+ - run: npm install -g clawhub
55
+
56
+ - name: Authenticate and publish
57
+ run: |
58
+ SLUG=$(node -p "require('./package.json').name.replace('@elvatis_com/', '')")
59
+ VERSION=$(node -p "require('./package.json').version")
60
+ TMPDIR=$(mktemp -d)/$SLUG
61
+ mkdir -p "$TMPDIR"
62
+ rsync -a --exclude=node_modules --exclude=.git --exclude=dist --exclude=package-lock.json --exclude=.github ./ "$TMPDIR/"
63
+ clawhub login --token "$CLAWHUB_TOKEN" --no-browser
64
+ clawhub publish "$TMPDIR" --slug "$SLUG" --version "$VERSION"
65
+ rm -rf "$(dirname $TMPDIR)"
66
+ env:
67
+ CLAWHUB_TOKEN: ${{ secrets.CLAWHUB_TOKEN }}
68
+
@@ -0,0 +1,40 @@
1
+ name: "CodeQL"
2
+ on:
3
+ push:
4
+ branches: [main, master]
5
+ pull_request:
6
+ branches: [main, master]
7
+ schedule:
8
+ - cron: "0 4 * * 1"
9
+
10
+ jobs:
11
+ analyze:
12
+ name: Analyze
13
+ runs-on: ubuntu-latest
14
+ permissions:
15
+ actions: read
16
+ contents: read
17
+ security-events: write
18
+
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ language: ["javascript-typescript"]
23
+
24
+ steps:
25
+ - name: Checkout repository
26
+ uses: actions/checkout@v4
27
+
28
+ - name: Initialize CodeQL
29
+ uses: github/codeql-action/init@v3
30
+ with:
31
+ languages: ${{ matrix.language }}
32
+
33
+ - name: Autobuild
34
+ uses: github/codeql-action/autobuild@v3
35
+
36
+ - name: Perform CodeQL Analysis
37
+ uses: github/codeql-action/analyze@v3
38
+ with:
39
+ category: "/language:${{ matrix.language }}"
40
+
@@ -0,0 +1,38 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in our
6
+ community a harassment-free experience for everyone, regardless of age, body
7
+ size, visible or invisible disability, ethnicity, sex characteristics, gender
8
+ identity and expression, level of experience, education, socio-economic status,
9
+ nationality, personal appearance, race, caste, color, religion, or sexual
10
+ identity and orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to a positive environment:
15
+
16
+ - Using welcoming and inclusive language
17
+ - Being respectful of differing viewpoints and experiences
18
+ - Gracefully accepting constructive criticism
19
+ - Focusing on what is best for the community
20
+ - Showing empathy towards other community members
21
+
22
+ Examples of unacceptable behavior:
23
+
24
+ - The use of sexualized language or imagery and unwelcome sexual attention
25
+ - Trolling, insulting or derogatory comments, and personal or political attacks
26
+ - Public or private harassment
27
+ - Publishing others' private information without explicit permission
28
+
29
+ ## Enforcement
30
+
31
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
32
+ reported to the project team at **conduct@elvatis.com**. All complaints will
33
+ be reviewed and investigated promptly and fairly.
34
+
35
+ ## Attribution
36
+
37
+ This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org),
38
+ version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct/
package/CONTRIBUTING.md CHANGED
@@ -1,116 +1,23 @@
1
- # Contributing & Release Checklist
1
+ # Contributing
2
2
 
3
- ## 🚨 Pflicht-Workflow vor jedem Release
3
+ Thanks for your interest in contributing!
4
4
 
5
- **Kein Publish ohne erfolgreichen `/bridge-status` Test!**
5
+ ## Getting Started
6
6
 
7
- ### 1. Lint + Build
7
+ 1. Fork the repository and create a feature branch from `main`.
8
+ 2. Install dependencies (if applicable): `npm ci`
9
+ 3. Run tests (if applicable): `npm test`
10
+ 4. Keep changes focused and small.
8
11
 
9
- ```bash
10
- npm run lint # ESLint — 0 errors required, warnings ok
11
- npm run build # Exit 0 erwartet — TS-Fehler sind ok (--noEmitOnError false), aber Exit != 0 blockiert
12
- ```
12
+ ## Pull Request Process
13
13
 
14
- ### 2. Gateway neu starten
14
+ 1. Open a Pull Request against `main` with a clear description.
15
+ 2. Link any relevant issues.
16
+ 3. Ensure tests pass and documentation is updated.
15
17
 
16
- ```bash
17
- openclaw gateway restart
18
- # oder via Chat: gateway restart
19
- ```
18
+ ## Code Style
20
19
 
21
- ### 3. Smoke Tests (alle müssen grün sein)
20
+ - Follow existing patterns in the codebase.
21
+ - No em dashes in comments or documentation.
22
22
 
23
- ```
24
- /bridge-status → Grok ✅ + Gemini ✅ (beide connected, nicht "not connected")
25
- /cli-test → CLI bridge OK, Latency < 10s
26
- /grok-status → valid (Cookie-Expiry prüfen)
27
- /gemini-status → valid (Cookie-Expiry prüfen)
28
- ```
29
-
30
- **Erst wenn alle Tests grün sind → publishen!**
31
-
32
- ### 4. Publish (Reihenfolge einhalten)
33
-
34
- ```bash
35
- # 1. Version bump in package.json + openclaw.plugin.json (beide!)
36
- # 2. Git commit + tag
37
- git add package.json openclaw.plugin.json
38
- git commit -m "chore: bump to vX.Y.Z — <kurze Beschreibung>"
39
- git tag vX.Y.Z
40
- git push origin main vX.Y.Z
41
-
42
- # 3. GitHub Release erstellen (Tag ≠ Release!)
43
- gh release create vX.Y.Z --title "vX.Y.Z — <Titel>" --notes "<Notes>" --latest
44
-
45
- # 4. npm publish
46
- npm publish --access public
47
-
48
- # 5. ClawHub publish (aus tmp-Dir, nicht direkt aus Repo)
49
- TMPDIR=$(mktemp -d)
50
- rsync -a --exclude='node_modules' --exclude='.git' --exclude='dist' \
51
- --exclude='package-lock.json' --exclude='test' ./ "$TMPDIR/"
52
- clawhub publish "$TMPDIR" --slug openclaw-cli-bridge-elvatis --version X.Y.Z \
53
- --tags "latest" --changelog "<Changelog>"
54
- ```
55
-
56
- > ⚠️ **ClawHub Bug (CLI v0.7.0):** `acceptLicenseTerms: invalid value` — Workaround: `publish.js` vor dem Publish patchen und danach zurücksetzen. Details in AGENTS.md / MEMORY.md des Workspaces.
57
-
58
- ---
59
-
60
- ## Versionsstellen — alle prüfen vor Release
61
-
62
- ```bash
63
- grep -rn "X\.Y\.Z\|version" \
64
- --include="*.md" --include="*.json" \
65
- --exclude-dir=node_modules --exclude-dir=dist --exclude-dir=.git \
66
- | grep -i "version"
67
- ```
68
-
69
- Typische Stellen:
70
- - `package.json` → `"version": "..."` (Hauptquelle — `index.ts` liest automatisch daraus)
71
- - `openclaw.plugin.json` → `"version": "..."`
72
- - `README.md` → `**Current version:** ...` (falls vorhanden)
73
-
74
- > **Seit v1.9.0:** `index.ts` liest die Version automatisch aus `package.json` — kein manuelles Sync mehr nötig für die Runtime-Version.
75
-
76
- ---
77
-
78
- ## Breaking Changes
79
-
80
- Bei Breaking Changes (Major oder entfernte Commands):
81
- - Version-Bump auf nächste **Minor** (z.B. 1.4.x → 1.5.0)
82
- - GitHub Release Notes: `## ⚠️ Breaking Change` Sektion
83
- - README Changelog: Was wurde entfernt + warum
84
- - `/bridge-status` muss die entfernten Provider NICHT mehr zeigen
85
-
86
- ---
87
-
88
- ## TS-Build-Fehler
89
-
90
- Die folgenden TS-Fehler sind bekannt und ignorierbar (kein Runtime-Problem):
91
- - `TS2307: Cannot find module 'openclaw/plugin-sdk'` — Typ-Deklarationen fehlen in npm-Paket
92
- - `TS2339: Property 'handler' does not exist on type 'unknown'` — folgt aus TS2307
93
- - `TS7006: Parameter implicitly has 'any' type` — minor, kein Effekt
94
-
95
- Build läuft mit `--noEmitOnError false` durch. `npm run build` → Exit 0 ist das Kriterium, nicht null TS-Fehler.
96
-
97
- ---
98
-
99
- ## Cookie Expiry Store (seit v1.9.0)
100
-
101
- Cookie-Expiry-Daten werden jetzt in **einer** Datei gespeichert:
102
- - `~/.openclaw/cookie-expiry.json` — enthält alle 4 Provider (grok, gemini, claude, chatgpt)
103
-
104
- Legacy-Dateien (`grok-cookie-expiry.json`, `gemini-cookie-expiry.json`, etc.) werden beim ersten Start automatisch migriert und gelöscht.
105
-
106
- ---
107
-
108
- ## Model Fallback Chain (seit v1.9.0)
109
-
110
- Wenn ein CLI-Modell fehlschlägt (Timeout, Fehler), wird automatisch ein leichteres Modell versucht:
111
- - `gemini-2.5-pro` → `gemini-2.5-flash`
112
- - `gemini-3-pro-preview` → `gemini-3-flash-preview`
113
- - `claude-opus-4-6` → `claude-sonnet-4-6`
114
- - `claude-sonnet-4-6` → `claude-haiku-4-5`
115
-
116
- Die Response enthält das tatsächlich verwendete Modell im `model`-Feld.
23
+ For major changes, open an issue first to discuss design and scope.