@nomomon/ai-sdk-provider-github-copilot 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +123 -0
- package/dist/index.cjs +613 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +143 -0
- package/dist/index.d.ts +143 -0
- package/dist/index.js +604 -0
- package/dist/index.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/convert-to-copilot-messages.ts","../src/map-copilot-finish-reason.ts","../src/github-copilot-language-model.ts","../src/github-copilot-provider.ts"],"names":["CopilotClientClass"],"mappings":"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","file":"index.js","sourcesContent":["import { APICallError, LoadAPIKeyError } from \"@ai-sdk/provider\";\n\nconst AUTH_ERROR_PATTERNS = [\n \"not authenticated\",\n \"authentication\",\n \"unauthorized\",\n \"auth failed\",\n \"please login\",\n \"login required\",\n \"invalid token\",\n \"token expired\",\n];\n\n/**\n * Creates an authentication error for Copilot SDK failures.\n */\nexport function createAuthenticationError(options: { message?: string }): LoadAPIKeyError {\n return new LoadAPIKeyError({\n message:\n options.message ??\n \"Authentication failed. Please ensure Copilot CLI is properly authenticated.\",\n });\n}\n\n/**\n * Creates an API call error for Copilot SDK failures.\n */\nexport function createAPICallError(options: {\n message: string;\n statusCode?: number;\n cause?: unknown;\n isRetryable?: boolean;\n}): APICallError {\n return new APICallError({\n message: options.message,\n url: \"copilot://session\",\n requestBodyValues: {},\n statusCode: options.statusCode,\n cause: options.cause,\n isRetryable: options.isRetryable ?? false,\n });\n}\n\n/**\n * Checks if an error represents an authentication failure.\n */\nexport function isAuthenticationError(error: unknown): boolean {\n const message =\n error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();\n return AUTH_ERROR_PATTERNS.some((pattern) => message.includes(pattern));\n}\n\n/**\n * Checks if an error is an AbortError.\n */\nexport function isAbortError(error: unknown): boolean {\n if (error && typeof error === \"object\") {\n const e = error as { name?: unknown; code?: unknown };\n if (typeof e.name === \"string\" && e.name === \"AbortError\") return true;\n if (typeof e.code === \"string\" && e.code.toUpperCase() === \"ABORT_ERR\") return true;\n }\n return false;\n}\n\n/**\n * Handles Copilot SDK errors and maps them to AI SDK error types.\n */\nexport function handleCopilotError(error: unknown, _context?: { promptExcerpt?: string }): never {\n if (isAbortError(error)) {\n throw error;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n\n if (isAuthenticationError(error)) {\n throw createAuthenticationError({ message });\n }\n\n throw createAPICallError({\n message: message || \"GitHub Copilot SDK error\",\n cause: error,\n isRetryable: false,\n });\n}\n","import type { LanguageModelV3Prompt } from \"@ai-sdk/provider\";\n\nconst IMAGE_URL_WARNING =\n \"Image URLs are not supported by this provider; supply file paths as attachments.\";\nconst IMAGE_BASE64_WARNING =\n \"Base64/image data URLs require file paths. Write to temp file and pass path, or use attachments with path.\";\n\nexport interface ConvertedCopilotMessage {\n prompt: string;\n systemMessage?: string;\n attachments?: Array<{\n type: \"file\" | \"directory\";\n path: string;\n displayName?: string;\n }>;\n warnings?: string[];\n}\n\n/**\n * Converts AI SDK prompt format to Copilot SDK message format.\n * Handles system prompts, user messages, assistant responses, and tool results.\n */\nexport function convertToCopilotMessages(prompt: LanguageModelV3Prompt): ConvertedCopilotMessage {\n const messages: string[] = [];\n const warnings: string[] = [];\n let systemMessage: string | undefined;\n const attachments: Array<{ type: \"file\" | \"directory\"; path: string; displayName?: string }> = [];\n\n for (const message of prompt) {\n switch (message.role) {\n case \"system\": {\n const content = message.content;\n systemMessage = typeof content === \"string\" ? content : extractTextFromParts(content);\n if (systemMessage?.trim()) {\n messages.push(`System: ${systemMessage}`);\n }\n break;\n }\n\n case \"user\": {\n const content = message.content;\n if (typeof content === \"string\") {\n messages.push(`User: ${content}`);\n } else {\n const textParts: string[] = [];\n for (const part of content) {\n if (part.type === \"text\") {\n textParts.push(part.text);\n } else if (part.type === \"file\") {\n const fileInfo = extractFileAttachment(part);\n if (fileInfo.path) {\n attachments.push({\n type: \"file\",\n path: fileInfo.path,\n displayName: fileInfo.displayName,\n });\n } else if (fileInfo.warning) {\n warnings.push(fileInfo.warning);\n }\n } else if (part.type === \"image\") {\n warnings.push(IMAGE_BASE64_WARNING);\n }\n }\n if (textParts.length > 0) {\n messages.push(`User: ${textParts.join(\"\\n\")}`);\n }\n }\n break;\n }\n\n case \"assistant\": {\n const content = message.content;\n if (typeof content === \"string\") {\n messages.push(`Assistant: ${content}`);\n } else {\n const textParts: string[] = [];\n for (const part of content) {\n if (part.type === \"text\") {\n textParts.push(part.text);\n } else if (part.type === \"tool-call\") {\n textParts.push(`[Tool call: ${part.toolName}]`);\n } else if (part.type === \"reasoning\") {\n textParts.push(`[Reasoning: ${part.text}]`);\n }\n }\n if (textParts.length > 0) {\n messages.push(`Assistant: ${textParts.join(\"\\n\")}`);\n }\n }\n break;\n }\n\n case \"tool\": {\n for (const part of message.content) {\n if (part.type === \"tool-result\") {\n const output = part.output;\n let resultStr: string;\n if (output.type === \"text\" || output.type === \"error-text\") {\n resultStr = output.value;\n } else if (output.type === \"json\" || output.type === \"error-json\") {\n resultStr = JSON.stringify(output.value);\n } else if (output.type === \"execution-denied\") {\n resultStr = `[Execution denied${output.reason ? `: ${output.reason}` : \"\"}]`;\n } else if (output.type === \"content\") {\n resultStr = output.value\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\\n\");\n } else {\n resultStr = \"[Unknown output type]\";\n }\n const isError = output.type === \"error-text\" || output.type === \"error-json\";\n messages.push(\n `Tool result (${part.toolName}): ${isError ? \"Error: \" : \"\"}${resultStr}`,\n );\n }\n }\n break;\n }\n }\n }\n\n const promptText = messages.join(\"\\n\\n\");\n\n return {\n prompt: promptText,\n systemMessage: systemMessage?.trim() || undefined,\n attachments: attachments.length > 0 ? attachments : undefined,\n warnings: warnings.length > 0 ? warnings : undefined,\n };\n}\n\nfunction extractTextFromParts(content: Array<{ type: string; text?: string }>): string {\n return content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\\n\");\n}\n\nfunction extractFileAttachment(part: {\n type: string;\n filename?: string;\n data?: unknown;\n mediaType?: string;\n}): { path?: string; displayName?: string; warning?: string } {\n if (part.type !== \"file\") return {};\n\n const data = part.data;\n if (typeof data === \"string\") {\n if (data.startsWith(\"http://\") || data.startsWith(\"https://\")) {\n return { warning: IMAGE_URL_WARNING };\n }\n if (data.startsWith(\"file://\")) {\n return { path: data.slice(7), displayName: part.filename };\n }\n if (data.startsWith(\"/\") || /^[A-Za-z]:[\\\\/]/.test(data)) {\n return { path: data, displayName: part.filename };\n }\n return { warning: IMAGE_BASE64_WARNING };\n }\n\n return {};\n}\n","import type { LanguageModelV3FinishReason } from \"@ai-sdk/provider\";\n\n/**\n * Maps Copilot session completion to AI SDK finish reason.\n * Copilot doesn't expose a direct finish_reason; we infer from context.\n */\nexport function mapCopilotFinishReason(): LanguageModelV3FinishReason {\n return {\n unified: \"stop\",\n raw: undefined,\n };\n}\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3StreamPart,\n LanguageModelV3Usage,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport { generateId } from \"@ai-sdk/provider-utils\";\nimport type { CopilotClient } from \"@github/copilot-sdk\";\nimport { convertToCopilotMessages } from \"./convert-to-copilot-messages.js\";\nimport { handleCopilotError, isAbortError } from \"./errors.js\";\nimport { mapCopilotFinishReason } from \"./map-copilot-finish-reason.js\";\nimport type { GitHubCopilotSettings } from \"./types.js\";\n\nexport interface GitHubCopilotLanguageModelOptions {\n modelId: string;\n settings: GitHubCopilotSettings;\n getClient: () => CopilotClient;\n}\n\nfunction createEmptyUsage(): LanguageModelV3Usage {\n return {\n inputTokens: { total: 0, noCache: 0, cacheRead: 0, cacheWrite: 0 },\n outputTokens: { total: 0, text: undefined, reasoning: undefined },\n raw: undefined,\n };\n}\n\nfunction convertCopilotUsage(event: {\n inputTokens?: number;\n outputTokens?: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n}): LanguageModelV3Usage {\n const inputTokens = event.inputTokens ?? 0;\n const outputTokens = event.outputTokens ?? 0;\n const cacheRead = event.cacheReadTokens ?? 0;\n const cacheWrite = 0;\n\n return {\n inputTokens: {\n total: inputTokens + cacheRead + cacheWrite,\n noCache: inputTokens,\n cacheRead,\n cacheWrite,\n },\n outputTokens: {\n total: outputTokens,\n text: outputTokens,\n reasoning: undefined,\n },\n raw: event as unknown as import(\"@ai-sdk/provider\").JSONObject,\n };\n}\n\n/**\n * Language model implementation for GitHub Copilot SDK.\n */\nexport class GitHubCopilotLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = \"v3\" as const;\n readonly defaultObjectGenerationMode = \"json\" as const;\n readonly supportsImageUrls = false;\n readonly supportedUrls: Record<string, RegExp[]> = {};\n readonly supportsStructuredOutputs = false;\n\n readonly modelId: string;\n readonly settings: GitHubCopilotSettings;\n private readonly getClient: () => CopilotClient;\n\n constructor(options: GitHubCopilotLanguageModelOptions) {\n this.modelId = options.modelId;\n this.settings = options.settings;\n this.getClient = options.getClient;\n }\n\n get provider(): string {\n return \"github-copilot\";\n }\n\n private getEffectiveModel(): string {\n return this.settings.model ?? this.modelId;\n }\n\n private buildSessionConfig(streaming: boolean) {\n return {\n model: this.getEffectiveModel(),\n sessionId: this.settings.sessionId,\n streaming,\n systemMessage: this.settings.systemMessage,\n tools: this.settings.tools,\n provider: this.settings.provider,\n workingDirectory: this.settings.workingDirectory,\n };\n }\n\n private generateWarnings(options: LanguageModelV3CallOptions): SharedV3Warning[] {\n const warnings: SharedV3Warning[] = [];\n const unsupported: string[] = [];\n\n if (options.temperature !== undefined) unsupported.push(\"temperature\");\n if (options.topP !== undefined) unsupported.push(\"topP\");\n if (options.topK !== undefined) unsupported.push(\"topK\");\n if (options.presencePenalty !== undefined) unsupported.push(\"presencePenalty\");\n if (options.frequencyPenalty !== undefined) unsupported.push(\"frequencyPenalty\");\n if (options.stopSequences?.length) unsupported.push(\"stopSequences\");\n if (options.seed !== undefined) unsupported.push(\"seed\");\n\n for (const param of unsupported) {\n warnings.push({\n type: \"unsupported\",\n feature: param,\n details: `GitHub Copilot SDK does not support the ${param} parameter. It will be ignored.`,\n });\n }\n\n return warnings;\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<Awaited<ReturnType<LanguageModelV3[\"doGenerate\"]>>> {\n const {\n prompt,\n systemMessage,\n attachments,\n warnings: msgWarnings,\n } = convertToCopilotMessages(options.prompt);\n\n const warnings: SharedV3Warning[] = [\n ...this.generateWarnings(options),\n ...(msgWarnings?.map((m) => ({ type: \"other\" as const, message: m })) ?? []),\n ];\n\n const client = this.getClient();\n if (client.getState() !== \"connected\") {\n await client.start();\n }\n\n const session = await client.createSession({\n ...this.buildSessionConfig(false),\n systemMessage: systemMessage\n ? { mode: \"append\", content: systemMessage }\n : this.settings.systemMessage,\n });\n\n let abortListener: (() => void) | undefined;\n if (options.abortSignal) {\n abortListener = () => session.abort();\n options.abortSignal.addEventListener(\"abort\", abortListener, { once: true });\n }\n\n try {\n const result = await session.sendAndWait(\n { prompt, attachments },\n options.abortSignal?.aborted ? 0 : 60_000,\n );\n\n const content: LanguageModelV3Content[] = [];\n const text = result?.data?.content ?? \"\";\n if (text) {\n content.push({ type: \"text\", text });\n }\n\n let usage: LanguageModelV3Usage = createEmptyUsage();\n const usageEvent = (result as { data?: { usage?: unknown } })?.data?.usage;\n if (usageEvent && typeof usageEvent === \"object\") {\n usage = convertCopilotUsage(usageEvent as Parameters<typeof convertCopilotUsage>[0]);\n }\n\n const finishReason: LanguageModelV3FinishReason = mapCopilotFinishReason();\n\n return {\n content,\n finishReason,\n usage,\n warnings,\n request: { body: { prompt, attachments } },\n response: {\n id: generateId(),\n timestamp: new Date(),\n modelId: this.modelId,\n },\n };\n } catch (error: unknown) {\n if (isAbortError(error)) {\n throw options.abortSignal?.aborted ? options.abortSignal.reason : error;\n }\n handleCopilotError(error, { promptExcerpt: prompt.substring(0, 200) });\n return undefined as never;\n } finally {\n if (options.abortSignal && abortListener) {\n options.abortSignal.removeEventListener(\"abort\", abortListener);\n }\n try {\n await session.destroy();\n } catch {\n // Ignore destroy errors\n }\n }\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<Awaited<ReturnType<LanguageModelV3[\"doStream\"]>>> {\n const {\n prompt,\n systemMessage,\n attachments,\n warnings: msgWarnings,\n } = convertToCopilotMessages(options.prompt);\n\n const warnings: SharedV3Warning[] = [\n ...this.generateWarnings(options),\n ...(msgWarnings?.map((m) => ({ type: \"other\" as const, message: m })) ?? []),\n ];\n\n const client = this.getClient();\n if (client.getState() !== \"connected\") {\n await client.start();\n }\n\n const session = await client.createSession({\n ...this.buildSessionConfig(true),\n systemMessage: systemMessage\n ? { mode: \"append\", content: systemMessage }\n : this.settings.systemMessage,\n });\n\n const abortController = new AbortController();\n let abortListener: (() => void) | undefined;\n if (options.abortSignal?.aborted) {\n abortController.abort(options.abortSignal.reason);\n } else if (options.abortSignal) {\n abortListener = () => {\n session.abort();\n abortController.abort(options.abortSignal?.reason);\n };\n options.abortSignal.addEventListener(\"abort\", abortListener, { once: true });\n }\n\n const stream = new ReadableStream<LanguageModelV3StreamPart>({\n start: async (controller) => {\n let textPartId: string | undefined;\n let usage: LanguageModelV3Usage = createEmptyUsage();\n const toolStates = new Map<\n string,\n { name: string; inputStarted: boolean; callEmitted: boolean }\n >();\n\n try {\n controller.enqueue({ type: \"stream-start\", warnings });\n\n session.on((event) => {\n if (event.type === \"assistant.message_delta\") {\n const delta = (event as { data?: { deltaContent?: string } }).data?.deltaContent;\n if (delta) {\n if (!textPartId) {\n textPartId = generateId();\n controller.enqueue({ type: \"text-start\", id: textPartId });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textPartId,\n delta,\n });\n }\n } else if (event.type === \"assistant.reasoning_delta\") {\n const delta = (event as { data?: { deltaContent?: string } }).data?.deltaContent;\n if (delta) {\n const reasoningId = generateId();\n controller.enqueue({ type: \"reasoning-start\", id: reasoningId });\n controller.enqueue({\n type: \"reasoning-delta\",\n id: reasoningId,\n delta,\n });\n controller.enqueue({ type: \"reasoning-end\", id: reasoningId });\n }\n } else if (event.type === \"assistant.message\") {\n const data = (event as { data?: { content?: string; toolRequests?: unknown[] } })\n .data;\n if (data?.content && !textPartId) {\n textPartId = generateId();\n controller.enqueue({ type: \"text-start\", id: textPartId });\n controller.enqueue({\n type: \"text-delta\",\n id: textPartId,\n delta: data.content,\n });\n controller.enqueue({ type: \"text-end\", id: textPartId });\n }\n if (data?.toolRequests?.length) {\n for (const tr of data.toolRequests as Array<{\n toolCallId: string;\n name: string;\n arguments?: unknown;\n }>) {\n const toolId = tr.toolCallId;\n let state = toolStates.get(toolId);\n if (!state) {\n state = {\n name: tr.name,\n inputStarted: false,\n callEmitted: false,\n };\n toolStates.set(toolId, state);\n }\n if (!state.inputStarted) {\n controller.enqueue({\n type: \"tool-input-start\",\n id: toolId,\n toolName: tr.name,\n providerExecuted: true,\n dynamic: true,\n });\n state.inputStarted = true;\n }\n const args = tr.arguments ?? {};\n controller.enqueue({\n type: \"tool-input-delta\",\n id: toolId,\n delta: JSON.stringify(args),\n });\n controller.enqueue({ type: \"tool-input-end\", id: toolId });\n if (!state.callEmitted) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: toolId,\n toolName: tr.name,\n input: typeof args === \"string\" ? args : JSON.stringify(args),\n providerExecuted: true,\n dynamic: true,\n });\n state.callEmitted = true;\n }\n }\n }\n } else if (event.type === \"tool.execution_start\") {\n const data = (event as { data?: { toolCallId: string; toolName: string } }).data;\n if (data) {\n const toolId = data.toolCallId;\n let state = toolStates.get(toolId);\n if (!state) {\n state = {\n name: data.toolName,\n inputStarted: true,\n callEmitted: false,\n };\n toolStates.set(toolId, state);\n }\n if (!state.callEmitted) {\n controller.enqueue({\n type: \"tool-input-start\",\n id: toolId,\n toolName: data.toolName,\n providerExecuted: true,\n dynamic: true,\n });\n controller.enqueue({ type: \"tool-input-end\", id: toolId });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: toolId,\n toolName: data.toolName,\n input: \"{}\",\n providerExecuted: true,\n dynamic: true,\n });\n state.callEmitted = true;\n }\n }\n } else if (event.type === \"tool.execution_complete\") {\n const evt = event as {\n data?: {\n toolCallId: string;\n toolName?: string;\n success: boolean;\n result?: { content?: string };\n error?: { message?: string };\n };\n };\n const data = evt.data;\n if (data) {\n const toolName = data.toolName ?? \"unknown\";\n const result =\n data.success && data.result?.content\n ? data.result.content\n : (data.error?.message ?? \"Tool execution failed\");\n controller.enqueue({\n type: \"tool-result\",\n toolCallId: data.toolCallId,\n toolName,\n result: result as NonNullable<import(\"@ai-sdk/provider\").JSONValue>,\n isError: !data.success,\n dynamic: true,\n });\n }\n } else if (event.type === \"assistant.usage\") {\n const data = (event as { data?: Parameters<typeof convertCopilotUsage>[0] }).data;\n if (data) {\n usage = convertCopilotUsage(data);\n }\n } else if (event.type === \"session.idle\") {\n if (textPartId) {\n controller.enqueue({ type: \"text-end\", id: textPartId });\n }\n controller.enqueue({\n type: \"finish\",\n finishReason: mapCopilotFinishReason(),\n usage,\n });\n controller.close();\n void session.destroy();\n } else if (event.type === \"session.error\") {\n const data = (event as { data?: { message?: string } }).data;\n controller.enqueue({\n type: \"error\",\n error: new Error(data?.message ?? \"Session error\"),\n });\n controller.close();\n void session.destroy();\n }\n });\n\n await session.send({ prompt, attachments });\n } catch (error: unknown) {\n if (isAbortError(error)) {\n controller.enqueue({\n type: \"error\",\n error: options.abortSignal?.aborted ? options.abortSignal.reason : error,\n });\n } else {\n handleCopilotError(error, { promptExcerpt: prompt.substring(0, 200) });\n }\n controller.close();\n await session.destroy();\n } finally {\n if (options.abortSignal && abortListener) {\n options.abortSignal.removeEventListener(\"abort\", abortListener);\n }\n }\n },\n cancel: () => {\n if (options.abortSignal && abortListener) {\n options.abortSignal.removeEventListener(\"abort\", abortListener);\n }\n },\n });\n\n return {\n stream: stream as ReadableStream<LanguageModelV3StreamPart>,\n request: { body: { prompt, attachments } },\n };\n }\n}\n","import type { LanguageModelV3, ProviderV3 } from \"@ai-sdk/provider\";\nimport { NoSuchModelError } from \"@ai-sdk/provider\";\nimport type { CopilotClient } from \"@github/copilot-sdk\";\nimport { CopilotClient as CopilotClientClass } from \"@github/copilot-sdk\";\nimport { GitHubCopilotLanguageModel } from \"./github-copilot-language-model.js\";\nimport type { GitHubCopilotProviderOptions, GitHubCopilotSettings } from \"./types.js\";\n\n/**\n * Supported Copilot model identifiers.\n * Use model IDs available via Copilot CLI (e.g., \"gpt-5\", \"claude-sonnet-4.5\").\n */\nexport type GitHubCopilotModelId = string;\n\n/**\n * GitHub Copilot provider interface extending ProviderV3.\n */\nexport interface GitHubCopilotProvider extends ProviderV3 {\n (modelId: GitHubCopilotModelId, settings?: GitHubCopilotSettings): LanguageModelV3;\n languageModel(modelId: GitHubCopilotModelId, settings?: GitHubCopilotSettings): LanguageModelV3;\n chat(modelId: GitHubCopilotModelId, settings?: GitHubCopilotSettings): LanguageModelV3;\n /**\n * Get the underlying CopilotClient instance for advanced lifecycle management.\n */\n getClient(): CopilotClient;\n}\n\n/**\n * Creates a GitHub Copilot provider instance.\n */\nexport function createGitHubCopilot(\n options: GitHubCopilotProviderOptions = {},\n): GitHubCopilotProvider {\n let clientInstance: CopilotClient | null = null;\n\n const getOrCreateClient = (): CopilotClient => {\n if (!clientInstance) {\n clientInstance = new CopilotClientClass(options.clientOptions ?? {});\n }\n return clientInstance;\n };\n\n const createModel = (\n modelId: GitHubCopilotModelId,\n settings: GitHubCopilotSettings = {},\n ): LanguageModelV3 => {\n const mergedSettings: GitHubCopilotSettings = {\n ...options.defaultSettings,\n ...settings,\n };\n return new GitHubCopilotLanguageModel({\n modelId,\n settings: mergedSettings,\n getClient: getOrCreateClient,\n });\n };\n\n const provider = function (modelId: GitHubCopilotModelId, settings?: GitHubCopilotSettings) {\n if (new.target) {\n throw new Error(\"The GitHub Copilot model function cannot be called with the new keyword.\");\n }\n return createModel(modelId, settings);\n };\n\n provider.languageModel = createModel;\n provider.chat = createModel;\n provider.specificationVersion = \"v3\" as const;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: \"embeddingModel\",\n });\n };\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: \"imageModel\",\n });\n };\n\n provider.getClient = getOrCreateClient;\n\n return provider as GitHubCopilotProvider;\n}\n\n/**\n * Default GitHub Copilot provider instance.\n */\nexport const githubCopilot = createGitHubCopilot();\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nomomon/ai-sdk-provider-github-copilot",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "AI SDK provider for GitHub Copilot - Use Copilot CLI via Vercel AI SDK",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ai-sdk",
|
|
7
|
+
"github-copilot",
|
|
8
|
+
"copilot-sdk",
|
|
9
|
+
"language-model",
|
|
10
|
+
"llm"
|
|
11
|
+
],
|
|
12
|
+
"homepage": "https://github.com/nomomon/ai-sdk-provider-github-copilot",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/nomomon/ai-sdk-provider-github-copilot.git"
|
|
16
|
+
},
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"type": "module",
|
|
19
|
+
"sideEffects": false,
|
|
20
|
+
"main": "./dist/index.cjs",
|
|
21
|
+
"module": "./dist/index.js",
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"exports": {
|
|
24
|
+
"./package.json": "./package.json",
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./dist/index.d.ts",
|
|
27
|
+
"import": "./dist/index.js",
|
|
28
|
+
"require": "./dist/index.cjs"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist/**/*",
|
|
33
|
+
"README.md",
|
|
34
|
+
"LICENSE"
|
|
35
|
+
],
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "tsup",
|
|
38
|
+
"clean": "rm -rf dist",
|
|
39
|
+
"dev": "tsup --watch",
|
|
40
|
+
"lint": "biome check .",
|
|
41
|
+
"format": "biome check --write .",
|
|
42
|
+
"typecheck": "tsc --noEmit",
|
|
43
|
+
"test": "vitest run",
|
|
44
|
+
"test:watch": "vitest",
|
|
45
|
+
"example:basic": "npm run build && npx tsx examples/basic-usage.ts",
|
|
46
|
+
"example:streaming": "npm run build && npx tsx examples/streaming.ts",
|
|
47
|
+
"example:tools": "npm run build && npx tsx examples/tools.ts",
|
|
48
|
+
"prepare": "lefthook install",
|
|
49
|
+
"prepublishOnly": "npm run build"
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"@ai-sdk/provider": "^3.0.0",
|
|
53
|
+
"@ai-sdk/provider-utils": "^4.0.1",
|
|
54
|
+
"@github/copilot-sdk": "^0.1.20"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@biomejs/biome": "2.3.13",
|
|
58
|
+
"@types/node": "^20.17.24",
|
|
59
|
+
"ai": "^6.0.0",
|
|
60
|
+
"lefthook": "2.0.16",
|
|
61
|
+
"tsup": "^8.5.0",
|
|
62
|
+
"typescript": "^5.6.0",
|
|
63
|
+
"vitest": "^3.2.0",
|
|
64
|
+
"zod": "^4.0.0"
|
|
65
|
+
},
|
|
66
|
+
"peerDependencies": {
|
|
67
|
+
"ai": "^6.0.0"
|
|
68
|
+
},
|
|
69
|
+
"engines": {
|
|
70
|
+
"node": ">=18"
|
|
71
|
+
}
|
|
72
|
+
}
|