





















@@ -2,20 +2,38 @@ import type { Context } from "@mariozechner/pi-ai";
2233export const COPILOT_EDITOR_VERSION = "vscode/1.96.2";
44export const COPILOT_USER_AGENT = "GitHubCopilotChat/0.26.7";
5+export const COPILOT_EDITOR_PLUGIN_VERSION = "copilot-chat/0.35.0";
56export const COPILOT_GITHUB_API_VERSION = "2025-04-01";
6778function inferCopilotInitiator(messages: Context["messages"]): "agent" | "user" {
89const last = messages[messages.length - 1];
9-return last && last.role !== "user" ? "agent" : "user";
10+if (!last) {
11+return "user";
12+}
13+if (last.role === "user" && containsCopilotContentType(last.content, "tool_result")) {
14+return "agent";
15+}
16+return last.role === "user" ? "user" : "agent";
17+}
18+19+function containsCopilotContentType(value: unknown, type: string): boolean {
20+if (Array.isArray(value)) {
21+return value.some((item) => containsCopilotContentType(item, type));
22+}
23+if (!value || typeof value !== "object") {
24+return false;
25+}
26+const entry = value as { type?: unknown; content?: unknown };
27+return entry.type === type || containsCopilotContentType(entry.content, type);
1028}
11291230export function hasCopilotVisionInput(messages: Context["messages"]): boolean {
1331return messages.some((message) => {
1432if (message.role === "user" && Array.isArray(message.content)) {
15-return message.content.some((item) => item.type === "image");
33+return message.content.some((item) => containsCopilotContentType(item, "image"));
1634}
1735if (message.role === "toolResult" && Array.isArray(message.content)) {
18-return message.content.some((item) => item.type === "image");
36+return message.content.some((item) => containsCopilotContentType(item, "image"));
1937}
2038return false;
2139});
@@ -28,6 +46,7 @@ export function buildCopilotIdeHeaders(
2846): Record<string, string> {
2947return {
3048"Editor-Version": COPILOT_EDITOR_VERSION,
49+"Editor-Plugin-Version": COPILOT_EDITOR_PLUGIN_VERSION,
3150"User-Agent": COPILOT_USER_AGENT,
3251 ...(params.includeApiVersion ? { "X-Github-Api-Version": COPILOT_GITHUB_API_VERSION } : {}),
3352};
@@ -39,8 +58,9 @@ export function buildCopilotDynamicHeaders(params: {
3958}): Record<string, string> {
4059return {
4160 ...buildCopilotIdeHeaders(),
42-"X-Initiator": inferCopilotInitiator(params.messages),
43-"Openai-Intent": "conversation-edits",
61+"Copilot-Integration-Id": "vscode-chat",
62+"Openai-Organization": "github-copilot",
63+"x-initiator": inferCopilotInitiator(params.messages),
4464 ...(params.hasImages ? { "Copilot-Vision-Request": "true" } : {}),
4565};
4666}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。