
iii 仓库的 AGENTS.md 实战指南Function / Trigger / Worker 三元组开发规范与 monorepo 协作边界【免费下载链接】iiiEffortlessly compose, extend, and observe every service in real-time for the first time ever.项目地址: https://gitcode.com/GitHub_Trending/mo/iii导读AGENTS.md是 iii 后端统一引擎 monorepo 面向编码 Agent及人类开发者的仓库宪法它以极短的篇幅定义了仓库的三大原语Function、Trigger、Worker、全部构建测试命令、项目目录地图、以及Always / Ask First / Never三层协作边界并用 Rust、TypeScript、Python 三套 SDK 示例规定了函数 ID 分隔符、HTTP 路径与 Cron 表达式字段等核心编码风格。读完本文你将掌握在该仓库中正确注册函数与触发器、跑通构建与测试、遵循引擎配置 Schema 约束的全部约定并了解这些约定在 engine 与各 SDK 源码中的真实落点。1. 仓库定位一个以 WebSocket 为核心的后端统一引擎AGENTS.md 开篇即给出仓库的本质定义iii 是一个backend unification engine拥有三个核心原语——Function函数、Trigger触发器、Worker工作进程。引擎本体由 Rust 编写官方 SDK 覆盖 TypeScript、Python、Rust 三种语言且所有 SDK 与引擎之间的通信都基于 WebSocket。这一架构在源码中得到了完全印证引擎的engine_fn内置 worker 文档将运行时描述为 a WebSocket-routed worker mesh一个引擎进程默认端口49134持有所有已连接 worker、每个 worker 暴露的函数以及绑定到这些函数上的触发器的实时注册表worker 之间不存在直连流量每次调用都经过caller → engine → handler路由见 engine/src/workers/engine_fn/README.md引擎源码中的 trigger_formats.rs 为每种内置触发器类型定义了注册时配置格式与触发时调用请求格式两套 Schema并派生JsonSchema供引擎自动生成 JSON Schema 定义。因此AGENTS.md 并非泛泛的仓库介绍而是为在这套 WebSocket 路由的 worker 网格里正确编写代码提供的操作手册。2. 命令速查从 Setup 到 Cloud 的完整工作流AGENTS.md 将仓库命令划分为六个层次覆盖一个功能从依赖安装、构建、测试、静态检查到部署上云的全生命周期。2.1 依赖安装与构建# Setup pnpm install # JS/TS 依赖 cargo build --release # Rust workspace # Build pnpm build # 所有 JS/TS 包Turborepo 编排 cargo build --release # engine Rust SDK console两个 Workspace 定义文件共同支撑这套构建体系Cargo.toml 声明 Rust workspace成员包括engine、sdk/packages/rust/iiiRust SDK、console/packages/console-rust以及crates/下的一批工具 crateiii-compose、iii-init、iii-filesystem、iii-network、iii-worker、scaffolder-core等当前版本为0.23.0-rc.9并预置了tokio、serde、clap、reqwest等共享依赖与wiremock、tempfile、serial_test等共享 dev-dependenciespnpm-workspace.yaml 声明 JS/TS 包范围覆盖sdk/packages/node/iii及其示例/浏览器/可观测性/helpers 包、console/packages/*、docs与websiteturbo.json 定义构建编排任务build依赖上游构建dependsOn: [^build]、test与test:ci均依赖 build 且关闭缓存、dev为持久任务。2.2 测试与质量检查# Test pnpm test # 全部 JS/TS 测试 cargo test # 全部 Rust 测试 cargo test -p iii # 仅引擎 cargo test -p iii-sdk # 仅 Rust SDK cd sdk/packages/python/iii uv sync --extra dev uv run pytest # Python SDK # Lint Format pnpm fmt # 格式化 JS/TSBiome pnpm fmt:check # 仅检查不修改 pnpm lint # lint JS/TS cargo fmt --all # 格式化 Rust cargo clippy --workspace # lint Rust注意几个细节Rust 的格式化使用cargo fmt --all覆盖整个 workspaceJS/TS 侧由 biome.json 驱动Python SDK 使用uv管理依赖先uv sync --extra dev拉取 dev 依赖再跑pytest。Rust SDK 的测试可以进一步深入到 sdk/packages/rust/iii/tests 下的集成测试如api_triggers.rs、middleware.rs、pubsub.rs它们以真实引擎连接验证触发器的注册与调用行为。2.3 本地运行与云端部署# Run cargo run --release # 启动引擎读取 engine/config.yaml pnpm dev:console # console 前端开发服务器 pnpm dev:docs # docs 开发服务器Mintlify pnpm dev:website # website 开发服务器 # Cloud iii cloud deploy --config path # 部署到 iii Cloud iii cloud list # 列出部署 iii cloud update deployment-id # 更新部署 iii cloud delete deployment-id # 删除部署引擎启动时读取 engine/config.yaml。该文件当前配置了两个引擎生命周期内的 workeriii-stream流式通道 worker监听127.0.0.1:3112端口可用STREAM_PORT环境变量覆盖底层适配器为 Redisredis://localhost:6379configuration配置 worker使用fs适配器从./config目录读取配置ttl_seconds: 0表示不做缓存过期。此外文件还预留了被注释的iii-sandbox瞬时沙箱配置示例image_allowlist、default_idle_timeout_secs、max_concurrent_sandboxes等字段表明沙箱属于引擎托管特例而非普通项目 worker。3. 项目地图一眼看懂 monorepo 布局AGENTS.md 给出的目录地图与仓库实际结构一致是定位代码的首要索引engine/ Rust 引擎——运行时、模块、协议、CLI sdk/packages/node/iii/ TypeScript SDKnpm: iii-sdk sdk/packages/node/iii-browser/ 浏览器 SDKnpm: iii-browser-sdk sdk/packages/python/iii/ Python SDKPyPI: iii-sdk sdk/packages/rust/iii/ Rust SDKcrates.io: iii-sdk console/ 开发者控制台React Rust skills/ 26 个 Agent skillsSkillKit 自动发现 docs/ 文档站Mintlify/MDX website/ iii.dev 官网 website/presentations/ Tech-spec 演示站点iii.dev/tech-specs/ tech-specs/ Markdown 形式的规格文档 scripts/ 构建与 CI 脚本几个需要留意的细节sdk/packages/rust/iii对应 Cargo.toml 中 workspace 依赖iii-sdk的路径引用另有sdk/packages/rust/observabilityiii-observability与sdk/packages/rust/helpersiii-helpers作为配套 crate仓库实际目录skills/下包含 6 个iii-前缀的 skilliii-architecture-patterns、iii-core-primitives、iii-engine-config、iii-error-handling、iii-getting-started、iii-sdk-reference以及presentation/子项目每个 SKILL.md 都遵循 AGENTS.md 规定的结构要求根目录的Cargo.tomlRust、pnpm-workspace.yamlJS/TS、turbo.json构建编排共同构成三套工作区声明。4. 协作边界Always / Ask First / Never 三层规则AGENTS.md 用三个等级划定了 Agent 在仓库中的行为边界这是避免破坏性变更的关键。4.1 Always必须遵守的硬性约定JS/TS 包一律使用pnpm禁止npm提交 Rust 变更前先跑cargo fmt --all提交 JS/TS 变更前先跑pnpm fmtHTTP 触发器api_path必须使用前导斜杠/orders、/users/:idCron 触发器配置字段必须叫expression而不是cron函数 ID 使用::分隔符orders::validate、reports::daily-summary内部 pnpm 包引用使用workspace:*协议每个 SKILL.md 必须包含## When to Use与## Boundaries小节且 SKILL.md 的name字段必须与所在目录名完全一致。这些约定不是随意规定而是与引擎的实际解析逻辑强绑定详见第 5 节。4.2 Ask First变更前必须征询的领域修改公开 SDK APInpm / PyPI / crates.io 对外暴露面修改引擎配置 Schemaengine/config.yaml修改 CI/CD 工作流.github/新增引擎模块修改 SDK 与引擎之间的 WebSocket 协议。4.3 Never绝对禁止的行为提交密钥、API Key 或凭据用npm代替pnpm直接向main分支推送更改引擎许可证ELv2或 SDK 许可证Apache-2.0——这一双许可证结构在 AGENTS.md 末尾的 Licensing 一节有明确说明engine/使用 Elastic License v2其余部分为 Apache-2.0引擎源码文件头部的版权注释也印证了这一点从 SKILL.md 中删除 When to Use / Boundaries 小节SkillKit 会校验用cron作为配置键——引擎标准是expression在api_path上省略前导斜杠——引擎标准是/path。5. 编码风格三语言 SDK 的统一约定AGENTS.md 用 Rust、TypeScript、Python 三套示例展示了完全一致的约定这是理解全文最重要的部分。5.1 函数 ID 使用::分隔符无论哪种语言函数 ID 都遵循服务名::动作名的命名空间约定// Rust —— 函数 ID 使用 :: 分隔符 iii.register_function( RegisterFunction::new(orders::validate, validate_order) .description(Validate an incoming order), );::分隔符在引擎中被视为函数 ID 的命名空间契约engine_fnREADME 明确Function 是 worker 内的命名处理器ID 形如service::name函数 ID 是任意两个 worker 之间唯一的契约见 engine/src/workers/engine_fn/README.md。Rust SDK 的示例程序 cron_trigger_example.rs 同样使用example::scheduled_cleanup、example::on_user_updated这类::分隔 ID。5.2 HTTP 触发器使用前导斜杠// Rust —— HTTP 触发器使用前导斜杠 iii.register_trigger( IIITrigger::Http(HttpTriggerConfig::new(/orders/validate).method(HttpMethod::Post)) .for_function(orders::validate), );引擎的HttpTriggerConfig结构体将api_path定义为HTTP endpoint path如/users/:id支持路径参数且http_method默认 GET见 engine/src/trigger_formats.rs 第 24–48 行。TypeScript SDK 的iii-types.ts同样暴露api_path、http_method等字段。TypeScript 侧还展示了 HTTP 触发器的中间件链能力// TypeScript —— HTTP 触发器 中间件链 iii.registerTrigger({ type: http, function_id: orders::validate, config: { api_path: /orders/validate, http_method: POST, middleware_function_ids: [middleware::auth, middleware::rate-limit], }, });middleware_function_ids让一个 HTTP 触发器在调用 handler 前依次执行鉴权、限流等中间件函数Rust SDK 的 middleware.rs 集成测试覆盖了此类场景。5.3 Cron 触发器使用expression字段AGENTS.md 特别强调Cron 配置字段是expression而非cron且给出 7 段格式sec min hour dom month dow year秒 分 时 日 月 周 年// Rust —— Cron 触发器使用 expression 字段 iii.register_trigger( IIITrigger::Cron(CronTriggerConfig::new(0 0 9 * * * *)) .for_function(reports::daily-summary), );需要说明的一点是格式口径AGENTS.md 的示例注释写作 7 段格式而引擎源码 trigger_formats.rs 第 98–104 行的CronTriggerConfig注释写作 6-field format: sec min hour day month weekday。两者在以0 0 9 * * * *这类表达式描述每日 9 点执行的语义上一致但段数表述存在差异——实际编写 Cron 触发器时建议以当前引擎源码trigger_formats.rs中CronTriggerConfig.expression字段的注释口径为准并在注册前用小粒度表达式验证。字段名的强制性是双重的引擎的CronTriggerConfig中字段就叫expression而非cron同时 AGENTS.md 的 Never 清单再次强调不要用cron作为配置键。5.4 触发器元数据可选TypeScript 示例展示了触发器可附带metadata随触发器一起存储便于标记归属团队与优先级// TypeScript —— 带元数据的触发器 iii.registerTrigger({ type: cron, function_id: reports::daily-summary, config: { expression: 0 0 9 * * * * }, metadata: { owner: billing-team, priority: high }, });5.5 Python SDK 使用相同模式# Python —— 同样的模式前导斜杠 expression 字段 iii.register_trigger({ type: http, function_id: orders::validate, config: {api_path: /orders/validate, http_method: POST}, })Python SDK 采用字典传参方式但字段名与 TypeScript 完全对齐function_id、api_path、http_method保证跨语言的心智一致性。6. Skills 与 Agent 生态仓库自带的 LLM 知识库AGENTS.md 说明skills/目录包含 26 个iii-前缀的 Agent skills可通过npx skills add iii-hq/iii与npx skillkit install iii-hq/iii自动发现安装仓库中每个 SKILL.md 都配有 TypeScript、Python、Rust 变体的参考实现。仓库实际可见的 skills 为 6 个iii-architecture-patterns、iii-core-primitives、iii-engine-config、iii-error-handling、iii-getting-started、iii-sdk-reference外加presentation/子项目总目录结构见 skills/完整的清单与安装说明可参考 skills/README.md 与 skills/SKILLS.md。这些 skill 被 SkillKit 校验SKILL.md 必须含 When to Use 与 Boundaries 小节是面向编码 Agent 的结构化知识单元。此外AGENTS.md 提到博客文章作为 Agent 知识库website/src/content/blog/为源码目录用于沉淀架构文章与编码示例供 Agent 检索引用。7. 实战要点总结基于 AGENTS.md 与仓库源码编写 iii 相关代码时应时刻遵守以下清单维度约定依据包管理JS/TS 一律pnpmAGENTS.md Always / Never函数 ID服务::动作如orders::validateengine_fn READMEHTTP 路径必须前导斜杠支持:param路径参数trigger_formats.rsCron 字段expression禁止crontrigger_formats.rs 第 99–101 行中间件middleware_function_ids串起调用链iii-types.ts、middleware.rs 测试引擎配置修改engine/config.yamlSchema 前先征询AGENTS.md Ask First许可证引擎 ELv2其余 Apache-2.0AGENTS.md Licensing、LICENSE.spdxSKILL.md必须含 When to Use / Boundariesname 与目录一致AGENTS.md AlwaysAGENTS.md 的独特价值在于它把引擎如何解析与代码该怎么写直接对齐——api_path的前导斜杠、expression字段名、::分隔符都不是风格偏好而是引擎 trigger_formats.rs 与 worker 网格运行时实际读取的 Schema 契约。对于任何准备在 iii monorepo 中编写或审查代码的 Agent 与开发者这份文件既是入门地图也是不可违背的边界手册。【免费下载链接】iiiEffortlessly compose, extend, and observe every service in real-time for the first time ever.项目地址: https://gitcode.com/GitHub_Trending/mo/iii创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考