diff --git a/open-sse/executors/github.ts b/open-sse/executors/github.ts index 95c8f1f762..42abe949a7 100644 --- a/open-sse/executors/github.ts +++ b/open-sse/executors/github.ts @@ -55,6 +55,19 @@ export class GithubExecutor extends BaseExecutor { ); delete modifiedBody.response_format; } + + // Strip reasoning_text / reasoning_content from assistant messages. + // GitHub Copilot converts these into Anthropic thinking blocks but cannot + // supply a valid `signature`, causing upstream 400 errors. + if (Array.isArray(modifiedBody.messages)) { + for (const msg of modifiedBody.messages) { + if (msg.role === "assistant") { + delete msg.reasoning_text; + delete msg.reasoning_content; + } + } + } + return modifiedBody; } @@ -167,6 +180,10 @@ export class GithubExecutor extends BaseExecutor { ...githubTokens, copilotToken: copilotResult.token, copilotTokenExpiresAt: copilotResult.expiresAt, + providerSpecificData: { + copilotToken: copilotResult.token, + copilotTokenExpiresAt: copilotResult.expiresAt, + }, }; } return githubTokens; @@ -179,6 +196,10 @@ export class GithubExecutor extends BaseExecutor { refreshToken: credentials.refreshToken, copilotToken: copilotResult.token, copilotTokenExpiresAt: copilotResult.expiresAt, + providerSpecificData: { + copilotToken: copilotResult.token, + copilotTokenExpiresAt: copilotResult.expiresAt, + }, }; } diff --git a/src/sse/services/tokenRefresh.ts b/src/sse/services/tokenRefresh.ts index 87231e96a9..520e2d9992 100644 --- a/src/sse/services/tokenRefresh.ts +++ b/src/sse/services/tokenRefresh.ts @@ -141,6 +141,8 @@ export async function checkAndRefreshToken(provider: string, credentials: any) { copilotToken: copilotToken.token, copilotTokenExpiresAt: copilotToken.expiresAt, }; + // Sync to top-level so buildHeaders() picks up the fresh token + updatedCredentials.copilotToken = copilotToken.token; } } }