This commit is contained in:
2026-06-20 19:16:44 +08:00
parent db3d030169
commit dbb87823e8
26 changed files with 676 additions and 115 deletions
+14
View File
@@ -249,7 +249,21 @@ func (r *Relay) reader(ctx context.Context, sess handlers.SessionContext) {
}
// handleAgentRequest dispatches an agent → server request to the appropriate handler.
// 在独立 goroutine 中运行,故 defer recover 兜底任何 handler panic:记录日志并回送
// JSON-RPC internal error,避免 agent 构造的请求 panic 掉整个进程(DoS)。
func (r *Relay) handleAgentRequest(ctx context.Context, sess handlers.SessionContext, req *Message) {
defer func() {
if rec := recover(); rec != nil {
r.log.Error("acp.relay.handle_request_panic",
"session_id", r.sessionID, "method", req.Method, "panic", fmt.Sprintf("%v", rec))
resp := NewResponseErr(req.ID, JSONRPCInternalError, "internal error")
select {
case r.serverInitiated <- resp:
case <-ctx.Done():
}
}
}()
var resp *Message
switch req.Method {
case "fs/read_text_file":