Skip to content

Commit 0acaeae

Browse files
belaltaher8Copilot
andcommitted
Forward internalCorrelationIds through session create/resume
Add an internal `internalCorrelationIds` field to `SessionConfigBase` and forward it in the `session.create` and `session.resume` payloads, mirroring the existing `expAssignments` passthrough. The field is tagged `@internal` so it is stripped from the published type declarations. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 8c3ecbd commit 0acaeae

3 files changed

Lines changed: 69 additions & 0 deletions

File tree

nodejs/src/client.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1448,6 +1448,7 @@ export class CopilotClient {
14481448
remoteSession: config.remoteSession,
14491449
cloud: config.cloud,
14501450
expAssignments: config.expAssignments,
1451+
internalCorrelationIds: config.internalCorrelationIds,
14511452
});
14521453

14531454
const {
@@ -1646,6 +1647,7 @@ export class CopilotClient {
16461647
remoteSession: config.remoteSession,
16471648
openCanvases: config.openCanvases,
16481649
expAssignments: config.expAssignments,
1650+
internalCorrelationIds: config.internalCorrelationIds,
16491651
});
16501652

16511653
const { workspacePath, capabilities, openCanvases } = response as {

nodejs/src/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2165,6 +2165,9 @@ export interface SessionConfigBase {
21652165
* @internal
21662166
*/
21672167
expAssignments?: Record<string, unknown>;
2168+
2169+
/** @internal */
2170+
internalCorrelationIds?: Record<string, string>;
21682171
}
21692172

21702173
/**

nodejs/test/client.test.ts

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,70 @@ describe("CopilotClient", () => {
251251
expect(resumePayload.expAssignments).toBeUndefined();
252252
});
253253

254+
it("forwards internalCorrelationIds in session.create and session.resume", async () => {
255+
const client = new CopilotClient();
256+
await client.start();
257+
onTestFinished(() => client.forceStop());
258+
259+
const spy = vi
260+
.spyOn((client as any).connection!, "sendRequest")
261+
.mockImplementation(async (method: string, params: any) => {
262+
if (method === "session.create") return { sessionId: params.sessionId };
263+
if (method === "session.resume") return { sessionId: params.sessionId };
264+
throw new Error(`Unexpected method: ${method}`);
265+
});
266+
267+
const correlationIds = {
268+
cca_job_id: "job-123",
269+
owner_id: "1",
270+
repo_id: "2",
271+
};
272+
273+
const session = await client.createSession({
274+
onPermissionRequest: approveAll,
275+
internalCorrelationIds: correlationIds,
276+
});
277+
await client.resumeSession(session.sessionId, {
278+
onPermissionRequest: approveAll,
279+
internalCorrelationIds: correlationIds,
280+
});
281+
282+
const createPayload = spy.mock.calls.find(
283+
([method]) => method === "session.create"
284+
)![1] as any;
285+
const resumePayload = spy.mock.calls.find(
286+
([method]) => method === "session.resume"
287+
)![1] as any;
288+
expect(createPayload.internalCorrelationIds).toEqual(correlationIds);
289+
expect(resumePayload.internalCorrelationIds).toEqual(correlationIds);
290+
});
291+
292+
it("omits internalCorrelationIds from session.create and session.resume when unset", async () => {
293+
const client = new CopilotClient();
294+
await client.start();
295+
onTestFinished(() => client.forceStop());
296+
297+
const spy = vi
298+
.spyOn((client as any).connection!, "sendRequest")
299+
.mockImplementation(async (method: string, params: any) => {
300+
if (method === "session.create") return { sessionId: params.sessionId };
301+
if (method === "session.resume") return { sessionId: params.sessionId };
302+
throw new Error(`Unexpected method: ${method}`);
303+
});
304+
305+
const session = await client.createSession({ onPermissionRequest: approveAll });
306+
await client.resumeSession(session.sessionId, { onPermissionRequest: approveAll });
307+
308+
const createPayload = spy.mock.calls.find(
309+
([method]) => method === "session.create"
310+
)![1] as any;
311+
const resumePayload = spy.mock.calls.find(
312+
([method]) => method === "session.resume"
313+
)![1] as any;
314+
expect(createPayload.internalCorrelationIds).toBeUndefined();
315+
expect(resumePayload.internalCorrelationIds).toBeUndefined();
316+
});
317+
254318
it("forwards capi options in session.create and session.resume", async () => {
255319
const client = new CopilotClient();
256320
await client.start();

0 commit comments

Comments
 (0)