源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
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
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
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user