模块 5协议、Skills 与框架
TypeScript Agent 工程
从边界组织代码而非按 SDK 示例堆文件
- domain:任务、状态与业务不变量
- application:Run 用例与编排
- adapters:Model、Tool、Store、Transport
- infrastructure:配置、Telemetry 与部署
- UI/协议类型通过显式契约共享
静态类型不能替代运行时校验
- Schema 作为外部输入事实
- 从 Schema 推导 TypeScript 类型减少漂移
- 判别联合表示事件和状态机
- unknown 优于 any,边界处解析后再进入领域层
异步流需要取消、背压和清理
- AsyncIterable/ReadableStream 的事件消费
- AbortSignal 贯穿模型、Tool 和客户端
- 并发 Tool 的上限与 Promise.allSettled 语义
- finally 中关闭连接、刷新 Trace 和释放资源
依赖注入保持业务逻辑可测试
- Runner 依赖接口而非全局单例
- RunContext 只携带显式业务依赖和身份
- 配置和秘密在 Composition Root 解析
- 避免把请求对象传遍所有 Tool
用稳定错误类型跨层传递恢复语义
- Validation、Policy、Retryable、Conflict、Cancelled 和 Unknown Outcome
- cause 保留诊断链但不直接暴露用户
- Result/Event 协议与异常边界一致
- Unhandled rejection 和浮动 Promise 作为测试失败
测试分层覆盖概率与确定性边界
- 状态机、Schema、策略和 Context Builder
- Model/Tool/Store Adapter
- 录制模型事件或 Fake Model 驱动完整 Run
- 超时、取消、重复、乱序和部分失败
Node 运行时的生产细节
- 连接复用、并发池和内存上限
- 进程信号与优雅关闭
- Edge/Serverless 的生命周期和 Trace Flush
- Source Map、结构化日志和版本元数据