@jeffreycao/copilot-api 1.12.9 → 1.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,6 @@
1
- import { E as ensurePaths, b as mergeConfigWithDefaults } from "./config-B71_S_hQ.js";
2
- import { L as state, a as setupGitHubToken, c as cacheVSCodeVersion, i as setupCopilotToken, l as cacheVsCodeDeviceId, o as cacheMacMachineId, s as cacheModels, t as logUser, u as cacheVsCodeSessionId, w as initOpencodeVersion } from "./token-fpw8tAQS.js";
1
+ import { T as ensurePaths, v as listEnabledProviders, y as mergeConfigWithDefaults } from "./config-DODTXsGz.js";
2
+ import { R as state, T as initOpencodeVersion, c as cacheVSCodeVersion, i as setupCopilotToken, l as cacheVsCodeDeviceId, o as cacheMacMachineId, s as cacheModels, t as logUser, u as cacheVsCodeSessionId, v as readGitHubToken } from "./token-DigcCxDR.js";
3
+ import { r as runProviderSetup } from "./auth-BDHOrS4c.js";
3
4
  import { defineCommand } from "citty";
4
5
  import consola from "consola";
5
6
  import { getProxyForUrl } from "proxy-from-env";
@@ -111,6 +112,66 @@ function generateEnvScript(envVars, commandToRun = "") {
111
112
  }
112
113
  //#endregion
113
114
  //#region src/start.ts
115
+ async function setupCopilotMode(githubToken, fromCli, serverUrl, claudeCode) {
116
+ state.githubToken = githubToken;
117
+ consola.info(fromCli ? "Using provided GitHub token" : "Using GitHub token from local file");
118
+ await logUser();
119
+ await cacheVSCodeVersion();
120
+ cacheMacMachineId();
121
+ cacheVsCodeSessionId();
122
+ await cacheVsCodeDeviceId();
123
+ await setupCopilotToken();
124
+ await cacheModels();
125
+ consola.info(`Available models: \n${state.models?.data.map((model) => `- ${model.id}`).join("\n")}`);
126
+ if (claudeCode) await runClaudeCode(serverUrl);
127
+ }
128
+ async function runClaudeCode(serverUrl) {
129
+ consola.log("\n💡 Tip: The --claude-code flag simply generates a clipboard command for launching Claude Code. \nAll models remain fully accessible without this flag, just configure the model ID directly in your settings.json file.");
130
+ invariant(state.models, "Models should be loaded by now");
131
+ const selectedModel = await consola.prompt("Select a model to use with Claude Code", {
132
+ type: "select",
133
+ options: state.models.data.map((model) => model.id)
134
+ });
135
+ const command = generateEnvScript({
136
+ ANTHROPIC_BASE_URL: serverUrl,
137
+ ANTHROPIC_AUTH_TOKEN: "dummy",
138
+ ANTHROPIC_MODEL: selectedModel,
139
+ ANTHROPIC_DEFAULT_SONNET_MODEL: selectedModel,
140
+ ANTHROPIC_DEFAULT_HAIKU_MODEL: await consola.prompt("Select a small model to use with Claude Code", {
141
+ type: "select",
142
+ options: state.models.data.map((model) => model.id)
143
+ }),
144
+ DISABLE_NON_ESSENTIAL_MODEL_CALLS: "1",
145
+ CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1",
146
+ CLAUDE_CODE_ATTRIBUTION_HEADER: "0",
147
+ CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION: "false",
148
+ CLAUDE_CODE_DISABLE_TERMINAL_TITLE: "true",
149
+ CLAUDE_CODE_ENABLE_AWAY_SUMMARY: "0"
150
+ }, "claude");
151
+ try {
152
+ clipboard.writeSync(command);
153
+ consola.success("Copied Claude Code command to clipboard!");
154
+ } catch {
155
+ consola.warn("Failed to copy to clipboard. Here is the Claude Code command:");
156
+ consola.log(command);
157
+ }
158
+ }
159
+ async function setupProviderMode(serverUrl, claudeCode) {
160
+ const enabledProviders = listEnabledProviders();
161
+ if (enabledProviders.length > 0) {
162
+ consola.info(`Using enabled providers: ${enabledProviders.join(", ")}`);
163
+ return;
164
+ }
165
+ consola.info("No enabled providers found. Setting one up...");
166
+ await runProviderSetup();
167
+ if (state.githubToken) {
168
+ await setupCopilotMode(state.githubToken, false, serverUrl, claudeCode);
169
+ return;
170
+ }
171
+ const providersAfterSetup = listEnabledProviders();
172
+ if (providersAfterSetup.length === 0) throw new Error("Failed to configure any provider. Run `copilot-api auth login` to set one up.");
173
+ consola.info(`Configured providers: ${providersAfterSetup.join(", ")}`);
174
+ }
114
175
  async function runServer(options) {
115
176
  (await import("./tls-BniQ6Rel.js")).enableSystemCACompat();
116
177
  consola.options.throttle = 0;
@@ -122,60 +183,17 @@ async function runServer(options) {
122
183
  consola.level = 5;
123
184
  consola.info("Verbose logging enabled");
124
185
  }
125
- state.accountType = options.accountType;
126
- if (options.accountType !== "individual") consola.info(`Using ${options.accountType} plan GitHub account`);
127
186
  state.manualApprove = options.manual;
128
187
  state.rateLimitSeconds = options.rateLimit;
129
188
  state.rateLimitWait = options.rateLimitWait;
130
189
  state.showToken = options.showToken;
131
190
  await ensurePaths();
132
- await cacheVSCodeVersion();
133
- cacheMacMachineId();
134
- cacheVsCodeSessionId();
135
- await cacheVsCodeDeviceId();
136
- if (options.githubToken) {
137
- state.githubToken = options.githubToken;
138
- consola.info("Using provided GitHub token");
139
- await logUser();
140
- } else await setupGitHubToken();
141
- await setupCopilotToken();
142
- await cacheModels();
143
- consola.info(`Available models: \n${state.models?.data.map((model) => `- ${model.id}`).join("\n")}`);
144
191
  const serverUrl = `http://localhost:${options.port}`;
145
- if (options.claudeCode) {
146
- consola.log("\n💡 Tip: The --claude-code flag simply generates a clipboard command for launching Claude Code. \nAll models remain fully accessible without this flag, just configure the model ID directly in your settings.json file.");
147
- invariant(state.models, "Models should be loaded by now");
148
- const selectedModel = await consola.prompt("Select a model to use with Claude Code", {
149
- type: "select",
150
- options: state.models.data.map((model) => model.id)
151
- });
152
- const command = generateEnvScript({
153
- ANTHROPIC_BASE_URL: serverUrl,
154
- ANTHROPIC_AUTH_TOKEN: "dummy",
155
- ANTHROPIC_MODEL: selectedModel,
156
- ANTHROPIC_DEFAULT_SONNET_MODEL: selectedModel,
157
- ANTHROPIC_DEFAULT_HAIKU_MODEL: await consola.prompt("Select a small model to use with Claude Code", {
158
- type: "select",
159
- options: state.models.data.map((model) => model.id)
160
- }),
161
- DISABLE_NON_ESSENTIAL_MODEL_CALLS: "1",
162
- CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1",
163
- CLAUDE_CODE_ATTRIBUTION_HEADER: "0",
164
- CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION: "false",
165
- CLAUDE_CODE_DISABLE_TERMINAL_TITLE: "true",
166
- CLAUDE_CODE_ENABLE_AWAY_SUMMARY: "0",
167
- CLAUDE_PLUGIN_ENABLE_QUESTION_RULES: "true"
168
- }, "claude");
169
- try {
170
- clipboard.writeSync(command);
171
- consola.success("Copied Claude Code command to clipboard!");
172
- } catch {
173
- consola.warn("Failed to copy to clipboard. Here is the Claude Code command:");
174
- consola.log(command);
175
- }
176
- }
192
+ const githubToken = options.githubToken || await readGitHubToken();
193
+ if (githubToken) await setupCopilotMode(githubToken, Boolean(options.githubToken), serverUrl, options.claudeCode);
194
+ else await setupProviderMode(serverUrl, options.claudeCode);
177
195
  consola.box(`🌐 Usage Viewer: ${serverUrl}/usage-viewer?endpoint=${serverUrl}/usage`);
178
- const { server } = await import("./server-34rnRg4k.js");
196
+ const { server } = await import("./server-s_0_JChu.js");
179
197
  serve({
180
198
  fetch: server.fetch,
181
199
  port: options.port,
@@ -200,12 +218,6 @@ const start = defineCommand({
200
218
  default: false,
201
219
  description: "Enable verbose logging"
202
220
  },
203
- "account-type": {
204
- alias: "a",
205
- type: "string",
206
- default: "individual",
207
- description: "Account type to use (individual, business, enterprise)"
208
- },
209
221
  manual: {
210
222
  type: "boolean",
211
223
  default: false,
@@ -250,7 +262,6 @@ const start = defineCommand({
250
262
  return runServer({
251
263
  port: Number.parseInt(args.port, 10),
252
264
  verbose: args.verbose,
253
- accountType: args["account-type"],
254
265
  manual: args.manual,
255
266
  rateLimit,
256
267
  rateLimitWait: args.wait,
@@ -264,4 +275,4 @@ const start = defineCommand({
264
275
  //#endregion
265
276
  export { start };
266
277
 
267
- //# sourceMappingURL=start-8y_02ZHG.js.map
278
+ //# sourceMappingURL=start-DxOR_R2Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-DxOR_R2Y.js","names":["get"],"sources":["../src/lib/proxy.ts","../src/lib/shell.ts","../src/start.ts"],"sourcesContent":["import consola from \"consola\"\nimport { getProxyForUrl } from \"proxy-from-env\"\nimport { Agent, ProxyAgent, setGlobalDispatcher, type Dispatcher } from \"undici\"\n\nlet proxyEnvDispatcher: Dispatcher | undefined\n\nexport function getProxyEnvDispatcher(): Dispatcher | undefined {\n return proxyEnvDispatcher\n}\n\nexport function initProxyFromEnv(): void {\n try {\n const direct = new Agent()\n const proxies = new Map<string, ProxyAgent>()\n\n // We only need a minimal dispatcher that implements `dispatch` at runtime.\n // Typing the object as `Dispatcher` forces TypeScript to require many\n // additional methods. Instead, keep a plain object and cast when passing\n // to `setGlobalDispatcher`.\n const dispatcher = {\n dispatch(\n options: Dispatcher.DispatchOptions,\n handler: Dispatcher.DispatchHandler,\n ) {\n try {\n const origin =\n typeof options.origin === \"string\" ?\n new URL(options.origin)\n : (options.origin as URL)\n const get = getProxyForUrl as unknown as (\n u: string,\n ) => string | undefined\n const raw = get(origin.toString())\n const proxyUrl = raw && raw.length > 0 ? raw : undefined\n if (!proxyUrl) {\n consola.debug(`HTTP proxy bypass: ${origin.hostname}`)\n return (direct as unknown as Dispatcher).dispatch(options, handler)\n }\n let agent = proxies.get(proxyUrl)\n if (!agent) {\n agent = new ProxyAgent(proxyUrl)\n proxies.set(proxyUrl, agent)\n }\n let label = proxyUrl\n try {\n const u = new URL(proxyUrl)\n label = `${u.protocol}//${u.host}`\n } catch {\n /* noop */\n }\n consola.debug(`HTTP proxy route: ${origin.hostname} via ${label}`)\n return (agent as unknown as Dispatcher).dispatch(options, handler)\n } catch {\n return (direct as unknown as Dispatcher).dispatch(options, handler)\n }\n },\n close() {\n return direct.close()\n },\n destroy() {\n return direct.destroy()\n },\n }\n\n proxyEnvDispatcher = dispatcher as unknown as Dispatcher\n\n if (typeof Bun !== \"undefined\") {\n consola.debug(\"WebSocket proxy configured from environment (per-URL)\")\n return\n }\n\n setGlobalDispatcher(proxyEnvDispatcher)\n consola.debug(\"HTTP proxy configured from environment (per-URL)\")\n } catch (err) {\n consola.debug(\"Proxy setup skipped:\", err)\n }\n}\n","import { execSync } from \"node:child_process\"\nimport process from \"node:process\"\n\ntype ShellName = \"bash\" | \"zsh\" | \"fish\" | \"powershell\" | \"cmd\" | \"sh\"\ntype EnvVars = Record<string, string | undefined>\n\nfunction getShell(): ShellName {\n const { platform, ppid, env } = process\n\n if (platform === \"win32\") {\n try {\n const command = `wmic process get ParentProcessId,Name | findstr \"${ppid}\"`\n const parentProcess = execSync(command, { stdio: \"pipe\" }).toString()\n\n if (parentProcess.toLowerCase().includes(\"powershell.exe\")) {\n return \"powershell\"\n }\n } catch {\n return \"cmd\"\n }\n\n return \"cmd\"\n } else {\n const shellPath = env.SHELL\n if (shellPath) {\n if (shellPath.endsWith(\"zsh\")) return \"zsh\"\n if (shellPath.endsWith(\"fish\")) return \"fish\"\n if (shellPath.endsWith(\"bash\")) return \"bash\"\n }\n\n return \"sh\"\n }\n}\n\n/**\n * Generates a copy-pasteable script to set multiple environment variables\n * and run a subsequent command.\n * @param {EnvVars} envVars - An object of environment variables to set.\n * @param {string} commandToRun - The command to run after setting the variables.\n * @returns {string} The formatted script string.\n */\nexport function generateEnvScript(\n envVars: EnvVars,\n commandToRun: string = \"\",\n): string {\n const shell = getShell()\n const filteredEnvVars = Object.entries(envVars).filter(\n ([, value]) => value !== undefined,\n ) as Array<[string, string]>\n\n let commandBlock: string\n\n switch (shell) {\n case \"powershell\": {\n commandBlock = filteredEnvVars\n .map(([key, value]) => `$env:${key} = ${value}`)\n .join(\"; \")\n break\n }\n case \"cmd\": {\n commandBlock = filteredEnvVars\n .map(([key, value]) => `set ${key}=${value}`)\n .join(\" & \")\n break\n }\n case \"fish\": {\n commandBlock = filteredEnvVars\n .map(([key, value]) => `set -gx ${key} ${value}`)\n .join(\"; \")\n break\n }\n default: {\n // bash, zsh, sh\n const assignments = filteredEnvVars\n .map(([key, value]) => `${key}=${value}`)\n .join(\" \")\n commandBlock = filteredEnvVars.length > 0 ? `export ${assignments}` : \"\"\n break\n }\n }\n\n if (commandBlock && commandToRun) {\n const separator = shell === \"cmd\" ? \" & \" : \" && \"\n return `${commandBlock}${separator}${commandToRun}`\n }\n\n return commandBlock || commandToRun\n}\n","#!/usr/bin/env node\n\nimport { defineCommand } from \"citty\"\nimport clipboard from \"clipboardy\"\nimport consola from \"consola\"\nimport { serve, type ServerHandler } from \"srvx\"\nimport invariant from \"tiny-invariant\"\n\nimport { runProviderSetup } from \"./auth\"\nimport { listEnabledProviders, mergeConfigWithDefaults } from \"./lib/config\"\nimport { readGitHubToken } from \"./lib/credential-store\"\nimport { initOpencodeVersion } from \"./lib/opencode\"\nimport { ensurePaths } from \"./lib/paths\"\nimport { initProxyFromEnv } from \"./lib/proxy\"\nimport { generateEnvScript } from \"./lib/shell\"\nimport { state } from \"./lib/state\"\nimport { logUser, setupCopilotToken } from \"./lib/token\"\nimport {\n cacheMacMachineId,\n cacheModels,\n cacheVSCodeVersion,\n cacheVsCodeSessionId,\n cacheVsCodeDeviceId,\n} from \"./lib/utils\"\n\ninterface RunServerOptions {\n port: number\n verbose: boolean\n manual: boolean\n rateLimit?: number\n rateLimitWait: boolean\n githubToken?: string\n claudeCode: boolean\n showToken: boolean\n proxyEnv: boolean\n}\n\nasync function setupCopilotMode(\n githubToken: string,\n fromCli: boolean,\n serverUrl: string,\n claudeCode: boolean,\n): Promise<void> {\n state.githubToken = githubToken\n consola.info(\n fromCli ?\n \"Using provided GitHub token\"\n : \"Using GitHub token from local file\",\n )\n\n await logUser()\n\n await cacheVSCodeVersion()\n cacheMacMachineId()\n cacheVsCodeSessionId()\n await cacheVsCodeDeviceId()\n\n await setupCopilotToken()\n await cacheModels()\n\n consola.info(\n `Available models: \\n${state.models?.data.map((model) => `- ${model.id}`).join(\"\\n\")}`,\n )\n\n if (claudeCode) {\n await runClaudeCode(serverUrl)\n }\n}\n\nasync function runClaudeCode(serverUrl: string): Promise<void> {\n consola.log(\n \"\\n💡 Tip: The --claude-code flag simply generates a clipboard command for launching Claude Code. \\n\"\n + \"All models remain fully accessible without this flag, just configure the model ID directly in your settings.json file.\",\n )\n\n invariant(state.models, \"Models should be loaded by now\")\n\n const selectedModel = await consola.prompt(\n \"Select a model to use with Claude Code\",\n {\n type: \"select\",\n options: state.models.data.map((model) => model.id),\n },\n )\n\n const selectedSmallModel = await consola.prompt(\n \"Select a small model to use with Claude Code\",\n {\n type: \"select\",\n options: state.models.data.map((model) => model.id),\n },\n )\n\n const command = generateEnvScript(\n {\n ANTHROPIC_BASE_URL: serverUrl,\n ANTHROPIC_AUTH_TOKEN: \"dummy\",\n ANTHROPIC_MODEL: selectedModel,\n ANTHROPIC_DEFAULT_SONNET_MODEL: selectedModel,\n ANTHROPIC_DEFAULT_HAIKU_MODEL: selectedSmallModel,\n DISABLE_NON_ESSENTIAL_MODEL_CALLS: \"1\",\n CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: \"1\",\n CLAUDE_CODE_ATTRIBUTION_HEADER: \"0\",\n CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION: \"false\",\n CLAUDE_CODE_DISABLE_TERMINAL_TITLE: \"true\",\n CLAUDE_CODE_ENABLE_AWAY_SUMMARY: \"0\",\n },\n \"claude\",\n )\n\n try {\n clipboard.writeSync(command)\n consola.success(\"Copied Claude Code command to clipboard!\")\n } catch {\n consola.warn(\n \"Failed to copy to clipboard. Here is the Claude Code command:\",\n )\n consola.log(command)\n }\n}\n\nasync function setupProviderMode(\n serverUrl: string,\n claudeCode: boolean,\n): Promise<void> {\n const enabledProviders = listEnabledProviders()\n\n if (enabledProviders.length > 0) {\n consola.info(`Using enabled providers: ${enabledProviders.join(\", \")}`)\n return\n }\n\n consola.info(\"No enabled providers found. Setting one up...\")\n await runProviderSetup()\n\n if (state.githubToken) {\n await setupCopilotMode(state.githubToken, false, serverUrl, claudeCode)\n return\n }\n\n const providersAfterSetup = listEnabledProviders()\n if (providersAfterSetup.length === 0) {\n throw new Error(\n \"Failed to configure any provider. Run `copilot-api auth login` to set one up.\",\n )\n }\n consola.info(`Configured providers: ${providersAfterSetup.join(\", \")}`)\n}\n\nexport async function runServer(options: RunServerOptions): Promise<void> {\n const tlsModule = await import(\"./lib/tls\")\n tlsModule.enableSystemCACompat()\n\n consola.options.throttle = 0\n\n mergeConfigWithDefaults()\n\n await initOpencodeVersion()\n\n if (options.proxyEnv) {\n initProxyFromEnv()\n }\n\n state.verbose = options.verbose\n if (options.verbose) {\n consola.level = 5\n consola.info(\"Verbose logging enabled\")\n }\n\n state.manualApprove = options.manual\n state.rateLimitSeconds = options.rateLimit\n state.rateLimitWait = options.rateLimitWait\n state.showToken = options.showToken\n\n await ensurePaths()\n\n const serverUrl = `http://localhost:${options.port}`\n\n const githubToken = options.githubToken || (await readGitHubToken())\n if (githubToken) {\n await setupCopilotMode(\n githubToken,\n Boolean(options.githubToken),\n serverUrl,\n options.claudeCode,\n )\n } else {\n await setupProviderMode(serverUrl, options.claudeCode)\n }\n\n consola.box(\n `🌐 Usage Viewer: ${serverUrl}/usage-viewer?endpoint=${serverUrl}/usage`,\n )\n\n const { server } = await import(\"./server\")\n\n serve({\n fetch: server.fetch as ServerHandler,\n port: options.port,\n bun: {\n idleTimeout: 0,\n },\n })\n}\n\nexport const start = defineCommand({\n meta: {\n name: \"start\",\n description: \"Start the Copilot API server\",\n },\n args: {\n port: {\n alias: \"p\",\n type: \"string\",\n default: \"4141\",\n description: \"Port to listen on\",\n },\n verbose: {\n alias: \"v\",\n type: \"boolean\",\n default: false,\n description: \"Enable verbose logging\",\n },\n manual: {\n type: \"boolean\",\n default: false,\n description: \"Enable manual request approval\",\n },\n \"rate-limit\": {\n alias: \"r\",\n type: \"string\",\n description: \"Rate limit in seconds between requests\",\n },\n wait: {\n alias: \"w\",\n type: \"boolean\",\n default: false,\n description:\n \"Wait instead of error when rate limit is hit. Has no effect if rate limit is not set\",\n },\n \"github-token\": {\n alias: \"g\",\n type: \"string\",\n description:\n \"Provide GitHub token directly (must be generated using the `auth` subcommand)\",\n },\n \"claude-code\": {\n alias: \"c\",\n type: \"boolean\",\n default: false,\n description:\n \"Generate a command to launch Claude Code with Copilot API config\",\n },\n \"show-token\": {\n type: \"boolean\",\n default: false,\n description: \"Show GitHub and Copilot tokens on fetch and refresh\",\n },\n \"proxy-env\": {\n type: \"boolean\",\n default: false,\n description: \"Initialize proxy from environment variables\",\n },\n },\n run({ args }) {\n const rateLimitRaw = args[\"rate-limit\"]\n const rateLimit =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n rateLimitRaw === undefined ? undefined : Number.parseInt(rateLimitRaw, 10)\n\n return runServer({\n port: Number.parseInt(args.port, 10),\n verbose: args.verbose,\n manual: args.manual,\n rateLimit,\n rateLimitWait: args.wait,\n githubToken: args[\"github-token\"],\n claudeCode: args[\"claude-code\"],\n showToken: args[\"show-token\"],\n proxyEnv: args[\"proxy-env\"],\n })\n },\n})\n"],"mappings":"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"}