@fungi.computer/braid

中文文档
0.4.19发布于 2026/11/15MITTypeScriptES Module近 30 天下载 1万

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

中文使用文档
文档目录10 节
  1. 安装
  2. 验证和汇编
  3. V1合同
  4. 审查
  5. 触发器
  6. 边界重复
  7. 工人发动机
  8. 主机运行时间
  9. Schema 范围
  10. 许可证

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

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

安装

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。 。 。 .

版本与发布记录

@fungi.computer/braid 共发布 29 个版本,首次发布于 2026/10/17;过去 12 个月发布了 29 个版本。

版本发布日期距今
0.4.19latest2026/11/15今天
0.4.182026/11/15今天
0.4.172026/11/141 天前
0.4.162026/11/141 天前
0.4.152026/11/141 天前
0.4.142026/11/141 天前

关于 @fungi.computer/braid 的常见问题

@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 和提交记录判断。