@github/copilot-sdk-linuxmusl-x64 1.0.13-preview.6 → 1.0.14-preview.0

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.
@@ -400,7 +400,7 @@
400
400
  "description": "Enables installed plugins for new sessions.",
401
401
  "params": {
402
402
  "$ref": "#/definitions/PluginsEnableRequest",
403
- "description": "Plugin names (or specs) to enable."
403
+ "description": "Plugin names (or specs) to enable, plus the optional working directory the repository-controlled guard is evaluated against."
404
404
  },
405
405
  "result": {
406
406
  "type": "null"
@@ -412,7 +412,7 @@
412
412
  "description": "Disables installed plugins for new sessions.",
413
413
  "params": {
414
414
  "$ref": "#/definitions/PluginsDisableRequest",
415
- "description": "Plugin names (or specs) to disable."
415
+ "description": "Plugin names (or specs) to disable, plus the optional working directory the repository-controlled guard is evaluated against."
416
416
  },
417
417
  "result": {
418
418
  "type": "null"
@@ -666,6 +666,15 @@
666
666
  "description": "Validated device-managed settings discovered before a session exists."
667
667
  },
668
668
  "stability": "experimental"
669
+ },
670
+ "clearCache": {
671
+ "rpcMethod": "managedSettings.clearCache",
672
+ "description": "Force-refreshes enterprise managed settings for every account: wipes the persistent server-policy cache (the whole `<cacheHome>/managed-settings` directory) and drops this runtime process's in-memory retained server policy. It does not itself fetch policy — the effect is that the next time a session resolves managed settings for an account, that resolution re-fetches the account's org policy from the network instead of serving a cached response. Note that `managedSettings.read` returns only device/MDM settings and never triggers the account server-policy fetch, so a host implementing \"sync account policy\" should start a fresh session resolution rather than treat a subsequent `managedSettings.read` as the refreshed org policy. Mirrors the invalidation a sign-out performs, broadened from the one signing-out account to all of them; device/MDM layers describe the machine, not the account, and are left untouched. Rejects if the on-disk cache cannot be removed.",
673
+ "params": null,
674
+ "result": {
675
+ "type": "null"
676
+ },
677
+ "stability": "experimental"
669
678
  }
670
679
  },
671
680
  "runtime": {
@@ -799,9 +808,22 @@
799
808
  "stability": "experimental",
800
809
  "visibility": "internal"
801
810
  },
811
+ "getClientMetadata": {
812
+ "rpcMethod": "sessions.getClientMetadata",
813
+ "description": "Reads client-owned metadata for multiple persisted local sessions without opening them. Results preserve request order and report missing, corrupt, unsupported, or temporarily unavailable sessions independently.",
814
+ "params": {
815
+ "$ref": "#/definitions/SessionsGetClientMetadataRequest",
816
+ "description": "Bounded batch request for client-owned metadata from persisted local sessions."
817
+ },
818
+ "result": {
819
+ "$ref": "#/definitions/SessionsGetClientMetadataResult",
820
+ "description": "Ordered client metadata outcomes for the requested local sessions."
821
+ },
822
+ "stability": "experimental"
823
+ },
802
824
  "readPersistedEvents": {
803
825
  "rpcMethod": "sessions.readPersistedEvents",
804
- "description": "Reads a page of durable events directly from a local session's persisted journal without creating, resuming, or activating the session. The initial backward read uses a bounded tail scan for fast first paint; cursor continuations preserve the session event-log paging semantics. Persisted events may omit payloads that are reconstructed only for an active session.",
826
+ "description": "Reads a page of durable events directly from a local session's persisted journal without creating, resuming, or activating the session. The first read pins the currently opened journal generation and its byte-length boundary; opaque cursor continuations remain on that generation across runtime-owned compaction, truncation, and rewrite operations, which replace the live path atomically, and events appended after the boundary are excluded. For cold hydration, await the first successful page before activation and establish lossless live-event buffering before resume; merge subsequent live events by ID, preserving persisted order and letting live payloads win. Continuations are process-local, single-use capabilities bound to the originating session and storage context and must be paged sequentially; concurrent or repeated use of the same cursor expires that duplicate read rather than reading the generation twice. A complete snapshot has cursorStatus 'ok' and hasMore false. Snapshots expire after five idle minutes, with at most eight retained per process and idle-only eviction under pressure; completion and cancelled-worker exit release their handles. No transcript copy is created, but retained handles may keep replaced files' disk blocks alive until release. Pages have a soft 1 MiB serialized event-array budget including resolved binary assets; one oversized event is returned alone to guarantee progress. Working memory also includes a record/lookahead and asset resolution; resolving the first binary reference may scan the full pinned generation to build a bounded offset index. If the snapshot expires, is evicted, is cancelled before a continuation is established, or becomes unreadable after an observable unsupported in-place shortening, the continuation returns cursorStatus 'expired' with an empty terminal page and never falls back to a different generation. A missing or initially unreadable journal is an RPC error. Persisted history excludes ephemeral events and may omit payloads that are reconstructed only for an active session; use the active session event stream for post-resume live events.",
805
827
  "params": {
806
828
  "$ref": "#/definitions/SessionsReadPersistedEventsRequest",
807
829
  "description": "Pagination options for reading an inactive or active local session's persisted event journal."
@@ -1367,6 +1389,40 @@
1367
1389
  "description": "Managed sandbox enforcement state for a session."
1368
1390
  },
1369
1391
  "stability": "experimental"
1392
+ },
1393
+ "disableForSession": {
1394
+ "rpcMethod": "session.sandbox.disableForSession",
1395
+ "description": "Disables sandboxing for the remainder of the current session and approves the referenced pending sandbox-bypass permission request. The request is rejected unless the exact request is still pending and the effective sandbox policy permits bypass.",
1396
+ "params": {
1397
+ "type": "object",
1398
+ "properties": {
1399
+ "sessionId": {
1400
+ "type": "string",
1401
+ "description": "Target session identifier"
1402
+ },
1403
+ "requestId": {
1404
+ "type": "string",
1405
+ "description": "Identifier of the exact pending sandbox-bypass permission request that authorized the session opt-out."
1406
+ },
1407
+ "decisionContext": {
1408
+ "$ref": "#/definitions/PermissionDecisionContext",
1409
+ "description": "Optional attribution for the permission decision."
1410
+ }
1411
+ },
1412
+ "required": [
1413
+ "sessionId",
1414
+ "requestId"
1415
+ ],
1416
+ "additionalProperties": false,
1417
+ "description": "Request to disable sandboxing for the current session while resolving an active sandbox-bypass permission prompt.",
1418
+ "title": "SandboxDisableForSessionRequest",
1419
+ "stability": "experimental"
1420
+ },
1421
+ "result": {
1422
+ "$ref": "#/definitions/SandboxDisableForSessionResult",
1423
+ "description": "Result of attempting to disable sandboxing for the current session."
1424
+ },
1425
+ "stability": "experimental"
1370
1426
  }
1371
1427
  },
1372
1428
  "sendSystemNotification": {
@@ -2432,6 +2488,76 @@
2432
2488
  },
2433
2489
  "stability": "experimental"
2434
2490
  },
2491
+ "pause": {
2492
+ "rpcMethod": "session.factory.pause",
2493
+ "description": "Pauses a running factory and returns its settled run envelope.",
2494
+ "params": {
2495
+ "type": "object",
2496
+ "properties": {
2497
+ "sessionId": {
2498
+ "type": "string",
2499
+ "description": "Target session identifier"
2500
+ },
2501
+ "runId": {
2502
+ "type": "string",
2503
+ "description": "Factory run identifier."
2504
+ }
2505
+ },
2506
+ "required": [
2507
+ "sessionId",
2508
+ "runId"
2509
+ ],
2510
+ "additionalProperties": false,
2511
+ "description": "Parameters for pausing a running factory.",
2512
+ "title": "FactoryPauseRequest",
2513
+ "stability": "experimental"
2514
+ },
2515
+ "result": {
2516
+ "$ref": "#/definitions/FactoryRunResult",
2517
+ "description": "Complete current or terminal factory run envelope."
2518
+ },
2519
+ "stability": "experimental"
2520
+ },
2521
+ "pauseAtCheckpoint": {
2522
+ "rpcMethod": "session.factory.pauseAtCheckpoint",
2523
+ "description": "Atomically pauses an owned factory attempt at a durable checkpoint.",
2524
+ "params": {
2525
+ "type": "object",
2526
+ "properties": {
2527
+ "sessionId": {
2528
+ "type": "string",
2529
+ "description": "Target session identifier"
2530
+ },
2531
+ "runId": {
2532
+ "type": "string",
2533
+ "description": "Factory run identifier."
2534
+ },
2535
+ "executionToken": {
2536
+ "type": "string",
2537
+ "description": "Opaque token identifying the execution attempt that reached the checkpoint."
2538
+ },
2539
+ "key": {
2540
+ "type": "string",
2541
+ "description": "Stable author-defined checkpoint key."
2542
+ }
2543
+ },
2544
+ "required": [
2545
+ "sessionId",
2546
+ "runId",
2547
+ "executionToken",
2548
+ "key"
2549
+ ],
2550
+ "additionalProperties": false,
2551
+ "description": "Parameters for an owned durable pause checkpoint.",
2552
+ "title": "FactoryPauseCheckpointRequest",
2553
+ "stability": "experimental"
2554
+ },
2555
+ "result": {
2556
+ "$ref": "#/definitions/FactoryPauseCheckpointResult"
2557
+ },
2558
+ "stability": "experimental",
2559
+ "visibility": "internal"
2560
+ },
2435
2561
  "log": {
2436
2562
  "rpcMethod": "session.factory.log",
2437
2563
  "description": "Records a batch of ordered factory progress lines.",
@@ -2612,7 +2738,7 @@
2612
2738
  "model": {
2613
2739
  "getCurrent": {
2614
2740
  "rpcMethod": "session.model.getCurrent",
2615
- "description": "Gets the currently selected model for the session.",
2741
+ "description": "Gets the session's authoritative model snapshot, including the committed Auto preference and any newer unclaimed Auto preference waiting for a future user turn.",
2616
2742
  "params": {
2617
2743
  "type": "object",
2618
2744
  "properties": {
@@ -2629,7 +2755,7 @@
2629
2755
  },
2630
2756
  "result": {
2631
2757
  "$ref": "#/definitions/CurrentModel",
2632
- "description": "The currently selected model, reasoning effort, and context tier for the session. The context tier reflects `Session.getContextTier()`, restored from the session journal on resume."
2758
+ "description": "The session's authoritative model snapshot. Auto preference fields are configuration for the virtual `auto` model and do not change the selected model identifier. The context tier reflects `Session.getContextTier()`, restored from the session journal on resume."
2633
2759
  },
2634
2760
  "stability": "experimental"
2635
2761
  },
@@ -2647,6 +2773,18 @@
2647
2773
  "type": "string",
2648
2774
  "description": "Model selection id to switch to, as returned by `list`. A bare id (e.g. `claude-sonnet-4.6`) names a Copilot (CAPI) model; a provider-qualified id (`provider/id`, e.g. `acme/claude-sonnet`) targets a registry BYOK model."
2649
2775
  },
2776
+ "autoTier": {
2777
+ "anyOf": [
2778
+ {
2779
+ "$ref": "#/definitions/AutoTier",
2780
+ "description": "Routing preference used when the session model is `auto`. `fast` is an integrator-only latency preset and is not a first-party GitHub Copilot product preference."
2781
+ },
2782
+ {
2783
+ "type": "null"
2784
+ }
2785
+ ],
2786
+ "description": "Optional Auto routing preference to stage atomically with selecting `auto`. Pass null to return to provider-default Auto routing. This field is rejected when `modelId` is not `auto`."
2787
+ },
2650
2788
  "reasoningEffort": {
2651
2789
  "type": "string",
2652
2790
  "description": "Reasoning effort level to use for the model. CAPI values are model-defined and validated against the selected model; BYOK providers may define additional values. \"none\" disables reasoning. When omitted, no effort override is applied."
@@ -2715,6 +2853,48 @@
2715
2853
  },
2716
2854
  "stability": "experimental"
2717
2855
  },
2856
+ "switchAutoTier": {
2857
+ "rpcMethod": "session.model.switchAutoTier",
2858
+ "description": "Requests an Auto preference change without changing the session's selected model. The latest unclaimed request wins; the runtime commits it only after a later prompt using the `auto` model mints a usable model and token pair. A `pending` response confirms that the request was accepted, not that it committed. Observe eventual success through `session.model_change`, failure through the ephemeral `session.auto_tier_switch_failed` event, or current unclaimed state through `session.model.getCurrent`.",
2859
+ "params": {
2860
+ "type": "object",
2861
+ "properties": {
2862
+ "sessionId": {
2863
+ "type": "string",
2864
+ "description": "Target session identifier"
2865
+ },
2866
+ "autoTier": {
2867
+ "anyOf": [
2868
+ {
2869
+ "$ref": "#/definitions/AutoTier",
2870
+ "description": "Routing preference used when the session model is `auto`. `fast` is an integrator-only latency preset and is not a first-party GitHub Copilot product preference."
2871
+ },
2872
+ {
2873
+ "type": "null"
2874
+ }
2875
+ ],
2876
+ "description": "Auto preference to activate when a future user turn using the `auto` model safely mints a replacement model and token pair. Pass null to return to provider-default Auto routing."
2877
+ },
2878
+ "source": {
2879
+ "$ref": "#/definitions/ModelChangeSource",
2880
+ "description": "Origin to record on the effective `session.model_change` event. Defaults to `sdk` when omitted."
2881
+ }
2882
+ },
2883
+ "required": [
2884
+ "sessionId",
2885
+ "autoTier"
2886
+ ],
2887
+ "additionalProperties": false,
2888
+ "description": "An Auto preference request for the session. This updates Auto configuration only; it does not change the selected model to `auto`.",
2889
+ "title": "ModelSwitchAutoTierRequest",
2890
+ "stability": "experimental"
2891
+ },
2892
+ "result": {
2893
+ "$ref": "#/definitions/ModelSwitchAutoTierResult",
2894
+ "description": "Immediate acknowledgement and Auto preference snapshot after a switch request. This result never implies that a pending preference committed."
2895
+ },
2896
+ "stability": "experimental"
2897
+ },
2718
2898
  "applyStartupOverlay": {
2719
2899
  "rpcMethod": "session.model.applyStartupOverlay",
2720
2900
  "description": "Resolves and applies organization-managed and repository model overlays.",
@@ -2749,6 +2929,10 @@
2749
2929
  "type": "string",
2750
2930
  "description": "Context tier selected by repository settings, when configured."
2751
2931
  },
2932
+ "repoAutoTier": {
2933
+ "type": "string",
2934
+ "description": "Auto routing preference selected by repository settings, when configured. Applied only when the overlay selects the Auto model; beside a concrete model it stays dormant."
2935
+ },
2752
2936
  "cliModel": {
2753
2937
  "type": "string",
2754
2938
  "description": "Model explicitly selected by the CLI, when provided."
@@ -2773,6 +2957,46 @@
2773
2957
  "stability": "experimental",
2774
2958
  "visibility": "internal"
2775
2959
  },
2960
+ "setAllowedModels": {
2961
+ "rpcMethod": "session.model.setAllowedModels",
2962
+ "description": "Replaces or clears the host-supplied model allowlist for a running session.",
2963
+ "params": {
2964
+ "type": "object",
2965
+ "properties": {
2966
+ "sessionId": {
2967
+ "type": "string",
2968
+ "description": "Target session identifier"
2969
+ },
2970
+ "allowedModels": {
2971
+ "anyOf": [
2972
+ {
2973
+ "type": "array",
2974
+ "items": {
2975
+ "type": "string"
2976
+ }
2977
+ },
2978
+ {
2979
+ "type": "null"
2980
+ }
2981
+ ],
2982
+ "minItems": 1,
2983
+ "description": "Exact model IDs to permit, or null to clear the host restriction."
2984
+ }
2985
+ },
2986
+ "required": [
2987
+ "sessionId"
2988
+ ],
2989
+ "additionalProperties": false,
2990
+ "description": "Host-supplied exact model selection IDs to allow for this running session. CAPI IDs are intersected with repository `.github/allowed_models.txt` policy; provider-qualified IDs remain exempt from repository-only policy but are restricted by this host list. Omit or pass null to clear the host restriction; an explicit empty or disjoint list is rejected. Validation and pre-selection fallback failures preserve the previous restriction. Failures after a fallback selection commits retain the new restriction and selected model; callers should inspect current session state after such an error.",
2991
+ "title": "ModelSetAllowedModelsRequest",
2992
+ "stability": "experimental"
2993
+ },
2994
+ "result": {
2995
+ "$ref": "#/definitions/ModelSetAllowedModelsResult",
2996
+ "description": "The applied host allowlist and effective session model policy after intersection."
2997
+ },
2998
+ "stability": "experimental"
2999
+ },
2776
3000
  "setReasoningEffort": {
2777
3001
  "rpcMethod": "session.model.setReasoningEffort",
2778
3002
  "description": "Updates the session's reasoning effort without changing the selected model.",
@@ -2878,6 +3102,10 @@
2878
3102
  "$ref": "#/definitions/SessionMode",
2879
3103
  "description": "The session mode the agent is operating in"
2880
3104
  },
3105
+ "expectedMode": {
3106
+ "$ref": "#/definitions/SessionMode",
3107
+ "description": "Mode the session must currently be in for the change to apply. When set and the session is in a different mode the request is a no-op and reports status 'unchanged'."
3108
+ },
2881
3109
  "inheritPlanBaseFromSessionId": {
2882
3110
  "type": "string",
2883
3111
  "description": "Session whose plan-mode base state should be inherited."
@@ -3600,6 +3828,31 @@
3600
3828
  "stability": "experimental"
3601
3829
  }
3602
3830
  },
3831
+ "autopilotObjective": {
3832
+ "getState": {
3833
+ "rpcMethod": "session.autopilotObjective.getState",
3834
+ "description": "Reads the current canonical autopilot objective state for this session.",
3835
+ "params": {
3836
+ "type": "object",
3837
+ "properties": {
3838
+ "sessionId": {
3839
+ "type": "string",
3840
+ "description": "Target session identifier"
3841
+ }
3842
+ },
3843
+ "required": [
3844
+ "sessionId"
3845
+ ],
3846
+ "additionalProperties": false,
3847
+ "description": "Identifies the target session."
3848
+ },
3849
+ "result": {
3850
+ "$ref": "#/definitions/AutopilotObjectiveGetStateResult",
3851
+ "description": "Canonical runtime state for the session's current autopilot objective."
3852
+ },
3853
+ "stability": "experimental"
3854
+ }
3855
+ },
3603
3856
  "completions": {
3604
3857
  "getTriggerCharacters": {
3605
3858
  "rpcMethod": "session.completions.getTriggerCharacters",
@@ -3700,13 +3953,30 @@
3700
3953
  "prompt": {
3701
3954
  "type": "string",
3702
3955
  "description": "Optional user prompt to combine with fleet instructions"
3956
+ },
3957
+ "attachments": {
3958
+ "type": "array",
3959
+ "items": {
3960
+ "$ref": "#/definitions/Attachment",
3961
+ "description": "A user message attachment — a file, directory, code selection, blob, GitHub-anchored pointer, or extension-supplied context payload"
3962
+ },
3963
+ "description": "Optional attachments (files, directories, selections, blobs, GitHub references) to include with the fleet request"
3964
+ },
3965
+ "billable": {
3966
+ "type": "boolean",
3967
+ "description": "If false, this request will not trigger a Premium Request Unit charge. User requests default to billable.",
3968
+ "visibility": "internal"
3969
+ },
3970
+ "wait": {
3971
+ "type": "boolean",
3972
+ "description": "If true, await completion of the agentic loop for this fleet request before returning. Defaults to false."
3703
3973
  }
3704
3974
  },
3705
3975
  "required": [
3706
3976
  "sessionId"
3707
3977
  ],
3708
3978
  "additionalProperties": false,
3709
- "description": "Optional user prompt to combine with the fleet orchestration instructions.",
3979
+ "description": "Parameters for starting fleet orchestration: an optional user prompt combined with the fleet instructions, plus the send options forwarded to the resulting turn.",
3710
3980
  "title": "FleetStartRequest",
3711
3981
  "stability": "experimental"
3712
3982
  },
@@ -3963,6 +4233,102 @@
3963
4233
  },
3964
4234
  "stability": "experimental"
3965
4235
  },
4236
+ "register": {
4237
+ "rpcMethod": "session.tasks.register",
4238
+ "description": "Registers a client-owned task, or reclaims an orphaned task belonging to the same extension principal.",
4239
+ "params": {
4240
+ "type": "object",
4241
+ "properties": {
4242
+ "sessionId": {
4243
+ "type": "string",
4244
+ "description": "Target session identifier"
4245
+ },
4246
+ "type": {
4247
+ "$ref": "#/definitions/TaskClientType",
4248
+ "const": "client",
4249
+ "description": "Task kind"
4250
+ },
4251
+ "clientTaskId": {
4252
+ "type": "string",
4253
+ "description": "Owner-scoped idempotency key used for registration and reclaim"
4254
+ },
4255
+ "description": {
4256
+ "type": "string",
4257
+ "description": "Human-readable description of the external work"
4258
+ },
4259
+ "displayName": {
4260
+ "type": "string",
4261
+ "description": "Optional short display name for the external work"
4262
+ },
4263
+ "cancellable": {
4264
+ "type": "boolean",
4265
+ "description": "Whether the owner supports runtime cancellation requests"
4266
+ },
4267
+ "expectedSequence": {
4268
+ "type": "integer",
4269
+ "minimum": 0,
4270
+ "description": "Expected current sequence for idempotent registration or orphan reclaim"
4271
+ }
4272
+ },
4273
+ "required": [
4274
+ "sessionId",
4275
+ "type",
4276
+ "clientTaskId",
4277
+ "description",
4278
+ "cancellable"
4279
+ ],
4280
+ "additionalProperties": false,
4281
+ "description": "Registers or reclaims a client-owned task.",
4282
+ "title": "TasksRegisterRequest",
4283
+ "stability": "experimental"
4284
+ },
4285
+ "result": {
4286
+ "$ref": "#/definitions/TasksRegisterResult",
4287
+ "description": "Result of registering or reclaiming a client-owned task."
4288
+ },
4289
+ "stability": "experimental"
4290
+ },
4291
+ "update": {
4292
+ "rpcMethod": "session.tasks.update",
4293
+ "description": "Publishes generic progress or a terminal outcome for a client-owned task.",
4294
+ "params": {
4295
+ "type": "object",
4296
+ "properties": {
4297
+ "sessionId": {
4298
+ "type": "string",
4299
+ "description": "Target session identifier"
4300
+ },
4301
+ "id": {
4302
+ "type": "string",
4303
+ "description": "Canonical runtime-generated task identifier"
4304
+ },
4305
+ "sequence": {
4306
+ "type": "integer",
4307
+ "minimum": 0,
4308
+ "description": "Owner update sequence to apply"
4309
+ },
4310
+ "update": {
4311
+ "$ref": "#/definitions/TaskClientUpdate",
4312
+ "description": "Progress or terminal update payload"
4313
+ }
4314
+ },
4315
+ "required": [
4316
+ "sessionId",
4317
+ "id",
4318
+ "sequence",
4319
+ "update"
4320
+ ],
4321
+ "additionalProperties": false,
4322
+ "description": "Updates a client-owned task.",
4323
+ "title": "TasksUpdateRequest",
4324
+ "stability": "experimental"
4325
+ },
4326
+ "result": {
4327
+ "$ref": "#/definitions/TasksUpdateResult",
4328
+ "description": "Result of publishing a client-owned task update."
4329
+ },
4330
+ "stability": "experimental"
4331
+ },
3966
4332
  "refresh": {
3967
4333
  "rpcMethod": "session.tasks.refresh",
3968
4334
  "description": "Refreshes metadata for any detached background shells the runtime knows about.",
@@ -6403,7 +6769,7 @@
6403
6769
  },
6404
6770
  "updateSubagentSettings": {
6405
6771
  "rpcMethod": "session.tools.updateSubagentSettings",
6406
- "description": "Updates the current session's live subagent settings after user settings change. The persisted user settings remain the source of truth for future sessions.",
6772
+ "description": "Sets the current session's live subagent settings override, which takes precedence over persisted user settings until cleared. Persisted user settings remain the source of truth for future sessions.",
6407
6773
  "params": {
6408
6774
  "type": "object",
6409
6775
  "properties": {
@@ -7872,6 +8238,74 @@
7872
8238
  },
7873
8239
  "stability": "experimental"
7874
8240
  },
8241
+ "getClientMetadata": {
8242
+ "rpcMethod": "session.metadata.getClientMetadata",
8243
+ "description": "Returns the client-owned string metadata persisted with this local session. The metadata is not included in model context, events, telemetry, snapshots, or remote exports.",
8244
+ "params": {
8245
+ "type": "object",
8246
+ "properties": {
8247
+ "sessionId": {
8248
+ "type": "string",
8249
+ "description": "Target session identifier"
8250
+ }
8251
+ },
8252
+ "required": [
8253
+ "sessionId"
8254
+ ],
8255
+ "additionalProperties": false,
8256
+ "description": "Identifies the target session."
8257
+ },
8258
+ "result": {
8259
+ "$ref": "#/definitions/ClientMetadata",
8260
+ "description": "Client-owned, case-sensitive string metadata persisted with a local session. Clients should namespace keys by owner. Keys must be non-empty and at most 256 UTF-8 bytes; keys under `copilot/` and `github/` are reserved. Values may contain at most 16 KiB of UTF-8 data. A bag may contain at most 128 entries and its serialized sidecar may contain at most 64 KiB. The runtime stores but never interprets these values."
8261
+ },
8262
+ "stability": "experimental"
8263
+ },
8264
+ "updateClientMetadata": {
8265
+ "rpcMethod": "session.metadata.updateClientMetadata",
8266
+ "description": "Atomically patches the client-owned string metadata persisted with this local session and returns the committed bag.",
8267
+ "params": {
8268
+ "type": "object",
8269
+ "properties": {
8270
+ "sessionId": {
8271
+ "type": "string",
8272
+ "description": "Target session identifier"
8273
+ },
8274
+ "clear": {
8275
+ "type": "boolean",
8276
+ "description": "Remove every existing client metadata entry before applying remove and set. Defaults to false."
8277
+ },
8278
+ "remove": {
8279
+ "type": "array",
8280
+ "items": {
8281
+ "type": "string"
8282
+ },
8283
+ "maxItems": 128,
8284
+ "description": "Case-sensitive keys to remove. Missing keys are ignored. Each key must be non-empty, at most 256 UTF-8 bytes, and outside the reserved `copilot/` and `github/` namespaces."
8285
+ },
8286
+ "set": {
8287
+ "type": "object",
8288
+ "additionalProperties": {
8289
+ "type": "string"
8290
+ },
8291
+ "description": "String entries to add or replace. Set wins when a key also appears in remove. Each key must be non-empty, at most 256 UTF-8 bytes, and outside the reserved `copilot/` and `github/` namespaces. Each value may contain at most 16 KiB of UTF-8 data.",
8292
+ "maxProperties": 128
8293
+ }
8294
+ },
8295
+ "required": [
8296
+ "sessionId"
8297
+ ],
8298
+ "additionalProperties": false,
8299
+ "description": "Atomic patch for client-owned session metadata. Operations apply in clear, remove, then set order. The resulting bag must satisfy the ClientMetadata entry and serialized-size limits. Local storage coordinates concurrent runtime processes; custom SessionFs providers must serialize writers that access the same session from multiple processes.",
8300
+ "title": "MetadataUpdateClientMetadataRequest",
8301
+ "stability": "experimental"
8302
+ },
8303
+ "result": {
8304
+ "$ref": "#/definitions/ClientMetadata",
8305
+ "description": "Client-owned, case-sensitive string metadata persisted with a local session. Clients should namespace keys by owner. Keys must be non-empty and at most 256 UTF-8 bytes; keys under `copilot/` and `github/` are reserved. Values may contain at most 16 KiB of UTF-8 data. A bag may contain at most 128 entries and its serialized sidecar may contain at most 64 KiB. The runtime stores but never interprets these values."
8306
+ },
8307
+ "stability": "experimental"
8308
+ },
7875
8309
  "isProcessing": {
7876
8310
  "rpcMethod": "session.metadata.isProcessing",
7877
8311
  "description": "Reports whether the local session is currently processing user/agent messages.",
@@ -9954,11 +10388,16 @@
9954
10388
  "runId": {
9955
10389
  "type": "string",
9956
10390
  "description": "Factory run identifier."
10391
+ },
10392
+ "executionToken": {
10393
+ "type": "string",
10394
+ "description": "Opaque token identifying the execution attempt to abort."
9957
10395
  }
9958
10396
  },
9959
10397
  "required": [
9960
10398
  "sessionId",
9961
- "runId"
10399
+ "runId",
10400
+ "executionToken"
9962
10401
  ],
9963
10402
  "additionalProperties": false,
9964
10403
  "description": "Parameters for cooperatively aborting a factory body.",
@@ -9972,6 +10411,53 @@
9972
10411
  "stability": "experimental"
9973
10412
  }
9974
10413
  },
10414
+ "tasks": {
10415
+ "cancel": {
10416
+ "rpcMethod": "tasks.cancel",
10417
+ "description": "Asks the client currently bound to a client-owned session task to confirm that its external work stopped.",
10418
+ "params": {
10419
+ "type": "object",
10420
+ "properties": {
10421
+ "sessionId": {
10422
+ "type": "string",
10423
+ "description": "Session that owns the client task"
10424
+ },
10425
+ "id": {
10426
+ "type": "string",
10427
+ "description": "Canonical runtime-generated task identifier"
10428
+ },
10429
+ "clientTaskId": {
10430
+ "type": "string",
10431
+ "description": "Owner-scoped task key included for correlation"
10432
+ },
10433
+ "cancellationId": {
10434
+ "type": "string",
10435
+ "description": "Opaque identifier shared by coalesced cancellation callers"
10436
+ },
10437
+ "reason": {
10438
+ "$ref": "#/definitions/ClientTaskCancelReason",
10439
+ "description": "Reason the runtime requests cancellation"
10440
+ }
10441
+ },
10442
+ "required": [
10443
+ "sessionId",
10444
+ "id",
10445
+ "clientTaskId",
10446
+ "cancellationId",
10447
+ "reason"
10448
+ ],
10449
+ "additionalProperties": false,
10450
+ "description": "Runtime-to-owner cancellation request for a client-owned task.",
10451
+ "title": "ClientTaskCancelRequest",
10452
+ "stability": "experimental"
10453
+ },
10454
+ "result": {
10455
+ "$ref": "#/definitions/ClientTaskCancelResult",
10456
+ "description": "Whether the client authoritatively confirmed its external work stopped."
10457
+ },
10458
+ "stability": "experimental"
10459
+ }
10460
+ },
9975
10461
  "sessionFs": {
9976
10462
  "readFile": {
9977
10463
  "rpcMethod": "sessionFs.readFile",
@@ -10053,7 +10539,7 @@
10053
10539
  },
10054
10540
  "appendFile": {
10055
10541
  "rpcMethod": "sessionFs.appendFile",
10056
- "description": "Appends content to a file in the client-provided session filesystem.",
10542
+ "description": "Appends content to a file in the client-provided session filesystem, creating parent directories as needed.",
10057
10543
  "params": {
10058
10544
  "type": "object",
10059
10545
  "properties": {
@@ -10081,7 +10567,7 @@
10081
10567
  "content"
10082
10568
  ],
10083
10569
  "additionalProperties": false,
10084
- "description": "File path, content to append, and optional mode for the client-provided session filesystem.",
10570
+ "description": "File path, content to append, and optional mode for the client-provided session filesystem. Implementations create parent directories as needed.",
10085
10571
  "title": "SessionFsAppendFileRequest",
10086
10572
  "stability": "experimental"
10087
10573
  },
@@ -11100,6 +11586,10 @@
11100
11586
  "type": "boolean",
11101
11587
  "description": "Whether the agent can be selected directly by the user. Agents marked `false` are subagent-only."
11102
11588
  },
11589
+ "disableModelInvocation": {
11590
+ "type": "boolean",
11591
+ "description": "Whether model-driven invocation is disabled for this agent."
11592
+ },
11103
11593
  "tools": {
11104
11594
  "type": "array",
11105
11595
  "items": {
@@ -12686,19 +13176,140 @@
12686
13176
  "description": "Validation errors from the most recent authentication attempt.",
12687
13177
  "title": "AuthValidationErrors"
12688
13178
  },
13179
+ "AutopilotObjectiveCreditLimit": {
13180
+ "type": "object",
13181
+ "properties": {
13182
+ "credits": {
13183
+ "type": "number",
13184
+ "description": "Configured AI-credit cap, when one is set."
13185
+ },
13186
+ "creditsUsed": {
13187
+ "type": "number",
13188
+ "description": "Window consumption in fractional AI credits, for display."
13189
+ },
13190
+ "creditsUsedNanoAiu": {
13191
+ "type": "string",
13192
+ "pattern": "^[0-9]+$",
13193
+ "description": "Exact window consumption in non-negative integer nano-AIU, encoded as a decimal string."
13194
+ }
13195
+ },
13196
+ "required": [
13197
+ "creditsUsed",
13198
+ "creditsUsedNanoAiu"
13199
+ ],
13200
+ "additionalProperties": false,
13201
+ "description": "Current per-window credit limit and consumption for an autopilot objective.",
13202
+ "title": "AutopilotObjectiveCreditLimit",
13203
+ "stability": "experimental"
13204
+ },
13205
+ "AutopilotObjectiveGetStateResult": {
13206
+ "type": "object",
13207
+ "properties": {
13208
+ "state": {
13209
+ "anyOf": [
13210
+ {
13211
+ "$ref": "#/definitions/AutopilotObjectiveState",
13212
+ "description": "Public, persistence-independent projection of an autopilot objective."
13213
+ },
13214
+ {
13215
+ "type": "null"
13216
+ }
13217
+ ],
13218
+ "description": "Current objective state, or `null` when the session has no objective."
13219
+ }
13220
+ },
13221
+ "required": [
13222
+ "state"
13223
+ ],
13224
+ "additionalProperties": false,
13225
+ "description": "Canonical runtime state for the session's current autopilot objective.",
13226
+ "title": "AutopilotObjectiveGetStateResult",
13227
+ "stability": "experimental"
13228
+ },
13229
+ "AutopilotObjectiveState": {
13230
+ "type": "object",
13231
+ "properties": {
13232
+ "id": {
13233
+ "type": "integer",
13234
+ "minimum": 1,
13235
+ "maximum": 9007199254740991,
13236
+ "description": "Session-local objective identifier."
13237
+ },
13238
+ "objective": {
13239
+ "type": "string",
13240
+ "description": "User-provided objective text."
13241
+ },
13242
+ "status": {
13243
+ "$ref": "#/definitions/AutopilotObjectiveStatus",
13244
+ "description": "Current normalized lifecycle status."
13245
+ },
13246
+ "turnCount": {
13247
+ "type": "integer",
13248
+ "minimum": 0,
13249
+ "maximum": 9007199254740991,
13250
+ "description": "Number of objective turns started."
13251
+ },
13252
+ "pauseReason": {
13253
+ "type": "string",
13254
+ "description": "Optional reason the objective is paused."
13255
+ },
13256
+ "completionSummary": {
13257
+ "type": "string",
13258
+ "description": "Optional summary recorded when the objective completed."
13259
+ },
13260
+ "creditCountNanoAiu": {
13261
+ "type": "string",
13262
+ "pattern": "^[0-9]+$",
13263
+ "description": "Exact lifetime AI-credit consumption in non-negative integer nano-AIU, encoded as a decimal string."
13264
+ },
13265
+ "creditLimit": {
13266
+ "$ref": "#/definitions/AutopilotObjectiveCreditLimit",
13267
+ "description": "Current per-window consumption and optional cap, when a credit-tracking window is present."
13268
+ }
13269
+ },
13270
+ "required": [
13271
+ "id",
13272
+ "objective",
13273
+ "status",
13274
+ "turnCount",
13275
+ "creditCountNanoAiu"
13276
+ ],
13277
+ "additionalProperties": false,
13278
+ "description": "Public, persistence-independent projection of an autopilot objective.",
13279
+ "title": "AutopilotObjectiveState",
13280
+ "stability": "experimental"
13281
+ },
13282
+ "AutopilotObjectiveStatus": {
13283
+ "type": "string",
13284
+ "enum": [
13285
+ "active",
13286
+ "paused",
13287
+ "completed"
13288
+ ],
13289
+ "description": "Current normalized autopilot objective lifecycle status.",
13290
+ "title": "AutopilotObjectiveStatus",
13291
+ "x-enumDescriptions": {
13292
+ "active": "The objective is actively running.",
13293
+ "paused": "The objective is paused and may be resumed.",
13294
+ "completed": "The objective completed."
13295
+ },
13296
+ "stability": "experimental"
13297
+ },
12689
13298
  "AutoTier": {
12690
13299
  "type": "string",
12691
13300
  "enum": [
12692
13301
  "efficiency",
12693
13302
  "balance",
12694
- "intelligence"
13303
+ "intelligence",
13304
+ "fast"
12695
13305
  ],
12696
- "description": "Routing preference used when the session model is `auto`.",
13306
+ "description": "Routing preference used when the session model is `auto`. `fast` is an integrator-only latency preset and is not a first-party GitHub Copilot product preference.",
12697
13307
  "title": "AutoTier",
12698
13308
  "x-enumDescriptions": {
12699
13309
  "efficiency": "Optimize for efficiency.",
12700
13310
  "balance": "Balance efficiency and intelligence.",
12701
- "intelligence": "Optimize for intelligence."
13311
+ "intelligence": "Optimize for intelligence.",
13312
+ "fast": "Integrator-only preset that optimizes for latency."
12702
13313
  }
12703
13314
  },
12704
13315
  "BuiltInModelCatalog": {
@@ -13311,7 +13922,7 @@
13311
13922
  "properties": {
13312
13923
  "autoTier": {
13313
13924
  "$ref": "#/definitions/AutoTier",
13314
- "description": "Routing preference used when the session model is `auto`. The runtime persists the preference across cold resume. When omitted, the default routing behavior is used. Resuming an already-resident session cannot change its preference."
13925
+ "description": "Routing preference for sessions whose model is `auto`. On create or cold resume, this establishes the preference sent as `tier` on CAPI `/auto` requests; when omitted on cold resume, the runtime restores the last committed preference. On resident resume, a different value requests a safe switch after resume succeeds and cannot change an in-flight turn. Successful switches are persisted for later cold resume. When no preference is supplied or restored, CAPI default routing is used. `fast` is an integrator-only latency preset, not a first-party GitHub Copilot product preference."
13315
13926
  },
13316
13927
  "enableWebSocketResponses": {
13317
13928
  "type": "boolean",
@@ -13414,6 +14025,10 @@
13414
14025
  "provenance": {
13415
14026
  "$ref": "#/definitions/CatalogAiSkillCandidateProvenance",
13416
14027
  "description": "Where the catalog reference was observed, without the card itself or any content digest."
14028
+ },
14029
+ "trust": {
14030
+ "$ref": "#/definitions/CatalogTrustSnapshot",
14031
+ "description": "Versioned trust metadata observed from the catalog authority. Optional for protocol-3 compatibility with runtimes that predate trust snapshots. A trust-capable runtime emits an explicit snapshot even when the authority omitted or malformed its trust field."
13417
14032
  }
13418
14033
  },
13419
14034
  "required": [
@@ -13585,7 +14200,8 @@
13585
14200
  "legacy-mcp-server-card",
13586
14201
  "ai-skill-discovery",
13587
14202
  "mcp-install-planning",
13588
- "multiple-transport-choice"
14203
+ "multiple-transport-choice",
14204
+ "trust-snapshot"
13589
14205
  ],
13590
14206
  "description": "A wire feature a caller can require of the catalog surface, negotiated per request. A grant means the runtime understands the feature's contract, not that the deployment has enabled the operation; typed unavailable results report availability separately.",
13591
14207
  "title": "CatalogCapability",
@@ -13594,7 +14210,8 @@
13594
14210
  "legacy-mcp-server-card": "Understands the legacy `application/mcp-server+json` media type.",
13595
14211
  "ai-skill-discovery": "Understands `application/ai-skill` candidates as discovery-only and typed non-installable.",
13596
14212
  "mcp-install-planning": "Understands side-effect-free MCP install-plan requests, results, and plan handles; `planning-unavailable` separately reports that planning is not enabled.",
13597
- "multiple-transport-choice": "Understands plans that enumerate every eligible transport rather than a single preferred one."
14213
+ "multiple-transport-choice": "Understands plans that enumerate every eligible transport rather than a single preferred one.",
14214
+ "trust-snapshot": "Understands versioned candidate trust snapshots. Protocol-3 callers must require this capability before the runtime adds the optional snapshot field."
13598
14215
  }
13599
14216
  },
13600
14217
  "CatalogCapabilityId": {
@@ -13886,6 +14503,10 @@
13886
14503
  "provenance": {
13887
14504
  "$ref": "#/definitions/CatalogMcpServerCandidateProvenance",
13888
14505
  "description": "Where the catalog reference was observed, without the card itself or any content digest."
14506
+ },
14507
+ "trust": {
14508
+ "$ref": "#/definitions/CatalogTrustSnapshot",
14509
+ "description": "Versioned trust metadata observed from the catalog authority. Optional for protocol-3 compatibility with runtimes that predate trust snapshots. A trust-capable runtime emits an explicit snapshot even when the authority omitted or malformed its trust field."
13889
14510
  }
13890
14511
  },
13891
14512
  "required": [
@@ -14006,10 +14627,12 @@
14006
14627
  "supportedCapabilities": {
14007
14628
  "type": "array",
14008
14629
  "items": {
14009
- "$ref": "#/definitions/CatalogCapability",
14010
- "description": "A wire feature a caller can require of the catalog surface, negotiated per request. A grant means the runtime understands the feature's contract, not that the deployment has enabled the operation; typed unavailable results report availability separately."
14630
+ "$ref": "#/definitions/CatalogCapabilityId",
14631
+ "description": "Bounded extensible wire-feature identifier. Known values are described by `CatalogCapability`; newer callers may send future identifiers so an older runtime can return a typed negotiation refusal instead of failing schema validation. Capability negotiation establishes contract understanding, while each operation's result separately reports runtime availability."
14011
14632
  },
14012
- "description": "Every wire feature this runtime understands, so the caller can retry within that contract. This list does not imply that every deployment has enabled every operation."
14633
+ "maxItems": 32,
14634
+ "uniqueItems": true,
14635
+ "description": "Capabilities this runtime can safely advertise to this caller. The complete five-capability protocol-3 legacy set is always present; every capability added after that baseline appears only when the caller required it, so an older closed-enum decoder can still consume a refusal. This list does not imply that every deployment has enabled every operation."
14013
14636
  },
14014
14637
  "unsupportedCapabilities": {
14015
14638
  "type": "array",
@@ -14327,6 +14950,414 @@
14327
14950
  "description": "A completed catalog search: inert candidate summaries, each carrying a single-use handle.",
14328
14951
  "title": "CatalogSearchSucceeded"
14329
14952
  },
14953
+ "CatalogTrustEligibility": {
14954
+ "type": "string",
14955
+ "enum": [
14956
+ "default",
14957
+ "expanded",
14958
+ "hidden",
14959
+ "unknown"
14960
+ ],
14961
+ "description": "Authority-computed exposure eligibility, kept separate from tier. The current tier-only Agent Finder response maps to `unknown`, never to a locally inferred eligibility.",
14962
+ "title": "CatalogTrustEligibility",
14963
+ "x-enumDescriptions": {
14964
+ "default": "Eligible for default catalogue exposure.",
14965
+ "expanded": "Eligible only when expanded or community results are requested.",
14966
+ "hidden": "Not eligible for normal catalogue exposure.",
14967
+ "unknown": "The authority did not supply an eligibility decision."
14968
+ }
14969
+ },
14970
+ "CatalogTrustProvenance": {
14971
+ "type": "object",
14972
+ "properties": {
14973
+ "source": {
14974
+ "$ref": "#/definitions/CatalogTrustSource",
14975
+ "description": "Bounded authority that supplied the trust field."
14976
+ },
14977
+ "observedAt": {
14978
+ "type": "string",
14979
+ "minLength": 20,
14980
+ "maxLength": 64,
14981
+ "format": "date-time",
14982
+ "description": "ISO 8601 timestamp with a timezone offset at which the runtime observed the search result carrying this trust field."
14983
+ }
14984
+ },
14985
+ "required": [
14986
+ "source",
14987
+ "observedAt"
14988
+ ],
14989
+ "additionalProperties": false,
14990
+ "description": "Where and when the runtime observed the trust metadata. Observation time is not the authority's evaluation time and must not be used to infer staleness.",
14991
+ "title": "CatalogTrustProvenance"
14992
+ },
14993
+ "CatalogTrustSnapshot": {
14994
+ "anyOf": [
14995
+ {
14996
+ "$ref": "#/definitions/CatalogTrustSnapshotCurrent",
14997
+ "description": "A recognised current Agent Finder T1 or T2 trust tier."
14998
+ },
14999
+ {
15000
+ "$ref": "#/definitions/CatalogTrustSnapshotAbsent",
15001
+ "description": "Discriminator: the authority omitted trust metadata."
15002
+ },
15003
+ {
15004
+ "$ref": "#/definitions/CatalogTrustSnapshotStale",
15005
+ "description": "Discriminator: the authority explicitly marked the assessment stale."
15006
+ },
15007
+ {
15008
+ "$ref": "#/definitions/CatalogTrustSnapshotDowngraded",
15009
+ "description": "Discriminator: the authority explicitly reported a downgraded assessment."
15010
+ },
15011
+ {
15012
+ "$ref": "#/definitions/CatalogTrustSnapshotRevoked",
15013
+ "description": "Discriminator: the authority explicitly revoked the assessment."
15014
+ },
15015
+ {
15016
+ "$ref": "#/definitions/CatalogTrustSnapshotUnsupported",
15017
+ "description": "Discriminator: the authority supplied a bounded trust value this runtime does not understand."
15018
+ },
15019
+ {
15020
+ "$ref": "#/definitions/CatalogTrustSnapshotMalformed",
15021
+ "description": "Discriminator: the trust field was empty, unbounded, or had the wrong JSON type."
15022
+ }
15023
+ ],
15024
+ "description": "A versioned, bounded trust observation carried unchanged with a catalog candidate and its private handle context. Current observations require a recognised T1/T2 tier; every non-current state structurally forbids a tier. Eligibility remains `unknown` while Agent Finder supplies no exposure decision, and states absent from its current wire are never inferred from age, relevance, popularity, or a tier transition.",
15025
+ "title": "CatalogTrustSnapshot"
15026
+ },
15027
+ "CatalogTrustSnapshotAbsent": {
15028
+ "type": "object",
15029
+ "properties": {
15030
+ "schemaVersion": {
15031
+ "$ref": "#/definitions/CatalogTrustSnapshotSchemaVersion",
15032
+ "description": "Schema version of this runtime-owned snapshot envelope."
15033
+ },
15034
+ "status": {
15035
+ "$ref": "#/definitions/CatalogTrustSnapshotAbsentStatus",
15036
+ "const": "absent",
15037
+ "description": "Discriminator: the authority omitted trust metadata."
15038
+ },
15039
+ "eligibility": {
15040
+ "$ref": "#/definitions/CatalogTrustEligibility",
15041
+ "description": "Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field."
15042
+ },
15043
+ "provenance": {
15044
+ "$ref": "#/definitions/CatalogTrustProvenance",
15045
+ "description": "Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust."
15046
+ }
15047
+ },
15048
+ "required": [
15049
+ "schemaVersion",
15050
+ "status",
15051
+ "eligibility",
15052
+ "provenance"
15053
+ ],
15054
+ "additionalProperties": false,
15055
+ "description": "Discriminator: the authority omitted trust metadata.",
15056
+ "title": "CatalogTrustSnapshotAbsent"
15057
+ },
15058
+ "CatalogTrustSnapshotAbsentStatus": {
15059
+ "type": "string",
15060
+ "enum": [
15061
+ "absent"
15062
+ ],
15063
+ "description": "The authority omitted trust metadata.",
15064
+ "title": "CatalogTrustSnapshotAbsentStatus",
15065
+ "x-enumDescriptions": {
15066
+ "absent": "The authority omitted trust metadata."
15067
+ }
15068
+ },
15069
+ "CatalogTrustSnapshotCurrent": {
15070
+ "type": "object",
15071
+ "properties": {
15072
+ "schemaVersion": {
15073
+ "$ref": "#/definitions/CatalogTrustSnapshotSchemaVersion",
15074
+ "description": "Schema version of this runtime-owned snapshot envelope."
15075
+ },
15076
+ "status": {
15077
+ "$ref": "#/definitions/CatalogTrustSnapshotCurrentStatus",
15078
+ "const": "current",
15079
+ "description": "Discriminator: a recognised current trust tier was observed."
15080
+ },
15081
+ "tier": {
15082
+ "$ref": "#/definitions/CatalogTrustTier",
15083
+ "description": "Service-computed T1 or T2 trust tier."
15084
+ },
15085
+ "eligibility": {
15086
+ "$ref": "#/definitions/CatalogTrustEligibility",
15087
+ "description": "Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field."
15088
+ },
15089
+ "provenance": {
15090
+ "$ref": "#/definitions/CatalogTrustProvenance",
15091
+ "description": "Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust."
15092
+ }
15093
+ },
15094
+ "required": [
15095
+ "schemaVersion",
15096
+ "status",
15097
+ "tier",
15098
+ "eligibility",
15099
+ "provenance"
15100
+ ],
15101
+ "additionalProperties": false,
15102
+ "description": "A recognised current Agent Finder T1 or T2 trust tier.",
15103
+ "title": "CatalogTrustSnapshotCurrent"
15104
+ },
15105
+ "CatalogTrustSnapshotCurrentStatus": {
15106
+ "type": "string",
15107
+ "enum": [
15108
+ "current"
15109
+ ],
15110
+ "description": "A recognised T1 or T2 service tier was observed.",
15111
+ "title": "CatalogTrustSnapshotCurrentStatus",
15112
+ "x-enumDescriptions": {
15113
+ "current": "A recognised T1 or T2 service tier was observed."
15114
+ }
15115
+ },
15116
+ "CatalogTrustSnapshotDowngraded": {
15117
+ "type": "object",
15118
+ "properties": {
15119
+ "schemaVersion": {
15120
+ "$ref": "#/definitions/CatalogTrustSnapshotSchemaVersion",
15121
+ "description": "Schema version of this runtime-owned snapshot envelope."
15122
+ },
15123
+ "status": {
15124
+ "$ref": "#/definitions/CatalogTrustSnapshotDowngradedStatus",
15125
+ "const": "downgraded",
15126
+ "description": "Discriminator: the authority explicitly reported a downgraded assessment."
15127
+ },
15128
+ "eligibility": {
15129
+ "$ref": "#/definitions/CatalogTrustEligibility",
15130
+ "description": "Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field."
15131
+ },
15132
+ "provenance": {
15133
+ "$ref": "#/definitions/CatalogTrustProvenance",
15134
+ "description": "Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust."
15135
+ }
15136
+ },
15137
+ "required": [
15138
+ "schemaVersion",
15139
+ "status",
15140
+ "eligibility",
15141
+ "provenance"
15142
+ ],
15143
+ "additionalProperties": false,
15144
+ "description": "Discriminator: the authority explicitly reported a downgraded assessment.",
15145
+ "title": "CatalogTrustSnapshotDowngraded"
15146
+ },
15147
+ "CatalogTrustSnapshotDowngradedStatus": {
15148
+ "type": "string",
15149
+ "enum": [
15150
+ "downgraded"
15151
+ ],
15152
+ "description": "The authority explicitly reported a downgraded assessment.",
15153
+ "title": "CatalogTrustSnapshotDowngradedStatus",
15154
+ "x-enumDescriptions": {
15155
+ "downgraded": "The authority explicitly reported a downgraded assessment."
15156
+ }
15157
+ },
15158
+ "CatalogTrustSnapshotMalformed": {
15159
+ "type": "object",
15160
+ "properties": {
15161
+ "schemaVersion": {
15162
+ "$ref": "#/definitions/CatalogTrustSnapshotSchemaVersion",
15163
+ "description": "Schema version of this runtime-owned snapshot envelope."
15164
+ },
15165
+ "status": {
15166
+ "$ref": "#/definitions/CatalogTrustSnapshotMalformedStatus",
15167
+ "const": "malformed",
15168
+ "description": "Discriminator: the trust field was empty, unbounded, or had the wrong JSON type."
15169
+ },
15170
+ "eligibility": {
15171
+ "$ref": "#/definitions/CatalogTrustEligibility",
15172
+ "description": "Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field."
15173
+ },
15174
+ "provenance": {
15175
+ "$ref": "#/definitions/CatalogTrustProvenance",
15176
+ "description": "Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust."
15177
+ }
15178
+ },
15179
+ "required": [
15180
+ "schemaVersion",
15181
+ "status",
15182
+ "eligibility",
15183
+ "provenance"
15184
+ ],
15185
+ "additionalProperties": false,
15186
+ "description": "Discriminator: the trust field was empty, unbounded, or had the wrong JSON type.",
15187
+ "title": "CatalogTrustSnapshotMalformed"
15188
+ },
15189
+ "CatalogTrustSnapshotMalformedStatus": {
15190
+ "type": "string",
15191
+ "enum": [
15192
+ "malformed"
15193
+ ],
15194
+ "description": "The trust field was empty, unbounded, or had the wrong JSON type.",
15195
+ "title": "CatalogTrustSnapshotMalformedStatus",
15196
+ "x-enumDescriptions": {
15197
+ "malformed": "The trust field was empty, unbounded, or had the wrong JSON type."
15198
+ }
15199
+ },
15200
+ "CatalogTrustSnapshotRevoked": {
15201
+ "type": "object",
15202
+ "properties": {
15203
+ "schemaVersion": {
15204
+ "$ref": "#/definitions/CatalogTrustSnapshotSchemaVersion",
15205
+ "description": "Schema version of this runtime-owned snapshot envelope."
15206
+ },
15207
+ "status": {
15208
+ "$ref": "#/definitions/CatalogTrustSnapshotRevokedStatus",
15209
+ "const": "revoked",
15210
+ "description": "Discriminator: the authority explicitly revoked the assessment."
15211
+ },
15212
+ "eligibility": {
15213
+ "$ref": "#/definitions/CatalogTrustEligibility",
15214
+ "description": "Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field."
15215
+ },
15216
+ "provenance": {
15217
+ "$ref": "#/definitions/CatalogTrustProvenance",
15218
+ "description": "Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust."
15219
+ }
15220
+ },
15221
+ "required": [
15222
+ "schemaVersion",
15223
+ "status",
15224
+ "eligibility",
15225
+ "provenance"
15226
+ ],
15227
+ "additionalProperties": false,
15228
+ "description": "Discriminator: the authority explicitly revoked the assessment.",
15229
+ "title": "CatalogTrustSnapshotRevoked"
15230
+ },
15231
+ "CatalogTrustSnapshotRevokedStatus": {
15232
+ "type": "string",
15233
+ "enum": [
15234
+ "revoked"
15235
+ ],
15236
+ "description": "The authority explicitly revoked its assessment.",
15237
+ "title": "CatalogTrustSnapshotRevokedStatus",
15238
+ "x-enumDescriptions": {
15239
+ "revoked": "The authority explicitly revoked its assessment."
15240
+ }
15241
+ },
15242
+ "CatalogTrustSnapshotSchemaVersion": {
15243
+ "type": "string",
15244
+ "enum": [
15245
+ "v1"
15246
+ ],
15247
+ "description": "Schema version of the catalogue trust snapshot envelope",
15248
+ "title": "CatalogTrustSnapshotSchemaVersion",
15249
+ "x-enumDescriptions": {
15250
+ "v1": "Initial envelope carrying one bounded service tier or one explicit unavailable state."
15251
+ }
15252
+ },
15253
+ "CatalogTrustSnapshotStale": {
15254
+ "type": "object",
15255
+ "properties": {
15256
+ "schemaVersion": {
15257
+ "$ref": "#/definitions/CatalogTrustSnapshotSchemaVersion",
15258
+ "description": "Schema version of this runtime-owned snapshot envelope."
15259
+ },
15260
+ "status": {
15261
+ "$ref": "#/definitions/CatalogTrustSnapshotStaleStatus",
15262
+ "const": "stale",
15263
+ "description": "Discriminator: the authority explicitly marked the assessment stale."
15264
+ },
15265
+ "eligibility": {
15266
+ "$ref": "#/definitions/CatalogTrustEligibility",
15267
+ "description": "Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field."
15268
+ },
15269
+ "provenance": {
15270
+ "$ref": "#/definitions/CatalogTrustProvenance",
15271
+ "description": "Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust."
15272
+ }
15273
+ },
15274
+ "required": [
15275
+ "schemaVersion",
15276
+ "status",
15277
+ "eligibility",
15278
+ "provenance"
15279
+ ],
15280
+ "additionalProperties": false,
15281
+ "description": "Discriminator: the authority explicitly marked the assessment stale.",
15282
+ "title": "CatalogTrustSnapshotStale"
15283
+ },
15284
+ "CatalogTrustSnapshotStaleStatus": {
15285
+ "type": "string",
15286
+ "enum": [
15287
+ "stale"
15288
+ ],
15289
+ "description": "The authority explicitly marked its assessment stale.",
15290
+ "title": "CatalogTrustSnapshotStaleStatus",
15291
+ "x-enumDescriptions": {
15292
+ "stale": "The authority explicitly marked its assessment stale."
15293
+ }
15294
+ },
15295
+ "CatalogTrustSnapshotUnsupported": {
15296
+ "type": "object",
15297
+ "properties": {
15298
+ "schemaVersion": {
15299
+ "$ref": "#/definitions/CatalogTrustSnapshotSchemaVersion",
15300
+ "description": "Schema version of this runtime-owned snapshot envelope."
15301
+ },
15302
+ "status": {
15303
+ "$ref": "#/definitions/CatalogTrustSnapshotUnsupportedStatus",
15304
+ "const": "unsupported",
15305
+ "description": "Discriminator: the authority supplied a bounded trust value this runtime does not understand."
15306
+ },
15307
+ "eligibility": {
15308
+ "$ref": "#/definitions/CatalogTrustEligibility",
15309
+ "description": "Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field."
15310
+ },
15311
+ "provenance": {
15312
+ "$ref": "#/definitions/CatalogTrustProvenance",
15313
+ "description": "Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust."
15314
+ }
15315
+ },
15316
+ "required": [
15317
+ "schemaVersion",
15318
+ "status",
15319
+ "eligibility",
15320
+ "provenance"
15321
+ ],
15322
+ "additionalProperties": false,
15323
+ "description": "Discriminator: the authority supplied a bounded trust value this runtime does not understand.",
15324
+ "title": "CatalogTrustSnapshotUnsupported"
15325
+ },
15326
+ "CatalogTrustSnapshotUnsupportedStatus": {
15327
+ "type": "string",
15328
+ "enum": [
15329
+ "unsupported"
15330
+ ],
15331
+ "description": "The authority supplied a bounded trust value this runtime does not understand.",
15332
+ "title": "CatalogTrustSnapshotUnsupportedStatus",
15333
+ "x-enumDescriptions": {
15334
+ "unsupported": "The authority supplied a bounded trust value this runtime does not understand."
15335
+ }
15336
+ },
15337
+ "CatalogTrustSource": {
15338
+ "type": "string",
15339
+ "enum": [
15340
+ "agent-finder"
15341
+ ],
15342
+ "description": "Bounded authority that supplied a catalogue trust observation",
15343
+ "title": "CatalogTrustSource",
15344
+ "x-enumDescriptions": {
15345
+ "agent-finder": "GitHub Agent Finder supplied the trust field on its search result."
15346
+ }
15347
+ },
15348
+ "CatalogTrustTier": {
15349
+ "type": "string",
15350
+ "enum": [
15351
+ "T1",
15352
+ "T2"
15353
+ ],
15354
+ "description": "Service-computed trust tier currently emitted by Agent Finder. It is independent of search score, popularity, and client-side ranking.",
15355
+ "title": "CatalogTrustTier",
15356
+ "x-enumDescriptions": {
15357
+ "T1": "Tier one as assigned by the catalogue authority.",
15358
+ "T2": "Tier two as assigned by the catalogue authority."
15359
+ }
15360
+ },
14330
15361
  "CatalogUnavailableError": {
14331
15362
  "type": "object",
14332
15363
  "properties": {
@@ -14501,6 +15532,79 @@
14501
15532
  "description": "The request asked for a candidate kind this runtime does not serve.",
14502
15533
  "title": "CatalogUnsupportedKindError"
14503
15534
  },
15535
+ "ClientMetadata": {
15536
+ "type": "object",
15537
+ "additionalProperties": {
15538
+ "type": "string"
15539
+ },
15540
+ "description": "Client-owned, case-sensitive string metadata persisted with a local session. Clients should namespace keys by owner. Keys must be non-empty and at most 256 UTF-8 bytes; keys under `copilot/` and `github/` are reserved. Values may contain at most 16 KiB of UTF-8 data. A bag may contain at most 128 entries and its serialized sidecar may contain at most 64 KiB. The runtime stores but never interprets these values.",
15541
+ "title": "ClientMetadata",
15542
+ "maxProperties": 128
15543
+ },
15544
+ "ClientTaskCancelReason": {
15545
+ "type": "string",
15546
+ "enum": [
15547
+ "cancel_requested",
15548
+ "session_shutdown"
15549
+ ],
15550
+ "description": "Why the runtime requests client-task cancellation.",
15551
+ "title": "ClientTaskCancelReason",
15552
+ "x-enumDescriptions": {
15553
+ "cancel_requested": "A caller requested task cancellation.",
15554
+ "session_shutdown": "The session is shutting down."
15555
+ }
15556
+ },
15557
+ "ClientTaskCancelRequest": {
15558
+ "type": "object",
15559
+ "properties": {
15560
+ "sessionId": {
15561
+ "type": "string",
15562
+ "description": "Session that owns the client task"
15563
+ },
15564
+ "id": {
15565
+ "type": "string",
15566
+ "description": "Canonical runtime-generated task identifier"
15567
+ },
15568
+ "clientTaskId": {
15569
+ "type": "string",
15570
+ "description": "Owner-scoped task key included for correlation"
15571
+ },
15572
+ "cancellationId": {
15573
+ "type": "string",
15574
+ "description": "Opaque identifier shared by coalesced cancellation callers"
15575
+ },
15576
+ "reason": {
15577
+ "$ref": "#/definitions/ClientTaskCancelReason",
15578
+ "description": "Reason the runtime requests cancellation"
15579
+ }
15580
+ },
15581
+ "required": [
15582
+ "sessionId",
15583
+ "id",
15584
+ "clientTaskId",
15585
+ "cancellationId",
15586
+ "reason"
15587
+ ],
15588
+ "additionalProperties": false,
15589
+ "description": "Runtime-to-owner cancellation request for a client-owned task.",
15590
+ "title": "ClientTaskCancelRequest",
15591
+ "stability": "experimental"
15592
+ },
15593
+ "ClientTaskCancelResult": {
15594
+ "type": "object",
15595
+ "properties": {
15596
+ "cancelled": {
15597
+ "type": "boolean",
15598
+ "description": "True only when the owner confirms that external work stopped before responding"
15599
+ }
15600
+ },
15601
+ "required": [
15602
+ "cancelled"
15603
+ ],
15604
+ "additionalProperties": false,
15605
+ "description": "Whether the client authoritatively confirmed its external work stopped.",
15606
+ "title": "ClientTaskCancelResult"
15607
+ },
14504
15608
  "CommandList": {
14505
15609
  "type": "object",
14506
15610
  "properties": {
@@ -14937,6 +16041,14 @@
14937
16041
  "$ref": "#/definitions/ConnectClientInfo",
14938
16042
  "description": "Identity of the integrating host. Optional; omit it to keep the default attribution."
14939
16043
  },
16044
+ "supportedTaskKinds": {
16045
+ "type": "array",
16046
+ "items": {
16047
+ "$ref": "#/definitions/TaskKind",
16048
+ "description": "Closed set of public task kinds a connection can negotiate."
16049
+ },
16050
+ "description": "Task kinds this connection can decode when observing session tasks. Omit to retain agent and shell compatibility."
16051
+ },
14940
16052
  "token": {
14941
16053
  "type": "string",
14942
16054
  "description": "Connection token; required when the server was started with COPILOT_CONNECTION_TOKEN"
@@ -14963,6 +16075,14 @@
14963
16075
  "version": {
14964
16076
  "type": "string",
14965
16077
  "description": "Server package version"
16078
+ },
16079
+ "taskKinds": {
16080
+ "type": "array",
16081
+ "items": {
16082
+ "$ref": "#/definitions/TaskKind",
16083
+ "description": "Closed set of public task kinds a connection can negotiate."
16084
+ },
16085
+ "description": "Task kinds the server may return to this connection."
14966
16086
  }
14967
16087
  },
14968
16088
  "required": [
@@ -15199,6 +16319,10 @@
15199
16319
  {
15200
16320
  "type": "object",
15201
16321
  "properties": {
16322
+ "id": {
16323
+ "type": "number",
16324
+ "description": "Numeric database ID of the organization."
16325
+ },
15202
16326
  "login": {
15203
16327
  "anyOf": [
15204
16328
  {
@@ -15250,7 +16374,7 @@
15250
16374
  "type": "null"
15251
16375
  }
15252
16376
  ],
15253
- "description": "Organizations the user belongs to, each with an optional login and display name."
16377
+ "description": "Organizations the user belongs to, each with an optional ID, login, and display name."
15254
16378
  },
15255
16379
  "codex_agent_enabled": {
15256
16380
  "type": "boolean",
@@ -15616,10 +16740,38 @@
15616
16740
  "contextTier": {
15617
16741
  "$ref": "#/definitions/ContextTier",
15618
16742
  "description": "Context tier for models that support multiple context-window sizes."
16743
+ },
16744
+ "autoTier": {
16745
+ "$ref": "#/definitions/AutoTier",
16746
+ "description": "Auto preference currently committed for the session. This can remain available while another model is selected so a later switch to `auto` can reuse it."
16747
+ },
16748
+ "pendingAutoTier": {
16749
+ "anyOf": [
16750
+ {
16751
+ "$ref": "#/definitions/AutoTier",
16752
+ "description": "Routing preference used when the session model is `auto`. `fast` is an integrator-only latency preset and is not a first-party GitHub Copilot product preference."
16753
+ },
16754
+ {
16755
+ "type": "null"
16756
+ }
16757
+ ],
16758
+ "description": "Latest unclaimed Auto preference waiting for a future user turn. Null means the pending request is returning to provider-default routing."
16759
+ },
16760
+ "activatingAutoTier": {
16761
+ "anyOf": [
16762
+ {
16763
+ "$ref": "#/definitions/AutoTier",
16764
+ "description": "Routing preference used when the session model is `auto`. `fast` is an integrator-only latency preset and is not a first-party GitHub Copilot product preference."
16765
+ },
16766
+ {
16767
+ "type": "null"
16768
+ }
16769
+ ],
16770
+ "description": "Auto preference currently claimed by an in-progress activation. Null means the activation is returning to provider-default routing."
15619
16771
  }
15620
16772
  },
15621
16773
  "additionalProperties": false,
15622
- "description": "The currently selected model, reasoning effort, and context tier for the session. The context tier reflects `Session.getContextTier()`, restored from the session journal on resume.",
16774
+ "description": "The session's authoritative model snapshot. Auto preference fields are configuration for the virtual `auto` model and do not change the selected model identifier. The context tier reflects `Session.getContextTier()`, restored from the session journal on resume.",
15623
16775
  "title": "CurrentModel"
15624
16776
  },
15625
16777
  "CurrentToolMetadata": {
@@ -16217,6 +17369,10 @@
16217
17369
  "type": "string",
16218
17370
  "description": "Plugin version that provided this server, when source is plugin."
16219
17371
  },
17372
+ "effectiveSource": {
17373
+ "$ref": "#/definitions/McpSourceRef",
17374
+ "description": "Canonical identity and location of the effective server declaration."
17375
+ },
16220
17376
  "enabled": {
16221
17377
  "type": "boolean",
16222
17378
  "description": "Whether the server is enabled (not in the disabled list)"
@@ -16491,11 +17647,11 @@
16491
17647
  "ok",
16492
17648
  "expired"
16493
17649
  ],
16494
- "description": "Cursor status: 'ok' means the cursor was applied successfully; 'expired' means the cursor referred to an event that no longer exists in history (e.g. truncated or compacted away) and the read fell back to a boundary of the remaining history (the beginning for a forward read, the tail for a backward read). The fallback page is a fresh boundary snapshot, not a continuation of the requested cursor, so it may overlap already-rendered events; on 'expired' a consumer should reset/rebase its pagination state (or deduplicate by event id) before continuing from the returned cursor.",
17650
+ "description": "Cursor status: 'ok' means the read succeeded against the requested history; 'expired' means the requested continuation is unavailable. Recovery is endpoint-specific: session.eventLog.read returns a boundary window of remaining active history that may overlap prior pages, while sessions.readPersistedEvents returns an empty terminal page and never switches journal generations. An expired persisted read is not successful completion; a complete persisted snapshot requires cursorStatus 'ok' and hasMore false.",
16495
17651
  "title": "EventsCursorStatus",
16496
17652
  "x-enumDescriptions": {
16497
- "ok": "The cursor was applied successfully.",
16498
- "expired": "The cursor referred to history that is no longer available."
17653
+ "ok": "The read succeeded against the requested history.",
17654
+ "expired": "The requested continuation is unavailable; see the endpoint's recovery semantics."
16499
17655
  }
16500
17656
  },
16501
17657
  "EventsReadDirection": {
@@ -16527,11 +17683,11 @@
16527
17683
  },
16528
17684
  "hasMore": {
16529
17685
  "type": "boolean",
16530
- "description": "True when more events are available in the read's direction. For a forward read, true means the batch returned `max` events and more are available immediately. For a backward read, true means older persisted events remain before the returned window."
17686
+ "description": "True when more events are available in the read's direction. For a backward read, true means older persisted events remain before the returned window. A persisted-event page may contain fewer than `max` events because of its byte budget while still reporting hasMore true; continue according to this flag rather than the event count."
16531
17687
  },
16532
17688
  "cursorStatus": {
16533
17689
  "$ref": "#/definitions/EventsCursorStatus",
16534
- "description": "Cursor status: 'ok' means the cursor was applied successfully; 'expired' means the cursor referred to an event that no longer exists in history (e.g. truncated or compacted away) and the read fell back to a boundary of the remaining history. For a forward read the fallback starts from the beginning of the remaining history; for a backward read it falls back to the tail (the newest window). Because the fallback page is a fresh boundary snapshot rather than a continuation of the requested cursor, it may overlap events the consumer has already rendered — a backward fallback to the tail in particular can repeat the newest window. On 'expired', consumers should reset or rebase their local pagination state (or deduplicate by event id) before continuing from the returned cursor rather than blindly appending/prepending the fallback page."
17690
+ "description": "Cursor status: 'ok' means the cursor was applied successfully. For session.eventLog.read, 'expired' means the cursor referred to an event that no longer exists in active history and the read fell back to a boundary of the remaining history: the beginning for a forward read or the newest window for a backward read. That fallback may overlap already rendered events, so active-session consumers should reset, rebase, or deduplicate before continuing. sessions.readPersistedEvents has stricter snapshot semantics: 'expired' returns an empty terminal page and never switches to a replacement journal generation. Other persisted-read I/O failures are RPC errors with diagnostics, not cursor expiry."
16535
17691
  }
16536
17692
  },
16537
17693
  "required": [
@@ -17239,10 +18395,15 @@
17239
18395
  "runId": {
17240
18396
  "type": "string",
17241
18397
  "description": "Factory run identifier."
18398
+ },
18399
+ "executionToken": {
18400
+ "type": "string",
18401
+ "description": "Opaque token identifying the execution attempt to abort."
17242
18402
  }
17243
18403
  },
17244
18404
  "required": [
17245
- "runId"
18405
+ "runId",
18406
+ "executionToken"
17246
18407
  ],
17247
18408
  "additionalProperties": false,
17248
18409
  "description": "Parameters for cooperatively aborting a factory body.",
@@ -17273,15 +18434,15 @@
17273
18434
  },
17274
18435
  "reasoningEffort": {
17275
18436
  "type": "string",
17276
- "description": "Optional reasoning effort for the subagent. This field is accepted but not yet honored."
18437
+ "description": "Optional reasoning effort override for the subagent."
17277
18438
  },
17278
18439
  "contextTier": {
17279
18440
  "$ref": "#/definitions/ContextTier",
17280
- "description": "Optional context tier for the subagent. This field is accepted but not yet honored."
18441
+ "description": "Optional context tier override for the subagent."
17281
18442
  },
17282
18443
  "agent": {
17283
18444
  "type": "string",
17284
- "description": "Optional custom agent name for the subagent. This field is accepted but not yet honored."
18445
+ "description": "Optional built-in or custom agent name whose definition configures the subagent."
17285
18446
  }
17286
18447
  },
17287
18448
  "additionalProperties": false,
@@ -17822,6 +18983,111 @@
17822
18983
  "title": "FactoryLogRequest",
17823
18984
  "stability": "experimental"
17824
18985
  },
18986
+ "FactoryPauseCheckpointAction": {
18987
+ "type": "string",
18988
+ "enum": [
18989
+ "continue",
18990
+ "pause"
18991
+ ],
18992
+ "description": "Action the runtime selected for a durable factory pause checkpoint.",
18993
+ "title": "FactoryPauseCheckpointAction",
18994
+ "x-enumDescriptions": {
18995
+ "continue": "The checkpoint was committed by a prior paused attempt, so execution may continue.",
18996
+ "pause": "This attempt claimed the checkpoint and must cooperatively stop."
18997
+ }
18998
+ },
18999
+ "FactoryPauseCheckpointRequest": {
19000
+ "type": "object",
19001
+ "properties": {
19002
+ "runId": {
19003
+ "type": "string",
19004
+ "description": "Factory run identifier."
19005
+ },
19006
+ "executionToken": {
19007
+ "type": "string",
19008
+ "description": "Opaque token identifying the execution attempt that reached the checkpoint."
19009
+ },
19010
+ "key": {
19011
+ "type": "string",
19012
+ "description": "Stable author-defined checkpoint key."
19013
+ }
19014
+ },
19015
+ "required": [
19016
+ "runId",
19017
+ "executionToken",
19018
+ "key"
19019
+ ],
19020
+ "additionalProperties": false,
19021
+ "description": "Parameters for an owned durable pause checkpoint.",
19022
+ "title": "FactoryPauseCheckpointRequest",
19023
+ "stability": "experimental"
19024
+ },
19025
+ "FactoryPauseCheckpointResult": {
19026
+ "type": "object",
19027
+ "properties": {
19028
+ "action": {
19029
+ "$ref": "#/definitions/FactoryPauseCheckpointAction",
19030
+ "description": "Whether this execution attempt must pause or may continue."
19031
+ }
19032
+ },
19033
+ "required": [
19034
+ "action"
19035
+ ],
19036
+ "additionalProperties": false
19037
+ },
19038
+ "FactoryPauseInfo": {
19039
+ "anyOf": [
19040
+ {
19041
+ "type": "object",
19042
+ "properties": {
19043
+ "type": {
19044
+ "type": "string",
19045
+ "const": "user",
19046
+ "description": "Factory pause initiator discriminator."
19047
+ }
19048
+ },
19049
+ "required": [
19050
+ "type"
19051
+ ]
19052
+ },
19053
+ {
19054
+ "type": "object",
19055
+ "properties": {
19056
+ "key": {
19057
+ "type": "string",
19058
+ "description": "Stable author-defined checkpoint key that initiated the pause."
19059
+ },
19060
+ "type": {
19061
+ "type": "string",
19062
+ "const": "checkpoint",
19063
+ "description": "Factory pause initiator discriminator."
19064
+ }
19065
+ },
19066
+ "required": [
19067
+ "type",
19068
+ "key"
19069
+ ]
19070
+ }
19071
+ ],
19072
+ "description": "Durable metadata describing who initiated a factory pause.",
19073
+ "title": "FactoryPauseInfo"
19074
+ },
19075
+ "FactoryPauseRequest": {
19076
+ "type": "object",
19077
+ "properties": {
19078
+ "runId": {
19079
+ "type": "string",
19080
+ "description": "Factory run identifier."
19081
+ }
19082
+ },
19083
+ "required": [
19084
+ "runId"
19085
+ ],
19086
+ "additionalProperties": false,
19087
+ "description": "Parameters for pausing a running factory.",
19088
+ "title": "FactoryPauseRequest",
19089
+ "stability": "experimental"
19090
+ },
17825
19091
  "FactoryPhaseObservation": {
17826
19092
  "type": "object",
17827
19093
  "properties": {
@@ -18209,6 +19475,10 @@
18209
19475
  ],
18210
19476
  "description": "Terminal run outcome, or null while nonterminal."
18211
19477
  },
19478
+ "canResume": {
19479
+ "type": "boolean",
19480
+ "description": "Whether the durable run state currently passes runtime resume eligibility checks."
19481
+ },
18212
19482
  "phases": {
18213
19483
  "type": "array",
18214
19484
  "items": {
@@ -18250,6 +19520,7 @@
18250
19520
  "observedAt",
18251
19521
  "activeSegmentStartedAt",
18252
19522
  "terminal",
19523
+ "canResume",
18253
19524
  "phases",
18254
19525
  "agents",
18255
19526
  "progress"
@@ -18273,6 +19544,10 @@
18273
19544
  "exclusiveMinimum": 0,
18274
19545
  "description": "Approved effective ceiling that was reached."
18275
19546
  },
19547
+ "suggestedValue": {
19548
+ "type": "number",
19549
+ "description": "Suggested larger ceiling when the runtime can derive one safely."
19550
+ },
18276
19551
  "runId": {
18277
19552
  "type": "string",
18278
19553
  "description": "Factory run identifier."
@@ -18412,25 +19687,37 @@
18412
19687
  "type": "object",
18413
19688
  "properties": {
18414
19689
  "maxConcurrentSubagents": {
18415
- "type": "integer",
19690
+ "type": [
19691
+ "integer",
19692
+ "null"
19693
+ ],
18416
19694
  "minimum": 0,
18417
19695
  "exclusiveMinimum": 0,
18418
19696
  "description": "Maximum number of factory subagents that may run concurrently."
18419
19697
  },
18420
19698
  "maxTotalSubagents": {
18421
- "type": "integer",
19699
+ "type": [
19700
+ "integer",
19701
+ "null"
19702
+ ],
18422
19703
  "minimum": 0,
18423
19704
  "exclusiveMinimum": 0,
18424
19705
  "description": "Maximum total number of factory subagents that may be admitted."
18425
19706
  },
18426
19707
  "timeoutSeconds": {
18427
- "type": "number",
19708
+ "type": [
19709
+ "number",
19710
+ "null"
19711
+ ],
18428
19712
  "exclusiveMinimum": 0,
18429
19713
  "maximum": 2147483.647,
18430
19714
  "description": "Maximum accumulated active-execution time in seconds. Active execution includes the entire extension body, subprocess waits, queued-agent waits, and sleeps; time between resumed attempts is not counted."
18431
19715
  },
18432
19716
  "maxAiCredits": {
18433
- "type": "number",
19717
+ "type": [
19718
+ "number",
19719
+ "null"
19720
+ ],
18434
19721
  "exclusiveMinimum": 0,
18435
19722
  "description": "Maximum AI credits consumed by factory subagents and their descendants. The post-paid ceiling is soft: parallel turns can settle beyond it before the run stops."
18436
19723
  }
@@ -18501,6 +19788,10 @@
18501
19788
  "snapshot": {
18502
19789
  "description": "Partial journal and progress snapshot for a halted, cancelled, or errored run.",
18503
19790
  "x-opaque-json": true
19791
+ },
19792
+ "pauseInfo": {
19793
+ "$ref": "#/definitions/FactoryPauseInfo",
19794
+ "description": "Structured pause initiator metadata for a paused attempt."
18504
19795
  }
18505
19796
  },
18506
19797
  "required": [
@@ -18518,6 +19809,7 @@
18518
19809
  "running",
18519
19810
  "completed",
18520
19811
  "halted",
19812
+ "paused",
18521
19813
  "cancelled",
18522
19814
  "error"
18523
19815
  ],
@@ -18528,6 +19820,7 @@
18528
19820
  "running": "The run is executing.",
18529
19821
  "completed": "The run completed successfully.",
18530
19822
  "halted": "The run was interrupted while resource budget remained.",
19823
+ "paused": "The current attempt stopped intentionally and the run may be resumed.",
18531
19824
  "cancelled": "The run was cancelled before completion.",
18532
19825
  "error": "The factory body failed or reached a cumulative resource ceiling."
18533
19826
  }
@@ -18646,6 +19939,10 @@
18646
19939
  }
18647
19940
  ],
18648
19941
  "description": "Terminal run outcome, or null while nonterminal."
19942
+ },
19943
+ "canResume": {
19944
+ "type": "boolean",
19945
+ "description": "Whether the durable run state currently passes runtime resume eligibility checks."
18649
19946
  }
18650
19947
  },
18651
19948
  "required": [
@@ -18667,7 +19964,8 @@
18667
19964
  "approved",
18668
19965
  "observedAt",
18669
19966
  "activeSegmentStartedAt",
18670
- "terminal"
19967
+ "terminal",
19968
+ "canResume"
18671
19969
  ],
18672
19970
  "additionalProperties": false,
18673
19971
  "description": "Durable factory run summary with read-time live overlays.",
@@ -18692,8 +19990,23 @@
18692
19990
  "resultPreview": {
18693
19991
  "type": "string",
18694
19992
  "description": "Prompt-safe preview of the completed result."
19993
+ },
19994
+ "pauseInfo": {
19995
+ "anyOf": [
19996
+ {
19997
+ "$ref": "#/definitions/FactoryPauseInfo",
19998
+ "description": "Durable metadata describing who initiated a factory pause."
19999
+ },
20000
+ {
20001
+ "type": "null"
20002
+ }
20003
+ ],
20004
+ "description": "Pause initiator metadata, or null when the run did not pause."
18695
20005
  }
18696
20006
  },
20007
+ "required": [
20008
+ "pauseInfo"
20009
+ ],
18697
20010
  "additionalProperties": false,
18698
20011
  "description": "Prompt-safe terminal factory outcome.",
18699
20012
  "title": "FactoryRunTerminal",
@@ -18796,10 +20109,27 @@
18796
20109
  "prompt": {
18797
20110
  "type": "string",
18798
20111
  "description": "Optional user prompt to combine with fleet instructions"
20112
+ },
20113
+ "attachments": {
20114
+ "type": "array",
20115
+ "items": {
20116
+ "$ref": "#/definitions/Attachment",
20117
+ "description": "A user message attachment — a file, directory, code selection, blob, GitHub-anchored pointer, or extension-supplied context payload"
20118
+ },
20119
+ "description": "Optional attachments (files, directories, selections, blobs, GitHub references) to include with the fleet request"
20120
+ },
20121
+ "billable": {
20122
+ "type": "boolean",
20123
+ "description": "If false, this request will not trigger a Premium Request Unit charge. User requests default to billable.",
20124
+ "visibility": "internal"
20125
+ },
20126
+ "wait": {
20127
+ "type": "boolean",
20128
+ "description": "If true, await completion of the agentic loop for this fleet request before returning. Defaults to false."
18799
20129
  }
18800
20130
  },
18801
20131
  "additionalProperties": false,
18802
- "description": "Optional user prompt to combine with the fleet orchestration instructions.",
20132
+ "description": "Parameters for starting fleet orchestration: an optional user prompt combined with the fleet instructions, plus the send options forwarded to the resulting turn.",
18803
20133
  "title": "FleetStartRequest",
18804
20134
  "stability": "experimental"
18805
20135
  },
@@ -21612,6 +22942,10 @@
21612
22942
  "minLength": 1,
21613
22943
  "pattern": "^[^\\x00-\\x1f/\\x7f-\\x9f}]+(?:\\/[^\\x00-\\x1f/\\x7f-\\x9f}]+)*$",
21614
22944
  "description": "Name of the MCP server to remove"
22945
+ },
22946
+ "authClientIdMetadataUrl": {
22947
+ "type": "string",
22948
+ "description": "OAuth Client ID Metadata Document URL whose persisted credentials should also be removed."
21615
22949
  }
21616
22950
  },
21617
22951
  "required": [
@@ -21699,6 +23033,10 @@
21699
23033
  "workingDirectory": {
21700
23034
  "type": "string",
21701
23035
  "description": "Working directory used as context for discovery (e.g., plugin resolution)"
23036
+ },
23037
+ "includeEffectiveSource": {
23038
+ "type": "boolean",
23039
+ "description": "Whether to include canonical effectiveSource metadata for each discovered server. Callers must opt in so protocol-3 clients retain the legacy closed response shape."
21702
23040
  }
21703
23041
  },
21704
23042
  "additionalProperties": false,
@@ -23899,6 +25237,10 @@
23899
25237
  "error": {
23900
25238
  "type": "string",
23901
25239
  "description": "Error message if the server failed to connect"
25240
+ },
25241
+ "serverMetadata": {
25242
+ "$ref": "#/definitions/McpServerMetadata",
25243
+ "description": "Server-advertised metadata for a connected server. Omitted when no live connection metadata is available, including while pending or when failed, disabled, stopped, or not configured."
23902
25244
  }
23903
25245
  },
23904
25246
  "required": [
@@ -24555,6 +25897,24 @@
24555
25897
  "description": "MCP servers configured for the session, with their connection status and host-level state.",
24556
25898
  "title": "McpServerList"
24557
25899
  },
25900
+ "McpServerMetadata": {
25901
+ "type": "object",
25902
+ "properties": {
25903
+ "instructions": {
25904
+ "type": [
25905
+ "string",
25906
+ "null"
25907
+ ],
25908
+ "description": "Non-empty natural-language guidance for using the server, or null when the server omitted instructions or advertised an empty string."
25909
+ }
25910
+ },
25911
+ "required": [
25912
+ "instructions"
25913
+ ],
25914
+ "additionalProperties": false,
25915
+ "description": "Server-advertised metadata learned through modern discovery or legacy initialization.",
25916
+ "title": "McpServerMetadata"
25917
+ },
24558
25918
  "McpServerNeedsAuthInfo": {
24559
25919
  "type": "object",
24560
25920
  "properties": {
@@ -24655,6 +26015,88 @@
24655
26015
  "description": "Env-value mode recorded on the session after the update.",
24656
26016
  "title": "McpSetEnvValueModeResult"
24657
26017
  },
26018
+ "McpSourceFile": {
26019
+ "type": "object",
26020
+ "properties": {
26021
+ "uri": {
26022
+ "type": "string",
26023
+ "format": "uri",
26024
+ "description": "Canonical file URI for the configuration document"
26025
+ },
26026
+ "jsonPointer": {
26027
+ "type": "string",
26028
+ "description": "RFC 6901 JSON Pointer to the server declaration, when known"
26029
+ }
26030
+ },
26031
+ "required": [
26032
+ "uri"
26033
+ ],
26034
+ "additionalProperties": false,
26035
+ "description": "Concrete configuration file containing an MCP server declaration.",
26036
+ "title": "McpSourceFile"
26037
+ },
26038
+ "McpSourcePlugin": {
26039
+ "type": "object",
26040
+ "properties": {
26041
+ "id": {
26042
+ "type": "string",
26043
+ "minLength": 1,
26044
+ "description": "Canonical plugin identity"
26045
+ },
26046
+ "name": {
26047
+ "type": "string",
26048
+ "minLength": 1,
26049
+ "description": "Human-readable plugin name, when available"
26050
+ },
26051
+ "version": {
26052
+ "type": "string",
26053
+ "minLength": 1,
26054
+ "description": "Plugin version, when available"
26055
+ }
26056
+ },
26057
+ "required": [
26058
+ "id"
26059
+ ],
26060
+ "additionalProperties": false,
26061
+ "description": "Plugin identity associated with an MCP server declaration.",
26062
+ "title": "McpSourcePlugin"
26063
+ },
26064
+ "McpSourceRef": {
26065
+ "type": "object",
26066
+ "properties": {
26067
+ "kind": {
26068
+ "type": "string",
26069
+ "minLength": 1,
26070
+ "description": "Open source-kind identifier. Known values include user, workspace, invocation, plugin, builtin, and device-registry."
26071
+ },
26072
+ "id": {
26073
+ "type": "string",
26074
+ "minLength": 1,
26075
+ "description": "Opaque stable identity for the configuration source. Clients must not parse this value."
26076
+ },
26077
+ "editability": {
26078
+ "type": "string",
26079
+ "minLength": 1,
26080
+ "description": "Open semantic editability identifier. Known values are editable and read-only."
26081
+ },
26082
+ "file": {
26083
+ "$ref": "#/definitions/McpSourceFile",
26084
+ "description": "Configuration file location, when the declaration is file-backed."
26085
+ },
26086
+ "plugin": {
26087
+ "$ref": "#/definitions/McpSourcePlugin",
26088
+ "description": "Plugin identity, when the declaration is plugin-provided."
26089
+ }
26090
+ },
26091
+ "required": [
26092
+ "kind",
26093
+ "id",
26094
+ "editability"
26095
+ ],
26096
+ "additionalProperties": false,
26097
+ "description": "Canonical identity and location of the effective MCP server declaration. The declaration is uniquely addressed by this source id together with the discovered server name.",
26098
+ "title": "McpSourceRef"
26099
+ },
24658
26100
  "McpStartServerRequest": {
24659
26101
  "type": "object",
24660
26102
  "properties": {
@@ -25114,6 +26556,35 @@
25114
26556
  "cli": "Remote task originated from a CLI remote-session invocation."
25115
26557
  }
25116
26558
  },
26559
+ "MetadataUpdateClientMetadataRequest": {
26560
+ "type": "object",
26561
+ "properties": {
26562
+ "clear": {
26563
+ "type": "boolean",
26564
+ "description": "Remove every existing client metadata entry before applying remove and set. Defaults to false."
26565
+ },
26566
+ "remove": {
26567
+ "type": "array",
26568
+ "items": {
26569
+ "type": "string"
26570
+ },
26571
+ "maxItems": 128,
26572
+ "description": "Case-sensitive keys to remove. Missing keys are ignored. Each key must be non-empty, at most 256 UTF-8 bytes, and outside the reserved `copilot/` and `github/` namespaces."
26573
+ },
26574
+ "set": {
26575
+ "type": "object",
26576
+ "additionalProperties": {
26577
+ "type": "string"
26578
+ },
26579
+ "description": "String entries to add or replace. Set wins when a key also appears in remove. Each key must be non-empty, at most 256 UTF-8 bytes, and outside the reserved `copilot/` and `github/` namespaces. Each value may contain at most 16 KiB of UTF-8 data.",
26580
+ "maxProperties": 128
26581
+ }
26582
+ },
26583
+ "additionalProperties": false,
26584
+ "description": "Atomic patch for client-owned session metadata. Operations apply in clear, remove, then set order. The resulting bag must satisfy the ClientMetadata entry and serialized-size limits. Local storage coordinates concurrent runtime processes; custom SessionFs providers must serialize writers that access the same session from multiple processes.",
26585
+ "title": "MetadataUpdateClientMetadataRequest",
26586
+ "stability": "experimental"
26587
+ },
25117
26588
  "Model": {
25118
26589
  "type": "object",
25119
26590
  "properties": {
@@ -25129,6 +26600,13 @@
25129
26600
  "$ref": "#/definitions/ModelCapabilities",
25130
26601
  "description": "Model capabilities and limits"
25131
26602
  },
26603
+ "metadata": {
26604
+ "type": "object",
26605
+ "additionalProperties": {
26606
+ "x-opaque-json": true
26607
+ },
26608
+ "description": "Provider-supplied model metadata. Keys and JSON-compatible values are preserved unchanged. This is factual metadata published by the model provider; it carries no picker or UX semantics."
26609
+ },
25132
26610
  "policy": {
25133
26611
  "$ref": "#/definitions/ModelPolicy",
25134
26612
  "description": "Policy state (if applicable)"
@@ -25220,6 +26698,10 @@
25220
26698
  "type": "string",
25221
26699
  "description": "Context tier selected by repository settings, when configured."
25222
26700
  },
26701
+ "repoAutoTier": {
26702
+ "type": "string",
26703
+ "description": "Auto routing preference selected by repository settings, when configured. Applied only when the overlay selects the Auto model; beside a concrete model it stays dormant."
26704
+ },
25223
26705
  "cliModel": {
25224
26706
  "type": "string",
25225
26707
  "description": "Model explicitly selected by the CLI, when provided."
@@ -25778,6 +27260,60 @@
25778
27260
  "unconfigured": "No explicit policy is configured for the model."
25779
27261
  }
25780
27262
  },
27263
+ "ModelSetAllowedModelsRequest": {
27264
+ "type": "object",
27265
+ "properties": {
27266
+ "allowedModels": {
27267
+ "anyOf": [
27268
+ {
27269
+ "type": "array",
27270
+ "items": {
27271
+ "type": "string"
27272
+ }
27273
+ },
27274
+ {
27275
+ "type": "null"
27276
+ }
27277
+ ],
27278
+ "minItems": 1,
27279
+ "description": "Exact model IDs to permit, or null to clear the host restriction."
27280
+ }
27281
+ },
27282
+ "additionalProperties": false,
27283
+ "description": "Host-supplied exact model selection IDs to allow for this running session. CAPI IDs are intersected with repository `.github/allowed_models.txt` policy; provider-qualified IDs remain exempt from repository-only policy but are restricted by this host list. Omit or pass null to clear the host restriction; an explicit empty or disjoint list is rejected. Validation and pre-selection fallback failures preserve the previous restriction. Failures after a fallback selection commits retain the new restriction and selected model; callers should inspect current session state after such an error.",
27284
+ "title": "ModelSetAllowedModelsRequest",
27285
+ "stability": "experimental"
27286
+ },
27287
+ "ModelSetAllowedModelsResult": {
27288
+ "type": "object",
27289
+ "properties": {
27290
+ "allowedModels": {
27291
+ "type": "array",
27292
+ "items": {
27293
+ "type": "string"
27294
+ },
27295
+ "description": "Normalized host allowlist. Omitted when the host restriction was cleared, or when a relay client does not return the host policy."
27296
+ },
27297
+ "effectiveAllowedModels": {
27298
+ "type": "array",
27299
+ "items": {
27300
+ "type": "string"
27301
+ },
27302
+ "description": "Effective exact IDs or repository policy patterns after applying the host restriction. Omitted by relay clients that do not return the host policy."
27303
+ },
27304
+ "fallbackModel": {
27305
+ "type": "string",
27306
+ "description": "Effective deterministic fallback model, when the policy defines one."
27307
+ },
27308
+ "modelId": {
27309
+ "type": "string",
27310
+ "description": "Selected session model after reconciling a now-disallowed concrete selection."
27311
+ }
27312
+ },
27313
+ "additionalProperties": false,
27314
+ "description": "The applied host allowlist and effective session model policy after intersection.",
27315
+ "title": "ModelSetAllowedModelsResult"
27316
+ },
25781
27317
  "ModelSetReasoningEffortRequest": {
25782
27318
  "type": "object",
25783
27319
  "properties": {
@@ -25832,6 +27368,104 @@
25832
27368
  "description": "Optional opaque account selection or compatibility GitHub token used to list models.",
25833
27369
  "title": "ModelsListRequest"
25834
27370
  },
27371
+ "ModelSwitchAutoTierRequest": {
27372
+ "type": "object",
27373
+ "properties": {
27374
+ "autoTier": {
27375
+ "anyOf": [
27376
+ {
27377
+ "$ref": "#/definitions/AutoTier",
27378
+ "description": "Routing preference used when the session model is `auto`. `fast` is an integrator-only latency preset and is not a first-party GitHub Copilot product preference."
27379
+ },
27380
+ {
27381
+ "type": "null"
27382
+ }
27383
+ ],
27384
+ "description": "Auto preference to activate when a future user turn using the `auto` model safely mints a replacement model and token pair. Pass null to return to provider-default Auto routing."
27385
+ },
27386
+ "source": {
27387
+ "$ref": "#/definitions/ModelChangeSource",
27388
+ "description": "Origin to record on the effective `session.model_change` event. Defaults to `sdk` when omitted."
27389
+ }
27390
+ },
27391
+ "required": [
27392
+ "autoTier"
27393
+ ],
27394
+ "additionalProperties": false,
27395
+ "description": "An Auto preference request for the session. This updates Auto configuration only; it does not change the selected model to `auto`.",
27396
+ "title": "ModelSwitchAutoTierRequest",
27397
+ "stability": "experimental"
27398
+ },
27399
+ "ModelSwitchAutoTierResult": {
27400
+ "type": "object",
27401
+ "properties": {
27402
+ "status": {
27403
+ "$ref": "#/definitions/ModelSwitchAutoTierStatus",
27404
+ "description": "Immediate request status. `pending` means accepted but not committed."
27405
+ },
27406
+ "effectiveAutoTier": {
27407
+ "$ref": "#/definitions/AutoTier",
27408
+ "description": "Auto preference currently committed for the session."
27409
+ },
27410
+ "pendingAutoTier": {
27411
+ "anyOf": [
27412
+ {
27413
+ "$ref": "#/definitions/AutoTier",
27414
+ "description": "Routing preference used when the session model is `auto`. `fast` is an integrator-only latency preset and is not a first-party GitHub Copilot product preference."
27415
+ },
27416
+ {
27417
+ "type": "null"
27418
+ }
27419
+ ],
27420
+ "description": "Latest unclaimed Auto preference waiting for a future user turn."
27421
+ },
27422
+ "activatingAutoTier": {
27423
+ "anyOf": [
27424
+ {
27425
+ "$ref": "#/definitions/AutoTier",
27426
+ "description": "Routing preference used when the session model is `auto`. `fast` is an integrator-only latency preset and is not a first-party GitHub Copilot product preference."
27427
+ },
27428
+ {
27429
+ "type": "null"
27430
+ }
27431
+ ],
27432
+ "description": "Auto preference currently claimed by an in-progress activation. Null means the activation is returning to provider-default routing."
27433
+ },
27434
+ "supersededAutoTier": {
27435
+ "anyOf": [
27436
+ {
27437
+ "$ref": "#/definitions/AutoTier",
27438
+ "description": "Routing preference used when the session model is `auto`. `fast` is an integrator-only latency preset and is not a first-party GitHub Copilot product preference."
27439
+ },
27440
+ {
27441
+ "type": "null"
27442
+ }
27443
+ ],
27444
+ "description": "Earlier unclaimed preference replaced by this request. This can be present with either status, including when selecting the effective preference cancels pending work."
27445
+ }
27446
+ },
27447
+ "required": [
27448
+ "status"
27449
+ ],
27450
+ "additionalProperties": false,
27451
+ "description": "Immediate acknowledgement and Auto preference snapshot after a switch request. This result never implies that a pending preference committed.",
27452
+ "title": "ModelSwitchAutoTierResult",
27453
+ "stability": "experimental"
27454
+ },
27455
+ "ModelSwitchAutoTierStatus": {
27456
+ "type": "string",
27457
+ "enum": [
27458
+ "unchanged",
27459
+ "pending"
27460
+ ],
27461
+ "description": "Whether the requested preference was already effective or was accepted for later transactional activation.",
27462
+ "title": "ModelSwitchAutoTierStatus",
27463
+ "x-enumDescriptions": {
27464
+ "unchanged": "The requested preference is already effective. No activation is pending for it, although this request may have cancelled an earlier unclaimed preference reported in `supersededAutoTier`.",
27465
+ "pending": "The request was accepted but has not committed. A later user turn using the `auto` model must mint and validate the replacement before it becomes effective."
27466
+ },
27467
+ "stability": "experimental"
27468
+ },
25835
27469
  "ModelSwitchConfirmation": {
25836
27470
  "type": "object",
25837
27471
  "properties": {
@@ -25862,6 +27496,18 @@
25862
27496
  "type": "string",
25863
27497
  "description": "Model selection id to switch to, as returned by `list`. A bare id (e.g. `claude-sonnet-4.6`) names a Copilot (CAPI) model; a provider-qualified id (`provider/id`, e.g. `acme/claude-sonnet`) targets a registry BYOK model."
25864
27498
  },
27499
+ "autoTier": {
27500
+ "anyOf": [
27501
+ {
27502
+ "$ref": "#/definitions/AutoTier",
27503
+ "description": "Routing preference used when the session model is `auto`. `fast` is an integrator-only latency preset and is not a first-party GitHub Copilot product preference."
27504
+ },
27505
+ {
27506
+ "type": "null"
27507
+ }
27508
+ ],
27509
+ "description": "Optional Auto routing preference to stage atomically with selecting `auto`. Pass null to return to provider-default Auto routing. This field is rejected when `modelId` is not `auto`."
27510
+ },
25865
27511
  "reasoningEffort": {
25866
27512
  "type": "string",
25867
27513
  "description": "Reasoning effort level to use for the model. CAPI values are model-defined and validated against the selected model; BYOK providers may define additional values. \"none\" disables reasoning. When omitted, no effort override is applied."
@@ -25960,6 +27606,10 @@
25960
27606
  "type": "string"
25961
27607
  },
25962
27608
  "description": "Deprecation warnings associated with the selected model or options."
27609
+ },
27610
+ "modelState": {
27611
+ "$ref": "#/definitions/CurrentModel",
27612
+ "description": "Authoritative model and Auto preference state after an immediate switch. For deferred switches this remains the current state until the queued change drains."
25963
27613
  }
25964
27614
  },
25965
27615
  "required": [],
@@ -25986,6 +27636,10 @@
25986
27636
  "$ref": "#/definitions/SessionMode",
25987
27637
  "description": "The session mode the agent is operating in"
25988
27638
  },
27639
+ "expectedMode": {
27640
+ "$ref": "#/definitions/SessionMode",
27641
+ "description": "Mode the session must currently be in for the change to apply. When set and the session is in a different mode the request is a no-op and reports status 'unchanged'."
27642
+ },
25989
27643
  "inheritPlanBaseFromSessionId": {
25990
27644
  "type": "string",
25991
27645
  "description": "Session whose plan-mode base state should be inherited."
@@ -26046,6 +27700,10 @@
26046
27700
  "type": "boolean",
26047
27701
  "description": "Whether applying the mode changed the active model."
26048
27702
  },
27703
+ "modeApplied": {
27704
+ "type": "boolean",
27705
+ "description": "Whether the requested mode was applied to the session. False only when an 'expectedMode' precondition did not hold, in which case any model change reported alongside it was still applied."
27706
+ },
26049
27707
  "confirmation": {
26050
27708
  "$ref": "#/definitions/ModelSwitchConfirmation",
26051
27709
  "description": "Compaction confirmation required before the mode change can complete."
@@ -27490,7 +29148,8 @@
27490
29148
  "assisted_approval",
27491
29149
  "human_response",
27492
29150
  "host_policy",
27493
- "unattended_fallback"
29151
+ "unattended_fallback",
29152
+ "authorization_carry_forward"
27494
29153
  ],
27495
29154
  "description": "Controlled reason or actor responsible for a permission response.",
27496
29155
  "title": "PermissionDecisionSource",
@@ -27498,7 +29157,8 @@
27498
29157
  "assisted_approval": "The response followed the assisted-approval judge recommendation.",
27499
29158
  "human_response": "A human supplied the response through an interactive prompt.",
27500
29159
  "host_policy": "The host applied a standing policy or override rather than a judge recommendation or human decision.",
27501
- "unattended_fallback": "The host denied the request because no interactive user response was available."
29160
+ "unattended_fallback": "The host denied the request because no interactive user response was available.",
29161
+ "authorization_carry_forward": "A live authorization record from an earlier human decision in this session contained the proposal, so it ran without another prompt. This is not a new human decision and never mints authority of its own."
27502
29162
  }
27503
29163
  },
27504
29164
  "PermissionDecisionSurface": {
@@ -28986,6 +30646,10 @@
28986
30646
  "type": "integer",
28987
30647
  "description": "Number of skills discovered and installed from the plugin"
28988
30648
  },
30649
+ "stagingMode": {
30650
+ "$ref": "#/definitions/PluginInstallStagingMode",
30651
+ "description": "Where the completed plugin tree was staged before atomic promotion"
30652
+ },
28989
30653
  "postInstallMessage": {
28990
30654
  "type": "string",
28991
30655
  "description": "Optional post-install message provided by the plugin (e.g. setup instructions)"
@@ -29003,6 +30667,19 @@
29003
30667
  "description": "Result of installing a plugin.",
29004
30668
  "title": "PluginInstallResult"
29005
30669
  },
30670
+ "PluginInstallStagingMode": {
30671
+ "type": "string",
30672
+ "enum": [
30673
+ "external",
30674
+ "destination_sibling"
30675
+ ],
30676
+ "description": "Where completed plugin content was staged before atomic promotion.",
30677
+ "title": "PluginInstallStagingMode",
30678
+ "x-enumDescriptions": {
30679
+ "external": "A sibling of the installed-plugins root, outside the recursively watched tree.",
30680
+ "destination_sibling": "A sibling of the destination plugin directory, used when external staging is unavailable."
30681
+ }
30682
+ },
29006
30683
  "PluginList": {
29007
30684
  "type": "object",
29008
30685
  "properties": {
@@ -29069,13 +30746,17 @@
29069
30746
  "type": "string"
29070
30747
  },
29071
30748
  "description": "Plugin names or \"plugin@marketplace\" specs to disable. Unknown names are ignored. Non-marketplace direct installs cannot be disabled via this API; uninstall them instead. Plugin-owned MCP servers are stopped in active sessions immediately; other plugin contributions remain available until each session reloads plugins."
30749
+ },
30750
+ "workingDirectory": {
30751
+ "type": "string",
30752
+ "description": "Working directory whose repository `enabledPlugins` overlay decides whether this mutation is repository-controlled. Hosts that serve sessions across several repositories (the SDK server) should pass the session's directory; otherwise the guard is evaluated against the server process's own working directory, which may belong to a different repository. Defaults to the server's current working directory."
29072
30753
  }
29073
30754
  },
29074
30755
  "required": [
29075
30756
  "names"
29076
30757
  ],
29077
30758
  "additionalProperties": false,
29078
- "description": "Plugin names (or specs) to disable.",
30759
+ "description": "Plugin names (or specs) to disable, plus the optional working directory the repository-controlled guard is evaluated against.",
29079
30760
  "title": "PluginsDisableRequest"
29080
30761
  },
29081
30762
  "PluginsEnableRequest": {
@@ -29087,13 +30768,17 @@
29087
30768
  "type": "string"
29088
30769
  },
29089
30770
  "description": "Plugin names or \"plugin@marketplace\" specs to enable. Unknown names are ignored. Non-marketplace direct installs are always enabled and cannot be toggled via this API."
30771
+ },
30772
+ "workingDirectory": {
30773
+ "type": "string",
30774
+ "description": "Working directory whose repository `enabledPlugins` overlay decides whether this mutation is repository-controlled. Hosts that serve sessions across several repositories (the SDK server) should pass the session's directory; otherwise the guard is evaluated against the server process's own working directory, which may belong to a different repository. Defaults to the server's current working directory."
29090
30775
  }
29091
30776
  },
29092
30777
  "required": [
29093
30778
  "names"
29094
30779
  ],
29095
30780
  "additionalProperties": false,
29096
- "description": "Plugin names (or specs) to enable.",
30781
+ "description": "Plugin names (or specs) to enable, plus the optional working directory the repository-controlled guard is evaluated against.",
29097
30782
  "title": "PluginsEnableRequest"
29098
30783
  },
29099
30784
  "PluginsInstallRequest": {
@@ -31227,6 +32912,25 @@
31227
32912
  "title": "ReleaseEventInterestParams",
31228
32913
  "stability": "experimental"
31229
32914
  },
32915
+ "RemediationAction": {
32916
+ "type": "string",
32917
+ "enum": [
32918
+ "sign_in",
32919
+ "switch_account",
32920
+ "show_account",
32921
+ "review_sandbox_policy",
32922
+ "allow_sandbox_outbound"
32923
+ ],
32924
+ "description": "What the user must do to recover from a failure, named as an action rather than as one client's affordance. The runtime cannot know which affordance a client offers — a slash command, a settings pane, a link — so the accompanying message stays host-agnostic and each client renders its own copy from this value. Absent when the runtime knows of no action the user can take.",
32925
+ "title": "RemediationAction",
32926
+ "x-enumDescriptions": {
32927
+ "sign_in": "Authenticate again with the Copilot backend. The current credential is absent, expired, or rejected.",
32928
+ "switch_account": "Authenticate as a different account. The current account exists but lacks access to the requested resource.",
32929
+ "show_account": "Inspect which account is currently authenticated before deciding what to change.",
32930
+ "review_sandbox_policy": "Review or widen the sandbox policy. The blocked path or host is named by the accompanying message or by the tool result the action arrived with.",
32931
+ "allow_sandbox_outbound": "Permit outbound network access in the sandbox policy."
32932
+ }
32933
+ },
31230
32934
  "RemoteControlConfig": {
31231
32935
  "type": "object",
31232
32936
  "properties": {
@@ -31759,6 +33463,28 @@
31759
33463
  "type": "boolean",
31760
33464
  "description": "Whether to auto-add the current working directory to readwritePaths. Default: true."
31761
33465
  },
33466
+ "sandboxMcpServers": {
33467
+ "type": "boolean",
33468
+ "description": "Whether MCP servers the session launches are confined by the sandbox. Only an explicit `false` opts out; doing so also lets remote-MCP egress leave the sandbox, so the flag and `enabled` are always read together. Ignored while `enabled` is false. Default: true (enabled by default; set to false to opt out)."
33469
+ },
33470
+ "sandboxLspServers": {
33471
+ "type": "boolean",
33472
+ "description": "Whether language servers the session launches are confined by the sandbox. Only an explicit `false` opts out. Ignored while `enabled` is false. Default: true (enabled by default; set to false to opt out)."
33473
+ },
33474
+ "allowBypass": {
33475
+ "type": "boolean",
33476
+ "description": "Whether the agent may request that an individual command run outside the sandbox, which the host then approves or denies through the usual permission flow. A host capability flag rather than part of the policy: it is stripped from the effective spawn policy and only has an effect while `enabled` is true. Fail-closed, unlike the opt-out flags on this object: omitting it offers no bypass. Default: false (opt-in)."
33477
+ },
33478
+ "managedMcpRoutingLocked": {
33479
+ "type": "boolean",
33480
+ "description": "Set by the runtime when a managed policy forced `sandboxMcpServers` on and took the local opt-out away. Provenance rather than policy: it lets a sandbox startup failure point at the administrator instead of a setting the next managed merge would override, and it is ignored when comparing two configs for change. Only the managed merge may set it; a caller-supplied value is stripped.",
33481
+ "visibility": "internal"
33482
+ },
33483
+ "managedLspRoutingLocked": {
33484
+ "type": "boolean",
33485
+ "description": "The `sandboxLspServers` counterpart of `managedMcpRoutingLocked`.",
33486
+ "visibility": "internal"
33487
+ },
31762
33488
  "auth": {
31763
33489
  "$ref": "#/definitions/SandboxConfigAuth",
31764
33490
  "description": "Credential-injection capability flags."
@@ -31952,6 +33678,46 @@
31952
33678
  "description": "macOS seatbelt-specific options.",
31953
33679
  "title": "SandboxConfigUserPolicySeatbelt"
31954
33680
  },
33681
+ "SandboxDisableForSessionRequest": {
33682
+ "type": "object",
33683
+ "properties": {
33684
+ "requestId": {
33685
+ "type": "string",
33686
+ "description": "Identifier of the exact pending sandbox-bypass permission request that authorized the session opt-out."
33687
+ },
33688
+ "decisionContext": {
33689
+ "$ref": "#/definitions/PermissionDecisionContext",
33690
+ "description": "Optional attribution for the permission decision."
33691
+ }
33692
+ },
33693
+ "required": [
33694
+ "requestId"
33695
+ ],
33696
+ "additionalProperties": false,
33697
+ "description": "Request to disable sandboxing for the current session while resolving an active sandbox-bypass permission prompt.",
33698
+ "title": "SandboxDisableForSessionRequest",
33699
+ "stability": "experimental"
33700
+ },
33701
+ "SandboxDisableForSessionResult": {
33702
+ "type": "object",
33703
+ "properties": {
33704
+ "success": {
33705
+ "type": "boolean",
33706
+ "description": "Whether this call resolved the pending request and applied the session opt-out."
33707
+ },
33708
+ "enabled": {
33709
+ "type": "boolean",
33710
+ "description": "The authoritative sandbox enabled state after the operation."
33711
+ }
33712
+ },
33713
+ "required": [
33714
+ "success",
33715
+ "enabled"
33716
+ ],
33717
+ "additionalProperties": false,
33718
+ "description": "Result of attempting to disable sandboxing for the current session.",
33719
+ "title": "SandboxDisableForSessionResult"
33720
+ },
31955
33721
  "SandboxEnforcementStatus": {
31956
33722
  "type": "object",
31957
33723
  "properties": {
@@ -33224,7 +34990,7 @@
33224
34990
  "content"
33225
34991
  ],
33226
34992
  "additionalProperties": false,
33227
- "description": "File path, content to append, and optional mode for the client-provided session filesystem.",
34993
+ "description": "File path, content to append, and optional mode for the client-provided session filesystem. Implementations create parent directories as needed.",
33228
34994
  "title": "SessionFsAppendFileRequest",
33229
34995
  "stability": "experimental"
33230
34996
  },
@@ -34603,6 +36369,10 @@
34603
36369
  "type": "string",
34604
36370
  "description": "Identifier of the client driving the session."
34605
36371
  },
36372
+ "authClientIdMetadataUrl": {
36373
+ "type": "string",
36374
+ "description": "OAuth Client ID Metadata Document URL used by this host for MCP authorization."
36375
+ },
34606
36376
  "clientKind": {
34607
36377
  "type": "string",
34608
36378
  "description": "Structured client kind used for runtime behavior gates."
@@ -34831,6 +36601,10 @@
34831
36601
  "type": "boolean",
34832
36602
  "description": "Whether to skip custom instruction sources."
34833
36603
  },
36604
+ "refreshCustomInstructions": {
36605
+ "type": "boolean",
36606
+ "description": "Whether to invalidate cached custom-instruction discovery before constructing the session. Use when instruction files may have changed earlier in the same runtime process."
36607
+ },
34834
36608
  "disabledInstructionSources": {
34835
36609
  "type": "array",
34836
36610
  "items": {
@@ -35235,6 +37009,122 @@
35235
37009
  "description": "Session IDs from the input set that are currently in use by another process.",
35236
37010
  "title": "SessionsCheckInUseResult"
35237
37011
  },
37012
+ "SessionsClientMetadataEntry": {
37013
+ "anyOf": [
37014
+ {
37015
+ "type": "object",
37016
+ "properties": {
37017
+ "sessionId": {
37018
+ "type": "string",
37019
+ "description": "Requested session ID."
37020
+ },
37021
+ "metadata": {
37022
+ "$ref": "#/definitions/ClientMetadata",
37023
+ "description": "Validated client metadata, possibly empty or projected to requested keys."
37024
+ },
37025
+ "status": {
37026
+ "type": "string",
37027
+ "const": "ok",
37028
+ "description": "Client metadata outcome discriminator."
37029
+ }
37030
+ },
37031
+ "required": [
37032
+ "status",
37033
+ "sessionId",
37034
+ "metadata"
37035
+ ],
37036
+ "additionalProperties": false
37037
+ },
37038
+ {
37039
+ "type": "object",
37040
+ "properties": {
37041
+ "sessionId": {
37042
+ "type": "string",
37043
+ "description": "Requested session ID."
37044
+ },
37045
+ "status": {
37046
+ "type": "string",
37047
+ "const": "notFound",
37048
+ "description": "Client metadata outcome discriminator."
37049
+ }
37050
+ },
37051
+ "required": [
37052
+ "status",
37053
+ "sessionId"
37054
+ ],
37055
+ "additionalProperties": false
37056
+ },
37057
+ {
37058
+ "type": "object",
37059
+ "properties": {
37060
+ "sessionId": {
37061
+ "type": "string",
37062
+ "description": "Requested session ID."
37063
+ },
37064
+ "status": {
37065
+ "type": "string",
37066
+ "const": "corrupt",
37067
+ "description": "Client metadata outcome discriminator."
37068
+ }
37069
+ },
37070
+ "required": [
37071
+ "status",
37072
+ "sessionId"
37073
+ ],
37074
+ "additionalProperties": false
37075
+ },
37076
+ {
37077
+ "type": "object",
37078
+ "properties": {
37079
+ "sessionId": {
37080
+ "type": "string",
37081
+ "description": "Requested session ID."
37082
+ },
37083
+ "status": {
37084
+ "type": "string",
37085
+ "const": "unsupportedVersion",
37086
+ "description": "Client metadata outcome discriminator."
37087
+ }
37088
+ },
37089
+ "required": [
37090
+ "status",
37091
+ "sessionId"
37092
+ ],
37093
+ "additionalProperties": false
37094
+ },
37095
+ {
37096
+ "type": "object",
37097
+ "properties": {
37098
+ "sessionId": {
37099
+ "type": "string",
37100
+ "description": "Requested session ID."
37101
+ },
37102
+ "code": {
37103
+ "type": "string",
37104
+ "description": "Filesystem or provider error code. Clients should not assume every provider uses operating-system error codes."
37105
+ },
37106
+ "message": {
37107
+ "type": "string",
37108
+ "description": "Human-readable diagnostic message. Not stable for programmatic matching."
37109
+ },
37110
+ "status": {
37111
+ "type": "string",
37112
+ "const": "unavailable",
37113
+ "description": "Client metadata outcome discriminator."
37114
+ }
37115
+ },
37116
+ "required": [
37117
+ "status",
37118
+ "sessionId",
37119
+ "code",
37120
+ "message"
37121
+ ],
37122
+ "additionalProperties": false
37123
+ }
37124
+ ],
37125
+ "description": "Client metadata outcome for one requested local session.",
37126
+ "title": "SessionsClientMetadataEntry"
37127
+ },
35238
37128
  "SessionsCloseRequest": {
35239
37129
  "type": "object",
35240
37130
  "properties": {
@@ -35763,6 +37653,42 @@
35763
37653
  "description": "Dynamic-context board entry count, when available.",
35764
37654
  "title": "SessionsGetBoardEntryCountResult"
35765
37655
  },
37656
+ "SessionsGetClientMetadataRequest": {
37657
+ "type": "object",
37658
+ "properties": {
37659
+ "sessionIds": {
37660
+ "type": "array",
37661
+ "items": {
37662
+ "type": "string"
37663
+ },
37664
+ "maxItems": 1000,
37665
+ "description": "Session IDs to inspect. Results preserve this order."
37666
+ },
37667
+ "keys": {
37668
+ "type": "array",
37669
+ "items": {
37670
+ "type": "string"
37671
+ },
37672
+ "maxItems": 128,
37673
+ "description": "Case-sensitive keys to project from each valid bag. Each key must be non-empty, at most 256 UTF-8 bytes, and outside the reserved `copilot/` and `github/` namespaces. Omit to return every entry."
37674
+ }
37675
+ },
37676
+ "required": [
37677
+ "sessionIds"
37678
+ ],
37679
+ "additionalProperties": false,
37680
+ "description": "Bounded batch request for client-owned metadata from persisted local sessions.",
37681
+ "title": "SessionsGetClientMetadataRequest"
37682
+ },
37683
+ "SessionsGetClientMetadataResult": {
37684
+ "type": "array",
37685
+ "items": {
37686
+ "$ref": "#/definitions/SessionsClientMetadataEntry",
37687
+ "description": "Client metadata outcome for one requested local session."
37688
+ },
37689
+ "description": "Ordered client metadata outcomes for the requested local sessions.",
37690
+ "title": "SessionsGetClientMetadataResult"
37691
+ },
35766
37692
  "SessionsGetEventFilePathRequest": {
35767
37693
  "type": "object",
35768
37694
  "properties": {
@@ -36324,17 +38250,17 @@
36324
38250
  },
36325
38251
  "cursor": {
36326
38252
  "type": "string",
36327
- "description": "Opaque cursor returned by a previous persisted-event read. Omit on the first call."
38253
+ "description": "Opaque, process-local, single-use cursor returned by the previous persisted-event read. Omit on the first call and issue continuations sequentially; reusing the same cursor returns an expired terminal page."
36328
38254
  },
36329
38255
  "max": {
36330
38256
  "type": "integer",
36331
38257
  "exclusiveMinimum": 0,
36332
38258
  "maximum": 1000,
36333
- "description": "Maximum number of events to return in this batch (1–1000, default 200)."
38259
+ "description": "Maximum number of events to return in this batch (1–1000, default 200). Pages may contain fewer events to keep the serialized event array within a soft 1 MiB budget including resolved binary assets; one oversized event is returned alone to guarantee progress."
36334
38260
  },
36335
38261
  "direction": {
36336
38262
  "$ref": "#/definitions/EventsReadDirection",
36337
- "description": "Direction to page through persisted history. Forward starts at the beginning; backward starts with the newest events. Events in each page remain chronological."
38263
+ "description": "Direction to page through persisted history. Forward starts at the beginning; backward starts with the newest events. Events in each page remain chronological. This selects the initial read only; a continuation always uses the direction bound into its cursor."
36338
38264
  }
36339
38265
  },
36340
38266
  "required": [
@@ -38198,6 +40124,10 @@
38198
40124
  "url": {
38199
40125
  "type": "string",
38200
40126
  "description": "Optional URL associated with the timeline entry."
40127
+ },
40128
+ "remediation": {
40129
+ "$ref": "#/definitions/RemediationAction",
40130
+ "description": "What the user must do to recover, when the entry reports a failure the runtime knows an action for. The `text` never names a client affordance, so a client that offers one renders it from this value."
38201
40131
  }
38202
40132
  },
38203
40133
  "required": [
@@ -38215,7 +40145,7 @@
38215
40145
  "type": "object",
38216
40146
  "additionalProperties": {
38217
40147
  "$ref": "#/definitions/SubagentSettingsEntry",
38218
- "description": "Subagent model, reasoning effort, and context tier settings"
40148
+ "description": "Subagent model, reasoning effort, context tier, and auto-invocation settings"
38219
40149
  },
38220
40150
  "description": "Per-agent settings keyed by subagent agent_type"
38221
40151
  },
@@ -38267,10 +40197,14 @@
38267
40197
  "contextTier": {
38268
40198
  "$ref": "#/definitions/SubagentSettingsEntryContextTier",
38269
40199
  "description": "Context tier override for matching subagents"
40200
+ },
40201
+ "autoInvoke": {
40202
+ "type": "boolean",
40203
+ "description": "Whether this agent's runtime-defined proactive invocation prompting is enabled, if supported. Currently consumed by the built-in rubber-duck agent."
38270
40204
  }
38271
40205
  },
38272
40206
  "additionalProperties": false,
38273
- "description": "Subagent model, reasoning effort, and context tier settings",
40207
+ "description": "Subagent model, reasoning effort, context tier, and auto-invocation settings",
38274
40208
  "title": "SubagentSettingsEntry"
38275
40209
  },
38276
40210
  "SubagentSettingsEntryContextTier": {
@@ -38422,6 +40356,426 @@
38422
40356
  "description": "Progress snapshot for an agent task, with recent activity lines and optional latest intent.",
38423
40357
  "title": "TaskAgentProgress"
38424
40358
  },
40359
+ "TaskClientActiveStatus": {
40360
+ "type": "string",
40361
+ "enum": [
40362
+ "running",
40363
+ "idle"
40364
+ ],
40365
+ "description": "Active status a client owner may publish with a progress update.",
40366
+ "title": "TaskClientActiveStatus",
40367
+ "x-enumDescriptions": {
40368
+ "running": "The external owner is actively working.",
40369
+ "idle": "The external owner is connected but waiting."
40370
+ }
40371
+ },
40372
+ "TaskClientExecutionMode": {
40373
+ "type": "string",
40374
+ "enum": [
40375
+ "background"
40376
+ ],
40377
+ "description": "Client-owned tasks always execute outside the runtime in background mode.",
40378
+ "title": "TaskClientExecutionMode"
40379
+ },
40380
+ "TaskClientInfo": {
40381
+ "type": "object",
40382
+ "properties": {
40383
+ "type": {
40384
+ "$ref": "#/definitions/TaskClientType",
40385
+ "const": "client",
40386
+ "description": "Task kind"
40387
+ },
40388
+ "id": {
40389
+ "type": "string",
40390
+ "description": "Canonical runtime-generated task identifier"
40391
+ },
40392
+ "clientTaskId": {
40393
+ "type": "string",
40394
+ "description": "Owner-scoped registration and reclaim key"
40395
+ },
40396
+ "displayName": {
40397
+ "type": "string",
40398
+ "description": "Optional task display name"
40399
+ },
40400
+ "description": {
40401
+ "type": "string",
40402
+ "description": "Task description"
40403
+ },
40404
+ "status": {
40405
+ "$ref": "#/definitions/TaskClientStatus",
40406
+ "description": "Client task lifecycle status"
40407
+ },
40408
+ "owner": {
40409
+ "$ref": "#/definitions/TaskClientOwner",
40410
+ "description": "Public attribution and presence for the task owner"
40411
+ },
40412
+ "startedAt": {
40413
+ "type": "string",
40414
+ "format": "date-time",
40415
+ "description": "ISO 8601 timestamp when the task started"
40416
+ },
40417
+ "updatedAt": {
40418
+ "type": "string",
40419
+ "format": "date-time",
40420
+ "description": "ISO 8601 timestamp of the latest accepted lifecycle change"
40421
+ },
40422
+ "completedAt": {
40423
+ "type": "string",
40424
+ "format": "date-time",
40425
+ "description": "ISO 8601 timestamp when the task reached a terminal status"
40426
+ },
40427
+ "activeTimeMs": {
40428
+ "type": "integer",
40429
+ "minimum": 0,
40430
+ "description": "Accumulated active execution time in milliseconds"
40431
+ },
40432
+ "activeStartedAt": {
40433
+ "type": "string",
40434
+ "format": "date-time",
40435
+ "description": "ISO 8601 timestamp when the current active segment started"
40436
+ },
40437
+ "idleSince": {
40438
+ "type": "string",
40439
+ "format": "date-time",
40440
+ "description": "ISO 8601 timestamp when the connected owner entered idle status"
40441
+ },
40442
+ "orphanedAt": {
40443
+ "type": "string",
40444
+ "format": "date-time",
40445
+ "description": "ISO 8601 timestamp of the most recent orphan transition"
40446
+ },
40447
+ "reclaimedAt": {
40448
+ "type": "string",
40449
+ "format": "date-time",
40450
+ "description": "ISO 8601 timestamp of the most recent successful reclaim"
40451
+ },
40452
+ "executionMode": {
40453
+ "$ref": "#/definitions/TaskClientExecutionMode",
40454
+ "description": "Execution mode, which is always background for client-owned tasks"
40455
+ },
40456
+ "canCancel": {
40457
+ "type": "boolean",
40458
+ "description": "Whether the currently bound owner can receive a cancellation request"
40459
+ },
40460
+ "sequence": {
40461
+ "type": "integer",
40462
+ "minimum": 0,
40463
+ "description": "Sequence number of the latest accepted owner update"
40464
+ },
40465
+ "result": {
40466
+ "description": "Opaque successful terminal result supplied by the task owner",
40467
+ "x-opaque-json": true
40468
+ },
40469
+ "error": {
40470
+ "type": "string",
40471
+ "description": "Human-readable terminal failure message"
40472
+ },
40473
+ "errorCode": {
40474
+ "type": "string",
40475
+ "description": "Optional owner-supplied terminal failure code"
40476
+ },
40477
+ "cancellationReason": {
40478
+ "type": "string",
40479
+ "description": "Human-readable reason for terminal cancellation"
40480
+ }
40481
+ },
40482
+ "required": [
40483
+ "type",
40484
+ "id",
40485
+ "clientTaskId",
40486
+ "description",
40487
+ "status",
40488
+ "owner",
40489
+ "startedAt",
40490
+ "updatedAt",
40491
+ "activeTimeMs",
40492
+ "executionMode",
40493
+ "canCancel",
40494
+ "sequence"
40495
+ ],
40496
+ "additionalProperties": false,
40497
+ "description": "Tracked client-owned task metadata.",
40498
+ "title": "TaskClientInfo"
40499
+ },
40500
+ "TaskClientOwner": {
40501
+ "type": "object",
40502
+ "properties": {
40503
+ "participantId": {
40504
+ "type": "string",
40505
+ "description": "Opaque session-scoped participant identity"
40506
+ },
40507
+ "joinId": {
40508
+ "type": "string",
40509
+ "description": "Opaque identity of the currently or most recently bound session join"
40510
+ },
40511
+ "kind": {
40512
+ "$ref": "#/definitions/TaskClientOwnerKind",
40513
+ "description": "Class of the task owner"
40514
+ },
40515
+ "displayName": {
40516
+ "type": "string",
40517
+ "description": "Display-only owner name"
40518
+ },
40519
+ "source": {
40520
+ "type": "string",
40521
+ "description": "Display-only owner source"
40522
+ },
40523
+ "presence": {
40524
+ "$ref": "#/definitions/TaskClientOwnerPresence",
40525
+ "description": "Whether this task's bound join is currently connected"
40526
+ },
40527
+ "disconnectedAt": {
40528
+ "type": "string",
40529
+ "format": "date-time",
40530
+ "description": "ISO 8601 timestamp when the bound join disconnected"
40531
+ }
40532
+ },
40533
+ "required": [
40534
+ "participantId",
40535
+ "joinId",
40536
+ "kind",
40537
+ "presence"
40538
+ ],
40539
+ "additionalProperties": false,
40540
+ "description": "Public owner attribution for a client-owned task. Identifiers are opaque and never authorize requests.",
40541
+ "title": "TaskClientOwner"
40542
+ },
40543
+ "TaskClientOwnerKind": {
40544
+ "type": "string",
40545
+ "enum": [
40546
+ "extension",
40547
+ "sdk"
40548
+ ],
40549
+ "description": "Connection class owning a client task.",
40550
+ "title": "TaskClientOwnerKind",
40551
+ "x-enumDescriptions": {
40552
+ "extension": "A discovered extension connection owns the task.",
40553
+ "sdk": "A generic SDK connection owns the task."
40554
+ }
40555
+ },
40556
+ "TaskClientOwnerPresence": {
40557
+ "type": "string",
40558
+ "enum": [
40559
+ "connected",
40560
+ "disconnected"
40561
+ ],
40562
+ "description": "Presence of the task's bound join.",
40563
+ "title": "TaskClientOwnerPresence",
40564
+ "x-enumDescriptions": {
40565
+ "connected": "The bound session join is connected.",
40566
+ "disconnected": "The bound session join is disconnected."
40567
+ }
40568
+ },
40569
+ "TaskClientProgress": {
40570
+ "type": "object",
40571
+ "properties": {
40572
+ "type": {
40573
+ "$ref": "#/definitions/TaskClientType",
40574
+ "const": "client",
40575
+ "description": "Progress kind"
40576
+ },
40577
+ "status": {
40578
+ "$ref": "#/definitions/TaskClientStatus",
40579
+ "description": "Current client task lifecycle status"
40580
+ },
40581
+ "sequence": {
40582
+ "type": "integer",
40583
+ "minimum": 0,
40584
+ "description": "Sequence number of the latest accepted owner update"
40585
+ },
40586
+ "updatedAt": {
40587
+ "type": "string",
40588
+ "format": "date-time",
40589
+ "description": "ISO 8601 timestamp of the latest accepted lifecycle change"
40590
+ },
40591
+ "phase": {
40592
+ "type": "string",
40593
+ "description": "Current owner-defined progress phase"
40594
+ },
40595
+ "percentage": {
40596
+ "type": "number",
40597
+ "minimum": 0,
40598
+ "maximum": 100,
40599
+ "description": "Current completion percentage from zero through one hundred"
40600
+ },
40601
+ "lastMessage": {
40602
+ "type": "string",
40603
+ "description": "Most recent nonempty progress message"
40604
+ },
40605
+ "recentActivity": {
40606
+ "type": "array",
40607
+ "items": {
40608
+ "$ref": "#/definitions/TaskProgressLine",
40609
+ "description": "Timestamped display line for task progress output or recent agent activity."
40610
+ },
40611
+ "description": "Recent server-timestamped progress messages"
40612
+ }
40613
+ },
40614
+ "required": [
40615
+ "type",
40616
+ "status",
40617
+ "sequence",
40618
+ "updatedAt",
40619
+ "recentActivity"
40620
+ ],
40621
+ "additionalProperties": false,
40622
+ "description": "Generic progress for a client-owned task.",
40623
+ "title": "TaskClientProgress"
40624
+ },
40625
+ "TaskClientStatus": {
40626
+ "type": "string",
40627
+ "enum": [
40628
+ "running",
40629
+ "idle",
40630
+ "completed",
40631
+ "failed",
40632
+ "cancelled",
40633
+ "orphaned"
40634
+ ],
40635
+ "description": "Lifecycle status of a client-owned task.",
40636
+ "title": "TaskClientStatus",
40637
+ "x-enumDescriptions": {
40638
+ "running": "The external owner is actively working.",
40639
+ "idle": "The external owner is connected but waiting.",
40640
+ "completed": "The owner reported successful completion.",
40641
+ "failed": "The owner reported failure.",
40642
+ "cancelled": "The owner reported or confirmed cancellation.",
40643
+ "orphaned": "The bound owner join disappeared; external executor state is unknown."
40644
+ }
40645
+ },
40646
+ "TaskClientType": {
40647
+ "type": "string",
40648
+ "enum": [
40649
+ "client"
40650
+ ],
40651
+ "description": "Discriminator for a client-owned task.",
40652
+ "title": "TaskClientType"
40653
+ },
40654
+ "TaskClientUpdate": {
40655
+ "anyOf": [
40656
+ {
40657
+ "type": "object",
40658
+ "properties": {
40659
+ "status": {
40660
+ "$ref": "#/definitions/TaskClientActiveStatus",
40661
+ "description": "Optional active status transition"
40662
+ },
40663
+ "message": {
40664
+ "type": "string",
40665
+ "description": "Optional progress message appended to recent activity when nonempty"
40666
+ },
40667
+ "phase": {
40668
+ "anyOf": [
40669
+ {
40670
+ "type": "string"
40671
+ },
40672
+ {
40673
+ "type": "null"
40674
+ }
40675
+ ],
40676
+ "description": "Optional progress phase; null clears the current phase"
40677
+ },
40678
+ "percentage": {
40679
+ "anyOf": [
40680
+ {
40681
+ "type": "number"
40682
+ },
40683
+ {
40684
+ "type": "null"
40685
+ }
40686
+ ],
40687
+ "description": "Optional completion percentage; null clears the current percentage"
40688
+ },
40689
+ "kind": {
40690
+ "type": "string",
40691
+ "const": "progress",
40692
+ "description": "Client task update variant discriminator."
40693
+ }
40694
+ },
40695
+ "required": [
40696
+ "kind"
40697
+ ],
40698
+ "additionalProperties": false,
40699
+ "description": "Publishes nonterminal progress for a running or idle client task."
40700
+ },
40701
+ {
40702
+ "type": "object",
40703
+ "properties": {
40704
+ "message": {
40705
+ "type": "string",
40706
+ "description": "Optional final progress message"
40707
+ },
40708
+ "result": {
40709
+ "description": "Optional opaque successful terminal result",
40710
+ "x-opaque-json": true
40711
+ },
40712
+ "kind": {
40713
+ "type": "string",
40714
+ "const": "completed",
40715
+ "description": "Client task update variant discriminator."
40716
+ }
40717
+ },
40718
+ "required": [
40719
+ "kind"
40720
+ ],
40721
+ "additionalProperties": false,
40722
+ "description": "Reports successful terminal completion."
40723
+ },
40724
+ {
40725
+ "type": "object",
40726
+ "properties": {
40727
+ "message": {
40728
+ "type": "string",
40729
+ "description": "Optional final progress message"
40730
+ },
40731
+ "error": {
40732
+ "type": "string",
40733
+ "description": "Human-readable terminal failure message"
40734
+ },
40735
+ "code": {
40736
+ "type": "string",
40737
+ "description": "Optional owner-supplied terminal failure code"
40738
+ },
40739
+ "kind": {
40740
+ "type": "string",
40741
+ "const": "failed",
40742
+ "description": "Client task update variant discriminator."
40743
+ }
40744
+ },
40745
+ "required": [
40746
+ "kind",
40747
+ "error"
40748
+ ],
40749
+ "additionalProperties": false,
40750
+ "description": "Reports terminal failure."
40751
+ },
40752
+ {
40753
+ "type": "object",
40754
+ "properties": {
40755
+ "message": {
40756
+ "type": "string",
40757
+ "description": "Optional final progress message"
40758
+ },
40759
+ "reason": {
40760
+ "type": "string",
40761
+ "description": "Optional human-readable cancellation reason"
40762
+ },
40763
+ "kind": {
40764
+ "type": "string",
40765
+ "const": "cancelled",
40766
+ "description": "Client task update variant discriminator."
40767
+ }
40768
+ },
40769
+ "required": [
40770
+ "kind"
40771
+ ],
40772
+ "additionalProperties": false,
40773
+ "description": "Reports terminal cancellation after external work stopped."
40774
+ }
40775
+ ],
40776
+ "description": "Progress or terminal update for a client-owned task.",
40777
+ "title": "TaskClientUpdate"
40778
+ },
38425
40779
  "TaskCompleteData": {
38426
40780
  "type": "object",
38427
40781
  "properties": {
@@ -38522,14 +40876,33 @@
38522
40876
  "$ref": "#/definitions/TaskAgentInfo",
38523
40877
  "description": "Tracked background agent task metadata, including IDs, status, timing, agent type, prompt, model, result, and latest response."
38524
40878
  },
40879
+ {
40880
+ "$ref": "#/definitions/TaskClientInfo",
40881
+ "description": "Tracked client-owned task metadata."
40882
+ },
38525
40883
  {
38526
40884
  "$ref": "#/definitions/TaskShellInfo",
38527
40885
  "description": "Tracked shell task metadata, including ID, command, status, timing, attachment/execution mode, log path, and PID."
38528
40886
  }
38529
40887
  ],
38530
- "description": "Tracked task union returned by task APIs, containing either an agent task or a shell task.",
40888
+ "description": "Tracked task union returned by task APIs, containing an agent, client, or shell task.",
38531
40889
  "title": "TaskInfo"
38532
40890
  },
40891
+ "TaskKind": {
40892
+ "type": "string",
40893
+ "enum": [
40894
+ "agent",
40895
+ "shell",
40896
+ "client"
40897
+ ],
40898
+ "description": "Closed set of public task kinds a connection can negotiate.",
40899
+ "title": "TaskKind",
40900
+ "x-enumDescriptions": {
40901
+ "agent": "Runtime-owned background agent task.",
40902
+ "shell": "Runtime-owned shell task.",
40903
+ "client": "Client-owned externally executed task."
40904
+ }
40905
+ },
38533
40906
  "TaskList": {
38534
40907
  "type": "object",
38535
40908
  "properties": {
@@ -38537,7 +40910,7 @@
38537
40910
  "type": "array",
38538
40911
  "items": {
38539
40912
  "$ref": "#/definitions/TaskInfo",
38540
- "description": "Tracked task union returned by task APIs, containing either an agent task or a shell task."
40913
+ "description": "Tracked task union returned by task APIs, containing an agent, client, or shell task."
38541
40914
  },
38542
40915
  "description": "Currently tracked tasks"
38543
40916
  }
@@ -38552,16 +40925,16 @@
38552
40925
  "TaskProgress": {
38553
40926
  "anyOf": [
38554
40927
  {
38555
- "anyOf": [
38556
- {
38557
- "$ref": "#/definitions/TaskAgentProgress",
38558
- "description": "Progress snapshot for an agent task, with recent activity lines and optional latest intent."
38559
- },
38560
- {
38561
- "$ref": "#/definitions/TaskShellProgress",
38562
- "description": "Progress snapshot for a shell task, with recent stdout/stderr output and optional process ID."
38563
- }
38564
- ]
40928
+ "$ref": "#/definitions/TaskAgentProgress",
40929
+ "description": "Progress snapshot for an agent task, with recent activity lines and optional latest intent."
40930
+ },
40931
+ {
40932
+ "$ref": "#/definitions/TaskClientProgress",
40933
+ "description": "Generic progress for a client-owned task."
40934
+ },
40935
+ {
40936
+ "$ref": "#/definitions/TaskShellProgress",
40937
+ "description": "Progress snapshot for a shell task, with recent stdout/stderr output and optional process ID."
38565
40938
  },
38566
40939
  {
38567
40940
  "type": "null"
@@ -38825,6 +41198,72 @@
38825
41198
  "description": "Refresh metadata for any detached background shells the runtime knows about. Use after a long pause to pick up exit/output state for shells running outside the agent loop.",
38826
41199
  "title": "TasksRefreshResult"
38827
41200
  },
41201
+ "TasksRegisterRequest": {
41202
+ "type": "object",
41203
+ "properties": {
41204
+ "type": {
41205
+ "$ref": "#/definitions/TaskClientType",
41206
+ "const": "client",
41207
+ "description": "Task kind"
41208
+ },
41209
+ "clientTaskId": {
41210
+ "type": "string",
41211
+ "description": "Owner-scoped idempotency key used for registration and reclaim"
41212
+ },
41213
+ "description": {
41214
+ "type": "string",
41215
+ "description": "Human-readable description of the external work"
41216
+ },
41217
+ "displayName": {
41218
+ "type": "string",
41219
+ "description": "Optional short display name for the external work"
41220
+ },
41221
+ "cancellable": {
41222
+ "type": "boolean",
41223
+ "description": "Whether the owner supports runtime cancellation requests"
41224
+ },
41225
+ "expectedSequence": {
41226
+ "type": "integer",
41227
+ "minimum": 0,
41228
+ "description": "Expected current sequence for idempotent registration or orphan reclaim"
41229
+ }
41230
+ },
41231
+ "required": [
41232
+ "type",
41233
+ "clientTaskId",
41234
+ "description",
41235
+ "cancellable"
41236
+ ],
41237
+ "additionalProperties": false,
41238
+ "description": "Registers or reclaims a client-owned task.",
41239
+ "title": "TasksRegisterRequest",
41240
+ "stability": "experimental"
41241
+ },
41242
+ "TasksRegisterResult": {
41243
+ "type": "object",
41244
+ "properties": {
41245
+ "task": {
41246
+ "$ref": "#/definitions/TaskClientInfo",
41247
+ "description": "Authoritative registered or reclaimed task"
41248
+ },
41249
+ "created": {
41250
+ "type": "boolean",
41251
+ "description": "True only when this invocation created a new task"
41252
+ },
41253
+ "reclaimed": {
41254
+ "type": "boolean",
41255
+ "description": "True only when this invocation reclaimed an orphaned task"
41256
+ }
41257
+ },
41258
+ "required": [
41259
+ "task",
41260
+ "created",
41261
+ "reclaimed"
41262
+ ],
41263
+ "additionalProperties": false,
41264
+ "description": "Result of registering or reclaiming a client-owned task.",
41265
+ "title": "TasksRegisterResult"
41266
+ },
38828
41267
  "TasksRemoveRequest": {
38829
41268
  "type": "object",
38830
41269
  "properties": {
@@ -38968,6 +41407,58 @@
38968
41407
  "cancelled": "The task was cancelled before completion."
38969
41408
  }
38970
41409
  },
41410
+ "TasksUpdateRequest": {
41411
+ "type": "object",
41412
+ "properties": {
41413
+ "id": {
41414
+ "type": "string",
41415
+ "description": "Canonical runtime-generated task identifier"
41416
+ },
41417
+ "sequence": {
41418
+ "type": "integer",
41419
+ "minimum": 0,
41420
+ "description": "Owner update sequence to apply"
41421
+ },
41422
+ "update": {
41423
+ "$ref": "#/definitions/TaskClientUpdate",
41424
+ "description": "Progress or terminal update payload"
41425
+ }
41426
+ },
41427
+ "required": [
41428
+ "id",
41429
+ "sequence",
41430
+ "update"
41431
+ ],
41432
+ "additionalProperties": false,
41433
+ "description": "Updates a client-owned task.",
41434
+ "title": "TasksUpdateRequest",
41435
+ "stability": "experimental"
41436
+ },
41437
+ "TasksUpdateResult": {
41438
+ "type": "object",
41439
+ "properties": {
41440
+ "task": {
41441
+ "$ref": "#/definitions/TaskClientInfo",
41442
+ "description": "Authoritative task after processing the update"
41443
+ },
41444
+ "applied": {
41445
+ "type": "boolean",
41446
+ "description": "Whether this invocation changed task state"
41447
+ },
41448
+ "duplicate": {
41449
+ "type": "boolean",
41450
+ "description": "Whether this invocation repeated the latest accepted update"
41451
+ }
41452
+ },
41453
+ "required": [
41454
+ "task",
41455
+ "applied",
41456
+ "duplicate"
41457
+ ],
41458
+ "additionalProperties": false,
41459
+ "description": "Result of publishing a client-owned task update.",
41460
+ "title": "TasksUpdateResult"
41461
+ },
38971
41462
  "TasksWaitForPendingResult": {
38972
41463
  "type": "object",
38973
41464
  "properties": {},