# @akal/supaforge 中文文档

规范地址：https://npmcn.com/package/%40akal/supaforge/

版本：0\.0\.41
npm 元数据更新时间：2026-11-06T03:29:50.936Z
中文译文更新时间：2026-11-09T19:53:16.541Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40akal/supaforge
原文对照：https://npmcn.com/package/%40akal/supaforge/?lang=original
项目主页：https://github.com/akalsoftware/supaforge#readme
源码仓库：https://github.com/akalsoftware/supaforge

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：664 kB，61 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=20\.0\.0
- 运行依赖：8 个
- 首次发布：2026-10-08T23:59:51.729Z
- 最新版本发布：2026-11-06T03:29:50.174Z
- 近 30 天下载量：1767（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：12（近 12 个月 12 个）

## 中文简介

抖动并同步您的 Supabase 环境

## 安装

```sh
npm install @akal/supaforge
```

也可以使用：`pnpm add @akal/supaforge`、`yarn add @akal/supaforge`、`bun add @akal/supaforge`

## README

# 苏帕福吉

> 抖出并同步您的Supabase环境.

SupaForge比较两个Supabase项目(编外项目和项目,例如) 一切构成一个项目, 不只是计划。 它每报告 并让目标匹配源。 依赖状态运行的修复 在一次交易中,可以在丢弃的副本中证明 任何变化 通过一个单一的项目,它会快照,恢复并克隆它.

-   **整个工程.** 它涵盖计划, RLS, 存储, 认证,边函数, cron, webhoks, Realtime, 队列, 分区集, Vault, 扩展, 赠款, 参考数据和移徙历史.
-   **默认安全.** 每个字都需要 `--apply`和任何损失 数据或打开访问权限也需要 `--allow-destructive`失败的应用程序 目标保持原样.
-   **生产意识.** 每道修补都说明它对一个活的数据库所做的: 锁定它持有的和在哪个桌子上, 无论它可能重写表格或扫描 每行,是否不能在交易中运行.
-   **证相可证.** `--prove` 排练迁移并拒绝应用 那不会复制源头 或者会失去行.
-   **随便.** 它与Supabase Cloud合作,自办堆栈,平地 PostgreSQL目标,CI管道和AI代理(MCP).

由 [阿卡尔](https://github.com/akalsoftware)。 。 。 .

## 快开始

```bash
npm install -g @akal/supaforge

supaforge init              # create supaforge.config.json
supaforge diff              # what has drifted?
supaforge diff --detail     # with the SQL
supaforge diff --apply      # fix the target
```

所有先写预览. 添加 `--apply` 让它发生.

## 安装

|  |  |
| --- | --- |
| 无 | `npm install -g @akal/supaforge`,或运行它与 `npx @akal/supaforge` |
| 土生土长 | `brew install akalsoftware/tap/supaforge` |
| 夹克 | `docker run --rm -v "$PWD:/work" ghcr.io/akalsoftware/supaforge diff` |
| GitHub 动作 | [`akalsoftware/supaforge-action`](https://github.com/akalsoftware/supaforge-action) 看到了吗 [中情局](https://npmcn.com/package/%40akal/supaforge/#readme-ci-and-exit-codes) |
| VS 代码及其分叉 | SupaForge扩展:命令,以及编辑器代理的MCP服务器. 每个 [释放](https://github.com/akalsoftware/supaforge/releases/latest) 把它当作一个 `.vsix` |
| 光标, VS 代码, Claude | 单击安装 MCP 服务器 — 见 [MCP 磁共振](https://npmcn.com/package/%40akal/supaforge/#readme-mcp-ai-agents) |

它需要20号节点或更新。 DBDiff,它的Diff引擎, 随它而来作为一个 用于您的平台的本地二进制, 所以没有其他可安装的 。 这个 Docker 图像不需要任何东西, 并携带 PostgreSQL 客户端工具 `--prove` 用户; 通过连接字符串 `-e`,然后在 `/work`。 。 。 .

## 比较一下

| 检查 | 内容 | 固定为 |
| --- | --- | --- |
| 司马 | [`@dbdiff/cli`](https://github.com/DBDiff/DBDiff): 你拥有的每一个计划 | SQL 组合键 |
| 参考数据 | 表格行数 `checks.data.tables` | SQL 组合键 |
| RLS政策 | `pg_policies`,按含义比较,而不是文本 | SQL 组合键 |
| RLS覆盖 | 目标中含有 RLS 的表格(仅指目标) | SQL, 选入 |
| 边缘函数 | 管理 API、 Studio 或函数目录 | 部署指挥 |
| 存储 | Buckets 及其政策( 对象从未复制) | API 和 SQL 数据 |
| 认证配置 | 管理 API 或 Gotrue 自动托管 | API(主办) |
| 连续任务 | `cron.job` | SQL 组合键 |
| 队列 | Supabase 队列( Q)`pgmq.meta`),通过 pgmq 创建并投放 | SQL 组合键 |
| 分区集 | pg partman 注册 (`part_config`页:1 `create_parent` | SQL 组合键 |
| 网络呼号 | 触发器呼叫 `supabase_functions.http_request` | SQL 组合键 |
| 实时 | 出版物和政策 `realtime.messages` | SQL 组合键 |
| 默认 | 秘密名称和描述( 无法读取值) | 要运行的命令 |
| 扩展 | `pg_extension` | SQL 组合键 |
| 移徙历史 | 本地移民档案 `supabase_migrations` (仅指目标) | SQL, 选入 |
| 作用和赠款 | 自定义角色,并授予表格、视图、序列和功能,包括: `anon`, (中文(简体) ), `authenticated`, (中文(简体) ), `service_role` | SQL 组合键 |

计划检查包括表格、列、密钥、索引、分区、视图、, 实现视图、函数、汇总、触发、事件触发、规则、, 序列、元素、复合和范围类型、域、铸造、扩展 统计、文本搜索配置和词典、外国服务器、, 用户映射和外国表格、政策、默认权限、复制 身份、统计目标、扩展和评论。 更名的一栏, 表格或序列被重新命名,保留其行,而不是下放和 再次创建。 它运行在每一个计划 除了Supabase自己的(`auth`, (中文(简体) ), `storage`,等等) 和那些在 `ignoreSchemas`中 扩展属于它,而不是比较。 那种东西 它不会 比较,如操作员类,在检查下命名,以便您可以查看 在他们手边,他们不被认为是漂移的.

一个无法运行的支票,比如没有API的证书,就这么说和为什么. 从来不报作净道.

## 图标

```
supaforge init                    Create a config interactively
supaforge diff                    Report drift (alias: hukam)
supaforge sync                    Alias for diff --apply

supaforge snapshot --apply        Capture an environment's structure and configuration
supaforge restore --apply         Rebuild a database from a snapshot or migrations
supaforge clone --apply           Copy a remote database to a local one

supaforge migrate create          Write a migration file from the current drift
supaforge migrate list            Local migrations, applied and pending
supaforge migrate run --apply     Run pending migrations
supaforge migrate baseline --apply  Mark migrations applied without running them

supaforge report                  Recent runs, from a local log
supaforge mcp                     MCP server for AI agents
supaforge help <command>          Every flag, e.g. help diff
```

有用 `diff` 旗帜 :

| 旗帜 | 对 |
| --- | --- |
| `--check=rls` 编号 : `--skip=storage` | 一张支票,或者除了一些`--skip` 重复) |
| `--tables=orders,items` 编号 : `--exclude-tables='*_log'` | 范围和数据检查 |
| `--only=<id,...>` | 只应用这些发现(ID来自 `--json`, 允许使用 globs) |
| `--dry-run` | 按他们运行的顺序打印修正,不运行 |
| `--prove` | 先排练丢弃副本上的修补 |
| `--source-dir <dir>` | 比较 schema 文件目录( 如 `supabase/schemas`) 目标而不是源数据库 |
| `--allow-destructive` | 还应用滴和删除 |
| `--apply-posture` | 还应用只检查对象的校正 |
| `--no-transaction` | 通过固定应用修复, 保持什么工作 |
| `--no-snapshot` | 自行读取每个查询. 默认每个数据库都读作一个瞬间,所以在扫描运行被所有数据库或无数据库看到时做了更改 `pg_dump`,其读取的内容将一直锁定,直到扫描结束 |
| `--json` 编号 : `--ci` | 机器可读输出; CI 说明和退出代码 |

## 安全应用修正

-   **先预想.** `diff`, (中文(简体) ), `snapshot`, (中文(简体) ), `restore`, (中文(简体) ), `clone` 财务报告和审定财务报表 `migrate run` 没有写什么 `--apply`。 。 。 .
-   **破坏修复需要第二面旗帜.** 丢弃计划、表格或 列,删除或切换行,并删除 RLS 策略 但跳过直到您添加 `--allow-destructive`。 。 。 . `migrate run` 使用同样的 有门.
-   **抚养令.** 修复按依附顺序运行:在 触发它们,在它们索引前的列,最后下降。 变化 对象必须被丢弃和再创建是单一的固定.
-   **一个交易.** 如果修复失败, 整个设定会回滚和目标 不变。 固定目标无法控制,因为它需要扩展或 a 目标缺少的Supabase计划, 与原因无关, 其余的 仍然适用.
-   **`--prove`。 。 。 .** 修复在目标结构的副本上重放, 在目标自己的服务器上, 应用程序运行的方式, 有 各表行的样本。 除非结果相符,否则不应用 源头和行都活下来了 如果证据不能证明的话 就什么也不能应用 运行。 它也命名了重写修正的表格。 更改副本无法保存, 例如 cron 任务( pg cron lives in one database each server), 列出为 未证实.

```bash
supaforge diff --dry-run                 # the plan, in order
supaforge diff --apply --prove           # rehearse, then apply
supaforge diff --apply --only='schema-create-*'
```

### 姿势检查

RLS的覆盖范围和移民历史 仅看目标,所以他们报告 同样的发现 无论你对 diff。 他们被分开了 (单位:千美元)`Posture score`),除非通过,否则不要设置退出代码 `--fail-on-posture`,其修正仅适用于 `--apply-posture`,或 当您为支票命名时, 如 `--check=rls-coverage --apply`应用 盲目地将目标远离源头.

## 抓图、恢复和克隆

```bash
supaforge snapshot --env=prod --apply                     # capture
supaforge snapshot --env=prod --migration --apply         # and write what changed since the last one
supaforge restore --env=local --from-snapshot=latest --apply
supaforge clone --env=prod --apply                        # local copy, data included
```

一个快照记录了一个项目的架构和配置: schema, RLS 策略, cron, webhooks, 扩展, 存储, 认证, 边缘函数, 参考数据、实时、地壳名称和赠款. **这不是一个 备份.** 它无一行可走 `checks.data.tables`,没有存储文件. 它的图案被写成 SQL 由 `pg_dump`,它至少必须像 服务器; 如果没有一个, 快照仍然可以被分解但不能恢复,以及 `snapshot` 出口1,除非 `--allow-schema-json-only` 说够了.

`restore --from-snapshot` 显示后 :

| 已恢复 | 页:1 |
| --- | --- |
| 扩展、计划、 RLS 政策、 cron 工作、网点、实时出版物、赠款 | 作为SQL,按依赖顺序排列. 首先创建政策或授权名称 |
| 储存政策和桶 | 当目标存在时,会创建 Bucket 行 `storage` schema; 文件从未是 |
| 参考数据 | 这行 `checks.data.tables`父母在孩子出生之前, 序列移动过恢复的id |

它不能放回认证配置, 边缘函数( 用 `supabase functions deploy`),或Vault秘密值. 每个都命名于 输出.

-   **目标.** 还原为一个交易并期望一个空数据库 . `--force` 清除快照本身的图谋 首先(从来不是Supabase的)和 把触发器和政策放回去 取决于它是什么 清除。 似乎比 目标允许在交易开始前这样说; `--no-transaction` 照原样行事.
-   **Plain PostgreSQL (英语).** 恢复为平原 PostgreSQL 工作. 什么无法 已跳过并命名 : `auth.users`一个网棍, 服务器不会发送扩展, 以及需要它的一切.
-   **退出代码.** 一号出口漏了东西 也一样 拒绝逃跑.
-   **贾森.** `--json` 仅打印 JSON,用于预览.

`clone` 将远程数据库复制到本地服务器 `pg_dump` 财务报告和审定财务报表 `pg_restore` (单位:千美元)`--schema-only` )),以出行为后. 本地扩展 服务器已首先安装 。 无法修复的物体列表为 事业。 之后的配置 `target` 点在克隆,所以赤裸裸 `diff --apply` 而不是写在遥控器上.

## 移徙

```bash
supaforge migrate create --name=add_orders   # from the drift between source and target
supaforge migrate run --env=prod             # preview
supaforge migrate run --env=prod --apply
```

-   **档案与历史.** 文件存在于 `supabase/migrations` (一组) `checks.migrations.dir` 以改变它。 应用版本录入 `supabase_migrations.schema_migrations`Supabase CLI的桌子.
-   **破坏说法.** `migrate create` 列出它所写的,以及 `migrate run` 需求 `--allow-destructive` 运行他们.
-   **历史表权限.** 在自办的堆栈上,历史表可以 属于管理角色。 SupaForge 然后说 `GRANT` 相反,需要 以光准错误失败.
-   **没有跟踪记录的项目.** `checks.migrations.mode` 决定 移民史如何报告: `auto` (一注当无 跟踪, `warn` 或者说 `ignore`。 。 。 .

## 配置

```json
{
  "environments": {
    "dev":  { "dbUrl": "$DEV_DATABASE_URL",  "projectRef": "abc123", "accessToken": "$SUPABASE_ACCESS_TOKEN" },
    "prod": { "dbUrl": "$PROD_DATABASE_URL", "projectRef": "xyz789", "accessToken": "$SUPABASE_ACCESS_TOKEN" }
  },
  "source": "dev",
  "target": "prod",
  "checks": {
    "data": { "tables": ["plans", "feature_flags"] },
    "exclude": ["edge-functions"]
  }
}
```

| 外地 | 含义 |
| --- | --- |
| `dbUrl` | PostgreSQL 连接字符串 . `$VAR` 财务报告和审定财务报表 `${VAR}` 从环境读取 |
| `projectRef`, (中文(简体) ), `accessToken` | 启用管理 API 检查( 自动, 边缘函数) |
| `apiUrl` | 自动托管的 API 网关, 代替 `projectRef` |
| `studioUrl`, (中文(简体) ), `functionsPath` | 自备的边缘函数从 |
| `source`, (中文(简体) ), `target` | 比较一下:来源是事实,目标得到固定 |
| `ignoreSchemas` | 你们自己留下的石刻 |
| `checks.data.tables` | 比较并取景的表格 |
| `checks.exclude` | 检查永不运行( 与 `--skip`(中文(简体) ) |
| `checks.tables`, (中文(简体) ), `checks.excludeTables` | 计划和数据检查的默认范围 |
| `checks.migrations.dir`, (中文(简体) ), `checks.migrations.mode` | 移民的住址和历史记录 |

-   **每个环境.** `checks.exclude` 财务报告和审定财务报表 `checks.schema.timeout` 还可以 被设定在环境上,并在目标时应用.
-   **`.env` 文档.** `.env` 文件已装入 Next.js 方式 : `.env.{NODE_ENV}.local`, (中文(简体) ), `.env.local`, (中文(简体) ), `.env.{NODE_ENV}`, (中文(简体) ), `.env`数值 在环境中已经赢了.
-   **单一数据库.** 包含单一环境的配置和没有 `source`编号 :`target` 没事 使用 `snapshot`, (中文(简体) ), `clone` 财务报告和审定财务报表 `restore`。 。 。 .

| 环境变量 | 默认 | 目的 |
| --- | --- | --- |
| `SUPAFORGE_DBDIFF_TIMEOUT` | `600` | 在计划或数据 diff 放弃前秒 |
| `SUPAFORGE_DBDIFF_MEMORY` | `1G` | 内存限制 `@dbdiff/cli` (单位:千美元)`2G`, (中文(简体) ), `-1` 无) |
| `SUPAFORGE_CONNECT_TIMEOUT` | `15` | 等待连接的秒数 |
| `SUPAFORGE_CHECK_CONCURRENCY` | `4` | 检查一次运行。 把它放在紧身泳池后面 |
| `SUPAFORGE_PROVE_ROWS` | `1000` | 每个表格的行 `--prove` 副本以检查它们的生存; `0` 仅检查结构 |
| `SUPAFORGE_PG_BIN` | —— 说 | PostgreSQL 客户端工具目录(`pg_dump`, (中文(简体) ), `psql`),前面使用 `PATH` 用于服务器比工具更新 `PATH` |

## 自办基地

设定 `apiUrl` 到网关 `accessToken` 到服务作用键。 全体 检查运行.

-   **边缘函数 .** 自我托管的边缘没有管理端点 职能,如此确定 `studioUrl` (Studio的港口,不是网关的)或 `functionsPath` (挂载函数目录). 两者可以混在一起 跨越环境。 工作室的功能 API 是未经认证的,所以不要 公开曝光.
-   **Auth 配置 .** 自动托管时, 认证配置会从 Gotrue 的设置中读取 端点,它携带的密钥较少,无法被写入. 改变 而是部署的环境.

## 抖动克隆

本地克隆为平原PostgreSQL. 存储、 认证、 边缘函数、 断层, 实时和Supabase的角色没有什么可比较的,所以跳过那些 检查 :

```json
{ "checks": { "exclude": ["storage", "auth", "edge-functions", "vault", "realtime", "roles"] } }
```

如果源头是克隆人 而目标不是, `diff` 警告说 `--apply` 将克隆人的形状, 包括缺失,推向目标.

## CI 和退出代码

这个 [GitHub 动作](https://github.com/akalsoftware/supaforge-action) 运行 `diff --ci` 并在工作页上增加漂移摘要:

```yaml
- uses: akalsoftware/supaforge-action@v1
  env:
    DEV_DATABASE_URL: ${{ secrets.DEV_DATABASE_URL }}
    PROD_DATABASE_URL: ${{ secrets.PROD_DATABASE_URL }}
```

任何地方,运行CLI:

```bash
npx @akal/supaforge diff --ci
```

| 代码 | 含义 |
| --- | --- |
| `0` | 做了什么要求,包括当没有做 |
| `1` | 发现漂泊,拒绝行动, 或某事失败或被排除在外 |
| `2` | 无法运行: 使用错误, 或是下 `--ci` 无法完成的支票 |

`--ci` 默认在关键漂移时失败 。 设定阈值为 `--fail-on=warning` 或者说 `--fail-on=any`。 。 。 .

## MCP(大赦国际代理人)

SupaForge 作为 MCP 服务器运行, 因此您编辑器中的 AI 代理可以扫描 漂来修去 在写东西之前问你.

[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=supaforge&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBha2FsL3N1cGFmb3JnZSIsIm1jcCIsIi0tcHJvamVjdCIsIiR7d29ya3NwYWNlRm9sZGVyfSJdfQ==) [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_SupaForge-0098FF?logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=supaforge&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40akal%2Fsupaforge%22%2C%22mcp%22%2C%22--project%22%2C%22%24%7BworkspaceFolder%7D%22%5D%7D)

-   **克劳德桌面**: 下载您的平台的扩展名 (单位:千美元)`supaforge-<version>-<platform>.mcpb`从 [最新发布](https://github.com/akalsoftware/supaforge/releases/latest) 打开它 它需要您的项目目录 .
    
-   **克劳德代码**: 安装插件, 添加 MCP 服务器和技能 安全应用修正:
    
    ```
    /plugin marketplace add akalsoftware/claude-plugins
    /plugin install supaforge@akalsoftware
    ```
    
    或只添加服务器 : `claude mcp add supaforge -- npx -y @akal/supaforge mcp`
    
-   **任何其他客户端**数字 :
    
    ```json
    { "mcpServers": { "supaforge": { "command": "npx", "args": ["-y", "@akal/supaforge", "mcp", "--project", "/path/to/project"] } } }
    ```
    

它列在 [MCP 书记官处](https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.akalsoftware/supaforge) 作为 `io.github.akalsoftware/supaforge`。 。 。 .

服务器会曝光这些工具 :

| 工具 | 它会做什么 | 注释 |
| --- | --- | --- |
| `list_environments` | 配置中的环境,没有他们的资质 | 只读 |
| `diff` | 所有区别,与计划 `sync` 将会运行 | 只读 |
| `get_check_result` | 最后一次检查的结果 `diff` 或者说 `sync` | 只读 |
| `sync` | 执行目标计划; `prove: true` 先在拷贝上排练 | 破坏性 |
| `create_migration` | 将漂移写入迁移文件 `migrate create` 已经 | 写入文件 |
| `take_snapshot` | 抓图环境到本地文件 | 写入文件 |

`diff` 财务报告和审定财务报表 `sync` 同样的争论,所以计划 代理显示你 计划运行。 除非 `allowDestructive` 已经设定.

写着 `supaforge.config.json` 在给出的目录中 `--project` (或 一个开始,拒绝 `configPath` 客户端,除非开始 与 `--allow-config-path`。 。 。 .

## 钩子

```ts
import { HookBus, scan, createDefaultRegistry, loadConfig } from '@akal/supaforge'

const bus = new HookBus()
bus.on('supaforge.check.after', ({ check, result }) => {
  if (result.status === 'drifted') console.log(`Drift in ${check}`)
})
await scan(createDefaultRegistry(), { config: await loadConfig() }, bus)
```

## 发展

```bash
cd packages/cli
npm install
npm test                 # unit tests
npm run lint             # type-check
./bin/dev.js diff        # run from source
```

| 套间 | 命令 | 需求 |
| --- | --- | --- |
| 一体化 | `npm run test:integration` | 达克或波德曼 |
| 数据库 e2e | `npm run test:e2e` | 达克或波德曼 |
| 假设 | `npx vitest run -c vitest.scenarios.config.ts` | 达克或波德曼, `pg_dump` |
| Supabase e2e 软件 | `npm run test:e2e:supabase` | 基地CLI |
| 释放候选人 | `scripts/test-release-candidates.sh --dbdiff ../DBDiff --pg-conformance ../pg-conformance` | 波德曼还是多克 |

发行- 候选人创建 DBDiff 二进制和 npm 软件包 从本地的退机方式中安装 SupaForge 以对抗他们 作为用户, 运行每一个套房 上面的安装。 测试 跨越三个项目,在其中任何一个项目之前 释放.

假想套房迁移 每一个案件在 [`@akal/pg-conformance`](https://www.npmjs.com/package/@akal/pg-conformance) 两者均包含 前进方向 它检查结果 与实体本身的状态甲骨文和 反对 `--prove`。 。 。 .

## 许可证

麻省理工学院

## 常见问题

### @akal/supaforge 是什么？

抖动并同步您的 Supabase 环境

### 如何安装 @akal/supaforge？

在项目目录运行 npm install @akal/supaforge，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 supaforge，可以用 npx supaforge 直接运行。

### @akal/supaforge 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @akal/supaforge 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @akal/supaforge 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=20\.0\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @akal/supaforge 可以商用吗？

@akal/supaforge 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @akal/supaforge 的下载量有多少？

根据 npm 官方下载统计，@akal/supaforge 在 2026/10/05 – 2026/11/03 这 30 天内被下载 1,767 次，日均约 59 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @akal/supaforge 还在维护吗？

最新版本 0\.0\.41 发布于 2026/11/06（3 天前）；至今共发布 12 个版本，其中过去 12 个月发布了 12 个；首次发布于 2026/10/09。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

