SuperAPI AI 工具集

effect-v4

编程与开发

查看项目

更新于 10-15 20:27

技能介绍

用途:在 Composio CLI、@composio/cli-keyring 和 @composio/json-schema-to-effect-schema 中编写、审查或升级 Effect v4 代码。

版本约束:effect、@effect/platform-bun、@effect/vitest 均精确锁定为 4.0.3,不使用 ^、@next 或跨包不一致版本。@effect/cli 与 @effect/platform 不再是依赖,其能力合并进 effect 与 effect/*。完整矩阵见 versions.json(含 typescript、vitest)。

参考文档:references/core-patterns.md 涵盖服务、Layer、类型化错误、Schema、Effect.gen 与 Effect.fn 的取舍,以及 v3→v4 重命名表(标注为历史,用于识别过时写法);references/cli-surface.md 涵盖 effect/cli 的 Command、Flag、Argument、GlobalFlag、CliConfig、自定义 CliOutput.Formatter 及 runner 的双打印规则;references/upgrade-workflow.md 说明升级到更新版本的流程。参考中的代码片段引自当前可编译的真实仓库文件(每段标注路径),以被引文件为准。

硬性约定:effect 值用 Effect.gen(function* () {...}),参数化辅助函数用 (params) => Effect.gen(...);Effect.fn(...) 为带栈帧注解的函数形式,可选名称字符串增加每次调用的追踪 span,适合服务成员与组合子回调。服务用 Context.Service 加显式 static readonly Default/layer,用 Layer.succeed/Layer.effect/Layer.provide 构建,v4 不自动生成 layer。预期失败用 Schema.TaggedError(无需 Schema 字段时用 Data.TaggedError),用 Effect.catchTag/catchTags/Match 恢复,不做手工 _tag 字符串比较。可失败的 Promise 用 Effect.tryPromise({ try, catch }) 包裹,Effect.promise 会把拒绝变成缺陷;Effect 工作流内禁止 async/await 与 try/catch,ESLint 在 ts/packages/cli/src 中禁用。记忆中的 v3 包名与 API 一律视为错误,需对照 ts/vendor/effect(只读源,不可编辑或导入)与已安装的 effect@4.0.3 类型验证;源码可能领先于已发布包,编译器是兼容性关口。

验证:运行 pnpm typecheck、pnpm --filter @composio/cli test;编辑本技能或其描述后运行 pnpm validate:agent-skills 与 pnpm validate:skill-routing;并用 node .agents/skills/effect-v4/scripts/check-examples.mjs 针对锁定包编译本技能及 typescript-testing/references/effect-v4-cli.md 中的 TypeScript 代码块。引用仓库文件且导入无法解析的代码块带 no-check 围栏标记。