# @cat-factory/acceptance-kit 中文文档

规范地址：https://npmcn.com/package/%40cat-factory/acceptance-kit/

版本：0\.7\.55
npm 元数据更新时间：2026-11-06T13:56:47.767Z
中文译文更新时间：2026-11-09T07:17:30.117Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40cat-factory/acceptance-kit
原文对照：https://npmcn.com/package/%40cat-factory/acceptance-kit/?lang=original
源码仓库：https://github.com/kibertoad/cat-factory

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

- 包体积（解压后）：586 kB，91 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=20
- 运行依赖：3 个
- 首次发布：2026-08-14T14:58:47.292Z
- 最新版本发布：2026-11-06T13:56:47.265Z
- 近 30 天下载量：4238（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：93（近 12 个月 93 个）

## 中文简介

用于编写您自己的HeadLESS接收套件的组件, 以对抗活猫因子部署: 假想驱动程序、可收回的分类账和进度日记, 一个先决条件的门, 其拒绝带来补救, 等待到最后 O

## 安装

```sh
npm install @cat-factory/acceptance-kit
```

也可以使用：`pnpm add @cat-factory/acceptance-kit`、`yarn add @cat-factory/acceptance-kit`、`bun add @cat-factory/acceptance-kit`

## README

# `@cat-factory/acceptance-kit`

**用来写你自己的无头接受套件的构件 与LIVE猫因子相对应 部署.** 真正的代理,真正的模型花费,真正的拉取请求: 证明a 部署的供应商、代理商、大门和管道在部署后结束 操作员实际运行.

平台自己的套房(`backend/internal/acceptance`)由此软件包构建,是 实例。 这里的就是那个套房 里面有套房.

## 它给你什么

| 模块 | 什麽 |
| --- | --- |
| `scenarioRunner.ts` | 驱动程序:在 ONE 过程中,在第一次失败时按给出的顺序进行保镖,每个门前都有一个先决条件的门. |
| `preflight.ts` | 先决条件词汇表( E)`satisfied` 编号 : `unsatisfied` 编号 : `unknown`,每个否定的判决 附有一个 `Remedy`),每一次评分的跑道,和拒绝通行证的出道口. |
| `probeFailure.ts` | THROWN探测器是怎样的:从来没有回答过(用内核的运输级,SDK自己对它的叙述全部转发),以拒绝(SDK的地位, `code` 或用非部署的东西回答. |
| `deadline.ts` | 等待他们最后的观察,当他们过期, 加上容忍度坐落到部署重新开始,而不是死在一个被拒绝的连接上. |
| `ledger.ts` | 重复分类账:每个事实同步写出,复制文件拒绝 `latest` 指针,和"有这个通过创造任何东西"的规则. 平庸的 为你自己的事实类型. |
| `journal.ts` | 只有附件的进度记录,所以一个操作员离开的通道可以从另一个窗口观看(之后读取). |
| `client.ts` | SDK的两个客户端(在通行证用完之前快速反弹,在一次中重新开始吸收),描述一个长的等取指纹,以及返回的对 ASWERABL 裁决的民调. |
| `decisions.ts` | 答复 `follow-ups` 财务报告和审定财务报表 `clarity-review` 和硬性对待其他任何一种, 这就是阻止一个无人关注的循环 驱动运行 通过一个决定 一个人本打算做的. |
| `runDriver.ts` | 驾驶一个开始运行 到终点州 根据一个预算 跨越每一个公园. |
| `resume.ts` | 文件任务,或采用/再附加到之前的通关所剩的,记录在一通通关的所有三分之间可以被中断. |
| `resource.ts` | 您的套房条款本身也属于同样的学科:在被遵守、采用而不是重新规定之前,只有在供应商同意其消失后才予以公布. |
| `brief.ts` | 将一个真实的简要内容放在任务上,而不管任务大小如何:在描述上限下,它就是描述,在它上方是所附的文档,在附件上限后,它是REFUSED而不是剪接的. |
| `evidence.ts` | 与公关核查报告相比. |
| `reset.ts` | 清理一个板子回到"在任何传票运行之前":重置会删除什么,然后应用,有写令,永无孤儿领导规则和 `latest` 这里拥有指针规则 。 你们的套房把画框和残片命名了. |
| `pass.ts` | 通关本身:横幅,场景,摘要,收尾词,出站代码,以及报告套房中一个bug而不丢失简历的边界. |

另一个单元是SEPARATE进入点, `@cat-factory/acceptance-kit/console-credential`这样 基础软件包没有终端代码 : `createConsoleCredential()` 构建 `CredentialRetry` 一半的缝合 套房的模型运行 在一个人自己的订阅, 与其填充的请求头对齐。 导入此路径是要询问的决定; a 只按键套件名称 `passThroughCredentialRetry` 永远看不到一个提示.

## 写套房

```ts
import {
  type Scenario,
  type SuiteIdentity,
  briefFields,
  createPassClient,
  fileAndDrive,
  requireRunDone,
  runPass,
} from '@cat-factory/acceptance-kit'

// 1. Declare who you are. Every refusal the kit prints renders against this, so an operator is told
//    to set YOUR variable and run YOUR command.
const identity: SuiteIdentity = {
  name: 'acme-acceptance',
  runCommand: 'pnpm --filter @acme/acceptance run acceptance',
  runIdVariable: 'ACME_RUN_ID',
  baseUrlVariable: 'ACME_BASE_URL',
  configFile: 'acceptance/.env',
}

// 2. Write scenarios. `gated` is required rather than defaulted: a scenario added without deciding
//    would otherwise spend an afternoon against an unwired deployment.
const shipsAFeature: Scenario = {
  id: '01-ships-a-feature',
  title: 'the custom agent kind builds, opens a PR and merges it',
  gated: true,
  run: async (step) => {
    const { run } = await step('drive', () =>
      fileAndDrive({
        ...options,
        // `briefFields` and not `description: brief`: the description caps at 2,000 characters, a
        // real scaffold brief is several times that, and the ceiling is not a fact your suite
        // should have to know. Under the cap this is byte-for-byte `{ description: brief }`.
        createTask: () =>
          client.tasks.create(serviceId, {
            title: 'Stand up the catalog API',
            ...briefFields({ brief, title: 'Stand up the catalog API' }),
          }),
      }),
    )
    requireRunDone(run, 'the feature run')
  },
}

// 3. Hand them to the pass.
process.exitCode = await runPass({
  identity,
  target: baseUrl,
  ledger,
  journal,
  scenarios: [shipsAFeature],
  gate: () => prerequisites.assert(),
  log: (message) => console.log(message),
  recordsFacts: () => recordsFacts(ledger.value, LEDGER_SLOTS),
})
```

## 套装的规矩是

每一个都是被调试到存在的地方 每一个都是为什么这里的模块被塑造成 它不是显而易见的方式.

1.  **在开销前拒绝,附固定.** 在一个先决条件得到评价之前,Everyy gated 假想,初不一次:在停止时恢复通行,预算可以是 中途度过。 每个负面判决都带有数个步骤,如果有的话,就有一个可被粘贴的 命令从检查结果中构建.
    
2.  **"未满足"和"无法被读取"是不同的答案.** 失败的探测器不是证据 调查过的东西, 报告它作为一个操作员 来修复错误的东西.
    
3.  **在证据上坚持平台 COMPUTED,从来没有在代理改口.** 正在获取编码器的回复 测试模型的用词; 交换模型,它去红色 没有发现错误.
    
4.  **绝对不会自动回答 套房不是设计用于的决定 或者是FLIGHT中的决定.** 循环 无论发现什么 都会产生一个绿色的套房 证明什么.
    
5.  **等待时间已过,它陈述了它最后的观察, 以及它留下了什么.** 时间到了 54000000ms后"是真实而无用;"步骤3" `coder` 4/9子任务分离a 车停从一个楔形的 从一个慢。 下半边是 `epilogue`每页 等待开始运行时会花在: 没有它,操作员不会被告知运行,它的拉力 请求 和任何提供的名称空间 仍然在那里, 他们开始第二次通过 剩下的就拒绝.
    
6.  **报告每一份失败的索赔 不只是第一份.** 通行证需要一个下午.
    
7.  **记录一个外部资源 之前,任何事情可以观察它, 并只在当 供应商同意.** 拆卸需要供应商自己的身份 再加上任何条款, 也不能从部署或存储器中重新获得,所以在 提供返回和第一次状态民意测验会泄露一个磁盘上无法命名的机器。 一个 已接受的删除不是一个已完成的删除. `resource.ts` 是这一规则; `PassOptions.onSettled` 实值 其开垦报告进行中, 哪些仍在土地INSIDE 关闭词.
    
8.  **套房之后无法重新创建跑步自己的拉出请求环境.** 合并删除 合并时的头分支 `cat-factory/` 前缀,所以请求环境 通过拉取请求号解决了供应商不再拥有的反驳。 环境索赔 调用请求从运行报告中读取(`checkEphemeralEnvironment`(b) 索赔 MERGED代码由默认分支提供新鲜. 两半都无法覆盖.
    
9.  **创建本身是客户端无法关闭的一个窗口,所以传球说它哪一边 失败了.** `fileAndDrive` 在创建后记录线上的任务 id, 即 任何客户端都可以: 如果创建者的反应在中途丢失, 部署可能已经进行 该行和id从未到达呼叫者,所以没有记录,下一个通过文件 a 第二项任务。 这跟七遇一个客户无法观察的国家一样 输入,而且它不能通过重排来修复 : 关闭它需要调用者提供的一能键 编辑 `/api/v1` 写写真正的工作成本, 这是一种永久形状 在被冻结的地表和 其决定。 可修复的是猜测。 在任何来源之前失败的创建 接受请求没有创建, 重新运行是干净的; 在请求下死去的, 定时 出局或回来后无法读取 可能已经提出任务 没有启动运行 没有花费预算 拒绝让操作员先看板子 SDK的连接 诊断是使两者分离的原因,以及拒绝时所附带的帐户 PROVES是按每个原因表示的:来源历史是只包含连接错误的索赔,a 网关自己的502描述了错误的一方.
    
    **限制窗口的是请求是什么,而不是失败的代码所在的位置.** 两个 收缩时要诚实 因为两人都读错了 "不管怎样" `createTask` 抛出。 SDK提出的一个叫它MADE的电话只有失败才被分类,所以一个简短的关于 描述封顶和套间中的错误被报告为自己而不是可能的任务 在董事会。 任何要求机构必须读取的内容都会进入 `prepareTask`,哪个 在窗口打开前运行, 当任务需要通过时仍然完全跳过: a 正在读取的构成描述的证据 与创建的方式完全不符, 没有任何东西 失败时提交.
    
10.  **在删除之前重设计划,计划就是应用程序执行的内容.** 清除a 董事会删除真实的服务框架, 真实的任务和真实运行的历史 在董事会上有人可能分享, 因此,预览是安全属性和 `--yes` 是整个选入。 三条 在它下面悄悄地失败,而不是大声地失败,这就是为什么 `reset.ts` 拥有它们: 未完成的任务要完成 在他们的车架之前 级联; 当一个框架仍然站着时, 通行证的分类账永远不会被删除, 因为 分类账是将框架映射回可重复运行的 id `latest` 指针 当它命名一个被移除的通行证 和当它命名 完全没有,因为一个 指针比每个分类账都高,然后在空状态目录上解决一个恢复。 A 类 `404` 是一种结果,而不是失败.
     

## 缝合

有四样东西是故意不决定的 因为只有套房可以:

-   **`Prerequisite`**一定有窃听器来操作你的通行证 邮箱没有清单;a 固定的,会拒绝的东西 部署测试 自己的剂型没有用.
-   **`Scenario`**:活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活.
-   **`SuiteIdentity`**:命令和变量 一个拒绝引用.
-   **`CredentialRetry`**: 部署答复时怎么办 `428` 因为一个模型是每个用户 订阅。 工具箱上写着两个可以发生的事情 并且从未持有证书. 驱动器路径需要,而不是默认,原因 `gated` 是:一个其模型的套房 全部运行在部署自己的密钥通行证上 `passThroughCredentialRetry`在代码中是这样说的, 虚报一无所言 表面是死亡之道 `428` 经过一个下午的花费. 另一个分支是: `@cat-factory/acceptance-kit/console-credential`,通过导入选择进入.

重置后再增加三个相同的,在 `planReset`数字 : `target` (这个框架 配置正在问,用谁的话来说, `ledgerServiceIds` (您自己的哪一个事实名称) (a) 框架)和 `leftovers` (重置不回收的,按每套套件自然而定). 工具箱拥有 命令、 保留规则、 指针规则和两个格式化符; 它永远不会猜测什么是 创建了通行证。 无论你的命令是什么 都被宣布为 `parseResetArgs` 作为 `flags` 手递 它在每次引用时,都会大声地说出自己的名字`--yes`, (中文(简体) ), `-y`, (中文(简体) ), `--all`)或者拼出一个没有破折号, 因为要么你的旗帜读作缺席 当解析器的自身意义 运行在它的位置.

**说明书是第五个没有决定的东西**,它被分开列出,因为一半 它根本不是一个接合。 读取自己的配置是您的; 解析它是一个 `.env` 写, 和五种方法 使这个小错误 每一个沉默的失败(命令报告成功) 并且文件有别的意思). 那五个人 和他们的密码是 `@cat-factory/cli`是因为 `envMerge.ts`: 保留未管理的行 VERBATIM, 报告 `kept`编号 :`changed`编号 :`added`编号 : `preserved` 而不是一个布尔,引用一个价值 READER会不同意, 承认 并用列出的清单而不是一个 名称图案. `SuiteIdentity.configFile` 是一个拒绝的名字.

## 相关

-   [`backend/internal/acceptance`](https://github.com/kibertoad/cat-factory/tree/main/backend/internal/acceptance):月台自有套房,建于此.
-   [`backend/docs/public-api.md`](https://github.com/kibertoad/cat-factory/blob/main/backend/docs/public-api.md):每个情景驱动的表面.
-   [`@cat-factory/sdk`](https://github.com/kibertoad/cat-factory/tree/main/sdk/typescript): 已出版的客户端 该套件建立在.

## 常见问题

### @cat-factory/acceptance-kit 是什么？

用于编写您自己的HeadLESS接收套件的组件, 以对抗活猫因子部署: 假想驱动程序、可收回的分类账和进度日记, 一个先决条件的门, 其拒绝带来补救, 等待到最后 O

### 如何安装 @cat-factory/acceptance-kit？

在项目目录运行 npm install @cat-factory/acceptance-kit，或使用 pnpm add / yarn add / bun add。

### @cat-factory/acceptance-kit 支持 TypeScript 吗？

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

### @cat-factory/acceptance-kit 支持 ESM 还是 CommonJS？

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

### @cat-factory/acceptance-kit 需要什么版本的 Node\.js？

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

### @cat-factory/acceptance-kit 可以商用吗？

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

### @cat-factory/acceptance-kit 的下载量有多少？

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

### @cat-factory/acceptance-kit 还在维护吗？

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

