# @fungi\.computer/braid 中文文档

规范地址：https://npmcn.com/package/%40fungi.computer/braid/

版本：0\.4\.19
npm 元数据更新时间：2026-11-15T06:03:09.135Z
中文译文更新时间：2026-11-15T18:38:45.702Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：572 kB，83 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：12 个
- 首次发布：2026-10-16T18:04:20.211Z
- 最新版本发布：2026-11-15T06:03:08.917Z
- 近 30 天下载量：10038（2026-10-16 至 2026-11-14，npm 官方下载统计）
- 已发布版本数：29（近 12 个月 29 个）

## 中文简介

纯版的工作流程图验证和内容处理汇编

## 安装

```sh
npm install @fungi.computer/braid
```

也可以使用：`pnpm add @fungi.computer/braid`、`yarn add @fungi.computer/braid`、`bun add @fungi.computer/braid`

## README

# 布赖德 (`@fungi.computer/braid`(中文(简体) )

Braid 运行工作流程: App 方法的打出图表,有评论,重复和 触发器。 它验证和汇编 `fungi.workflow/v1` 计划图表和 在 Cloudflare 工作流上执行 . [翠丽丝](https://github.com/fungi-computer/trellis) 是编辑器和 App 构建 就在这.

## 安装

```sh
npm install @fungi.computer/braid
```

根条目为浏览器安全:验证,编译和可移植执行 合同. `@fungi.computer/braid/cloudflare` 是工人发动机 `@fungi.computer/braid/runtime` 东道主的保存运行的商店.

## 验证和汇编

布赖德拥有 `fungi.workflow/v1` 及其图解. 浏览器安全根 出口验证、汇编和便携式执行合同. `validate(unknown, catalog)` 带有 Effect Schema 的解码并返回已键入的问题 给编辑的 预期计划和表达语法拒绝成为问题; 未预料到的剖析或曲面缺陷传播,而不是报告为 作者错误 . `compile` 返回问题或地形命令, 安装受限计划和SHA-256 `planDigest`。 。 。 . `decodeExecutionPlan` 检查 以该身份储存内容,并重新编译其域名的不变量. 汇编没有授权.

`catalogMethods` 省略标记的报表 `hidden: true` 在读完之前 图表端口。 可见方法文摘保持不变;发现标记确实如此 不决定直接呼叫权限.

## V1合同

-   运行输入端口使用保留节点 `$input`。每个节点也发出 `after`。 。 。 . `after` 用于命令信号: 密码输入/输出计划以及宣布拒绝的转换字段, 而不是默默地覆写.
-   `admitRunInput(definition, raw)` 填补缺失的财产默认和验证 与支持的投影一起生成对象。 它回来了 `{kind: "accepted", input}` 或者说 `{kind: "invalid", issues}`;问题保留 验证器实例位置和消息 。 明确数值从未被替换 默认。 主机记录被接受的输入,并触发和图执行 使用相同的录用功能.
-   期限为整数毫秒,为正数,最多为7天。 重试 `attempts` 包括第一次尝试(1-5); 外部影响不能重试.
-   应用程序和代码 `values` 并使用绘图 : `{literal: Json}`, (中文(简体) ), `{template: string}`, (中文(简体) ), `{from: PortRef, path?: JsonPointer}`, (中文(简体) ), `{coalesce: Mapping[]}`, (中文(简体) ), `{object: Record<string, Mapping>}`, (中文(简体) ), `{array: Mapping[]}`,或 `{each: {over: Mapping, body: Mapping, maxItems: 1..50}}`。 。 。 . `each` 揭露其 当前值/索引为 `$item.value` 财务报告和审定财务报表 `$item.index`; 分别筑巢 表达式获得它们自己的项目范围。 评价人员将实现范围限定为: 64 KiB和65536次访问。 缺一成员就能完成全部任务 没有建筑。 Mustache 拥有内插解析(`{{node.port}}`, (中文(简体) ), 而不使用 HTML 逃脱或执行); JSON Pointer 拥有路径查询。 参考资料 建立依赖关系.
-   对象方法输入/输出保留其属性端口. 非对象值和 工会使用单一 `value` 端口; 调度员仍然发送/接收原始 已声明 App 值。 包含要求的结业工会 `error` 对象 曝光情况 `ok` 编号 : `refused`,每个携带 全部宣布的记录。 双方 保持原有的策略限制。 App 拒绝路由数据; 主机 拒绝录取仍会使节点失效. Apps不重塑他们的API.
-   应用程序节点可以声明 `gitAccess: {binding, repository, branches}` (写作) 分支上限)或 `gitAccess: {binding, repository, access: "read"}` (读取) 只是,没有推。 本声明入计划文摘并包含否 安装标识。 成员通过 `bindingsSelectionSchema`; 明示 `{kind: "team-source"}` 绑定选择 一个注册的团队来源。 汇编冻结选定的约束,包括: 与执行 App 分离的目标. `resolveGitAccess` 表格 Agar 类型 本地或团队资源 `RepositoryRef`; 已解决的范围 为: `{repository: RepositoryRef, branches}` 或者说 `{repository: RepositoryRef, access: "read"}`仅这些数据就意味着: 权威:主机检查开始的人类被捕获的天花板和活体 在发通行证之前, 以及通行证的范围 总是允许进入。 阅读访问可能名称 `$trigger.repository`页:1 事件触发声明 `repository`,显示其事件的映射图(例如 `{from: {node: "$input", port: "payload"}, path: "/data/repository/name"}`, (中文(简体) ), 而节点的绑定必须是触发器的 App. Arming 不承认 Git; 每个 火灾解决了事件的一个存储器 在排放安装 运行开始 承认出押人的现场阅读访问权限准确。 手动运行或 另一个触发器没有触发存储器,所以该步骤被拒绝. 分支 是独一无二的精确 `refs/heads/...` 名称,以256个条目为界 修改表达式被拒绝.
-   Coalesce)选择了第一个出品的,非null分行. 当每个候选人 来源于非活动分支,依赖的节点跳过。 可用的倒计时 仍然运行,所以备选审查选择与OR语义合并.
-   代码节点声明 `{id, kind: "code", source, input, output, values}`。 。 。 . `source` 是 JavaScript 函数机构,包括其返回; `input` 财务报告和审定财务报表 `output` 使用与 App 方法相同的投影语法和端口. `values` 和接入的边缘明确映射到节点可用的数据。 准确 源,计和图入计划文摘. 源使用现有的 256 000字节全定义信封;每个计划保留了20 000字节 和深度 -16边界。 编译从不解析或执行 JavaScript 并添加 没有要求的 App 绑定 。 它唯一的数据能力是 `env.INPUT.read({})`, (中文(简体) ), 返回它重新绘制的JSON。 没有可用的 App 或 network . 当地台阶设置检查站,检查是否完成或关闭拒绝, 包括整个64个KiB结果信封,自动重试被禁用. 重放读取检查点,而不是重放JavaScript. 客机出错 不披露源、投入或运行事件中的原始沙盒原因。 沙盒电话 在中断效果内运行; 取消仍然是主机运行所有者 本地实例终止, 没有单独的注销所有者.
-   一个名字 `subgraphs` 输入/节点/网格/输出合同与 root根. 地图正文输入为 `{item, index}`。递归图体是 拒绝。 包括尸体在内的整个定义上限为64个节点 / 256 边缘.
-   `after` 边缘命令或任何节点。 其他连接输入属于 App 或 代码端口; 控件在自己的字段中命名它们的引用. 评论 选中的端口带有其第一个显示的项目; 条件的选定端口是 信号.
-   无法获取意味着无法贡献到图表输出或写入/外部 方法。 可能没有跳过分支输出; 这不是输出错误 .
-   静态扩大预算估计,每个节点有三个持久行动加 每个项目的所有映射项目和三次操作,用于创建、完成和 母通知,封顶为800(Cloudflare's 1024's).
-   该目录由可移植 App ID 键入并保存 T1 的方法形状 (说明、投入/产出、效果、批准、要求),有目录 `digest` 每个方法。 绑定必须符合已声明的 App ID 。 仅使用 方法输入同意表。 所用方法和活动目录,包括 输入计划.
-   `pending: true` 在 Agar 共享结果中选择一个方法 。 目录 仅披露已排放输出/输出结合的已完成输出端口; 其文摘涵盖原始投入/产出声明和选入旗帜. 普通方法省去旗子并保留其现有的文摘. 枢纽地图 等待引擎 仅待选入的方法,并有整数 `retryAfterMs` 从1000到60000。 永远不要成为图表输出和 民意调查保留了相同的跑道/节点/入选键.

## 审查

-   检阅显示端口对一个人,等待其超时. 无 `choices` 批准或拒绝(端口) `approved` 编号 : `rejected`) (中文(简体) ). 与 `choices` (二至八个) `{id, label}`),评论员选择一个;每个选择id 是带有第一个显示项的输出端口,所以分支跟随取取.

## 触发器

-   `triggers` (可选,最多8个,仅用根图) 宣布可以启动的 跑除了一个人或代理。 对于 `{id, on: "webhook"}`,主机拥有 URL,秘密和签名方案,所以格式名称为没有提供者.
    
-   在扳机内, `$input` 是已校验的事件( e)`body`一个稳定的非秘密 `eventId`,允许列表 `headers`),而不是运行输入。 每个端口重复在一个 重新投递,所以重新投递地图到同样的输入. `when` 是一个普通的 其上游; `input` 将它映射到运行中以普通方式声明的输入 测绘. 无 `input`,身体本身必须是运行输入。 触发器是 计划身份的一部分.
    
-   `validate` 拒绝事件外的引用, 未选中的运行输入, 未申报字段和不匹配字段(`trigger` 联合国. `triggerRun` 返回时 `start` 输入 `definition.input`, (中文(简体) ), `ignored` 何时 `when` 是虚假的,或者打字拒绝. `triggerRequestId` 转弯(瞄准镜、触发器、, 事件 id) 输入自定义启动键.
    
-   宣布一个时间表 `{id, on: "schedule", cron: {expression, timeZone}, input?}`阿尔马纳克语 验证cadence;连续发生必须至少五分钟 分开 事件揭露 `scheduledAt` (国际标准化组织)和 `eventId`; 没有映射 该事件是运行输入。 监测组作为成员公布了定义, 在每次射击时重新检查访问权限, 并联会错过了滴答 .
    
-   App 事件声明 `{id, on: "event", app, event, eventDigest, when?, input?}`。 。 。 . `catalogEvents` 标出原发射的有效载荷计划; 重新措辞其描述保留 {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}那本摘要 它的事件端口是 `payload` (完整的信封)和 `eventId`。 。 。 . 缺少声明和更改摘要拒绝汇编;缓存触发器 在开始前 对照活目录检查这些文摘.
    
-   事件映射证明有效载荷或所需物体路径的可指定性 里面还有文字、模板和结合。 贾森 指针拼写用法 保持编码器。 可选路径、阵列索引和不支持的计划 这种说法仍未得到证实,并被拒绝。 释放 `const` 项目改为 用于检查的语句,而文摘则保留了原计划. 时间表和时间表 webhook 映射行为不变.
    

## 边界重复

重复节点声明 `{id, kind: "repeat", body, maxRounds, until}`。 。 。 . `maxRounds` 是从一到五的整数。 尸体接收 `item` 从 附加图形输入, 一个零基 `round`,以及 `previous`: 一个空对象 第一轮,然后是前一轮身体输出。 停止的上游读取 完成正体输出通过 `$input`它无法进入另一个图表.

当上游变真时,节点会发出身体输出 `result`。 。 。 . 当所有回合都完成而不满足时,节点会发出最后一个输出 `exhausted`。其他出口则不活动。 两种路径都发出 `after`; 失败 儿童不能重覆,而不能捏造成功的结果.

校验机体输入和输出相容性、参考、递归 ,以及受约束的执行预算。 Cloudflare 解释器各运行 作为长生不老的孩子,拥有自己的审查身份,并通过保存的反馈 进入下一轮 地图项目保留其顺序,如果其体内含有 复说. `apps/hub/test/graph-workflow-repeat.native.mjs` 练习真实 引擎,并使用固定的 App 调度器运行所有者;它称没有媒体提供者.

## 工人发动机

`@fungi.computer/braid/cloudflare` 出口 `GraphWorkflow` 财务报告和审定财务报表 `GraphWorkflowBindings`一个主机对基地进行分级,供应其 `GRAPH_WORKFLOWS` 约束,并执行 `dispatcher(params)` 财务报告和审定财务报表 `terminalTriggerRun(params)`调度员装入宿主接受的计划, 引用 App 方法,记录节点事件,并坚持审查等. 一个主机 默认代码也覆盖 `codeExecution()` 与实际的菌体 `Sandbox` 和明确俘获的 `timeoutMs`。没有此端口的主机拒绝 代码为 `code_execution_unavailable`。枢纽和独立的主机提供工作流程 数据改变了30 000 ms的预算;这独立于代理政策。 当地 工人主机设置 `WORKFLOW_CODE_LOCAL_DEV=true` 报告 CPU 限制 未执行; 将预算转入装入器. 终端清理通过主机调回; Braid 不拥有赠款, 运行 存储、 Git 允许、 触发保留、 取消请求或 收发箱.

根出口 `GraphParams`, (中文(简体) ), `NodeDispatcher`, (中文(简体) ), `NodeCall`, (中文(简体) ), `NodeEvent`, (中文(简体) ), `GraphReview`, (中文(简体) ), `DispatchResult`,和他们的线解码器 不导入一个 工人运行时间。 应用待处理呼叫保留其稳定的独能键,同时 每一个民意测验都有不同的事件特征。 重新尝试的尝试仍然是局部的民意调查. 主机必须使用自己的存储权限重新接收App呼叫.

选中可移植根 `skipLibCheck: false`工人建设 保留中心的现有 `skipLibCheck: true`: 效应 4.0.2's `KeyValueStore` 声明提及 DOM `Storage`,工人类型环境没有 提供。 没有添加环境相容性声明; 本地运行时间测试 实际执行工人.

Hub适配器消耗了这个相同的引擎. 它的本地图样测试覆盖分支 选择、投票、审查、地图和取消终点站。 这些测试 建立 Hub 行为; 一个独立的主机必须限定它自己的约束和 入港口.

## 主机运行时间

`@fungi.computer/braid/runtime` 拥有已保存的图表运行、节点事件和审查 记录。 主机提供监视犬 SQLite 拥有者给 `createGraphWorkflowRuns`· ; 商店保存不可改变的计划, 独家启动和接受审查 整个主人娱乐的答案. `resolveWorkflowNode` 财务报告和审定财务报表 `planNodeCall` 下定决心反对这个拯救的计划 东道方保留会员资格、安装、, 吉特和本地的工作流 接纳和交付。 仅存行数 允许运行 App 方法或回答复议.

运行时间入口也拥有 `createTeamWorkflowTriggers`, (中文(简体) ), `createWorkflowSchedules`, (中文(简体) ), `createWorkflowEventRouter`,不可改变的触发计划 并管理预订。 主办方提供出版物的决议,现有拒绝 错误、 实时授权、 交易和提醒端口; 运行时间已保存 触发状态和发生身份. `PublishedDefinitionPort` 解决 精确的版本或以主机发布的访问方式执行。 复制的文件从未获得过赠款 那个通道.

复议答案是 `{approved: boolean}` 或者说 `{choice: string, note?: string}`。 。 。 . 选择笔记被限定为1000个字符. 完成的审查保留了 在选定的结果端口上显示项并同时输出 `choice` (实际数) 选定结果)和 `note` (缺时为空字符串). 这两个港口和 `after` 被保留,不能命名选择。 下游节点可以使用这些 保存输出,包括随后的重复回合.

## Schema 范围

App预测与T1. V1接受的20个KB/深度-16信封相同 JSON Schema 词汇 `PortSchema`:原始类型,标准格式来自 保留验证器登记簿和真菌媒体说明,enum/const, 对象属性/要求/附加 属性、 数组项/ 数组、 字符串 长度/标尺、数字界限(包括排他性界限)、非空地 任何标题/说明/默认说明。 效果解码 词汇; `@cfworker/json-schema` 验证没有动态的运行时间值 代码生成。 标准格式仍然是文本端口并验证实例; 真菌图像/视频/文件说明仍然是不同的媒体端口。 可分配性是 保守子集检查 。 不支持的断言( 例如) `$ref` 或者说 条件)产生一个计划问题,而不是被猜测的联系. 这是 不是一般的JSON Schema隐含解析器.

`test/anime.fixture.ts` 模型击败 ^ 映射{生成 → 审查 → 可选 动画 它的印刷品目录和文摘显然是假的;它没有 建立已发送的故事板模板的对等性, 已安装的 App 方法, 赠款、费用或生产执行.

运行 `pnpm --dir packages/braid test` 页:1 `braid-validate`。 。 。 .

`apps/hub/test/graph-declared-ports.native.mjs` 使用实际打印 声明和输入与提供者-边界的伪造。 两者兼有 动画选择、保留/拒绝、宣布拒绝、待回放和原始 通过本地图形引擎的 scalar/阵列方法值; 它没有提供者 打电话.

## 许可证

麻省理工学院. 见 [`LICENSE`](https://npmcn.com/package/%40fungi.computer/braid/LICENSE)。 。 。 .

## 常见问题

### @fungi\.computer/braid 是什么？

纯版的工作流程图验证和内容处理汇编

### 如何安装 @fungi\.computer/braid？

在项目目录运行 npm install @fungi\.computer/braid，或使用 pnpm add / yarn add / bun add。

### @fungi\.computer/braid 支持 TypeScript 吗？

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

### @fungi\.computer/braid 支持 ESM 还是 CommonJS？

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

### @fungi\.computer/braid 可以商用吗？

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

### @fungi\.computer/braid 的下载量有多少？

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

### @fungi\.computer/braid 还在维护吗？

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

