Files
karuo-ai/01_卡资(金)/金仓_存储备份/脚本/handy_force_chinese.sh
2026-07-19 00:21:46 +08:00

90 lines
3.1 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# 强制 Handy 使用中文 SenseVoice杀进程 → 重置 settings_store → 启动 → 校验日志
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
SETTINGS="$HOME/Library/Application Support/com.pais.handy/settings_store.json"
LOG="$HOME/Library/Logs/com.pais.handy/handy.log"
HANDY_PASTE="${SCRIPT_DIR}/handy_paste_karuo_asr.sh"
MODELS="$HOME/Library/Application Support/com.pais.handy/models"
echo "① 结束所有 Handy 进程(可执行文件名是 handy 小写)…"
killall -9 handy 2>/dev/null || true
killall -9 Handy 2>/dev/null || true
sleep 2
pgrep -lf '[Hh]andy' | rg -v 'rg|grep' && { echo "仍有 handy 进程,请菜单栏退出 Handy"; exit 1; } || true
echo "② 解锁并重写配置(不用 uchg避免 Tauri Store 写失败导致仍用内存旧配置)…"
chflags nouchg "$SETTINGS" 2>/dev/null || true
[[ -f "$SETTINGS" ]] && cp "$SETTINGS" "${SETTINGS}.bak.$(date +%Y%m%d_%H%M%S)"
python3 << PY
import json
from pathlib import Path
paste = "${HANDY_PASTE}"
models = Path("${MODELS}")
if not (models / "sense-voice-int8").is_dir():
raise SystemExit("缺少 sense-voice-int8请先下载中文模型")
p = Path("${SETTINGS}")
if p.exists():
d = json.loads(p.read_text())
else:
d = {}
s = d.get("settings") or {}
s["bindings"] = s.get("bindings") or {}
for bid, name, desc, bind in [
("transcribe", "语音转写", "简体中文转写并粘贴(卡若纠错)", "command_left+1"),
("transcribe_with_post_process", "转写并润色", "默认勿用", "option+shift+1"),
("cancel", "取消录音", "取消当前录音", "escape"),
]:
b = s["bindings"].setdefault(bid, {"id": bid})
b["name"] = name
b["description"] = desc
b["current_binding"] = bind
b.setdefault("default_binding", bind)
s["push_to_talk"] = True
s["app_language"] = "zh-Hans"
s["selected_language"] = "zh-Hans"
s["selected_model"] = "sense-voice-int8"
s["translate_to_english"] = False
s["post_process_enabled"] = False
s["post_process_selected_prompt_id"] = None
s["ort_accelerator"] = "coreml"
s["whisper_accelerator"] = "coreml"
s["mute_while_recording"] = False
s["paste_method"] = "external_script"
s["external_script_path"] = paste
s["debug_mode"] = True
s["log_level"] = "debug"
d["settings"] = s
p.write_text(json.dumps(d, indent=2, ensure_ascii=False) + "\n")
print("OK 配置:", s["selected_model"], s["selected_language"], s["bindings"]["transcribe"]["current_binding"])
PY
chmod +x "${HANDY_PASTE}"
# 禁用 Parakeet
pk="${MODELS}/parakeet-tdt-0.6b-v3-int8"
off="${MODELS}/_disabled_parakeet-tdt-0.6b-v3-int8"
[[ -d "$pk" && ! -d "$off" ]] && mv "$pk" "$off" && echo "已禁用 parakeet"
echo "③ 启动 Handy…"
open -a Handy
sleep 5
echo "④ 校验启动日志(须含 sense-voice / zh-Hans…"
if [[ -f "$LOG" ]]; then
tail -80 "$LOG" | rg -i "Found existing settings|sense-voice|parakeet|selected_language|command_left\+1|option\+1" || true
fi
echo ""
echo "✅ 请在本机:按住 ⌘1 说「卡若帮我改一下 skill」"
echo " 历史里应出现中文;勿在 Handy 设置里改回 Parakeet/auto。"
echo " 若仍英文:把 handy.log 最后 50 行发我。"