Files
grok-free-register-oss/reset_pipeline.sh
chaos d10009d639 Initial commit: grok-free-register-oss
Open-source Grok free registration CLI, xai_enroller auth pipeline,
local auth service, tests and docs.
2026-07-16 21:04:05 +08:00

223 lines
7.1 KiB
Bash
Executable File
Raw Permalink 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
# 一键清零注册 → 认证 → CPA 整条流水线的运行时数据,方便重开。
#
# 你只清 keys/acc.md / accounts.txt 不够:
# acpa_watchdog 会从 ~/Downloads/grok-free-register-auth/authenticated/
# 把旧号再整备进 keys/cpa_ready/sync_acc 再写回 acc.md。
#
# 用法(本文件在项目根):
# bash reset_pipeline.sh # dry-run只列将删内容
# bash reset_pipeline.sh --yes # 真正删除
# bash reset_pipeline.sh --yes --keep-register
# # 只清认证/CPA保留 keys 里新注册的 SSO 源
# bash reset_pipeline.sh --yes --keep-cpa
# # 只清认证账本/源快照,保留 cpa_ready一般不需要
#
# 建议先停 auth-service / register再跑本脚本。
set -euo pipefail
ROOT="$(cd "$(dirname "$0")" && pwd)"
KEYS="$ROOT/keys"
AUTH_DIR="${XAI_AUTH_SERVICE_LOCAL_DIR:-$HOME/Downloads/grok-free-register-auth}"
YES=0
KEEP_REGISTER=0
KEEP_CPA=0
KEEP_AUTH_SALT=1
for arg in "$@"; do
case "$arg" in
--yes|-y) YES=1 ;;
--keep-register) KEEP_REGISTER=1 ;;
--keep-cpa) KEEP_CPA=1 ;;
--wipe-salt) KEEP_AUTH_SALT=0 ;;
-h|--help)
sed -n '2,20p' "$0"
exit 0
;;
*)
echo "未知参数: $arg" >&2
exit 2
;;
esac
done
# 运行时产物清单(脚本本身永不删)
REGISTER_FILES=(
"$KEYS/accounts.txt"
"$KEYS/grok.txt"
"$KEYS/auth-sessions.jsonl"
"$KEYS/acc.md"
)
CPA_GLOBS=(
"$KEYS/cpa_ready/xai-"*.json
"$KEYS/cpa_ready/_state.tsv"
)
AUTH_PATHS=(
"$AUTH_DIR/authenticated"
"$AUTH_DIR/claimed"
"$AUTH_DIR/enrollment-ledger.db"
"$AUTH_DIR/source-snapshot.jsonl"
)
AUTH_SALT="$AUTH_DIR/.ledger-salt"
count_matches() {
local n=0
local p
for p in "$@"; do
# shellcheck disable=SC2086
if compgen -G "$p" > /dev/null 2>&1; then
while IFS= read -r -d '' f; do
n=$((n + 1))
done < <(find $p -type f -print0 2>/dev/null || true)
# also count plain files matched by glob/file
if [[ -f "$p" ]]; then
n=$((n + 1))
fi
elif [[ -f "$p" ]]; then
n=$((n + 1))
elif [[ -d "$p" ]]; then
while IFS= read -r -d '' f; do
n=$((n + 1))
done < <(find "$p" -type f -print0 2>/dev/null || true)
fi
done
echo "$n"
}
size_of() {
local p="$1"
if [[ -e "$p" ]]; then
du -sh "$p" 2>/dev/null | awk '{print $1}'
else
echo "-"
fi
}
echo "=== grok-free-register 流水线清零 ==="
echo "ROOT = $ROOT"
echo "KEYS = $KEYS"
echo "AUTH_DIR = $AUTH_DIR"
echo
# 检测可能还在跑的服务
if pgrep -af 'xai_enroller|acpa_watchdog|sync_acc|grok_register.register' 2>/dev/null | grep -v "reset_pipeline\|pgrep\|grep" >/dev/null; then
echo "[!] 检测到相关进程仍在运行:"
pgrep -af 'xai_enroller|acpa_watchdog|sync_acc|grok_register.register' 2>/dev/null | grep -v "reset_pipeline\|pgrep" || true
echo " 建议先 Ctrl-C 停掉 auth-service / register再 --yes"
echo
fi
echo "-- 将处理的目标 --"
if [[ "$KEEP_REGISTER" -eq 0 ]]; then
for f in "${REGISTER_FILES[@]}"; do
if [[ -e "$f" ]]; then
echo " [register] $(size_of "$f") $f"
fi
done
else
echo " [register] 跳过 (--keep-register)"
fi
if [[ "$KEEP_CPA" -eq 0 ]]; then
cpa_n=$(find "$KEYS/cpa_ready" -name 'xai-*.json' -type f 2>/dev/null | wc -l | tr -d ' ')
echo " [cpa] ${cpa_n} 个 xai-*.json @ $KEYS/cpa_ready/"
[[ -f "$KEYS/cpa_ready/_state.tsv" ]] && echo " [cpa] _state.tsv"
else
echo " [cpa] 跳过 (--keep-cpa)"
fi
auth_n=$(find "$AUTH_DIR/authenticated" -type f 2>/dev/null | wc -l | tr -d ' ')
echo " [auth] authenticated/ ${auth_n} 文件 ($(size_of "$AUTH_DIR/authenticated"))"
[[ -d "$AUTH_DIR/claimed" ]] && echo " [auth] claimed/ $(find "$AUTH_DIR/claimed" -type f 2>/dev/null | wc -l | tr -d ' ') 文件"
[[ -f "$AUTH_DIR/enrollment-ledger.db" ]] && echo " [auth] enrollment-ledger.db $(size_of "$AUTH_DIR/enrollment-ledger.db")"
[[ -f "$AUTH_DIR/source-snapshot.jsonl" ]] && echo " [auth] source-snapshot.jsonl $(size_of "$AUTH_DIR/source-snapshot.jsonl") lines=$(wc -l < "$AUTH_DIR/source-snapshot.jsonl" 2>/dev/null | tr -d ' ')"
if [[ "$KEEP_AUTH_SALT" -eq 0 && -f "$AUTH_SALT" ]]; then
echo " [auth] .ledger-salt (将删,指纹会重算)"
else
echo " [auth] .ledger-salt 保留"
fi
echo
if [[ "$YES" -ne 1 ]]; then
echo "dry-run 模式,未删除任何东西。"
echo "确认后执行: bash reset_pipeline.sh --yes"
exit 0
fi
rm_file() {
local f="$1"
if [[ -f "$f" || -L "$f" ]]; then
rm -f -- "$f"
echo " removed file $f"
fi
}
wipe_dir_contents() {
local d="$1"
if [[ -d "$d" ]]; then
# 只清内容,保留目录本身
find "$d" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +
echo " wiped dir $d/"
fi
}
echo "-- 执行删除 --"
if [[ "$KEEP_REGISTER" -eq 0 ]]; then
for f in "${REGISTER_FILES[@]}"; do
rm_file "$f"
done
# 重建空占位,避免下游 open 报错
: > "$KEYS/accounts.txt"
: > "$KEYS/grok.txt"
: > "$KEYS/auth-sessions.jsonl"
: > "$KEYS/acc.md"
chmod 600 "$KEYS/acc.md" "$KEYS/auth-sessions.jsonl" 2>/dev/null || true
echo " recreated empty accounts.txt / grok.txt / auth-sessions.jsonl / acc.md"
fi
if [[ "$KEEP_CPA" -eq 0 ]]; then
mkdir -p "$KEYS/cpa_ready"
find "$KEYS/cpa_ready" -type f \( -name 'xai-*.json' -o -name '_state.tsv' \) -delete 2>/dev/null || true
echo " wiped $KEYS/cpa_ready/xai-*.json + _state.tsv"
fi
# 认证侧:这是旧号回灌的真正源头
mkdir -p "$AUTH_DIR/authenticated" "$AUTH_DIR/claimed"
wipe_dir_contents "$AUTH_DIR/authenticated"
wipe_dir_contents "$AUTH_DIR/claimed"
rm_file "$AUTH_DIR/enrollment-ledger.db"
rm_file "$AUTH_DIR/source-snapshot.jsonl"
# 偶发的 sqlite 旁路文件
rm_file "$AUTH_DIR/enrollment-ledger.db-wal"
rm_file "$AUTH_DIR/enrollment-ledger.db-shm"
rm_file "$AUTH_DIR/enrollment-ledger.db-journal"
if [[ "$KEEP_AUTH_SALT" -eq 0 ]]; then
rm_file "$AUTH_SALT"
fi
# 兜底:项目内若误放了同名目录也清
for extra in "$KEYS/authenticated" "$KEYS/claimed"; do
if [[ -d "$extra" ]]; then
wipe_dir_contents "$extra"
fi
done
echo
echo "-- 清零后状态 --"
echo " accounts.txt lines = $(wc -l < "$KEYS/accounts.txt" 2>/dev/null | tr -d ' ')"
echo " auth-sessions = $(wc -l < "$KEYS/auth-sessions.jsonl" 2>/dev/null | tr -d ' ')"
echo " acc.md tokens = $(wc -l < "$KEYS/acc.md" 2>/dev/null | tr -d ' ')"
echo " cpa_ready json = $(find "$KEYS/cpa_ready" -name 'xai-*.json' -type f 2>/dev/null | wc -l | tr -d ' ')"
echo " authenticated json = $(find "$AUTH_DIR/authenticated" -type f 2>/dev/null | wc -l | tr -d ' ')"
echo " ledger.db = $([[ -f "$AUTH_DIR/enrollment-ledger.db" ]] && echo present || echo gone)"
echo " snapshot = $([[ -f "$AUTH_DIR/source-snapshot.jsonl" ]] && echo present || echo gone)"
echo
echo "完成。重开顺序建议:"
echo " 1) bash start.sh # 注册出 SSO → keys/auth-sessions.jsonl + accounts.txt"
echo " 2) bash auth-service.sh # device-flow → AUTH_DIR/authenticated + acpa→cpa_ready + sync_acc"
echo " 若只想清 CPA/认证、保留刚注的 SSO: 下次加 --keep-register"