From f0c9943c2ab09e75c534663761e2da2e696dec38 Mon Sep 17 00:00:00 2001 From: thuanle Date: Sat, 25 Jul 2026 03:21:20 +0700 Subject: [PATCH] update --- ask | 217 ------------------------------------- claude-glm | 4 +- claude-tk-glm | 46 ++++++++ claude-tk => claude-tk-gpt | 6 +- claude-tk-grok | 59 ++++++++++ claude-tl | 59 ++++++++++ supgrade | 32 ------ 7 files changed, 169 insertions(+), 254 deletions(-) delete mode 100755 ask create mode 100755 claude-tk-glm rename claude-tk => claude-tk-gpt (87%) create mode 100755 claude-tk-grok create mode 100755 claude-tl delete mode 100755 supgrade diff --git a/ask b/ask deleted file mode 100755 index b38706f..0000000 --- a/ask +++ /dev/null @@ -1,217 +0,0 @@ -#!/usr/bin/env bash - -: <<'DOC' -ask β€” AI terminal assistant (macOS/Linux) - -Setup API key (macOS Keychain): - security add-generic-password -a "$USER" -s TK_AI_API_TOKEN -w "YOUR_API_KEY" -Setup API key (Arch/Linux β€” libsecret): - echo "YOUR_API_KEY" | secret-tool store --label "AI API Token" service TK_AI_API_TOKEN - -Usage: - ask "question" - ask -i # interactive mode - ask -v # verbose (debug raw response) -DOC - -# ===== CONFIG ===== -SERVER="https://ai.acbpro.com/v1/chat/completions" -MODEL="gpt-5.3-codex" -KEY_NAME="TK_AI_API_TOKEN" - -# ===== OS DETECTION ===== -if [ -f /etc/arch-release ]; then - OS="arch" -elif [ "$(uname -s)" = "Darwin" ]; then - OS="macos" -else - OS="linux" -fi - -VERBOSE=0 -INTERACTIVE=0 - -# ===== COLORS ===== -GREEN="\033[1;32m" -CYAN="\033[1;36m" -YELLOW="\033[1;33m" -RED="\033[1;31m" -RESET="\033[0m" - -# ===== PARSE FLAGS ===== -while [[ "$1" == -* ]]; do - case "$1" in - -v) VERBOSE=1 ;; - -i) INTERACTIVE=1 ;; - esac - shift -done - -# ===== LOAD TOKEN ===== -if [ -n "${!KEY_NAME}" ]; then - API_TOKEN="${!KEY_NAME}" -else - case "$OS" in - macos) - API_TOKEN=$(security find-generic-password -a "$USER" -s "$KEY_NAME" -w 2>/dev/null | tr -d '\n') - ;; - *) - API_TOKEN=$(secret-tool lookup service "$KEY_NAME" 2>/dev/null | tr -d '\n') - ;; - esac -fi - -if [ -z "$API_TOKEN" ]; then - echo "❌ API token not found ($KEY_NAME)" >&2 - exit 1 -fi - -# ===== SYSTEM PROMPT ===== -SYSTEM_PROMPT="You are a terminal assistant for macOS (zsh/bash). - -- Default: return ONLY the command, no explanation. -- If user asks for explanation, then explain. -- Commands must be safe and runnable. -- Prefer standard macOS/Linux tools. -- No markdown, no code block. -" - -# ===== TERMINAL STATUS ===== -supports_status_line() { - [ -t 2 ] && [ "${TERM:-}" != "dumb" ] -} - -render_status_line() { - supports_status_line || return 0 - printf '\r\033[2K%b' "$1" >&2 -} - -clear_status_line() { - supports_status_line || return 0 - printf '\r\033[2K' >&2 -} - -print_response() { - if [ -t 1 ] && [ "${TERM:-}" != "dumb" ]; then - echo -e "${CYAN}πŸ€– $1${RESET}" - else - printf '%s\n' "$1" - fi -} - -# ===== FUNCTION CALL API ===== -call_api() { - local Q="$1" - local CWD GIT_BRANCH LAST_CMD JSON - local START_TIME TMP_FILE CURL_PID - local SPINNER i NOW ELAPSED CHAR COLOR - local RESPONSE CONTENT CURL_STATUS - - CWD="$(pwd)" - GIT_BRANCH="$(git branch --show-current 2>/dev/null)" - LAST_CMD="$(fc -ln -1 2>/dev/null)" - - JSON=$(jq -n \ - --arg model "$MODEL" \ - --arg sys "$SYSTEM_PROMPT" \ - --arg q "$Q" \ - --arg cwd "$CWD" \ - --arg branch "$GIT_BRANCH" \ - --arg last "$LAST_CMD" \ - '{ - model: $model, - messages: [ - {role: "system", content: $sys}, - {role: "user", content: - ("Context: -" + - "cwd: " + $cwd + " -" + - "git_branch: " + $branch + " -" + - "last_command: " + $last + " - -" + - "Request: -" + $q) - } - ] - }' - ) - - # ===== CALL (async) ===== - START_TIME=$(date +%s) - TMP_FILE=$(mktemp) - - curl -s "$SERVER" \ - -H "Authorization: Bearer $API_TOKEN" \ - -H "Content-Type: application/json" \ - -d "$JSON" > "$TMP_FILE" & - - CURL_PID=$! - trap 'clear_status_line; [ -n "${CURL_PID:-}" ] && kill "${CURL_PID}" 2>/dev/null; [ -n "${TMP_FILE:-}" ] && rm -f "${TMP_FILE}"; exit 130' INT TERM - - # ===== SPINNER + TIMER ===== - SPINNER='|/-\' - i=0 - if supports_status_line; then - while kill -0 "$CURL_PID" 2>/dev/null; do - NOW=$(date +%s) - ELAPSED=$((NOW - START_TIME)) - - CHAR=${SPINNER:i%${#SPINNER}:1} - - if [ "$ELAPSED" -lt 10 ]; then COLOR="$GREEN"; - elif [ "$ELAPSED" -lt 30 ]; then COLOR="$YELLOW"; - else COLOR="$RED"; fi - - render_status_line "${COLOR}⏳ calling ${CHAR} ${ELAPSED}s${RESET}" - - i=$((i+1)) - sleep 0.1 - done - fi - - wait "$CURL_PID" - CURL_STATUS=$? - clear_status_line - trap - INT TERM - - RESPONSE=$(<"$TMP_FILE") - rm -f "$TMP_FILE" - - if [ "$CURL_STATUS" -ne 0 ]; then - echo "❌ request failed (curl exit $CURL_STATUS)" >&2 - [ -n "$RESPONSE" ] && echo "$RESPONSE" >&2 - return "$CURL_STATUS" - fi - - if [ "$VERBOSE" -eq 1 ]; then - echo -e "${YELLOW}πŸ”§ RAW RESPONSE:${RESET}" >&2 - echo "$RESPONSE" >&2 - fi - - CONTENT=$(echo "$RESPONSE" | jq -r '.choices[0].message.content // .response // .text // .') - - print_response "$CONTENT" -} - -# ===== INTERACTIVE MODE ===== -if [ "$INTERACTIVE" -eq 1 ]; then - echo -e "${GREEN}πŸ’¬ Interactive mode (Ctrl+C để thoΓ‘t)${RESET}" - while true; do - printf "${GREEN}❓ ask> ${RESET}" - read Q - [ -z "$Q" ] && continue - call_api "$Q" - done - exit 0 -fi - -# ===== NORMAL MODE ===== -if [ $# -eq 0 ]; then - echo "Usage: ask [-v] [-i] " - exit 1 -fi - -call_api "$*" diff --git a/claude-glm b/claude-glm index c2a9c76..25019a7 100755 --- a/claude-glm +++ b/claude-glm @@ -39,8 +39,8 @@ fi export ANTHROPIC_BASE_URL="https://api.z.ai/api/anthropic" export ANTHROPIC_AUTH_TOKEN="$TOKEN" export ANTHROPIC_DEFAULT_HAIKU_MODEL="glm-4.5-air" -export ANTHROPIC_DEFAULT_SONNET_MODEL="glm-5.1" -export ANTHROPIC_DEFAULT_OPUS_MODEL="glm-5.1" +export ANTHROPIC_DEFAULT_SONNET_MODEL="glm-5.2" +export ANTHROPIC_DEFAULT_OPUS_MODEL="glm-5.2" echo "β†’ Backend: GLM" diff --git a/claude-tk-glm b/claude-tk-glm new file mode 100755 index 0000000..88e0e75 --- /dev/null +++ b/claude-tk-glm @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +# claude-gpt β€” Run Claude Code with GPT backend +# +# Usage: +# claude-gpt [args...] +# +# Setup API key (reuse existing): +# macOS: +# security add-generic-password -a "$USER" -s TK_AI_API_TOKEN -w "YOUR_KEY" +# Linux: +# echo "YOUR_KEY" | secret-tool store --label "AI API Token" service TK_AI_API_TOKEN + +KEY_NAME="TK_AI_API_TOKEN" + +if [ -n "${!KEY_NAME}" ]; then + TOKEN="${!KEY_NAME}" +fi + +get_token() { + if command -v security >/dev/null 2>&1; then + security find-generic-password -s "$KEY_NAME" -w 2>/dev/null && return + fi + if command -v secret-tool >/dev/null 2>&1; then + secret-tool lookup service "$KEY_NAME" 2>/dev/null && return + fi + return 1 +} + +if [ -z "$TOKEN" ]; then + TOKEN=$(get_token) +fi + +[ -z "${TOKEN}" ] && echo "❌ Missing TK_AI_API_TOKEN" && exit 1 +export ANTHROPIC_BASE_URL="https://ai.acbpro.com" +#export ANTHROPIC_BASE_URL="https://claudecode-classifier-cliproxyapi-proxier.ldt116.workers.dev" +export ANTHROPIC_AUTH_TOKEN="${TOKEN}" +export ANTHROPIC_DEFAULT_OPUS_MODEL="glm-5.2" +export ANTHROPIC_DEFAULT_SONNET_MODEL="glm-5.2" +export ANTHROPIC_DEFAULT_HAIKU_MODEL="glm-4.7" +export _CLAUDE_CODE_ASSUME_FIRST_PARTY_BASE_URL=1 +echo "β†’ Backend: TK AI GLM" +if [[ "$*" == *"--permission-mode"* ]]; then + exec claude "$@" +fi +exec claude --permission-mode auto "$@" diff --git a/claude-tk b/claude-tk-gpt similarity index 87% rename from claude-tk rename to claude-tk-gpt index 6175de4..9531ce9 100755 --- a/claude-tk +++ b/claude-tk-gpt @@ -38,9 +38,9 @@ fi export ANTHROPIC_BASE_URL="https://ai.acbpro.com" export ANTHROPIC_AUTH_TOKEN="$TOKEN" -export ANTHROPIC_DEFAULT_OPUS_MODEL="gpt-5.3-codex(high)" -export ANTHROPIC_DEFAULT_SONNET_MODEL="gpt-5.3-codex(medium)" -export ANTHROPIC_DEFAULT_HAIKU_MODEL="gpt-5.3-codex(medium)" +export ANTHROPIC_DEFAULT_OPUS_MODEL="gpt-5.6-sol(medium)" +export ANTHROPIC_DEFAULT_SONNET_MODEL="gpt-5.6-terra(medium)" +export ANTHROPIC_DEFAULT_HAIKU_MODEL="gpt-5.6-luna(medium)" echo "β†’ Backend: GPT" diff --git a/claude-tk-grok b/claude-tk-grok new file mode 100755 index 0000000..51f15d3 --- /dev/null +++ b/claude-tk-grok @@ -0,0 +1,59 @@ +#!/usr/bin/env bash + +# claude-gpt β€” Run Claude Code with GPT backend +# +# Usage: +# claude-gpt [args...] +# +# Setup API key (reuse existing): +# macOS: +# security add-generic-password -a "$USER" -s TK_AI_API_TOKEN -w "YOUR_KEY" +# Linux: +# echo "YOUR_KEY" | secret-tool store --label "AI API Token" service TK_AI_API_TOKEN + +KEY_NAME="TK_AI_API_TOKEN" + +if [ -n "${!KEY_NAME}" ]; then + TOKEN="${!KEY_NAME}" +fi + +get_token() { + if command -v security >/dev/null 2>&1; then + security find-generic-password -s "$KEY_NAME" -w 2>/dev/null && return + fi + if command -v secret-tool >/dev/null 2>&1; then + secret-tool lookup service "$KEY_NAME" 2>/dev/null && return + fi + return 1 +} + +if [ -z "$TOKEN" ]; then + TOKEN=$(get_token) +fi + +if [ -z "$TOKEN" ]; then + echo "❌ Missing GPT token ($KEY_NAME)" + exit 1 +fi + +export ANTHROPIC_BASE_URL="https://ai.acbpro.com" +export ANTHROPIC_AUTH_TOKEN="$TOKEN" +export ANTHROPIC_DEFAULT_OPUS_MODEL="grok-4.5" +export ANTHROPIC_DEFAULT_SONNET_MODEL="grok-4.5" +export ANTHROPIC_DEFAULT_HAIKU_MODEL="grok-3-mini" + +echo "β†’ Backend: GPT" + +has_permission_mode=false +for arg in "$@"; do + if [ "$arg" = "--permission-mode" ] || [[ "$arg" == --permission-mode=* ]]; then + has_permission_mode=true + break + fi +done + +if [ "$has_permission_mode" = true ]; then + exec claude "$@" +else + exec claude --permission-mode auto "$@" +fi diff --git a/claude-tl b/claude-tl new file mode 100755 index 0000000..0aa0765 --- /dev/null +++ b/claude-tl @@ -0,0 +1,59 @@ +#!/usr/bin/env bash + +# claude-glm β€” Run Claude Code with GLM backend +# +# Usage: +# claude-glm [args...] +# +# Setup API key (reuse existing): +# macOS: +# security add-generic-password -a "$USER" -s GLM_API_KEY -w "YOUR_KEY" +# Linux: +# echo "YOUR_KEY" | secret-tool store --label "GLM API Key" service GLM_API_KEY + +KEY_NAME="TL-AI-PROXY" + +if [ -n "${!KEY_NAME}" ]; then + TOKEN="${!KEY_NAME}" +fi + +get_token() { + if command -v security >/dev/null 2>&1; then + security find-generic-password -s "$KEY_NAME" -w 2>/dev/null && return + fi + if command -v secret-tool >/dev/null 2>&1; then + secret-tool lookup service "$KEY_NAME" 2>/dev/null && return + fi + return 1 +} + +if [ -z "$TOKEN" ]; then + TOKEN=$(get_token) +fi + +if [ -z "$TOKEN" ]; then + echo "❌ Missing GLM token ($KEY_NAME)" + exit 1 +fi + +export ANTHROPIC_BASE_URL="https://ai-proxy.thuanle.me/auto/claude" +export ANTHROPIC_AUTH_TOKEN="$TOKEN" +export ANTHROPIC_DEFAULT_HAIKU_MODEL="tl-auto-low" +export ANTHROPIC_DEFAULT_SONNET_MODEL="tl-auto-high" +export ANTHROPIC_DEFAULT_OPUS_MODEL="tl-auto-high" + +echo "β†’ Backend: GLM" + +has_permission_mode=false +for arg in "$@"; do + if [ "$arg" = "--permission-mode" ] || [[ "$arg" == --permission-mode=* ]]; then + has_permission_mode=true + break + fi +done + +if [ "$has_permission_mode" = true ]; then + exec claude "$@" +else + exec claude --permission-mode auto "$@" +fi diff --git a/supgrade b/supgrade deleted file mode 100755 index 385d489..0000000 --- a/supgrade +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash - -# Function to run SSH command and handle errors -run_ssh() { - server=$1 - command=$2 - echo "===== $server =====" - ssh -T $server "$command" & - - # Capture the PID of the last background process - pid=$! - - # Wait for the background process to finish - wait $pid - - # Check the exit status of the background process - if [ $? -eq 0 ]; then - echo "Successfully upgraded $server." - else - echo "Failed to upgrade $server. Check the connection and try again." - fi -} - -# Run SSH commands for each server -run_ssh "oc" 'sudo apt-get upgrade -y' -run_ssh "tk" 'sudo apt-get upgrade -y' -run_ssh "rpi3" 'sudo apt-get upgrade -y' -run_ssh "cse-z" 'sudo apt-get upgrade -y' -run_ssh "hp" 'sudo apt-get upgrade -y' -run_ssh "od-xu4" 'yay' - -echo "Upgrade process completed for all servers."