/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. *--------------------------------------------------------------------------------------------*/ import { CopilotClient } from "./client.js"; import type { CopilotSession } from "./session.js"; import { defaultJoinSessionPermissionHandler, type PermissionHandler, type ResumeSessionConfig, } from "./types.js"; export type JoinSessionConfig = Omit & { onPermissionRequest?: PermissionHandler; }; /** * Joins the current foreground session. * * @param config - Configuration to add to the session * @returns A promise that resolves with the joined session * * @example * ```typescript * import { joinSession } from "@github/copilot-sdk/extension"; * * const session = await joinSession({ tools: [myTool] }); * ``` */ export async function joinSession(config: JoinSessionConfig = {}): Promise { const sessionId = process.env.SESSION_ID; if (!sessionId) { throw new Error( "joinSession() is intended for extensions running as child processes of the Copilot CLI." ); } const client = new CopilotClient({ _internalConnection: { kind: "parent-process" } }); return client.resumeSession(sessionId, { ...config, onPermissionRequest: config.onPermissionRequest ?? defaultJoinSessionPermissionHandler, suppressResumeEvent: config.suppressResumeEvent ?? true, }); }