@github/copilot-sdk 1.0.0-beta.1 → 1.0.0-beta.2

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.
@@ -36,6 +36,11 @@ var import_sessionFsProvider = require("./sessionFsProvider.js");
36
36
  var import_telemetry = require("./telemetry.js");
37
37
  var import_types = require("./types.js");
38
38
  const import_meta = {};
39
+ function toWireProviderConfig(provider) {
40
+ const { maxInputTokens, ...rest } = provider;
41
+ if (maxInputTokens === void 0) return rest;
42
+ return { ...rest, maxPromptTokens: maxInputTokens };
43
+ }
39
44
  const MIN_PROTOCOL_VERSION = 2;
40
45
  function isZodSchema(value) {
41
46
  return value != null && typeof value === "object" && "toJSONSchema" in value && typeof value.toJSONSchema === "function";
@@ -230,7 +235,8 @@ class CopilotClient {
230
235
  useLoggedInUser: options.useLoggedInUser ?? (options.gitHubToken ? false : true),
231
236
  telemetry: options.telemetry,
232
237
  copilotHome: options.copilotHome,
233
- sessionIdleTimeoutSeconds: options.sessionIdleTimeoutSeconds ?? 0
238
+ sessionIdleTimeoutSeconds: options.sessionIdleTimeoutSeconds ?? 0,
239
+ remote: options.remote ?? false
234
240
  };
235
241
  }
236
242
  /**
@@ -569,7 +575,7 @@ class CopilotClient {
569
575
  systemMessage: wireSystemMessage,
570
576
  availableTools: config.availableTools,
571
577
  excludedTools: config.excludedTools,
572
- provider: config.provider,
578
+ provider: config.provider ? toWireProviderConfig(config.provider) : void 0,
573
579
  modelCapabilities: config.modelCapabilities,
574
580
  requestPermission: true,
575
581
  requestUserInput: !!config.onUserInputRequest,
@@ -697,7 +703,7 @@ class CopilotClient {
697
703
  name: cmd.name,
698
704
  description: cmd.description
699
705
  })),
700
- provider: config.provider,
706
+ provider: config.provider ? toWireProviderConfig(config.provider) : void 0,
701
707
  modelCapabilities: config.modelCapabilities,
702
708
  requestPermission: config.onPermissionRequest !== import_types.defaultJoinSessionPermissionHandler,
703
709
  requestUserInput: !!config.onUserInputRequest,
@@ -857,7 +863,7 @@ class CopilotClient {
857
863
  );
858
864
  serverVersion = result.protocolVersion;
859
865
  } catch (err) {
860
- if (err instanceof import_node.ResponseError && err.code === import_node.ErrorCodes.MethodNotFound) {
866
+ if (err instanceof import_node.ResponseError && (err.code === import_node.ErrorCodes.MethodNotFound || err.message === "Unhandled method connect")) {
861
867
  serverVersion = (await raceAgainstExit(this.ping())).protocolVersion;
862
868
  } else {
863
869
  throw err;
@@ -1092,6 +1098,9 @@ class CopilotClient {
1092
1098
  this.options.sessionIdleTimeoutSeconds.toString()
1093
1099
  );
1094
1100
  }
1101
+ if (this.options.remote) {
1102
+ args.push("--remote");
1103
+ }
1095
1104
  const envWithoutNodeDebug = { ...this.options.env };
1096
1105
  delete envWithoutNodeDebug.NODE_DEBUG;
1097
1106
  if (this.options.gitHubToken) {
@@ -176,6 +176,11 @@ function createSessionRpc(connection, sessionId) {
176
176
  /** @experimental */
177
177
  usage: {
178
178
  getMetrics: async () => connection.sendRequest("session.usage.getMetrics", { sessionId })
179
+ },
180
+ /** @experimental */
181
+ remote: {
182
+ enable: async () => connection.sendRequest("session.remote.enable", { sessionId }),
183
+ disable: async () => connection.sendRequest("session.remote.disable", { sessionId })
179
184
  }
180
185
  };
181
186
  }
package/dist/client.js CHANGED
@@ -22,6 +22,11 @@ import { CopilotSession, NO_RESULT_PERMISSION_V2_ERROR } from "./session.js";
22
22
  import { createSessionFsAdapter } from "./sessionFsProvider.js";
23
23
  import { getTraceContext } from "./telemetry.js";
24
24
  import { defaultJoinSessionPermissionHandler } from "./types.js";
25
+ function toWireProviderConfig(provider) {
26
+ const { maxInputTokens, ...rest } = provider;
27
+ if (maxInputTokens === void 0) return rest;
28
+ return { ...rest, maxPromptTokens: maxInputTokens };
29
+ }
25
30
  const MIN_PROTOCOL_VERSION = 2;
26
31
  function isZodSchema(value) {
27
32
  return value != null && typeof value === "object" && "toJSONSchema" in value && typeof value.toJSONSchema === "function";
@@ -216,7 +221,8 @@ class CopilotClient {
216
221
  useLoggedInUser: options.useLoggedInUser ?? (options.gitHubToken ? false : true),
217
222
  telemetry: options.telemetry,
218
223
  copilotHome: options.copilotHome,
219
- sessionIdleTimeoutSeconds: options.sessionIdleTimeoutSeconds ?? 0
224
+ sessionIdleTimeoutSeconds: options.sessionIdleTimeoutSeconds ?? 0,
225
+ remote: options.remote ?? false
220
226
  };
221
227
  }
222
228
  /**
@@ -555,7 +561,7 @@ class CopilotClient {
555
561
  systemMessage: wireSystemMessage,
556
562
  availableTools: config.availableTools,
557
563
  excludedTools: config.excludedTools,
558
- provider: config.provider,
564
+ provider: config.provider ? toWireProviderConfig(config.provider) : void 0,
559
565
  modelCapabilities: config.modelCapabilities,
560
566
  requestPermission: true,
561
567
  requestUserInput: !!config.onUserInputRequest,
@@ -683,7 +689,7 @@ class CopilotClient {
683
689
  name: cmd.name,
684
690
  description: cmd.description
685
691
  })),
686
- provider: config.provider,
692
+ provider: config.provider ? toWireProviderConfig(config.provider) : void 0,
687
693
  modelCapabilities: config.modelCapabilities,
688
694
  requestPermission: config.onPermissionRequest !== defaultJoinSessionPermissionHandler,
689
695
  requestUserInput: !!config.onUserInputRequest,
@@ -843,7 +849,7 @@ class CopilotClient {
843
849
  );
844
850
  serverVersion = result.protocolVersion;
845
851
  } catch (err) {
846
- if (err instanceof ResponseError && err.code === ErrorCodes.MethodNotFound) {
852
+ if (err instanceof ResponseError && (err.code === ErrorCodes.MethodNotFound || err.message === "Unhandled method connect")) {
847
853
  serverVersion = (await raceAgainstExit(this.ping())).protocolVersion;
848
854
  } else {
849
855
  throw err;
@@ -1078,6 +1084,9 @@ class CopilotClient {
1078
1084
  this.options.sessionIdleTimeoutSeconds.toString()
1079
1085
  );
1080
1086
  }
1087
+ if (this.options.remote) {
1088
+ args.push("--remote");
1089
+ }
1081
1090
  const envWithoutNodeDebug = { ...this.options.env };
1082
1091
  delete envWithoutNodeDebug.NODE_DEBUG;
1083
1092
  if (this.options.gitHubToken) {
@@ -1338,6 +1338,17 @@ export interface PluginList {
1338
1338
  */
1339
1339
  plugins: Plugin[];
1340
1340
  }
1341
+ /** @experimental */
1342
+ export interface RemoteEnableResult {
1343
+ /**
1344
+ * Mission Control frontend URL for this session
1345
+ */
1346
+ url?: string;
1347
+ /**
1348
+ * Whether remote steering is enabled
1349
+ */
1350
+ remoteSteerable: boolean;
1351
+ }
1341
1352
  export interface ServerSkill {
1342
1353
  /**
1343
1354
  * Unique identifier for the skill
@@ -2436,6 +2447,11 @@ export declare function createSessionRpc(connection: MessageConnection, sessionI
2436
2447
  usage: {
2437
2448
  getMetrics: () => Promise<UsageGetMetricsResult>;
2438
2449
  };
2450
+ /** @experimental */
2451
+ remote: {
2452
+ enable: () => Promise<RemoteEnableResult>;
2453
+ disable: () => Promise<void>;
2454
+ };
2439
2455
  };
2440
2456
  /** Handler for `sessionFs` client session API methods. */
2441
2457
  export interface SessionFsHandler {
@@ -150,6 +150,11 @@ function createSessionRpc(connection, sessionId) {
150
150
  /** @experimental */
151
151
  usage: {
152
152
  getMetrics: async () => connection.sendRequest("session.usage.getMetrics", { sessionId })
153
+ },
154
+ /** @experimental */
155
+ remote: {
156
+ enable: async () => connection.sendRequest("session.remote.enable", { sessionId }),
157
+ disable: async () => connection.sendRequest("session.remote.disable", { sessionId })
153
158
  }
154
159
  };
155
160
  }
@@ -2,7 +2,7 @@
2
2
  * AUTO-GENERATED FILE - DO NOT EDIT
3
3
  * Generated from: session-events.schema.json
4
4
  */
5
- export type SessionEvent = StartEvent | ResumeEvent | RemoteSteerableChangedEvent | ErrorEvent | IdleEvent | TitleChangedEvent | InfoEvent | WarningEvent | ModelChangeEvent | ModeChangedEvent | PlanChangedEvent | WorkspaceFileChangedEvent | HandoffEvent | TruncationEvent | SnapshotRewindEvent | ShutdownEvent | ContextChangedEvent | UsageInfoEvent | CompactionStartEvent | CompactionCompleteEvent | TaskCompleteEvent | UserMessageEvent | PendingMessagesModifiedEvent | AssistantTurnStartEvent | AssistantIntentEvent | AssistantReasoningEvent | AssistantReasoningDeltaEvent | AssistantStreamingDeltaEvent | AssistantMessageEvent | AssistantMessageStartEvent | AssistantMessageDeltaEvent | AssistantTurnEndEvent | AssistantUsageEvent | ModelCallFailureEvent | AbortEvent | ToolUserRequestedEvent | ToolExecutionStartEvent | ToolExecutionPartialResultEvent | ToolExecutionProgressEvent | ToolExecutionCompleteEvent | SkillInvokedEvent | SubagentStartedEvent | SubagentCompletedEvent | SubagentFailedEvent | SubagentSelectedEvent | SubagentDeselectedEvent | HookStartEvent | HookEndEvent | SystemMessageEvent | SystemNotificationEvent | PermissionRequestedEvent | PermissionCompletedEvent | UserInputRequestedEvent | UserInputCompletedEvent | ElicitationRequestedEvent | ElicitationCompletedEvent | SamplingRequestedEvent | SamplingCompletedEvent | McpOauthRequiredEvent | McpOauthCompletedEvent | ExternalToolRequestedEvent | ExternalToolCompletedEvent | CommandQueuedEvent | CommandExecuteEvent | CommandCompletedEvent | AutoModeSwitchRequestedEvent | AutoModeSwitchCompletedEvent | CommandsChangedEvent | CapabilitiesChangedEvent | ExitPlanModeRequestedEvent | ExitPlanModeCompletedEvent | ToolsUpdatedEvent | BackgroundTasksChangedEvent | SkillsLoadedEvent | CustomAgentsUpdatedEvent | McpServersLoadedEvent | McpServerStatusChangedEvent | ExtensionsLoadedEvent;
5
+ export type SessionEvent = StartEvent | ResumeEvent | RemoteSteerableChangedEvent | ErrorEvent | IdleEvent | TitleChangedEvent | ScheduleCreatedEvent | ScheduleCancelledEvent | InfoEvent | WarningEvent | ModelChangeEvent | ModeChangedEvent | PlanChangedEvent | WorkspaceFileChangedEvent | HandoffEvent | TruncationEvent | SnapshotRewindEvent | ShutdownEvent | ContextChangedEvent | UsageInfoEvent | CompactionStartEvent | CompactionCompleteEvent | TaskCompleteEvent | UserMessageEvent | PendingMessagesModifiedEvent | AssistantTurnStartEvent | AssistantIntentEvent | AssistantReasoningEvent | AssistantReasoningDeltaEvent | AssistantStreamingDeltaEvent | AssistantMessageEvent | AssistantMessageStartEvent | AssistantMessageDeltaEvent | AssistantTurnEndEvent | AssistantUsageEvent | ModelCallFailureEvent | AbortEvent | ToolUserRequestedEvent | ToolExecutionStartEvent | ToolExecutionPartialResultEvent | ToolExecutionProgressEvent | ToolExecutionCompleteEvent | SkillInvokedEvent | SubagentStartedEvent | SubagentCompletedEvent | SubagentFailedEvent | SubagentSelectedEvent | SubagentDeselectedEvent | HookStartEvent | HookEndEvent | SystemMessageEvent | SystemNotificationEvent | PermissionRequestedEvent | PermissionCompletedEvent | UserInputRequestedEvent | UserInputCompletedEvent | ElicitationRequestedEvent | ElicitationCompletedEvent | SamplingRequestedEvent | SamplingCompletedEvent | McpOauthRequiredEvent | McpOauthCompletedEvent | ExternalToolRequestedEvent | ExternalToolCompletedEvent | CommandQueuedEvent | CommandExecuteEvent | CommandCompletedEvent | AutoModeSwitchRequestedEvent | AutoModeSwitchCompletedEvent | CommandsChangedEvent | CapabilitiesChangedEvent | ExitPlanModeRequestedEvent | ExitPlanModeCompletedEvent | ToolsUpdatedEvent | BackgroundTasksChangedEvent | SkillsLoadedEvent | CustomAgentsUpdatedEvent | McpServersLoadedEvent | McpServerStatusChangedEvent | ExtensionsLoadedEvent;
6
6
  /**
7
7
  * Hosting platform type of the repository (github or ado)
8
8
  */
@@ -444,6 +444,80 @@ export interface TitleChangedData {
444
444
  */
445
445
  title: string;
446
446
  }
447
+ export interface ScheduleCreatedEvent {
448
+ /**
449
+ * Sub-agent instance identifier. Absent for events from the root/main agent and session-level events.
450
+ */
451
+ agentId?: string;
452
+ data: ScheduleCreatedData;
453
+ /**
454
+ * When true, the event is transient and not persisted to the session event log on disk
455
+ */
456
+ ephemeral?: boolean;
457
+ /**
458
+ * Unique event identifier (UUID v4), generated when the event is emitted
459
+ */
460
+ id: string;
461
+ /**
462
+ * ID of the chronologically preceding event in the session, forming a linked chain. Null for the first event.
463
+ */
464
+ parentId: string | null;
465
+ /**
466
+ * ISO 8601 timestamp when the event was created
467
+ */
468
+ timestamp: string;
469
+ type: "session.schedule_created";
470
+ }
471
+ /**
472
+ * Scheduled prompt registered via /every
473
+ */
474
+ export interface ScheduleCreatedData {
475
+ /**
476
+ * Sequential id assigned to the scheduled prompt within the session
477
+ */
478
+ id: number;
479
+ /**
480
+ * Interval between ticks in milliseconds
481
+ */
482
+ intervalMs: number;
483
+ /**
484
+ * Prompt text that gets enqueued on every tick
485
+ */
486
+ prompt: string;
487
+ }
488
+ export interface ScheduleCancelledEvent {
489
+ /**
490
+ * Sub-agent instance identifier. Absent for events from the root/main agent and session-level events.
491
+ */
492
+ agentId?: string;
493
+ data: ScheduleCancelledData;
494
+ /**
495
+ * When true, the event is transient and not persisted to the session event log on disk
496
+ */
497
+ ephemeral?: boolean;
498
+ /**
499
+ * Unique event identifier (UUID v4), generated when the event is emitted
500
+ */
501
+ id: string;
502
+ /**
503
+ * ID of the chronologically preceding event in the session, forming a linked chain. Null for the first event.
504
+ */
505
+ parentId: string | null;
506
+ /**
507
+ * ISO 8601 timestamp when the event was created
508
+ */
509
+ timestamp: string;
510
+ type: "session.schedule_cancelled";
511
+ }
512
+ /**
513
+ * Scheduled prompt cancelled from the schedule manager dialog
514
+ */
515
+ export interface ScheduleCancelledData {
516
+ /**
517
+ * Id of the scheduled prompt that was cancelled
518
+ */
519
+ id: number;
520
+ }
447
521
  export interface InfoEvent {
448
522
  /**
449
523
  * Sub-agent instance identifier. Absent for events from the root/main agent and session-level events.
@@ -1812,6 +1886,10 @@ export interface AssistantMessageToolRequest {
1812
1886
  * Name of the MCP server hosting this tool, when the tool is an MCP tool
1813
1887
  */
1814
1888
  mcpServerName?: string;
1889
+ /**
1890
+ * Original tool name on the MCP server, when the tool is an MCP tool
1891
+ */
1892
+ mcpToolName?: string;
1815
1893
  /**
1816
1894
  * Name of the tool being invoked
1817
1895
  */
@@ -4849,9 +4927,9 @@ export interface CustomAgentsUpdatedAgent {
4849
4927
  */
4850
4928
  source: string;
4851
4929
  /**
4852
- * List of tool names available to this agent
4930
+ * List of tool names available to this agent, or null when all tools are available
4853
4931
  */
4854
- tools: string[];
4932
+ tools: string[] | null;
4855
4933
  /**
4856
4934
  * Whether the agent can be selected by the user
4857
4935
  */
package/dist/types.d.ts CHANGED
@@ -182,6 +182,15 @@ export interface CopilotClientOptions {
182
182
  * `useStdio: true` (stdio is pre-authenticated by transport).
183
183
  */
184
184
  tcpConnectionToken?: string;
185
+ /**
186
+ * Enable remote session support (Mission Control integration).
187
+ * When true, sessions in a GitHub repository working directory are
188
+ * accessible from GitHub web and mobile.
189
+ * This option is only used when the SDK spawns the CLI process; it is ignored
190
+ * when connecting to an external server via {@link cliUrl}.
191
+ * @default false
192
+ */
193
+ remote?: boolean;
185
194
  }
186
195
  /**
187
196
  * Configuration for creating a session
@@ -1177,6 +1186,32 @@ export interface ProviderConfig {
1177
1186
  * Custom HTTP headers to include in outbound provider requests.
1178
1187
  */
1179
1188
  headers?: Record<string, string>;
1189
+ /**
1190
+ * Well-known model name used by the runtime to look up agent configuration
1191
+ * (tools, prompts, reasoning behavior) and default token limits. Also used
1192
+ * as the wire model when {@link wireModel} is not set.
1193
+ * Falls back to {@link SessionConfig.model}.
1194
+ */
1195
+ modelId?: string;
1196
+ /**
1197
+ * Model name sent to the provider API for inference. Use this when the
1198
+ * provider's model name (e.g. an Azure deployment name or a custom
1199
+ * fine-tune name) differs from {@link modelId}.
1200
+ * Falls back to {@link modelId}, then {@link SessionConfig.model}.
1201
+ */
1202
+ wireModel?: string;
1203
+ /**
1204
+ * Overrides the resolved model's default max prompt tokens. The runtime
1205
+ * triggers conversation compaction before sending a request when the
1206
+ * prompt (system message, history, tool definitions, user message) would
1207
+ * exceed this limit.
1208
+ */
1209
+ maxInputTokens?: number;
1210
+ /**
1211
+ * Overrides the resolved model's default max output tokens. When hit, the
1212
+ * model stops generating and returns a truncated response.
1213
+ */
1214
+ maxOutputTokens?: number;
1180
1215
  }
1181
1216
  /**
1182
1217
  * Options for sending a message to a session
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "type": "git",
5
5
  "url": "https://github.com/github/copilot-sdk.git"
6
6
  },
7
- "version": "1.0.0-beta.1",
7
+ "version": "1.0.0-beta.2",
8
8
  "description": "TypeScript SDK for programmatic control of GitHub Copilot CLI via JSON-RPC",
9
9
  "main": "./dist/cjs/index.js",
10
10
  "types": "./dist/index.d.ts",
@@ -56,7 +56,7 @@
56
56
  "author": "GitHub",
57
57
  "license": "MIT",
58
58
  "dependencies": {
59
- "@github/copilot": "^1.0.41-0",
59
+ "@github/copilot": "^1.0.43-0",
60
60
  "vscode-jsonrpc": "^8.2.1",
61
61
  "zod": "^4.3.6"
62
62
  },