Files
chenxin 9dafb8fe72 ✨ feat: 灵台引擎 gRPC 独立服务形态(ADR-017 双形态落地)
- proto(engine/proto/liushen/v1):LingtaiEngine 九方法——GetEngineInfo(版本协商/能力位)、TransformMarkdown、RebuildExport(UNIMPLEMENTED 明示随 WP-03)、OpenStream 双向流、CheckBudget、RerankRecall、EvaluatePolicy、ValidateUrl、CheckStateTransition;RunStatus 枚举与契约一致
- 服务端参考实现(engine/server/lingtai_server.py):进程内直链 nanobind 引擎核心——双形态同核同 golden;开发档 127.0.0.1 明文(生产 mTLS,文案明示);状态转换表按 agent-runtime 第 3 节
- 集成测试 6 项:进程内随机端口起服——版本协商、双形态 golden(服务输出==进程内引擎输出,ADR-017 核心不变量首次实证)、双向流 envelope 序号单调、决策表/URL/状态机、RebuildExport UNIMPLEMENTED 明确拒绝(不伪造)
- Makefile:lingtai-proto(stub 再生)与 lingtai-server(启动服务)目标
- 注:C++ 原生二进制(hunjing-lingtai-server)随交叉编译矩阵交付;Python 参考实现保证 proto 与语义先行锁定
- 测试 102 项全绿(+6);ruff/mypy 干净
2026-09-14 10:21:54 +08:00

128 lines
3.1 KiB
Protocol Buffer
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
syntax = "proto3";
package liushen.v1;
// 灵台引擎独立服务形态(契约 docs/contracts/lingtai-service.md)。
// 部署内部网络专用;错误映射见契约第 6 节。字段语义与进程内 C ABI JSON 边界同源。
service LingtaiEngine {
// 版本、ABI major、parser version、能力位
rpc GetEngineInfo(GetEngineInfoRequest) returns (GetEngineInfoResponse);
// Markdown → canonical ContentBlock JSON
rpc TransformMarkdown(TransformMarkdownRequest) returns (TransformMarkdownResponse);
// canonical Block → 可移植 Markdown 重建(预留:实现随 WP-03 导出)
rpc RebuildExport(RebuildExportRequest) returns (RebuildExportResponse);
// 双向流:宿主喂增量,服务回 content.block.* envelope JSON
rpc OpenStream(stream StreamFrame) returns (stream StreamEvent);
// 计划 DAG 预算核算(最小:标量预算)
rpc CheckBudget(CheckBudgetRequest) returns (CheckBudgetResponse);
// 候选确定性重排
rpc RerankRecall(RerankRecallRequest) returns (RerankRecallResponse);
// 四维裁决(autonomy × risk)
rpc EvaluatePolicy(EvaluatePolicyRequest) returns (EvaluatePolicyResponse);
// URL 协议白名单校验
rpc ValidateUrl(ValidateUrlRequest) returns (ValidateUrlResponse);
// Run/Turn 状态转换合法性
rpc CheckStateTransition(CheckStateTransitionRequest) returns (CheckStateTransitionResponse);
}
message GetEngineInfoRequest {}
message GetEngineInfoResponse {
uint32 abi_major = 1;
string parser_version = 2;
string engine_version = 3;
repeated string capabilities = 4;
}
message TransformMarkdownRequest {
string markdown = 1;
}
message TransformMarkdownResponse {
string canonical_json = 1; // canonical ContentBlock JSON(键序确定)
}
message RebuildExportRequest {
string canonical_json = 1;
}
message RebuildExportResponse {
string markdown = 1;
}
message StreamFrame {
oneof frame {
string block_started = 2; // block_id:开启新 block(重置 delta_index)
string text_delta = 3; // 文本增量
}
}
message StreamEvent {
string event_json = 1; // content.block.* envelope(canonical JSON)
}
message CheckBudgetRequest {
int64 used = 1;
int64 maximum = 2;
}
message CheckBudgetResponse {
bool allowed = 1;
string reason = 2;
}
message RerankRecallRequest {
string candidates_json = 1;
}
message RerankRecallResponse {
string ranked_json = 1;
}
message EvaluatePolicyRequest {
int32 autonomy_level = 1; // 0 自省 / 1 循律 / 2 请命 / 3 禁域
int32 risk_level = 2; // 0 只读 / 1 副作用 / 2 高影响
}
message EvaluatePolicyResponse {
int32 decision = 1; // 0 allow / 1 ask / 2 deny
}
message ValidateUrlRequest {
string url = 1;
}
message ValidateUrlResponse {
bool allowed = 1;
string reason = 2;
}
enum RunStatus {
RUN_STATUS_UNSPECIFIED = 0;
RUN_STATUS_QUEUED = 1;
RUN_STATUS_RUNNING = 2;
RUN_STATUS_WAITING_APPROVAL = 3;
RUN_STATUS_COMPLETED = 4;
RUN_STATUS_FAILED = 5;
RUN_STATUS_CANCELLED = 6;
}
message CheckStateTransitionRequest {
RunStatus from = 1;
RunStatus to = 2;
}
message CheckStateTransitionResponse {
bool valid = 1;
string reason = 2;
}