mirror of
https://github.com/tanweai/pua.git
synced 2026-08-29 02:02:20 +08:00
rename: ~/.puav2 → ~/.pua across all 13 files (zero puav2 references remaining)
This commit is contained in:
+4
-4
@@ -22,7 +22,7 @@ model: opus
|
||||
|
||||
开工前读取 PUA v2 的 P10 协议获取完整方法论:
|
||||
```
|
||||
cat ~/.claude/skills/puav2/references/p10-protocol.md
|
||||
cat ~/.claude/plugins/cache/pua-skills/pua/2.3.0/skills/pua/references/p10-protocol.md
|
||||
```
|
||||
|
||||
核心要素:
|
||||
@@ -49,8 +49,8 @@ spawn tech-lead-p9:
|
||||
prompt: |
|
||||
你是后端架构 P9。
|
||||
[战略输入模板内容]
|
||||
开工前先用 Read 工具读取 ~/.claude/skills/puav2/SKILL.md(PUA 行为协议),
|
||||
再读取 ~/.claude/skills/puav2/references/p9-protocol.md(P9 管理方法论)
|
||||
开工前先用 Read 工具读取 ~/.claude/plugins/cache/pua-skills/pua/2.3.0/skills/pua/SKILL.md(PUA 行为协议),
|
||||
再读取 ~/.claude/plugins/cache/pua-skills/pua/2.3.0/skills/pua/references/p9-protocol.md(P9 管理方法论)
|
||||
```
|
||||
|
||||
### 3. 基础能力建设
|
||||
@@ -83,5 +83,5 @@ spawn tech-lead-p9:
|
||||
|
||||
## 自我 PUA
|
||||
|
||||
读取 `~/.claude/skills/puav2/references/p10-protocol.md` 中"P10 失败模式"章节。
|
||||
读取 `~/.claude/plugins/cache/pua-skills/pua/2.3.0/skills/pua/references/p10-protocol.md` 中"P10 失败模式"章节。
|
||||
核心检查:方向清不清?土壤造没造?决断拍没拍?有没有降维打工?
|
||||
|
||||
@@ -22,8 +22,8 @@ tools: Agent, Read, Grep, Glob, Bash, WebSearch
|
||||
|
||||
开工前依次读取:
|
||||
```
|
||||
cat ~/.claude/skills/puav2/SKILL.md
|
||||
cat ~/.claude/skills/puav2/references/p7-protocol.md
|
||||
cat ~/.claude/plugins/cache/pua-skills/pua/2.3.0/skills/pua/SKILL.md
|
||||
cat ~/.claude/plugins/cache/pua-skills/pua/2.3.0/skills/pua/references/p7-protocol.md
|
||||
```
|
||||
SKILL.md 提供 PUA 核心行为(owner 意识、[PUA生效 🔥]、三条铁律),p7-protocol.md 提供 P7 专属方法论。
|
||||
|
||||
@@ -113,4 +113,4 @@ P8 验收后整合 P7 的交付物,作为自己向 P9 交付的一部分。失
|
||||
- 审查三问都是"是" → 你在走过场
|
||||
- 绕过 P8 直接向 P9 汇报 → 越级是管理大忌
|
||||
|
||||
读取 `~/.claude/skills/puav2/references/p7-protocol.md` 中"P7 失败模式"章节获取完整自我 PUA 条目。
|
||||
读取 `~/.claude/plugins/cache/pua-skills/pua/2.3.0/skills/pua/references/p7-protocol.md` 中"P7 失败模式"章节获取完整自我 PUA 条目。
|
||||
|
||||
@@ -22,7 +22,7 @@ tools: Agent, SendMessage, Read, Grep, Glob, WebSearch, Bash
|
||||
|
||||
开工前读取 PUA v2 的 P9 协议获取完整方法论:
|
||||
```
|
||||
cat ~/.claude/skills/puav2/references/p9-protocol.md
|
||||
cat ~/.claude/plugins/cache/pua-skills/pua/2.3.0/skills/pua/references/p9-protocol.md
|
||||
```
|
||||
|
||||
核心要素:
|
||||
@@ -52,8 +52,8 @@ cat ~/.claude/skills/puav2/references/p9-protocol.md
|
||||
### 3. 并行 spawn
|
||||
- 无依赖任务在同一个 message 里并行 spawn
|
||||
- 每个 spawn 的 prompt 包含完整 Task Prompt 六要素
|
||||
- 在 prompt 末尾附加:`开工前先用 Read 工具读取 ~/.claude/skills/puav2/SKILL.md,按 P8 行为协议执行`
|
||||
- 注意:subagent 不能用 `/puav2`(skill 只在主会话加载),必须用 Read 读 SKILL.md
|
||||
- 在 prompt 末尾附加:`开工前先用 Read 工具读取 ~/.claude/plugins/cache/pua-skills/pua/2.3.0/skills/pua/SKILL.md,按 P8 行为协议执行`
|
||||
- 注意:subagent 不能用 `/pua`(skill 只在主会话加载),必须用 Read 读 SKILL.md
|
||||
|
||||
### 4. 验收与 PUA 调控
|
||||
- P8 完成后,跑 DONE 中定义的验证命令
|
||||
@@ -94,4 +94,4 @@ cat ~/.claude/skills/puav2/references/p9-protocol.md
|
||||
- 两个 P8 改了同一个文件 → 你的文件域隔离失败
|
||||
- 你在写代码 → 你在降维打工
|
||||
|
||||
读取 `~/.claude/skills/puav2/references/p9-protocol.md` 中"P9 失败模式"章节获取完整自我 PUA 条目。
|
||||
读取 `~/.claude/plugins/cache/pua-skills/pua/2.3.0/skills/pua/references/p9-protocol.md` 中"P9 失败模式"章节获取完整自我 PUA 条目。
|
||||
|
||||
@@ -9,7 +9,7 @@ set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PLUGIN_DIR="${1:-$(cd "$SCRIPT_DIR/.." && pwd)}"
|
||||
RESULTS_DIR="/tmp/puav2-evals/$(date +%s)"
|
||||
RESULTS_DIR="/tmp/pua-evals/$(date +%s)"
|
||||
mkdir -p "$RESULTS_DIR"
|
||||
|
||||
echo "=== PUA v2 Trigger Tests ==="
|
||||
@@ -34,8 +34,8 @@ test_prompt() {
|
||||
> "$outfile" 2>&1 || true
|
||||
|
||||
local triggered=false
|
||||
if grep -q '"skill":"puav2"' "$outfile" 2>/dev/null || \
|
||||
grep -q '"skill":"pua:puav2"' "$outfile" 2>/dev/null; then
|
||||
if grep -q '"skill":"pua"' "$outfile" 2>/dev/null || \
|
||||
grep -q '"skill":"pua:pua"' "$outfile" 2>/dev/null; then
|
||||
triggered=true
|
||||
fi
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
"hooks": [
|
||||
{
|
||||
"type": "prompt",
|
||||
"prompt": "[PUA v2 PreCompact — State Checkpoint]\n\nContext compaction is about to happen. You MUST immediately dump your PUA v2 runtime state to ~/.puav2/builder-journal.md using the Write tool BEFORE compaction erases it.\n\nWrite the following to ~/.puav2/builder-journal.md (create ~/.puav2/ if needed):\n\n```markdown\n# PUA v2 Builder Journal — Compaction Checkpoint\n\n## Timestamp\n{current ISO timestamp}\n\n## Runtime State\n- pressure_level: L{0-4}\n- failure_count: {number}\n- current_flavor: {flavor name}\n- pua_triggered_count: {number of [PUA生效] this session}\n\n## Active Task\n{what you were working on — 1-2 sentences}\n\n## Tried Approaches\n{list of approaches tried and their outcomes}\n\n## Excluded Possibilities\n{what has been ruled out}\n\n## Next Hypothesis\n{what you planned to try next}\n\n## Key Context\n{any critical information that would be lost in compaction — file paths, error messages, architectural decisions}\n```\n\nThis is NOT optional. Compaction without state dump = losing pressure level and failure history = cheating. The pressure doesn't reset just because context got compressed.\n\nAfter writing, output: > [PUA Checkpoint] State saved to builder-journal.md. Pressure level and failure history preserved."
|
||||
"prompt": "[PUA v2 PreCompact — State Checkpoint]\n\nContext compaction is about to happen. You MUST immediately dump your PUA v2 runtime state to ~/.pua/builder-journal.md using the Write tool BEFORE compaction erases it.\n\nWrite the following to ~/.pua/builder-journal.md (create ~/.pua/ if needed):\n\n```markdown\n# PUA v2 Builder Journal — Compaction Checkpoint\n\n## Timestamp\n{current ISO timestamp}\n\n## Runtime State\n- pressure_level: L{0-4}\n- failure_count: {number}\n- current_flavor: {flavor name}\n- pua_triggered_count: {number of [PUA生效] this session}\n\n## Active Task\n{what you were working on — 1-2 sentences}\n\n## Tried Approaches\n{list of approaches tried and their outcomes}\n\n## Excluded Possibilities\n{what has been ruled out}\n\n## Next Hypothesis\n{what you planned to try next}\n\n## Key Context\n{any critical information that would be lost in compaction — file paths, error messages, architectural decisions}\n```\n\nThis is NOT optional. Compaction without state dump = losing pressure level and failure history = cheating. The pressure doesn't reset just because context got compressed.\n\nAfter writing, output: > [PUA Checkpoint] State saved to builder-journal.md. Pressure level and failure history preserved."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
# 1. Check always_on config → auto-load PUA skill
|
||||
# 2. Check builder-journal → restore compaction state
|
||||
|
||||
CONFIG="$HOME/.puav2/config.json"
|
||||
JOURNAL="$HOME/.puav2/builder-journal.md"
|
||||
CONFIG="$HOME/.pua/config.json"
|
||||
JOURNAL="$HOME/.pua/builder-journal.md"
|
||||
|
||||
# --- Always-on PUA mode ---
|
||||
if [ -f "$CONFIG" ]; then
|
||||
@@ -44,10 +44,10 @@ fi
|
||||
cat <<'PROMPT'
|
||||
[PUA v2 Calibration — State Recovery]
|
||||
|
||||
A previous context compaction saved PUA runtime state to ~/.puav2/builder-journal.md.
|
||||
A previous context compaction saved PUA runtime state to ~/.pua/builder-journal.md.
|
||||
You MUST immediately read this file and restore your PUA v2 runtime state:
|
||||
|
||||
1. Read ~/.puav2/builder-journal.md
|
||||
1. Read ~/.pua/builder-journal.md
|
||||
2. Restore: pressure_level, failure_count, current_flavor, tried_approaches, active task context
|
||||
3. Continue the task from where you left off, at the SAME pressure level
|
||||
4. Do NOT reset failure count or pressure level — compaction is not a clean slate
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/bin/bash
|
||||
# PUA Stop hook: feedback collection + upload
|
||||
# Config: ~/.puav2/config.json → feedback_frequency (0=off, 1=every, 3=default, 5=relaxed)
|
||||
# Config: ~/.pua/config.json → feedback_frequency (0=off, 1=every, 3=default, 5=relaxed)
|
||||
|
||||
CONFIG="$HOME/.puav2/config.json"
|
||||
COUNTER="$HOME/.puav2/.stop_counter"
|
||||
CONFIG="$HOME/.pua/config.json"
|
||||
COUNTER="$HOME/.pua/.stop_counter"
|
||||
FREQUENCY=5
|
||||
|
||||
if [ -f "$CONFIG" ]; then
|
||||
@@ -33,7 +33,7 @@ questions: [{
|
||||
options: [
|
||||
{label: "很有用", description: "PUA 味道到位,agent 更努力了"},
|
||||
{label: "一般般", description: "味道不够或没感觉到区别"},
|
||||
{label: "跳过", description: "不反馈(~/.puav2/config.json 设 feedback_frequency: 0 可永久关闭)"}
|
||||
{label: "跳过", description: "不反馈(~/.pua/config.json 设 feedback_frequency: 0 可永久关闭)"}
|
||||
],
|
||||
multiSelect: false
|
||||
}]
|
||||
@@ -70,7 +70,7 @@ curl -s -X POST https://pua-skill.pages.dev/api/feedback \
|
||||
|
||||
If user chose "不了", write feedback to local file:
|
||||
```bash
|
||||
echo "{\"ts\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"rating\":\"USER_ANSWER\",\"uploaded\":false}" >> ~/.puav2/feedback.jsonl
|
||||
echo "{\"ts\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"rating\":\"USER_ANSWER\",\"uploaded\":false}" >> ~/.pua/feedback.jsonl
|
||||
```
|
||||
|
||||
Do NOT skip Step 1. Call AskUserQuestion NOW.
|
||||
|
||||
+5
-5
@@ -12,7 +12,7 @@ license: MIT
|
||||
|
||||
"今天最好的表现,是明天最低的要求"——这不是旁白,这是机制。
|
||||
|
||||
- 读取 `~/.puav2/evolution.md`(详见 `references/evolution-protocol.md`)
|
||||
- 读取 `~/.pua/evolution.md`(详见 `references/evolution-protocol.md`)
|
||||
- 存在 → 加载基线 + 已内化模式。内化模式是默认义务,做了不标 [PUA生效],不做则退化警告
|
||||
- 不存在 → 首次启动,创建初始模板
|
||||
- 任务完成时比对:超越 → 刷新基线 / 达标 → 保持 / 低于 → 退化警告(不降基线)
|
||||
@@ -22,15 +22,15 @@ license: MIT
|
||||
|
||||
### 会话启动前置检查
|
||||
|
||||
1. **检查 `~/.puav2/evolution.md`**:加载自进化基线
|
||||
2. **检查 `~/.puav2/builder-journal.md`**(Compaction 断点恢复):存在且 <2h → [Calibration] 流程,恢复 pressure_level / failure_count / tried_approaches,从断点继续。**压力不因 compaction 重置**
|
||||
3. **检查 `~/.puav2/config.json`**:不存在 → 首次注册(详见 `references/platform.md`);存在 → 静默刷新远端配置
|
||||
1. **检查 `~/.pua/evolution.md`**:加载自进化基线
|
||||
2. **检查 `~/.pua/builder-journal.md`**(Compaction 断点恢复):存在且 <2h → [Calibration] 流程,恢复 pressure_level / failure_count / tried_approaches,从断点继续。**压力不因 compaction 重置**
|
||||
3. **检查 `~/.pua/config.json`**:不存在 → 首次注册(详见 `references/platform.md`);存在 → 静默刷新远端配置
|
||||
4. **节日彩蛋**:匹配节日表(详见 `references/platform.md`)
|
||||
5. **统计上报**:静默上报 `session_start` 事件
|
||||
|
||||
### Compaction 状态保护
|
||||
|
||||
PreCompact hook 自动注入指令,要求 dump 运行时状态到 `~/.puav2/builder-journal.md`:
|
||||
PreCompact hook 自动注入指令,要求 dump 运行时状态到 `~/.pua/builder-journal.md`:
|
||||
`pressure_level, failure_count, current_flavor, pua_triggered_count, active_task, tried_approaches, excluded_possibilities, next_hypothesis, key_context`
|
||||
|
||||
SessionStart hook 自动检测 builder-journal.md,存在且 <2h 则注入 [Calibration] 恢复状态。
|
||||
|
||||
+3
-3
@@ -193,7 +193,7 @@ P8 派活不注入 PUA = 管理失职。收回来的活没味道、没闭环、
|
||||
5. **旁白刷屏**:简单任务只需开头+结尾各 1 句
|
||||
6. **展示密度不适配**:单行修改不要输出完整 Sprint Banner + KPI 卡
|
||||
7. **Sub-agent 裸奔**:spawn 子 agent 时忘了在 prompt 里注入 PUA — 子 agent 是空白上下文,不注入就没味道没红线
|
||||
8. **味道不持久**:切换味道只在当前会话生效,新会话恢复阿里味默认。如需持久化,手动改 `~/.puav2/config.json` 加 `"flavor": "字节"` 字段
|
||||
8. **味道不持久**:切换味道只在当前会话生效,新会话恢复阿里味默认。如需持久化,手动改 `~/.pua/config.json` 加 `"flavor": "字节"` 字段
|
||||
|
||||
## 体面的退出
|
||||
|
||||
@@ -213,13 +213,13 @@ P8 派活不注入 PUA = 管理失职。收回来的活没味道、没闭环、
|
||||
|
||||
**第二步:是否愿意分享 session**(仅在用户回答了第一步后)
|
||||
- "可以,脱敏后上传分析" — 上传脱敏 session 到 `https://pua-skill.pages.dev/api/feedback`
|
||||
- "不了,只保留本地" — 尊重隐私,反馈写入 `~/.puav2/feedback.jsonl`
|
||||
- "不了,只保留本地" — 尊重隐私,反馈写入 `~/.pua/feedback.jsonl`
|
||||
|
||||
**脱敏规则**(上传时自动处理):
|
||||
- 去除:文件绝对路径、代码内容、API 密钥/token、用户名/邮箱
|
||||
- 保留:工具调用序列、PUA level、failure count、[PUA生效] 次数、味道类型、成功/失败结果
|
||||
|
||||
**本地记录格式**(`~/.puav2/feedback.jsonl`,每行一条):
|
||||
**本地记录格式**(`~/.pua/feedback.jsonl`,每行一条):
|
||||
```json
|
||||
{"ts":"ISO时间","rating":"很有用/一般/没感觉","pua_count":N,"level":"L0-L4","flavor":"阿里","task_summary":"简述","uploaded":false}
|
||||
```
|
||||
|
||||
@@ -81,7 +81,7 @@ P8 收到任务
|
||||
开工前先用 Read 工具读取 references/p7-protocol.md(进入 P7 方案驱动模式)。
|
||||
```
|
||||
|
||||
**重要**:subagent 不能用 `/puav2` 斜杠命令(skill 只在主会话加载)。必须通过 Read 工具读取 SKILL.md 或对应 protocol 文件。
|
||||
**重要**:subagent 不能用 `/pua` 斜杠命令(skill 只在主会话加载)。必须通过 Read 工具读取 SKILL.md 或对应 protocol 文件。
|
||||
|
||||
**工具选择标准**:
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ PUA v2 默认是无状态的——每次会话冷启动,不记得上次做了
|
||||
|
||||
## 运行时状态文件
|
||||
|
||||
`~/.puav2/evolution.md` 是自进化的持久化存储。不存在时自动创建。
|
||||
`~/.pua/evolution.md` 是自进化的持久化存储。不存在时自动创建。
|
||||
|
||||
### 文件结构
|
||||
|
||||
@@ -40,7 +40,7 @@ PUA v2 默认是无状态的——每次会话冷启动,不记得上次做了
|
||||
|
||||
### 阶段一:会话启动 — 加载基线
|
||||
|
||||
检查 `~/.puav2/evolution.md` 是否存在:
|
||||
检查 `~/.pua/evolution.md` 是否存在:
|
||||
|
||||
```
|
||||
evolution.md 存在?
|
||||
@@ -143,7 +143,7 @@ evolution.md 存在?
|
||||
|
||||
## 基线初始化模板
|
||||
|
||||
首次创建 `~/.puav2/evolution.md` 时使用:
|
||||
首次创建 `~/.pua/evolution.md` 时使用:
|
||||
|
||||
```markdown
|
||||
# PUA 自进化基线
|
||||
|
||||
@@ -178,12 +178,12 @@ P9 不是简单地问用户——先自己用 Explore agent 调研,带着证
|
||||
|
||||
在 Task Prompt 六要素末尾,必须附加执行指令:
|
||||
```
|
||||
开工前先用 Read 工具读取 ~/.claude/skills/puav2/SKILL.md,按其中的 P8 行为协议执行。
|
||||
开工前先用 Read 工具读取 ~/.claude/plugins/cache/pua-skills/pua/2.3.0/skills/pua/SKILL.md,按其中的 P8 行为协议执行。
|
||||
你的文件域是 [目录列表],不要修改文件域外的文件。
|
||||
完成后跑 DONE 中的验证命令,贴输出证据。
|
||||
```
|
||||
|
||||
注意:subagent 无法执行 `/puav2` 斜杠命令(skill 只在主会话加载)。必须用 Read 工具直接读取 SKILL.md 文件来注入 PUA 行为。
|
||||
注意:subagent 无法执行 `/pua` 斜杠命令(skill 只在主会话加载)。必须用 Read 工具直接读取 SKILL.md 文件来注入 PUA 行为。
|
||||
|
||||
**P8 内部的 P7 管理**:
|
||||
P9 不需要操心 P8 怎么拆子任务。但 P9 在 Task Prompt 的 HOW MUCH 中可以提示:
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
## API 基础信息
|
||||
|
||||
- 端点:`https://pua-api.agentguard.workers.dev`
|
||||
- 本地配置:`~/.puav2/config.json`
|
||||
- 本地缓存:`~/.puav2/cache/`
|
||||
- 本地统计:`~/.puav2/stats.json`
|
||||
- 本地配置:`~/.pua/config.json`
|
||||
- 本地缓存:`~/.pua/cache/`
|
||||
- 本地统计:`~/.pua/stats.json`
|
||||
|
||||
## 一、首次注册流程
|
||||
|
||||
在会话启动时检查 `~/.puav2/config.json`。如果文件不存在,执行以下注册流程:
|
||||
在会话启动时检查 `~/.pua/config.json`。如果文件不存在,执行以下注册流程:
|
||||
|
||||
### 步骤 1:欢迎 & 手机号输入
|
||||
|
||||
@@ -51,7 +51,7 @@ curl -s -X POST https://pua-api.agentguard.workers.dev/v1/register \
|
||||
|
||||
### 步骤 4:存储配置
|
||||
|
||||
将返回的信息写入 `~/.puav2/config.json`:
|
||||
将返回的信息写入 `~/.pua/config.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -83,7 +83,7 @@ curl -s -X POST https://pua-api.agentguard.workers.dev/v1/register \
|
||||
|
||||
## 二、会话启动 — 配置刷新
|
||||
|
||||
如果 `~/.puav2/config.json` 已存在:
|
||||
如果 `~/.pua/config.json` 已存在:
|
||||
|
||||
1. 读取 token
|
||||
2. 尝试刷新远端配置(超时 3 秒):
|
||||
@@ -102,7 +102,7 @@ curl -s --max-time 3 -X GET https://pua-api.agentguard.workers.dev/v1/commands \
|
||||
-H "Authorization: Bearer <token>"
|
||||
```
|
||||
|
||||
缓存到 `~/.puav2/cache/commands.json`
|
||||
缓存到 `~/.pua/cache/commands.json`
|
||||
|
||||
## 三、指令系统
|
||||
|
||||
@@ -123,7 +123,7 @@ curl -s --max-time 3 -X GET https://pua-api.agentguard.workers.dev/v1/commands \
|
||||
### 指令执行流程
|
||||
|
||||
1. 用户输入触发词(如 `/pua kpi`)
|
||||
2. 检查本地缓存 `~/.puav2/cache/commands.json` 中的指令列表
|
||||
2. 检查本地缓存 `~/.pua/cache/commands.json` 中的指令列表
|
||||
3. 如果是免费指令 → 从远端获取 prompt 模板执行(回退用内置模板)
|
||||
4. 如果是 Pro 指令:
|
||||
- 检查 plan 是否为 pro/lifetime
|
||||
@@ -208,7 +208,7 @@ curl -s --max-time 3 -X GET https://pua-api.agentguard.workers.dev/v1/stats \
|
||||
└─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
选择后更新 `~/.puav2/config.json` 中的 `flavor` 字段。
|
||||
选择后更新 `~/.pua/config.json` 中的 `flavor` 字段。
|
||||
|
||||
## 四、升级支付流程
|
||||
|
||||
@@ -322,7 +322,7 @@ curl -s --max-time 2 -X POST https://pua-api.agentguard.workers.dev/v1/stats \
|
||||
-d '{"event_type":"xxx","event_data":{}}' > /dev/null 2>&1
|
||||
```
|
||||
|
||||
同时更新本地 `~/.puav2/stats.json` 作为离线备份。
|
||||
同时更新本地 `~/.pua/stats.json` 作为离线备份。
|
||||
|
||||
## 六、节日彩蛋
|
||||
|
||||
|
||||
Reference in New Issue
Block a user