v0.1.0
macOS + Windows
Tauri Desktop
← 返回首页
CodePapr 教程
CodePapr 是一个基于 DeepSeek 缓存友好的本地编码 Agent 系统。它不只是代码生成器,而是具备理解 + 执行能力的智能体工作台——能读取项目、搜索代码、执行命令、修改文件、预览结果,全部在本地完成。
什么是 CodePapr
CodePapr 是一个缓存优先的编码代理(Agent)系统,以 Tauri 桌面端为公开入口。它通过共享 Agent Runtime 为桌面工作台和内部自动化宿主提供能力,使 AI 代理能够在真实项目仓库里完成读取、修改、执行、验证与预览。
CodePapr 不是传统的 AI 聊天工具,也不是 IDE 插件。它是一个在终端/桌面中运行的自主代理,能真正理解你的项目上下文并自动执行开发任务。
核心设计理念
- 本地优先:项目上下文尽量不离开工作区,文件和命令执行都在本地完成
- 单一 Runtime,多入口复用:桌面端与内部自动化宿主共用同一套 Agent、Session、ToolRegistry、Provider 语义
- DeepSeek 缓存优化:稳定内容前置、易变内容后置,最大化前缀缓存命中率以降低 token 成本
- 结构化代码修改:使用 Search/Replace Diff 机制,先校验再写入,避免行号错位
- 可验证执行链路:每一轮请求、响应、工具调用和缓存统计都可追踪
CodePapr 与主流 AI 编程工具对比
2026 年,AI 编程工具已经很成熟。以下对比基于各工具当前公开能力,如实呈现差异。
| 维度 | Cline (62k⭐) | Aider (46k⭐) | Devin Desktop | CodePapr |
| 形态 | SDK / VS Code / JetBrains / CLI / Kanban | 终端命令 | 独立桌面 IDE | 独立桌面应用(Tauri 2) |
| 多 Agent | ✅ 团队 + 协调者 + 定时调度 | ❌ 单 Agent | ✅ 多 Agent 舰队 + ACP 协议 | ✅ 主 Agent + 3 内置子代理 + 自定义 |
| 任务规划 | Kanban 看板 | ❌ | Spaces + Kanban | TodoList:自动创建 / 进度追踪 / re-plan |
| 代码理解 | 读取文件 + grep + LSP | Repo Map | Fast Context(毫秒级) | CodeGraph 语义图:13 个分析 action |
| 回退机制 | Checkpoints 快照 | Git commit 回退 | Diff review | Git auto-commit checkpoint + reset --hard:代码与消息原子性恢复 |
| 缓存优化 | ❌ | ❌ | ❌ | DeepSeek 三层前缀缓存,跨会话复用 |
| 模型支持 | 几乎所有(含本地) | 几乎所有(含本地) | 内置免费模型 + 第三方 | DeepSeek / OpenAI / Claude / 本地 |
| 扩展性 | SDK + MCP + 插件系统 | 配置文件 | MCP + Extension + ACP | 自定义 Agent / Skills / 命令 / 规则 |
| 价格 | 开源免费 + API 费用 | 开源免费 + API 费用 | 免费 / $20 Pro / $200 Max | 开源免费 + API 费用 |
CodePapr 的独特价值:与其他工具互补而非替代。如果你需要 IDE 深度集成和丰富的插件生态,Cline/Aider/Devin Desktop 更成熟。如果你看重 独立桌面工作台、DeepSeek 前缀缓存极致省成本、多子代理协作体系和对话即可回退的原地重置——CodePapr 是最佳选择。
谁适合使用 CodePapr
- 已掌握至少一门编程语言,能读懂基础语法和项目结构
- 希望借助 AI 大幅提升开发效率的工程师
- 独立开发者或需要长期维护复杂项目的技术负责人
- 习惯在命令行和可视化界面之间切换的开发者
- 关注 token 成本,希望利用 DeepSeek 缓存优化降低开销的团队
需要具备的基础能力
- 基础编程能力(能读懂并编写简单代码)
- 基本的代码阅读与理解能力
- 会使用常见开发工具(编辑器、命令行、Git)
- 具备基本的项目结构认知(目录、模块划分)
- 愿意理解代码,而不是完全依赖 AI
支持的 LLM Provider
DeepSeek(原生)
OpenAI(兼容)
Claude / Anthropic(兼容)
本地 OpenAI 兼容端点
环境要求
| 组件 | 最低版本 | 用途 |
| Node.js | 18+ | 运行时和包管理 |
| npm | 9+ | 依赖管理 |
| Rust toolchain + Cargo | stable | 桌面端编译(debug/release/publish) |
| .NET SDK | - | C# Roslyn analyzer(release 构建需要) |
注意:如果只做前端开发或只阅读源码,完成 npm install 和 npm run build 通常就够了。桌面端调试和打包才需要 Rust toolchain。
标准安装
npm install
npm run build
安装验收
npm run verify
通过这一步,说明当前机器至少满足:Node 依赖正确、workspace 构建正常、workspace 测试正常、CLI E2E 正常、Tauri cargo check 正常。
支持平台
| 平台 | 架构 | 状态 |
| macOS | arm64 (Apple Silicon) | 主要开发环境 |
| Windows | x64 | 支持 |
外部依赖
根据你要执行的操作,可能还需要:
- 可用的模型 API key(DeepSeek / OpenAI / Claude 或本地兼容端点)
- Chrome 或 Chromium 兼容浏览器(用于浏览器交互和截图)
- VS Code(可选,用于工作区任务和调试配置)
三种启动方式
| 命令 | 用途 |
npm run debug | 开发调试,热重载,适合长会话和日常使用 |
npm run release | 直接启动优化后的桌面端运行文件(不打包安装包) |
npm run publish | 生成当前平台的安装包(.dmg / .msi)并整理到 Release/ |
配置存放位置
| 层级 | 路径 | 作用 |
| 应用级 | ~/.codepapr/codepapr.sqlite | provider、model、API key、语言、采样参数 |
| 项目级 | <workspace>/.CodePapr/ | 项目状态、会话记录、规则、Agents、Skills |
Provider 模式
| 模式 | 说明 | 适用场景 |
deepseek | DeepSeek 官方 provider | 推荐默认,缓存优化效果最好 |
openai | OpenAI 兼容格式 | 接入 OpenAI 或兼容服务 |
claude | Claude/Anthropic 兼容格式 | 接入 Claude 或兼容端点 |
DeepSeek 接口参考地址
https://api.deepseek.com
https://api.deepseek.com/anthropic
环境变量回退顺序
内部自动化宿主与 provider 兼容层会按以下顺序读取 API key:
DEEPSEEK_API_KEY
OPENAI_API_KEY
ANTHROPIC_API_KEY
应用级设置项
LLM 设置
- provider — 模型提供商
- model — 模型名称
- baseURL — 自定义端点地址
- API key — 认证密钥
- temperature — 生成温度
- maxTokens — 最大输出 tokens
- thinkingEnabled / thinkingEffort — 思考模式
路由设置
- fast model 开关 — 是否启用快速模型
- fast model name — 快速模型名称(默认
deepseek-v4-flash)
- max tool rounds — 最大工具轮次(默认 500)
- max context tokens — 最大上下文 tokens(默认 200k)
- max conversation rounds — 最大对话轮数(默认 24)
快速模型路由
| 场景 | 使用模型 | 温度 |
| 主 Agent 对话 | 主模型(默认 deepseek-v4-pro) | 默认 |
| 上下文压缩 | 快速模型(默认 deepseek-v4-flash) | 0.1 |
| 子代理派发(重型/执行类) | 主模型 | 用户配置 |
| 子代理派发(只读分析类) | 快速模型 | 用户配置 |
提示:桌面端设置面板分为 General / LLM / 子Agent / 高级 四个 Tab。General 标签页包含语言、调试和许可证信息,子Agent 标签页可配置独立导师模型及子代理自定义提示词、Top P、嵌套深度和推理模式。
三步启动
- 准备配置:在桌面端设置中填写 API key、provider 和 model
- 选择入口:直接使用桌面端(当前公开产品入口只保留桌面工作台)
- 选择模式:Ask 负责解释和分析,Plan 负责拆解方案,Agent 负责实际执行
最短路径
npm install
npm run build
npm run debug
首次使用流程
- 打开设置,填写 provider、model 和 API key
- 选择项目文件夹
- 在 Ask、Plan、Agent 中选择当前任务模式
- 输入任务描述,让代理执行或分析
- 在文件树、编辑器、Git、预览面板中复核结果
自动恢复:桌面端会记住你上次打开的项目目录,并在下次启动时自动恢复该项目及其项目级聊天记录。只有当项目路径失效或你改为打开其它目录时,才会看到空工作区。
使用入口
| 入口 | 适合场景 |
| Desktop Workbench | 长会话、文件树、Git、预览、浏览器交互——可视化工作台 |
注意:仓库中同时保留 @codepapr/cli 终端入口,支持终端交互和脚本化自动化。CLI 同样内置 Explore、Scout、Mentor 三个子代理,与桌面端功能一致。
Ask、Plan、Agent 不是不同产品,而是同一套 Runtime 的三种工作方式。
Ask 分析模式
适合:解释架构、梳理模块职责、分析报错原因、先问清楚再决定是否执行。
特点:
- 默认不改文件、不跑命令
- 遇到时效性问题时,优先走只读时间/网页工具核实
- 只有你明确要求基于项目核实,它才会进入只读工具链
Plan 规划模式
适合:大改动前先出执行方案、想看影响文件和验证路径、把复杂任务拆成清晰步骤。
特点:
- 默认先给任务清单
- 会给影响文件、执行顺序、验证方式和风险
- 适合先规划,再切到 Agent 执行
Agent 执行模式
适合:修复 bug、实现功能、跑测试与验证、需要真正读写文件和调用工具的任务。
特点:
- 会主动搜索项目、读写文件、跑命令、做验证
- 会使用工作区工具、后台命令、shell、预览和浏览器能力
- Agent 主执行循环在 Web Worker 中运行,长任务不会阻塞界面
workspace_run_command 等长命令会在工具调用卡片中显示运行状态和日志
- 主执行默认最多连续运行 500 个内部工具轮次
- 自愈补跑最多 5 轮,用失败指纹去重
如何给出有效任务
CodePapr 的实际表现很依赖任务描述质量。最有效的提示词通常包含:
- 目标是什么
- 改动范围在哪里
- 参考实现在哪
- 不能动什么
- 验证标准是什么
推荐写法
修复 packages/@codepapr/ui 里预览关闭后后台进程未停止的问题。
先找当前预览会话和后台进程的绑定逻辑,再做最小修改。
改完后至少跑受影响范围的验证,如果没有窄验证,再说明原因。
不够好的写法
帮我修一下预览。
经验之谈:把它当作一个能执行任务的工程代理,而不是纯聊天机器人,会得到更稳定的结果。
界面结构
- 左侧:会话列表和快捷入口
- 中间:聊天区,展示消息、工具调用、状态和执行总结
- 右侧:文件树与代码预览
- 辅助区域:Git 面板、后台进程、网页预览
桌面端完整能力
- 项目文件树浏览
- Monaco 代码预览(VS Code 引擎)
- 多语言 LSP hover、definition 和问题标记
- Ask / Plan / Agent 模式切换
- 工具调用过程可视化
- Git diff、最近提交、分支切换与安全回退
- 后台进程管理
- 应用内网页预览
- 浏览器页面交互与截图
- 项目配置入口(规则、Agents、Skills)
什么时候优先用桌面端
- 你在做多轮修复或重构
- 你需要一边看文件树一边让代理工作
- 你需要 Git diff、页面预览或页面自动化
- 你希望把会话、文件和验证收拢在一个界面里
Git 集成
- Git 面板:展示 staged/unstaged diff、最近提交历史、分支创建/切换、本地提交、安全擦除本地改动
- 8 个 Agent Git 工具:status、diff、history、branch_checkout、stage、commit、restore、reset
- 自动初始化:如果当前工作区还不是 Git 仓库,面板可直接执行
git init
对话重置(Git Checkpoint)
每次 Agent 完成一轮对话后,系统自动执行 git add -A && git commit -m "codepapr:checkpoint" 创建快照。当你需要回退时:
- Hover 任意用户消息,点击"重置到此点"
- 系统
git reset --hard 到该消息对应的 checkpoint commit
- 所有文件原子性恢复到对话那一刻的状态
- 消息列表同步截断,后续对话全部移除
- 非 Git 仓库自动降级到逐文件编辑历史撤销
.CodePapr/AGENTS.md — 全局项目规则
全项目规则会注入主 Agent 和所有子代理。适合写:
- 代码风格和目录约定
- 构建、测试、发布命令
- 禁止改动的路径或行为
- 项目背景和验收标准
自动注入流程:代理会按以下优先级查找规则文件并拼进稳定系统提示词:
1. .CodePapr/AGENTS.md
2. .CodePapr/rules.md
文件不存在会被自动跳过。
配置入口
桌面端项目头部的"配置"入口可以:
- 创建/编辑
.CodePapr/AGENTS.md(不存在时生成默认模板)
- 创建/编辑/删除自定义子代理(
.CodePapr/agents/*.md)
- 创建/编辑/启用/停用/删除 Skills(
.CodePapr/skills/**/SKILL.md)
数据位置总览
| 路径 | 作用 |
~/.codepapr/codepapr.sqlite | 应用级设置、会话和缓存统计 |
<workspace>/.CodePapr/project.sqlite | 项目级状态、聊天记录、缓存统计 |
<workspace>/.CodePapr/store | 项目级文本记录 |
<workspace>/.CodePapr/skills | 项目级技能文件 |
<workspace>/.CodePapr/agents | 项目级子代理定义 |
<workspace>/.CodePapr/commands | 项目级自定义命令 |
Search/Replace Diff(YOLO Diff)
CodePapr 的自动修改不依赖标准 Git diff 行号。多处局部修改会优先生成 Search/Replace 块:
<<<<<<< SEARCH
文件里已经存在的旧代码
=======
替换后的新代码
>>>>>>> REPLACE
应用规则
SEARCH 必须能在目标文件中精确匹配
- 同一个
SEARCH 如果匹配多处,会被拒绝,避免误改
- 同一次批量修改会先校验所有文件和所有块,任意块失败则不写入任何文件
- 换行会兼容 LF / CRLF
- 失败信息会回到 Agent 上下文,触发重新读取原文件和自愈重试
推荐使用场景
- 跨多个文件但每个文件只是局部修改
- 修复测试、lint、类型错误时需要保持上下文精确
- Agent 模式下需要程序可解析、可校验、可回滚的修改格式
不推荐使用场景
- 新建文件或整文件重写 → 使用写文件工具
- 只改一个很小的局部块 → 普通 patch 更直接
什么是 Skill
Skill 是主 Agent 的可复用操作手册,适合沉淀搜索策略、排错流程、发布检查、审查清单和项目固定工作方法。它不会创建独立子代理,而是作为项目级上下文供模型按需选择。
Skill 文件格式
以目录包为标准,放在 .CodePapr/skills/**/SKILL.md,目录里可放 assets/、references/、scripts/ 等资源。
name: search
description: 使用公开网页、官方文档和社区资料进行可验证搜索
当任务需要公开资料、当前事实、第三方 API 用法或报错排查时:
- 官方文档优先,其次 GitHub issue / PR,再看社区答案。
- 精确报错使用双引号,例如 "Cannot find module"。
- 限定站点使用 site:,例如 site:developer.mozilla.org fetch abort。
- 同时带上库名、版本号、运行环境和关键错误码。
Skill 加载机制
- 运行时只把用户启用 Skill 的 name + description 注入稳定上下文
- 模型自行判断是否需要某个 Skill
- 只有选定后才调用
skill_load 读取完整内容
- 启用状态保存在
.CodePapr/project.sqlite
内置 search Skill
默认 search Skill 包含常用资料源和方法:
- 官方文档:Microsoft Learn、OpenAI、MDN、Node.js、npm、PyPI、Rust、Tauri、Vite、React
- 代码与问题:GitHub repositories、issues、pull requests
- 社区资料:Stack Overflow、包管理器页面、维护者博客
- 搜索方法:
site: 限定站点、双引号精确报错、包名加版本号
内置子代理
CodePapr 自带三个内置子代理,主 Agent 可通过 task 工具直接调度,无需额外配置:
| Agent | 用途 | 模型 | 工具 |
| explore | 只读代码分析:搜索项目文件、定位符号、分析依赖关系 | fast | file_read, code_graph, lsp, time |
| scout | 网络搜索:查找文档、API 参考、最新资料 | fast | web_access, open, browser, time |
| mentor | 架构/算法/调试高层指导(不写代码、不调工具) | mentor* | 无 |
* Mentor 默认使用主模型,可在设置中启用独立导师模型(支持独立的 API Key、Base URL 和模型选择)。
自定义子代理
在 .CodePapr/agents/<name>.md 中用 YAML frontmatter + 正文声明一个子代理,主代理可以把子任务委派给它。同名 Agent 会覆盖内置定义。
description: reviewer 负责审查当前改动、定位风险并给出最小修复建议
mode: subagent
model: fast
temperature: 0.2
tools:
workspace_read_file: true
workspace_search_text: true
workspace_project_diagnostics: true
workspace_git_status: true
workspace_git_diff: true
workspace_write_file: false
workspace_run_command: false
你是 reviewer,一个只读代码审查子代理。
职责:
- 阅读主代理委派的目标、相关文件和当前 diff。
- 优先找真实 bug、行为回归、边界条件遗漏和缺失验证。
- 给出最小修复建议,指出应修改的文件和验证命令。
边界:
- 默认不直接改文件。
- 不重复总结无关代码风格,只报告影响正确性、可靠性或可维护性的发现。
输出格式:
1. Findings:按严重程度列出问题
2. Suggested Fix:给出最小修改方向
3. Verification:列出建议运行的验证命令
子代理配置说明
model:覆盖模型,可选 fast(快速模型)或具体模型名
temperature:温度参数,可选数字
tools:工具开关,缺省继承全部工具,声明空对象 {} 表示无工具
- 文件名(不含
.md)即子代理名称,与内置 Agent 同名则覆盖
- 改
description 让主代理知道何时调用它
- 改
tools 控制读写/命令权限
子任务机制(两种方式)
| 方式 | 触发 | 说明 |
| 编排层自动拆解 | 系统自动决策 | Agent 模式下,任务含执行动词且够复杂时,LLM 判断是否需要拆成 2-5 个子任务并行/串行执行 |
| Task 工具主动委派 | Agent 主动调用 | 主 Agent 推理过程中显式调用 task 工具,将子任务委派给独立子 Agent(含内置和自定义) |
子代理运行模型
- 每个子代理拥有独立 Session、ToolRegistry(按 tools 过滤)、Provider
- 最大嵌套深度 2 层(子代理不能再委派子代理给自己)
- 子代理最多执行 50 个内部工具轮次(主代理 500)
- Explore、Scout 使用快速模型;Mentor 使用独立导师模型或主模型
- 自定义 prompt 可在设置面板的 Mentor 标签页中覆盖
与 AGENTS.md 的区别
.CodePapr/AGENTS.md 是全局项目规则,所有模式、所有子代理都会继承;自定义 Agent 是专职子代理,只有主代理通过 task 工具委派子任务时才启用。前者适合写"所有任务都遵守什么",后者适合写"某一类任务交给谁做、能用哪些工具"。
内置命令
命令支持 --name(推荐)和 /name(兼容旧版)两种格式。
| 命令 | 作用 | 示例 |
/help | 列出所有命令及说明(本地,零 token) | /help |
/commands | /help 的别名 | /commands |
/review | 审查当前改动或指定范围 | /review src/App.tsx |
/fix | 定位并修复指定问题 | /fix 登录按钮无响应 |
/test | 补测试或运行相关测试 | /test src/utils/format.ts |
/explain | 解释文件、符号、错误或实现 | /explain handleSubmit 函数 |
/diagnose | 诊断报错、慢操作或异常行为 | /diagnose 页面加载超过 5 秒 |
/refactor | 保持行为不变的前提下整理代码 | /refactor src/components/Modal.tsx |
/doc | 为变更或功能更新文档 | /doc 新增的退款接口 |
自定义命令模板
在 .CodePapr/commands/<name>.md 中声明可复用的提示词模板:
description: 审查并修复 lint
agent: code-reviewer
请审查 $ARGUMENTS 的改动,并修复其中的 lint 问题。
参考规则见 @.CodePapr/AGENTS.md
当前状态:!`git status -s`
模板语法
| 语法 | 说明 |
$ARGUMENTS | 全部参数 |
$1 $2 ... | 第 N 个参数 |
@path | 内联文件内容 |
!`cmd` | 执行命令并嵌入输出(仅简单命令) |
使用方式:在输入框输入 / 会弹出命令面板,列出所有可用命令并支持键盘 ↑↓ 选择。输入 /命令名 参数 即可调用。-- 格式兼容旧版。
架构概览
User → Desktop Workbench → Shared Agent Runtime
↓
┌─────────────┼──────────────┐
Provider SQLite Tool Registry
Adapters (App/Project) (Workspace Tools)
State
↓
┌──────────┼──────────┐
DeepSeek OpenAI Claude
包级职责
| 包 | 角色 | 主要责任 |
@codepapr/types | 共享协议层 | 统一消息、请求、响应、工具和统计类型 |
@codepapr/common | 公共基础设施 | 日志、哈希与通用工具 |
@codepapr/core | 运行时核心 | Agent、Session、ToolRegistry、缓存分区、CodeGraph、Prompt 组装 |
@codepapr/api | Provider 适配层 | RequestBuilder、CacheValidator、provider 实现 |
@codepapr/db | 持久化层 | SQLite 封装与 repository |
@codepapr/cli | 内部自动化宿主 | 组装 provider、workspace tools、工程调试入口 |
@codepapr/ui | 桌面工作台 | React、Zustand、Tauri、WorkerBackedAgent |
桌面端 Agent 桥接
ChatPanel → agentStore.sendMessage() → WorkerBackedAgent.chat()
├─ Worker Thread: Agent.chat() → LLM
└─ Main Thread: tool execution → Tauri invoke
桌面端不直接调用 core Agent,而是通过 WorkerBackedAgent 将 LLM 聊天循环卸载到 Web Worker 中,确保长任务不阻塞 UI。
技术栈总览
| 层 | 技术 |
| 前端 UI | React 18、TypeScript、Zustand 5、Monaco Editor、Tailwind CSS 3、Vite 8 |
| 桌面框架 | Tauri 2(Rust) |
| Rust 后端 | rusqlite (SQLite)、headless_chrome (浏览器)、tree-sitter (16 种语言)、LSP stdio 桥接(15 个语言族) |
| Agent 卸载 | Web Workers |
| 测试 | Vitest 4 |
三层 Prompt 注入
系统将 prompt 分为三层注入,按稳定度从高到低排列以最大化 DeepSeek 自动前缀缓存命中:
| 层 | 注入位置 | 内容 | 稳定性 |
| 第一层 | System Prompt | Base Identity + Rules + Mode + Workspace Path + Core Constraints | 跨会话复用 |
| 第二层 | Session Bootstrap | Skills Summary + CodeGraph + Custom Guidance | 跨轮次完全稳定 |
| 第三层 | Runtime User Prompt | Mode Header + User Input + Diagnostics | 每轮可变 |
缓存命中模式
同一会话多轮工具调用:
Round 1: [system][bootstrap][user] ← 全部缓存
Round 2: [system][bootstrap][user][asst_1][tool_1] ← 前缀命中
Round 3: [system][bootstrap][user][asst_1][tool_1][asst_2][tool_2] ← 前缀命中
跨会话(同项目):
Session A: [system][bootstrap][user_A] → system+bootstrap 缓存复用于 Session B
跨会话(不同项目):
各有不同 workspace path → system prompt 的 base+constraints 部分仍可复用
关键不变量
- 用户自定义提示词进入 session bootstrap 而非每轮 user prompt
- Skills 进入 bootstrap 而非 system prefix
- Workspace 路径只出现在 system prompt,不在 bootstrap 中重复
- Custom guidance 只在 bootstrap 中出现一次
LSP 桥接架构
桌面端 LSP 采用Tauri 原生宿主 + stdio JSON-RPC 的结构,通过 src-tauri/src/lsp.rs 管理 language server 子进程、stdin 写入、stdout reader 线程和消息队列。
支持的语言族(15 种)
| 语言 | 主 LSP Server | 类型 | 内置 |
| TypeScript / JS / TSX / JSX | typescript-language-server | Node.js npm | 是 |
| HTML | vscode-html-language-server | Node.js npm | 是 |
| CSS / SCSS / LESS | vscode-css-language-server | Node.js npm | 是 |
| JSON / JSONC | vscode-json-language-server | Node.js npm | 是 |
| YAML | yaml-language-server | Node.js npm | 是 |
| Python | pyright | Node.js npm | 是 |
| ShellScript | bash-language-server | Node.js npm | 是 |
| C# | csharp-ls / CodePapr.CSharp.Analyzer / omnisharp | .NET binary | 是 |
| Rust | rust-analyzer | Native binary | 是 |
| Java | Eclipse JDTLS + Temurin JRE 21 | Java binary | 是 |
| C / C++ | clangd v22.1.6 | Native binary | 是 |
| Go | gopls | Native binary | 是(尽力) |
| Swift | sourcekit-lsp(macOS Xcode toolchain) | 系统 | 否 |
| SQL | sqls | Native binary | 是 |
| Markdown | marksman | Native binary | 是 |
C# LSP 优先级链
C# 的 LSP 有多层回退机制:
csharp-ls(dotnet tool,优先从系统 PATH 或 ~/.dotnet/tools 查找)
CodePapr.CSharp.Analyzer(内置自定义 Roslyn sidecar,支持跨文件和跨 ProjectReference 解析)
omnisharp -lsp(回退)
- 内建正则 fallback 符号解析
管理安装(Managed LSP)
桌面端会在运行时按需托管安装缺失的 LSP:
- Node 系(7 个):typescript-language-server、vscode-langservers-extracted(含 HTML/CSS/JSON)、yaml-language-server、pyright、bash-language-server — 通过 npm 安装,使用内置 Node.js runtime v20.12.2
- 二进制系(6 个):clangd v22.1.6、rust-analyzer、JDTLS + Temurin JRE 21、sqls、marksman、gopls — 从官方源下载
- C#:通过
dotnet tool install -g csharp-ls 安装,或使用内置 Roslyn sidecar
- 可通过
CODEPAPR_DISABLE_MANAGED_LSP_DOWNLOAD=1 禁用自动托管下载
Tree-sitter 语法解析(16 种语言)
内建 tree-sitter 语法树解析,用于 CodeGraph 和 fallback 符号提取:TypeScript、JavaScript、Python、Rust、Java、Go、C++、Bash、C#、CSS、HTML、JSON、PHP、Ruby、Kotlin。
LSP 加载策略
- 工作区启动时不会批量预热 LSP
- 当前文件显示后才异步加载该文件的 LSP
- 生成/修改/保存写盘后异步刷新相关文件的 diagnostics 和符号缓存
- LSP 后端缓存全 workspace diagnostics,跨文件错误也能被检测
- 代码区只有有问题时才显示提示,没有问题时保持干净
- 上层 LSP 不可用时,回退到内建 tree-sitter fallback 符号解析
验证命令矩阵
| 命令 | 范围 | 适合场景 |
npm run build | 全 workspace 构建 | 改完源码后确认产物可生成 |
npm run test | 全 workspace 测试 | 日常主回归 |
npm run test:e2e | CLI E2E | 改到 CLI、会话装配或 scripted provider |
npm run lint | 静态检查 | 提交前质量门禁 |
npm run audit | 安全审计 | 发布前或依赖变更后 |
npm run smoke:agent-tools | 真实模型工具烟测 | 改到工具选择、shell、浏览器交互 |
npm run smoke:lsp-preview | 多语言 LSP 烟测 | 改到 LSP hover、definition |
npm run verify | 最完整验证 | 本地发布前(含 cargo check) |
推荐提交前回归顺序
npm run build
npm run test
npm run test:e2e
npm run verify
桌面端发布
npm run debug
npm run release
npm run publish
发布辅助脚本
- macOS:
./publish-codepapr.command
- Windows:
publish-codepapr.cmd
发布前检查
npm run release:prep
npm run publish:dry-run
发布包内置内容:官方桌面发布包会同时内置默认 LSP 所需的 Node.js runtime v20.12.2、7 个 Node 系语言服务器(typescript-language-server、vscode-langservers-extracted、yaml-language-server、pyright、bash-language-server)、C# Roslyn sidecar + .NET SDK、JDTLS + Temurin JRE 21、clangd v22.1.6、rust-analyzer、sqls、marksman 和 gopls。用户首次使用默认语言时不需要再额外下载这些组件。
1. 先理解再执行
适合第一次接手仓库或需求还不够清晰时:
- Ask:解释系统结构、定位模块
- Plan:输出任务清单和验证方案
- Agent:按清单实施
2. 直接修复问题
适合你已经知道目标,只是不想手动查和改:
修复 packages/@codepapr/api 里缓存统计不正确的问题。
先定位统计汇总逻辑,再做最小修改,最后跑相关测试。
3. 启动前端并在应用内预览
适合 UI 调整、页面行为验证和预览联动:
- 让 Agent 启动 preview session 或后台命令
- 在应用内预览中查看页面
- 如果还要点页面、填表单或截图,继续用浏览器工具
4. 保留终端上下文做连续操作
适合脚本、REPL、交互式 CLI 或多步 shell 流程:
- 打开 shell session
- 连续发送命令
- 按输出继续推进
- 完成后关闭 session
5. 复盘历史会话与成本
- 查看 session 列表
- 查看指定 session 的 stats(缓存命中/未命中/token 使用)
- 对照当前模型设置判断成本是否合理
DeepSeek 模型参考
| 模型 | 上下文 | 最大输出 | 缓存命中输入 | 缓存未命中输入 | 输出 | 并发 |
deepseek-v4-flash | 1M | 384K | 0.02 元/M tokens | 1 元/M tokens | 2 元/M tokens | 2500 |
deepseek-v4-pro | 1M | 384K | 0.025 元/M tokens | 3 元/M tokens | 6 元/M tokens | 500 |
在 CodePapr 里怎么选
- 主模型默认是
deepseek-v4-pro——用于 Ask、Plan、Agent 主执行流程
- 快速模型默认是
deepseek-v4-flash——用于上下文压缩、子任务规划、只读轻型子代理
- 思考强度(thinkingEffort)默认为
max(最强推理),可在 LLM 设置 tab 中切换为 high
成本优化建议
- Ask 和轻分析任务优先用更便宜模型
- 大改动前先走 Plan,减少无效执行轮次
- 让任务描述更具体,减少模型反复搜索和修复的轮数
- 保持系统提示与工具边界稳定,最大化前缀缓存命中
1. 启动后提示没有 API key
先检查桌面端设置是否已保存,以及是否设置了对应环境变量(DEEPSEEK_API_KEY / OPENAI_API_KEY / ANTHROPIC_API_KEY)。
2. 内部自动化脚本跑不起来或命令找不到
确认是否执行过 npm install 和 npm run build,以及当前仓库是否位于 OneDrive 路径下导致 .bin shim 异常。
3. Agent 遇到 vite、tsc、eslint、模块缺失错误
优先当成依赖未安装或本地包未构建,而不是先怀疑云同步或磁盘问题。
4. 浏览器工具不可用
通常是因为本机没有可检测到的 Chrome 或 Chromium 兼容浏览器。
5. 改完代码后测试还是旧结果
这个仓库里不少包会通过各自的 dist 入口参与测试或引用。改了源文件后,如果结果看起来没变,先重新 build 受影响包,再跑验证。
6. 修改源码后构建原则
重要:改源码 → 先 build → 再跑受影响测试 → 再跑更大范围验证。当结果看起来像"没生效"时,先怀疑 build 没补,而不是先怀疑运行时异常。
7. 如何使用本地模型
在设置中可以接入本地模型 provider(OpenAI 兼容端点),用于离线或私有部署场景。在支持的模型下,可直接向聊天框粘贴或拖入图片作为输入。
使用建议
新手:先用 Ask 理解系统 → 再用 Plan 看清楚改动范围 → 最后用 Agent 做真正执行。
老手:直接在 Agent 模式里给明确目标 → 明确影响文件和验证要求 → 用桌面端完成对话、Git、预览和浏览器联动。
CodePapr v0.1.0 · 本教程基于项目源码及文档编写 · 内容持续更新中