← 返回项目

Project · 开源工作台 · 已发布 (v0.2.0)

Signoff: 本地运行的开源项目维护工作台

面向开源项目维护者的本地优先工作台,将代码检索、漏洞扫描、排期规划、Agent 修复与 PR 签核收拢进统一链路。基于 codegraph 与 FastAPI 构建,支持独立 worktree 隔离执行与 SHA-256 哈希链审计,确保代码写入与关键命令经人工最终审批确认。

Signoff: 本地运行的开源项目维护工作台 项目封面

技术栈

codegraphFastAPISQLModelReactViteTypeScriptTailwind CSSPython

时间

开始
2026.09.30
结束
—
更新
2026.10.08

项目定位与背景

开源项目的日常维护通常分散在多个不同的工具之间:在浏览器中查看 Issue、用本地编辑器的全文搜索定位代码、在终端中运行依赖检查与单元测试、在独立分支中修补并手动推送到 GitHub 创建 Pull Request。这一过程需要维护者在十几个标签页与终端窗口之间反复切换上下文。

Signoff 是一个在本地运行的单用户开源维护工作台。它将读代码、依赖漏洞扫描、任务规划、代码修复、回归测试与提交 Pull Request 整合在统一链路上:由 Agent 负责调查与生成代码修复,由维护者最终签核确认。

Signoff 工作台概览

核心功能与工作流

代码检索与问 AI

项目集成全局安装的 codegraph 工具,提供符号检索、源码探索、函数调用关系和修改影响面分析能力;Issue 检索使用 SQLite FTS5 全文索引。

问 AI 模块内置只读调查 Agent,模型可自主结合 codegraph、Issue 检索与文件读取进行多轮调查(单次最多 8 步)并整合回答。调查过程在界面实时展开,文件读取严格限定在当前仓库内部,禁止访问 .git 目录和 .env 配置文件,且所有回答直接标明引用的 Issue 编号与具体的代码文件行号。

代码检索与调用关系分析

依赖漏洞扫描与 LLM 复核

安全模块支持基于 OSV 数据库的依赖项漏洞扫描,兼容 package-lock、pnpm-lock、yarn.lock、requirements、pyproject 以及 go.mod 等锁文件,并配合内置的静态代码规则。系统会自动调度本机已安装的 bandit 与 semgrep 工具参与扫描。

用户可单独触发大模型对疑似风险点进行复核,所有扫描历史均予以持久化保存,便于追溯。

依赖漏洞与静态安全扫描

规划与排期日历

针对待处理的 Issue 与安全漏洞,工作台支持由大模型进行去重、依赖分析与工时评估。在确认执行人员、工时与每日工作容量后,由后端确定性排期算法生成日历排期并保存版本记录。维护者可以使用自然语言提出调整需求,先预览排期变动后再决定是否应用。

规划看板与日历排期

worktree 隔离的 Agent 代码修复

在处理个人仓库时,Agent 会在独立的 git worktree 中执行文件读写与测试验证,避免污染主工作区。所有越界写入与未列入白名单的 Shell 命令均需经过人工审批,维护者可随时暂停或中断运行。

系统会如实记录测试执行状态,未执行或失败的测试不会被标记为通过;一旦修改代码,此前的测试结果将自动失效。

Agent 代码修复与执行审批

PR 签核与事件审计

所有的运行事件都会记录到 SHA-256 哈希链中,支持导出为 Markdown 或 JSON 格式的审计报告,便于检测记录是否损坏。

在 Agent 完成修复且维护者审核确认代码 diff 后,由工作台统一提交、推送并创建 Pull Request;若当前账号对仓库没有直接推送权限,系统会自动 fork 仓库并从 fork 分支发起 PR。

技术栈与架构设计

  • 后端:Python 3.11+,采用 FastAPI 与 SQLModel,支持 SQLite(启用 FTS5)与 PostgreSQL,模型接口兼容 OpenAI 标准规范。

  • 前端:React 19、TypeScript、Vite 与 Tailwind CSS,集成 GSAP 动效与 Lucide 图标库。

  • 代码智能:本机安装的 codegraph CLI,直接由后端进程调用,无需依赖外部 MCP 桥接。

  • 安全策略:默认仅监听本地回环地址(127.0.0.1);公网部署模式下访客仅具备只读权限,写类请求直接由后端拦截拒绝。

当前状态与代码仓库

项目当前版本为 v0.2.0,提供针对 Windows(start.ps1)与 Linux(start.sh)的一键启动脚本。项目采用 MIT 协议开源,代码托管于 GitHub:JiaMingWang-CN/signoff。