@github/copilot-sdk 1.0.29-preview.1 → 1.0.29-preview.3
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/README.md +436 -2
- package/dist/cjs/cliVersion.js +1 -1
- package/dist/cjs/client.js +26 -12
- package/dist/cjs/copilotRequestHandler.js +17 -7
- package/dist/cjs/generated/rpc.js +71 -2
- package/dist/cjs/session.js +48 -0
- package/dist/cliVersion.d.ts +1 -1
- package/dist/cliVersion.js +1 -1
- package/dist/client.d.ts +0 -1
- package/dist/client.js +26 -12
- package/dist/copilotRequestHandler.js +17 -7
- package/dist/generated/rpc.d.ts +471 -4
- package/dist/generated/rpc.js +71 -2
- package/dist/generated/session-events.d.ts +23 -1
- package/dist/index.d.ts +1 -1
- package/dist/session.d.ts +9 -2
- package/dist/session.js +48 -0
- package/dist/types.d.ts +26 -3
- package/docs/examples.md +7 -7
- package/package.json +13 -12
package/dist/generated/rpc.js
CHANGED
|
@@ -813,9 +813,17 @@ function createServerRpc(connection) {
|
|
|
813
813
|
*
|
|
814
814
|
* @param params A bounded catalog search. Both the query length and the result count are capped by the schema so a caller cannot request an unbounded scan.
|
|
815
815
|
*
|
|
816
|
-
* @returns Outcome of
|
|
816
|
+
* @returns Outcome of catalog.search or catalog.recommend: either bounded inert candidates, or one typed refusal. Never a partial success.
|
|
817
817
|
*/
|
|
818
818
|
search: async (params) => connection.sendRequest("catalog.search", params),
|
|
819
|
+
/**
|
|
820
|
+
* Requests the initial page of at most ten official-product recommendations for a complete task and product, bound to an existing attached local session. Requires catalog-recommend, catalog-search-session-bound and catalog-search-credential-required. Uses the selected GitHub.com user credential on the fixed Agent Finder recommendations route; successful capability negotiation does not establish service acceptance. Returns the existing inert catalog candidates and retained install references with the typed catalog refusal union. No anonymous retry, unfiltered search fallback or continuation is performed. Server-owned product approvals establish provenance, not task suitability. Read-only: nothing is installed, configured or persisted.
|
|
821
|
+
*
|
|
822
|
+
* @param params Initial-page official-product recommendations for a complete task. The runtime fixes recommendationPolicy to official-product and pageSize to 10; callers cannot override the policy, request pagination or fall back to search.
|
|
823
|
+
*
|
|
824
|
+
* @returns Outcome of catalog.search or catalog.recommend: either bounded inert candidates, or one typed refusal. Never a partial success.
|
|
825
|
+
*/
|
|
826
|
+
recommend: async (params) => connection.sendRequest("catalog.recommend", params),
|
|
819
827
|
/**
|
|
820
828
|
* Retrieves one saved feed by its opaque ID, optionally filtered by trust tier. Requires catalog-feeds and catalog-search-credential-required, and uses the same authority, credential policy, optional session binding and candidate projection as catalog.search, so available entries are the same inert candidates, with the same installability, handles and display metadata, and install through the same confirmed flows. Entries keep the feed's order; an entry the runtime cannot present is returned as unavailable with a reason rather than failing the feed. No anonymous retry. Read-only: nothing is installed, configured, or persisted.
|
|
821
829
|
*
|
|
@@ -2146,6 +2154,49 @@ function createInternalServerRpc(connection) {
|
|
|
2146
2154
|
}
|
|
2147
2155
|
function createSessionRpc(connection, sessionId) {
|
|
2148
2156
|
return {
|
|
2157
|
+
/** @experimental */
|
|
2158
|
+
management: {
|
|
2159
|
+
/**
|
|
2160
|
+
* Updates opt-in session management policy live. Enabling the master enables all tools before applying individual overrides. Opt-in is scoped to the session's configuration directory.
|
|
2161
|
+
*
|
|
2162
|
+
* @param params Updates the session's live policy without changing persistent host settings.
|
|
2163
|
+
*
|
|
2164
|
+
* @returns Opt-in policy for local session management.
|
|
2165
|
+
*/
|
|
2166
|
+
configure: async (params) => connection.sendRequest("session.management.configure", { ...params, sessionId }),
|
|
2167
|
+
/**
|
|
2168
|
+
* Lists other live, opted-in sessions in the same configuration directory. Requires the list tool to be enabled.
|
|
2169
|
+
*
|
|
2170
|
+
* @param params Lists opted-in local peers. The caller is omitted.
|
|
2171
|
+
*
|
|
2172
|
+
* @returns Eligible live peers reported by their owning runtimes.
|
|
2173
|
+
*/
|
|
2174
|
+
list: async (params) => connection.sendRequest("session.management.list", { ...params, sessionId }),
|
|
2175
|
+
/**
|
|
2176
|
+
* Injects peer text into an opted-in session. Wakes an idle agent and safely queues delivery to a busy agent. Acceptance does not imply an answer or completed task.
|
|
2177
|
+
*
|
|
2178
|
+
* @param params Sends peer text, never human approval, to another opted-in session.
|
|
2179
|
+
*
|
|
2180
|
+
* @returns Acceptance is not a completed turn or a reply.
|
|
2181
|
+
*/
|
|
2182
|
+
message: async (params) => connection.sendRequest("session.management.message", { ...params, sessionId }),
|
|
2183
|
+
/**
|
|
2184
|
+
* Asks the owning host to create and supervise a separate session, preserving permissions and model restrictions. Omitted model, reasoning effort, context tier and cwd inherit the caller's current values; explicit overrides use normal model validation and workspace trust. Records durable creation lineage before delivering the initial task as peer text. Returns the new session ID, not task completion. Requires the create tool and a host creation handler.
|
|
2185
|
+
*
|
|
2186
|
+
* @param params Requests a separate session. Omitted launch options inherit the caller's current configuration.
|
|
2187
|
+
*
|
|
2188
|
+
* @returns Identifies a session owned and supervised by the creating host.
|
|
2189
|
+
*/
|
|
2190
|
+
create: async (params) => connection.sendRequest("session.management.create", { ...params, sessionId }),
|
|
2191
|
+
/**
|
|
2192
|
+
* Closes a live opted-in session created by the caller or one of its descendants, preserving saved history and leaving descendants open. Requires the close capability to be enabled. Self, ancestors, siblings and unrelated sessions cannot be closed.
|
|
2193
|
+
*
|
|
2194
|
+
* @param params Closes one live opted-in descendant without deleting its saved history or closing its children.
|
|
2195
|
+
*
|
|
2196
|
+
* @returns Completion of the existing non-deleting close lifecycle.
|
|
2197
|
+
*/
|
|
2198
|
+
close: async (params) => connection.sendRequest("session.management.close", { ...params, sessionId })
|
|
2199
|
+
},
|
|
2149
2200
|
/** @experimental */
|
|
2150
2201
|
providers: {
|
|
2151
2202
|
/**
|
|
@@ -2783,7 +2834,13 @@ function createSessionRpc(connection, sessionId) {
|
|
|
2783
2834
|
*
|
|
2784
2835
|
* @returns Canonical runtime state for the session's current autopilot objective.
|
|
2785
2836
|
*/
|
|
2786
|
-
getState: async () => connection.sendRequest("session.autopilotObjective.getState", { sessionId })
|
|
2837
|
+
getState: async () => connection.sendRequest("session.autopilotObjective.getState", { sessionId }),
|
|
2838
|
+
/**
|
|
2839
|
+
* Sets whether completing or pausing this session's objective preserves autopilot mode. This in-memory preference defaults to false and must be reapplied when attaching a client.
|
|
2840
|
+
*
|
|
2841
|
+
* @param params Client-resolved preference for retaining autopilot mode after objective completion or pause.
|
|
2842
|
+
*/
|
|
2843
|
+
setStayInAutopilot: async (params) => connection.sendRequest("session.autopilotObjective.setStayInAutopilot", { ...params, sessionId })
|
|
2787
2844
|
},
|
|
2788
2845
|
/** @experimental */
|
|
2789
2846
|
completions: {
|
|
@@ -3523,6 +3580,12 @@ function createSessionRpc(connection, sessionId) {
|
|
|
3523
3580
|
* @returns The selectable model entries and selection ids synthesized for the synchronized BYOK models.
|
|
3524
3581
|
*/
|
|
3525
3582
|
sync: async (params) => connection.sendRequest("session.provider.sync", { ...params, sessionId }),
|
|
3583
|
+
/**
|
|
3584
|
+
* Returns credential-free provider configuration status for the selected model. This does not validate provider credentials or contact the provider.
|
|
3585
|
+
*
|
|
3586
|
+
* @returns Credential-free provider configuration status for the selected model.
|
|
3587
|
+
*/
|
|
3588
|
+
getStatus: async () => connection.sendRequest("session.provider.getStatus", { sessionId }),
|
|
3526
3589
|
/**
|
|
3527
3590
|
* Withdraws named host-managed models from the session's BYOK registry, leaving every other entry untouched. The scoped counterpart to `provider.sync`: a snapshot can only describe entries the caller knows about, so using it to remove one model silently withdraws rows registered by another source, such as a plugin calling `provider.add` at runtime. Naming what to remove leaves unrelated entries alone. Selection ids that are not registered are ignored, so withdrawal is idempotent. A provider is removed only when one of the withdrawn models was the last entry referencing it; a provider that simply has no models, which is the normal state while its rows are supplied by catalog discovery, is left in place.
|
|
3528
3591
|
*
|
|
@@ -3863,6 +3926,12 @@ function createSessionRpc(connection, sessionId) {
|
|
|
3863
3926
|
* @returns Current permission mode.
|
|
3864
3927
|
*/
|
|
3865
3928
|
getMode: async () => connection.sendRequest("session.permissions.getMode", { sessionId }),
|
|
3929
|
+
/**
|
|
3930
|
+
* Returns the approval modes currently available under the session's feature and managed permission policy. This read does not change permissions; mutations must still check their authoritative result because policy may change.
|
|
3931
|
+
*
|
|
3932
|
+
* @returns Available permission modes, derived from current session policy.
|
|
3933
|
+
*/
|
|
3934
|
+
getCapabilities: async () => connection.sendRequest("session.permissions.getCapabilities", { sessionId }),
|
|
3866
3935
|
/**
|
|
3867
3936
|
* Adds or removes session-scoped or location-scoped permission rules.
|
|
3868
3937
|
*
|
|
@@ -730,7 +730,7 @@ export type UserMessageAgentMode =
|
|
|
730
730
|
/**
|
|
731
731
|
* A user message attachment — a file, directory, code selection, blob, GitHub reference, GitHub-anchored pointer, or extension-supplied context payload
|
|
732
732
|
*/
|
|
733
|
-
export type Attachment = AttachmentFile | AttachmentDirectory | AttachmentSelection | AttachmentGitHubReference | AttachmentGitHubCommit | AttachmentGitHubRelease | AttachmentGitHubActionsJob | AttachmentGitHubRepository | AttachmentGitHubFileDiff | AttachmentGitHubTreeComparison | AttachmentGitHubUrl | AttachmentGitHubFile | AttachmentGitHubSnippet | AttachmentBlob | AttachmentExtensionContext;
|
|
733
|
+
export type Attachment = AttachmentFile | AttachmentDirectory | AttachmentSelection | AttachmentGitHubReference | AttachmentGitHubCommit | AttachmentGitHubRelease | AttachmentGitHubActionsJob | AttachmentGitHubRepository | AttachmentGitHubFileDiff | AttachmentGitHubTreeComparison | AttachmentGitHubUrl | AttachmentGitHubFile | AttachmentGitHubSnippet | AttachmentBlob | AttachmentExtensionContext | AttachmentSessionReference;
|
|
734
734
|
/**
|
|
735
735
|
* Why the binary data is absent: it exceeded the inline size limit, or its asset was unavailable
|
|
736
736
|
*/
|
|
@@ -6349,6 +6349,28 @@ export interface AttachmentExtensionContext {
|
|
|
6349
6349
|
*/
|
|
6350
6350
|
type: "extension_context";
|
|
6351
6351
|
}
|
|
6352
|
+
/**
|
|
6353
|
+
* An ID-bound reference to an eligible live session. Supplies identity context only, without sending a message, reading history, or granting permission.
|
|
6354
|
+
*/
|
|
6355
|
+
/** @experimental */
|
|
6356
|
+
export interface AttachmentSessionReference {
|
|
6357
|
+
/**
|
|
6358
|
+
* User-visible mention label captured when the reference was selected.
|
|
6359
|
+
*/
|
|
6360
|
+
displayName?: string;
|
|
6361
|
+
/**
|
|
6362
|
+
* Character offset of the selected mention in the displayed prompt.
|
|
6363
|
+
*/
|
|
6364
|
+
mentionIndex?: number;
|
|
6365
|
+
/**
|
|
6366
|
+
* Stable identity of the selected session, never resolved from its title.
|
|
6367
|
+
*/
|
|
6368
|
+
sessionId: string;
|
|
6369
|
+
/**
|
|
6370
|
+
* Attachment type discriminator.
|
|
6371
|
+
*/
|
|
6372
|
+
type: "session_reference";
|
|
6373
|
+
}
|
|
6352
6374
|
/**
|
|
6353
6375
|
* Session event "pending_messages.modified". Empty payload; the event signals that the pending message queue has changed
|
|
6354
6376
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -13,5 +13,5 @@ export { defineWorkflow, WorkflowResumeError, isWorkflowRunTerminal } from "./wo
|
|
|
13
13
|
export { Canvas, CanvasError, createCanvas, type CanvasAction, type CanvasDeclaration, type CanvasHostContext, type CanvasHostContextCapabilities, type CanvasJsonSchema, type CanvasOptions, } from "./canvas.js";
|
|
14
14
|
export { defineTool, approveAll, createAttributedPermissionResult, convertMcpCallToolResult, createSessionFsAdapter, CopilotRequestHandler, CopilotWebSocketHandler, CopilotWebSocketCloseStatus, CopilotWebSocketForwarder, SessionFsSqliteTransactionFailure, SessionFsWriteFailure, SYSTEM_MESSAGE_SECTIONS, } from "./types.js";
|
|
15
15
|
export type * from "./generated/session-events.js";
|
|
16
|
-
export type { AskUserVariant, CommandContext, CommandDefinition, CommandHandler, CanvasProviderIdentity, CloudSessionOptions, CloudSessionRepository, AuthIdentityMetadata, AuthInfoType, ConnectorAccountRequest, ConnectorAvailability, ConnectorCapabilities, ConnectorCatalogEntry, ConnectorCatalogResult, ConnectorCatalogStatus, ConnectorConnectRequest, ConnectorConnectResult, ConnectorContinueRequest, ConnectorDisconnectResult, ConnectorMcpStatus, ConnectorReconcileRequest, ConnectorRuntimeStatus, ConnectorSessionAccount, ConnectorSessionAccountResult, ConnectorStatus, AutoModeSwitchHandler, AutoModeSwitchRequest, AutoModeSwitchResponse, AgentStopHandler, AgentStopHookInput, AgentStopHookOutput, SubagentStartHandler, SubagentStartHookInput, SubagentStartHookOutput, SubagentStopHandler, SubagentStopHookInput, SubagentStopHookOutput, UserPromptTransformedHandler, UserPromptTransformedHookInput, UserPromptTransformedHookOutput, CopilotClientInfo, CopilotClientMode, CopilotClientOptions, EntraAuthConfig, EntraAuthOptions, EntraTokenProvider, EntraTokenProviderArgs, EntraTokenProviderResult, InstallationConfirmationHandler, InstallationConfirmationRequest, InstallationConfirmationResponse, InstallationDecision, InstallationReview, McpInstallationReview, CopilotExpAssignmentResponse, StdioRuntimeConnection, InProcessRuntimeConnection, TcpRuntimeConnection, UriRuntimeConnection, ChildProcessRuntimeConnection, CustomAgentConfig, ElicitationFieldValue, ElicitationHandler, ElicitationParams, ElicitationContext, ElicitationResult, ElicitationSchema, ElicitationSchemaField, ExpConfigEntry, ExpFlagValue, ExitPlanModeHandler, ExitPlanModeRequest, ExitPlanModeResult, ExtensionLaunchProfile, ExtensionLaunchProvider, ExtensionLaunchProviderResolveRequest, ExtensionLaunchProviderResolveResult, ExtensionInfo, KerberosAuthAcquireRequest, KerberosAuthConfig, KerberosAuthMode, KerberosAuthScope, ForegroundSessionInfo, GetAuthStatusResponse, GetStatusResponse, HostDiagnostics, HostErrorReportingStatus, GitHubMcpToolConfig, GitHubTelemetryNotification, GitHubTelemetryEvent, GitHubTelemetryClientInfo, GitHubTokenAcquireReason, GitHubTokenAcquireResult, GitHubTokenProvider, GitHubTokenProviderArgs, GitHubTokenProviderResult, InfiniteSessionConfig, LargeToolOutputConfig, MemoryConfiguration, UiInputOptions, MCPStdioServerConfig, MCPHTTPServerConfig, MCPServerConfig, DefaultAgentConfig, BearerTokenProvider, ExtensionContextAttachment, MessageOptions, ResponseSchema, MessageSource, ManagedSettings, ManagedSettingsPermissions, ModelBilling, ModelBillingTokenPrices, ModelBillingTokenPricesLongContext, AutoTier, CapiSessionOptions, CurrentModel, ModelSwitchAutoTierResult, ModelSwitchAutoTierStatus, ModelCapabilities, ModelCapabilitiesOverride, ModelInfo, ModelPolicy, NamedProviderConfig, PermissionHandler, PermissionRequest, PermissionRequestedData, PermissionRequestedEvent, PermissionRequestResult, AttributedPermissionResult, PermissionDecisionContext, PermissionDecisionOutcome, PermissionDecisionSource, PermissionDecisionSurface, PermissionResponseCapability, ProviderConfig, ProviderConfigModelProvider, ProviderModelConfig, ProviderTokenArgs, RemoteSessionMode, SandboxConfigSource, ResumeSessionConfig, TranscriptRecovery, SectionOverride, SectionOverrideAction, SectionTransformFn, SessionCapabilities, SessionConfig, SessionConfigBase, WorkingDirectoryTrust, SessionEvent, SessionEventHandler, SessionEventPayload, SessionEventType, SessionLifecycleEvent, SessionLifecycleEventMetadata, SessionLifecycleEventType, SessionLifecycleHandler, SessionHooks, SessionCreatedEvent, SessionDeletedEvent, SessionUpdatedEvent, SessionForegroundEvent, SessionBackgroundEvent, SessionContext, SessionListFilter, SessionMetadata, SessionUiApi, SessionFsConfig, SessionFsProvider, SessionFsByteRange, SessionFsFileInfo, SessionFsSqliteQueryResult, SessionFsSqliteQueryType, SessionFsSqliteProvider, SessionFsSqliteStatement, SessionFsSqliteTransactionErrorClass, SkillProvider, SkillProviderCallOptions, SkillProviderDescriptor, CopilotRequestContext, SystemMessageAppendConfig, SystemMessageConfig, SystemMessageCustomizeConfig, SystemMessageReplaceConfig, SystemMessageSection, TelemetryConfig, TraceContext, TraceContextProvider, Tool, ToolHandler, ToolInvocation, ToolNamespace, CurrentToolMetadata, ToolTelemetry, ToolResultObject, ToolSearchConfig, ImageGenerationConfig, TypedSessionEventHandler, TypedSessionLifecycleHandler, ZodSchema, } from "./types.js";
|
|
16
|
+
export type { AskUserVariant, CommandContext, CommandDefinition, CommandHandler, CanvasProviderIdentity, CloudSessionOptions, CloudSessionRepository, AuthIdentityMetadata, AuthInfoType, ConnectorAccountRequest, ConnectorAvailability, ConnectorCapabilities, ConnectorCatalogEntry, ConnectorCatalogResult, ConnectorCatalogStatus, ConnectorConnectRequest, ConnectorConnectResult, ConnectorContinueRequest, ConnectorDisconnectResult, ConnectorMcpStatus, ConnectorReconcileRequest, ConnectorRuntimeStatus, ConnectorSessionAccount, ConnectorSessionAccountResult, ConnectorStatus, AutoModeSwitchHandler, AutoModeSwitchRequest, AutoModeSwitchResponse, AgentStopHandler, AgentStopHookInput, AgentStopHookOutput, SubagentStartHandler, SubagentStartHookInput, SubagentStartHookOutput, SubagentStopHandler, SubagentStopHookInput, SubagentStopHookOutput, UserPromptTransformedHandler, UserPromptTransformedHookInput, UserPromptTransformedHookOutput, CopilotClientInfo, CopilotClientMode, CopilotClientOptions, EntraAuthConfig, EntraAuthOptions, EntraTokenProvider, EntraTokenProviderArgs, EntraTokenProviderResult, InstallationConfirmationHandler, InstallationConfirmationRequest, InstallationConfirmationResponse, InstallationDecision, InstallationReview, McpInstallationReview, CopilotExpAssignmentResponse, StdioRuntimeConnection, InProcessRuntimeConnection, TcpRuntimeConnection, UriRuntimeConnection, ChildProcessRuntimeConnection, CustomAgentConfig, ElicitationFieldValue, ElicitationHandler, ElicitationParams, ElicitationContext, ElicitationResult, ElicitationSchema, ElicitationSchemaField, ExpConfigEntry, ExpFlagValue, ExitPlanModeHandler, ExitPlanModeRequest, ExitPlanModeResult, ExtensionLaunchProfile, ExtensionLaunchProvider, ExtensionLaunchProviderResolveRequest, ExtensionLaunchProviderResolveResult, ExtensionInfo, KerberosAuthAcquireRequest, KerberosAuthConfig, KerberosAuthMode, KerberosAuthScope, ForegroundSessionInfo, GetAuthStatusResponse, GetStatusResponse, HostDiagnostics, HostErrorReportingStatus, GitHubMcpToolConfig, GitHubTelemetryNotification, GitHubTelemetryEvent, GitHubTelemetryClientInfo, GitHubTokenAcquireReason, GitHubTokenAcquireResult, GitHubTokenProvider, GitHubTokenProviderArgs, GitHubTokenProviderResult, InfiniteSessionConfig, LargeToolOutputConfig, MemoryConfiguration, UiInputOptions, MCPStdioServerConfig, MCPHTTPServerConfig, MCPServerConfig, DefaultAgentConfig, BearerTokenProvider, ExtensionContextAttachment, MessageOptions, ResponseSchema, MessageSource, ManagedSettings, ManagedSettingsPermissions, ModelBilling, ModelBillingTokenPrices, ModelBillingTokenPricesLongContext, AutoTier, CapiSessionOptions, CurrentModel, ModelSwitchAutoTierResult, ModelSwitchAutoTierStatus, ModelCapabilities, ModelCapabilitiesOverride, ModelInfo, ModelPolicy, NamedProviderConfig, PermissionHandler, PermissionRequest, PermissionRequestedData, PermissionRequestedEvent, PermissionRequestResult, AttributedPermissionResult, PermissionDecisionContext, PermissionDecisionOutcome, PermissionDecisionSource, PermissionDecisionSurface, PermissionResponseCapability, ProviderConfig, ProviderConfigModelProvider, ProviderModelConfig, ProviderTokenArgs, RemoteSessionMode, SandboxConfigSource, ResumeSessionConfig, TranscriptRecovery, SectionOverride, SectionOverrideAction, SectionTransformFn, SessionCapabilities, SessionConfig, SessionConfigBase, WorkingDirectoryTrust, SessionEvent, SessionEventHandler, SessionEventPayload, SessionEventType, SessionLifecycleEvent, SessionLifecycleEventMetadata, SessionLifecycleEventType, SessionLifecycleHandler, SessionHooks, SessionCreatedEvent, SessionDeletedEvent, SessionUpdatedEvent, SessionForegroundEvent, SessionBackgroundEvent, SessionContext, SessionListFilter, SessionMetadata, SessionUiApi, SessionFsConfig, SessionFsProvider, SessionFsByteRange, SessionFsFileInfo, SessionFsSqliteQueryResult, SessionFsSqliteQueryType, SessionFsSqliteProvider, SessionFsSqliteStatement, SessionFsSqliteTransactionErrorClass, SkillProvider, SessionCreationHandler, ManagedSessionInfo, SessionManagementCloseRequest, SessionManagementCloseResult, SessionManagementConfigureRequest, SessionManagementCreateHostRequest, SessionManagementCreateRequest, SessionManagementCreateResult, SessionManagementListRequest, SessionManagementListResult, SessionManagementMessageRequest, SessionManagementMessageResult, SessionManagementPolicy, SessionManagementScope, SessionManagementToolOverrides, SkillProviderCallOptions, SkillProviderDescriptor, CopilotRequestContext, SystemMessageAppendConfig, SystemMessageConfig, SystemMessageCustomizeConfig, SystemMessageReplaceConfig, SystemMessageSection, TelemetryConfig, TraceContext, TraceContextProvider, Tool, ToolHandler, ToolInvocation, ToolNamespace, CurrentToolMetadata, ToolTelemetry, ToolResultObject, ToolSearchConfig, ImageGenerationConfig, TypedSessionEventHandler, TypedSessionLifecycleHandler, ZodSchema, } from "./types.js";
|
|
17
17
|
export type { JsonValue, WorkflowRunOptions, WorkflowResumeOptions, WorkflowLimitOverrides, WorkflowResumeErrorCode, SessionWorkflowApi, WorkflowAgentOptions, WorkflowContext, WorkflowDefinition, WorkflowHandle, WorkflowJsonSchema, WorkflowLimits, WorkflowMeta, WorkflowPipelineStage, WorkflowStepOptions, WorkflowRunResult, WorkflowRunStatus, WorkflowRunSummary, WorkflowListRunsOptions, WorkflowRunsPage, WorkflowRunDetail, WorkflowProgressPage, WorkflowProgressLine, WorkflowPhaseObservation, WorkflowPhaseStatus, WorkflowAgentContextObservation, WorkflowAgentModelObservation, WorkflowAgentReasoningEffortObservation, WorkflowAgentSummary, } from "./workflow.js";
|
package/dist/session.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createSessionRpc } from "./generated/rpc.js";
|
|
2
|
-
import type { ModelSwitchAutoTierResult } from "./generated/rpc.js";
|
|
2
|
+
import type { ModelSwitchAutoTierResult, SessionManagementPolicy } from "./generated/rpc.js";
|
|
3
3
|
import type { OpenCanvasInstance } from "./generated/rpc.js";
|
|
4
|
-
import type { MessageOptions, ResponseSchema, ContextTier, ReasoningEffort, ReasoningSummary, AutoTier, ModelCapabilitiesOverride, SessionCapabilities, SessionConfig, SessionEvent, SessionEventHandler, SessionEventType, SessionUiApi, TranscriptRecovery, TypedSessionEventHandler } from "./types.js";
|
|
4
|
+
import type { MessageOptions, ResponseSchema, ContextTier, ReasoningEffort, ReasoningSummary, AutoTier, ModelCapabilitiesOverride, SessionCapabilities, SessionConfig, SessionEvent, SessionEventHandler, SessionEventType, SessionUiApi, SessionCreationHandler, TranscriptRecovery, TypedSessionEventHandler } from "./types.js";
|
|
5
5
|
import { type SessionWorkflowApi } from "./workflow.js";
|
|
6
6
|
/** Assistant message event - the final response from the assistant. */
|
|
7
7
|
export type AssistantMessageEvent = Extract<SessionEvent, {
|
|
@@ -48,6 +48,7 @@ export declare class CopilotSession {
|
|
|
48
48
|
/** Settles once every earlier `setTools` call has finished. */
|
|
49
49
|
private setToolsQueue;
|
|
50
50
|
private pendingExternalTools;
|
|
51
|
+
private pendingSessionCreations;
|
|
51
52
|
private canvases;
|
|
52
53
|
private bearerTokenProviders;
|
|
53
54
|
private commandHandlers;
|
|
@@ -60,6 +61,7 @@ export declare class CopilotSession {
|
|
|
60
61
|
private exitPlanModeHandler?;
|
|
61
62
|
private autoModeSwitchHandler?;
|
|
62
63
|
private skillProvider?;
|
|
64
|
+
private sessionCreationHandler?;
|
|
63
65
|
private hooks?;
|
|
64
66
|
private transformCallbacks?;
|
|
65
67
|
private _rpc;
|
|
@@ -244,6 +246,11 @@ export declare class CopilotSession {
|
|
|
244
246
|
private _confirm;
|
|
245
247
|
private _select;
|
|
246
248
|
private _input;
|
|
249
|
+
/**
|
|
250
|
+
* Registers the host's creation callback without enabling the tool group.
|
|
251
|
+
* Enable it separately with `session.rpc.management.configure({ enabled: true })`.
|
|
252
|
+
*/
|
|
253
|
+
setSessionCreationHandler(handler?: SessionCreationHandler): Promise<SessionManagementPolicy>;
|
|
247
254
|
private requireSkillProvider;
|
|
248
255
|
/**
|
|
249
256
|
* Runs a provider call with an abort signal tied to the runtime's request
|
package/dist/session.js
CHANGED
|
@@ -157,6 +157,11 @@ class WorkflowProgressBuffer {
|
|
|
157
157
|
if (this.closed) {
|
|
158
158
|
throw new Error("Cannot log after the workflow run has settled");
|
|
159
159
|
}
|
|
160
|
+
if (typeof text !== "string") {
|
|
161
|
+
throw new TypeError(
|
|
162
|
+
`${kind}() expects a string; got ${text === null ? "null" : typeof text}.`
|
|
163
|
+
);
|
|
164
|
+
}
|
|
160
165
|
this.pending.push({ seq: this.nextSeq++, kind, text });
|
|
161
166
|
this.scheduleFlush();
|
|
162
167
|
}
|
|
@@ -284,6 +289,7 @@ class CopilotSession {
|
|
|
284
289
|
/** Settles once every earlier `setTools` call has finished. */
|
|
285
290
|
setToolsQueue = Promise.resolve();
|
|
286
291
|
pendingExternalTools = /* @__PURE__ */ new Map();
|
|
292
|
+
pendingSessionCreations = /* @__PURE__ */ new Set();
|
|
287
293
|
canvases = /* @__PURE__ */ new Map();
|
|
288
294
|
bearerTokenProviders = /* @__PURE__ */ new Map();
|
|
289
295
|
commandHandlers = /* @__PURE__ */ new Map();
|
|
@@ -296,6 +302,7 @@ class CopilotSession {
|
|
|
296
302
|
exitPlanModeHandler;
|
|
297
303
|
autoModeSwitchHandler;
|
|
298
304
|
skillProvider;
|
|
305
|
+
sessionCreationHandler;
|
|
299
306
|
hooks;
|
|
300
307
|
transformCallbacks;
|
|
301
308
|
_rpc = null;
|
|
@@ -883,6 +890,10 @@ class CopilotSession {
|
|
|
883
890
|
controller.abort();
|
|
884
891
|
}
|
|
885
892
|
this.pendingExternalTools.clear();
|
|
893
|
+
for (const controller of this.pendingSessionCreations) {
|
|
894
|
+
controller.abort();
|
|
895
|
+
}
|
|
896
|
+
this.pendingSessionCreations.clear();
|
|
886
897
|
this.eventHandlers.clear();
|
|
887
898
|
this.typedEventHandlers.clear();
|
|
888
899
|
this.toolHandlers.clear();
|
|
@@ -893,6 +904,7 @@ class CopilotSession {
|
|
|
893
904
|
this.exitPlanModeHandler = void 0;
|
|
894
905
|
this.autoModeSwitchHandler = void 0;
|
|
895
906
|
this.skillProvider = void 0;
|
|
907
|
+
this.sessionCreationHandler = void 0;
|
|
896
908
|
this.hooks = void 0;
|
|
897
909
|
this.traceContextProvider = void 0;
|
|
898
910
|
this.bearerTokenProviders.clear();
|
|
@@ -1562,6 +1574,7 @@ class CopilotSession {
|
|
|
1562
1574
|
assertWorkflowResult(result);
|
|
1563
1575
|
return { result };
|
|
1564
1576
|
} finally {
|
|
1577
|
+
controller.abort(new DOMException("Workflow run has settled", "AbortError"));
|
|
1565
1578
|
try {
|
|
1566
1579
|
await progress.close();
|
|
1567
1580
|
} finally {
|
|
@@ -1856,6 +1869,41 @@ class CopilotSession {
|
|
|
1856
1869
|
this.assertConnected();
|
|
1857
1870
|
this.skillProvider = provider;
|
|
1858
1871
|
}
|
|
1872
|
+
/**
|
|
1873
|
+
* Registers the host's creation callback without enabling the tool group.
|
|
1874
|
+
* Enable it separately with `session.rpc.management.configure({ enabled: true })`.
|
|
1875
|
+
*/
|
|
1876
|
+
async setSessionCreationHandler(handler) {
|
|
1877
|
+
this.assertConnected();
|
|
1878
|
+
const previous = this.sessionCreationHandler;
|
|
1879
|
+
this.sessionCreationHandler = handler;
|
|
1880
|
+
try {
|
|
1881
|
+
return await this.rpc.management.configure({ hasCreateHandler: handler !== void 0 });
|
|
1882
|
+
} catch (error) {
|
|
1883
|
+
if (this.sessionCreationHandler === handler) this.sessionCreationHandler = previous;
|
|
1884
|
+
throw error;
|
|
1885
|
+
}
|
|
1886
|
+
}
|
|
1887
|
+
/** @internal */
|
|
1888
|
+
async _handleSessionManagementCreate(request, token) {
|
|
1889
|
+
this.assertConnected();
|
|
1890
|
+
const handler = this.sessionCreationHandler;
|
|
1891
|
+
if (!handler || request.parentSessionId !== this.sessionId || request.sessionId !== this.sessionId) {
|
|
1892
|
+
throw new Error("Session creation handler is unavailable");
|
|
1893
|
+
}
|
|
1894
|
+
const controller = new AbortController();
|
|
1895
|
+
this.pendingSessionCreations.add(controller);
|
|
1896
|
+
const subscription = token.onCancellationRequested(() => controller.abort());
|
|
1897
|
+
if (token.isCancellationRequested) controller.abort();
|
|
1898
|
+
try {
|
|
1899
|
+
return await handler(request, { signal: controller.signal });
|
|
1900
|
+
} catch {
|
|
1901
|
+
throw new Error("Session creation callback failed");
|
|
1902
|
+
} finally {
|
|
1903
|
+
subscription.dispose();
|
|
1904
|
+
this.pendingSessionCreations.delete(controller);
|
|
1905
|
+
}
|
|
1906
|
+
}
|
|
1859
1907
|
/**
|
|
1860
1908
|
* Handles a `skillProvider.list` request from the runtime.
|
|
1861
1909
|
*
|
package/dist/types.d.ts
CHANGED
|
@@ -9,13 +9,23 @@ export type { InstallationConfirmationHandler } from "./installationConfirmation
|
|
|
9
9
|
import type { AgentModelPolicy, AttachmentExtensionContext as GeneratedExtensionContextAttachment, AutoTier, ModelProviderRef, PermissionRequest as GeneratedPermissionRequest, PermissionRequestedData as GeneratedPermissionRequestedData, PermissionRequestedEvent as GeneratedPermissionRequestedEvent, ReasoningSummary, SessionLimitsConfig, SessionEvent as GeneratedSessionEvent } from "./generated/session-events.js";
|
|
10
10
|
import type { CopilotSession } from "./session.js";
|
|
11
11
|
import type { JsonValue } from "./workflow.js";
|
|
12
|
-
import type { ExtensionLaunchProviderHandler as GeneratedExtensionLaunchProvider, AutopilotOptions, GitHubTokenAcquireRequest, GitHubTokenAcquireResult, GitHubTelemetryNotification, HostDiagnostics, ModelBillingTokenPrices, DiagnosticsConfiguration, OpenCanvasInstance, ProtocolExternalToolNamespace, CurrentToolMetadata, KerberosAuthAcquireRequest, KerberosAuthMode, KerberosAuthScope, SandboxConfig } from "./generated/rpc.js";
|
|
12
|
+
import type { ExtensionLaunchProviderHandler as GeneratedExtensionLaunchProvider, AutopilotOptions, GitHubTokenAcquireRequest, GitHubTokenAcquireResult, GitHubTelemetryNotification, HostDiagnostics, ModelBillingTokenPrices, DiagnosticsConfiguration, OpenCanvasInstance, ProtocolExternalToolNamespace, CurrentToolMetadata, KerberosAuthAcquireRequest, KerberosAuthMode, KerberosAuthScope, SandboxConfig, SessionManagementCreateHostRequest, SessionManagementCreateResult } from "./generated/rpc.js";
|
|
13
13
|
import type { ToolSet } from "./toolSet.js";
|
|
14
14
|
export type { KerberosAuthAcquireRequest, KerberosAuthMode, KerberosAuthScope, } from "./generated/rpc.js";
|
|
15
15
|
export type { RemoteSessionMode } from "./generated/rpc.js";
|
|
16
16
|
export type { AutopilotOptions } from "./generated/rpc.js";
|
|
17
17
|
export type { CurrentToolMetadata } from "./generated/rpc.js";
|
|
18
18
|
export type { SandboxConfig, SandboxConfigSource } from "./generated/rpc.js";
|
|
19
|
+
export type { ManagedSessionInfo, SessionManagementCloseRequest, SessionManagementCloseResult, SessionManagementConfigureRequest, SessionManagementCreateHostRequest, SessionManagementCreateRequest, SessionManagementCreateResult, SessionManagementListRequest, SessionManagementListResult, SessionManagementMessageRequest, SessionManagementMessageResult, SessionManagementPolicy, SessionManagementScope, SessionManagementToolOverrides, } from "./generated/rpc.js";
|
|
20
|
+
/**
|
|
21
|
+
* Creates and supervises a separate session for this session's management tools.
|
|
22
|
+
* Use newSessionId as the child's exact identity and apply the requested launch
|
|
23
|
+
* options and permission ceiling. Route approvals independently, retain the new
|
|
24
|
+
* session, and dispose it with the host. Do not copy the parent's conversation.
|
|
25
|
+
*/
|
|
26
|
+
export type SessionCreationHandler = (request: SessionManagementCreateHostRequest, options: {
|
|
27
|
+
signal: AbortSignal;
|
|
28
|
+
}) => SessionManagementCreateResult | Promise<SessionManagementCreateResult>;
|
|
19
29
|
export type { AuthIdentityMetadata, AuthInfoType, ConnectorAccountRequest, ConnectorAvailability, ConnectorCapabilities, ConnectorCatalogEntry, ConnectorCatalogResult, ConnectorCatalogStatus, ConnectorConnectRequest, ConnectorConnectResult, ConnectorContinueRequest, ConnectorDisconnectResult, ConnectorMcpStatus, ConnectorReconcileRequest, ConnectorRuntimeStatus, ConnectorSessionAccount, ConnectorSessionAccountResult, ConnectorStatus, ExtensionLaunchProfile, ExtensionLaunchProviderResolveRequest, ExtensionLaunchProviderResolveResult, GitHubTokenAcquireReason, GitHubTokenAcquireResult, GitHubTelemetryNotification, GitHubTelemetryEvent, GitHubTelemetryClientInfo, HostDiagnostics, HostErrorReportingStatus, InstallationConfirmationRequest, InstallationConfirmationResponse, InstallationDecision, InstallationReview, McpInstallationReview, } from "./generated/rpc.js";
|
|
20
30
|
/**
|
|
21
31
|
* Arguments passed to a session's {@link GitHubTokenProvider}.
|
|
@@ -1182,6 +1192,12 @@ export interface UserInputRequest {
|
|
|
1182
1192
|
* @default true
|
|
1183
1193
|
*/
|
|
1184
1194
|
allowFreeform?: boolean;
|
|
1195
|
+
/**
|
|
1196
|
+
* Runtime ID of the pending `user_input.requested` request. Pass it as `requestId`
|
|
1197
|
+
* to answer this exact request through the session's UI RPCs. Absent when the
|
|
1198
|
+
* runtime predates this field.
|
|
1199
|
+
*/
|
|
1200
|
+
requestId?: string;
|
|
1185
1201
|
}
|
|
1186
1202
|
/**
|
|
1187
1203
|
* Response to a user input request
|
|
@@ -1214,6 +1230,12 @@ export interface ExitPlanModeRequest {
|
|
|
1214
1230
|
actions: string[];
|
|
1215
1231
|
/** The action recommended by the runtime. */
|
|
1216
1232
|
recommendedAction: string;
|
|
1233
|
+
/**
|
|
1234
|
+
* Runtime ID of the pending `exit_plan_mode.requested` request. Pass it as
|
|
1235
|
+
* `requestId` to answer this exact request through the session's UI RPCs. Absent
|
|
1236
|
+
* when the runtime predates this field.
|
|
1237
|
+
*/
|
|
1238
|
+
requestId?: string;
|
|
1217
1239
|
}
|
|
1218
1240
|
/**
|
|
1219
1241
|
* Response to an exit-plan-mode request.
|
|
@@ -1855,9 +1877,10 @@ export interface LargeToolOutputConfig {
|
|
|
1855
1877
|
outputDirectory?: string;
|
|
1856
1878
|
}
|
|
1857
1879
|
/**
|
|
1858
|
-
*
|
|
1880
|
+
* Model-defined reasoning effort for models that support it.
|
|
1881
|
+
* Use client.listModels() to discover supported values; BYOK providers can define additional levels.
|
|
1859
1882
|
*/
|
|
1860
|
-
export type ReasoningEffort =
|
|
1883
|
+
export type ReasoningEffort = string;
|
|
1861
1884
|
/**
|
|
1862
1885
|
* Context window tier for the session. "long_context" pins the session to the
|
|
1863
1886
|
* long-context tier when the selected model supports it.
|
package/docs/examples.md
CHANGED
|
@@ -198,7 +198,7 @@ Use `session.send()` to programmatically inject a new user message.
|
|
|
198
198
|
```js
|
|
199
199
|
hooks: {
|
|
200
200
|
onUserPromptSubmitted: async (input) => {
|
|
201
|
-
if (
|
|
201
|
+
if (/\burgent\b/i.test(input.prompt)) {
|
|
202
202
|
// Fire-and-forget a follow-up message
|
|
203
203
|
setTimeout(() => session.send({ prompt: "Please prioritize this." }), 0);
|
|
204
204
|
}
|
|
@@ -217,7 +217,7 @@ hooks: {
|
|
|
217
217
|
onPreToolUse: async (input) => {
|
|
218
218
|
if (input.toolName === "bash") {
|
|
219
219
|
const cmd = String(input.toolArgs?.command || "");
|
|
220
|
-
if (/rm
|
|
220
|
+
if (/rm\s+-rf/i.test(cmd) || /Remove-Item\s+.*-Recurse/i.test(cmd)) {
|
|
221
221
|
return {
|
|
222
222
|
permissionDecision: "deny",
|
|
223
223
|
permissionDecisionReason: "Destructive commands are not allowed.",
|
|
@@ -394,7 +394,7 @@ function copyToClipboard(text) {
|
|
|
394
394
|
const session = await joinSession({
|
|
395
395
|
hooks: {
|
|
396
396
|
onUserPromptSubmitted: async (input) => {
|
|
397
|
-
if (
|
|
397
|
+
if (/\bcopy\b/i.test(input.prompt)) {
|
|
398
398
|
copyNextResponse = true;
|
|
399
399
|
}
|
|
400
400
|
},
|
|
@@ -513,7 +513,7 @@ const debounce = new Map();
|
|
|
513
513
|
|
|
514
514
|
watch(cwd, { recursive: true }, (eventType, filename) => {
|
|
515
515
|
if (!filename || eventType !== "change") return;
|
|
516
|
-
if (filename.split(/[
|
|
516
|
+
if (filename.split(/[\\/]/).some((p) => IGNORE.has(p))) return;
|
|
517
517
|
|
|
518
518
|
if (debounce.has(filename)) clearTimeout(debounce.get(filename));
|
|
519
519
|
debounce.set(filename, setTimeout(() => {
|
|
@@ -524,7 +524,7 @@ watch(cwd, { recursive: true }, (eventType, filename) => {
|
|
|
524
524
|
try { if (!statSync(fullPath).isFile()) return; } catch { return; }
|
|
525
525
|
const relPath = relative(cwd, fullPath);
|
|
526
526
|
session.send({
|
|
527
|
-
prompt: `The user edited
|
|
527
|
+
prompt: `The user edited \`${relPath}\`.`,
|
|
528
528
|
attachments: [{ type: "file", path: fullPath }],
|
|
529
529
|
});
|
|
530
530
|
}, 500));
|
|
@@ -619,7 +619,7 @@ function openInEditor(filePath) {
|
|
|
619
619
|
const session = await joinSession({
|
|
620
620
|
hooks: {
|
|
621
621
|
onUserPromptSubmitted: async (input) => {
|
|
622
|
-
if (
|
|
622
|
+
if (/\bcopy this\b/i.test(input.prompt)) {
|
|
623
623
|
copyNextResponse = true;
|
|
624
624
|
}
|
|
625
625
|
return {
|
|
@@ -629,7 +629,7 @@ const session = await joinSession({
|
|
|
629
629
|
onPreToolUse: async (input) => {
|
|
630
630
|
if (input.toolName === "bash") {
|
|
631
631
|
const cmd = String(input.toolArgs?.command || "");
|
|
632
|
-
if (/rm
|
|
632
|
+
if (/rm\s+-rf\s+\//i.test(cmd) || /Remove-Item\s+.*-Recurse/i.test(cmd)) {
|
|
633
633
|
return {
|
|
634
634
|
permissionDecision: "deny",
|
|
635
635
|
permissionDecisionReason: "Destructive commands are not allowed.",
|
package/package.json
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
"url": "https://github.com/github/copilot-agent-runtime.git",
|
|
6
6
|
"directory": "src/sdk/nodejs"
|
|
7
7
|
},
|
|
8
|
-
"version": "1.0.29-preview.
|
|
9
|
-
"copilotCliVersion": "1.0.106-
|
|
8
|
+
"version": "1.0.29-preview.3",
|
|
9
|
+
"copilotCliVersion": "1.0.106-4",
|
|
10
10
|
"description": "TypeScript SDK for programmatic control of GitHub Copilot CLI via JSON-RPC",
|
|
11
11
|
"main": "./dist/cjs/index.js",
|
|
12
12
|
"types": "./dist/index.d.ts",
|
|
@@ -81,6 +81,7 @@
|
|
|
81
81
|
"@types/ws": "^8.18.1",
|
|
82
82
|
"@typescript-eslint/eslint-plugin": "^8.72.0",
|
|
83
83
|
"@typescript-eslint/parser": "^8.72.0",
|
|
84
|
+
"@vitest/coverage-v8": "^5.0.5",
|
|
84
85
|
"esbuild": "^0.28.1",
|
|
85
86
|
"eslint": "^10.13.0",
|
|
86
87
|
"file-entry-cache": "file:./scripts/eslint-file-cache",
|
|
@@ -114,18 +115,18 @@
|
|
|
114
115
|
"README.md"
|
|
115
116
|
],
|
|
116
117
|
"copilotRuntime": {
|
|
117
|
-
"sourceSha": "
|
|
118
|
-
"version": "1.0.106-
|
|
118
|
+
"sourceSha": "54bae76dc3ced5344dc60a365e81a06c787fda53",
|
|
119
|
+
"version": "1.0.106-4",
|
|
119
120
|
"visibility": "public"
|
|
120
121
|
},
|
|
121
122
|
"optionalDependencies": {
|
|
122
|
-
"@github/copilot-sdk-darwin-arm64": "1.0.29-preview.
|
|
123
|
-
"@github/copilot-sdk-darwin-x64": "1.0.29-preview.
|
|
124
|
-
"@github/copilot-sdk-linux-arm64": "1.0.29-preview.
|
|
125
|
-
"@github/copilot-sdk-linux-x64": "1.0.29-preview.
|
|
126
|
-
"@github/copilot-sdk-linuxmusl-arm64": "1.0.29-preview.
|
|
127
|
-
"@github/copilot-sdk-linuxmusl-x64": "1.0.29-preview.
|
|
128
|
-
"@github/copilot-sdk-win32-arm64": "1.0.29-preview.
|
|
129
|
-
"@github/copilot-sdk-win32-x64": "1.0.29-preview.
|
|
123
|
+
"@github/copilot-sdk-darwin-arm64": "1.0.29-preview.3",
|
|
124
|
+
"@github/copilot-sdk-darwin-x64": "1.0.29-preview.3",
|
|
125
|
+
"@github/copilot-sdk-linux-arm64": "1.0.29-preview.3",
|
|
126
|
+
"@github/copilot-sdk-linux-x64": "1.0.29-preview.3",
|
|
127
|
+
"@github/copilot-sdk-linuxmusl-arm64": "1.0.29-preview.3",
|
|
128
|
+
"@github/copilot-sdk-linuxmusl-x64": "1.0.29-preview.3",
|
|
129
|
+
"@github/copilot-sdk-win32-arm64": "1.0.29-preview.3",
|
|
130
|
+
"@github/copilot-sdk-win32-x64": "1.0.29-preview.3"
|
|
130
131
|
}
|
|
131
132
|
}
|