Jarvis coding Agent GUI——一个 AI 驱动的桌面端编程助手GitHubhttps://github.com/myismu/JarvisAgent基于 Tauri 2.0 Vue 3 Rust 构建从0开始设计开发完整 Agent 自主循环支持 20 主流 LLM 模型具备快照版本控制、多 Agent 沙箱、方案审批、双轴模式系统等企业级能力基于claude code、codex所体现出的功能进行设计开发是作为一个学习agent的demo。✨ 特性多模型支持— DeepSeek、Claude、GPT、Gemini、Qwen、豆包、MIMO 等 20 主流 LLM双轴模式系统— AudienceUser/Developer× WorkModeChat/Edit/Plan正交组合工具集与提示词按模式动态切换完整 Agent 循环— 意图分类 → 工具加载 → 动态上下文注入 → SSE 流式输出 → 自主决策执行自动模式切换— Edit 模式检测到复杂任务自动切换到 Plan 深度规划审批后切回委派子 Agent 并行执行快照引擎— 文件级树形版本控制原子化回滚分支管理多 Agent 沙箱并行与合并子代理委派— 主代理编排任务图子 Agent 在干净上下文中独立执行调度器自动并行方案审批机制— 复杂任务先提交结构化方案用户预览编辑后批准按依赖图调度执行会话持久化— SQLite 存储完整对话历史视图引用方案消除双全量存储多会话管理记忆系统— 全局记忆 项目记忆长期保留用户偏好与项目上下文任务调度器— 基于依赖图的并行调度JoinSet 流式执行无依赖任务自动并行5 分钟超时保护统一上下文压缩— 使用单一压缩策略自动摘要 transcript简化层级现代 UI— 类 IDE 毛玻璃界面Glassmorphism无边框窗口明暗主题切换中途取消— 随时中断正在执行的 Agent 任务保留部分输出多模态理解— 图片输入自动压缩优化Shell 安全— 递归列目录强制排除依赖目录危险命令检测权限分级审批️ 技术栈层级技术说明前端框架Vue 3 TypeScriptComposition API script setup状态管理Pinia4 个 Storesession / chat / agent / permission桌面框架Tauri 2.0Rust 后端轻量高性能后端运行时Rust Tokio异步运行时SSE 流式处理HTTP 客户端Reqwest流式 API 调用OpenAI / Anthropic 双格式数据库SQLite (rusqlite)会话、消息、快照、任务、运行记录分词器tiktoken-rsBPE 精确 Token 计数MarkdownmarkedGFM 增量渲染构建Vite 6极速 HMR 开发体验 快速开始环境要求Node.js 18Rust 1.70pnpm 8安装与运行pnpminstall# 安装前端依赖pnpmtauri dev# 开发模式热更新pnpmtauri build# 生产构建cargotest# Rust 测试在 src-tauri/ 下运行⚙️ 配置首次运行点击设置按钮配置API Key— LLM API 密钥Base URL— API 端点地址自动补全路径API Format—openai或anthropic格式主模型— 主代理和子代理使用的模型工具模型— 意图分类和记忆管理的轻量模型支持多预设Profile管理不同场景快速切换。配置保存采用原子写入先写 tmp 再 rename防止崩溃丢配置。工作模式模式工具集说明Chat14 个只读工具轻量问答、信息查询Edit全部 30 个工具代码开发、文件编辑、任务执行Plan21 个规划工具只读探索 方案制定 任务图拆解用户类型Audience分为普通用户和开发者仅影响 UI 渲染细节和交流风格不影响工具可用性。 项目结构JarvisAgent/ ├── src/ # Vue 3 前端 │ ├── main.ts # 应用入口 │ ├── App.vue # 根布局 │ ├── types/index.ts # 全部 TypeScript 类型定义 │ ├── stores/ # Pinia 状态管理 │ │ ├── session.ts # 会话生命周期 消息缓冲区 │ │ ├── chat.ts # 核心交互发送/取消/撤回/渲染 │ │ ├── agent.ts # Agent/子代理运行状态追踪 │ │ └── permission.ts # 权限请求 方案审批状态 │ ├── composables/ │ │ ├── useAgentEvents.ts # 后端事件监听中枢 → 分发到各 Store │ │ ├── useTheme.ts # 亮/暗主题切换 │ │ ├── useWindow.ts # Tauri 窗口控制 │ │ └── usePreferences.ts # 用户偏好持久化 │ ├── utils/ │ │ ├── toolDisplay.ts # 工具调用分组与展示摘要 │ │ ├── agentTurnRender.ts # Agent 轮次渲染 │ │ ├── markdown.ts # Markdown 渲染 │ │ └── html.ts # HTML 工具函数 │ ├── services/ │ │ └── snapshotService.ts # 快照 API 封装 │ └── components/ │ ├── layout/ # TitleBar, Sidebar │ ├── chat/ # ChatArea, TerminalInput, AgentPanel, TodoPanel, ExecutionPanel │ ├── common/ # PermissionModal, PlanPreviewPanel, ConfirmModal │ ├── checkpoint/ # CheckpointTimeline │ ├── snapshot/ # SnapshotTimeline, DiffViewer, LivePreview │ └── settings/ # SettingsPanel多预设 双轴选择 ├── src-tauri/ # Rust 后端 │ ├── src/ │ │ ├── lib.rs # Tauri 入口状态注册 命令绑定 │ │ ├── core/ │ │ │ ├── mod.rs # 模块导出 │ │ │ ├── agent/ │ │ │ │ ├── pipeline.rs # 五阶段 Agent 管线主循环 │ │ │ │ ├── stream.rs # SSE 流式解析Anthropic OpenAI │ │ │ │ ├── context.rs # 动态上下文构建 │ │ │ │ └── tools_runner.rs # 工具调用并行执行引擎 │ │ │ │ ├── prompts/ # 系统提示模板audience、os、mode 等 │ │ │ ├── commands/ # Tauri 命令处理11 个文件 │ │ │ │ ├── session.rs # 会话 CRUD 撤回 │ │ │ │ ├── checkpoint.rs # 检查点 回滚 │ │ │ │ ├── snapshot.rs # 快照引擎命令 │ │ │ │ ├── config.rs # 配置读写 │ │ │ │ ├── permission.rs # 权限审批回调 │ │ │ │ ├── window_state.rs # 窗口状态 UI 偏好 │ │ │ │ ├── merge.rs # 分支合并 │ │ │ │ ├── sandbox.rs # 多 Agent 沙箱 │ │ │ │ └── history.rs # 历史记录渲染 │ │ │ ├── infra/ │ │ │ │ ├── prompts.rs # 系统提示词三层组装 │ │ │ │ ├── background.rs # 后台任务管理 Tauri 事件推送 │ │ │ │ └── debug_logger.rs # 调试日志 │ │ │ ├── intent/ │ │ │ │ ├── mod.rs # 三层意图分类规则→上下文→LLM 兜底 │ │ │ │ └── rules.rs # 正则规则引擎 JSON 外部规则加载 │ │ │ ├── llm/ │ │ │ │ ├── api_format.rs # ApiFormat 枚举认证头、版本头 │ │ │ │ ├── api_client.rs # HTTP 客户端 指数退避 429 Retry-After │ │ │ │ ├── adapters.rs # Anthropic ↔ OpenAI 消息格式转换 │ │ │ │ ├── registry.rs # 模型能力注册表9 种思考参数变体 │ │ │ │ └── token_count.rs # tiktoken BPE 精确 Token 计数 │ │ │ ├── providers/ │ │ │ │ ├── anthropic.rs # Anthropic Messages API │ │ │ │ └── openai.rs # OpenAI Chat Completions API │ │ │ ├── tools/ │ │ │ │ ├── mod.rs # 工具系统中枢 WorkMode 过滤 │ │ │ │ ├── file_tools/ # 文件工具13 个文件 │ │ │ │ ├── shell_tools/ # Shell 后台任务工具9 个文件 │ │ │ │ ├── agent_tools/ # 子代理、技能、压缩、方案审批、模式切换 │ │ │ │ ├── task_tools/ # 轻量待办 持久化任务 CRUD │ │ │ │ ├── search_tools/ # Glob Grep 搜索 │ │ │ │ ├── notebook_tools/ # Jupyter Notebook cell 编辑 │ │ │ │ ├── system_tools/ # 系统信息 工作区设置 │ │ │ │ └── framework/ # 工具注册表、权限、渐进式披露 │ │ │ ├── orchestration/ │ │ │ │ ├── scheduler.rs # 基于依赖图的并行任务调度器 │ │ │ │ ├── subagents.rs # 子 Agent 生命周期 事件持久化 │ │ │ │ ├── agent_runs.rs # 主 Agent 运行记录 检查点 │ │ │ │ ├── agent_run_repository.rs # Agent 运行 SQLite 仓储 │ │ │ │ └── tasks.rs # 任务 CRUD 依赖管理 │ │ │ ├── rollback/ │ │ │ │ ├── snapshot.rs # 快照 快照树数据结构 │ │ │ │ ├── patch.rs # 补丁系统Create/Update/Delete/Rename │ │ │ │ ├── replay.rs # 重放引擎 原子文件回滚 │ │ │ │ ├── store.rs # 快照 SQLite 持久化 │ │ │ │ ├── gc.rs # 三阶段垃圾回收 │ │ │ │ ├── journal.rs # 操作日志 │ │ │ │ ├── session_manager.rs # 会话快照管理器 │ │ │ │ └── multi_agent/ # 沙箱 分支合并引擎 │ │ │ ├── session/ │ │ │ │ ├── mod.rs # 会话持久化入口 │ │ │ │ ├── repository.rs # 会话 SQLite 仓储 消息加载 │ │ │ │ ├── resource_repository.rs # 附件/资源 SQLite 仓储 │ │ │ │ └── memory.rs # 三级压缩 记忆 Agent │ │ │ ├── db/ │ │ │ │ ├── mod.rs # SQLite 连接管理全局 Mutex │ │ │ │ └── schema.rs # 17 张表 schema 定义 增量迁移 │ │ │ ├── config.rs # AgentConfig RuntimeSettings 原子写入 │ │ │ ├── constants.rs # 全局常量 │ │ │ ├── error.rs # 分层错误类型AgentError / ApiError / DbError │ │ │ ├── state.rs # SessionManager SessionContext │ │ │ ├── models.rs # 核心数据模型 │ │ │ ├── events.rs # Tauri 事件名常量domain:action 规范 │ │ │ └── traits.rs # LlmProvider trait 抽象 │ │ └── main.rs │ ├── model_registry.json # 模型能力注册表 │ ├── intent_rules.json # 意图分类外部规则 │ └── Cargo.toml ├── doc/ # 架构文档 └── package.json 核心架构已重构新的 Agent 管线用户输入 → 多层意图分类规则 → 上下文 → LLM → 根据 WorkMode 动态加载工具集Chat / Edit / Plan → 动态上下文注入意图标签 全局记忆 项目映射 技能列表 → 模块化子 Agent 并行执行自研调度器 → 结果聚合与持久化快照、记忆、会话标题双轴模式系统Audience 轴谁在用 WorkMode 轴在干什么 User ───────── Developer Chat ────── Edit ────── Plan ↑ 只有用户手动切换 ↑ 用户手动 Agent 自动切 Audience → UI 渲染 交流风格 WorkMode → 工具集 系统提示词提示词采用三层组装BASE_SYSTEM_PROMPT通用规则 OS 检测Audience 风格WorkMode 规则。模式切换不重启 Pipeline下一轮 LLM 请求自动使用新提示词和工具集。视图引用方案数据库session_messages 表唯一数据源只增不减 └── message_id content_json seq sourcechat/compact session_memory 表LLM 活动视图索引 └── message_ids: [id1, id2, ...] ← 不存消息内容只存 ID 列表 压缩摘要写入 session_messagessourcecompact→ 更新 message_ids → 原始消息完整保留 回滚隐藏检查点后的消息 → 更新 message_ids → 原始消息从 session_messages 恢复三级上下文压缩L1 micro每轮常驻截断旧的工具调用结果保留最近 20 条 L2 mid80% 上限移除早期 thinking 块保留最近 5 个 L3 auto95% 上限LLM 摘要 保存 transcript 文件快照引擎代码变更 → PatchCreate/Update/Delete/Rename→ Snapshot版本快照 → 树形分支管理 → AtomicFileRollbackstaging rename 原子写入 → 多 Agent 沙箱 → 分支合并LCA 三方合并 冲突解决 → 增量检查点基于前一个 checkpoint workspace_state 增量计算 → GC 三阶段清理脱离分支节点 → 孤儿快照 → 孤儿内容调度器CreateTask 创建任务图 → UpdateTask 设 blocked_by 依赖 → RunSubagentsSequentially 启动调度器 → JoinSet 流式调度谁先完成就解锁谁的下游 → 无依赖任务自动并行 → 5 分钟超时保护前端事件架构Rust emit(chat-content) ──→ useAgentEvents.listen() ├──→ sessionStore写入 buffer ├──→ chatStore.triggerRender()增量渲染 ├──→ agentStore更新运行状态 └──→ permissionStore弹出确认弹窗 后台任务完成 → emit(bg-task-done) → AgentPanel 0 延迟更新替代轮询 子 Agent 状态 → emit(subagent-updated) → 2s 批量节流更新️ 内置工具一览类别工具说明文件读取ReadFile, ReadFileSkeleton读文件全文/骨架支持行号范围文件写入WriteFile, EditFile, ApplyPatch写文件、搜索替换编辑、应用 diff目录ListDirectory, SearchRepo列目录、生成仓库地图搜索SearchText, FindFiles文本搜索(grep)、文件名搜索(glob)符号FindSymbol, ReadSymbol, FindReferences, CodeSearch符号定位、读定义、查引用ShellRunCommand, StartBackgroundCommand, CheckBackgroundCommand命令执行、后台服务、状态检查GitRunGitCommand只读 Git 操作任务CreateTask, UpdateTask, DeleteTask, ListTasks, GetTask, SummarizeTasks持久化任务图 CRUD待办UpdateTodos轻量待办清单子代理RunSubagent, RunSubagentsSequentially委派子代理、启动调度器规划ProposePlan, SwitchWorkMode方案审批、模式切换会话CompactConversation, ConsolidateMemory手动压缩、记忆整理系统GetSystemInfo, SetWorkspace系统信息、工作区设置搜索SearchTools延迟工具搜索激活NotebookEditNotebookJupyter Notebook cell 编辑️ 安全特性沙箱限制— 会话绑定工作目录路径遍历自动拦截Shell 安全— 递归列目录dir /s、tree强制排除 node_modules 等依赖目录权限审批— Shell 等敏感操作需用户确认30 秒超时自动拒绝循环检测— Agent 循环超 30 轮暂停确认绝对上限 500 轮429 限流— 解析 Retry-After 头按服务器建议等待快照回滚— 所有文件操作可追溯可撤销原子化写入防崩溃 致谢Claude Code— 架构设计的灵感来源 许可证MIT License