Skip to content

Repository files navigation

CP Studio

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 与 GitHub

  • 查看变更列表和单文件差异后再提交。
  • 支持选择文件提交、提交并推送以及简化的一键提交。
  • 通过 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 仓库备份;删除操作虽然进入回收站,仍建议在重要操作前提交变更。

About

面向算法竞赛命题者的本地题库管理工具,支持 Markdown 编辑、Git/GitHub 同步、题目分类筛选与知识管理,打造现代化命题工作流。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages