From 89f6a737b966949d5ce82af8561e773140843532 Mon Sep 17 00:00:00 2001 From: sherlock Date: Sat, 5 Sep 2026 12:01:33 +0530 Subject: [PATCH 1/2] fix(providers): accept structured custom models across fork drivers --- .../src/provider/Drivers/CopilotSettings.ts | 7 +- .../provider/Drivers/StandardAcpCliDriver.ts | 3 +- .../provider/Layers/StandardAcpCliProvider.ts | 3 +- .../src/provider/customModelSettings.test.ts | 76 +++++++++++++++++++ packages/contracts/src/settings.test.ts | 10 +++ packages/contracts/src/settings.ts | 24 +++--- 6 files changed, 108 insertions(+), 15 deletions(-) create mode 100644 apps/server/src/provider/customModelSettings.test.ts diff --git a/apps/server/src/provider/Drivers/CopilotSettings.ts b/apps/server/src/provider/Drivers/CopilotSettings.ts index 6b7cc594daaa..60ea53b199ae 100644 --- a/apps/server/src/provider/Drivers/CopilotSettings.ts +++ b/apps/server/src/provider/Drivers/CopilotSettings.ts @@ -1,3 +1,4 @@ +import { CustomModelSetting } from "@t3tools/contracts"; /** * CopilotSettings — local typed config schema for the GitHub Copilot driver. * @@ -13,7 +14,7 @@ * - `binaryPath` — Path to the Copilot CLI binary; empty defaults to * the bundled CLI (see `copilotCliPath.ts`). * - `configDir` — Optional override for the Copilot config dir. - * - `customModels` — User-added model slugs. + * - `customModels` — User-added model slugs, names, and capability descriptors. */ import * as Effect from "effect/Effect"; import * as Schema from "effect/Schema"; @@ -22,6 +23,8 @@ export const CopilotSettings = Schema.Struct({ enabled: Schema.Boolean.pipe(Schema.withDecodingDefault(Effect.succeed(true))), binaryPath: Schema.Trim.pipe(Schema.withDecodingDefault(Effect.succeed(""))), configDir: Schema.Trim.pipe(Schema.withDecodingDefault(Effect.succeed(""))), - customModels: Schema.Array(Schema.String).pipe(Schema.withDecodingDefault(Effect.succeed([]))), + customModels: Schema.Array(CustomModelSetting).pipe( + Schema.withDecodingDefault(Effect.succeed([])), + ), }); export type CopilotSettings = typeof CopilotSettings.Type; diff --git a/apps/server/src/provider/Drivers/StandardAcpCliDriver.ts b/apps/server/src/provider/Drivers/StandardAcpCliDriver.ts index 3ab367045ed4..cef94c3bdf51 100644 --- a/apps/server/src/provider/Drivers/StandardAcpCliDriver.ts +++ b/apps/server/src/provider/Drivers/StandardAcpCliDriver.ts @@ -1,3 +1,4 @@ +import type { CustomModelSetting } from "@t3tools/contracts"; import { type ProviderDriverKind, type ServerProvider, @@ -46,7 +47,7 @@ export interface StandardAcpCliSettings { readonly enabled: boolean; readonly binaryPath: string; readonly arguments?: string; - readonly customModels: ReadonlyArray; + readonly customModels: ReadonlyArray; } export type StandardAcpCliDriverEnv = diff --git a/apps/server/src/provider/Layers/StandardAcpCliProvider.ts b/apps/server/src/provider/Layers/StandardAcpCliProvider.ts index 5fe39243c8a0..82e4b6b34afe 100644 --- a/apps/server/src/provider/Layers/StandardAcpCliProvider.ts +++ b/apps/server/src/provider/Layers/StandardAcpCliProvider.ts @@ -1,3 +1,4 @@ +import type { CustomModelSetting } from "@t3tools/contracts"; import type { ModelCapabilities, ProviderDriverKind, @@ -44,7 +45,7 @@ export interface StandardAcpCliProviderConfig { readonly command: string; readonly args?: ReadonlyArray; readonly enabled: boolean; - readonly customModels: ReadonlyArray; + readonly customModels: ReadonlyArray; readonly environment: NodeJS.ProcessEnv; readonly setupHint: string; readonly missingCommandMessage: string; diff --git a/apps/server/src/provider/customModelSettings.test.ts b/apps/server/src/provider/customModelSettings.test.ts new file mode 100644 index 000000000000..f948ace0fe45 --- /dev/null +++ b/apps/server/src/provider/customModelSettings.test.ts @@ -0,0 +1,76 @@ +import { describe, expect, it } from "@effect/vitest"; +import * as Schema from "effect/Schema"; +import * as Effect from "effect/Effect"; +import { ProviderDriverKind } from "@t3tools/contracts"; +import { BUILT_IN_DRIVERS } from "./builtInDrivers.ts"; +import { CopilotSettings } from "./Drivers/CopilotSettings.ts"; +import { makePendingCopilotProvider } from "./Layers/CopilotProvider.ts"; +import { buildInitialStandardAcpCliProviderSnapshot } from "./Layers/StandardAcpCliProvider.ts"; + +const capabilities = { + optionDescriptors: [ + { + id: "reasoningEffort", + label: "Reasoning", + type: "select", + options: [{ id: "high", label: "High" }], + }, + ], +} as const; +const namedModel = { slug: "custom-preview", name: "Custom preview", capabilities }; +const customModels = ["legacy-model", namedModel]; + +const decodeCopilotSettings = Schema.decodeUnknownSync(CopilotSettings); +const driverCases: Array<{ + kind: string; + defaults: unknown; + decode: (input: unknown) => unknown; + encode: (input: unknown) => unknown; +}> = []; +for (const driver of BUILT_IN_DRIVERS) { + driverCases.push({ + kind: driver.driverKind, + defaults: driver.defaultConfig(), + decode: Schema.decodeUnknownSync(driver.configSchema), + encode: Schema.encodeUnknownSync(driver.configSchema), + }); +} + +describe("built-in driver custom model settings", () => { + it.each(driverCases)( + "$kind accepts the model editor's structured entries alongside legacy strings", + ({ defaults, decode, encode }) => { + const decoded = decode(Object.assign({}, defaults, { customModels })); + expect(decoded).toMatchObject({ customModels }); + expect(encode(decoded)).toMatchObject({ + customModels, + }); + }, + ); + + it("preserves custom names and capabilities in the Copilot model snapshot", () => { + const settings = decodeCopilotSettings({ customModels }); + const models = makePendingCopilotProvider(settings).models; + expect(models).toContainEqual({ ...namedModel, isCustom: true }); + expect(models.find((model) => model.slug === "legacy-model")?.name).toBe("legacy-model"); + }); + + it.effect("preserves custom names and capabilities in the shared ACP model snapshot", () => + Effect.gen(function* () { + const snapshot = yield* buildInitialStandardAcpCliProviderSnapshot({ + provider: ProviderDriverKind.make("acp"), + displayName: "ACP Agent", + command: "unused", + enabled: false, + customModels, + environment: {}, + setupHint: "Configure ACP", + missingCommandMessage: "Unavailable", + }); + expect(snapshot.models).toContainEqual({ ...namedModel, isCustom: true }); + expect(snapshot.models.find((model) => model.slug === "legacy-model")?.name).toBe( + "legacy-model", + ); + }), + ); +}); diff --git a/packages/contracts/src/settings.test.ts b/packages/contracts/src/settings.test.ts index 3942d1249ee3..f259a865f961 100644 --- a/packages/contracts/src/settings.test.ts +++ b/packages/contracts/src/settings.test.ts @@ -97,6 +97,16 @@ describe("custom model settings", () => { ]); }); + it.each(Object.keys(DEFAULT_SERVER_SETTINGS.providers))( + "round-trips named models and option descriptors in %s settings and patches", + (driver) => { + const customModels = ["legacy-model", { slug: "named", name: "Named model", capabilities }]; + const input = { providers: { [driver]: { customModels } } }; + expect(encodeServerSettings(decodeServerSettings(input))).toMatchObject(input); + expect(decodeServerSettingsPatch(input)).toMatchObject(input); + }, + ); + it("accepts entries at the settings patch boundary", () => { expect( decodeServerSettingsPatch({ diff --git a/packages/contracts/src/settings.ts b/packages/contracts/src/settings.ts index 1dac9e54d271..2f2cc5d6424d 100644 --- a/packages/contracts/src/settings.ts +++ b/packages/contracts/src/settings.ts @@ -772,7 +772,7 @@ export const DroidSettings = makeProviderSettingsSchema( providerSettingsForm: { placeholder: "droid", clearWhenEmpty: "omit" }, }), ), - customModels: Schema.Array(Schema.String).pipe( + customModels: Schema.Array(CustomModelSetting).pipe( Schema.withDecodingDefault(Effect.succeed([])), Schema.annotateKey({ providerSettingsForm: { hidden: true } }), ), @@ -807,7 +807,7 @@ export const AmpSettings = makeProviderSettingsSchema( }, }), ), - customModels: Schema.Array(Schema.String).pipe( + customModels: Schema.Array(CustomModelSetting).pipe( Schema.withDecodingDefault(Effect.succeed([])), Schema.annotateKey({ providerSettingsForm: { hidden: true } }), ), @@ -840,7 +840,7 @@ export const CopilotSettings = makeProviderSettingsSchema( providerSettingsForm: { placeholder: "~/.copilot", clearWhenEmpty: "omit" }, }), ), - customModels: Schema.Array(Schema.String).pipe( + customModels: Schema.Array(CustomModelSetting).pipe( Schema.withDecodingDefault(Effect.succeed([])), Schema.annotateKey({ providerSettingsForm: { hidden: true } }), ), @@ -872,7 +872,7 @@ export const GeminiCliSettings = makeProviderSettingsSchema( providerSettingsForm: { placeholder: "~/.gemini", clearWhenEmpty: "omit" }, }), ), - customModels: Schema.Array(Schema.String).pipe( + customModels: Schema.Array(CustomModelSetting).pipe( Schema.withDecodingDefault(Effect.succeed([])), Schema.annotateKey({ providerSettingsForm: { hidden: true } }), ), @@ -907,7 +907,7 @@ export const KiloSettings = makeProviderSettingsSchema( }, }), ), - customModels: Schema.Array(Schema.String).pipe( + customModels: Schema.Array(CustomModelSetting).pipe( Schema.withDecodingDefault(Effect.succeed([])), Schema.annotateKey({ providerSettingsForm: { hidden: true } }), ), @@ -938,7 +938,7 @@ function makeAcpCliProviderSettingsSchema(input: { }, }), ), - customModels: Schema.Array(Schema.String).pipe( + customModels: Schema.Array(CustomModelSetting).pipe( Schema.withDecodingDefault(Effect.succeed([])), Schema.annotateKey({ providerSettingsForm: { hidden: true } }), ), @@ -998,7 +998,7 @@ export const AcpSettings = makeProviderSettingsSchema( }, }), ), - customModels: Schema.Array(Schema.String).pipe( + customModels: Schema.Array(CustomModelSetting).pipe( Schema.withDecodingDefault(Effect.succeed([])), Schema.annotateKey({ providerSettingsForm: { hidden: true } }), ), @@ -1009,7 +1009,9 @@ export type AcpSettings = typeof AcpSettings.Type; export const GenericProviderSettings = Schema.Struct({ enabled: Schema.Boolean.pipe(Schema.withDecodingDefault(Effect.succeed(true))), - customModels: Schema.Array(Schema.String).pipe(Schema.withDecodingDefault(Effect.succeed([]))), + customModels: Schema.Array(CustomModelSetting).pipe( + Schema.withDecodingDefault(Effect.succeed([])), + ), binaryPath: TrimmedString.pipe(Schema.withDecodingDefault(Effect.succeed(""))), configDir: TrimmedString.pipe(Schema.withDecodingDefault(Effect.succeed(""))), }); @@ -1356,7 +1358,7 @@ const GenericProviderSettingsPatch = Schema.Struct({ enabled: Schema.optionalKey(Schema.Boolean), binaryPath: Schema.optionalKey(Schema.String), configDir: Schema.optionalKey(Schema.String), - customModels: Schema.optionalKey(Schema.Array(Schema.String)), + customModels: Schema.optionalKey(Schema.Array(CustomModelSetting)), }); const CursorSettingsPatch = Schema.Struct({ @@ -1393,13 +1395,13 @@ const OpenCodeSettingsPatch = Schema.Struct({ const DroidSettingsPatch = Schema.Struct({ enabled: Schema.optionalKey(Schema.Boolean), binaryPath: Schema.optionalKey(TrimmedString), - customModels: Schema.optionalKey(Schema.Array(Schema.String)), + customModels: Schema.optionalKey(Schema.Array(CustomModelSetting)), }); const OhMyPiSettingsPatch = Schema.Struct({ enabled: Schema.optionalKey(Schema.Boolean), binaryPath: Schema.optionalKey(TrimmedString), - customModels: Schema.optionalKey(Schema.Array(Schema.String)), + customModels: Schema.optionalKey(Schema.Array(CustomModelSetting)), }); export const ServerSettingsPatch = Schema.Struct({ From f9504cf425c8865e701d29c028502b1cdfdee50d Mon Sep 17 00:00:00 2001 From: sherlock Date: Sat, 5 Sep 2026 12:08:18 +0530 Subject: [PATCH 2/2] fix(copilot): load SDK and resolve default CLI under native Node --- .../src/provider/CopilotSdkImport.test.ts | 30 +++++++++++++++++++ .../provider/Layers/CopilotAdapter.test.ts | 6 ++-- .../src/provider/Layers/CopilotAdapter.ts | 8 ++--- .../src/provider/Layers/CopilotProvider.ts | 9 ++++-- .../provider/Layers/copilotCliPath.test.ts | 16 ++++++++++ .../src/provider/Layers/copilotCliPath.ts | 5 ++++ patches/@github__copilot-sdk@0.1.32.patch | 23 ++++++++++++++ pnpm-lock.yaml | 5 ++-- pnpm-workspace.yaml | 1 + 9 files changed, 91 insertions(+), 12 deletions(-) create mode 100644 apps/server/src/provider/CopilotSdkImport.test.ts create mode 100644 patches/@github__copilot-sdk@0.1.32.patch diff --git a/apps/server/src/provider/CopilotSdkImport.test.ts b/apps/server/src/provider/CopilotSdkImport.test.ts new file mode 100644 index 000000000000..906c09a64bb8 --- /dev/null +++ b/apps/server/src/provider/CopilotSdkImport.test.ts @@ -0,0 +1,30 @@ +import * as NodeServices from "@effect/platform-node/NodeServices"; +import { expect, it } from "@effect/vitest"; +import { HostProcessExecutablePath } from "@t3tools/shared/hostProcess"; +import * as Effect from "effect/Effect"; +import * as Path from "effect/Path"; +import * as ChildProcess from "effect/unstable/process/ChildProcess"; +import * as ChildProcessSpawner from "effect/unstable/process/ChildProcessSpawner"; + +it.effect("loads the Copilot SDK with native Node ESM resolution", () => + Effect.gen(function* () { + const path = yield* Path.Path; + const spawner = yield* ChildProcessSpawner.ChildProcessSpawner; + const executable = yield* HostProcessExecutablePath; + const cwd = yield* path.fromFileUrl(new URL("../../", import.meta.url)); + // A transformed Vitest import accepts extensionless dependencies that Node + // rejects when the real provider dynamically imports this package. + const output = yield* spawner.string( + ChildProcess.make( + executable, + [ + "--input-type=module", + "-e", + 'import { CopilotClient } from "@github/copilot-sdk"; if (typeof CopilotClient !== "function") throw new Error("Missing CopilotClient"); process.stdout.write("copilot-sdk-loaded");', + ], + { cwd }, + ), + ); + expect(output).toBe("copilot-sdk-loaded"); + }).pipe(Effect.provide(NodeServices.layer)), +); diff --git a/apps/server/src/provider/Layers/CopilotAdapter.test.ts b/apps/server/src/provider/Layers/CopilotAdapter.test.ts index 1ec73f700479..71999ccff103 100644 --- a/apps/server/src/provider/Layers/CopilotAdapter.test.ts +++ b/apps/server/src/provider/Layers/CopilotAdapter.test.ts @@ -144,8 +144,7 @@ modeLayer("CopilotAdapterLive interaction mode", (it) => { NodeAssert.equal(adapter.capabilities.supportsConversationRollback, false); }), ); - // Skip: @github/copilot-sdk has broken ESM resolution (vscode-jsonrpc/node) in CI - it.effect.skip("switches the Copilot session mode when interactionMode changes", () => + it.effect("switches the Copilot session mode when interactionMode changes", () => Effect.gen(function* () { modeSession.modeSetImpl.mockClear(); modeSession.sendImpl.mockClear(); @@ -193,8 +192,7 @@ const planLayer = it.layer( ); planLayer("CopilotAdapterLive proposed plan events", (it) => { - // Skip: @github/copilot-sdk has broken ESM resolution (vscode-jsonrpc/node) in CI - it.effect.skip("emits a proposed-plan completion event from Copilot plan updates", () => + it.effect("emits a proposed-plan completion event from Copilot plan updates", () => Effect.gen(function* () { planSession.modeSetImpl.mockClear(); planSession.planReadImpl.mockReset(); diff --git a/apps/server/src/provider/Layers/CopilotAdapter.ts b/apps/server/src/provider/Layers/CopilotAdapter.ts index 1b9568207458..65bf1ea39cc2 100644 --- a/apps/server/src/provider/Layers/CopilotAdapter.ts +++ b/apps/server/src/provider/Layers/CopilotAdapter.ts @@ -82,7 +82,7 @@ import { recordTurnUsage, type CopilotTurnTrackingState, } from "./copilotTurnTracking.ts"; -import { resolveBundledCopilotCliPath, withSanitizedCopilotDesktopEnv } from "./copilotCliPath.ts"; +import { resolveCopilotSdkCliPath, withSanitizedCopilotDesktopEnv } from "./copilotCliPath.ts"; import { CopilotAdapter, type CopilotAdapterShape } from "../Services/CopilotAdapter.ts"; import { toMessage } from "../toMessage.ts"; import type { @@ -1361,7 +1361,7 @@ export const makeCopilotAdapter = Effect.fn("makeCopilotAdapter")(function* ( }); } const settingsBinaryPath = copilotSettings.binaryPath.trim(); - const cliPath = settingsBinaryPath || resolveBundledCopilotCliPath(); + const cliPath = resolveCopilotSdkCliPath(settingsBinaryPath); const configDir = trimToUndefined(copilotSettings.configDir); const resumeSessionId = extractResumeSessionId(input.resumeCursor); const clientOptions: CopilotClientOptions = { @@ -1813,7 +1813,7 @@ export async function fetchCopilotModels(overrideCliPath?: string): Promise | null> { try { const { CopilotClient } = await import("@github/copilot-sdk"); - const cliPath = overrideCliPath?.trim() || resolveBundledCopilotCliPath(); + const cliPath = resolveCopilotSdkCliPath(overrideCliPath); const client = new CopilotClient({ ...(cliPath ? { cliPath } : {}), logLevel: "error", @@ -1850,7 +1850,7 @@ export async function fetchCopilotUsage(overrideCliPath?: string): Promise<{ }> { try { const { CopilotClient } = await import("@github/copilot-sdk"); - const cliPath = overrideCliPath?.trim() || resolveBundledCopilotCliPath(); + const cliPath = resolveCopilotSdkCliPath(overrideCliPath); const client = new CopilotClient({ ...(cliPath ? { cliPath } : {}), logLevel: "error", diff --git a/apps/server/src/provider/Layers/CopilotProvider.ts b/apps/server/src/provider/Layers/CopilotProvider.ts index 1c9bb8fe6cb9..290f2d683fd0 100644 --- a/apps/server/src/provider/Layers/CopilotProvider.ts +++ b/apps/server/src/provider/Layers/CopilotProvider.ts @@ -33,7 +33,11 @@ import { spawnAndCollect, type ServerProviderDraft, } from "../providerSnapshot.ts"; -import { resolveBundledCopilotCliPath, withSanitizedCopilotDesktopEnv } from "./copilotCliPath.ts"; +import { + resolveBundledCopilotCliPath, + resolveCopilotSdkCliPath, + withSanitizedCopilotDesktopEnv, +} from "./copilotCliPath.ts"; import type { CopilotSettings } from "../Drivers/CopilotSettings.ts"; const PROVIDER = ProviderDriverKind.make("copilot"); @@ -121,8 +125,9 @@ const probeCopilotAuth = (binaryPath: string | undefined): Effect.Effect => { const { CopilotClient } = await import("@github/copilot-sdk"); + const cliPath = resolveCopilotSdkCliPath(binaryPath); const client = new CopilotClient({ - ...(binaryPath ? { cliPath: binaryPath } : {}), + ...(cliPath ? { cliPath } : {}), logLevel: "error", }); try { diff --git a/apps/server/src/provider/Layers/copilotCliPath.test.ts b/apps/server/src/provider/Layers/copilotCliPath.test.ts index 691b9a957169..af0b88d6d00a 100644 --- a/apps/server/src/provider/Layers/copilotCliPath.test.ts +++ b/apps/server/src/provider/Layers/copilotCliPath.test.ts @@ -2,6 +2,7 @@ import { describe, expect, it } from "vite-plus/test"; import { resolveBundledCopilotCliPathFrom, + resolveCopilotSdkCliPath, withSanitizedCopilotDesktopEnv, } from "./copilotCliPath.ts"; @@ -94,3 +95,18 @@ describe("withSanitizedCopilotDesktopEnv", () => { } }); }); + +describe("resolveCopilotSdkCliPath", () => { + it("uses bundled SDK resolution for default command names", () => { + const bundled = resolveCopilotSdkCliPath(); + for (const value of ["", "copilot", " copilot ", "copilot.exe", "copilot.cmd", "copilot.bat"]) { + expect(resolveCopilotSdkCliPath(value)).toBe(bundled); + } + expect(bundled).not.toBe("copilot"); + }); + + it("preserves explicit configured executable paths", () => { + expect(resolveCopilotSdkCliPath(" /custom/copilot ")).toBe("/custom/copilot"); + expect(resolveCopilotSdkCliPath("./copilot")).toBe("./copilot"); + }); +}); diff --git a/apps/server/src/provider/Layers/copilotCliPath.ts b/apps/server/src/provider/Layers/copilotCliPath.ts index a1eeb878d762..37ec3f9fe5ad 100644 --- a/apps/server/src/provider/Layers/copilotCliPath.ts +++ b/apps/server/src/provider/Layers/copilotCliPath.ts @@ -216,3 +216,8 @@ export function resolveBundledCopilotCliPath(): string | undefined { ...(sdkEntrypoint ? { sdkEntrypoint } : {}), }); } + +/** SDK cliPath is a filesystem path, not a command to search on PATH. */ +export function resolveCopilotSdkCliPath(value?: string): string | undefined { + return normalizeCopilotCliPathOverride(value) ?? resolveBundledCopilotCliPath(); +} diff --git a/patches/@github__copilot-sdk@0.1.32.patch b/patches/@github__copilot-sdk@0.1.32.patch new file mode 100644 index 000000000000..09afb9819834 --- /dev/null +++ b/patches/@github__copilot-sdk@0.1.32.patch @@ -0,0 +1,23 @@ +diff --git a/dist/session.d.ts b/dist/session.d.ts +index b7aac8651be0936a27428260a9358b8bb0ecdcfd..3d1e43b758b1b4da3fd13ad7a07bbc971cb7df41 100644 +--- a/dist/session.d.ts ++++ b/dist/session.d.ts +@@ -2,7 +2,7 @@ + * Copilot Session - represents a single conversation session with the Copilot CLI. + * @module session + */ +-import type { MessageConnection } from "vscode-jsonrpc/node"; ++import type { MessageConnection } from "vscode-jsonrpc/node.js"; + import { createSessionRpc } from "./generated/rpc.js"; + import type { MessageOptions, PermissionHandler, PermissionRequestResult, SessionEvent, SessionEventHandler, SessionEventType, SessionHooks, Tool, ToolHandler, TypedSessionEventHandler, UserInputHandler, UserInputResponse } from "./types.js"; + /** Assistant message event - the final response from the assistant. */ +diff --git a/dist/session.js b/dist/session.js +index 1b92b458d7ebe6555be516dad26b1abf40efc64e..ae64f5d7e2cc6d4a41f70d42e3529ff3945c0446 100644 +--- a/dist/session.js ++++ b/dist/session.js +@@ -1,4 +1,4 @@ +-import { ConnectionError, ResponseError } from "vscode-jsonrpc/node"; ++import { ConnectionError, ResponseError } from "vscode-jsonrpc/node.js"; + import { createSessionRpc } from "./generated/rpc.js"; + class CopilotSession { + /** diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c9a2712318c1..0bfc515ab45d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -91,6 +91,7 @@ patchedDependencies: '@effect/vitest@4.0.0-beta.103': a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b '@expo/metro-config@57.0.12': 96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2 '@ff-labs/fff-node@0.9.4': ab9ff544009e1891cfe3930105862d3699007f38922a79f3c98d90018deca368 + '@github/copilot-sdk@0.1.32': fda37620d052aa4a96436b0f7fd4964ce7d4826142f09352daf1a2e59226e6e3 '@legendapp/list@3.3.5': 03ec41339cd915ecb9a774a6b90cc2197c29038f7db67c4d2e55cd3971e5be43 '@pierre/diffs@1.3.0-beta.10': c087c47b657c44ddce2b0ec8237d675086414134e91829c4b4edd009ec86893e '@react-native-ai/apple@0.12.0': 2d09870c2848d185cb05b53ed823a46e12dba519324d8dd8e584e28731990f9d @@ -507,7 +508,7 @@ importers: version: 1.0.2 '@github/copilot-sdk': specifier: ^0.1.32 - version: 0.1.32 + version: 0.1.32(patch_hash=fda37620d052aa4a96436b0f7fd4964ce7d4826142f09352daf1a2e59226e6e3) '@opencode-ai/sdk': specifier: ^1.3.15 version: 1.15.13 @@ -12991,7 +12992,7 @@ snapshots: '@github/copilot-linux-x64@1.0.2': optional: true - '@github/copilot-sdk@0.1.32': + '@github/copilot-sdk@0.1.32(patch_hash=fda37620d052aa4a96436b0f7fd4964ce7d4826142f09352daf1a2e59226e6e3)': dependencies: '@github/copilot': 1.0.2 vscode-jsonrpc: 8.2.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ee1bd25547f6..23f3ca009205 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -161,6 +161,7 @@ patchedDependencies: "@effect/vitest@4.0.0-beta.103": patches/@effect__vitest@4.0.0-beta.103.patch "@expo/metro-config@57.0.12": patches/@expo__metro-config@57.0.12.patch "@ff-labs/fff-node@0.9.4": patches/@ff-labs__fff-node@0.9.4.patch + "@github/copilot-sdk@0.1.32": patches/@github__copilot-sdk@0.1.32.patch "@legendapp/list@3.3.5": patches/@legendapp__list@3.3.5.patch "@pierre/diffs@1.3.0-beta.10": patches/@pierre%2Fdiffs@1.3.0-beta.10.patch "@react-native-ai/apple@0.12.0": patches/@react-native-ai__apple@0.12.0.patch