Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
56f527b
feat: gateway integration — base path, auth bypass, Home button, shel…
GeorgeZhiXu Feb 23, 2026
a579042
Merge remote-tracking branch 'upstream/main'
GeorgeZhiXu Feb 24, 2026
5bf106e
ci: add GitHub Actions workflow for auto-deploy to Mac Mini
GeorgeZhiXu Feb 24, 2026
c6e441d
fix(ci): handle existing non-git prod directory on first deploy
GeorgeZhiXu Feb 24, 2026
60d959e
fix(ci): set VITE_BASE_PATH at build time for correct asset paths
GeorgeZhiXu Feb 24, 2026
97c086d
fix: use base path prefix for logo.svg and manifest.json
GeorgeZhiXu Feb 24, 2026
02027fe
fix(ci): set VITE_IS_PLATFORM=true at build time for auth bypass
GeorgeZhiXu Feb 24, 2026
06b3b05
fix: add crossorigin credentials to manifest link for auth gateway
GeorgeZhiXu Feb 24, 2026
1420321
fix: add base path prefix to manifest.json icon paths
GeorgeZhiXu Feb 24, 2026
75569c8
feat: add opus[1m] model and read default from ~/.claude/settings.json
GeorgeZhiXu Feb 24, 2026
688899f
fix: prioritize CLI model config over localStorage
GeorgeZhiXu Feb 24, 2026
8e4cbe4
Merge upstream/main: resolve conflicts, keep both model mapper and Ge…
Apr 1, 2026
9ae105c
feat: add Kiro (AWS Agentic IDE) as a 5th provider
Mar 23, 2026
3ec5aec
fix: address CodeRabbit review — correct CLI flags, pagination, JSONL…
Mar 23, 2026
c370a0d
fix: add missing Kiro i18n keys across all 6 locales
Mar 23, 2026
62705bb
fix: resolve TypeScript errors in settings agent config records
Mar 23, 2026
225462e
fix: wire Kiro auth through all 4 settings layers
Mar 23, 2026
0c63325
fix: remove stray closing brace in cli-auth.js causing SyntaxError
artselects Apr 2, 2026
4fc2b6f
fix: update deploy health check to use new port 8040
artselects Apr 2, 2026
d2481f5
fix: add missing Home icon import and fix service worker path
artselects Apr 2, 2026
af2e110
fix: use dynamic base path in service worker for subpath deployment
artselects Apr 2, 2026
36334d3
Merge remote-tracking branch 'upstream/main'
Apr 6, 2026
56b7da7
fix: kiro CLI integration and multi-root workspace support
Apr 6, 2026
543e7cf
feat: kiro-sdk package and ACP-based kiro-cli integration
Apr 6, 2026
cfda01d
test: add unit tests for kiro-sdk (19 tests)
Apr 6, 2026
0263bea
test: add integration tests for kiro-sdk (real kiro-cli acp)
Apr 6, 2026
d930141
docs: update kiro-sdk README with full API reference, testing, and kn…
Apr 6, 2026
2e6ac33
fix: acp protocol corrections for kiro-cli 1.29.5
Apr 8, 2026
c4307da
Merge remote-tracking branch 'upstream/main'
artselects Apr 11, 2026
bdee6b9
chore: add upstream sync workflow and deployment docs
artselects Apr 11, 2026
ddce927
feat: add Python SDK (kiro-sdk-python) and update TS SDK
Apr 14, 2026
349ddcb
fix: stream messages immediately instead of waiting for prompt RPC re…
Apr 14, 2026
2cb5817
fix: broken notification handler + missing stream_end in kiro integra…
Apr 14, 2026
47aee79
test: add SDK public API integration test for TS kiro-sdk
Apr 14, 2026
19b3fb7
fix: session reuse and first-message truncation
Apr 14, 2026
a82f9e7
fix: rebuild kiro-sdk dist and track it in git
Apr 14, 2026
3427284
build: remove dist/ from git, build SDK via lifecycle scripts
Apr 14, 2026
3c45239
fix: substitute %VITE_BASE_PATH% when serving dist/index.html
Apr 14, 2026
5006f3a
fix: add Express error handler for malformed URLs (URIError)
Apr 14, 2026
aa04661
fix(auth): authentication and path issue
Apr 14, 2026
7b5d47b
Merge remote-tracking branch 'origin/main' into main
artselects Apr 14, 2026
647075f
Merge remote-tracking branch 'upstream/main'
github-actions[bot] Apr 14, 2026
5708549
Merge remote-tracking branch 'upstream/main'
Apr 14, 2026
1da5355
feat: add Claude Code conflict resolution to sync-upstream workflow
Apr 14, 2026
1e868e2
fix: target fork repo for PR creation, use native Claude Code installer
Apr 14, 2026
f2a13f4
fix: use bash for native Claude Code installer
Apr 14, 2026
93aa6a4
Merge remote-tracking branch 'upstream/main'
github-actions[bot] Apr 14, 2026
b8920e8
Merge pull request #1 from GeorgeZhiXu/auto-sync-upstream-20260414215846
GeorgeZhiXu Apr 15, 2026
5a3312e
Merge remote-tracking branch 'upstream/main'
github-actions[bot] Apr 15, 2026
6a032bc
Merge pull request #5 from GeorgeZhiXu/auto-sync-upstream-20260415180411
GeorgeZhiXu Apr 15, 2026
48efaa9
fix: resolve merge conflict with upstream server build changes, insta…
Apr 15, 2026
886da9b
fix: use local kiro-sdk clone instead of npm github dep, update deplo…
Apr 15, 2026
0519fc9
fix: remove stale kiro-sdk dir before cloning in deploy
Apr 15, 2026
56e7dec
fix: improve Kiro icon and fix Gemini icon path for subpath deployment
artselects Apr 15, 2026
82fb4d7
feat: add official Kiro icon from kiro.dev
artselects Apr 15, 2026
04ac00e
fix: handle stale Kiro sessions and deletes
artselects Apr 16, 2026
1673a72
Merge remote-tracking branch 'upstream/main'
github-actions[bot] Apr 16, 2026
eb1ddfa
Merge remote-tracking branch 'upstream/main'
github-actions[bot] Apr 17, 2026
fd7a3a6
Merge pull request #9 from GeorgeZhiXu/auto-sync-upstream-20260417054658
artselects Apr 17, 2026
48b8718
fix: add kiro-sdk package.json to resolve ESM module not found error …
artselects Apr 18, 2026
94b77d3
fix: resolve merge conflict in app.ts and add kiro provider to type r…
artselects Apr 18, 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
75 changes: 75 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: Deploy Claude Code UI to Mac Mini

on:
push:
branches: [main]
paths-ignore: ['**.md']
workflow_dispatch:

concurrency:
group: deploy-${{ github.ref }}
cancel-in-progress: false

jobs:
deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Deploy via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.MAC_MINI_HOST }}
username: ${{ secrets.MAC_MINI_USER }}
key: ${{ secrets.MAC_MINI_SSH_KEY }}
command_timeout: 10m
script: |
set -e
export PATH="/opt/homebrew/bin:/usr/local/bin:$HOME/.nvm/versions/node/$(ls $HOME/.nvm/versions/node 2>/dev/null | tail -1)/bin:$PATH"

PROD_DIR="/Users/xuzhi/prod/claudecodeui"
GATEWAY_DIR="/Users/xuzhi/prod/gateway"

# Clone or pull
if [ ! -d "$PROD_DIR/.git" ]; then
# Handle existing non-git directory (legacy copy)
if [ -d "$PROD_DIR" ]; then
BACKUP="/Users/xuzhi/prod/claudecodeui.bak.$(date +%s)"
mv "$PROD_DIR" "$BACKUP"
fi
git clone https://github.com/GeorgeZhiXu/claudecodeui.git "$PROD_DIR"
else
cd "$PROD_DIR"
git fetch origin main
git reset --hard origin/main
fi
cd "$PROD_DIR"

# Install kiro-sdk locally (not published to npm)
if [ ! -d "$PROD_DIR/kiro-sdk/.git" ]; then
rm -rf "$PROD_DIR/kiro-sdk"
git clone https://github.com/GeorgeZhiXu/kiro-sdk.git "$PROD_DIR/kiro-sdk"
else
cd "$PROD_DIR/kiro-sdk"
git fetch origin && git reset --hard origin/master
fi
cd "$PROD_DIR/kiro-sdk"
npm install && npm run build
cd "$PROD_DIR"

# Install dependencies (kiro-sdk resolved via file: link)
npm install --production=false

# Build frontend (VITE_BASE_PATH must be set at build time for correct asset paths)
VITE_BASE_PATH=/claudeui/ VITE_IS_PLATFORM=true npm run build

# Restart PM2 process
pm2 delete claude-code-ui 2>/dev/null || true
pm2 start "$GATEWAY_DIR/pm2.d/claude-code-ui.config.js"
pm2 save

# Health check
sleep 3
curl -sf -o /dev/null http://127.0.0.1:8040/api/health && echo "Claude Code UI healthy" || echo "Health check failed (may need a moment to start)"
75 changes: 75 additions & 0 deletions .github/workflows/sync-upstream.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: Sync Upstream

on:
schedule:
- cron: '17 */6 * * *'
workflow_dispatch:

concurrency:
group: sync-upstream-main
cancel-in-progress: false

permissions:
contents: write
pull-requests: write

jobs:
sync:
runs-on: ubuntu-latest

steps:
- name: Checkout fork
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Configure git
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"

- name: Add upstream remote
run: |
git remote remove upstream 2>/dev/null || true
git remote add upstream https://github.com/siteboon/claudecodeui.git

- name: Fetch fork and upstream
run: |
git fetch origin main
git fetch upstream main

- name: Merge upstream/main into main
id: merge
continue-on-error: true
run: |
git checkout -B main origin/main
git merge --no-edit upstream/main

- name: Push merged main (no conflicts)
if: steps.merge.outcome == 'success'
run: git push origin main

- name: Resolve conflicts with Claude Code
if: steps.merge.outcome == 'failure'
env:
CLAUDE_CODE_USE_BEDROCK: "1"
AWS_BEARER_TOKEN_BEDROCK: ${{ secrets.AWS_BEARER_TOKEN_BEDROCK }}
run: |
curl -fsSL https://claude.ai/install.sh | bash
export PATH="$HOME/.claude/local/bin:$PATH"
claude -p "There are git merge conflicts from merging upstream/main into this fork's main branch. Resolve all conflicts by keeping changes from both sides when possible. For package.json, preserve both upstream additions and fork-specific customizations (like build:sdk). After resolving, stage all files with 'git add .' and commit with 'git commit --no-edit'." --allowedTools "Bash(git*)" "Bash(cat*)" "Bash(grep*)" "Edit" "Read"

- name: Create PR with resolved conflicts
if: steps.merge.outcome == 'failure'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
BRANCH="auto-sync-upstream-$(date +%Y%m%d%H%M%S)"
git checkout -b "$BRANCH"
git push origin "$BRANCH"
gh pr create \
--repo GeorgeZhiXu/claudecodeui \
--title "Auto-sync upstream (conflicts resolved by Claude Code)" \
--body "Automated merge from \`upstream/main\` had conflicts that were resolved by Claude Code. Please review the resolutions before merging." \
--base main \
--head "$BRANCH"
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -140,3 +140,8 @@ tasks/

# Git worktrees
.worktrees/

# Local SDK clones (separate repos)
kiro-sdk/*
!kiro-sdk/package.json
kiro-sdk-python/
41 changes: 41 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,47 @@ npx @cloudcli-ai/cloudcli@latest sandbox ~/my-project

Supports Claude Code, Codex, and Gemini CLI. See the [sandbox docs](docker/) for setup and advanced options.

### Deployment Notes

- `VITE_BASE_PATH` controls the frontend base path for subpath deployments. Leave it unset for local/root deployments, or set it to a subpath such as `/cloudcli/` when building and running behind a gateway.
- `DATABASE_PATH` controls where the auth database is stored. By default CloudCLI uses `~/.cloudcli/auth.db`.

Examples:

```bash
# Local development or root deployment
npm run build
npm run server
```

```bash
# Deployment behind a gateway subpath
VITE_BASE_PATH=/cloudcli/ npm run build
VITE_BASE_PATH=/cloudcli/ npm run server
```

### Fork Maintenance

- Forks can automatically merge updates from `siteboon/claudecodeui` by enabling the GitHub Actions workflow in `.github/workflows/sync-upstream.yml`.
- The workflow fetches `upstream/main`, merges it into your fork's `main`, and pushes only when the merge succeeds. If upstream introduces conflicts, Claude Code automatically resolves them and opens a PR for review.

### Fork Development Setup

This fork uses `kiro-sdk` and `kiro-sdk-python` as separate repos. To set up for local development:

```bash
git clone https://github.com/GeorgeZhiXu/claudecodeui.git
cd claudecodeui

# Clone the SDK (required — not published to npm)
git clone https://github.com/GeorgeZhiXu/kiro-sdk.git
cd kiro-sdk && npm install && npm run build && cd ..

# Install dependencies and start
npm install
npm run start
```


---

Expand Down
19 changes: 3 additions & 16 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="icon" type="image/png" href="/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, viewport-fit=cover" />
<title>CloudCLI UI</title>
<title>Claude Code UI</title>
<!-- Gateway integration: set router basename from env -->
<script>window.__ROUTER_BASENAME__ = '%BASE_URL%'.replace(/\/$/, '') || '';</script>

<!-- PWA Manifest -->
<link rel="manifest" href="/manifest.json" crossorigin="use-credentials" />
Expand All @@ -29,20 +31,5 @@
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>

<!-- Service Worker Registration -->
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js')
.then(registration => {
console.log('SW registered: ', registration);
})
.catch(registrationError => {
console.log('SW registration failed: ', registrationError);
});
});
}
</script>
</body>
</html>
32 changes: 32 additions & 0 deletions kiro-sdk/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"name": "kiro-sdk",
"version": "0.1.0",
"description": "SDK for communicating with kiro-cli via the ACP (Agent Communication Protocol)",
"type": "module",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js",
"default": "./dist/index.js"
},
"./index.js": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js",
"default": "./dist/index.js"
}
},
"files": [
"dist"
],
"engines": {
"node": ">=18"
},
"devDependencies": {
"@types/node": "^25.6.0",
"typescript": "^5.4.0",
"vitest": "^4.1.2"
},
"license": "MIT"
}
Loading