Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
4b5d472
feat(app-config): add AppType::Hermes variant and wire through core t…
handy-sun May 7, 2026
0ef8192
feat(app-config): wire AppType::Hermes through provider, config, and …
handy-sun May 7, 2026
e70d2c9
feat(app-config): wire AppType::Hermes through remaining CLI, TUI, an…
handy-sun May 7, 2026
5976886
add rust-ci
handy-sun May 7, 2026
27e4745
chore(ci): move rustfmt check from CI to pre-commit hook
handy-sun May 7, 2026
f1f6a37
fix(ci): use feat/** branch pattern to match slash in branch names
handy-sun May 7, 2026
4d730e5
feat(hermes): implement Tier 2 config module and service wiring
handy-sun May 7, 2026
1a05dae
fix(hermes): add hermes field to test VisibleApps/SkillApps struct li…
handy-sun May 7, 2026
3cab839
ci: add clippy and test jobs with multi-platform matrix
handy-sun May 8, 2026
7b3c8d8
ci: remove -D warnings from clippy to avoid blocking on existing warn…
handy-sun May 8, 2026
62e5509
fix(i18n): update help text assertion to match actual prompt format
handy-sun May 8, 2026
6980e73
fix tests: concurrency, Windows, and flaky test improvements
handy-sun May 8, 2026
39c4021
feat: add cargo-zigbuild cross-compilation via nix develop
handy-sun May 8, 2026
4697d0c
ci: merge rust-ci configs, add unsafe blocks, and simplify test step
handy-sun May 8, 2026
a378b25
Merge branch 'feat/hermes-agent'
handy-sun May 8, 2026
e78a32b
fix(test): harden flaky env-guard tests and mark as ignored
handy-sun May 8, 2026
9e07c70
fix(test): check db instead of in-memory config after openclaw import
handy-sun May 8, 2026
b344f84
feat(hermes): make Hermes visible by default in app switcher
handy-sun May 8, 2026
a928194
feat(hermes): implement Tier 2 TUI form, templates, JSON builder, and…
handy-sun May 8, 2026
49e0e7b
feat(hermes): add enabled_hermes column to skills DAO queries
handy-sun May 8, 2026
353f040
feat(hermes): wire Hermes into all hardcoded app iteration lists
handy-sun May 8, 2026
b888738
fix(hermes): fix TUI picker navigation bounds for 6-app layout
handy-sun May 8, 2026
2cdd94d
refactor(picker): replace hardcoded bounds with const app arrays
handy-sun May 8, 2026
70f6937
fix(ci): ensure cross target is installed on stable toolchain
handy-sun May 9, 2026
cc39894
chore(updater): replace minisign public key with own keypair
handy-sun May 9, 2026
bcacd68
ci(rust): expand build matrix to 5 targets, align with release workflow
handy-sun May 9, 2026
3fba3e4
refactor(i18n): remove dead prompt-edit-not-implemented toast
handy-sun May 9, 2026
bdae583
docs(changelog): add v5.5.0 and v5.5.1 entries
handy-sun May 9, 2026
533f8c9
fix(mcp): add Hermes column to MCP table rendering
handy-sun May 9, 2026
6e11edf
chore: bump version to 0.0.1, update descriptions to include Hermes a…
handy-sun May 9, 2026
344188c
chore: fix repository URL, sync Cargo.lock, add pre-push version chec…
handy-sun May 9, 2026
930a6b7
refactor: rename project to cc-switch-tui
handy-sun May 9, 2026
cd33783
docs: update all references from cc-switch to cc-switch-tui
handy-sun May 9, 2026
9b272e6
refactor: complete rename from cc-switch-cli to cc-switch-tui
handy-sun May 9, 2026
96a8aee
fix: update CARGO_BIN_EXE and config test assertions for rename
handy-sun May 9, 2026
d3f6487
feat(config): add CC_SWITCH_TUI_CONFIG_DIR with backward compat
handy-sun May 9, 2026
13a94d8
fix(tests): update completions test assertions for cc-switch-tui rename
handy-sun May 9, 2026
0263e5e
feat(config): auto-migrate legacy ~/.cc-switch/ to ~/.cc-switch-tui/
handy-sun May 9, 2026
f70a62a
fix(config): move legacy migration into get_app_config_dir() to close…
handy-sun May 9, 2026
9ee6272
fix(pre-push): remove corrupted line-number prefixes and fix false-po…
handy-sun May 9, 2026
42205c4
docs: add rename+migration entry to changelog, update migration spec …
handy-sun May 9, 2026
f6df07c
fix(ci): update binary artifact paths from legacy cc-switch to cc-swi…
handy-sun May 9, 2026
e0df0a4
fix(release): use correct repo URL and simplify release title
handy-sun May 10, 2026
c21895f
feat: add interactive prompt for legacy config directory migration
handy-sun May 10, 2026
6ecba7e
feat(providers): show current provider at top-right of provider screen
handy-sun May 10, 2026
95e7963
feat(config): expand ~ prefix in CC_SWITCH_TUI_CONFIG_DIR and related…
handy-sun May 10, 2026
b89038f
fix: strip embedded line numbers from flake.nix and generate_latest_j…
handy-sun May 10, 2026
00c2eb9
chore: remove sponsor section from READMEs and partner assets
handy-sun May 10, 2026
6e7f91c
chore(release): bump version to 0.1.0 and add changelog
handy-sun May 10, 2026
15a2397
chore(cargo): add handy-sun to authors, keywords, and src-tauri README
handy-sun May 10, 2026
06a2a86
fix: expand tilde config paths correctly
handy-sun May 10, 2026
bda40c4
fix: migrate legacy config to active config dir
handy-sun May 10, 2026
ee7e24f
feat: show build metadata in version output
handy-sun May 10, 2026
b9ddbe9
fix: migrate WebDAV v1 settings sync
handy-sun May 11, 2026
82b157d
fix: show Hermes current provider in TUI
handy-sun May 11, 2026
d17dfcd
fix: include settings in WebDAV migration
handy-sun May 11, 2026
460b084
fix: publish only versioned release assets
handy-sun May 11, 2026
352979a
feat: show hermes by default
handy-sun May 11, 2026
88a2374
fix: repair legacy settings migration
handy-sun May 11, 2026
500d0eb
fix: run legacy config migration before startup db init
handy-sun May 11, 2026
5811ad4
fix: tolerate openclaw default model shapes
handy-sun May 11, 2026
567f88e
fix: make startup app switching responsive
handy-sun May 11, 2026
fd51be8
fix: accept localized app switch brackets
handy-sun May 11, 2026
745b6ad
fix: preserve OpenClaw empty objects on provider switch
handy-sun May 11, 2026
40ef8fb
Merge pull request #1 from handy-sun/fix-openclaw-switch-provider
handy-sun May 11, 2026
eb32164
ci: publish crate during release
handy-sun May 11, 2026
47aa415
chore: prepare v0.1.1 release
handy-sun May 11, 2026
e17e726
docs(readme): document nix flake usage
handy-sun May 12, 2026
e6e6a89
fix(tui): show hermes in skills columns
handy-sun May 12, 2026
35df028
feat(skills): add openclaw skill support
handy-sun May 12, 2026
6a05a63
feat(ui): mask displayed api keys
handy-sun May 12, 2026
90aeb01
feat(tui): align agent app columns
handy-sun May 12, 2026
beefa48
fix(tui): show api keys in provider forms
handy-sun May 12, 2026
e96f177
fix(tui): use space for openclaw default provider
handy-sun May 12, 2026
d1c4711
fix(tui): persist hermes and openclaw switches
handy-sun May 12, 2026
e9fb9d7
fix(openclaw): prune agent model catalog on provider removal
handy-sun May 12, 2026
2167dfe
fix(openclaw): prune stale agent model catalog entries
handy-sun May 12, 2026
0a95a98
fix(tui): align openclaw current marker
handy-sun May 12, 2026
ab169b4
feat: sync upstream functional changes
handy-sun May 12, 2026
a078f30
fix: adapt upstream sync for cc-switch-tui
handy-sun May 12, 2026
63b89a2
docs: clarify upstream repository
handy-sun May 12, 2026
cde4d95
feat(skills): import agent-installed skills from TUI
handy-sun May 13, 2026
f35b9fa
fix(skills): scan all agent tool dirs for import
handy-sun May 13, 2026
347e882
fix(skills): skip Hermes bundled skills on agent import
handy-sun May 13, 2026
e9f8f5f
Merge pull request #2 from handy-sun/test-merge-ups
handy-sun May 13, 2026
9e563bd
fix(skills): skip managed skills in agent import
handy-sun May 13, 2026
a1f724f
fix(skills): reconcile live app skill enablement
handy-sun May 13, 2026
bf3cfcd
feat(skills): add visual selection mode
handy-sun May 13, 2026
14e9de7
feat: add OpenClaw MCP management
handy-sun May 13, 2026
8067e03
feat: show OpenClaw version on TUI home
handy-sun May 13, 2026
99a0d15
chore: prepare v0.1.2 release
handy-sun May 13, 2026
c810743
chore: update Rust toolchain baseline
handy-sun May 13, 2026
7d98c14
refactor: remove unused config helpers
handy-sun May 13, 2026
37bf710
refactor: trim unused provider proxy code
handy-sun May 13, 2026
8be60f6
refactor: remove unused TUI actions
handy-sun May 13, 2026
4366d3a
fix: preserve migrated user settings
handy-sun May 13, 2026
56cb535
feat: expose skill sync method setting
handy-sun May 13, 2026
9ba211a
test: isolate cargo test home by default
handy-sun May 15, 2026
a4900ce
fix: keep tests off real config dirs
handy-sun May 15, 2026
3c46a32
fix(codex): honor CODEX_HOME for MCP live sync
handy-sun May 17, 2026
49a0a92
feat: optimize Codex provider catalog import and sync
handy-sun May 17, 2026
00c8fcc
feat(codex): add provider key rewrite primitives for config snapshots
handy-sun May 18, 2026
77c53d1
feat(codex): auto-repair conflicting custom provider keys on sync
handy-sun May 18, 2026
ea57901
test(codex): add test for conflicting custom provider key auto-repair
handy-sun May 18, 2026
842e3b0
feat: prepare release v0.1.3
handy-sun May 18, 2026
01a8da1
fix(codex): preserve user comments in live config across provider swi…
handy-sun May 19, 2026
67eec62
test(codex): pin root-level comment preservation across provider swit…
handy-sun May 19, 2026
e10bf48
refactor(codex): switch merge from preference whitelist to provider-s…
handy-sun May 19, 2026
4c8c621
add docs for mcp-live-drift-detection
handy-sun May 20, 2026
12e6bbe
fix(codex): reconcile live current provider drift
handy-sun May 20, 2026
ff640a6
Merge pull request #3 from handy-sun/fix/codex-provider
handy-sun May 20, 2026
f1d3a3a
fix: only apply failover switch guard while proxy is active
handy-sun May 20, 2026
9b205d2
chore: absorb selected upstream commits
handy-sun May 20, 2026
20c949f
fix(webdav): absorb upstream upload readback fix
handy-sun May 20, 2026
451b4ff
docs: record very high risk upstream review
handy-sun May 20, 2026
b5c5941
feat: add Codex MCP live drift services
handy-sun May 20, 2026
e86d750
feat: surface MCP live drift in TUI
handy-sun May 20, 2026
3db72a2
fix: preserve Codex MCP drift during implicit syncs
handy-sun May 20, 2026
230ab48
fix: sync Hermes credentials on provider switch
handy-sun May 21, 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
20 changes: 20 additions & 0 deletions .githooks/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/bash

echo "Checking Rust code format ..."
has_issues=0
edition=2021

for file in $(git diff --name-only --staged | grep '\.rs$'); do
if [ -f "${file}" ] && ! rustfmt --edition ${edition} --check --color auto "${file}"; then
echo ""
has_issues=1
rustfmt --edition ${edition} "${file}"
fi
done

if [ ${has_issues} -eq 0 ]; then
exit 0
fi

echo "Your code contains formatting issues and has been corrected. Please run \`git add\` to add them and commit them."
exit 1
127 changes: 127 additions & 0 deletions .githooks/pre-push
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
#!/bin/bash

# pre-push hook: check version consistency and key values before pushing tags
# Validates Cargo.toml, Cargo.lock, and cli/mod.rs against the tag being pushed

set -e

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

CARGO_TOML="src-tauri/Cargo.toml"
CARGO_LOCK="src-tauri/Cargo.lock"
CLI_MOD="src-tauri/src/cli/mod.rs"
PACKAGE_NAME="cc-switch-tui"
REPO_URL="https://github.com/handy-sun/cc-switch-tui"

APPS="Claude Codex Gemini OpenCode OpenClaw Hermes"

while read -r local_ref local_sha remote_ref remote_sha; do
if [[ "$remote_ref" != refs/tags/* ]]; then
continue
fi

tag_name="${remote_ref#refs/tags/}"
tag_version="${tag_name#v}"

if [[ ! "$tag_version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo -e "${YELLOW}Warning: Tag '$tag_name' doesn't follow semver (vX.Y.Z), skipping checks${NC}"
continue
fi

echo "=== Pre-push checks for tag: $tag_name ==="
errors=0

## Cargo.toml version
if [ -f "$CARGO_TOML" ]; then
cargo_version=$(grep -E '^version\s*=\s*"[0-9]+\.[0-9]+\.[0-9]+"' "$CARGO_TOML" | head -1 | sed 's/.*"\([0-9.]*\)".*/\1/')
if [ -z "$cargo_version" ]; then
echo -e "${RED} ✗ Could not extract version from $CARGO_TOML${NC}"
errors=$((errors + 1))
elif [ "$cargo_version" != "$tag_version" ]; then
echo -e "${RED} ✗ $CARGO_TOML version ($cargo_version) != tag ($tag_version)${NC}"
errors=$((errors + 1))
else
echo -e "${GREEN} ✓ $CARGO_TOML version: $cargo_version${NC}"
fi
else
echo -e "${RED} ✗ $CARGO_TOML not found${NC}"
errors=$((errors + 1))
fi

## Cargo.lock version
if [ -f "$CARGO_LOCK" ]; then
lock_version=$(awk '/^\[\[package\]\]/{found=0} /name = "'"${PACKAGE_NAME}"'"/{found=1} found && /^version = /{print; exit}' "$CARGO_LOCK" | sed 's/.*"\([0-9.]*\)".*/\1/')
if [ -z "$lock_version" ]; then
echo -e "${RED} ✗ Could not extract $PACKAGE_NAME version from $CARGO_LOCK${NC}"
errors=$((errors + 1))
elif [ "$lock_version" != "$tag_version" ]; then
echo -e "${RED} ✗ $CARGO_LOCK version ($lock_version) != tag ($tag_version)${NC}"
echo -e "${YELLOW} Hint: run 'cd src-tauri && cargo check' to sync Cargo.lock${NC}"
errors=$((errors + 1))
else
echo -e "${GREEN} ✓ $CARGO_LOCK version: $lock_version${NC}"
fi
else
echo -e "${RED} ✗ $CARGO_LOCK not found${NC}"
errors=$((errors + 1))
fi

## Cargo.toml description includes all apps
if [ -f "$CARGO_TOML" ]; then
desc=$(grep '^description' "$CARGO_TOML" || true)
desc_errors=0
for app in $APPS; do
if ! echo "$desc" | grep -q "$app"; then
echo -e "${RED} ✗ $CARGO_TOML description missing '$app'${NC}"
desc_errors=$((desc_errors + 1))
fi
done
errors=$((errors + desc_errors))
if [ $desc_errors -eq 0 ]; then
echo -e "${GREEN} ✓ $CARGO_TOML description includes all apps${NC}"
fi
fi

## cli/mod.rs about text includes all apps
if [ -f "$CLI_MOD" ]; then
about=$(grep 'about = "' "$CLI_MOD" || true)
about_errors=0
for app in $APPS; do
if ! echo "$about" | grep -q "$app"; then
echo -e "${RED} ✗ $CLI_MOD about text missing '$app'${NC}"
about_errors=$((about_errors + 1))
fi
done
errors=$((errors + about_errors))
if [ $about_errors -eq 0 ]; then
echo -e "${GREEN} ✓ $CLI_MOD about text includes all apps${NC}"
fi
else
echo -e "${RED} ✗ $CLI_MOD not found${NC}"
errors=$((errors + 1))
fi

## Repository URL
if [ -f "$CARGO_TOML" ]; then
repo=$(grep '^repository' "$CARGO_TOML" | head -1 | sed 's/.*= *"//;s/"$//')
if [ "$repo" != "$REPO_URL" ]; then
echo -e "${RED} ✗ $CARGO_TOML repository URL ($repo) != expected ($REPO_URL)${NC}"
errors=$((errors + 1))
else
echo -e "${GREEN} ✓ $CARGO_TOML repository: $repo${NC}"
fi
fi

if [ $errors -gt 0 ]; then
echo ""
echo -e "${RED}Pre-push checks failed ($errors errors)! Fix the issues above before pushing '$tag_name'.${NC}"
exit 1
fi

echo -e "${GREEN}All pre-push checks passed for $tag_name${NC}"
done

exit 0
Loading
Loading