✨ 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 干净
This commit is contained in:
1 parent
a39cec5287
commit
9dafb8fe72
10 files changed
+1141
No files matched your search
@@ -0,0 +1,127 @@
|
||||
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;
|
||||
}
|
||||
Reference in new issue
Block a user