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
71 lines
1.6 KiB
Go
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()
|
|
}
|