Dimillian/CodexMonitor

GitHub: Dimillian/CodexMonitor

一个 Tauri 桌面应用,用于在本地或远程环境中编排和管理多个 Codex AI 代理会话,集成工作区管理、Git 工作流和文件浏览功能。

Stars: 4047 | Forks: 392

# CodexMonitor [![gitcgr](https://gitcgr.com/badge/Dimillian/CodexMonitor.svg)](https://gitcgr.com/Dimillian/CodexMonitor) ![CodexMonitor](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/da0ed99706122724.png) CodexMonitor 是一个 Tauri 应用程序,用于在本地工作区中编排多个 Codex agents。它提供了一个用于管理项目的侧边栏、一个用于快速操作的主屏幕,以及一个基于 Codex app-server 协议的对话视图。 ## 功能 ### 工作区与会话 - 添加并持久化工作区,对它们进行分组/排序,并从主仪表板跳转到最近的 agent 活动。 - 为每个工作区生成一个 `codex app-server`,恢复会话,并跟踪未读/运行状态。 - Worktree 和 clone agents 可用于隔离工作;worktree 位于应用程序数据目录下(支持旧版的 `.codex-worktrees`)。 - 会话管理:置顶/重命名/归档/复制,每个会话的草稿,以及停止/中断进行中的对话轮次。 - 可选的远程后端 (daemon) 模式,用于在另一台机器上运行 Codex。 - 提供用于自托管连接的远程设置助手(TCP 模式下的 Tailscale 检测/主机引导)。 ### 编辑器与 Agent 控件 - 支持通过图片附件(选择器、拖放、粘贴)进行编辑,并支持可配置的后续操作行为(在运行处于活动状态时选择 `Queue` 或 `Steer`)。 - 使用 `Shift+Cmd+Enter` (macOS) 或 `Shift+Ctrl+Enter` (Windows/Linux) 可为单条消息发送相反的后续操作。 - 支持 skills (`$`)、prompts (`/prompts:`)、reviews (`/review`) 和文件路径 (`@`) 的自动补全。 - 模型选择器、协作模式(启用时)、推理力度、访问模式以及上下文使用环。 - 支持按住说话快捷键的听写功能和实时波形 (Whisper)。 - 渲染推理/工具/diff 项目并处理批准提示。 ### Git 与 GitHub - Diff 统计、暂存/未暂存的文件 diffs、撤销/暂存控件以及提交日志。 - 分支列表,支持检出/创建并显示上游领先/落后计数。 - 通过 `gh` 实现 GitHub Issues 和 Pull Requests(列表、diffs、评论),并在浏览器中打开提交/PRs。 - PR 编辑器:“Ask PR”可将 PR 上下文发送到新的 agent 会话中。 ### 文件与 Prompts - 带有搜索、文件类型图标以及在 Finder/Explorer 中显示功能的文件树。 - 用于全局/工作区 prompts 的 prompt 库:创建/编辑/删除/移动,并在当前或新会话中运行。 ### UI 与体验 - 可调整大小的侧边栏/右侧/计划/终端/调试面板,且大小设置会被持久化保存。 - 响应式布局(桌面/平板/手机),带有选项卡式导航。 - 侧边栏使用量和账户速率限制的额度计量器,以及主页使用量快照。 - 带有多个选项卡的终端面板,用于执行后台命令(实验性功能)。 - 应用内更新(带有 toast 下载/安装提示)、调试面板的复制/清除、声音通知,以及平台特定的窗口效果(macOS 覆盖标题栏 + 毛玻璃效果)和降低透明度开关。 ## 环境要求 - Node.js + npm - Rust 工具链 (stable) - CMake(原生依赖项必需;听写/Whisper 会用到) - LLVM/Clang(在 Windows 上通过 bindgen 构建听写依赖项时需要) - 已安装 Codex CLI 并在 `PATH` 中可用作 `codex`(或者在应用/工作区设置中配置自定义 Codex 二进制文件) - Git CLI(用于 worktree 操作) - GitHub CLI (`gh`),用于 GitHub Issues/PR 集成(可选) 如果遇到原生构建错误,请运行: ``` npm run doctor ``` ## 快速开始 安装依赖项: ``` npm install ``` 在开发模式下运行: ``` npm run tauri:dev ``` ## iOS 支持 (WIP) iOS 支持目前正在开发中。 - 当前状态:移动端布局可运行,远程后端流程已接通,且 iOS 默认使用远程后端模式。 - 当前限制:终端和听写功能在移动端构建版本中仍不可用。 - 桌面端行为保持不变:除非明确选择了远程模式,macOS/Linux/Windows 仍保持本地优先。 ### iOS + Tailscale 设置 (TCP) 当需要通过您的 Tailscale tailnet 将 iOS 应用连接到桌面托管的 daemon 时,请使用此方法。 规范运行手册:`docs/mobile-ios-tailscale-blueprint.md`。 1. 在桌面电脑和 iPhone 上安装并登录 Tailscale(同一个 tailnet)。 2. 在桌面版 CodexMonitor 中,打开 `Settings > Server`。 3. 设置一个 `Remote backend token`。 4. 通过 `Start daemon`(位于 `Mobile access daemon` 中)启动桌面 daemon。 5. 在 `Tailscale helper` 中,使用 `Detect Tailscale` 并记下建议的主机地址(例如 `your-mac.your-tailnet.ts.net:4732`)。 6. 在 iOS 版 CodexMonitor 中,打开 `Settings > Server`。 7. 输入桌面端 Tailscale 主机地址和相同的 token。 8. 点击 `Connect & test` 并确认连接成功。 注意事项: - 在 iOS 连接期间,桌面 daemon 必须保持运行。 - 如果测试失败,请确认两台设备是否都在 Tailscale 中在线,并且主机/token 与桌面设置相匹配。 ### 无头 Daemon 管理(无桌面 UI) 当您需要使用 iOS 远程模式但不想保持桌面应用程序打开时,请使用独立的 daemon 控制 CLI。 构建二进制文件: ``` cd src-tauri cargo build --bin codex_monitor_daemon --bin codex_monitor_daemonctl ``` 示例: ``` # 显示当前 daemon 状态 ./target/debug/codex_monitor_daemonctl status # 使用 settings.json 中的 host/token 启动 daemon ./target/debug/codex_monitor_daemonctl start # 停止 daemon ./target/debug/codex_monitor_daemonctl stop # 打印等效的 daemon 启动命令 ./target/debug/codex_monitor_daemonctl command-preview ``` 有用的覆盖参数: - `--data-dir `:包含 `settings.json` / `workspaces.json` 的应用程序数据目录 - `--listen `:绑定地址覆盖 - `--token `:token 覆盖 - `--daemon-path `:显式指定 `codex-monitor-daemon` 二进制文件路径 - `--json`:机器可读输出 ### iOS 前置条件 - 已安装 Xcode + Command Line Tools。 - 已安装 Rust iOS 目标平台: ``` rustup target add aarch64-apple-ios aarch64-apple-ios-sim # 可选(Intel Mac simulator 构建): rustup target add x86_64-apple-ios ``` - 已配置 Apple 签名(开发团队)。 - 在 `src-tauri/tauri.ios.local.conf.json` 中设置 `bundle.iOS.developmentTeam` 和 `identifier`(推荐用于本地计算机设置),或者 - 在 `src-tauri/tauri.ios.conf.json` 中设置这些值,或者 - 向设备脚本传递 `--team ` 参数。 - 当存在 `src-tauri/tauri.ios.local.conf.json` 时,`build_run_ios*.sh` 和 `release_testflight_ios.sh` 会自动合并它。 ### 在 iOS 模拟器上运行 ``` ./scripts/build_run_ios.sh ``` 选项: - `--simulator ""` 指定特定的模拟器。 - `--target aarch64-sim|x86_64-sim` 覆盖架构。 - `--skip-build` 复用当前的应用 bundle。 - `--no-clean` 在构建之间保留 `src-tauri/gen/apple/build`。 ### 在 USB 设备上运行 列出可发现的设备: ``` ./scripts/build_run_ios_device.sh --list-devices ``` 在特定设备上构建、安装并启动: ``` ./scripts/build_run_ios_device.sh --device "" --team ``` 附加选项: - `--target aarch64` 覆盖架构。 - `--skip-build` 复用当前的应用 bundle。 - `--bundle-id ` 启动非默认的 bundle identifier。 首次设备设置通常需要: 1. iPhone 已解锁并信任此 Mac。 2. 在 iPhone 上启用开发者模式。 3. 至少在 Xcode 中批准过一次配对/签名。 如果签名尚未准备好,请在脚本流程中打开 Xcode: ``` ./scripts/build_run_ios_device.sh --open-xcode ``` ### iOS TestFlight 发布(脚本化) 使用端到端脚本进行归档、上传、配置合规性、分配 Beta 测试组并提交以进行 Beta 审核。 ``` ./scripts/release_testflight_ios.sh ``` 该脚本会自动从 `.testflight.local.env`(已被 gitignored)加载发布元数据。 对于新的设置,请将 `.testflight.local.env.example` 复制到 `.testflight.local.env` 并填写相关值。 ## 发布构建 构建生产环境 Tauri bundle: ``` npm run tauri:build ``` 构建产物将位于 `src-tauri/target/release/bundle/`(特定平台的子文件夹中)。 ### Windows(可选) Windows 构建是可选的,并使用单独的 Tauri 配置文件,以避免使用仅限 macOS 的窗口效果。 ``` npm run tauri:build:win ``` 构建产物将位于: - `src-tauri/target/release/bundle/nsis/`(安装程序 exe) - `src-tauri/target/release/bundle/msi/`(msi) 注意:在 Windows 上从源码构建时,除了 CMake 之外,还需要 LLVM/Clang(用于 `bindgen` / `libclang`)。 ## 类型检查 运行 TypeScript 检查器(不输出文件): ``` npm run typecheck ``` 注意:`npm run build` 在打包前端之前也会运行 `tsc`。 ## 验证 推荐的验证命令: ``` npm run lint npm run test npm run typecheck cd src-tauri && cargo check ``` ## 代码库导航 对于面向任务的文件查找(“如果你需要 X,请编辑 Y”),请使用: - `docs/codebase-map.md` ## 项目结构 ``` src/ features/ feature-sliced UI + hooks features/app/bootstrap/ app bootstrap orchestration features/app/orchestration/ app layout/thread/workspace orchestration features/threads/hooks/threadReducer/ thread reducer slices services/ Tauri IPC wrapper styles/ split CSS by area types.ts shared types src-tauri/ src/lib.rs Tauri app backend command registry src/bin/codex_monitor_daemon.rs remote daemon JSON-RPC process src/bin/codex_monitor_daemon/rpc/ daemon RPC domain handlers src/shared/ shared backend core used by app + daemon src/shared/git_ui_core/ git/github shared core modules src/shared/workspaces_core/ workspace/worktree shared core modules src/workspaces/ workspace/worktree adapters src/codex/ codex app-server adapters src/files/ file adapters tauri.conf.json window configuration ``` ## 注意事项 - 工作区会持久化保存在应用程序数据目录下的 `workspaces.json` 中。 - 应用程序设置会持久化保存在应用程序数据目录下的 `settings.json` 中(主题、后端模式/提供商、远程端点/token、Codex 路径、默认访问模式、UI 缩放、后续消息行为)。 - 功能设置在 UI 中受支持,并在加载/保存时同步到 `$CODEX_HOME/config.toml`(或 `~/.codex/config.toml`)。稳定版:协作模式 (`features.collaboration_modes`)、个性化 (`personality`) 和后台终端 (`features.unified_exec`)。实验性:应用 (`features.apps`)。Steering 能力仍然遵循 Codex 的 `features.steer`,但默认的后续行为是在 Settings → Composer 中控制的。 - 在启动和窗口获取焦点时,应用程序会重新连接并刷新每个工作区的会话列表。 - 通过使用工作区 `cwd` 过滤 `thread/list` 结果来恢复会话。 - 选择会话时总是会调用 `thread/resume` 以从磁盘刷新消息。 - 如果 CLI 会话的 `cwd` 与工作区路径匹配,它们就会显示出来;除非被恢复,否则它们不会被实时流式传输。 - 该应用程序通过 stdio 使用 `codex app-server`;请参阅 `src-tauri/src/lib.rs` 和 `src-tauri/src/codex/`。 - 远程 daemon 入口点为 `src-tauri/src/bin/codex_monitor_daemon.rs`;RPC 路由位于 `src-tauri/src/bin/codex_monitor_daemon/rpc.rs`,域处理程序位于 `src-tauri/src/bin/codex_monitor_daemon/rpc/`。 - 共享域逻辑位于 `src-tauri/src/shared/`(特别是 `src-tauri/src/shared/git_ui_core/` 和 `src-tauri/src/shared/workspaces_core/`)。 - Codex 主目录的解析顺序依次为:工作区设置(如果已设置)、旧版 `.codexmonitor/`,然后是 `$CODEX_HOME`/`~/.codex`。 - Worktree agents 位于应用程序数据目录下(`worktrees/`);仍然支持旧版的 `.codex-worktrees/` 路径,并且应用程序不再编辑仓库的 `.gitignore` 文件。 - UI 状态(面板大小、降低透明度开关、最近的会话活动)存储在 `localStorage` 中。 - 自定义 prompts 从 `$CODEX_HOME/prompts`(或 `~/.codex/prompts`)加载,带有可选的 frontmatter description/argument hints。 ## Tauri IPC 接口 前端调用位于 `src/services/tauri.ts` 中,并映射到 `src-tauri/src/lib.rs` 中的命令。当前的接口包括: - 设置/配置/文件:`get_app_settings`, `update_app_settings`, `get_codex_config_path`, `get_config_model`, `file_read`, `file_write`, `codex_doctor`, `menu_set_accelerators`。 - 工作区/worktrees:`list_workspaces`, `is_workspace_path_dir`, `add_workspace`, `add_clone`, `add_worktree`, `worktree_setup_status`, `worktree_setup_mark_ran`, `rename_worktree`, `rename_worktree_upstream`, `apply_worktree_changes`, `update_workspace_settings`, `remove_workspace`, `remove_worktree`, `connect_workspace`, `list_workspace_files`, `read_workspace_file`, `open_workspace_in`, `get_open_app_icon`。 - 会话/对话轮次/审查`start_thread`, `fork_thread`, `compact_thread`, `list_threads`, `resume_thread`, `archive_thread`, `set_thread_name`, `send_user_message`, `turn_interrupt`, `respond_to_server_request`, `start_review`, `remember_approval_rule`, `get_commit_message_prompt`, `generate_commit_message`, `generate_run_metadata`。 - 账户/模型/协作:`model_list`, `account_rate_limits`, `account_read`, `skills_list`, `apps_list`, `collaboration_mode_list`, `codex_login`, `codex_login_cancel`, `list_mcp_server_status`。 - Git/GitHub:`get_git_status`, `list_git_roots`, `get_git_diffs`, `get_git_log`, `get_git_commit_diff`, `get_git_remote`, `stage_git_file`, `stage_git_all`, `unstage_git_file`, `revert_git_file`, `revert_git_all`, `commit_git`, `push_git`, `pull_git`, `fetch_git`, `sync_git`, `list_git_branches`, `checkout_git_branch`, `create_git_branch`, `get_github_issues`, `get_github_pull_requests`, `get_github_pull_request_diff`, `get_github_pull_request_comments`。 - Prompts:`prompts_list`, `prompts_create`, `prompts_update`, `prompts_delete`, `prompts_move`, `prompts_workspace_dir`, `prompts_global_dir`。 - 终端/听写/通知/使用量:`terminal_open`, `terminal_write`, `terminal_resize`, `terminal_close`, `dictation_model_status`, `dictation_download_model`, `dictation_cancel_download`, `dictation_remove_model`, `dictation_request_permission`, `dictation_start`, `dictation_stop`, `dictation_cancel`, `send_notification_fallback`, `is_macos_debug_build`, `local_usage_snapshot`。 - 远程后端助手:`tailscale_status`, `tailscale_daemon_command_preview`, `tailscale_daemon_start`, `tailscale_daemon_stop`, `tailscale_daemon_status`。
标签:AI助手, Bash脚本, Codex, Git, MITM代理, SOC Prime, Tauri, 可视化界面, 开发工具, 桌面应用, 自动化攻击