Files
tutti/packages/agent/daemon/runtime/codex_appserver_scripted_rpc_test.go
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

71 lines
1.6 KiB
Go

package agentruntime
import (
"encoding/json"
"sync"
)
type scriptedAppServerResponder interface {
Close() error
sendJSON(map[string]any)
sendJSONBatch(...map[string]any)
sendStderr([]byte)
notify(string, map[string]any)
}
type scriptedAppServerMessage struct {
ID json.RawMessage `json:"id"`
Method string `json:"method"`
Params map[string]any `json:"params"`
Result json.RawMessage `json:"result"`
Error json.RawMessage `json:"error"`
}
type fakeCodexAppServer struct {
mu *sync.Mutex
scriptedAppServerResponder
scriptedSessionState
scriptedTurnState
scriptedGoalState
scriptedReviewState
}
func newFakeCodexAppServer(
responder scriptedAppServerResponder,
mu *sync.Mutex,
) *fakeCodexAppServer {
return &fakeCodexAppServer{
scriptedAppServerResponder: responder,
mu: mu,
scriptedGoalState: scriptedGoalState{
goalCompletionAfterTurns: 1,
},
}
}
func (s *fakeCodexAppServer) handle(data []byte) error {
for _, line := range acpScanLines(data) {
var message scriptedAppServerMessage
_ = json.Unmarshal([]byte(line), &message)
if s.handleSessionRPC(message) ||
s.handleTurnRPC(message) ||
s.handleGoalReviewRPC(message) {
continue
}
s.handleClientResponse(message, line)
}
return nil
}
func (s *fakeCodexAppServer) handleClientResponse(message scriptedAppServerMessage, line string) {
if message.Method != "" || len(message.ID) == 0 {
return
}
var payload map[string]any
_ = json.Unmarshal([]byte(line), &payload)
s.mu.Lock()
s.approvalResponse = payload
s.mu.Unlock()
s.completePendingTurn()
}