开源一个桌面项目工作台:把服务启动、文件编辑和 Git 合并放到一起

现在AI 开发项目了,我发现我IDEA 都很少打开了,我发现我现在使用IDEA来管理项目,用得最多的无非就是启动项目,运行下命令行,git管理下提交内容,但不知道为什么这个吃内存大户占用了我非常多的内存,但不得不说我用了这么多年了的确很好用,但现在项目启动多了,内存感觉不太够用,于是想着自己写一个前后端分离的项目

当我们的项目多了以后,这些操作会反复出现。启动命令散在不同的 README 里,终端开了一排,切回一个项目时,还得重新确认哪些服务正在运行。

我给自己做了一个桌面工具,把这些日常操作放到一起。现在它已经基本能满足我的使用需求,就整理出来开源了,名字叫 项目工作台(AI Project Manager)。

先放一张界面图:

项目地址:GitHub · ai-project-manager

它适合配合平时的 IDE 使用:工作台负责项目切换、服务运行、日志和一些文件、Git 操作,复杂编码和调试继续交给熟悉的编辑器。

名字里虽然有 AI,目前还没有接入模型,也不需要配置 API Key。现阶段做的都是本地开发工具的基础功能。

启动一个项目,少翻几次 README

我最先想解决的是服务启动。

一个仓库可能同时包含前端、后端和其他任务。每个服务的工作目录、启动命令、环境变量都不一样,如果能把这些配置记下来,下次打开项目就会方便很多。

工作台支持导入本地目录,也可以克隆 Git 仓库。导入后会扫描常见的项目描述文件和入口,识别 Node.js、FastAPI、Java 等项目的部分启动信息。

识别结果可以手工修改,也可以直接添加自定义服务。每个服务都能配置:

  • 工作目录和启动命令。
  • 环境变量。
  • HTTP 就绪检查地址。
  • 启动依赖。

例如,一个仓库的前端放在 web,后端放在 backend,就可以分别保存两份运行配置。以后进入这个项目,核对配置后启动即可。

这里有两个细节。

一是扫描只负责识别,不会自动安装依赖或执行脚本。识别到命令以后,仍然需要自己确认。

二是"进程已经启动"和"服务可以访问"分开显示。配置了 HTTP 就绪地址后,工作台会继续探测,避免进程刚创建就被当成服务已经准备好了。组合启动则按配置的依赖顺序执行。

服务输出会进入下方日志面板,支持筛选、复制和跟随输出。需要手工执行命令时,可以打开项目终端。

文件管理补到日常够用

服务能跑起来以后,我又补上了文件浏览和编辑。

有时只是改一行配置、补一段 README,或者把一个目录复制进项目,直接在工作台里处理会更方便。

目前支持树形目录、多标签编辑、语法高亮,以及新建文件和目录。文件、目录都可以复制、粘贴或拖入,也可以按住 Ctrl 逐项选择,按住 Shift 选择一段,再批量操作。

删除会移入系统回收站。拖入按复制处理,遇到同名项可以保留副本或跳过,不会直接覆盖现有文件。

编辑器里的草稿也做了保留:切换文件标签时,输入的内容、光标位置和撤销记录会留着,按 Ctrl+S 才保存到磁盘。保存前还会检查文件是否被外部工具修改过,避免覆盖刚刚在 IDE 里保存的内容。

这部分定位是轻量编辑。目前没有完整的语言服务和断点调试,复杂的代码修改我还是会回到 IDE。

Git 三栏合并,比放三个编辑器难不少

日常 Git 操作也放进来了:查看文件变更、暂存、提交、切换本地分支、获取、拉取和推送。

花时间比较多的是冲突处理。我希望它接近 IntelliJ IDEA 的使用方式:先列出冲突文件,点开以后,左边看本地版本,右边看待合入版本,中间编辑最后的结果。

最初只是把三份内容放出来,很快就发现不够用。文件一长,找不到冲突位置;三栏滚动不同步,很难比较同一段;只有顶部的"采用本地"和"采用远端",处理起来也不直观。

现在合并界面使用独立的大弹窗,改动位置有高亮和两侧操作入口。可以把一侧内容采用到中间,也可以拒绝这一侧的改动,保留当前结果。中间的内容仍然可以直接编辑。

三栏支持横向、纵向同步滚动,合并操作支持 Ctrl+Z 撤销,Ctrl+Y 或 Ctrl+Shift+Z 重做。除了双方都改过的冲突块,也会展示单侧新增等差异。

做这部分时,一个很容易踩的坑是:把"还存在差异"当成"还没有处理完成"。

比如我采用了右侧内容,合并结果自然可能和左侧不同。如果每次都根据这个差异重新生成待处理按钮,就会出现一种循环:刚处理完,按钮又回来了;为了去掉按钮继续操作,又把已经合并好的内容删掉了。

这里需要单独记录对改动块的处理决定。左右原文和最终结果可以不同,用户已经确认过的取舍不应该反复变成待处理项。撤销时,恢复的也要包括处理状态,不能只恢复中间的文本。

处理完成后,点击"应用更改"会保存并暂存该文件。所有冲突文件处理完,再提交合并、推送到远端。

普通拉取采用仅快进策略。本地与远端已经分叉时,可以使用"合并远端",再进入上面的流程。目前还没有提供 rebase 和强制推送。

界面和关闭行为,也要适合每天用

界面做成了玻璃质感,支持浅色和深色模式。

调整这套界面时,我发现单纯把背景调淡、把卡片变透明,并不一定能得到想要的效果。背景颜色太强,会影响文字阅读;边框太白,又容易让每个面板都像描了一圈线。

所以后来把侧边栏、服务卡片、日志、终端和弹窗的主题一起调整,也保留了主要操作的颜色区别。启动、停止和普通操作需要能分清楚,不能为了透明效果把按钮都做成同一种颜色。

另外补了一个我自己很需要的行为:关闭窗口后隐藏到系统托盘。

点击窗口的关闭按钮,或者按 Alt+F4,只会把窗口藏起来,已经启动的服务、终端和未保存编辑内容继续保留。点击托盘图标,或者再次打开工作台快捷方式,可以恢复窗口。

真正退出需要选择"退出工作台"。这时会确认运行中的服务和未保存内容,确认退出后再停止工作台管理的进程。

这样就不用担心随手关掉窗口,把正在使用的开发服务一起关掉了。

用到的技术,以及几个实现取舍

技术栈比较常见:

部分 方案
桌面运行时 Electron
界面 Vue 3、Vite、TypeScript
代码编辑 CodeMirror 6
交互终端 xterm.js、node-pty
Git 调用本机 Git CLI
Windows 安装包 Inno Setup 6

Vue 渲染端负责展示和交互,文件、Git 和进程操作放在 Electron 主进程。两边通过 preload 暴露的固定接口通信,主进程校验请求来源和参数。界面没有直接开启 Node.js 访问能力。

Git 直接复用本机配置和认证。读取状态时使用 NUL 分隔的输出,避免文件名里的空格、中文干扰解析;仓库写操作按顺序执行,减少工作台内部的并发冲突。

服务和终端使用 PTY。停止服务时,处理的是工作台登记的进程树,不会根据某个端口直接结束一个来历不明的进程。

托盘后台运行则保留原来的窗口实例,不卸载页面。这样草稿、终端和编辑器状态都能继续保留;等窗口确认真正关闭后,再清理受管进程。

本地项目配置保存在应用数据目录,仓库仍然留在原位置。移除项目记录不会删除项目目录。服务环境变量目前保存在本机明文配置中,这部分还有改进空间。

怎么运行

当前主要面向 Windows,仓库提供了 EXE 安装包构建流程。

从源码启动:

powershell 复制代码
git clone https://github.com/lyunsheng051-png/ai-project-manager.git
cd ai-project-manager
npm ci
npm run dev:desktop

源码启动需要 Node.js 和 npm;Git 操作需要本机 Git。工作台复用现有开发环境,启动 Python、Java 或 Node.js 项目时,也需要先准备好对应环境和依赖。

自己构建 Windows 安装包可以运行:

powershell 复制代码
npm run package:win

安装包使用 Inno Setup 6 生成,具体步骤在仓库的 打包说明 中。

文中的截图使用示例仓库,安装包功能以对应版本为准。项目目前还处于持续迭代阶段,复杂的二进制冲突、重命名冲突等情况,仍建议交给系统 Git 或熟悉的工具处理。

想听听其他人的使用场景

这个工具是从我自己的日常操作一点点补出来的。服务管理、文件编辑和 Git 合并都有了,但项目入口识别、不同终端环境的兼容,以及大仓库的使用体验,还有不少可以继续做的地方。

项目采用 MIT 协议,中文、英文 README 都已整理在仓库里。如果你也经常同时维护几个本地项目,可以试试看。

遇到问题时,欢迎带上启动方式、复现步骤和错误信息提 Issue。也想了解一下:你每天打开一个项目时,最想省掉的是哪一步?

项目地址:ai-project-manager

相关推荐
钱栈up1 小时前
GitHub 热榜实测|REA:用 Agent 逆向一切
typescript·开源·github
YJfox4 小时前
Qt Creator工具git使用完整教程
github
怕浪猫7 小时前
3 小时搭一个能用的聊天机器人后端,我用了这套技术栈
后端·面试·github
miofly8 小时前
NVIDIA 将 Run:ai 平台全面开源,纳入 DSX AI Factory 体系
开源·github
miofly9 小时前
GitHub 今日推荐|MOSS-Image:靠坐标框精确控制文字排版的图像生成模型
python·开源·github
小弥儿9 小时前
GitHub今日热榜 | 2026-10-19:智能体生态包场的一天
学习·开源·github
钱多多_qdd10 小时前
将 GitHub 项目导入 Gitee:三种常用方法详解
gitee·github
逛逛GitHub10 小时前
玩了一天 1.2 万人收藏的开源音乐模型,真的惊艳到我了。。。
github
一缕82年的清风10 小时前
GitHub 几天狂揽 20 万星!让 AI 把闭源软件“逆向开源”:爆火神器 REA 深度实测与架构师冷思考
github