Pre-alpha 文档
通过一个服务边界暴露可恢复 Agent。
绑定精确 Agent Revision,在披露资源是否存在前授权,恢复幂等提交,读取已校验 Run,并请求两阶段取消。
冻结 Public Contract
- 精确 Deployment
- Startup Registry 为每个精确 Agent Identity 固定一个 Descriptor 与 Compiled Graph。重复版本、Schema 不一致与 Runtime Deployment Drift 都会 Fail Closed。
- 授权优先
- 强制 Authorizer 在 Submission、Read 与 Cancel 时先做决策,再披露 Deployment 或持久化目标是否存在。Caller 必须来自已验证 Token 或 mTLS Identity。
- 持久化 Ingress
- Tenant-scoped Submission Key 会把 Lost ACK 收敛到原 Run。逻辑内容变化是 Conflict,不会创建第二个 Run。
- 两阶段取消
- Service 使用调用方保留的稳定 IDs 提交 Intent;Worker 停止新 Dispatch; Lifecycle 只有在 Usage 与 External-effect Evidence 充分时才确认 Terminal State。
构建一份不可变 Startup Snapshot
构造 Facade 前,注册所有 Graph、Reducer、Node、类型化 Schema、Admission Schema 与 Service-control Schema。Submission 不会内联运行 Model 或 Tool。
register_standard_agent_service_control_event_schema(&mut schema_builder)?;
let executable = executable_builder.build()?;
let mut deployments = AgentServiceRegistryBuilder::new();
deployments.register(Arc::new(provider_native_definition.clone()))?;
let service = AgentServiceV1::new(
store.clone(),
executable,
deployments.build(),
Arc::new(authorizer),
)?; 按持久化 Identity 提交、读取与取消
let admitted = service
.submit(caller.clone(), &submission_key, &agent_identity, request)
.await?;
let run_id = admitted.snapshot().provenance().run_id();
let snapshot = service.load(caller.clone(), run_id).await?;
// 只持久生成一次;Timeout 后复用完全相同的一对 Identity。
let ids = AgentCancellationIds::generate();
let cancellation = service
.request_cancellation(caller, run_id, ids)
.await?;
Timeout 后,使用相同 Tenant、Agent Identity、Key 与逻辑 Request 重试
Submission。取消必须复用相同 run_id 和完全相同的 AgentCancellationIds。新的 Cancellation IDs 代表竞争请求,不能伪装为幂等成功。
持久保存 Public-safe Control Evidence
Cancellation Journal 绑定调用方持久保留的精确 Event/Failure ID 与 PostgreSQL 权威时间戳;Event Data 保存 Admission、Policy、Decision Digest 与稳定 Failure ID。Caller Input、Principal 文本、Policy Payload、Credential 与 Failure Message 被明确排除。查看公开 Schema。
把 Transport 责任留在边界之外
- 构造 Caller 前验证 TLS、Token 或 mTLS。
- 从已验证 Credential 派生 Tenant 与 Principal,绝不信任 Request-body Identity Claim。
- 调用 Facade 前持久保存 Submission 与 Cancellation IDs。
- 补齐有界 Public Error、Rate Limit、Overload Control、Tracing、 Scheduler/Worker Role、Graceful Drain 与 Backup/Restore。
- 不得把远程 Policy Request 放进数据库事务;应消费已保留的 Policy Evidence。
运行 PostgreSQL 证据
STATEKNOT_REQUIRE_POSTGRES_TESTS=1 \
cargo test -p stateknot-runtime --test postgres \
agent_service_authorizes_submits_recovers_and_cancels_without_redispatch \
--locked Focused Test 证明 Authorization-first Missing-resource、精确 Submission Recovery、Key-based Read、Cancellation Commit/Retry/Conflict,以及零 Model/Tool Dispatch。暴露 Network API 前,请阅读完整集成合约。