Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
7a679a5
Add runtime abstraction and cc-connect provider
ashione Jun 7, 2026
414b7d1
fix(cc-connect): pass proxy env to codex
Jun 8, 2026
ec43625
feat(cc-connect): complete bundled codex runtime switch
Jun 8, 2026
06b16dd
fix(cc-connect): gate custom chat providers for codex
Jun 8, 2026
2574e13
fix(cc-connect): route channel status through runtime
Jun 8, 2026
72017b6
fix(cc-connect): open managed web admin
Jun 8, 2026
4de96d7
fix(cc-connect): sync codex modelhub responses config
Jun 8, 2026
788572a
fix(cc-connect): mirror channel platforms
Jun 8, 2026
9bcff5a
fix(cc-connect): surface channel history and provider headers
Jun 8, 2026
1a20ddc
fix(runtime): generalize runtime capability routing
Jun 9, 2026
a7766e8
fix(cc-connect): align agent events and workspaces
Jun 9, 2026
97bf1e5
fix(runtime): gate cc-connect selection behind dev mode
Jun 9, 2026
9140fe1
test(cc-connect): stabilize runtime CI fixtures
Jun 9, 2026
5598a95
test(e2e): wait longer for cold Electron windows
Jun 9, 2026
b512da7
fix(cc-connect): lazy initialize Codex bridge
Jun 9, 2026
27a7290
test(cc-connect): cover runtime switching contracts
Jun 9, 2026
a504a8c
fix(cc-connect): refresh channel sessions in renderer
Jun 9, 2026
a1e074e
docs(cc-connect): prune migration process notes
Jun 9, 2026
cf30df2
test(cc-connect): isolate e2e runtime bundles
Jun 9, 2026
ce1ebcc
fix(cc-connect): complete app run lifecycle from history
Jun 9, 2026
dca8ca4
fix(cc-connect): surface channel transcript history
Jun 9, 2026
4d1f29c
fix(cc-connect): preserve channel agent ownership
Jun 9, 2026
762fcb3
Merge remote-tracking branch 'origin/main' into feature/runtime-abstr…
ashione Jun 13, 2026
ac5795c
feat(runtime): expose cc-connect operation readiness
ashione Jun 13, 2026
9e378e4
fix(runtime): route cc-connect chat through codex
ashione Jun 13, 2026
6484d3a
fix(runtime): isolate cc-connect workspaces
ashione Jun 13, 2026
4c2f1e9
fix(runtime): reuse existing OpenClaw workspaces
ashione Jun 13, 2026
3b465b7
fix(runtime): route cc-connect chat through BridgePlatform
ashione Jun 14, 2026
96b19f9
fix(runtime): remove direct Codex CLI bridge
ashione Jun 14, 2026
e1b53c9
fix(runtime): enforce cc-connect owned Codex interactions
ashione Jun 14, 2026
b288593
fix(runtime): include cc-connect token usage history
ashione Jun 14, 2026
e634e02
feat(runtime): complete cc-connect Codex support
ashione Jun 20, 2026
60f7312
docs(runtime): align cc-connect design with architecture
ashione Jun 20, 2026
8b2fd1c
docs(runtime): refine cc-connect design boundaries
ashione Jun 20, 2026
3fba407
fix(chat): show active execution graph node
ashione Jun 20, 2026
3a8b9fe
fix(cc-connect): mirror Codex tool progress
ashione Jun 20, 2026
dff2867
fix(cc-connect): render readable Codex tool output
ashione Jun 20, 2026
e731057
fix(cc-connect): hide Codex tool output in graph
ashione Jun 20, 2026
982d89c
fix(cc-connect): persist mirrored tool history
ashione Jun 20, 2026
758e434
fix(cc-connect): surface channel session history
ashione Jun 20, 2026
b5e1ebe
fix(cc-connect): label channel sessions in history
ashione Jun 20, 2026
1e226b3
fix(cc-connect): include codex token usage history
ashione Jun 20, 2026
213ec47
Merge remote-tracking branch 'origin/main' into feature/runtime-abstr…
ashione Jul 11, 2026
5c81767
feat(runtime): harden cc-connect parity and validation
ashione Jul 11, 2026
5d6af0d
feat(runtime): complete cc-connect replacement workflows
ashione Jul 11, 2026
899f79c
test(channels): isolate runtime config store mock
ashione Jul 11, 2026
9ab6d75
test(runtime): strengthen live cc-connect validation
ashione Jul 11, 2026
53cdd94
fix(validation): reject all-skipped cc-connect gates
ashione Jul 12, 2026
fce55e1
test(e2e): stabilize session date fixture at midnight
ashione Jul 12, 2026
5e4988f
ci(release): make manual runtime smoke non-publishing
ashione Jul 12, 2026
2a8006c
fix(release): unblock cross-platform runtime smoke
ashione Jul 12, 2026
98567c3
fix(build): verify Windows runtime without shell
ashione Jul 12, 2026
ac58be2
fix(release): clear signing paths for unsigned smoke
ashione Jul 12, 2026
786d2d9
fix(build): keep Codex paths out of Windows shell
ashione Jul 12, 2026
7f337c8
fix(test): initialize Windows packaged smoke profile
ashione Jul 12, 2026
f4be0cf
fix(test): escape Windows runtime paths in smoke
ashione Jul 12, 2026
1855b6d
fix(auth): dispatch browser OAuth through active runtime
ashione Jul 12, 2026
6533996
fix(auth): replace stale Codex auth after re-login
ashione Jul 12, 2026
c3ce493
fix(runtime): enforce operation capability contract
ashione Jul 12, 2026
81a3442
fix(runtime): expose cc-connect profiles and doctor audits
ashione Jul 12, 2026
b97ce5d
test(runtime): attest packaged OAuth chat completion
ashione Jul 12, 2026
76156ff
test(runtime): prove channel cron shares native scheduler
ashione Jul 12, 2026
3c1a914
test(runtime): verify real Bridge card actions
ashione Jul 12, 2026
5a9cb7f
feat(runtime): deliver cc-connect bridge media
ashione Jul 12, 2026
7170818
fix(runtime): complete cc-connect preview lifecycle
ashione Jul 12, 2026
28fb18a
feat(runtime): support cc-connect card choices
ashione Jul 12, 2026
42cf960
fix(validation): prove Codex OAuth token refresh
ashione Jul 12, 2026
3bf2cb3
feat(runtime): unify token usage contract
ashione Jul 12, 2026
ffef2eb
test(runtime): prove scheduled cron delivery
ashione Jul 12, 2026
aba7db1
fix(validation): redact local OAuth evidence paths
ashione Jul 12, 2026
1622afb
fix(runtime): observe cc-connect cron completion
ashione Jul 12, 2026
cf67a55
fix(cron): refresh asynchronous run completion
ashione Jul 12, 2026
8ce4609
test(storage): prove canonical data migration
ashione Jul 12, 2026
895e537
test(storage): normalize migration source paths
ashione Jul 13, 2026
596e8b0
fix(runtime): lock shared data before startup
ashione Jul 13, 2026
73611c6
test(runtime): compare shared lock to Electron main pid
ashione Jul 13, 2026
d82010c
test(runtime): prove live Feishu canonical ownership
ashione Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions .env.cc-connect.local.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Local real cc-connect validation template.
# Save real values in .env.cc-connect.local. That file is gitignored.

# Required for real OAuth, packaged OAuth, and Feishu E2E paths.
# Point at the auth.json that may be copied into an isolated managed CODEX_HOME.
# Use ~/.codex/auth.json only when that import is intentional.
CLAWX_REAL_CODEX_AUTH_JSON=

# Required for OpenAI API-key provider/model chat validation.
# The verifier maps this to child-process OPENAI_API_KEY without writing the value to reports.
CLAWX_REAL_OPENAI_API_KEY=

# Optional: override the model used by the real OpenAI API-key smoke.
# Leave empty to use the test default.
CLAWX_REAL_OPENAI_MODEL=

# Optional: set OPENAI_API_KEY directly instead when external tools need the standard name.
# OPENAI_API_KEY=

# Required for Feishu/Lark live channel lifecycle validation.
CLAWX_REAL_FEISHU_APP_ID=
CLAWX_REAL_FEISHU_APP_SECRET=
# A real user/open_id accepted by the bot. The lifecycle test verifies that
# cc-connect preserves this admin together with ClawX's local bridge admin.
CLAWX_REAL_FEISHU_ADMIN_FROM=

# Optional Feishu/Lark settings.
# Values for CLAWX_REAL_FEISHU_DOMAIN: feishu, lark, cn, global, or a full API base URL.
CLAWX_REAL_FEISHU_DOMAIN=feishu
CLAWX_REAL_FEISHU_ACCOUNT_ID=real_feishu_bot
CLAWX_REAL_FEISHU_ALLOW_FROM=

# Optional manual Feishu/Lark inbound delivery smoke.
# Set this only when a sandbox tenant chat can send the marker to the configured bot
# while the E2E test is waiting.
CLAWX_REAL_FEISHU_INBOUND_E2E=
CLAWX_REAL_FEISHU_INBOUND_MARKER=
CLAWX_REAL_FEISHU_INBOUND_TIMEOUT_MS=180000
148 changes: 140 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ on:
workflow_dispatch:
inputs:
version:
description: 'Version to release (e.g., 1.0.0)'
description: 'Version label for an unsigned smoke build (e.g., 1.0.0-beta.smoke)'
required: true

permissions:
Expand All @@ -31,6 +31,7 @@ jobs:
release:
needs: validate-release
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
Expand Down Expand Up @@ -114,21 +115,43 @@ jobs:
if: matrix.platform == 'mac'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CSC_LINK: ${{ secrets.MAC_CERTS }}
CSC_KEY_PASSWORD: ${{ secrets.MAC_CERTS_PASSWORD }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
CSC_IDENTITY_AUTO_DISCOVERY: ${{ github.event_name == 'workflow_dispatch' && 'false' || 'true' }}
CSC_LINK: ${{ github.event_name == 'push' && secrets.MAC_CERTS || '' }}
CSC_KEY_PASSWORD: ${{ github.event_name == 'push' && secrets.MAC_CERTS_PASSWORD || '' }}
APPLE_ID: ${{ github.event_name == 'push' && secrets.APPLE_ID || '' }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ github.event_name == 'push' && secrets.APPLE_APP_SPECIFIC_PASSWORD || '' }}
APPLE_TEAM_ID: ${{ github.event_name == 'push' && secrets.APPLE_TEAM_ID || '' }}
run: |
ulimit -n 65536
echo "File descriptor limit: $(ulimit -n)"
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
unset CSC_LINK CSC_KEY_PASSWORD APPLE_ID APPLE_APP_SPECIFIC_PASSWORD APPLE_TEAM_ID
fi
pnpm run package:mac

- name: Verify macOS packaged runtime resources
if: matrix.platform == 'mac'
run: |
pnpm run verify:packaged-runtime-resources -- --resources=release/mac/ClawX.app/Contents/Resources --platform=darwin --arch=x64
pnpm run verify:packaged-runtime-resources -- --resources=release/mac-arm64/ClawX.app/Contents/Resources --platform=darwin --arch=arm64

- name: Smoke native macOS packaged cc-connect runtime
if: matrix.platform == 'mac'
run: pnpm run smoke:cc-connect:packaged -- --allow-unsigned=${{ github.event_name == 'workflow_dispatch' && '1' || '0' }}

# Windows specific steps
- name: Build Windows
if: matrix.platform == 'win'
run: pnpm run package:win

- name: Verify Windows packaged runtime resources
if: matrix.platform == 'win'
run: pnpm run verify:packaged-runtime-resources -- --resources=release/win-unpacked/resources --platform=win32 --arch=x64

- name: Smoke native Windows packaged cc-connect runtime
if: matrix.platform == 'win'
run: pnpm run smoke:cc-connect:packaged

# Detect release channel from tag to skip code signing for alpha/beta builds
- name: Detect Windows release channel
if: matrix.platform == 'win'
Expand Down Expand Up @@ -276,6 +299,23 @@ jobs:
if: matrix.platform == 'linux'
run: pnpm run package:linux

- name: Verify Linux packaged runtime resources
if: matrix.platform == 'linux'
run: |
pnpm run verify:packaged-runtime-resources -- --resources=release/linux-unpacked/resources --platform=linux --arch=x64
pnpm run verify:packaged-runtime-resources -- --resources=release/linux-arm64-unpacked/resources --platform=linux --arch=arm64

- name: Smoke native Linux x64 packaged cc-connect runtime
if: matrix.platform == 'linux'
run: xvfb-run -a pnpm run smoke:cc-connect:packaged

- name: Upload native runtime smoke evidence
uses: actions/upload-artifact@v4
with:
name: runtime-smoke-${{ matrix.platform }}-native
path: artifacts/cc-connect/packaged-smoke-*.json
retention-days: 7

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
Expand All @@ -292,12 +332,103 @@ jobs:
!release/builder-debug.yml
retention-days: 7

runtime-smoke-macos-x64:
needs: validate-release
runs-on: macos-15-intel
steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '24'
cache: 'pnpm'

- name: Prefer HTTPS for public GitHub git dependencies
run: |
git config --global "url.https://github.com/.insteadOf" "git@github.com:"
git config --global --add "url.https://github.com/.insteadOf" "ssh://git@github.com/"

- name: Install dependencies
run: pnpm install

- name: Build native macOS x64 unpacked app
env:
CSC_IDENTITY_AUTO_DISCOVERY: 'false'
SKIP_PREINSTALLED_SKILLS: '1'
run: |
pnpm run package
node scripts/run-electron-builder.mjs --mac dir --x64 --publish never

- name: Verify and smoke native macOS x64 runtime
run: |
pnpm run verify:packaged-runtime-resources -- --resources=release/mac/ClawX.app/Contents/Resources --platform=darwin --arch=x64
pnpm run smoke:cc-connect:packaged -- --allow-unsigned=${{ github.event_name == 'workflow_dispatch' && '1' || '0' }}

- name: Upload macOS x64 runtime smoke evidence
uses: actions/upload-artifact@v4
with:
name: runtime-smoke-macos-x64
path: artifacts/cc-connect/packaged-smoke-darwin-x64.json
retention-days: 7

runtime-smoke-linux-arm64:
needs: validate-release
runs-on: ubuntu-24.04-arm
steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '24'
cache: 'pnpm'

- name: Prefer HTTPS for public GitHub git dependencies
run: |
git config --global "url.https://github.com/.insteadOf" "git@github.com:"
git config --global --add "url.https://github.com/.insteadOf" "ssh://git@github.com/"

- name: Install dependencies and X virtual framebuffer
run: |
pnpm install
sudo apt-get update
sudo apt-get install -y xvfb

- name: Build native Linux arm64 unpacked app
env:
SKIP_PREINSTALLED_SKILLS: '1'
run: |
pnpm run package
node scripts/run-electron-builder.mjs --linux dir --arm64 --publish never

- name: Verify and smoke native Linux arm64 runtime
run: |
pnpm run verify:packaged-runtime-resources -- --resources=release/linux-arm64-unpacked/resources --platform=linux --arch=arm64
xvfb-run -a pnpm run smoke:cc-connect:packaged

- name: Upload Linux arm64 runtime smoke evidence
uses: actions/upload-artifact@v4
with:
name: runtime-smoke-linux-arm64
path: artifacts/cc-connect/packaged-smoke-linux-arm64.json
retention-days: 7

# ──────────────────────────────────────────────────────────────
# Job: Publish to GitHub Releases
# ──────────────────────────────────────────────────────────────
publish:
needs: release
needs: [release, runtime-smoke-macos-x64, runtime-smoke-linux-arm64]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')

steps:
- name: Download release artifacts only
Expand Down Expand Up @@ -389,8 +520,9 @@ jobs:
# releases/vX.Y.Z/ → permanent archive, never deleted
# ──────────────────────────────────────────────────────────────
upload-oss:
needs: release
needs: [release, runtime-smoke-macos-x64, runtime-smoke-linux-arm64]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')

steps:
- name: Download release artifacts only
Expand Down
Loading
Loading