@jeffreycao/copilot-api 1.9.12 → 1.9.14

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.
@@ -3,10 +3,11 @@ import { defineCommand } from "citty";
3
3
  import consola from "consola";
4
4
  import fs from "node:fs/promises";
5
5
  import os from "node:os";
6
+ import { fileURLToPath } from "node:url";
6
7
  //#region src/debug.ts
7
8
  async function getPackageVersion() {
8
9
  try {
9
- const packageJsonPath = new URL("../package.json", import.meta.url).pathname;
10
+ const packageJsonPath = fileURLToPath(new URL("../package.json", import.meta.url));
10
11
  return JSON.parse(await fs.readFile(packageJsonPath)).version;
11
12
  } catch {
12
13
  return "unknown";
@@ -78,4 +79,4 @@ const debug = defineCommand({
78
79
  //#endregion
79
80
  export { debug };
80
81
 
81
- //# sourceMappingURL=debug-CIXXx_bq.js.map
82
+ //# sourceMappingURL=debug-C_TBkyUw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-C_TBkyUw.js","names":[],"sources":["../src/debug.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { defineCommand } from \"citty\"\nimport consola from \"consola\"\nimport fs from \"node:fs/promises\"\nimport os from \"node:os\"\nimport { fileURLToPath } from \"node:url\"\n\nimport { PATHS } from \"./lib/paths\"\n\ninterface DebugInfo {\n version: string\n runtime: {\n name: string\n version: string\n platform: string\n arch: string\n }\n paths: {\n APP_DIR: string\n GITHUB_TOKEN_PATH: string\n }\n tokenExists: boolean\n}\n\ninterface RunDebugOptions {\n json: boolean\n}\n\nasync function getPackageVersion(): Promise<string> {\n try {\n const packageJsonPath = fileURLToPath(\n new URL(\"../package.json\", import.meta.url),\n )\n // @ts-expect-error https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v59.0.1/docs/rules/prefer-json-parse-buffer.md\n // JSON.parse() can actually parse buffers\n const packageJson = JSON.parse(await fs.readFile(packageJsonPath)) as {\n version: string\n }\n return packageJson.version\n } catch {\n return \"unknown\"\n }\n}\n\nfunction getRuntimeInfo() {\n const isBun = typeof Bun !== \"undefined\"\n\n return {\n name: isBun ? \"bun\" : \"node\",\n version: isBun ? Bun.version : process.version.slice(1),\n platform: os.platform(),\n arch: os.arch(),\n }\n}\n\nasync function checkTokenExists(): Promise<boolean> {\n try {\n const stats = await fs.stat(PATHS.GITHUB_TOKEN_PATH)\n if (!stats.isFile()) return false\n\n const content = await fs.readFile(PATHS.GITHUB_TOKEN_PATH, \"utf8\")\n return content.trim().length > 0\n } catch {\n return false\n }\n}\n\nasync function getDebugInfo(): Promise<DebugInfo> {\n const [version, tokenExists] = await Promise.all([\n getPackageVersion(),\n checkTokenExists(),\n ])\n\n return {\n version,\n runtime: getRuntimeInfo(),\n paths: {\n APP_DIR: PATHS.APP_DIR,\n GITHUB_TOKEN_PATH: PATHS.GITHUB_TOKEN_PATH,\n },\n tokenExists,\n }\n}\n\nfunction printDebugInfoPlain(info: DebugInfo): void {\n consola.info(`copilot-api debug\n\nVersion: ${info.version}\nRuntime: ${info.runtime.name} ${info.runtime.version} (${info.runtime.platform} ${info.runtime.arch})\n\nPaths:\n- APP_DIR: ${info.paths.APP_DIR}\n- GITHUB_TOKEN_PATH: ${info.paths.GITHUB_TOKEN_PATH}\n\nToken exists: ${info.tokenExists ? \"Yes\" : \"No\"}`)\n}\n\nfunction printDebugInfoJson(info: DebugInfo): void {\n console.log(JSON.stringify(info, null, 2))\n}\n\nexport async function runDebug(options: RunDebugOptions): Promise<void> {\n const debugInfo = await getDebugInfo()\n\n if (options.json) {\n printDebugInfoJson(debugInfo)\n } else {\n printDebugInfoPlain(debugInfo)\n }\n}\n\nexport const debug = defineCommand({\n meta: {\n name: \"debug\",\n description: \"Print debug information about the application\",\n },\n args: {\n json: {\n type: \"boolean\",\n default: false,\n description: \"Output debug information as JSON\",\n },\n },\n run({ args }) {\n return runDebug({\n json: args.json,\n })\n },\n})\n"],"mappings":";;;;;;;AA6BA,eAAe,oBAAqC;CAClD,IAAI;EACF,MAAM,kBAAkB,cACtB,IAAI,IAAI,mBAAmB,OAAO,KAAK,IAAI,CAC5C;EAMD,OAHoB,KAAK,MAAM,MAAM,GAAG,SAAS,gBAAgB,CAG/C,CAAC;SACb;EACN,OAAO;;;AAIX,SAAS,iBAAiB;CACxB,MAAM,QAAQ,OAAO,QAAQ;CAE7B,OAAO;EACL,MAAM,QAAQ,QAAQ;EACtB,SAAS,QAAQ,IAAI,UAAU,QAAQ,QAAQ,MAAM,EAAE;EACvD,UAAU,GAAG,UAAU;EACvB,MAAM,GAAG,MAAM;EAChB;;AAGH,eAAe,mBAAqC;CAClD,IAAI;EAEF,IAAI,EAAC,MADe,GAAG,KAAK,MAAM,kBAAkB,EACzC,QAAQ,EAAE,OAAO;EAG5B,QAAO,MADe,GAAG,SAAS,MAAM,mBAAmB,OAAO,EACnD,MAAM,CAAC,SAAS;SACzB;EACN,OAAO;;;AAIX,eAAe,eAAmC;CAChD,MAAM,CAAC,SAAS,eAAe,MAAM,QAAQ,IAAI,CAC/C,mBAAmB,EACnB,kBAAkB,CACnB,CAAC;CAEF,OAAO;EACL;EACA,SAAS,gBAAgB;EACzB,OAAO;GACL,SAAS,MAAM;GACf,mBAAmB,MAAM;GAC1B;EACD;EACD;;AAGH,SAAS,oBAAoB,MAAuB;CAClD,QAAQ,KAAK;;WAEJ,KAAK,QAAQ;WACb,KAAK,QAAQ,KAAK,GAAG,KAAK,QAAQ,QAAQ,IAAI,KAAK,QAAQ,SAAS,GAAG,KAAK,QAAQ,KAAK;;;aAGvF,KAAK,MAAM,QAAQ;uBACT,KAAK,MAAM,kBAAkB;;gBAEpC,KAAK,cAAc,QAAQ,OAAO;;AAGlD,SAAS,mBAAmB,MAAuB;CACjD,QAAQ,IAAI,KAAK,UAAU,MAAM,MAAM,EAAE,CAAC;;AAG5C,eAAsB,SAAS,SAAyC;CACtE,MAAM,YAAY,MAAM,cAAc;CAEtC,IAAI,QAAQ,MACV,mBAAmB,UAAU;MAE7B,oBAAoB,UAAU;;AAIlC,MAAa,QAAQ,cAAc;CACjC,MAAM;EACJ,MAAM;EACN,aAAa;EACd;CACD,MAAM,EACJ,MAAM;EACJ,MAAM;EACN,SAAS;EACT,aAAa;EACd,EACF;CACD,IAAI,EAAE,QAAQ;EACZ,OAAO,SAAS,EACd,MAAM,KAAK,MACZ,CAAC;;CAEL,CAAC"}
package/dist/main.js CHANGED
@@ -41,8 +41,8 @@ if (typeof args["enterprise-url"] === "string") process.env.COPILOT_API_ENTERPRI
41
41
  bindElectronFetch();
42
42
  const { auth } = await import("./auth-DEUCqXMV.js");
43
43
  const { checkUsage } = await import("./check-usage-OcW_3tEg.js");
44
- const { debug } = await import("./debug-CIXXx_bq.js");
45
- const { start } = await import("./start-C88Fy8qw.js");
44
+ const { debug } = await import("./debug-C_TBkyUw.js");
45
+ const { start } = await import("./start-DFJynp4A.js");
46
46
  await runMain(defineCommand({
47
47
  meta: {
48
48
  name: "copilot-api",
@@ -1789,6 +1789,7 @@ function handleFinish(choice, state, context) {
1789
1789
  state.contentBlockIndex++;
1790
1790
  if (!toolBlockOpen) handleReasoningOpaque(choice.delta, events, state);
1791
1791
  }
1792
+ flushDeferredContent(state, events);
1792
1793
  state.pendingMessageDelta = {
1793
1794
  type: "message_delta",
1794
1795
  delta: {
@@ -1879,13 +1880,9 @@ function handleReasoningOpaqueInToolCalls(state, events, delta) {
1879
1880
  function handleContent(delta, state, events) {
1880
1881
  if (delta.content && delta.content.length > 0) {
1881
1882
  closeThinkingBlockIfOpen(state, events);
1882
- if (isToolBlockOpen(state)) {
1883
- events.push({
1884
- type: "content_block_stop",
1885
- index: state.contentBlockIndex
1886
- });
1887
- state.contentBlockIndex++;
1888
- state.contentBlockOpen = false;
1883
+ if (isToolBlockOpen(state) || hasToolCallDelta(delta)) {
1884
+ state.deferredContent = `${state.deferredContent ?? ""}${delta.content}`;
1885
+ return;
1889
1886
  }
1890
1887
  if (!state.contentBlockOpen) {
1891
1888
  events.push({
@@ -1923,6 +1920,37 @@ function handleContent(delta, state, events) {
1923
1920
  state.thinkingBlockOpen = false;
1924
1921
  }
1925
1922
  }
1923
+ function hasToolCallDelta(delta) {
1924
+ return Boolean(delta.tool_calls && delta.tool_calls.length > 0);
1925
+ }
1926
+ function flushDeferredContent(state, events) {
1927
+ if (!state.deferredContent) return;
1928
+ if (!state.contentBlockOpen) {
1929
+ events.push({
1930
+ type: "content_block_start",
1931
+ index: state.contentBlockIndex,
1932
+ content_block: {
1933
+ type: "text",
1934
+ text: ""
1935
+ }
1936
+ });
1937
+ state.contentBlockOpen = true;
1938
+ }
1939
+ events.push({
1940
+ type: "content_block_delta",
1941
+ index: state.contentBlockIndex,
1942
+ delta: {
1943
+ type: "text_delta",
1944
+ text: state.deferredContent
1945
+ }
1946
+ }, {
1947
+ type: "content_block_stop",
1948
+ index: state.contentBlockIndex
1949
+ });
1950
+ state.deferredContent = void 0;
1951
+ state.contentBlockOpen = false;
1952
+ state.contentBlockIndex++;
1953
+ }
1926
1954
  function handleMessageStart(state, events, chunk) {
1927
1955
  if (!state.messageStartSent) {
1928
1956
  const { cachedTokens, cacheCreationTokens, inputTokens } = getOpenAIChunkUsageTokens(chunk);
@@ -4299,4 +4327,4 @@ server.route("/:provider/v1/models", providerModelRoutes);
4299
4327
  //#endregion
4300
4328
  export { server };
4301
4329
 
4302
- //# sourceMappingURL=server-XuNjMVc6.js.map
4330
+ //# sourceMappingURL=server-DkUKa2I6.js.map