Normalize fullwidth punctuation to ASCII across codebase.

Add scripts/normalize_ambiguous_unicode.py; fix corrupted patch_instance_theme_templates.py. Preserves curly quotes in string literals; removes Git homoglyph warnings on .env.example.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-08 23:42:26 +08:00
parent aaa72c7961
commit b733e551a0
392 changed files with 71522 additions and 71369 deletions
+4 -4
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# 检查三路子代理端口与 /status在服务器上运行
# 检查三路子代理端口与 /status(在服务器上运行)
set -e
check_one() {
@@ -11,17 +11,17 @@ check_one() {
if command -v curl >/dev/null 2>&1; then
local body
body=$(curl -sf --max-time 8 "http://127.0.0.1:${port}/status" 2>/dev/null) || {
echo " /status: 无法连接agent 未启动或崩溃"
echo " /status: 无法连接(agent 未启动或崩溃)"
return
}
echo " /status: ${body:0:200}"
if echo "${body}" | grep -q '"ok":true'; then
echo " 结果: OK"
else
echo " 结果: ok=false见上 JSON"
echo " 结果: ok=false,见上 JSON"
fi
else
echo " (未安装 curl跳过 HTTP 检测)"
echo " (未安装 curl,跳过 HTTP 检测)"
fi
echo
}
+3 -3
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# 去掉各目录 .env 的 Windows 换行符解决 PM2 agent errored: $'\r': command not found
# 去掉各目录 .env 的 Windows 换行符(解决 PM2 agent errored: $'\r': command not found)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -16,7 +16,7 @@ fixed=0
for d in "${dirs[@]}"; do
f="${d}/.env"
if [[ ! -f "${f}" ]]; then
echo "跳过无文件: ${f}"
echo "跳过(无文件): ${f}"
continue
fi
if grep -q $'\r' "${f}" 2>/dev/null; then
@@ -28,6 +28,6 @@ for d in "${dirs[@]}"; do
fi
done
echo "完成共修复 ${fixed} 个 .env"
echo "完成,共修复 ${fixed} 个 .env."
echo "请重启子代理: cd ${REPO}/manual_trading_hub && pm2 restart manual-agent-gate manual-agent-binance manual-agent-okx"
echo "或: bash scripts/pm2_hub.sh restart"
@@ -1,5 +1,5 @@
# shellcheck shell=bash
# 供 run_agent.sh / run_hub.sh source加载 .env 并去掉 Windows CRLF$'\r'
# 供 run_agent.sh / run_hub.sh source:加载 .env 并去掉 Windows CRLF($'\r')
load_dotenv_file() {
local f="$1"
if [[ ! -f "${f}" ]]; then
+4 -4
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# 仅子代理 PM2中控请用 scripts/pm2_hub.sh 或 ecosystem.config.cjs 一次起全部
# 仅子代理 PM2(中控请用 scripts/pm2_hub.sh 或 ecosystem.config.cjs 一次起全部)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -10,9 +10,9 @@ usage() {
cat <<'EOF'
用法: bash scripts/pm2_agents.sh <start|stop|restart|status|logs|delete>
一般请用: bash scripts/pm2_hub.sh start hub + agent 一起
一般请用: bash scripts/pm2_hub.sh start (hub + agent 一起)
本脚本仅操作 3 路子代理不含中控
本脚本仅操作 3 路子代理(不含中控)
仅启动币安: pm2 start ecosystem.agents.config.cjs --only manual-agent-binance
EOF
@@ -21,7 +21,7 @@ EOF
cmd="${1:-}"
if ! command -v pm2 >/dev/null 2>&1; then
echo "未找到 pm2请先: npm install -g pm2" >&2
echo "未找到 pm2,请先: npm install -g pm2" >&2
exit 1
fi
+4 -4
View File
@@ -18,7 +18,7 @@ usage() {
cat <<'EOF'
用法: bash scripts/pm2_hub.sh <start|stop|restart|status|logs|delete>
start 启动 ecosystem.config.cjs3 路子代理 + 中控已存在则 restart 全部
start 启动 ecosystem.config.cjs(3 路子代理 + 中控,已存在则 restart 全部)
stop 停止全部
restart 重启全部
status pm2 status
@@ -32,7 +32,7 @@ EOF
cmd="${1:-}"
if ! command -v pm2 >/dev/null 2>&1; then
echo "未找到 pm2请先: npm install -g pm2" >&2
echo "未找到 pm2,请先: npm install -g pm2" >&2
exit 1
fi
@@ -57,10 +57,10 @@ case "${cmd}" in
start)
if _any_running; then
pm2 restart "${ECO}"
echo "已重启hub + 全部 agent"
echo "已重启:hub + 全部 agent"
else
pm2 start "${ECO}"
echo "已启动hub + 全部 agent${#PM2_NAMES[@]} 个进程"
echo "已启动:hub + 全部 agent(${#PM2_NAMES[@]} 个进程)"
fi
pm2 save 2>/dev/null || true
;;
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# 仅重启失败的子代理保留 hub / 已 online 的 agent
# 仅重启失败的子代理(保留 hub / 已 online 的 agent)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -20,4 +20,4 @@ pm2 start "${ECO}" --only manual-agent-okx
pm2 start "${ECO}" --only manual-agent-gate
pm2 save 2>/dev/null || true
echo "已重建 binance / okx / gate 子代理请执行: bash scripts/check_agents.sh"
echo "已重建 binance / okx / gate 子代理,请执行: bash scripts/check_agents.sh"
+5 -5
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# PM2 子代理入口在策略目录cwd加载 .env 后启动 agent.py
# PM2 子代理入口:在策略目录(cwd)加载 .env 后启动 agent.py
set -e
set -o pipefail
@@ -17,20 +17,20 @@ _PM2_PORT="${PORT:-}"
_PM2_HOST="${HOST:-}"
if [[ ! -x "${VENV_PY}" ]]; then
echo "未找到 ${VENV_PY}请先在 manual_trading_hub: python3 -m venv .venv && pip install -r requirements.txt" >&2
echo "未找到 ${VENV_PY},请先在 manual_trading_hub: python3 -m venv .venv && pip install -r requirements.txt" >&2
exit 1
fi
if [[ -f .env ]]; then
if grep -q $'\r' .env 2>/dev/null; then
echo "警告: $(pwd)/.env 含 Windows 换行(CRLF)请在仓库根执行: bash manual_trading_hub/scripts/fix_env_crlf.sh" >&2
echo "警告: $(pwd)/.env 含 Windows 换行(CRLF),请在仓库根执行: bash manual_trading_hub/scripts/fix_env_crlf.sh" >&2
fi
if ! load_dotenv_file ".env"; then
echo "错误: $(pwd)/.env 加载失败" >&2
exit 1
fi
else
echo "警告: $(pwd) 下无 .envagent 可能缺少 API 密钥" >&2
echo "警告: $(pwd) 下无 .env,agent 可能缺少 API 密钥" >&2
fi
[[ -n "${_PM2_EXCHANGE}" ]] && export EXCHANGE="${_PM2_EXCHANGE}"
@@ -39,7 +39,7 @@ fi
if command -v ss >/dev/null 2>&1 && [[ -n "${PORT:-}" ]]; then
if ss -tln 2>/dev/null | grep -q ":${PORT} "; then
echo "错误: 端口 ${PORT} 已被占用agent 无法监听exchange=${EXCHANGE:-?}" >&2
echo "错误: 端口 ${PORT} 已被占用,agent 无法监听(exchange=${EXCHANGE:-?})" >&2
exit 1
fi
fi
+2 -2
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# PM2 / 手动启动入口加载 manual_trading_hub/.env 后运行 hub.py
# PM2 / 手动启动入口:加载 manual_trading_hub/.env 后运行 hub.py
set -e
set -o pipefail
@@ -13,7 +13,7 @@ source "${HUB_DIR}/scripts/lib_load_dotenv.sh"
VENV_PY="${HUB_DIR}/.venv/bin/python"
if [[ ! -x "${VENV_PY}" ]]; then
echo "未找到 ${VENV_PY}请先: python3 -m venv .venv && pip install -r requirements.txt" >&2
echo "未找到 ${VENV_PY},请先: python3 -m venv .venv && pip install -r requirements.txt" >&2
exit 1
fi
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# 在服务器上检查中控是否为最新代码无 api_trade_key已装 multipart进程可访问
# 在服务器上检查中控是否为最新代码(无 api_trade_key,已装 multipart,进程可访问)
set -euo pipefail
HUB_DIR="$(cd "$(dirname "$0")/.." && pwd)"
cd "$HUB_DIR"
@@ -13,14 +13,14 @@ PING_URL="http://127.0.0.1:${HUB_PORT}/api/ping"
echo "=== hub.py 检查 ==="
if grep -n 'def api_trade_key' hub.py 2>/dev/null; then
echo "FAIL: 仍是旧版 hub.py含 api_trade_key),请 git pull"
echo "FAIL: 仍是旧版 hub.py(含 api_trade_key),请 git pull"
exit 1
fi
if ! grep -q 'HUB_BUILD' hub.py; then
echo "FAIL: hub.py 缺少 HUB_BUILD 标记"
exit 1
fi
echo "OK: 无 api_trade_key含 HUB_BUILD"
echo "OK: 无 api_trade_key,含 HUB_BUILD"
echo "=== python-multipart ==="
# shellcheck source=/dev/null
@@ -29,7 +29,7 @@ python -c "import multipart; print('OK:', multipart.__version__)"
echo "=== 端口 ${HUB_PORT} ==="
if command -v ss >/dev/null 2>&1; then
ss -ltn | grep -E ":${HUB_PORT}\\b" || echo "WARN: 未监听 ${HUB_PORT}请 pm2 restart manual-trading-hub"
ss -ltn | grep -E ":${HUB_PORT}\\b" || echo "WARN: 未监听 ${HUB_PORT},请 pm2 restart manual-trading-hub"
elif command -v netstat >/dev/null 2>&1; then
netstat -ltn | grep -E ":${HUB_PORT}\\b" || echo "WARN: 未监听 ${HUB_PORT}"
else
@@ -51,10 +51,10 @@ if [[ "${HTTP_CODE}" == "200" ]]; then
if grep -q '20260521-no-trade-ui' /tmp/hub_ping_body.txt; then
echo "OK: build 正确"
else
echo "WARN: build 字段不是 20260521-no-trade-ui请 pm2 restart manual-trading-hub"
echo "WARN: build 字段不是 20260521-no-trade-ui,请 pm2 restart manual-trading-hub"
fi
else
echo "FAIL: ping 未返回 200常见原因进程未启动或崩溃"
echo "FAIL: ping 未返回 200.常见原因:进程未启动或崩溃."
echo " 执行: pm2 restart manual-trading-hub && sleep 2 && bash scripts/verify_hub_deploy.sh"
exit 1
fi
@@ -1,42 +1,42 @@
# 中控与子代理 · 后台常驻Ubuntu
**唯一推荐方式PM2**
请仅使用 PM2 托管 `hub.py``agent.py`勿与 nohup 等方式重复启动同一端口
---
## 启动
```bash
cd /opt/crypto_monitor/manual_trading_hub
source .venv/bin/activate
pip install -r requirements.txt
cp -n .env.example .env # 首次
pm2 start ecosystem.config.cjs
pm2 save
pm2 list
```
一条 `ecosystem.config.cjs` 会拉起 **4 个子代理 + 1 个 hub**
---
## 常用命令
```bash
pm2 logs manual-trading-hub
pm2 restart manual-trading-hub
pm2 restart all
bash scripts/verify_hub_deploy.sh
```
---
## 详细说明
| 文档 | 内容 |
|------|------|
| [../部署文档.md](../部署文档.md) | 端口反代故障排查 |
| [../../docs/ubuntu-server.md](../../docs/ubuntu-server.md) | Python / Node / PM2 版本与三所启动顺序 |
# 中控与子代理 · 后台常驻(Ubuntu)
**唯一推荐方式:PM2.**
请仅使用 PM2 托管 `hub.py``agent.py`,勿与 nohup 等方式重复启动同一端口.
---
## 启动
```bash
cd /opt/crypto_monitor/manual_trading_hub
source .venv/bin/activate
pip install -r requirements.txt
cp -n .env.example .env # 首次
pm2 start ecosystem.config.cjs
pm2 save
pm2 list
```
一条 `ecosystem.config.cjs` 会拉起 **4 个子代理 + 1 个 hub**.
---
## 常用命令
```bash
pm2 logs manual-trading-hub
pm2 restart manual-trading-hub
pm2 restart all
bash scripts/verify_hub_deploy.sh
```
---
## 详细说明
| 文档 | 内容 |
|------|------|
| [../部署文档.md](../部署文档.md) | 端口,反代,故障排查 |
| [../../docs/ubuntu-server.md](../../docs/ubuntu-server.md) | Python / Node / PM2 版本与三所启动顺序 |