@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.
@@ -1755,6 +1755,10 @@
1755
1755
  "AssistantUsageCopilotUsage": {
1756
1756
  "type": "object",
1757
1757
  "properties": {
1758
+ "model": {
1759
+ "type": "string",
1760
+ "description": "Default billing model for token details that do not identify their own model"
1761
+ },
1758
1762
  "tokenDetails": {
1759
1763
  "type": "array",
1760
1764
  "items": {
@@ -1790,6 +1794,10 @@
1790
1794
  "minimum": 0,
1791
1795
  "description": "Cost per batch of tokens"
1792
1796
  },
1797
+ "model": {
1798
+ "type": "string",
1799
+ "description": "Model responsible for this billing entry"
1800
+ },
1793
1801
  "tokenCount": {
1794
1802
  "type": "integer",
1795
1803
  "minimum": 0,
@@ -3424,14 +3432,194 @@
3424
3432
  "enum": [
3425
3433
  "efficiency",
3426
3434
  "balance",
3427
- "intelligence"
3435
+ "intelligence",
3436
+ "fast"
3428
3437
  ],
3429
- "description": "Routing preference used when the session model is `auto`.",
3438
+ "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.",
3430
3439
  "title": "AutoTier",
3431
3440
  "x-enumDescriptions": {
3432
3441
  "efficiency": "Optimize for efficiency.",
3433
3442
  "balance": "Balance efficiency and intelligence.",
3434
- "intelligence": "Optimize for intelligence."
3443
+ "intelligence": "Optimize for intelligence.",
3444
+ "fast": "Integrator-only preset that optimizes for latency."
3445
+ }
3446
+ },
3447
+ "AutoTierRecommendationData": {
3448
+ "type": "object",
3449
+ "properties": {
3450
+ "recommendedAutoTier": {
3451
+ "$ref": "#/definitions/RecommendedAutoTier",
3452
+ "description": "Recommended Auto preference."
3453
+ }
3454
+ },
3455
+ "required": [
3456
+ "recommendedAutoTier"
3457
+ ],
3458
+ "additionalProperties": false,
3459
+ "description": "Live-only Auto preference recommendation from Copilot API after a successful Auto model call.",
3460
+ "title": "AutoTierRecommendationData",
3461
+ "stability": "experimental"
3462
+ },
3463
+ "AutoTierRecommendationEvent": {
3464
+ "type": "object",
3465
+ "properties": {
3466
+ "id": {
3467
+ "type": "string",
3468
+ "format": "uuid",
3469
+ "description": "Unique event identifier (UUID v4), generated when the event is emitted"
3470
+ },
3471
+ "timestamp": {
3472
+ "type": "string",
3473
+ "format": "date-time",
3474
+ "description": "ISO 8601 timestamp when the event was created"
3475
+ },
3476
+ "parentId": {
3477
+ "anyOf": [
3478
+ {
3479
+ "type": "string",
3480
+ "format": "uuid"
3481
+ },
3482
+ {
3483
+ "type": "null"
3484
+ }
3485
+ ],
3486
+ "description": "ID of the chronologically preceding event in the session, forming a linked chain. Null for the first event."
3487
+ },
3488
+ "ephemeral": {
3489
+ "type": "boolean",
3490
+ "const": true,
3491
+ "description": "Always true for events that are transient and not persisted to the session event log on disk."
3492
+ },
3493
+ "agentId": {
3494
+ "type": "string",
3495
+ "description": "Sub-agent instance identifier. Absent for events from the root/main agent and session-level events."
3496
+ },
3497
+ "type": {
3498
+ "type": "string",
3499
+ "const": "session.auto_tier_recommendation",
3500
+ "description": "Type discriminator. Always \"session.auto_tier_recommendation\"."
3501
+ },
3502
+ "data": {
3503
+ "$ref": "#/definitions/AutoTierRecommendationData",
3504
+ "description": "Live-only Auto preference recommendation from Copilot API after a successful Auto model call."
3505
+ }
3506
+ },
3507
+ "required": [
3508
+ "id",
3509
+ "timestamp",
3510
+ "parentId",
3511
+ "ephemeral",
3512
+ "type",
3513
+ "data"
3514
+ ],
3515
+ "additionalProperties": false,
3516
+ "description": "Session event \"session.auto_tier_recommendation\". Live-only Auto preference recommendation from Copilot API after a successful Auto model call.",
3517
+ "title": "AutoTierRecommendationEvent",
3518
+ "stability": "experimental"
3519
+ },
3520
+ "AutoTierSwitchFailedData": {
3521
+ "type": "object",
3522
+ "properties": {
3523
+ "effectiveAutoTier": {
3524
+ "$ref": "#/definitions/AutoTier",
3525
+ "description": "Auto preference that remains effective after the failed request."
3526
+ },
3527
+ "requestedAutoTier": {
3528
+ "anyOf": [
3529
+ {
3530
+ "$ref": "#/definitions/AutoTier",
3531
+ "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."
3532
+ },
3533
+ {
3534
+ "type": "null"
3535
+ }
3536
+ ],
3537
+ "description": "Auto preference that failed to activate, or null when returning to provider-default routing failed."
3538
+ },
3539
+ "reason": {
3540
+ "$ref": "#/definitions/AutoTierSwitchFailureReason",
3541
+ "description": "Low-cardinality failure outcome reported by Auto resolution."
3542
+ }
3543
+ },
3544
+ "required": [
3545
+ "requestedAutoTier",
3546
+ "reason"
3547
+ ],
3548
+ "additionalProperties": false,
3549
+ "description": "A transient Auto preference failure emitted when the runtime cannot mint or accept a usable model and token pair. The previously effective preference remains active, so SDK clients can surface a non-blocking failure without changing their committed-tier state. This event is ephemeral and is not persisted or replayed on resume.",
3550
+ "title": "AutoTierSwitchFailedData"
3551
+ },
3552
+ "AutoTierSwitchFailedEvent": {
3553
+ "type": "object",
3554
+ "properties": {
3555
+ "id": {
3556
+ "type": "string",
3557
+ "format": "uuid",
3558
+ "description": "Unique event identifier (UUID v4), generated when the event is emitted"
3559
+ },
3560
+ "timestamp": {
3561
+ "type": "string",
3562
+ "format": "date-time",
3563
+ "description": "ISO 8601 timestamp when the event was created"
3564
+ },
3565
+ "parentId": {
3566
+ "anyOf": [
3567
+ {
3568
+ "type": "string",
3569
+ "format": "uuid"
3570
+ },
3571
+ {
3572
+ "type": "null"
3573
+ }
3574
+ ],
3575
+ "description": "ID of the chronologically preceding event in the session, forming a linked chain. Null for the first event."
3576
+ },
3577
+ "ephemeral": {
3578
+ "type": "boolean",
3579
+ "const": true,
3580
+ "description": "Always true for events that are transient and not persisted to the session event log on disk."
3581
+ },
3582
+ "agentId": {
3583
+ "type": "string",
3584
+ "description": "Sub-agent instance identifier. Absent for events from the root/main agent and session-level events."
3585
+ },
3586
+ "type": {
3587
+ "type": "string",
3588
+ "const": "session.auto_tier_switch_failed",
3589
+ "description": "Type discriminator. Always \"session.auto_tier_switch_failed\"."
3590
+ },
3591
+ "data": {
3592
+ "$ref": "#/definitions/AutoTierSwitchFailedData",
3593
+ "description": "A transient Auto preference failure emitted when the runtime cannot mint or accept a usable model and token pair. The previously effective preference remains active, so SDK clients can surface a non-blocking failure without changing their committed-tier state. This event is ephemeral and is not persisted or replayed on resume."
3594
+ }
3595
+ },
3596
+ "required": [
3597
+ "id",
3598
+ "timestamp",
3599
+ "parentId",
3600
+ "ephemeral",
3601
+ "type",
3602
+ "data"
3603
+ ],
3604
+ "additionalProperties": false,
3605
+ "description": "Session event \"session.auto_tier_switch_failed\". A transient Auto preference failure emitted when the runtime cannot mint or accept a usable model and token pair. The previously effective preference remains active, so SDK clients can surface a non-blocking failure without changing their committed-tier state. This event is ephemeral and is not persisted or replayed on resume.",
3606
+ "title": "AutoTierSwitchFailedEvent"
3607
+ },
3608
+ "AutoTierSwitchFailureReason": {
3609
+ "type": "string",
3610
+ "enum": [
3611
+ "policy_rejected",
3612
+ "request_failed",
3613
+ "setup_failed",
3614
+ "unsupported"
3615
+ ],
3616
+ "description": "Terminal reason an Auto preference activation failed.",
3617
+ "title": "AutoTierSwitchFailureReason",
3618
+ "x-enumDescriptions": {
3619
+ "policy_rejected": "The candidate model was rejected by model policy.",
3620
+ "request_failed": "The Auto routing request failed or returned an unusable response.",
3621
+ "setup_failed": "The runtime could not prepare the Auto routing request.",
3622
+ "unsupported": "The provider does not support Auto routing."
3435
3623
  }
3436
3624
  },
3437
3625
  "BackgroundTasksChangedData": {
@@ -5007,6 +5195,11 @@
5007
5195
  "CompactionCompleteCompactionTokensUsedCopilotUsage": {
5008
5196
  "type": "object",
5009
5197
  "properties": {
5198
+ "model": {
5199
+ "type": "string",
5200
+ "description": "Default billing model for token details that do not identify their own model",
5201
+ "visibility": "internal"
5202
+ },
5010
5203
  "tokenDetails": {
5011
5204
  "type": "array",
5012
5205
  "items": {
@@ -5043,6 +5236,10 @@
5043
5236
  "minimum": 0,
5044
5237
  "description": "Cost per batch of tokens"
5045
5238
  },
5239
+ "model": {
5240
+ "type": "string",
5241
+ "description": "Model responsible for this billing entry"
5242
+ },
5046
5243
  "tokenCount": {
5047
5244
  "type": "integer",
5048
5245
  "minimum": 0,
@@ -5107,6 +5304,11 @@
5107
5304
  "type": "string",
5108
5305
  "description": "LLM-generated summary of the compacted conversation history"
5109
5306
  },
5307
+ "activeFactorySummary": {
5308
+ "type": "string",
5309
+ "description": "Authoritative active-factory reminder appended to the compacted context",
5310
+ "visibility": "internal"
5311
+ },
5110
5312
  "behaviorModelId": {
5111
5313
  "type": "string",
5112
5314
  "description": "Canonical model identifier used for model-specific behavior when replaying compaction"
@@ -5710,6 +5912,10 @@
5710
5912
  "type": "boolean",
5711
5913
  "description": "Whether the agent can be selected by the user"
5712
5914
  },
5915
+ "disableModelInvocation": {
5916
+ "type": "boolean",
5917
+ "description": "Whether model-driven invocation is disabled for this agent."
5918
+ },
5713
5919
  "model": {
5714
5920
  "type": "string",
5715
5921
  "description": "Model override for this agent, if set"
@@ -6245,6 +6451,10 @@
6245
6451
  "type": "string",
6246
6452
  "description": "Human-readable error message"
6247
6453
  },
6454
+ "remediation": {
6455
+ "$ref": "#/definitions/RemediationAction",
6456
+ "description": "What the user must do to recover, when the runtime knows of an action. The `message` never names a client affordance, so a client that offers one — a slash command, a settings pane, a link — renders it from this value."
6457
+ },
6248
6458
  "stack": {
6249
6459
  "type": "string",
6250
6460
  "description": "Error stack trace, when available"
@@ -7061,6 +7271,7 @@
7061
7271
  "enum": [
7062
7272
  "completed",
7063
7273
  "halted",
7274
+ "paused",
7064
7275
  "cancelled",
7065
7276
  "error"
7066
7277
  ],
@@ -7069,6 +7280,7 @@
7069
7280
  "x-enumDescriptions": {
7070
7281
  "completed": "The factory body resolved and its result was committed.",
7071
7282
  "halted": "The run was stopped by a limit, an approval refusal or another policy decision.",
7283
+ "paused": "The attempt paused intentionally while preserving resumable run state.",
7072
7284
  "cancelled": "The run was cancelled by its caller or by session disposal.",
7073
7285
  "error": "The run failed, with `failureType` carrying the class when it has one."
7074
7286
  }
@@ -10234,26 +10446,40 @@
10234
10446
  "description": "Session event \"mcp.resources.list_changed\". Payload identifying the MCP server associated with a list change.",
10235
10447
  "title": "McpResourcesListChangedEvent"
10236
10448
  },
10237
- "McpServersLoadedData": {
10449
+ "McpServerMetadata": {
10238
10450
  "type": "object",
10239
10451
  "properties": {
10240
- "servers": {
10241
- "type": "array",
10242
- "items": {
10243
- "$ref": "#/definitions/McpServersLoadedServer",
10244
- "description": "A single MCP server status summary in `session.mcp_servers_loaded`, including name, status, source, transport, and plugin metadata."
10245
- },
10246
- "description": "Array of MCP server status summaries"
10452
+ "instructions": {
10453
+ "type": [
10454
+ "string",
10455
+ "null"
10456
+ ],
10457
+ "description": "Non-empty natural-language guidance for using the server, or null when the server omitted instructions or advertised an empty string."
10247
10458
  }
10248
10459
  },
10249
10460
  "required": [
10250
- "servers"
10461
+ "instructions"
10251
10462
  ],
10252
10463
  "additionalProperties": false,
10253
- "description": "Payload of `session.mcp_servers_loaded` listing MCP server status summaries.",
10254
- "title": "McpServersLoadedData"
10464
+ "description": "Server-advertised metadata learned through modern discovery or legacy initialization.",
10465
+ "title": "McpServerMetadata"
10255
10466
  },
10256
- "McpServersLoadedEvent": {
10467
+ "McpServerNeedsReconnectData": {
10468
+ "type": "object",
10469
+ "properties": {
10470
+ "serverName": {
10471
+ "type": "string",
10472
+ "description": "Name of the MCP server that needs to reconnect"
10473
+ }
10474
+ },
10475
+ "required": [
10476
+ "serverName"
10477
+ ],
10478
+ "additionalProperties": false,
10479
+ "description": "Payload of `session.mcp_server_needs_reconnect` identifying an MCP server whose connection must be re-established.",
10480
+ "title": "McpServerNeedsReconnectData"
10481
+ },
10482
+ "McpServerNeedsReconnectEvent": {
10257
10483
  "type": "object",
10258
10484
  "properties": {
10259
10485
  "id": {
@@ -10289,12 +10515,12 @@
10289
10515
  },
10290
10516
  "type": {
10291
10517
  "type": "string",
10292
- "const": "session.mcp_servers_loaded",
10293
- "description": "Type discriminator. Always \"session.mcp_servers_loaded\"."
10518
+ "const": "session.mcp_server_needs_reconnect",
10519
+ "description": "Type discriminator. Always \"session.mcp_server_needs_reconnect\"."
10294
10520
  },
10295
10521
  "data": {
10296
- "$ref": "#/definitions/McpServersLoadedData",
10297
- "description": "Payload of `session.mcp_servers_loaded` listing MCP server status summaries."
10522
+ "$ref": "#/definitions/McpServerNeedsReconnectData",
10523
+ "description": "Payload of `session.mcp_server_needs_reconnect` identifying an MCP server whose connection must be re-established."
10298
10524
  }
10299
10525
  },
10300
10526
  "required": [
@@ -10306,49 +10532,199 @@
10306
10532
  "data"
10307
10533
  ],
10308
10534
  "additionalProperties": false,
10309
- "description": "Session event \"session.mcp_servers_loaded\". Payload of `session.mcp_servers_loaded` listing MCP server status summaries.",
10310
- "title": "McpServersLoadedEvent"
10535
+ "description": "Session event \"session.mcp_server_needs_reconnect\". Payload of `session.mcp_server_needs_reconnect` identifying an MCP server whose connection must be re-established.",
10536
+ "title": "McpServerNeedsReconnectEvent"
10311
10537
  },
10312
- "McpServersLoadedServer": {
10538
+ "McpServerRemovedData": {
10313
10539
  "type": "object",
10314
10540
  "properties": {
10315
- "name": {
10541
+ "serverName": {
10316
10542
  "type": "string",
10317
- "description": "Server name (config key)"
10318
- },
10319
- "status": {
10320
- "$ref": "#/definitions/McpServerStatus",
10321
- "description": "Connection status: connected, failed, needs-auth, pending, disabled, stopped, or not_configured"
10322
- },
10323
- "source": {
10324
- "$ref": "#/definitions/McpServerSource",
10325
- "description": "Configuration source: user, workspace, plugin, or builtin"
10543
+ "description": "Name of the MCP server that was removed from the graph"
10544
+ }
10545
+ },
10546
+ "required": [
10547
+ "serverName"
10548
+ ],
10549
+ "additionalProperties": false,
10550
+ "description": "Payload of `session.mcp_server_removed` identifying an MCP server the graph no longer runs.",
10551
+ "title": "McpServerRemovedData"
10552
+ },
10553
+ "McpServerRemovedEvent": {
10554
+ "type": "object",
10555
+ "properties": {
10556
+ "id": {
10557
+ "type": "string",
10558
+ "format": "uuid",
10559
+ "description": "Unique event identifier (UUID v4), generated when the event is emitted"
10326
10560
  },
10327
- "error": {
10561
+ "timestamp": {
10328
10562
  "type": "string",
10329
- "description": "Error message if the server failed to connect"
10563
+ "format": "date-time",
10564
+ "description": "ISO 8601 timestamp when the event was created"
10330
10565
  },
10331
- "transport": {
10332
- "$ref": "#/definitions/McpServerTransport",
10333
- "description": "Transport mechanism: stdio, http, sse (deprecated), or memory (in-process MCP server)"
10566
+ "parentId": {
10567
+ "anyOf": [
10568
+ {
10569
+ "type": "string",
10570
+ "format": "uuid"
10571
+ },
10572
+ {
10573
+ "type": "null"
10574
+ }
10575
+ ],
10576
+ "description": "ID of the chronologically preceding event in the session, forming a linked chain. Null for the first event."
10334
10577
  },
10335
- "pluginName": {
10578
+ "ephemeral": {
10579
+ "type": "boolean",
10580
+ "const": true,
10581
+ "description": "Always true for events that are transient and not persisted to the session event log on disk."
10582
+ },
10583
+ "agentId": {
10336
10584
  "type": "string",
10337
- "description": "Name of the plugin that supplied the effective MCP server config, only when source is plugin"
10585
+ "description": "Sub-agent instance identifier. Absent for events from the root/main agent and session-level events."
10338
10586
  },
10339
- "pluginVersion": {
10587
+ "type": {
10340
10588
  "type": "string",
10341
- "description": "Version of the plugin that supplied the effective MCP server config, only when source is plugin"
10589
+ "const": "session.mcp_server_removed",
10590
+ "description": "Type discriminator. Always \"session.mcp_server_removed\"."
10591
+ },
10592
+ "data": {
10593
+ "$ref": "#/definitions/McpServerRemovedData",
10594
+ "description": "Payload of `session.mcp_server_removed` identifying an MCP server the graph no longer runs."
10342
10595
  }
10343
10596
  },
10344
10597
  "required": [
10345
- "name",
10346
- "status"
10347
- ],
10348
- "additionalProperties": false,
10349
- "description": "A single MCP server status summary in `session.mcp_servers_loaded`, including name, status, source, transport, and plugin metadata.",
10350
- "title": "McpServersLoadedServer"
10351
- },
10598
+ "id",
10599
+ "timestamp",
10600
+ "parentId",
10601
+ "ephemeral",
10602
+ "type",
10603
+ "data"
10604
+ ],
10605
+ "additionalProperties": false,
10606
+ "description": "Session event \"session.mcp_server_removed\". Payload of `session.mcp_server_removed` identifying an MCP server the graph no longer runs.",
10607
+ "title": "McpServerRemovedEvent"
10608
+ },
10609
+ "McpServersLoadedData": {
10610
+ "type": "object",
10611
+ "properties": {
10612
+ "servers": {
10613
+ "type": "array",
10614
+ "items": {
10615
+ "$ref": "#/definitions/McpServersLoadedServer",
10616
+ "description": "A single MCP server status summary in `session.mcp_servers_loaded`, including name, status, source, transport, and plugin metadata."
10617
+ },
10618
+ "description": "Array of MCP server status summaries"
10619
+ }
10620
+ },
10621
+ "required": [
10622
+ "servers"
10623
+ ],
10624
+ "additionalProperties": false,
10625
+ "description": "Payload of `session.mcp_servers_loaded` listing MCP server status summaries.",
10626
+ "title": "McpServersLoadedData"
10627
+ },
10628
+ "McpServersLoadedEvent": {
10629
+ "type": "object",
10630
+ "properties": {
10631
+ "id": {
10632
+ "type": "string",
10633
+ "format": "uuid",
10634
+ "description": "Unique event identifier (UUID v4), generated when the event is emitted"
10635
+ },
10636
+ "timestamp": {
10637
+ "type": "string",
10638
+ "format": "date-time",
10639
+ "description": "ISO 8601 timestamp when the event was created"
10640
+ },
10641
+ "parentId": {
10642
+ "anyOf": [
10643
+ {
10644
+ "type": "string",
10645
+ "format": "uuid"
10646
+ },
10647
+ {
10648
+ "type": "null"
10649
+ }
10650
+ ],
10651
+ "description": "ID of the chronologically preceding event in the session, forming a linked chain. Null for the first event."
10652
+ },
10653
+ "ephemeral": {
10654
+ "type": "boolean",
10655
+ "const": true,
10656
+ "description": "Always true for events that are transient and not persisted to the session event log on disk."
10657
+ },
10658
+ "agentId": {
10659
+ "type": "string",
10660
+ "description": "Sub-agent instance identifier. Absent for events from the root/main agent and session-level events."
10661
+ },
10662
+ "type": {
10663
+ "type": "string",
10664
+ "const": "session.mcp_servers_loaded",
10665
+ "description": "Type discriminator. Always \"session.mcp_servers_loaded\"."
10666
+ },
10667
+ "data": {
10668
+ "$ref": "#/definitions/McpServersLoadedData",
10669
+ "description": "Payload of `session.mcp_servers_loaded` listing MCP server status summaries."
10670
+ }
10671
+ },
10672
+ "required": [
10673
+ "id",
10674
+ "timestamp",
10675
+ "parentId",
10676
+ "ephemeral",
10677
+ "type",
10678
+ "data"
10679
+ ],
10680
+ "additionalProperties": false,
10681
+ "description": "Session event \"session.mcp_servers_loaded\". Payload of `session.mcp_servers_loaded` listing MCP server status summaries.",
10682
+ "title": "McpServersLoadedEvent"
10683
+ },
10684
+ "McpServersLoadedServer": {
10685
+ "type": "object",
10686
+ "properties": {
10687
+ "name": {
10688
+ "type": "string",
10689
+ "description": "Server name (config key)"
10690
+ },
10691
+ "status": {
10692
+ "$ref": "#/definitions/McpServerStatus",
10693
+ "description": "Connection status: connected, failed, needs-auth, pending, disabled, stopped, or not_configured"
10694
+ },
10695
+ "source": {
10696
+ "$ref": "#/definitions/McpServerSource",
10697
+ "description": "Configuration source: user, workspace, plugin, or builtin"
10698
+ },
10699
+ "error": {
10700
+ "type": "string",
10701
+ "description": "Error message if the server failed to connect"
10702
+ },
10703
+ "serverMetadata": {
10704
+ "$ref": "#/definitions/McpServerMetadata",
10705
+ "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."
10706
+ },
10707
+ "transport": {
10708
+ "$ref": "#/definitions/McpServerTransport",
10709
+ "description": "Transport mechanism: stdio, http, sse (deprecated), or memory (in-process MCP server)"
10710
+ },
10711
+ "pluginName": {
10712
+ "type": "string",
10713
+ "description": "Name of the plugin that supplied the effective MCP server config, only when source is plugin"
10714
+ },
10715
+ "pluginVersion": {
10716
+ "type": "string",
10717
+ "description": "Version of the plugin that supplied the effective MCP server config, only when source is plugin"
10718
+ }
10719
+ },
10720
+ "required": [
10721
+ "name",
10722
+ "status"
10723
+ ],
10724
+ "additionalProperties": false,
10725
+ "description": "A single MCP server status summary in `session.mcp_servers_loaded`, including name, status, source, transport, and plugin metadata.",
10726
+ "title": "McpServersLoadedServer"
10727
+ },
10352
10728
  "McpServerSource": {
10353
10729
  "type": "string",
10354
10730
  "enum": [
@@ -11221,6 +11597,22 @@
11221
11597
  "source": {
11222
11598
  "$ref": "#/definitions/ModelChangeSource",
11223
11599
  "description": "Origin of the effective model change, when known."
11600
+ },
11601
+ "previousAutoTier": {
11602
+ "$ref": "#/definitions/AutoTier",
11603
+ "description": "Previously committed Auto preference, when one was explicitly selected."
11604
+ },
11605
+ "autoTier": {
11606
+ "anyOf": [
11607
+ {
11608
+ "$ref": "#/definitions/AutoTier",
11609
+ "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."
11610
+ },
11611
+ {
11612
+ "type": "null"
11613
+ }
11614
+ ],
11615
+ "description": "Committed Auto preference after the model configuration change, when applicable."
11224
11616
  }
11225
11617
  },
11226
11618
  "required": [
@@ -11643,6 +12035,96 @@
11643
12035
  "description": "Permission response variant indicating the request was cancelled before use, with an optional reason.",
11644
12036
  "title": "PermissionCancelled"
11645
12037
  },
12038
+ "PermissionCarriedForwardData": {
12039
+ "type": "object",
12040
+ "properties": {
12041
+ "requestId": {
12042
+ "type": "string",
12043
+ "description": "Authorization edge minted for this admission. Not a prompt id: no prompt was raised, so no client should expect a request with this id.",
12044
+ "stability": "experimental"
12045
+ },
12046
+ "toolCallId": {
12047
+ "type": "string",
12048
+ "description": "Tool call this admission authorizes. Its execution receipts the prior grant, which is how a single-effect approval is spent rather than carried forward again.",
12049
+ "stability": "experimental"
12050
+ },
12051
+ "recordId": {
12052
+ "type": "string",
12053
+ "description": "Identity of the prior authorization record that contained the proposal.",
12054
+ "stability": "experimental"
12055
+ },
12056
+ "decisionSource": {
12057
+ "$ref": "#/definitions/PermissionDecisionSource",
12058
+ "description": "Always `authorization_carry_forward`. Stated explicitly so a consumer reading this event cannot mistake it for a human, host-policy, or assisted-approval decision.",
12059
+ "stability": "experimental"
12060
+ }
12061
+ },
12062
+ "required": [
12063
+ "requestId",
12064
+ "toolCallId",
12065
+ "recordId",
12066
+ "decisionSource"
12067
+ ],
12068
+ "additionalProperties": false,
12069
+ "description": "Records that a live authorization record from an earlier human decision in this session contained a permission proposal, so it ran without another prompt. This mints no authority: it accounts for one more effect against the prior grant, which is what lets a replayed session agree with the live one about how much of that grant is left.",
12070
+ "title": "PermissionCarriedForwardData",
12071
+ "stability": "experimental"
12072
+ },
12073
+ "PermissionCarriedForwardEvent": {
12074
+ "type": "object",
12075
+ "properties": {
12076
+ "id": {
12077
+ "type": "string",
12078
+ "format": "uuid",
12079
+ "description": "Unique event identifier (UUID v4), generated when the event is emitted"
12080
+ },
12081
+ "timestamp": {
12082
+ "type": "string",
12083
+ "format": "date-time",
12084
+ "description": "ISO 8601 timestamp when the event was created"
12085
+ },
12086
+ "parentId": {
12087
+ "anyOf": [
12088
+ {
12089
+ "type": "string",
12090
+ "format": "uuid"
12091
+ },
12092
+ {
12093
+ "type": "null"
12094
+ }
12095
+ ],
12096
+ "description": "ID of the chronologically preceding event in the session, forming a linked chain. Null for the first event."
12097
+ },
12098
+ "ephemeral": {
12099
+ "type": "boolean",
12100
+ "description": "When true, the event is transient and not persisted to the session event log on disk"
12101
+ },
12102
+ "agentId": {
12103
+ "type": "string",
12104
+ "description": "Sub-agent instance identifier. Absent for events from the root/main agent and session-level events."
12105
+ },
12106
+ "type": {
12107
+ "type": "string",
12108
+ "const": "permission.carriedForward",
12109
+ "description": "Type discriminator. Always \"permission.carriedForward\"."
12110
+ },
12111
+ "data": {
12112
+ "$ref": "#/definitions/PermissionCarriedForwardData",
12113
+ "description": "Records that a live authorization record from an earlier human decision in this session contained a permission proposal, so it ran without another prompt. This mints no authority: it accounts for one more effect against the prior grant, which is what lets a replayed session agree with the live one about how much of that grant is left."
12114
+ }
12115
+ },
12116
+ "required": [
12117
+ "id",
12118
+ "timestamp",
12119
+ "parentId",
12120
+ "type",
12121
+ "data"
12122
+ ],
12123
+ "additionalProperties": false,
12124
+ "description": "Session event \"permission.carriedForward\". Records that a live authorization record from an earlier human decision in this session contained a permission proposal, so it ran without another prompt. This mints no authority: it accounts for one more effect against the prior grant, which is what lets a replayed session agree with the live one about how much of that grant is left.",
12125
+ "title": "PermissionCarriedForwardEvent",
12126
+ "stability": "experimental"
12127
+ },
11646
12128
  "PermissionCompletedData": {
11647
12129
  "type": "object",
11648
12130
  "properties": {
@@ -11657,6 +12139,11 @@
11657
12139
  "result": {
11658
12140
  "$ref": "#/definitions/PermissionResult",
11659
12141
  "description": "The result of the permission request"
12142
+ },
12143
+ "decisionSource": {
12144
+ "$ref": "#/definitions/PermissionDecisionSource",
12145
+ "description": "Who decided this permission request. Absent on completions recorded before this field existed, which consumers must treat as \"not a human decision\" rather than assuming one. Authorization records are minted only for `human_response`; an assisted-approval verdict, a host policy, an unattended fallback, and a hook resolution all produce the same `result` a person does, so this is the only field that distinguishes them.",
12146
+ "stability": "experimental"
11660
12147
  }
11661
12148
  },
11662
12149
  "required": [
@@ -11721,6 +12208,25 @@
11721
12208
  "description": "Session event \"permission.completed\". Permission request completion notification signaling UI dismissal",
11722
12209
  "title": "PermissionCompletedEvent"
11723
12210
  },
12211
+ "PermissionDecisionSource": {
12212
+ "type": "string",
12213
+ "enum": [
12214
+ "assisted_approval",
12215
+ "human_response",
12216
+ "host_policy",
12217
+ "unattended_fallback",
12218
+ "authorization_carry_forward"
12219
+ ],
12220
+ "description": "Controlled reason or actor responsible for a permission response.",
12221
+ "title": "PermissionDecisionSource",
12222
+ "x-enumDescriptions": {
12223
+ "assisted_approval": "The response followed the assisted-approval judge recommendation.",
12224
+ "human_response": "A human supplied the response through an interactive prompt.",
12225
+ "host_policy": "The host applied a standing policy or override rather than a judge recommendation or human decision.",
12226
+ "unattended_fallback": "The host denied the request because no interactive user response was available.",
12227
+ "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."
12228
+ }
12229
+ },
11724
12230
  "PermissionDeniedByContentExclusionPolicy": {
11725
12231
  "type": "object",
11726
12232
  "properties": {
@@ -11793,48 +12299,332 @@
11793
12299
  "rules"
11794
12300
  ],
11795
12301
  "additionalProperties": false,
11796
- "description": "Permission response variant denied because matching approval rules explicitly blocked the request.",
11797
- "title": "PermissionDeniedByRules"
12302
+ "description": "Permission response variant denied because matching approval rules explicitly blocked the request.",
12303
+ "title": "PermissionDeniedByRules"
12304
+ },
12305
+ "PermissionDeniedInteractivelyByUser": {
12306
+ "type": "object",
12307
+ "properties": {
12308
+ "kind": {
12309
+ "type": "string",
12310
+ "const": "denied-interactively-by-user",
12311
+ "description": "Denied by the user during an interactive prompt"
12312
+ },
12313
+ "feedback": {
12314
+ "type": "string",
12315
+ "description": "Optional feedback from the user explaining the denial"
12316
+ },
12317
+ "forceReject": {
12318
+ "type": "boolean",
12319
+ "description": "Whether to force-reject the current agent turn"
12320
+ }
12321
+ },
12322
+ "required": [
12323
+ "kind"
12324
+ ],
12325
+ "additionalProperties": false,
12326
+ "description": "Permission response variant denied in an interactive user prompt, with optional feedback and force-reject flag.",
12327
+ "title": "PermissionDeniedInteractivelyByUser"
12328
+ },
12329
+ "PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUser": {
12330
+ "type": "object",
12331
+ "properties": {
12332
+ "kind": {
12333
+ "type": "string",
12334
+ "const": "denied-no-approval-rule-and-could-not-request-from-user",
12335
+ "description": "Denied because no approval rule matched and user confirmation was unavailable"
12336
+ }
12337
+ },
12338
+ "required": [
12339
+ "kind"
12340
+ ],
12341
+ "additionalProperties": false,
12342
+ "description": "Permission response variant denied because no approval rule matched and user confirmation was unavailable.",
12343
+ "title": "PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUser"
12344
+ },
12345
+ "PermissionMessageAuthorizationData": {
12346
+ "type": "object",
12347
+ "properties": {
12348
+ "recordId": {
12349
+ "type": "string",
12350
+ "description": "Deterministic identity of the record, derived from the turn and span offsets so re-extracting the same span mints nothing new.",
12351
+ "stability": "experimental"
12352
+ },
12353
+ "turnIndex": {
12354
+ "type": "integer",
12355
+ "minimum": 0,
12356
+ "description": "The human turn the quoted span was read from.",
12357
+ "stability": "experimental"
12358
+ },
12359
+ "polarity": {
12360
+ "$ref": "#/definitions/PermissionMessageAuthorizationPolarity",
12361
+ "description": "Whether the claim granted or denied authority.",
12362
+ "stability": "experimental"
12363
+ },
12364
+ "actionClass": {
12365
+ "type": "string",
12366
+ "description": "The kind of effect authorized, as an action-class identifier.",
12367
+ "stability": "experimental"
12368
+ },
12369
+ "spanStart": {
12370
+ "type": "integer",
12371
+ "minimum": 0,
12372
+ "description": "Start byte offset of the authorizing span within the turn.",
12373
+ "stability": "experimental"
12374
+ },
12375
+ "spanEnd": {
12376
+ "type": "integer",
12377
+ "minimum": 0,
12378
+ "description": "End byte offset of the authorizing span within the turn.",
12379
+ "stability": "experimental"
12380
+ },
12381
+ "targetMembers": {
12382
+ "type": "array",
12383
+ "items": {
12384
+ "type": "string"
12385
+ },
12386
+ "default": [],
12387
+ "description": "Concrete named targets that appear verbatim inside the span.",
12388
+ "stability": "experimental"
12389
+ },
12390
+ "task": {
12391
+ "type": "string",
12392
+ "description": "The task the permission is scoped to, when the human named one.",
12393
+ "stability": "experimental"
12394
+ },
12395
+ "world": {
12396
+ "description": "The trusted version discriminator, when one exists. Exact shell-command grants carry the byte-identical commands grounded in the human span; world-derived classes carry a file object, remote tip, or runner only when that state was captured safely. An opaque object mirroring the runtime's adjacently-tagged resolution.",
12397
+ "x-opaque-json": true,
12398
+ "stability": "experimental"
12399
+ }
12400
+ },
12401
+ "required": [
12402
+ "recordId",
12403
+ "turnIndex",
12404
+ "polarity",
12405
+ "actionClass",
12406
+ "spanStart",
12407
+ "spanEnd"
12408
+ ],
12409
+ "additionalProperties": false,
12410
+ "description": "Freezes one blinded, verbatim-verified authorization claim the runtime minted from a human user message, so a resumed session re-establishes the same grant deterministically instead of re-running the extraction model. This mints no authority on its own: it records what a blinded proposer pointed at and the trusted discriminator the runtime established, and deterministic establishment runs on replay. Persisted so recorded authority survives compaction and process resume.",
12411
+ "title": "PermissionMessageAuthorizationData",
12412
+ "stability": "experimental"
12413
+ },
12414
+ "PermissionMessageAuthorizationDegradedData": {
12415
+ "type": "object",
12416
+ "properties": {
12417
+ "turnIndex": {
12418
+ "type": "integer",
12419
+ "minimum": 0,
12420
+ "description": "The human turn that could not be represented safely.",
12421
+ "stability": "experimental"
12422
+ }
12423
+ },
12424
+ "required": [
12425
+ "turnIndex"
12426
+ ],
12427
+ "additionalProperties": false,
12428
+ "description": "Records that message-backed authorization could not safely represent one human turn before compaction. The runtime may compact the original message after this marker is durable, but message-derived carry-forward and assisted auto-approval remain disabled for the rest of the session so subsequent commands continue through the ordinary permission prompt.",
12429
+ "title": "PermissionMessageAuthorizationDegradedData",
12430
+ "stability": "experimental"
12431
+ },
12432
+ "PermissionMessageAuthorizationDegradedEvent": {
12433
+ "type": "object",
12434
+ "properties": {
12435
+ "id": {
12436
+ "type": "string",
12437
+ "format": "uuid",
12438
+ "description": "Unique event identifier (UUID v4), generated when the event is emitted"
12439
+ },
12440
+ "timestamp": {
12441
+ "type": "string",
12442
+ "format": "date-time",
12443
+ "description": "ISO 8601 timestamp when the event was created"
12444
+ },
12445
+ "parentId": {
12446
+ "anyOf": [
12447
+ {
12448
+ "type": "string",
12449
+ "format": "uuid"
12450
+ },
12451
+ {
12452
+ "type": "null"
12453
+ }
12454
+ ],
12455
+ "description": "ID of the chronologically preceding event in the session, forming a linked chain. Null for the first event."
12456
+ },
12457
+ "ephemeral": {
12458
+ "type": "boolean",
12459
+ "description": "When true, the event is transient and not persisted to the session event log on disk"
12460
+ },
12461
+ "agentId": {
12462
+ "type": "string",
12463
+ "description": "Sub-agent instance identifier. Absent for events from the root/main agent and session-level events."
12464
+ },
12465
+ "type": {
12466
+ "type": "string",
12467
+ "const": "permission.messageAuthorizationDegraded",
12468
+ "description": "Type discriminator. Always \"permission.messageAuthorizationDegraded\"."
12469
+ },
12470
+ "data": {
12471
+ "$ref": "#/definitions/PermissionMessageAuthorizationDegradedData",
12472
+ "description": "Records that message-backed authorization could not safely represent one human turn before compaction. The runtime may compact the original message after this marker is durable, but message-derived carry-forward and assisted auto-approval remain disabled for the rest of the session so subsequent commands continue through the ordinary permission prompt."
12473
+ }
12474
+ },
12475
+ "required": [
12476
+ "id",
12477
+ "timestamp",
12478
+ "parentId",
12479
+ "type",
12480
+ "data"
12481
+ ],
12482
+ "additionalProperties": false,
12483
+ "description": "Session event \"permission.messageAuthorizationDegraded\". Records that message-backed authorization could not safely represent one human turn before compaction. The runtime may compact the original message after this marker is durable, but message-derived carry-forward and assisted auto-approval remain disabled for the rest of the session so subsequent commands continue through the ordinary permission prompt.",
12484
+ "title": "PermissionMessageAuthorizationDegradedEvent",
12485
+ "stability": "experimental"
12486
+ },
12487
+ "PermissionMessageAuthorizationEvent": {
12488
+ "type": "object",
12489
+ "properties": {
12490
+ "id": {
12491
+ "type": "string",
12492
+ "format": "uuid",
12493
+ "description": "Unique event identifier (UUID v4), generated when the event is emitted"
12494
+ },
12495
+ "timestamp": {
12496
+ "type": "string",
12497
+ "format": "date-time",
12498
+ "description": "ISO 8601 timestamp when the event was created"
12499
+ },
12500
+ "parentId": {
12501
+ "anyOf": [
12502
+ {
12503
+ "type": "string",
12504
+ "format": "uuid"
12505
+ },
12506
+ {
12507
+ "type": "null"
12508
+ }
12509
+ ],
12510
+ "description": "ID of the chronologically preceding event in the session, forming a linked chain. Null for the first event."
12511
+ },
12512
+ "ephemeral": {
12513
+ "type": "boolean",
12514
+ "description": "When true, the event is transient and not persisted to the session event log on disk"
12515
+ },
12516
+ "agentId": {
12517
+ "type": "string",
12518
+ "description": "Sub-agent instance identifier. Absent for events from the root/main agent and session-level events."
12519
+ },
12520
+ "type": {
12521
+ "type": "string",
12522
+ "const": "permission.messageAuthorization",
12523
+ "description": "Type discriminator. Always \"permission.messageAuthorization\"."
12524
+ },
12525
+ "data": {
12526
+ "$ref": "#/definitions/PermissionMessageAuthorizationData",
12527
+ "description": "Freezes one blinded, verbatim-verified authorization claim the runtime minted from a human user message, so a resumed session re-establishes the same grant deterministically instead of re-running the extraction model. This mints no authority on its own: it records what a blinded proposer pointed at and the trusted discriminator the runtime established, and deterministic establishment runs on replay. Persisted so recorded authority survives compaction and process resume."
12528
+ }
12529
+ },
12530
+ "required": [
12531
+ "id",
12532
+ "timestamp",
12533
+ "parentId",
12534
+ "type",
12535
+ "data"
12536
+ ],
12537
+ "additionalProperties": false,
12538
+ "description": "Session event \"permission.messageAuthorization\". Freezes one blinded, verbatim-verified authorization claim the runtime minted from a human user message, so a resumed session re-establishes the same grant deterministically instead of re-running the extraction model. This mints no authority on its own: it records what a blinded proposer pointed at and the trusted discriminator the runtime established, and deterministic establishment runs on replay. Persisted so recorded authority survives compaction and process resume.",
12539
+ "title": "PermissionMessageAuthorizationEvent",
12540
+ "stability": "experimental"
11798
12541
  },
11799
- "PermissionDeniedInteractivelyByUser": {
12542
+ "PermissionMessageAuthorizationPolarity": {
12543
+ "type": "string",
12544
+ "enum": [
12545
+ "grant",
12546
+ "denial"
12547
+ ],
12548
+ "description": "Which direction a message-backed authorization claim moves authority in.",
12549
+ "title": "PermissionMessageAuthorizationPolarity",
12550
+ "x-enumDescriptions": {
12551
+ "grant": "The human's words authorized an effect.",
12552
+ "denial": "The human's words refused an effect."
12553
+ },
12554
+ "stability": "experimental"
12555
+ },
12556
+ "PermissionMessageAuthorizationReadData": {
11800
12557
  "type": "object",
11801
12558
  "properties": {
11802
- "kind": {
11803
- "type": "string",
11804
- "const": "denied-interactively-by-user",
11805
- "description": "Denied by the user during an interactive prompt"
11806
- },
11807
- "feedback": {
11808
- "type": "string",
11809
- "description": "Optional feedback from the user explaining the denial"
11810
- },
11811
- "forceReject": {
11812
- "type": "boolean",
11813
- "description": "Whether to force-reject the current agent turn"
12559
+ "turnIndex": {
12560
+ "type": "integer",
12561
+ "minimum": 0,
12562
+ "description": "The human turn that was read by the proposer.",
12563
+ "stability": "experimental"
11814
12564
  }
11815
12565
  },
11816
12566
  "required": [
11817
- "kind"
12567
+ "turnIndex"
11818
12568
  ],
11819
12569
  "additionalProperties": false,
11820
- "description": "Permission response variant denied in an interactive user prompt, with optional feedback and force-reject flag.",
11821
- "title": "PermissionDeniedInteractivelyByUser"
12570
+ "description": "Records that one human turn has been read by the blinded authorization proposer, whether or not it minted anything, so a resumed session does not re-run the extraction model on a turn the live session already read. Persisted purely to avoid wasted model calls across resume; it is never a correctness mechanism.",
12571
+ "title": "PermissionMessageAuthorizationReadData",
12572
+ "stability": "experimental"
11822
12573
  },
11823
- "PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUser": {
12574
+ "PermissionMessageAuthorizationReadEvent": {
11824
12575
  "type": "object",
11825
12576
  "properties": {
11826
- "kind": {
12577
+ "id": {
11827
12578
  "type": "string",
11828
- "const": "denied-no-approval-rule-and-could-not-request-from-user",
11829
- "description": "Denied because no approval rule matched and user confirmation was unavailable"
12579
+ "format": "uuid",
12580
+ "description": "Unique event identifier (UUID v4), generated when the event is emitted"
12581
+ },
12582
+ "timestamp": {
12583
+ "type": "string",
12584
+ "format": "date-time",
12585
+ "description": "ISO 8601 timestamp when the event was created"
12586
+ },
12587
+ "parentId": {
12588
+ "anyOf": [
12589
+ {
12590
+ "type": "string",
12591
+ "format": "uuid"
12592
+ },
12593
+ {
12594
+ "type": "null"
12595
+ }
12596
+ ],
12597
+ "description": "ID of the chronologically preceding event in the session, forming a linked chain. Null for the first event."
12598
+ },
12599
+ "ephemeral": {
12600
+ "type": "boolean",
12601
+ "description": "When true, the event is transient and not persisted to the session event log on disk"
12602
+ },
12603
+ "agentId": {
12604
+ "type": "string",
12605
+ "description": "Sub-agent instance identifier. Absent for events from the root/main agent and session-level events."
12606
+ },
12607
+ "type": {
12608
+ "type": "string",
12609
+ "const": "permission.messageAuthorizationRead",
12610
+ "description": "Type discriminator. Always \"permission.messageAuthorizationRead\"."
12611
+ },
12612
+ "data": {
12613
+ "$ref": "#/definitions/PermissionMessageAuthorizationReadData",
12614
+ "description": "Records that one human turn has been read by the blinded authorization proposer, whether or not it minted anything, so a resumed session does not re-run the extraction model on a turn the live session already read. Persisted purely to avoid wasted model calls across resume; it is never a correctness mechanism."
11830
12615
  }
11831
12616
  },
11832
12617
  "required": [
11833
- "kind"
12618
+ "id",
12619
+ "timestamp",
12620
+ "parentId",
12621
+ "type",
12622
+ "data"
11834
12623
  ],
11835
12624
  "additionalProperties": false,
11836
- "description": "Permission response variant denied because no approval rule matched and user confirmation was unavailable.",
11837
- "title": "PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUser"
12625
+ "description": "Session event \"permission.messageAuthorizationRead\". Records that one human turn has been read by the blinded authorization proposer, whether or not it minted anything, so a resumed session does not re-run the extraction model on a turn the live session already read. Persisted purely to avoid wasted model calls across resume; it is never a correctness mechanism.",
12626
+ "title": "PermissionMessageAuthorizationReadEvent",
12627
+ "stability": "experimental"
11838
12628
  },
11839
12629
  "PermissionMode": {
11840
12630
  "type": "string",
@@ -11953,6 +12743,18 @@
11953
12743
  "managedApprovalRequired": {
11954
12744
  "type": "boolean",
11955
12745
  "description": "Whether managed policy requires a human response and forbids host auto-approval"
12746
+ },
12747
+ "requestSandboxBypass": {
12748
+ "type": "boolean",
12749
+ "description": "True when the shell command is requesting sandbox escalation. This is a request, not a grant."
12750
+ },
12751
+ "requestSandboxPermissive": {
12752
+ "type": "boolean",
12753
+ "description": "True when the escalation is a permissive retry that keeps the sandbox and network policy attached while recording file and process accesses instead of blocking them."
12754
+ },
12755
+ "requestSandboxBypassReason": {
12756
+ "type": "string",
12757
+ "description": "Reason for the sandbox escalation request."
11956
12758
  }
11957
12759
  },
11958
12760
  "required": [
@@ -12429,6 +13231,11 @@
12429
13231
  "type": "string",
12430
13232
  "description": "Path of the file or directory being read"
12431
13233
  },
13234
+ "resolvedPath": {
13235
+ "type": "string",
13236
+ "description": "Runtime-resolved canonical path used for authorization identity checks. Internal and experimental; clients should continue to display path.",
13237
+ "stability": "experimental"
13238
+ },
12432
13239
  "assistedApproval": {
12433
13240
  "$ref": "#/definitions/PermissionAssistedApproval",
12434
13241
  "description": "Assisted-approval judge information for this request; present only in assisted mode.",
@@ -12474,11 +13281,11 @@
12474
13281
  },
12475
13282
  "requestSandboxBypass": {
12476
13283
  "type": "boolean",
12477
- "description": "True when this URL fetch is requesting to bypass the sandbox network policy: either the model set requestSandboxBypass: true, or the tool re-issued the request as an interactive bypass after the network policy denied the approved URL (host opted in via sandbox.allowBypass). This is a request, not a grant: the fetch runs only if the user approves this permission request. Hosts should highlight the elevated risk in the approval UI."
13284
+ "description": "True when the tool is asking to run this URL fetch outside the sandbox, after the network policy denied the approved URL or the sandbox proxy could not reach it (host opted in via sandbox.allowBypass). The model cannot ask for this; only the tool raises it. This is a request, not a grant: the fetch runs only if the user approves this permission request. Hosts should highlight the elevated risk in the approval UI."
12478
13285
  },
12479
13286
  "requestSandboxBypassReason": {
12480
13287
  "type": "string",
12481
- "description": "Model-provided justification for the sandbox-bypass request. Only meaningful when requestSandboxBypass is true."
13288
+ "description": "What the tool tells the user about the bypass on offer: which policy rule blocked the call, or why it cannot be sandboxed. Only meaningful when requestSandboxBypass is true."
12482
13289
  },
12483
13290
  "assistedApproval": {
12484
13291
  "$ref": "#/definitions/PermissionAssistedApproval",
@@ -12519,6 +13326,11 @@
12519
13326
  "type": "string",
12520
13327
  "description": "Path of the file being written to"
12521
13328
  },
13329
+ "resolvedPath": {
13330
+ "type": "string",
13331
+ "description": "Runtime-resolved canonical path used for authorization identity checks. Internal and experimental; clients should continue to display fileName.",
13332
+ "stability": "experimental"
13333
+ },
12522
13334
  "diff": {
12523
13335
  "type": "string",
12524
13336
  "description": "Unified diff showing the proposed changes"
@@ -13136,13 +13948,18 @@
13136
13948
  "type": "string",
13137
13949
  "description": "Path of the file or directory being read"
13138
13950
  },
13951
+ "resolvedPath": {
13952
+ "type": "string",
13953
+ "description": "Runtime-resolved canonical path used for authorization identity checks. Internal and experimental; clients should continue to display path.",
13954
+ "stability": "experimental"
13955
+ },
13139
13956
  "requestSandboxBypass": {
13140
13957
  "type": "boolean",
13141
- "description": "True when the model has requested to run this search outside the sandbox (it set requestSandboxBypass: true and the host opted in via sandbox.allowBypass). This is a request, not a grant: the search runs unsandboxed only if the user approves this permission request. Hosts should highlight the elevated risk in the approval UI."
13958
+ "description": "True when the tool is asking to re-run this search outside the sandbox, after a sandboxed run looked blocked (host opted in via sandbox.allowBypass). The model cannot ask for this; only the tool raises it. This is a request, not a grant: the search runs unsandboxed only if the user approves this permission request. Hosts should highlight the elevated risk in the approval UI."
13142
13959
  },
13143
13960
  "requestSandboxBypassReason": {
13144
13961
  "type": "string",
13145
- "description": "Model-provided justification for the sandbox-bypass request. Only meaningful when requestSandboxBypass is true."
13962
+ "description": "What the tool tells the user about the bypass on offer: which policy rule blocked the call, or why it cannot be sandboxed. Only meaningful when requestSandboxBypass is true."
13146
13963
  }
13147
13964
  },
13148
13965
  "required": [
@@ -13201,6 +14018,19 @@
13201
14018
  },
13202
14019
  "description": "File paths that may be read or written by the command"
13203
14020
  },
14021
+ "resolvedWorkingDirectory": {
14022
+ "type": "string",
14023
+ "description": "Runtime-resolved canonical working directory the command runs in, used for authorization identity checks. Internal and experimental; clients should not display it.",
14024
+ "stability": "experimental"
14025
+ },
14026
+ "resolvedPaths": {
14027
+ "type": "object",
14028
+ "additionalProperties": {
14029
+ "type": "string"
14030
+ },
14031
+ "description": "Runtime-resolved canonical object each possiblePaths entry names, keyed by the requested spelling, used for authorization identity checks. Internal and experimental; clients should continue to display possiblePaths.",
14032
+ "stability": "experimental"
14033
+ },
13204
14034
  "possibleUrls": {
13205
14035
  "type": "array",
13206
14036
  "items": {
@@ -13223,11 +14053,15 @@
13223
14053
  },
13224
14054
  "requestSandboxBypass": {
13225
14055
  "type": "boolean",
13226
- "description": "True when the model has requested to run this command outside the sandbox (it set requestSandboxBypass: true and the host opted in via sandbox.allowBypass). This is a request, not a grant: the command runs unsandboxed only if the user approves this permission request. Hosts should highlight the elevated risk in the approval UI."
14056
+ "description": "True when the tool is asking to run this command outside the sandbox, either because the command detaches and cannot be sandboxed at all, or because a sandboxed run looked blocked (host opted in via sandbox.allowBypass). The model cannot ask for this; only the tool raises it. This is a request, not a grant: the command runs unsandboxed only if the user approves this permission request. Hosts should highlight the elevated risk in the approval UI."
14057
+ },
14058
+ "requestSandboxPermissive": {
14059
+ "type": "boolean",
14060
+ "description": "True when the requested escalation is a permissive retry rather than a full bypass: the command re-runs inside the sandbox with its file and process restrictions recording instead of blocking, while the network policy stays enforced. Always accompanied by requestSandboxBypass, so hosts that do not recognize this field still treat the request as the escalation it is. Hosts that do recognize it must not describe the command as running outside the sandbox, which would overstate the privilege being granted."
13227
14061
  },
13228
14062
  "requestSandboxBypassReason": {
13229
14063
  "type": "string",
13230
- "description": "Model-provided justification for the sandbox-bypass request. Only meaningful when requestSandboxBypass is true."
14064
+ "description": "What the tool tells the user about the bypass on offer: which policy rule blocked the call, or why it cannot be sandboxed. Only meaningful when requestSandboxBypass is true."
13231
14065
  }
13232
14066
  },
13233
14067
  "required": [
@@ -13329,11 +14163,11 @@
13329
14163
  },
13330
14164
  "requestSandboxBypass": {
13331
14165
  "type": "boolean",
13332
- "description": "True when this URL fetch is requesting to bypass the sandbox network policy: either the model set requestSandboxBypass: true, or the tool re-issued the request as an interactive bypass after the network policy denied the approved URL (host opted in via sandbox.allowBypass). This is a request, not a grant: the fetch runs only if the user approves this permission request. Hosts should highlight the elevated risk in the approval UI."
14166
+ "description": "True when the tool is asking to run this URL fetch outside the sandbox, after the network policy denied the approved URL or the sandbox proxy could not reach it (host opted in via sandbox.allowBypass). The model cannot ask for this; only the tool raises it. This is a request, not a grant: the fetch runs only if the user approves this permission request. Hosts should highlight the elevated risk in the approval UI."
13333
14167
  },
13334
14168
  "requestSandboxBypassReason": {
13335
14169
  "type": "string",
13336
- "description": "Model-provided justification for the sandbox-bypass request. Only meaningful when requestSandboxBypass is true."
14170
+ "description": "What the tool tells the user about the bypass on offer: which policy rule blocked the call, or why it cannot be sandboxed. Only meaningful when requestSandboxBypass is true."
13337
14171
  }
13338
14172
  },
13339
14173
  "required": [
@@ -13369,6 +14203,11 @@
13369
14203
  "type": "string",
13370
14204
  "description": "Path of the file being written to"
13371
14205
  },
14206
+ "resolvedPath": {
14207
+ "type": "string",
14208
+ "description": "Runtime-resolved canonical path used for authorization identity checks. Internal and experimental; clients should continue to display fileName.",
14209
+ "stability": "experimental"
14210
+ },
13372
14211
  "diff": {
13373
14212
  "type": "string",
13374
14213
  "description": "Unified diff showing the proposed changes"
@@ -13485,10 +14324,6 @@
13485
14324
  "stability": "experimental"
13486
14325
  }
13487
14326
  },
13488
- "required": [
13489
- "previousMode",
13490
- "mode"
13491
- ],
13492
14327
  "additionalProperties": false,
13493
14328
  "description": "Permission-mode transition details.",
13494
14329
  "title": "PermissionsChangedData",
@@ -13945,6 +14780,40 @@
13945
14780
  "detailed": "Request a detailed summary of the model's reasoning."
13946
14781
  }
13947
14782
  },
14783
+ "RecommendedAutoTier": {
14784
+ "type": "string",
14785
+ "enum": [
14786
+ "efficiency",
14787
+ "balance",
14788
+ "intelligence"
14789
+ ],
14790
+ "description": "Auto preferences that Copilot API can recommend.",
14791
+ "title": "RecommendedAutoTier",
14792
+ "x-enumDescriptions": {
14793
+ "efficiency": "Optimize for efficiency.",
14794
+ "balance": "Balance efficiency and intelligence.",
14795
+ "intelligence": "Optimize for intelligence."
14796
+ }
14797
+ },
14798
+ "RemediationAction": {
14799
+ "type": "string",
14800
+ "enum": [
14801
+ "sign_in",
14802
+ "switch_account",
14803
+ "show_account",
14804
+ "review_sandbox_policy",
14805
+ "allow_sandbox_outbound"
14806
+ ],
14807
+ "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.",
14808
+ "title": "RemediationAction",
14809
+ "x-enumDescriptions": {
14810
+ "sign_in": "Authenticate again with the Copilot backend. The current credential is absent, expired, or rejected.",
14811
+ "switch_account": "Authenticate as a different account. The current account exists but lacks access to the requested resource.",
14812
+ "show_account": "Inspect which account is currently authenticated before deciding what to change.",
14813
+ "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.",
14814
+ "allow_sandbox_outbound": "Permit outbound network access in the sandbox policy."
14815
+ }
14816
+ },
13948
14817
  "RemoteSteerableChangedData": {
13949
14818
  "type": "object",
13950
14819
  "properties": {
@@ -14351,9 +15220,9 @@
14351
15220
  "description": "Where a request to run outside the process sandbox originated. Orthogonal to the outcome: the same verdict means a different thing depending on where the request came from.",
14352
15221
  "title": "SandboxBypassSource",
14353
15222
  "x-enumDescriptions": {
14354
- "model_requested": "The request originated in the tool call itself. Says nothing about whether a person saw it: the ordinary pre-execution permission prompt discloses the bypass and may have gated this one.",
14355
- "user_prompted": "The runtime raised its own escalation prompt after a sandboxed command looked blocked, and a person answered it.",
14356
- "prompt_unavailable": "The runtime attempted its own escalation after a sandboxed command looked blocked, but the permission flow produced no confirmed human answer. This includes unavailable or unreadable prompts, cancellation, and automated rule, hook, or content-exclusion denials."
15223
+ "model_requested": "No longer produced. The model could once ask for a bypass in the tool call itself; no tool exposes that parameter now. Retained so historical events still deserialize.",
15224
+ "user_prompted": "The runtime raised the prompt itself — either after a sandboxed attempt looked blocked, or before a run the sandbox cannot enforce at all, such as a detached command — and a person answered it. In the second case nothing had executed when the decision was made.",
15225
+ "prompt_unavailable": "The runtime raised the prompt itself — after a sandboxed attempt looked blocked, or before a run it cannot enforce — but the permission flow produced no confirmed human answer. This includes unavailable or unreadable prompts, cancellation, and automated rule, hook, or content-exclusion denials."
14357
15226
  }
14358
15227
  },
14359
15228
  "SandboxControl": {
@@ -14534,36 +15403,185 @@
14534
15403
  },
14535
15404
  "platform": {
14536
15405
  "$ref": "#/definitions/SandboxPlatform",
14537
- "description": "Host platform the sandbox is running on"
14538
- },
14539
- "backend": {
14540
- "$ref": "#/definitions/SandboxBackend",
14541
- "description": "Process-containment implementation backing the sandbox"
15406
+ "description": "Host platform the sandbox is running on"
15407
+ },
15408
+ "backend": {
15409
+ "$ref": "#/definitions/SandboxBackend",
15410
+ "description": "Process-containment implementation backing the sandbox"
15411
+ },
15412
+ "enforcementPoint": {
15413
+ "$ref": "#/definitions/SandboxEnforcementPoint",
15414
+ "description": "Runtime subsystem that applied the policy"
15415
+ },
15416
+ "durationMs": {
15417
+ "type": "number",
15418
+ "minimum": 0,
15419
+ "description": "Wall-clock time spent spawning the sandboxed process, in milliseconds"
15420
+ },
15421
+ "degradationReason": {
15422
+ "anyOf": [
15423
+ {
15424
+ "$ref": "#/definitions/SandboxDegradationReason",
15425
+ "description": "Finite reason why sandbox enforcement is weaker than configured"
15426
+ },
15427
+ {
15428
+ "type": "null"
15429
+ }
15430
+ ],
15431
+ "description": "Why enforcement is weaker than configured, when it is"
15432
+ },
15433
+ "kind": {
15434
+ "type": "string",
15435
+ "const": "spawn_completed",
15436
+ "description": "Sandbox decision variant discriminator."
15437
+ }
15438
+ },
15439
+ "required": [
15440
+ "kind",
15441
+ "control",
15442
+ "outcome",
15443
+ "platform",
15444
+ "backend",
15445
+ "enforcementPoint",
15446
+ "durationMs"
15447
+ ],
15448
+ "additionalProperties": false
15449
+ },
15450
+ {
15451
+ "type": "object",
15452
+ "properties": {
15453
+ "control": {
15454
+ "$ref": "#/definitions/SandboxControl",
15455
+ "description": "Enforcement mechanism this decision describes"
15456
+ },
15457
+ "outcome": {
15458
+ "$ref": "#/definitions/SandboxOutcome",
15459
+ "description": "Observed enforcement state: `engaged`, `inactive`, or `failed`. Derived from runtime evidence, never from the configured posture or the compile-time target platform."
15460
+ },
15461
+ "toolCallId": {
15462
+ "type": [
15463
+ "string",
15464
+ "null"
15465
+ ],
15466
+ "description": "Internal tool-call ID, used only to correlate the decision with its owning span. Omitted when the decision is not attributable to a tool call."
15467
+ },
15468
+ "platform": {
15469
+ "$ref": "#/definitions/SandboxPlatform",
15470
+ "description": "Host platform the sandbox is running on"
15471
+ },
15472
+ "backend": {
15473
+ "$ref": "#/definitions/SandboxBackend",
15474
+ "description": "Containment backend that engaged. `unsupported` for any state other than `engaged`, since no backend is known to have run."
15475
+ },
15476
+ "enforcementPoint": {
15477
+ "$ref": "#/definitions/SandboxEnforcementPoint",
15478
+ "description": "Runtime subsystem whose enforcement this describes"
15479
+ },
15480
+ "attestation": {
15481
+ "anyOf": [
15482
+ {
15483
+ "$ref": "#/definitions/SandboxAttestation",
15484
+ "description": "Runtime observation backing an enforcement-state or denial claim. Absent on `enforcement_state` when no observation backs the state."
15485
+ },
15486
+ {
15487
+ "type": "null"
15488
+ }
15489
+ ],
15490
+ "description": "Runtime observation backing the state. Omitted for `inactive`, which has nothing to attest."
15491
+ },
15492
+ "command": {
15493
+ "type": [
15494
+ "string",
15495
+ "null"
15496
+ ],
15497
+ "description": "Command the enforcement governed. Populated only when content capture is enabled, and only for shell commands; MCP, LSP, and search command lines are runtime plumbing."
15498
+ },
15499
+ "kind": {
15500
+ "type": "string",
15501
+ "const": "enforcement_state",
15502
+ "description": "Sandbox decision variant discriminator."
15503
+ }
15504
+ },
15505
+ "required": [
15506
+ "kind",
15507
+ "control",
15508
+ "outcome",
15509
+ "platform",
15510
+ "backend",
15511
+ "enforcementPoint"
15512
+ ],
15513
+ "additionalProperties": false
15514
+ },
15515
+ {
15516
+ "type": "object",
15517
+ "properties": {
15518
+ "control": {
15519
+ "$ref": "#/definitions/SandboxControl",
15520
+ "description": "Sandbox control the denial belongs to. Follows from `denialClass`."
15521
+ },
15522
+ "outcome": {
15523
+ "$ref": "#/definitions/SandboxOutcome",
15524
+ "description": "Always `denied`."
15525
+ },
15526
+ "toolCallId": {
15527
+ "type": [
15528
+ "string",
15529
+ "null"
15530
+ ],
15531
+ "description": "Tool call the denial belongs to, for span correlation only. Never exported as a telemetry attribute or metric dimension."
15532
+ },
15533
+ "platform": {
15534
+ "$ref": "#/definitions/SandboxPlatform",
15535
+ "description": "Host operating-system family"
14542
15536
  },
14543
15537
  "enforcementPoint": {
14544
15538
  "$ref": "#/definitions/SandboxEnforcementPoint",
14545
- "description": "Runtime subsystem that applied the policy"
15539
+ "description": "Runtime subsystem that performed the check"
14546
15540
  },
14547
- "durationMs": {
14548
- "type": "number",
14549
- "minimum": 0,
14550
- "description": "Wall-clock time spent spawning the sandboxed process, in milliseconds"
15541
+ "denialClass": {
15542
+ "$ref": "#/definitions/SandboxDenialClass",
15543
+ "description": "Bounded class of the refused access."
14551
15544
  },
14552
- "degradationReason": {
15545
+ "attestation": {
15546
+ "$ref": "#/definitions/SandboxAttestation",
15547
+ "description": "Runtime observation backing the denial."
15548
+ },
15549
+ "confidence": {
14553
15550
  "anyOf": [
14554
15551
  {
14555
- "$ref": "#/definitions/SandboxDegradationReason",
14556
- "description": "Finite reason why sandbox enforcement is weaker than configured"
15552
+ "$ref": "#/definitions/SandboxDenialConfidence",
15553
+ "description": "How strong the evidence behind a denial is. A denial the sandbox itself recorded is a fact; one inferred from a command's output text is a judgement, and an analysis that cannot tell them apart will treat a false positive as enforcement."
14557
15554
  },
14558
15555
  {
14559
15556
  "type": "null"
14560
15557
  }
14561
15558
  ],
14562
- "description": "Why enforcement is weaker than configured, when it is"
15559
+ "description": "How strong the evidence behind this denial is. Lets an analysis separate denials the sandbox recorded from ones inferred from output text, which otherwise look identical."
15560
+ },
15561
+ "deniedResource": {
15562
+ "type": [
15563
+ "string",
15564
+ "null"
15565
+ ],
15566
+ "description": "Resource the check refused, when identified and content capture is enabled."
15567
+ },
15568
+ "command": {
15569
+ "type": [
15570
+ "string",
15571
+ "null"
15572
+ ],
15573
+ "description": "Command whose execution the denial arose from. Populated only when content capture is enabled."
15574
+ },
15575
+ "processName": {
15576
+ "type": [
15577
+ "string",
15578
+ "null"
15579
+ ],
15580
+ "description": "Executable image associated with the captured denial, normalized to a basename. Populated only when content capture is enabled."
14563
15581
  },
14564
15582
  "kind": {
14565
15583
  "type": "string",
14566
- "const": "spawn_completed",
15584
+ "const": "access_denied",
14567
15585
  "description": "Sandbox decision variant discriminator."
14568
15586
  }
14569
15587
  },
@@ -14572,57 +15590,91 @@
14572
15590
  "control",
14573
15591
  "outcome",
14574
15592
  "platform",
14575
- "backend",
14576
15593
  "enforcementPoint",
14577
- "durationMs"
15594
+ "denialClass",
15595
+ "attestation"
14578
15596
  ],
14579
- "additionalProperties": false
15597
+ "additionalProperties": false,
15598
+ "description": "An enforcement check refused a specific access. Emitted per refusal with no deduplication, including when policy permits the caller to bypass the denial. Carries no backend: the built-in checks that produce this run in-process against the effective policy."
14580
15599
  },
14581
15600
  {
14582
15601
  "type": "object",
14583
15602
  "properties": {
14584
15603
  "control": {
14585
15604
  "$ref": "#/definitions/SandboxControl",
14586
- "description": "Enforcement mechanism this decision describes"
15605
+ "description": "Always `bypass`."
14587
15606
  },
14588
15607
  "outcome": {
14589
15608
  "$ref": "#/definitions/SandboxOutcome",
14590
- "description": "Observed enforcement state: `engaged`, `inactive`, or `failed`. Derived from runtime evidence, never from the configured posture or the compile-time target platform."
15609
+ "description": "Whether the bypass was granted: `approved` or `declined`. `declined` also covers the cases where nobody answered, since the sandboxed denial stands either way."
14591
15610
  },
14592
15611
  "toolCallId": {
14593
15612
  "type": [
14594
15613
  "string",
14595
15614
  "null"
14596
15615
  ],
14597
- "description": "Internal tool-call ID, used only to correlate the decision with its owning span. Omitted when the decision is not attributable to a tool call."
15616
+ "description": "Tool call the decision belongs to, for span correlation only. Never exported as a telemetry attribute or metric dimension."
14598
15617
  },
14599
15618
  "platform": {
14600
15619
  "$ref": "#/definitions/SandboxPlatform",
14601
- "description": "Host platform the sandbox is running on"
14602
- },
14603
- "backend": {
14604
- "$ref": "#/definitions/SandboxBackend",
14605
- "description": "Containment backend that engaged. `unsupported` for any state other than `engaged`, since no backend is known to have run."
15620
+ "description": "Host operating-system family"
14606
15621
  },
14607
15622
  "enforcementPoint": {
14608
15623
  "$ref": "#/definitions/SandboxEnforcementPoint",
14609
- "description": "Runtime subsystem whose enforcement this describes"
15624
+ "description": "Runtime subsystem the bypass applies to"
14610
15625
  },
14611
- "attestation": {
15626
+ "source": {
15627
+ "$ref": "#/definitions/SandboxBypassSource",
15628
+ "description": "Where the request originated. Orthogonal to `outcome`."
15629
+ },
15630
+ "denialClass": {
14612
15631
  "anyOf": [
14613
15632
  {
14614
- "$ref": "#/definitions/SandboxAttestation",
14615
- "description": "Runtime observation backing an enforcement-state or denial claim. Absent on `enforcement_state` when no observation backs the state."
15633
+ "$ref": "#/definitions/SandboxDenialClass",
15634
+ "description": "Bounded class of access an enforcement check refused. Raw resources, commands, and process names accompany it only when content capture is enabled; diagnostic text and matched rules are never exported."
14616
15635
  },
14617
15636
  {
14618
15637
  "type": "null"
14619
15638
  }
14620
15639
  ],
14621
- "description": "Runtime observation backing the state. Omitted for `inactive`, which has nothing to attest."
15640
+ "description": "Bounded class of the access whose refusal raised this escalation. Omitted for a pre-execution bypass, such as a detached command that cannot be sandboxed and therefore resolves no denial."
15641
+ },
15642
+ "confidence": {
15643
+ "anyOf": [
15644
+ {
15645
+ "$ref": "#/definitions/SandboxDenialConfidence",
15646
+ "description": "How strong the evidence behind a denial is. A denial the sandbox itself recorded is a fact; one inferred from a command's output text is a judgement, and an analysis that cannot tell them apart will treat a false positive as enforcement."
15647
+ },
15648
+ {
15649
+ "type": "null"
15650
+ }
15651
+ ],
15652
+ "description": "How strong the evidence behind `denialClass` was. Present exactly when `denialClass` is, so a verdict that relaxed the sandbox on a guess is distinguishable from one that relaxed it on a recorded refusal. Named to match `access_denied`, which reports the same pair."
15653
+ },
15654
+ "deniedResource": {
15655
+ "type": [
15656
+ "string",
15657
+ "null"
15658
+ ],
15659
+ "description": "Resource whose refusal raised this escalation. Populated only when content capture is enabled."
15660
+ },
15661
+ "command": {
15662
+ "type": [
15663
+ "string",
15664
+ "null"
15665
+ ],
15666
+ "description": "Command the verdict governs. Populated only when content capture is enabled."
15667
+ },
15668
+ "processName": {
15669
+ "type": [
15670
+ "string",
15671
+ "null"
15672
+ ],
15673
+ "description": "Executable image associated with the denial that raised this escalation, normalized to a basename. Populated only when content capture is enabled."
14622
15674
  },
14623
15675
  "kind": {
14624
15676
  "type": "string",
14625
- "const": "enforcement_state",
15677
+ "const": "bypass_decided",
14626
15678
  "description": "Sandbox decision variant discriminator."
14627
15679
  }
14628
15680
  },
@@ -14631,28 +15683,29 @@
14631
15683
  "control",
14632
15684
  "outcome",
14633
15685
  "platform",
14634
- "backend",
14635
- "enforcementPoint"
15686
+ "enforcementPoint",
15687
+ "source"
14636
15688
  ],
14637
- "additionalProperties": false
15689
+ "additionalProperties": false,
15690
+ "description": "A request to run outside the process sandbox was resolved. This is what makes an `inactive` `enforcement_state` readable: without it, a command that ran unsandboxed because a person approved a bypass looks identical to one that ran unsandboxed because the session never had a sandbox. Reported only when a sandbox was in force, since bypassing a disabled sandbox bypasses nothing. Carries neither backend nor attestation: the verdict comes from the runtime's own permission flow or the local escalation prompt, not from a containment backend and not from the built-in policy check, so `source` is what records where it came from."
14638
15691
  },
14639
15692
  {
14640
15693
  "type": "object",
14641
15694
  "properties": {
14642
15695
  "control": {
14643
15696
  "$ref": "#/definitions/SandboxControl",
14644
- "description": "Sandbox control the denial belongs to. Follows from `denialClass`."
15697
+ "description": "Always `process`: the process container is what this rung relaxes, and the network control is deliberately untouched."
14645
15698
  },
14646
15699
  "outcome": {
14647
15700
  "$ref": "#/definitions/SandboxOutcome",
14648
- "description": "Always `denied`."
15701
+ "description": "Whether the permissive retry was granted: `approved` or `declined`. `declined` also covers the cases where nobody answered, since the sandboxed denial stands either way."
14649
15702
  },
14650
15703
  "toolCallId": {
14651
15704
  "type": [
14652
15705
  "string",
14653
15706
  "null"
14654
15707
  ],
14655
- "description": "Tool call the denial belongs to, for span correlation only. Never exported as a telemetry attribute or metric dimension."
15708
+ "description": "Tool call the decision belongs to, for span correlation only. Never exported as a telemetry attribute or metric dimension."
14656
15709
  },
14657
15710
  "platform": {
14658
15711
  "$ref": "#/definitions/SandboxPlatform",
@@ -14660,19 +15713,60 @@
14660
15713
  },
14661
15714
  "enforcementPoint": {
14662
15715
  "$ref": "#/definitions/SandboxEnforcementPoint",
14663
- "description": "Runtime subsystem that performed the check"
15716
+ "description": "Runtime subsystem the retry applies to"
15717
+ },
15718
+ "source": {
15719
+ "$ref": "#/definitions/SandboxBypassSource",
15720
+ "description": "Where the request originated. Orthogonal to `outcome`."
14664
15721
  },
14665
15722
  "denialClass": {
14666
- "$ref": "#/definitions/SandboxDenialClass",
14667
- "description": "Bounded class of the refused access. The only part of the denial that crosses the telemetry boundary."
15723
+ "anyOf": [
15724
+ {
15725
+ "$ref": "#/definitions/SandboxDenialClass",
15726
+ "description": "Bounded class of access an enforcement check refused. Raw resources, commands, and process names accompany it only when content capture is enabled; diagnostic text and matched rules are never exported."
15727
+ },
15728
+ {
15729
+ "type": "null"
15730
+ }
15731
+ ],
15732
+ "description": "Bounded class of the access whose refusal raised this escalation."
14668
15733
  },
14669
- "attestation": {
14670
- "$ref": "#/definitions/SandboxAttestation",
14671
- "description": "Runtime observation backing the denial."
15734
+ "confidence": {
15735
+ "anyOf": [
15736
+ {
15737
+ "$ref": "#/definitions/SandboxDenialConfidence",
15738
+ "description": "How strong the evidence behind a denial is. A denial the sandbox itself recorded is a fact; one inferred from a command's output text is a judgement, and an analysis that cannot tell them apart will treat a false positive as enforcement."
15739
+ },
15740
+ {
15741
+ "type": "null"
15742
+ }
15743
+ ],
15744
+ "description": "How strong the evidence behind `denialClass` was. Present exactly when `denialClass` is."
15745
+ },
15746
+ "deniedResource": {
15747
+ "type": [
15748
+ "string",
15749
+ "null"
15750
+ ],
15751
+ "description": "Resource whose refusal raised this escalation. Populated only when content capture is enabled."
15752
+ },
15753
+ "command": {
15754
+ "type": [
15755
+ "string",
15756
+ "null"
15757
+ ],
15758
+ "description": "Command the verdict governs. Populated only when content capture is enabled."
15759
+ },
15760
+ "processName": {
15761
+ "type": [
15762
+ "string",
15763
+ "null"
15764
+ ],
15765
+ "description": "Executable image associated with the denial that raised this escalation, normalized to a basename. Populated only when content capture is enabled."
14672
15766
  },
14673
15767
  "kind": {
14674
15768
  "type": "string",
14675
- "const": "access_denied",
15769
+ "const": "permissive_retry_decided",
14676
15770
  "description": "Sandbox decision variant discriminator."
14677
15771
  }
14678
15772
  },
@@ -14682,29 +15776,28 @@
14682
15776
  "outcome",
14683
15777
  "platform",
14684
15778
  "enforcementPoint",
14685
- "denialClass",
14686
- "attestation"
15779
+ "source"
14687
15780
  ],
14688
15781
  "additionalProperties": false,
14689
- "description": "An enforcement check refused a specific access. Emitted per refusal with no deduplication, including when policy permits the caller to bypass the denial. Carries no backend: the built-in checks that produce this run in-process against the effective policy."
15782
+ "description": "A permissive retry was resolved. Distinct from `bypass_decided` because this rung never requests a run outside the process sandbox: it relaxes the process container for one run while the sandbox, and with it the network policy, stays attached. Reported for both outcomes, so an escalation the user declined still leaves evidence that the runtime asked and that the sandboxed denial stood."
14690
15783
  },
14691
15784
  {
14692
15785
  "type": "object",
14693
15786
  "properties": {
14694
15787
  "control": {
14695
15788
  "$ref": "#/definitions/SandboxControl",
14696
- "description": "Always `bypass`."
15789
+ "description": "Always `process`: the retry changes process-container enforcement while leaving network policy attached."
14697
15790
  },
14698
15791
  "outcome": {
14699
15792
  "$ref": "#/definitions/SandboxOutcome",
14700
- "description": "Whether the bypass was granted: `approved` or `declined`. `declined` also covers the cases where nobody answered, since the sandboxed denial stands either way."
15793
+ "description": "Whether the permissive retry completed successfully: `succeeded` or `failed`."
14701
15794
  },
14702
15795
  "toolCallId": {
14703
15796
  "type": [
14704
15797
  "string",
14705
15798
  "null"
14706
15799
  ],
14707
- "description": "Tool call the decision belongs to, for span correlation only. Never exported as a telemetry attribute or metric dimension."
15800
+ "description": "Tool call the completion belongs to, for span correlation only. Never exported as a telemetry attribute or metric dimension."
14708
15801
  },
14709
15802
  "platform": {
14710
15803
  "$ref": "#/definitions/SandboxPlatform",
@@ -14712,15 +15805,56 @@
14712
15805
  },
14713
15806
  "enforcementPoint": {
14714
15807
  "$ref": "#/definitions/SandboxEnforcementPoint",
14715
- "description": "Runtime subsystem the bypass applies to"
15808
+ "description": "Runtime subsystem that ran the retry"
14716
15809
  },
14717
- "source": {
14718
- "$ref": "#/definitions/SandboxBypassSource",
14719
- "description": "Where the request originated. Orthogonal to `outcome`."
15810
+ "denialClass": {
15811
+ "anyOf": [
15812
+ {
15813
+ "$ref": "#/definitions/SandboxDenialClass",
15814
+ "description": "Bounded class of access an enforcement check refused. Raw resources, commands, and process names accompany it only when content capture is enabled; diagnostic text and matched rules are never exported."
15815
+ },
15816
+ {
15817
+ "type": "null"
15818
+ }
15819
+ ],
15820
+ "description": "Bounded class of the access whose refusal raised the permissive retry."
15821
+ },
15822
+ "confidence": {
15823
+ "anyOf": [
15824
+ {
15825
+ "$ref": "#/definitions/SandboxDenialConfidence",
15826
+ "description": "How strong the evidence behind a denial is. A denial the sandbox itself recorded is a fact; one inferred from a command's output text is a judgement, and an analysis that cannot tell them apart will treat a false positive as enforcement."
15827
+ },
15828
+ {
15829
+ "type": "null"
15830
+ }
15831
+ ],
15832
+ "description": "How strong the evidence behind `denialClass` was."
15833
+ },
15834
+ "deniedResource": {
15835
+ "type": [
15836
+ "string",
15837
+ "null"
15838
+ ],
15839
+ "description": "Resource whose refusal raised the retry. Populated only when content capture is enabled."
15840
+ },
15841
+ "command": {
15842
+ "type": [
15843
+ "string",
15844
+ "null"
15845
+ ],
15846
+ "description": "Command the retry executed. Populated only when content capture is enabled."
15847
+ },
15848
+ "processName": {
15849
+ "type": [
15850
+ "string",
15851
+ "null"
15852
+ ],
15853
+ "description": "Executable image associated with the denial that raised the retry, normalized to a basename. Populated only when content capture is enabled."
14720
15854
  },
14721
15855
  "kind": {
14722
15856
  "type": "string",
14723
- "const": "bypass_decided",
15857
+ "const": "permissive_retry_completed",
14724
15858
  "description": "Sandbox decision variant discriminator."
14725
15859
  }
14726
15860
  },
@@ -14729,11 +15863,10 @@
14729
15863
  "control",
14730
15864
  "outcome",
14731
15865
  "platform",
14732
- "enforcementPoint",
14733
- "source"
15866
+ "enforcementPoint"
14734
15867
  ],
14735
15868
  "additionalProperties": false,
14736
- "description": "A request to run outside the process sandbox was resolved. This is what makes an `inactive` `enforcement_state` readable: without it, a command that ran unsandboxed because a person approved a bypass looks identical to one that ran unsandboxed because the session never had a sandbox. Reported only when a sandbox was in force, since bypassing a disabled sandbox bypasses nothing. Carries neither backend nor attestation: the verdict comes from the runtime's own permission flow or the local escalation prompt, not from a containment backend and not from the built-in policy check, so `source` is what records where it came from."
15869
+ "description": "An approved permissive retry finished. `succeeded` means the retry exited successfully without another correlated sandbox denial; `failed` means it failed or remained blocked and may therefore be followed by a full bypass."
14737
15870
  }
14738
15871
  ],
14739
15872
  "description": "Payload of `sandbox.decision`, a bounded governance record of what the process sandbox was configured to do and whether it took effect. Discriminated by `kind`.",
@@ -14814,16 +15947,49 @@
14814
15947
  "enum": [
14815
15948
  "filesystem_read",
14816
15949
  "filesystem_write",
15950
+ "process_startup",
15951
+ "registry_access",
15952
+ "ipc_access",
15953
+ "process_access",
15954
+ "job_access",
15955
+ "ui_access",
15956
+ "service_access",
14817
15957
  "network_outbound",
14818
- "network_local"
15958
+ "network_local",
15959
+ "other_access"
14819
15960
  ],
14820
- "description": "Bounded class of access an enforcement check refused. The only part of a denial that crosses the telemetry boundary; the diagnostic text, matched rule, path, and host never do.",
15961
+ "description": "Bounded class of access an enforcement check refused. Raw resources, commands, and process names accompany it only when content capture is enabled; diagnostic text and matched rules are never exported.",
14821
15962
  "title": "SandboxDenialClass",
14822
15963
  "x-enumDescriptions": {
14823
15964
  "filesystem_read": "A read was refused because the effective policy does not grant it.",
14824
15965
  "filesystem_write": "A write was refused. Distinct from `filesystem_read` because a read-only grant denies writes to a path it otherwise permits.",
15966
+ "process_startup": "A process could not start because the sandbox refused a required process-scoped resource. Currently emitted for the Windows MSYS `BaseNamedObjects` fork failure confirmed by learning-mode capture.",
15967
+ "registry_access": "Windows registry access was refused and correlated with capture evidence.",
15968
+ "ipc_access": "Windows ALPC or RPC access was refused and correlated with capture evidence.",
15969
+ "process_access": "Access to another Windows process was refused and correlated with capture evidence.",
15970
+ "job_access": "Windows job-object access was refused and correlated with capture evidence.",
15971
+ "ui_access": "Windows UI-handle access was refused and correlated with capture evidence.",
15972
+ "service_access": "Windows service-control-manager access was refused and correlated with capture evidence.",
14825
15973
  "network_outbound": "An outbound connection was refused by `network.allowOutbound`.",
14826
- "network_local": "A connection to a local or loopback destination was refused by `network.allowLocalNetwork`."
15974
+ "network_local": "A connection to a local or loopback destination was refused by `network.allowLocalNetwork`.",
15975
+ "other_access": "The sandbox's denial capture recorded a refusal its record does not attribute to a more specific control: an unclassified resource (registry, COM, section object) or an AppContainer capability with no network meaning. Deliberately generic — the capture proves the denial happened, and naming a narrower class than the record supports would be a guess."
15976
+ }
15977
+ },
15978
+ "SandboxDenialConfidence": {
15979
+ "type": "string",
15980
+ "enum": [
15981
+ "captured",
15982
+ "policy_corroborated",
15983
+ "sandbox_reported",
15984
+ "output_classified"
15985
+ ],
15986
+ "description": "How strong the evidence behind a denial is. A denial the sandbox itself recorded is a fact; one inferred from a command's output text is a judgement, and an analysis that cannot tell them apart will treat a false positive as enforcement.",
15987
+ "title": "SandboxDenialConfidence",
15988
+ "x-enumDescriptions": {
15989
+ "captured": "The sandbox's own denial capture recorded the refused access. The strongest evidence available: the kernel observed it, not the runtime.",
15990
+ "policy_corroborated": "The command named a path that the effective policy independently denies. No capture confirmed it, but the policy did.",
15991
+ "sandbox_reported": "The failure carried a fingerprint the sandbox itself emits, so the sandbox is known to have refused something even though the resource was not confirmed.",
15992
+ "output_classified": "Classified from the command's own output text alone. The weakest evidence: a command that merely prints sandbox-like wording reaches this level."
14827
15993
  }
14828
15994
  },
14829
15995
  "SandboxEnforcementPoint": {
@@ -14894,7 +16060,7 @@
14894
16060
  "approved",
14895
16061
  "declined"
14896
16062
  ],
14897
- "description": "Finite result of a sandbox decision. Each `SandboxDecisionData` variant uses a disjoint subset: `policy_resolved` is `resolved | degraded`, `spawn_completed` is `succeeded | failed`, `enforcement_state` is `engaged | inactive | failed`, `access_denied` is `denied`, and `bypass_decided` is `approved | declined`.",
16063
+ "description": "Finite result of a sandbox decision. Each `SandboxDecisionData` variant uses a disjoint subset: `policy_resolved` is `resolved | degraded`, `spawn_completed` and `permissive_retry_completed` are `succeeded | failed`, `enforcement_state` is `engaged | inactive | failed`, `access_denied` is `denied`, and escalation decisions are `approved | declined`.",
14898
16064
  "title": "SandboxOutcome",
14899
16065
  "x-enumDescriptions": {
14900
16066
  "resolved": "The sandbox policy resolved successfully. Describes configuration only and makes no claim that a backend engaged.",
@@ -14902,7 +16068,7 @@
14902
16068
  "engaged": "A runtime-owned containment backend accepted the workload. Evidence of engagement, not of verified containment for the workload's lifetime.",
14903
16069
  "succeeded": "The sandbox operation completed successfully.",
14904
16070
  "failed": "The sandbox operation failed.",
14905
- "degraded": "The sandbox is active with one or more controls weakened by platform limitations.",
16071
+ "degraded": "The sandbox is active with one or more controls weakened by platform limitations or an explicitly selected relaxed mode.",
14906
16072
  "denied": "An enforcement check refused the requested access.",
14907
16073
  "approved": "A request to run outside the process sandbox was granted.",
14908
16074
  "declined": "A request to run outside the process sandbox was not granted."
@@ -15276,6 +16442,14 @@
15276
16442
  "$ref": "#/definitions/ModelChangeEvent",
15277
16443
  "description": "Session event \"session.model_change\". Model change details including previous and new model identifiers"
15278
16444
  },
16445
+ {
16446
+ "$ref": "#/definitions/AutoTierRecommendationEvent",
16447
+ "description": "Session event \"session.auto_tier_recommendation\". Live-only Auto preference recommendation from Copilot API after a successful Auto model call."
16448
+ },
16449
+ {
16450
+ "$ref": "#/definitions/AutoTierSwitchFailedEvent",
16451
+ "description": "Session event \"session.auto_tier_switch_failed\". A transient Auto preference failure emitted when the runtime cannot mint or accept a usable model and token pair. The previously effective preference remains active, so SDK clients can surface a non-blocking failure without changing their committed-tier state. This event is ephemeral and is not persisted or replayed on resume."
16452
+ },
15279
16453
  {
15280
16454
  "$ref": "#/definitions/ModeChangedEvent",
15281
16455
  "description": "Session event \"session.mode_changed\". Agent mode change details including previous and new modes"
@@ -15580,6 +16754,22 @@
15580
16754
  "$ref": "#/definitions/PermissionCompletedEvent",
15581
16755
  "description": "Session event \"permission.completed\". Permission request completion notification signaling UI dismissal"
15582
16756
  },
16757
+ {
16758
+ "$ref": "#/definitions/PermissionCarriedForwardEvent",
16759
+ "description": "Session event \"permission.carriedForward\". Records that a live authorization record from an earlier human decision in this session contained a permission proposal, so it ran without another prompt. This mints no authority: it accounts for one more effect against the prior grant, which is what lets a replayed session agree with the live one about how much of that grant is left."
16760
+ },
16761
+ {
16762
+ "$ref": "#/definitions/PermissionMessageAuthorizationEvent",
16763
+ "description": "Session event \"permission.messageAuthorization\". Freezes one blinded, verbatim-verified authorization claim the runtime minted from a human user message, so a resumed session re-establishes the same grant deterministically instead of re-running the extraction model. This mints no authority on its own: it records what a blinded proposer pointed at and the trusted discriminator the runtime established, and deterministic establishment runs on replay. Persisted so recorded authority survives compaction and process resume."
16764
+ },
16765
+ {
16766
+ "$ref": "#/definitions/PermissionMessageAuthorizationReadEvent",
16767
+ "description": "Session event \"permission.messageAuthorizationRead\". Records that one human turn has been read by the blinded authorization proposer, whether or not it minted anything, so a resumed session does not re-run the extraction model on a turn the live session already read. Persisted purely to avoid wasted model calls across resume; it is never a correctness mechanism."
16768
+ },
16769
+ {
16770
+ "$ref": "#/definitions/PermissionMessageAuthorizationDegradedEvent",
16771
+ "description": "Session event \"permission.messageAuthorizationDegraded\". Records that message-backed authorization could not safely represent one human turn before compaction. The runtime may compact the original message after this marker is durable, but message-derived carry-forward and assisted auto-approval remain disabled for the rest of the session so subsequent commands continue through the ordinary permission prompt."
16772
+ },
15583
16773
  {
15584
16774
  "$ref": "#/definitions/UserInputRequestedEvent",
15585
16775
  "description": "Session event \"user_input.requested\". User input request notification with question and optional predefined choices"
@@ -15728,6 +16918,14 @@
15728
16918
  "$ref": "#/definitions/McpServerStatusChangedEvent",
15729
16919
  "description": "Session event \"session.mcp_server_status_changed\". Payload of `session.mcp_server_status_changed` for one MCP server's status and optional failure error."
15730
16920
  },
16921
+ {
16922
+ "$ref": "#/definitions/McpServerRemovedEvent",
16923
+ "description": "Session event \"session.mcp_server_removed\". Payload of `session.mcp_server_removed` identifying an MCP server the graph no longer runs."
16924
+ },
16925
+ {
16926
+ "$ref": "#/definitions/McpServerNeedsReconnectEvent",
16927
+ "description": "Session event \"session.mcp_server_needs_reconnect\". Payload of `session.mcp_server_needs_reconnect` identifying an MCP server whose connection must be re-established."
16928
+ },
15731
16929
  {
15732
16930
  "$ref": "#/definitions/McpToolsListChangedEvent",
15733
16931
  "description": "Session event \"mcp.tools.list_changed\". Payload identifying the MCP server associated with a list change."
@@ -16987,6 +18185,10 @@
16987
18185
  "type": "string",
16988
18186
  "description": "Why an explicit task-call model did not become the effective model"
16989
18187
  },
18188
+ "modelSelectionSource": {
18189
+ "$ref": "#/definitions/SubagentModelSelectionSource",
18190
+ "description": "Authority or runtime mechanism responsible for sub-agent model selection"
18191
+ },
16990
18192
  "configuredModelMatchesActual": {
16991
18193
  "type": "boolean",
16992
18194
  "description": "Whether the first model actually dispatched matched the user's configured preference"
@@ -17261,6 +18463,10 @@
17261
18463
  "type": "string",
17262
18464
  "description": "Why an explicit task-call model did not become the effective model"
17263
18465
  },
18466
+ "modelSelectionSource": {
18467
+ "$ref": "#/definitions/SubagentModelSelectionSource",
18468
+ "description": "Authority or runtime mechanism responsible for sub-agent model selection"
18469
+ },
17264
18470
  "configuredModelMatchesActual": {
17265
18471
  "type": "boolean",
17266
18472
  "description": "Whether the first model actually dispatched matched the user's configured preference"
@@ -17346,6 +18552,29 @@
17346
18552
  "description": "Session event \"subagent.failed\". Sub-agent failure details including error message and agent information",
17347
18553
  "title": "SubagentFailedEvent"
17348
18554
  },
18555
+ "SubagentModelSelectionSource": {
18556
+ "type": "string",
18557
+ "enum": [
18558
+ "explicit_override",
18559
+ "configured_required",
18560
+ "configured_preference",
18561
+ "complementary_default",
18562
+ "session_inheritance",
18563
+ "agent_definition_default",
18564
+ "runtime_policy"
18565
+ ],
18566
+ "description": "Authority or runtime mechanism responsible for sub-agent model selection.",
18567
+ "title": "SubagentModelSelectionSource",
18568
+ "x-enumDescriptions": {
18569
+ "explicit_override": "Explicit model supplied by the parent agent on the task call and selected for dispatch.",
18570
+ "configured_required": "Required model policy configured for the sub-agent.",
18571
+ "configured_preference": "Non-required model preference configured for the sub-agent.",
18572
+ "complementary_default": "Complementary-model default selected for the sub-agent.",
18573
+ "session_inheritance": "Model inherited from the parent session.",
18574
+ "agent_definition_default": "Default model declared by the agent definition.",
18575
+ "runtime_policy": "Runtime policy, Auto mode, or an experiment selected the model."
18576
+ }
18577
+ },
17349
18578
  "SubagentSelectedData": {
17350
18579
  "type": "object",
17351
18580
  "properties": {
@@ -17458,6 +18687,10 @@
17458
18687
  "type": "string",
17459
18688
  "description": "Model the sub-agent will run with, when known at start."
17460
18689
  },
18690
+ "taskModelSource": {
18691
+ "$ref": "#/definitions/SubagentTaskModelSource",
18692
+ "description": "Where the model input for this sub-agent came from. Present when the task planner resolved the launch (the task tool and factory agents); absent for sub-agents created through other runtime paths."
18693
+ },
17461
18694
  "factoryRunId": {
17462
18695
  "type": "string",
17463
18696
  "description": "Root id of the factory run that spawned this sub-agent, when it was spawned by one."
@@ -17543,6 +18776,23 @@
17543
18776
  "description": "Session event \"subagent.started\". Sub-agent startup details including parent tool call and agent information",
17544
18777
  "title": "SubagentStartedEvent"
17545
18778
  },
18779
+ "SubagentTaskModelSource": {
18780
+ "type": "string",
18781
+ "enum": [
18782
+ "task_argument",
18783
+ "subagent_configuration",
18784
+ "custom_agent_definition",
18785
+ "unset"
18786
+ ],
18787
+ "description": "Where the model input for a task-tool sub-agent came from.",
18788
+ "title": "SubagentTaskModelSource",
18789
+ "x-enumDescriptions": {
18790
+ "task_argument": "The spawning agent supplied the task tool's model argument.",
18791
+ "subagent_configuration": "The task omitted a model and the per-sub-agent settings entry supplied a concrete one.",
18792
+ "custom_agent_definition": "The task omitted a model and the user-defined custom agent's definition supplied one.",
18793
+ "unset": "Neither the task call, the per-sub-agent settings entry, nor a custom agent definition supplied a model."
18794
+ }
18795
+ },
17546
18796
  "SystemMessageData": {
17547
18797
  "type": "object",
17548
18798
  "properties": {
@@ -17915,6 +19165,10 @@
17915
19165
  "retryGuidance": {
17916
19166
  "type": "string",
17917
19167
  "description": "Actionable run_factory resume guidance for a resource-limit failure."
19168
+ },
19169
+ "pauseInfo": {
19170
+ "$ref": "#/definitions/SystemNotificationFactoryPauseInfo",
19171
+ "description": "Pause initiator metadata when this attempt settled as paused."
17918
19172
  }
17919
19173
  },
17920
19174
  "required": [
@@ -17936,6 +19190,7 @@
17936
19190
  "enum": [
17937
19191
  "completed",
17938
19192
  "halted",
19193
+ "paused",
17939
19194
  "cancelled",
17940
19195
  "error"
17941
19196
  ],
@@ -17944,10 +19199,48 @@
17944
19199
  "x-enumDescriptions": {
17945
19200
  "completed": "The factory completed successfully.",
17946
19201
  "halted": "The factory was halted.",
19202
+ "paused": "The factory attempt paused intentionally.",
17947
19203
  "cancelled": "The factory was cancelled.",
17948
19204
  "error": "The factory failed."
17949
19205
  }
17950
19206
  },
19207
+ "SystemNotificationFactoryPauseInfo": {
19208
+ "anyOf": [
19209
+ {
19210
+ "type": "object",
19211
+ "properties": {
19212
+ "type": {
19213
+ "type": "string",
19214
+ "const": "user",
19215
+ "description": "Factory pause initiator discriminator."
19216
+ }
19217
+ },
19218
+ "required": [
19219
+ "type"
19220
+ ]
19221
+ },
19222
+ {
19223
+ "type": "object",
19224
+ "properties": {
19225
+ "key": {
19226
+ "type": "string",
19227
+ "description": "Stable author-defined checkpoint key that initiated the pause."
19228
+ },
19229
+ "type": {
19230
+ "type": "string",
19231
+ "const": "checkpoint",
19232
+ "description": "Factory pause initiator discriminator."
19233
+ }
19234
+ },
19235
+ "required": [
19236
+ "type",
19237
+ "key"
19238
+ ]
19239
+ }
19240
+ ],
19241
+ "description": "Durable metadata describing who initiated a factory pause.",
19242
+ "title": "SystemNotificationFactoryPauseInfo"
19243
+ },
17951
19244
  "SystemNotificationInstructionDiscovered": {
17952
19245
  "type": "object",
17953
19246
  "properties": {
@@ -18723,6 +20016,10 @@
18723
20016
  "code": {
18724
20017
  "type": "string",
18725
20018
  "description": "Machine-readable error code"
20019
+ },
20020
+ "remediation": {
20021
+ "$ref": "#/definitions/RemediationAction",
20022
+ "description": "What the user must do to recover, when the runtime knows of an action. Set on sandbox policy denials, where `message` names the rule that blocked the call but never the client affordance that relaxes it."
18726
20023
  }
18727
20024
  },
18728
20025
  "required": [
@@ -19250,6 +20547,10 @@
19250
20547
  "type": "string",
19251
20548
  "description": "Original tool name on the MCP server, when the tool is an MCP tool"
19252
20549
  },
20550
+ "mcpTransport": {
20551
+ "$ref": "#/definitions/McpServerTransport",
20552
+ "description": "Transport the MCP server hosting this tool is connected over, when the tool is an MCP tool and the server is configured"
20553
+ },
19253
20554
  "turnId": {
19254
20555
  "type": "string",
19255
20556
  "description": "Identifier for the agent loop turn this tool was invoked in, matching the corresponding assistant.turn_start event"
@@ -20720,6 +22021,10 @@
20720
22021
  "url": {
20721
22022
  "type": "string",
20722
22023
  "description": "Optional URL associated with this warning that the user can open in a browser"
22024
+ },
22025
+ "remediation": {
22026
+ "$ref": "#/definitions/RemediationAction",
22027
+ "description": "What the user must do to recover, when the runtime knows of an action. The `message` never names a client affordance, so a client that offers one — a slash command, a settings pane, a link — renders it from this value."
20723
22028
  }
20724
22029
  },
20725
22030
  "required": [