CP Studio 是一款面向算法竞赛命题者的 Windows 桌面工作台,用于统一整理本地题库、题面、题解、标准程序和相关资料。
项目采用本地优先(Offline-first)和 Git 优先(Git-first)的设计:一个工作区对应一个 Git 仓库,题目文件始终保存在用户选择的本地目录中,可通过 Git/GitHub 进行版本管理和多设备同步。
当前版本为早期开发版本,优先完善题面整理和单人题库维护流程,暂不提供测试数据管理功能。
- 新建空白工作区、打开已有本地仓库或从 GitHub 克隆仓库。
- 搜索、状态筛选、难度排序和时间排序。
- 可选择符合 CP Studio 结构的题目文件夹导入工作区,已有文件保持不变并自动补齐缺失的标准文件。
- 题目 ID 可由用户指定;创建后只能通过冲突检查后的专用重命名操作修改。
- 可视化编辑标题、CF 等效难度、标签、命题状态、备注和原题链接。
- 删除本地题目时移入 Windows 回收站,常规 Git 同步不会删除远程副本。
- 基于 Monaco Editor,支持常用 VS Code 编辑快捷键、查找和替换。
- 直接编辑中文/英文题面、题目大意、题解、
std.cpp、Hydro 配置和题目信息。 - Markdown 支持 GFM、KaTeX、Mermaid、代码高亮和图片粘贴。
- 支持源码、分栏和预览模式。
- 自动保存默认延迟 3 秒,可设置为 1–30 秒或完全关闭。
- 复制、剪切和粘贴使用 Windows 系统剪贴板。
- 界面支持浅色、深色和跟随 Windows 系统三种主题,编辑器与 Mermaid 预览会同步切换。
- 以当前题目目录为根目录显示树形文件列表。
- 支持搜索、新建文件、新建文件夹、刷新和移入回收站。
- 单击图片显示缩略图,双击后在可关闭标签中预览。
- 双击 UTF-8 文本文件会在顶部生成可关闭的编辑标签;Markdown 文件仍可实时预览。
- 固定题目文件会跳转到已有编辑标签,不会重复打开。
- 核心题目文件及其父目录受到保护,不能从文件管理器误删。
- 全局导航、文件栏和右侧题库栏均可独立收起,状态保存在本机。
为避免误将大型文件或可执行文件载入编辑器,文件管理器采用以下限制:
| 文件类型 | 处理方式 |
|---|---|
| 不超过 1 MB 的 UTF-8 文本 | 可编辑和保存 |
| 1–10 MB 的 UTF-8 文本 | 只读显示前 256 KB |
| 超过 10 MB 的普通文件 | 不载入内容 |
| PNG/JPEG/GIF/WebP/BMP | 不超过 20 MB 时可预览 |
| 二进制或非 UTF-8 文件 | 仅显示文件信息和安全提示 |
所有路径都在 Rust 后端进行 Windows 文件名、路径穿越和题目根目录边界检查。
- 查看变更列表和单文件差异后再提交。
- 支持选择文件提交、提交并推送以及简化的一键提交。
- 通过 Git Credential Manager 登录 GitHub,支持私有仓库。
- 远程题库只在用户手动点击刷新时访问网络。
- 支持搜索远程题目、隐藏本地已有题目、批量下载和经确认后覆盖本地副本。
- 远程题目删除必须在远程题库中明确执行;本地副本会保留并回到未提交状态,可在需要时重新上传。
- V1 只操作远程默认分支;发生冲突时优先保留本地版本。
<problem-id>/
├── problem/
│ ├── problem.yaml
│ ├── problem_zh.md
│ ├── problem_en.md # 可选
│ ├── testdata/ # V1 保留但不管理
│ └── additional_file/
├── std.cpp
├── summary.md
├── solution.md
└── metadata.yaml
仓库中的 .cpstudio/index.json 是可重新生成的远程题目索引。实际题目文件始终是可信数据源。
- Tauri 2:Windows 桌面容器和系统能力
- Rust:本地文件、Git 调用、路径校验和后台任务
- React 19 + TypeScript 6:界面与状态管理
- Monaco Editor:代码和 Markdown 编辑
- Vite 8:前端开发与构建
- Vitest + Rust Test:自动化测试
需要:
- Windows 10/11
- Node.js 20 或更高版本
- Rust stable(MSVC 工具链)
- Visual Studio 2022 C++ Build Tools
- Git for Windows
安装依赖并启动桌面开发环境:
npm install
npm run desktop:dev仅启动浏览器调试界面:
npm run dev构建 Windows 安装包:
npm run desktop:build默认安装包输出位置:
src-tauri/target/release/bundle/nsis/
src-tauri/target/release/bundle/msi/
npm run lint
npm test
npm run build
cargo fmt --manifest-path src-tauri/Cargo.toml --all -- --check
cargo test --manifest-path src-tauri/Cargo.toml
cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings- 仅支持 Windows,不计划为 V1 提供跨平台版本。
- 主要面向单人维护题库。
- 测试数据生成、校验和管理尚未实现。
- 工作区内容由用户自行通过 Git 仓库备份;删除操作虽然进入回收站,仍建议在重要操作前提交变更。