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
126 lines
3.8 KiB
Go
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,
|
|
})
|
|
}
|