-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Expand file tree
/
Copy pathextension.ts
More file actions
112 lines (104 loc) · 3.39 KB
/
Copy pathextension.ts
File metadata and controls
112 lines (104 loc) · 3.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*---------------------------------------------------------------------------------------------
* 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";
import type { FactoryHandle } from "./factory.js";
export {
Canvas,
CanvasError,
createCanvas,
type CanvasAction,
type CanvasDeclaration,
type CanvasHostContext,
type CanvasJsonSchema,
type CanvasOptions,
} from "./canvas.js";
export type JoinSessionConfig = Omit<
ResumeSessionConfig,
"onPermissionRequest" | "extensionSdkPath"
> & {
onPermissionRequest?: PermissionHandler;
/**
* Factory handles to register when the extension joins the session.
*
* @experimental Part of the experimental Agent Factories surface and may
* change or be removed in future SDK or CLI releases.
*/
factories?: FactoryHandle[];
};
export type { ExtensionInfo, FactoryLimits, FactoryMeta } from "./types.js";
export {
defineFactory,
FactoryResumeError,
isFactoryRunTerminal,
type RunOptions,
type ResumeOptions,
type FactoryResumeErrorCode,
type SessionFactoryApi,
type FactoryAgentOptions,
type FactoryContext,
type FactoryDefinition,
type FactoryHandle,
type FactoryJsonSchema,
type JsonValue,
type FactoryPipelineStage,
type FactoryStepOptions,
type FactoryRunResult,
type FactoryRunStatus,
type FactoryRunSummary,
type FactoryRunDetail,
type FactoryProgressPage,
type FactoryProgressLine,
type FactoryPhaseObservation,
type FactoryPhaseStatus,
type FactoryAgentSummary,
} from "./factory.js";
/**
* 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<CopilotSession> {
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" } });
// Strip `extensionSdkPath` at runtime even though `JoinSessionConfig` omits it
// at the type level — untyped (JS) callers can still slip it through, and
// honoring it here would be misleading since the extension subprocess has
// already been forked by the host with the SDK the host chose.
const {
extensionSdkPath: _stripped,
factories,
...rest
} = config as JoinSessionConfig & {
extensionSdkPath?: string;
};
void _stripped;
return client.resumeSessionForExtension(
sessionId,
{
...rest,
onPermissionRequest: config.onPermissionRequest ?? defaultJoinSessionPermissionHandler,
suppressResumeEvent: config.suppressResumeEvent ?? true,
},
factories
);
}