返回
Featured image of post Dev Cockpit:隔几天回来,也知道项目怎么跑

Dev Cockpit:隔几天回来,也知道项目怎么跑

Dev Cockpit 是我开发的本地项目工作台,讲清它如何识别技术栈、启动命令、端口、Python 环境和 Git 状态,以及资源雷达为何只是其中一部分。

最初我只想解决一个很笨、但每天都会遇到的问题:隔几天重新打开项目时,我已经忘了它用什么命令启动、端口在哪、Python 环境是哪一个、上次又为什么失败。Dev Cockpit 就是从这个问题长出来的。

它不是 IDE,也不打算替代 VS Code、Docker Desktop 或 Conda。它负责回答的是更靠前的几件事:这个目录是什么项目、应该怎么启动、现在到底有没有运行、端口属于谁、失败信息在哪里。

扫描一个项目时,程序在看什么

把一个目录交给 Dev Cockpit 后,核心扫描器会读取常见标记文件、包管理配置和 Git 状态,识别 Node、Python、Java、PHP、Ruby、.NET、Go、Rust 与 Docker 项目。接着再从 package scripts、常见入口和技术栈约定中推断启动命令与候选端口,并结合进程归属和 HTTP 探测确认实际运行状态。

这听起来像“判断文件存不存在”,但麻烦通常出在冲突上。例如同一个目录里既有 Python 虚拟环境,也有 VS Code 解释器设置和 Conda 声明。当前策略会按手工绑定、编辑器配置、项目虚拟环境、Conda 声明等优先级解析,并把为什么选中这个解释器一起展示,而不是静默猜一个路径。

看到 3000 端口,不等于所有项目都在线

早期最容易写错的逻辑,是只要发现某个端口在监听,就把对应项目标成“运行中”。如果电脑上同时开了几个前端项目,这种判断很快就会串台。

Dev Cockpit 会把状态拆开看:

  • 是否由工作台自己启动并持有进程;
  • 外部监听端口能否归属到当前项目或明确命令;
  • HTTP 地址是否真的可达;
  • 最近一次启动是否失败;
  • 端口是否只是别的程序留下的占用。

也就是说,“进程存在”“端口被占用”和“这个项目能访问”不是一件事。状态判断尽量依赖本地可验证信号,而不是让模型猜。

同一份项目状态,给多个入口复用

为了让不同入口得出同一个答案,代码按职责拆成共享扫描、运行状态聚合和界面入口几层:

Dev Cockpit 将项目静态信号与机器运行信号合并成统一项目状态

这样 CLI、浏览器界面和桌面版可以共用同一套判断逻辑。界面怎么改,不应该改变“项目是否在线”的答案;以后补一种技术栈,也不需要在三个入口各写一遍。

资源雷达是后来长出来的功能

Dev Cockpit 资源雷达卡片页

我平时还会收集 GitHub 仓库、Demo、工具、Skills 和教程,所以后来加了资源雷达:把链接或文本整理成带来源、摘要、分类、标签和评分的卡片,再用筛选与星云图复盘最近关注的方向。

Dev Cockpit 资源星云图

资源处理大致是“本地规则优先,可选 AI 补充”:先解析 GitHub 或网页元数据,再用规则生成基础分类;配置模型后,AI 可以帮忙整理标题、标签和摘要,最后仍要经过预览才写入本地 JSON。它不会因为看见一个仓库就自动安装 Skill,也不会上传整个源码目录。

这也是旧文章最容易让人误解的地方:资源雷达很直观,截图也好看,但它只是 Dev Cockpit 的一个模块,项目核心仍然是恢复本地开发现场。

AI 在哪里有用,哪里没资格下结论

工作台可以把项目路径、技术栈、启动命令、端口、Git 状态和最近错误整理成一段可复制的上下文,方便交给 AI 编程工具;只有用户明确点击时,才会写入 PROJECT_CONTEXT.mdAGENTS.md

我也会用 AI 辅助梳理跨技术栈识别规则、重构和补测试。但模型不是运行状态的事实来源:端口归属、HTTP 可达性和 Python 环境解析,仍由本地确定性代码判断。这条边界比给聊天框换一个更聪明的模型重要。

试用入口

安装 Node.js 后可以直接运行:

1
npx local-dev-cockpit

默认会在本机打开 http://localhost:8787。项目数据保存在本地应用数据目录,定位仍是个人开发工作台,而不是需要注册账号的云服务。

使用 Hugo 构建
主题 StackJimmy 设计