Skip to content

ffy6511/flip

Repository files navigation

flip

中文 · English

一个由 skill 驱动 agent 加持的终端刷题工具:一句 prompt,把任意学科变成专属练习题。

特性

  • deck 无关的题库引擎 —— 一套 schema 服务任意学科(SE、编译原理……),题型与角色由 deck manifest 决定,引擎不夹带学科假设。
  • 原生终端 TUI —— deck 选择界面带实时搜索与 Library / Bootstrap 双 tab(←/→ 切换),章节多选,自适应终端宽度与 resize 重绘。
  • 多种刷题模式 —— Train(题库计分)、Review(错题索引计分)、Ans(直接显答案、不计分浏览)、Continue(续上次暂停的练习)。
  • 错题与统计 —— 自动维护错题索引、按章节分布的统计页、每题刷题次数徽章,并支持诊断和清理 stale wrong 记录。
  • 标记与笔记 —— 对单题打标记、写笔记,可按 mark/note/ai 过滤。
  • AI 错题解释 —— 通过可配置后端(codex / 智谱 GLM / ollama ……)对错题生成解释,角色文案来自 deck。
  • 双语翻译 —— 全局开关:source_lang ≠ target_lang 时显示 t 键、写 zh 字段、AI prompt 附译文。
  • 导入 / 导出 / 合并 —— 从 JSON / CSV / deck 目录导入,一键导出备份,merge 支持-append/-upsert/-overwrite 保留学习状态。
  • bundled deck 按需安装 —— 内置 deck 随包发布,在 Bootstrap tab 显式安装、更新、重装和查看 changelog。
  • 配套 agent skill —— flip-deck-init 从原始素材生成 deck,flip-deck-maintain 安全更新已有 deck。

安装

pipx(所有平台推荐):

# macOS / Linux:先装 pipx(若已有可跳过)
brew install pipx                 # macOS/Linux
# Windows:用 PowerShell 装 pipx(若已有可跳过)
python -m pip install --user pipx # 需先装 Python 3.9+
python -m pipx ensurepath         # 让 pipx 注入的命令进入 PATH,之后重开终端生效

pipx install git+https://github.com/ffy6511/flip.git

Homebrew(仅 macOS / Linux):

brew tap ffy6511/tap
brew install flip

测试未发布的分支:

# 直接安装指定分支(例如在 Windows 上验证 Windows 兼容分支):
pipx install git+https://github.com/ffy6511/flip.git@feat/windows-compat
pipx reinstall flip               # 分支有新提交后更新

更新:

brew update && brew upgrade flip  # macOS/Linux,Homebrew 安装
pipx upgrade flip                 # 任意平台,pipx 安装

(可选)Cli 配套 Skills

npx skills add ffy6511/flip/skills   # 安装配套的 skills;各 skill 作用见下文

开发环境:

git clone https://github.com/ffy6511/flip.git
cd flip
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/flip --help

支持的平台

flip 是纯 Python,无编译依赖,在以下平台均可运行:

平台 安装 数据目录
macOS / Linux brew installpipx install ~/.local/share/flip/
Windows pipx install(需先装 pipx) %APPDATA%\flip\

终端需支持 ANSI 转义序列。Windows 10 及以上默认支持(程序会在首次绘制时自动启用虚拟终端);旧版建议升级或在 Windows Terminal 中运行。

$FLIP_HOME 环境变量可覆盖默认数据目录,所有平台一致。

快速开始

直接运行 flip,顶部有两个 tab,用 ←/→ 切换:

  • Library —— 你已安装的 deck。↑/↓ 选中、Enter 进入(输入字符可按 slug/名称实时过滤);
  • Bootstrap —— 管理内置 deck。空格 多选,回车 确认安装/更新/重装,c 查看 changelog,u 切换是否允许上游 note 覆盖本地 note。

内置 deck 随包发布。安装、更新和重装都需要显式确认;flip deck remove <slug> 会把一个 deck 彻底删除,之后可在 Bootstrap 里重新安装。

刷题界面 浏览记录

可选:配套的 agent skill

本仓库的 skills/ 目录里放着一组 skill,教会 AI agent(Claude Code、Cursor、ZCode,……)怎么配合 flip 工作。这些 skill 不随 pip/brew 包分发——用上面安装段里的一行命令装上,然后直接让 agent 干活即可。当前清单:

Skill 作用
flip-deck-init 把任意题库素材(PDF / HTML / Word / 笔记)——或已有的题库 JSON——转成符合 schema 的 deck,并用 flip import 注册。既能从原始材料新建 deck,也能导入已结构化的 JSON。
flip-deck-maintain 维护已有 deck,在 flip deck merge 和直接编辑 tiku.json 之间选择合适路径,同时保留 id、标记、错题历史、笔记、翻译和 Agent Said 字段。

核心概念

  • deck —— 一门学科(软件工程、编译原理……)。存放在 ~/.local/share/flip/decks/<slug>/
  • topic —— 单道题的题干文本(为兼容已有数据,字段名沿用 topic)。
  • chapter —— deck 的 tiku.json 内部分组键。

数据契约见 docs/schema.mddocs/deck-manifest.md

用法

flip                              # 交互:先选 deck,再选模式
flip --version                    # 输出当前安装版本
flip list                         # 列出已注册的 deck
flip doctor se                    # 检查 deck 兼容性并给出修复命令
flip deck train se -c 5-10        # 训练软件工程,第 5–10 章(tiku,计分)
flip deck review se               # 练习软件工程的错题索引(计分)
flip deck continue se             # 继续上次暂停的计分练习
flip deck train se --ans          # 浏览软件工程题目并直接显答案,不计分
flip deck stats se                # 按章节分布统计
flip deck clear-count se --mode all  # 只清空 train/review 刷题次数
flip deck mark se                 # 列出已标记题目
flip deck wrong se                # 列出错题索引题目
flip deck merge se ./new.json --dry-run  # 预览增量更新
flip deck update se              # 用 bundled deck 新版本增量更新,保留学习记录
flip deck prune se               # 删除上游已移除但本地仍残留的 bundled 题目
flip deck versions se            # 查看/切换 bundled deck 的历史 backup 版本
flip deck assign-ids se --dry-run  # 给缺 id 的题目补 q-<12hex> 稳定 id
flip deck migrate se --ids --dry-run  # 把缺失/旧位置 id 迁移为 UUID id
flip deck repair se --dry-run     # 校验 tiku、重建 marked 并清理 stale wrong
flip deck translate se            # 补全缺失的 zh 字段
flip import se ./tiku.json        # 把一份合规 JSON 注册为新 deck
flip export se -o ./se-deck       # 导出 deck,用于备份或迁移
flip config                       # 查看配置和解释后端状态

子命令顺序是 flip deck <动词> <slug>(动词在前,slug 在后)。 章节选择器支持单章、范围、前 N 章和逗号组合:55-10-35,3-4;按 a 可自动选择当前模式下 count 最少的章节。 运行 flip 先进入 deck 选择界面(见 快速开始):在 Library tab 选 deck(↑/↓ + Enter,支持实时搜索),或在 Bootstrap tab(←/→ 切换)安装内置 deck。选好 deck 后再选模式——Train(tiku 题库)、Review(错题索引)、Continue(暂停的计分练习)或 List(统计)——外加 1-5 筛选/显示开关、清空次数动作和一个 Ans 模式 开关(直接显答案、不计分)。 Train 和 Review 的计分结算页可按 d 继续刷本轮错题;后续轮只在本轮内存错题中收敛,不会写入 wrong 索引或 history 统计。 浏览题目时按 e 可编辑标准答案;AI 追加提示和用户笔记输入框支持 Ctrl+U 一次清空当前输入。

目录结构

src/flip/      引擎、TUI、存储、配置、deck manifest、AI 解释
docs/          schema.md(tiku.json)、deck-manifest.md、import.md
decks/example/ 最小示例 deck(同时用作测试夹具)
skills/        flip-deck-init —— 从原始材料引导出一个 deck 的 agent skill
tests/         pytest 套件,包含聚焦的 TUI 循环回归测试

致谢

  • 本项目的整体灵感来自 Zhang-Each/SE-FSE-exercise
  • flip 中部分 tiku deck 的原始题目数据来自该项目提供的 JSON 文件。

About

A terminal quiz tool powered by skill-driven agent: turn any subject into tailored exercise with one simple prompt. 一款由技能驱动代理提供支持的终端测验工具:通过简单的提示词将任何主题变成量身定制的练习。

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages