flancast90/chorograph

GitHub: flancast90/chorograph

一款零配置的代码架构可视化工具,通过静态解析文档注释自动生成精确到函数级别的交互式架构图,并支持 git diff 覆盖以辅助大型 PR 审查。

Stars: 3 | Forks: 0

chorograph

根据你的文档注释绘制的架构图。

npm version CI status MIT license

A rendered chorograph report: domains containing services, endpoints, functions, databases, and events, with typed edges between them

在你平时已经会写的注释中描述你的系统。chorograph 会对其进行静态解析(无需导入,无需执行),并渲染出一个独立的 HTML 架构图,精确到每一个函数。你的代码不需要任何导入、包装器或配置。而且由于所有的引用都必须可解析,一旦发生重命名或删除,下次渲染就会报错并精确指出对应的文件和行号,因此架构图绝不会无声无息地失效(腐坏)。 ``` /** * Places an order and charges it synchronously. * @endpoint POST /orders * @writes orders-db.orders * @emits order.placed so notifications and analytics can react * @calls payments.post-charge charge at checkout, in-process for now */ export async function placeOrder(items: OrderItem[]): Promise { // your real code, untouched } ``` ``` npx chorograph render src ``` ## 快速开始 三种注释即可生成你的架构图: ``` // 1. Anchor: once, in any file. Free-standing comments are fine. /** @system Acme */ /** @domain Commerce */ /** @external Stripe in:Commerce */ // 2. Infrastructure: where it's configured. /** @database orders-db in:Commerce tech:"PostgreSQL 16" tables:orders,order_items */ export const db = createPool(process.env.ORDERS_DB_URL); /** @event order.placed in:Commerce */ // 3. Each service: top of its file. Endpoints, functions, and jobs below attach automatically. /** * Owns the order lifecycle from cart to fulfilment. * @service orders in:Commerce tech:Node.js * @consumes payment.captured marks the order paid */ ``` `npx chorograph render src` 会写入 `.chorograph/graph.json` 和 `report.html`(无网络依赖;可随时随地打开、提交、发送)。`chorograph serve src` 会在每次浏览器刷新时重新扫描。[`examples/streamline/`](examples/streamline/) 是一个完整的工作示例。 ## 语法规则 一条注释声明一个节点;注释的正文会成为节点的描述。同一条注释中的 Edge 标签用于声明连接,目标之后的文本则成为其标签(label):即说明*为什么*连接。 | 标签 | 声明内容 | | --- | --- | | `@system` / `@domain` | 架构图的标题,一个限定的上下文(bounded context) | | `@service name` | 一个可部署的进程 | | `@endpoint POST /orders` | 一个 API 对外接口 | | `@fn` / `@job` | 重要函数 / 后台任务(名称从代码中自动推断) | | `@database name tables:a,b` | 数据库及其数据表 | | `@table` / `@cache` / `@bucket` / `@queue` | 状态存储与消息传输 | | `@event order.placed` | 具名的领域事件(domain event) | | `@external Stripe` | 非你运营的第三方 | | `@of parent` | 文件级指令:其下方的所有内容都从属于 `parent` | Edges(边):`@calls`、`@reads`、`@writes`、`@emits`、`@consumes`、`@uses`。通过名称指定目标,在存在歧义时可使用点号修饰(如 `orders-db.orders`)。 包含关系的嵌套深度完全取决于你的设计层次:服务(service)包含 endpoint、job 及其私有基础设施;endpoint 包含实现它们的各种函数;函数又可拆分为更细的函数。父级关系来源于显式的 `in:`/`of:` 关键字、文件上下文,或文件级别的 `@of` 指令,这也正是一个服务能够分散在多个 `routes/*.ts` 文件中的实现方式。

The detail panel for an endpoint: what it contains, its connections in both directions, and the file and line where it was declared

在查看器中,所有元素始终可见,并且布局是确定性的。图例提供筛选功能,鼠标悬停时会高亮显示连接关系,点击则会打开包含声明位置 `file:line` 的详情面板,同时支持使用 `/` 键进行搜索。 ## 面向 Coding Agent 这里有一个 [agent 技能](skills/chorograph/SKILL.md),可以教会 agent 上述语法规则,从而让架构图作为日常编写文档的“副产品”始终保持最新。你可以通过 [skills CLI](https://skills.sh) 将其安装到你的项目中: ``` npx skills add flancast90/Chorograph ``` 任何人克隆此代码库后都会自动获得它:该技能文件已被提交至 `.agents/skills/` 和 `.claude/skills/` 目录下,Cursor、Claude Code 及其他相关工具均可自动识别并应用。 ## 贡献指南 运行 `pnpm install && pnpm example`,不到一分钟你就能得到一张渲染好的架构图;`pnpm typecheck && pnpm test` 则是合并代码的把关门槛。[`CONTRIBUTING.md`](CONTRIBUTING.md) 包含了相关约定,[`AGENTS.md`](AGENTS.md) 提供了面向 agent 的版本,而 [`docs/design-principles.md`](docs/design-principles.md) 则阐述了设计品味。发版是完全自动化的:只需向 `main` 分支合并一个版本升级的 PR,CI 就会自动将其发布到 npm。 ## 许可证 [MIT](LICENSE)
标签:Git, MITM代理, SOC Prime, 云安全监控, 代码分析, 代码可视化, 凭证管理, 多模态安全, 开发工具, 暗色界面, 架构图, 自动化攻击, 静态分析