Pre-alpha 文档
注册本地 Rust Tool,但不绕过持久执行边界。
生成 Digest-pinned Schema、适配强类型 Rust 代码、冻结精确 Provider 快照,并由持久执行器负责派发与恢复。
运行生产 Registry 路径
仓库中的示例会生成并固定两份 Rust Schema、构造强类型 Adapter、冻结 Provider Registry,并证明 Agent 可见 Descriptor 能被精确解析。它不会调用 Tool,也不会 执行外部 I/O。
cargo run -p stateknot-runtime --example local_tool_registration --locked let mut schemas = JsonSchemaRegistryBuilder::with_default_limits();
let input = schemas.register_rust_type::<IncidentLookup>(input_id, VERSION)?;
let output = schemas.register_rust_output_type::<IncidentSummary>(output_id, VERSION)?;
let schemas = schemas.build()?;
let adapter = ToolAdapter::new(
IncidentLookupTool { descriptor: descriptor.clone() },
schemas,
)?;
let mut providers = ToolProviderRegistryBuilder::new();
providers.register(Arc::new(adapter))?;
let providers = providers.build();
let agent_tools = AgentTools::try_new([descriptor.clone()])?;
assert_eq!(providers.resolve(&descriptor)?.descriptor(), &descriptor); 在准入前封闭强类型契约
使用对象根 Input 与有边界的 Output 类型实现
Tool。使用 serde(deny_unknown_fields),并准确声明 副作用、幂等性、取消、对账与资源上限。register_rust_type 按反序列化生成输入契约,register_rust_output_type
按序列化生成输出契约。两者均加入规范 Schema ID、计算 RFC 8785 SHA-256 Digest,并安装离线
Validator;
ToolAdapter 会在启动时拒绝任何生成 Schema 漂移。
输出注册入口跟踪当前源码,已发布 alpha.1 包尚未包含。如果旧输出 pin 与实际序列化 Schema 不同,必须采用新的 Schema 和 Tool 版本,并为已准入工作 保留旧可执行版本;不能重写不可变 pin。
一次 call 只执行一次物理尝试。不能隐藏重试,也不能把结果不确定的写入
描述为未执行。Secret 只能存在于实现持有的 Client 配置中,不能进入 Descriptor、
Event、Error 或模型可见输出。
让持久化证据控制执行
DurableInvocationExecutor 校验策略与预算、提交 Start、解析冻结的精确
Descriptor、执行一次 Provider Call,最后通过 Fence 提交终态证据。缺失版本或字节
不同的 Descriptor 会在 I/O 前失败。未知副作用进入对账流程,不会自动变成重复写入。
本地 ToolAdapter、McpRemoteTool、
McpSkillBoundTool 与 A2aRemoteAgent 可以存在于同一
Registry。精确身份冲突会导致启动失败,不存在本地、远端或 Discovery 优先级。
在途 Run 排空前必须保留旧的可执行版本。