1313
1414## Session startup(会话启动)
1515
16- 服务端在 control session(控制会话) 建立后必须先发送由 active registration(活动注册) 形成的 target process list(目标进程列表) 和授权范围 . 目标进程完成 dynamic registration(动态注册) 只会进入该列表, 不会因为注册本身触发事件日志主动推送.
16+ 服务端在 WebSocket(网络套接字) 建立后必须先发送 ` server_hello ` (服务端握手). 客户端收到 ` server_hello ` 后发送 ` client_hello ` (客户端握手). relay(中继) 校验 ` client_hello ` 后才发送由 active registration(活动注册) 形成的 target process list(目标进程列表). 目标进程完成 dynamic registration(动态注册) 只会进入该列表, 不会因为注册本身触发事件日志主动推送.
1717
1818``` json
1919{
20- "type" : " session_established " ,
20+ "type" : " server_hello " ,
2121 "session_id" : " 01HV0000000000000000000200" ,
22- "identity" : {
23- "principal" : " operator@example.test" ,
24- "source" : " mtls"
25- },
22+ "client_identity" : " mtls_cert_fingerprint:test-client" ,
23+ "log_event_filter_mode" : " remote" ,
24+ "log_event_filter_conditions" : {},
25+ "filter_config_version" : 1
26+ }
27+ ```
28+
29+ ``` json
30+ {
31+ "type" : " target_list" ,
2632 "targets" : [
2733 {
2834 "target_id" : " payments-worker-a" ,
2935 "display_name" : " payments worker a" ,
3036 "registration_state" : " active" ,
3137 "connection_state" : " registered" ,
32- "authorization_scope" : " payments:operate"
38+ "supported_commands" : [
39+ {
40+ "name" : " restart_child" ,
41+ "idempotent" : false ,
42+ "timeout_seconds" : 30
43+ }
44+ ]
3345 }
3446 ]
3547}
4860
4961### Ordering rules(顺序规则)
5062
51- - ` session_established ` 必须早于 ` state ` , ` event ` , ` log ` , ` state_delta ` , ` command_result ` 和 ` error ` .
52- - ` session_established ` 发送后 , relay(中继) 才能按授权目标触发 IPC(进程间通信) 绑定和 event/log subscription(事件日志订阅).
63+ - ` server_hello ` 必须早于 ` target_list ` , ` state ` , ` event ` , ` log ` , ` state_delta ` , ` command_result ` 和 ` error ` .
64+ - ` client_hello ` 校验成功后 , relay(中继) 才能自动绑定 active target(活跃目标), 触发 IPC(进程间通信) 绑定和 event/log subscription(事件日志订阅).
5365- 同一 target process(目标进程) 内的 ` event.sequence ` 必须按单调顺序发送给 dashboard(看板).
5466- IPC(进程间通信) 重连成功后, relay(中继) 必须先发送新的 ` state ` , 再继续发送新的 event(事件) 和 log(日志).
5567
6981}
7082```
7183
72- ### Authorization rules(授权规则 )
84+ ### Command rules(命令规则 )
7385
7486- relay(中继) 必须根据 RemoteIdentity(远程身份) 派生 ` requested_by ` .
7587- 客户端消息中的 ` requested_by ` 必须被忽略或拒绝.
76- - 未认证, 未授权, 证书身份不可解析或 control session(控制会话) 未建立时, relay(中继) 不得连接 IPC(进程间通信), 不得绑定 IPC(进程间通信), 不得转发命令.
88+ - 未认证, 证书身份不可解析或 control session(控制会话) 未建立时, relay(中继) 不得连接 IPC(进程间通信), 不得绑定 IPC(进程间通信), 不得转发命令.
89+ - relay(中继) 转发命令前必须确认 target(目标) 处于 active(活跃) 状态, 并确认 target(目标) 已经在 registration(注册) 中声明支持该命令.
7790- ` shutdown_tree ` , ` remove_child ` 和 ` add_child ` 必须要求 ` confirmed=true ` 和非空 ` reason ` .
7891- 客户端发送旧协议别名或历史控制命令别名时, relay(中继) 必须返回结构化拒绝错误, 不得执行别名对应行为.
7992
@@ -83,13 +96,13 @@ dashboard client(看板客户端) 可以本地过滤, 也可以向 relay(中继)
8396
8497``` json
8598{
86- "type" : " filter_update " ,
99+ "type" : " log_event_filter_conditions " ,
87100 "target_ids" : [" payments-worker-a" ],
88101 "child_paths" : [" /root/payment_loop" ],
89102 "lifecycle_states" : [" failed" , " restarting" ],
90103 "event_types" : [" child_failed" , " child_restarted" ],
91104 "severities" : [" warning" , " error" ],
92- "sequence_from " : 1000 ,
105+ "sequence_min " : 1000 ,
93106 "correlation_id" : " restart-7"
94107}
95108```
0 commit comments