Files
tutti/packages/agent/daemon/runtime/codex_appserver_acceptance.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

126 lines
3.8 KiB
Go

package agentruntime
import (
"errors"
"strings"
)
const codexProviderTurnIDSourceTurnStartResponse = "turn_start_response"
func codexProviderAcceptanceDiagnostics(
providerSessionID string,
providerTurnID string,
failureReason string,
) *ProviderAcceptanceDiagnostics {
providerSessionID = strings.TrimSpace(providerSessionID)
providerTurnID = strings.TrimSpace(providerTurnID)
diagnostics := &ProviderAcceptanceDiagnostics{
Status: string(DispatchDispositionOutcomeUnknown),
ProviderSessionIDPresent: providerSessionID != "",
ProviderTurnIDPresent: providerTurnID != "",
ProviderTurnIDSource: codexProviderTurnIDSourceTurnStartResponse,
FailureReason: strings.TrimSpace(failureReason),
}
if providerSessionID != "" && providerTurnID != "" {
diagnostics.Status = string(DispatchDispositionApplied)
}
return diagnostics
}
func codexProviderAcceptanceMissingIdentityReason(providerSessionID, providerTurnID string) string {
hasSessionID := strings.TrimSpace(providerSessionID) != ""
hasTurnID := strings.TrimSpace(providerTurnID) != ""
switch {
case !hasSessionID && !hasTurnID:
return "missing_provider_session_id_and_provider_turn_id"
case !hasSessionID:
return "missing_provider_session_id"
default:
return "missing_provider_turn_id"
}
}
func reportCodexDispatchFailure(report ProviderDispatchSink, err error) {
if report == nil {
return
}
disposition := DispatchDispositionOutcomeUnknown
var callErr *acpCallError
if errors.As(err, &callErr) {
disposition = DispatchDispositionRejected
}
report(ProviderDispatchResult{Disposition: disposition})
}
func reportCodexAppliedWithoutProviderTurn(report ProviderDispatchSink) {
if report != nil {
report(ProviderDispatchResult{
Disposition: DispatchDispositionAppliedWithoutProviderTurn,
})
}
}
func reportCodexProviderTurnAccepted(
report ProviderDispatchSink,
providerSessionID string,
providerTurnID string,
) {
if report == nil {
return
}
providerSessionID = strings.TrimSpace(providerSessionID)
providerTurnID = strings.TrimSpace(providerTurnID)
if providerSessionID == "" || providerTurnID == "" {
report(ProviderDispatchResult{
Disposition: DispatchDispositionOutcomeUnknown,
AcceptanceDiagnostics: codexProviderAcceptanceDiagnostics(
providerSessionID,
providerTurnID,
codexProviderAcceptanceMissingIdentityReason(providerSessionID, providerTurnID),
),
})
return
}
report(ProviderDispatchResult{
Disposition: DispatchDispositionApplied,
AcceptanceDiagnostics: codexProviderAcceptanceDiagnostics(providerSessionID, providerTurnID, ""),
Acceptance: &ProviderAcceptanceReceipt{
Source: AcceptanceSourceTurnStartResponse,
ProviderSessionID: providerSessionID,
ProviderTurnID: providerTurnID,
},
})
}
func (options codexTurnExecOptions) confirmProviderTurnAcceptance(
providerSessionID string,
providerTurnID string,
) error {
if options.acceptProviderTurn == nil {
reportCodexProviderTurnAccepted(
options.reportDispatch,
providerSessionID,
providerTurnID,
)
return nil
}
providerSessionID = strings.TrimSpace(providerSessionID)
providerTurnID = strings.TrimSpace(providerTurnID)
if providerSessionID == "" || providerTurnID == "" {
options.report(ProviderDispatchResult{
Disposition: DispatchDispositionOutcomeUnknown,
AcceptanceDiagnostics: codexProviderAcceptanceDiagnostics(
providerSessionID,
providerTurnID,
codexProviderAcceptanceMissingIdentityReason(providerSessionID, providerTurnID),
),
})
return errors.New("codex provider turn acceptance omitted identity")
}
return options.acceptProviderTurn(ProviderAcceptanceReceipt{
Source: AcceptanceSourceTurnStartResponse,
ProviderSessionID: providerSessionID,
ProviderTurnID: providerTurnID,
})
}