muse-code-msp 1.4.6__tar.gz → 1.4.8__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: muse-code-msp
3
- Version: 1.4.6
3
+ Version: 1.4.8
4
4
  Summary: Generated Python wire types for the Muse Session Protocol (MSP). No hand-written protocol types, ever.
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/meta-models/muse-code-sdk
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "muse-code-msp"
8
- version = "1.4.6"
8
+ version = "1.4.8"
9
9
  description = "Generated Python wire types for the Muse Session Protocol (MSP). No hand-written protocol types, ever."
10
10
  readme = "README.md"
11
11
  requires-python = ">=3.10"
@@ -7,10 +7,10 @@ from __future__ import annotations
7
7
 
8
8
  from typing import Any, Final, Literal, TypedDict
9
9
 
10
- SCHEMA_FINGERPRINT: Final[str] = "sha256:eae467ab60cb9a5d5af4de616830f065e59375c987fd59269c8cc33ed2a1137f"
10
+ SCHEMA_FINGERPRINT: Final[str] = "sha256:4e3200c3c9dc0cd7919d11022630d43f9bc1c5cdda375381e90b0183b5665069"
11
11
  SCHEMA_VERSION: Final[int] = 1
12
12
  EXPERIMENTAL: Final[bool] = False
13
- REQUIRED_HOST_VERSION: Final[str] = "1.4.6"
13
+ REQUIRED_HOST_VERSION: Final[str] = "1.4.8"
14
14
 
15
15
  ApprovalAmendmentDurability = str # open enum: unknown values stay representable
16
16
  APPROVAL_AMENDMENT_DURABILITY_KNOWN_VALUES: Final[tuple[str, ...]] = ("session", "localPersistent",)
@@ -51,7 +51,7 @@ BACKGROUND_INITIATOR_KNOWN_VALUES: Final[tuple[str, ...]] = ("user", "timeout",)
51
51
 
52
52
  # A grantable capability name. Open: the reserved `rawLog` entry joins this domain as an additive open-enum extension when the protocol spec un-defers — closed would make that a retype.
53
53
  CapabilityName = str # open enum: unknown values stay representable
54
- CAPABILITY_NAME_KNOWN_VALUES: Final[tuple[str, ...]] = ("userShell", "sessionMcp", "sessionListStream", "feedback", "computerUseSetup",)
54
+ CAPABILITY_NAME_KNOWN_VALUES: Final[tuple[str, ...]] = ("userShell", "sessionMcp", "sessionListStream", "feedback", "computerUseSetup", "computerUseHostSetup", "sessionRename",)
55
55
 
56
56
  # The language a Code Mode cell ran in. Open: values are lowercase VS Code language identifiers, and only `javascript` (the V8 engine) is minted today.
57
57
  CodeModeLanguage = str # open enum: unknown values stay representable
@@ -80,6 +80,14 @@ COMPACTION_OUTCOME_KNOWN_VALUES: Final[tuple[str, ...]] = ("compacted", "noop",
80
80
  CompactionTrigger = str # open enum: unknown values stay representable
81
81
  COMPACTION_TRIGGER_KNOWN_VALUES: Final[tuple[str, ...]] = ("manual", "auto",)
82
82
 
83
+ # A per-app choice. **Open**, like `ComputerUseChoice`.
84
+ ComputerUseAppChoice = str # open enum: unknown values stay representable
85
+ COMPUTER_USE_APP_CHOICE_KNOWN_VALUES: Final[tuple[str, ...]] = ("ask", "alwaysAllow", "blocked",)
86
+
87
+ # Why Settings can't change a row. **Open**.
88
+ ComputerUseAppLock = str # open enum: unknown values stay representable
89
+ COMPUTER_USE_APP_LOCK_KNOWN_VALUES: Final[tuple[str, ...]] = ("builtIn", "file",)
90
+
83
91
  # A capability dropdown's value. **Open**: the read result carries it, so an older client tolerates a value it does not know.
84
92
  ComputerUseChoice = str # open enum: unknown values stay representable
85
93
  COMPUTER_USE_CHOICE_KNOWN_VALUES: Final[tuple[str, ...]] = ("ask", "alwaysAllow",)
@@ -135,7 +143,7 @@ IfBusy = Literal["queue", "steer", "replace"]
135
143
 
136
144
  # The eleven v1 item kinds plus post-v1 kinds. Open: a new kind is additive evolution, and clients MUST render unknown kinds generically.
137
145
  ItemKind = str # open enum: unknown values stay representable
138
- ITEM_KIND_KNOWN_VALUES: Final[tuple[str, ...]] = ("userMessage", "agentMessage", "reasoning", "toolCall", "userShell", "subagent", "workflow", "reminderChild", "compaction", "hookRun", "sideChat", "webSearch",)
146
+ ITEM_KIND_KNOWN_VALUES: Final[tuple[str, ...]] = ("userMessage", "agentMessage", "reasoning", "toolCall", "userShell", "subagent", "workflow", "reminderChild", "compaction", "hookRun", "sideChat", "webSearch", "monitorFeed",)
139
147
 
140
148
  # The `item/readOutput` content encoding. Closed: text media is ALWAYS `utf8` and binary media `base64`; a third value would change the client's decode contract.
141
149
  ItemReadOutputEncoding = Literal["utf8", "base64"]
@@ -151,6 +159,10 @@ JsonRpcVersion = Literal["2.0"]
151
159
  LimitKind = str # open enum: unknown values stay representable
152
160
  LIMIT_KIND_KNOWN_VALUES: Final[tuple[str, ...]] = ("tierLimit",)
153
161
 
162
+ # `agentMessage.messagePhase`: the phase the model declared on the commit, never inferred from position. Set on the completed item only; absent on `item/started`, which opens before the phase is recorded. Open: a client reads an absent or unknown value on a completed item as `"finalAnswer"` and still decodes the item. Not a turn-done signal; `turn/completed` is.
163
+ MessagePhase = str # open enum: unknown values stay representable
164
+ MESSAGE_PHASE_KNOWN_VALUES: Final[tuple[str, ...]] = ("commentary", "finalAnswer",)
165
+
154
166
  # Where a model catalog came from. **Open**: an unrecognized value is an unknown source, not an error.
155
167
  ModelCatalogSource = str # open enum: unknown values stay representable
156
168
  MODEL_CATALOG_SOURCE_KNOWN_VALUES: Final[tuple[str, ...]] = ("providerCatalog", "fakeCatalog", "unresolvedCatalog", "bundledCatalog", "configCatalog",)
@@ -205,6 +217,14 @@ RequestId = int | str
205
217
  RetractOutcome = str # open enum: unknown values stay representable
206
218
  RETRACT_OUTCOME_KNOWN_VALUES: Final[tuple[str, ...]] = ("accepted", "declined",)
207
219
 
220
+ # Whether this host can enforce the sandbox. A property of the host process, probed once at construction and identical for every session and every connection it serves — never requested, granted, or negotiated, which is why it is not a capability. Open: a future enforcement posture arrives as a new value, read by older clients as unknown.
221
+ SandboxAvailability = str # open enum: unknown values stay representable
222
+ SANDBOX_AVAILABILITY_KNOWN_VALUES: Final[tuple[str, ...]] = ("available", "unavailable",)
223
+
224
+ # Why sandbox enforcement is impossible on this host. Sent only when [`SandboxAvailability`] is `unavailable`; a client MUST NOT infer a reason when none is sent. Open: a future reason arrives as a new value, read by older clients as unknown.
225
+ SandboxUnavailableReason = str # open enum: unknown values stay representable
226
+ SANDBOX_UNAVAILABLE_REASON_KNOWN_VALUES: Final[tuple[str, ...]] = ("userNamespacesDenied", "bubblewrapUnavailable",)
227
+
208
228
  # The closed-reason vocabulary. Server-produced and published OPEN by owner ruling — the menu-B pick, which settles that this notification reason enum publishes open rather than resting on E2's result-vocabulary rule by analogy. A crash is deliberately not a reason, because a crash emits no notification at all.
209
229
  SessionClosedReason = str # open enum: unknown values stay representable
210
230
  SESSION_CLOSED_REASON_KNOWN_VALUES: Final[tuple[str, ...]] = ("idle", "hostShutdown",)
@@ -226,6 +246,10 @@ SessionMcpServerMode = Literal["required", "optional"]
226
246
  # Stdio framing choices exposed by session MCP configuration.
227
247
  SessionMcpStdioFraming = Literal["auto", "contentLength", "lineDelimitedJson"]
228
248
 
249
+ # How the served session name was set. **Open enum** (`x-msp-openness: open`): v1 serves `automatic` and `custom`; a client MUST read absent — and any value it does not recognize — as unknown, never fabricated. Open: a future source such as conversation-generated names adds a value here, so closed would make that a breaking change.
250
+ SessionNameOrigin = str # open enum: unknown values stay representable
251
+ SESSION_NAME_ORIGIN_KNOWN_VALUES: Final[tuple[str, ...]] = ("automatic", "custom",)
252
+
229
253
  # A session's load state.
230
254
  SessionStatus = str # open enum: unknown values stay representable
231
255
  SESSION_STATUS_KNOWN_VALUES: Final[tuple[str, ...]] = ("notLoaded", "idle", "running",)
@@ -583,6 +607,27 @@ class CommandAcceptedResult(TypedDict):
583
607
  status: CommandAckStatus
584
608
 
585
609
 
610
+ class _ComputerUseAppBase(TypedDict):
611
+ bundleId: str
612
+ choice: ComputerUseAppChoice
613
+
614
+
615
+ class ComputerUseApp(_ComputerUseAppBase, total=False):
616
+ """One row of the Settings apps list."""
617
+
618
+ lastAskedAt: str
619
+ locked: bool
620
+ lockedBy: ComputerUseAppLock
621
+ name: str
622
+
623
+
624
+ class ComputerUseAppPatch(TypedDict):
625
+ """One per-app choice to set in `computerUseSettings/update`."""
626
+
627
+ bundleId: str
628
+ choice: ComputerUseAppChoice
629
+
630
+
586
631
  class _ComputerUseBlockedAppBase(TypedDict):
587
632
  bundleId: str
588
633
  locked: bool
@@ -594,46 +639,66 @@ class ComputerUseBlockedApp(_ComputerUseBlockedAppBase, total=False):
594
639
  prefix: bool
595
640
 
596
641
 
597
- class ComputerUseSettings(TypedDict):
598
- """`computerUseSettings/read` result, also answered by `computerUseSettings/update`."""
642
+ class ComputerUseInstalledApp(TypedDict):
643
+ """One installed or running app, for Settings' app picker."""
644
+
645
+ bundleId: str
646
+ name: str
647
+
599
648
 
649
+ class _ComputerUseSettingsBase(TypedDict):
600
650
  blockedApps: list[ComputerUseBlockedApp]
601
651
  computerControl: ComputerUseChoice
602
652
  screenshots: ComputerUseChoice
603
653
 
604
654
 
655
+ class ComputerUseSettings(_ComputerUseSettingsBase, total=False):
656
+ """`computerUseSettings/read` result, also answered by `computerUseSettings/update`."""
657
+
658
+ apps: list[ComputerUseApp]
659
+ installedApps: list[ComputerUseInstalledApp]
660
+
661
+
605
662
  class ComputerUseSettingsReadParams(TypedDict, total=False):
606
663
  """`computerUseSettings/read` params."""
607
664
 
665
+ installed: bool
608
666
  showBuiltIns: bool
609
667
 
610
668
 
611
669
  class ComputerUseSettingsUpdateParams(TypedDict, total=False):
612
670
  """`computerUseSettings/update` params: a patch. Omitted members are left alone; the whole patch applies or none of it does."""
613
671
 
672
+ apps: list[ComputerUseAppPatch]
614
673
  blockApps: list[str]
615
674
  computerControl: ComputerUseChoice
616
675
  screenshots: ComputerUseChoice
617
676
  unblockApps: list[str]
618
677
 
619
678
 
620
- class ComputerUseSetupChanged(TypedDict):
679
+ class _ComputerUseSetupChangedBase(TypedDict):
680
+ state: ComputerUseSetupState
681
+
682
+
683
+ class ComputerUseSetupChanged(_ComputerUseSetupChangedBase, total=False):
621
684
  """`computerUseSetup/changed` params."""
622
685
 
623
686
  sessionId: str
624
- state: ComputerUseSetupState
625
687
 
626
688
 
627
- class ComputerUseSetupReadParams(TypedDict):
689
+ class ComputerUseSetupReadParams(TypedDict, total=False):
628
690
  """`computerUseSetup/read` params."""
629
691
 
630
692
  sessionId: str
631
693
 
632
694
 
633
- class ComputerUseSetupStartParams(TypedDict):
695
+ class _ComputerUseSetupStartParamsBase(TypedDict):
696
+ commandId: str
697
+
698
+
699
+ class ComputerUseSetupStartParams(_ComputerUseSetupStartParamsBase, total=False):
634
700
  """`computerUseSetup/start` params: a human command."""
635
701
 
636
- commandId: str
637
702
  sessionId: str
638
703
 
639
704
 
@@ -926,6 +991,8 @@ class _InitializeResultBase(TypedDict):
926
991
  class InitializeResult(_InitializeResultBase, total=False):
927
992
  """The `initialize` result."""
928
993
 
994
+ sandboxAvailability: SandboxAvailability
995
+ sandboxUnavailableReason: SandboxUnavailableReason
929
996
  sessionDurability: SessionDurability
930
997
 
931
998
 
@@ -954,6 +1021,7 @@ class Item(_ItemBase, total=False):
954
1021
  commandId: str
955
1022
  commandText: str
956
1023
  controlStatus: SubagentControlStatus
1024
+ cutOff: bool
957
1025
  declaredPhase: str
958
1026
  depth: int
959
1027
  displayText: str
@@ -970,7 +1038,10 @@ class Item(_ItemBase, total=False):
970
1038
  hookKey: str
971
1039
  label: str
972
1040
  message: str
1041
+ messagePhase: MessagePhase
973
1042
  modelVisibleContent: list[ModelVisibleContent]
1043
+ monitorDescription: str
1044
+ monitorId: str
974
1045
  objective: str
975
1046
  outcome: CompactionOutcome
976
1047
  outputRef: OutputRef
@@ -1547,9 +1618,11 @@ class Session(_SessionBase, total=False):
1547
1618
  branch: str
1548
1619
  createdByClient: ClientInfo
1549
1620
  firstUserPrompt: str
1621
+ generatedName: str
1550
1622
  kind: SessionKind
1551
1623
  lastActivityAt: str
1552
1624
  name: str
1625
+ nameOrigin: SessionNameOrigin
1553
1626
  parentSessionId: str
1554
1627
  sideFrom: SideProvenance | None
1555
1628
  title: str
@@ -1754,15 +1827,20 @@ class SessionModelRouteUnservedParams(TypedDict):
1754
1827
  viewCursor: str
1755
1828
 
1756
1829
 
1757
- class SessionNameChangedParams(TypedDict):
1758
- """`session/nameChanged` params: the fold of ANY durable session-name record — the FIRST-NAMING automatic allocate as well as an accepted `session/rename` (or the same in-process runtime command). Replace-wholesale like every sibling."""
1759
-
1830
+ class _SessionNameChangedParamsBase(TypedDict):
1760
1831
  name: str
1761
1832
  sessionId: str
1762
1833
  sourceRange: SourceRange
1763
1834
  viewCursor: str
1764
1835
 
1765
1836
 
1837
+ class SessionNameChangedParams(_SessionNameChangedParamsBase, total=False):
1838
+ """`session/nameChanged` params: the fold of ANY durable session-name record — the FIRST-NAMING automatic allocate as well as an accepted `session/rename` (or the same in-process runtime command). Replace-wholesale like every sibling."""
1839
+
1840
+ generatedName: str
1841
+ nameOrigin: SessionNameOrigin
1842
+
1843
+
1766
1844
  class _SessionReadParamsBase(TypedDict):
1767
1845
  sessionId: str
1768
1846
 
@@ -1827,6 +1905,7 @@ class SessionResumeParams(_SessionResumeParamsBase, total=False):
1827
1905
  cursor: str | None
1828
1906
  excludeItems: bool
1829
1907
  history: HistoryPreference
1908
+ permissionProfile: str
1830
1909
 
1831
1910
 
1832
1911
  class _SessionResumeResultBase(TypedDict):
@@ -2023,6 +2102,7 @@ class SkillCatalogEntry(_SkillCatalogEntryBase, total=False):
2023
2102
 
2024
2103
  argumentHint: str
2025
2104
  pluginId: str
2105
+ title: str
2026
2106
 
2027
2107
 
2028
2108
  class SkillChangedParams(TypedDict):
@@ -2495,6 +2575,25 @@ class TurnInterruptResult(TypedDict):
2495
2575
  turnId: str
2496
2576
 
2497
2577
 
2578
+ class _TurnModelRetryScheduledParamsBase(TypedDict):
2579
+ attempt: int
2580
+ maxAttempts: int
2581
+ nextAttempt: int
2582
+ retryDelayMs: int
2583
+ sessionId: str
2584
+ sourceRange: SourceRange
2585
+ turnId: str
2586
+ viewCursor: str
2587
+
2588
+
2589
+ class TurnModelRetryScheduledParams(_TurnModelRetryScheduledParamsBase, total=False):
2590
+ """`turn/modelRetryScheduled` params: a durable model-stream retry-scheduled fact folded — the provider backoff behind one model attempt is observable BEFORE the turn terminates, so a streaming client can render \"system words · retrying in Ss · attempt N/M\" instead of dead air. Non-terminal: it never resolves a turn-wait. The sibling `turn/retryScheduled` shape at the model layer: same member names and semantics (attempt/nextAttempt/maxAttempts/ retryDelayMs/system/errorKind/httpStatus), minus `reason` — the row's words derive from `errorKind` through the shared gate-off mapping, and the recorded machine message is not user text. The delay is the recorded scheduled backoff, never an absolute fire time — clients derive any countdown locally. `sourceRange` cites the session stream's mirror of the task-lifecycle record."""
2591
+
2592
+ errorKind: str
2593
+ httpStatus: int
2594
+ system: str
2595
+
2596
+
2498
2597
  class _TurnRefBase(TypedDict):
2499
2598
  commandId: str
2500
2599
  turnId: str
@@ -3052,8 +3151,9 @@ METHODS: Final[dict[str, MethodSpec]] = {
3052
3151
  "approval/listPending": {"description": "Reads the full pending approval and user-input payloads for a session; a lease-free fold read.", "params": "ApprovalListPendingParams", "result": "ApprovalListPendingResult"},
3053
3152
  "computerUseSettings/read": {"description": "Reads the computer-use Settings: each capability's Always allow switch and the user's blocked apps from the approval policy store, plus the built-in blocks as locked rows when asked; computerUseUnavailable while the CUA gate is off.", "params": "ComputerUseSettingsReadParams", "result": "ComputerUseSettings"},
3054
3153
  "computerUseSettings/update": {"description": "Applies one Settings patch (capability dropdowns, blocked apps to add or remove) all-or-nothing and answers the user's Settings after it; a built-in block is refused in either list; computerUseUnavailable while the CUA gate is off.", "params": "ComputerUseSettingsUpdateParams", "result": "ComputerUseSettings"},
3055
- "computerUseSetup/read": {"description": "Reads one session's computer-use setup state and permissions by running cua_setup status for it as a host command: no model turn, no prompt, no spawn; computerUseUnavailable while the CUA gate is off.", "params": "ComputerUseSetupReadParams", "result": "ComputerUseSetupState"},
3056
- "computerUseSetup/start": {"description": "A human command: runs cua_setup start for one session, between turns, exactly as the TUI's /cua on does, and answers the state it settles in, with the refusal code when setup refused; computerUseUnavailable while the CUA gate is off.", "params": "ComputerUseSetupStartParams", "result": "ComputerUseSetupState"},
3154
+ "computerUseSetup/check": {"description": "Reads the host's three macOS grants with no prompt: starts the computer-use helper only long enough to check them, reports each as granted or missing, and ends it; never requests a grant or opens System Settings. Needs computerUseHostSetup; commandRejected runtime_busy while a setup attempt holds the host.", "params": None, "result": "ComputerUseSetupState"},
3155
+ "computerUseSetup/read": {"description": "Reads one session's computer-use setup state and permissions by running cua_setup status for it as a host command: no model turn, no prompt, no spawn; computerUseUnavailable while the CUA gate is off. Without sessionId it reads the host's own setup, with computerUseHostSetup.", "params": "ComputerUseSetupReadParams", "result": "ComputerUseSetupState"},
3156
+ "computerUseSetup/start": {"description": "A human command: runs cua_setup start for one session, between turns, exactly as the TUI's /cua on does, and answers the state it settles in, with the refusal code when setup refused; computerUseUnavailable while the CUA gate is off. Without sessionId it starts the host's own setup under one host owner, with computerUseHostSetup.", "params": "ComputerUseSetupStartParams", "result": "ComputerUseSetupState"},
3057
3157
  "feedback/submit": {"description": "Submits a first-party feedback report through the host, reusing the TUI submitter seam (consent, bundle-first persistence, redaction), and answers the upload receipt.", "params": "FeedbackSubmitParams", "result": "FeedbackSubmitResult"},
3058
3158
  "goal/clear": {"description": "Clears the session goal; never wakes and its ack never names a turn.", "params": "GoalClearParams", "result": "GoalCommandResult"},
3059
3159
  "goal/edit": {"description": "Replaces the current goal's objective under the same wake gate as goal/set.", "params": "GoalEditParams", "result": "GoalCommandResult"},
@@ -3122,7 +3222,7 @@ NOTIFICATIONS: Final[dict[str, NotificationSpec]] = {
3122
3222
  "approval/requested": {"description": "An approval opened: the fold of its durable Requested record.", "params": "ApprovalRequestParams"},
3123
3223
  "approval/resolved": {"description": "The first durable approval terminal landed; protected delivery.", "params": "ApprovalResolvedParams"},
3124
3224
  "approval/updated": {"description": "A non-terminal approval record changed the pending view.", "params": "ApprovalUpdatedParams"},
3125
- "computerUseSetup/changed": {"description": "A computerUseSetup/read or /start observed a session's setup state differ from the last one sent for it, including inProgress when a start begins and the state it settles in.", "params": "ComputerUseSetupChanged"},
3225
+ "computerUseSetup/changed": {"description": "A computerUseSetup/read or /start observed a session's setup state differ from the last one sent for it, including inProgress when a start begins and the state it settles in. Without sessionId it carries the host's own setup state, delivered only with computerUseHostSetup.", "params": "ComputerUseSetupChanged"},
3126
3226
  "initialized": {"description": "Client-to-server notification closing the handshake; no params.", "params": None},
3127
3227
  "item/completed": {"description": "An item reached its terminal state: the authoritative final object.", "params": "ItemCompletedParams"},
3128
3228
  "item/delta": {"description": "Streaming append to an open item's field path (ephemeral-sourced, no sourceRange; opt-out-able).", "params": "ItemDeltaParams"},
@@ -3149,6 +3249,7 @@ NOTIFICATIONS: Final[dict[str, NotificationSpec]] = {
3149
3249
  "skill/changed": {"description": "The session's user-invocable skill set changed; clients re-issue skill/list. A live host-state projection, not a view event.", "params": "SkillChangedParams"},
3150
3250
  "turn/completed": {"description": "Turn terminal: completed | failed | cancelled, with usage and the settled error object.", "params": "TurnCompletedParams"},
3151
3251
  "turn/foregroundCompleted": {"description": "The turn's foreground work is done while named background reminder checks hold the turn open; explicitly non-terminal.", "params": "TurnForegroundCompletedParams"},
3252
+ "turn/modelRetryScheduled": {"description": "A provider backoff behind one model attempt is scheduled and waiting out its delay; observable mid-turn, non-terminal.", "params": "TurnModelRetryScheduledParams"},
3152
3253
  "turn/retracted": {"description": "An accepted interrupt's paired retract durably settled, accepted or declined.", "params": "TurnRetractedParams"},
3153
3254
  "turn/retryScheduled": {"description": "A failing model attempt's retry is scheduled and waiting out its backoff; observable mid-turn, non-terminal.", "params": "TurnRetryScheduledParams"},
3154
3255
  "turn/started": {"description": "A foreground turn began running.", "params": "TurnStartedParams"},
@@ -3200,4 +3301,4 @@ ERRORS: Final[tuple[ErrorSpec, ...]] = (
3200
3301
  {"code": -32057, "kind": "userInputAnswerInvalid", "retryable": False, "overrideKinds": ()},
3201
3302
  )
3202
3303
 
3203
- GRANTABLE_CAPABILITIES: Final[tuple[str, ...]] = ("userShell", "sessionMcp", "sessionListStream", "feedback", "computerUseSetup",)
3304
+ GRANTABLE_CAPABILITIES: Final[tuple[str, ...]] = ("userShell", "sessionMcp", "sessionListStream", "feedback", "computerUseSetup", "computerUseHostSetup", "sessionRename",)
@@ -7,10 +7,10 @@ from __future__ import annotations
7
7
 
8
8
  from typing import Any, Final, Literal, TypedDict
9
9
 
10
- SCHEMA_FINGERPRINT: Final[str] = "sha256:9c425a9b1b30ff1810012585626a7e7baca1495963a198104fa5544fd02d43c2"
10
+ SCHEMA_FINGERPRINT: Final[str] = "sha256:c533a6c39dca76ab4da20084e0b730712e0cae8db4644721290e13676aec90a3"
11
11
  SCHEMA_VERSION: Final[int] = 1
12
12
  EXPERIMENTAL: Final[bool] = True
13
- REQUIRED_HOST_VERSION: Final[str] = "1.4.6"
13
+ REQUIRED_HOST_VERSION: Final[str] = "1.4.8"
14
14
 
15
15
  # How a login flow ended. Server-produced, so the vocabulary is open per the E2 rule — a future flow may end in a new way additively.
16
16
  AccountLoginOutcome = str # open enum: unknown values stay representable
@@ -70,7 +70,7 @@ BACKGROUND_STATE_KNOWN_VALUES: Final[tuple[str, ...]] = ("backgrounded",)
70
70
 
71
71
  # A grantable capability name. Open: the reserved `rawLog` entry joins this domain as an additive open-enum extension when the protocol spec un-defers — closed would make that a retype.
72
72
  CapabilityName = str # open enum: unknown values stay representable
73
- CAPABILITY_NAME_KNOWN_VALUES: Final[tuple[str, ...]] = ("userShell", "sessionMcp", "sessionListStream", "feedback", "computerUseSetup", "peerMessaging", "rawLog",)
73
+ CAPABILITY_NAME_KNOWN_VALUES: Final[tuple[str, ...]] = ("userShell", "sessionMcp", "sessionListStream", "feedback", "computerUseSetup", "computerUseHostSetup", "sessionRename", "peerMessaging", "rawLog",)
74
74
 
75
75
  # The language a Code Mode cell ran in. Open: values are lowercase VS Code language identifiers, and only `javascript` (the V8 engine) is minted today.
76
76
  CodeModeLanguage = str # open enum: unknown values stay representable
@@ -99,6 +99,14 @@ COMPACTION_OUTCOME_KNOWN_VALUES: Final[tuple[str, ...]] = ("compacted", "noop",
99
99
  CompactionTrigger = str # open enum: unknown values stay representable
100
100
  COMPACTION_TRIGGER_KNOWN_VALUES: Final[tuple[str, ...]] = ("manual", "auto",)
101
101
 
102
+ # A per-app choice. **Open**, like `ComputerUseChoice`.
103
+ ComputerUseAppChoice = str # open enum: unknown values stay representable
104
+ COMPUTER_USE_APP_CHOICE_KNOWN_VALUES: Final[tuple[str, ...]] = ("ask", "alwaysAllow", "blocked",)
105
+
106
+ # Why Settings can't change a row. **Open**.
107
+ ComputerUseAppLock = str # open enum: unknown values stay representable
108
+ COMPUTER_USE_APP_LOCK_KNOWN_VALUES: Final[tuple[str, ...]] = ("builtIn", "file",)
109
+
102
110
  # A capability dropdown's value. **Open**: the read result carries it, so an older client tolerates a value it does not know.
103
111
  ComputerUseChoice = str # open enum: unknown values stay representable
104
112
  COMPUTER_USE_CHOICE_KNOWN_VALUES: Final[tuple[str, ...]] = ("ask", "alwaysAllow",)
@@ -154,7 +162,7 @@ IfBusy = Literal["queue", "steer", "replace"]
154
162
 
155
163
  # The eleven v1 item kinds plus post-v1 kinds. Open: a new kind is additive evolution, and clients MUST render unknown kinds generically.
156
164
  ItemKind = str # open enum: unknown values stay representable
157
- ITEM_KIND_KNOWN_VALUES: Final[tuple[str, ...]] = ("userMessage", "agentMessage", "reasoning", "toolCall", "userShell", "subagent", "workflow", "reminderChild", "compaction", "hookRun", "sideChat", "webSearch", "skillRead",)
165
+ ITEM_KIND_KNOWN_VALUES: Final[tuple[str, ...]] = ("userMessage", "agentMessage", "reasoning", "toolCall", "userShell", "subagent", "workflow", "reminderChild", "compaction", "hookRun", "sideChat", "webSearch", "monitorFeed", "skillRead",)
158
166
 
159
167
  # The `item/readOutput` content encoding. Closed: text media is ALWAYS `utf8` and binary media `base64`; a third value would change the client's decode contract.
160
168
  ItemReadOutputEncoding = Literal["utf8", "base64"]
@@ -170,6 +178,10 @@ JsonRpcVersion = Literal["2.0"]
170
178
  LimitKind = str # open enum: unknown values stay representable
171
179
  LIMIT_KIND_KNOWN_VALUES: Final[tuple[str, ...]] = ("tierLimit",)
172
180
 
181
+ # `log/gap` `reason`: only a `replayAnchorLost` gap is refillable through `log/page`; an `overFrame` gap is a known hole on that connection, its hole `(after, next]` less `next` when it is delivered. **Open**: a server-produced vocabulary.
182
+ LogGapReason = str # open enum: unknown values stay representable
183
+ LOG_GAP_REASON_KNOWN_VALUES: Final[tuple[str, ...]] = ("replayAnchorLost", "overFrame",)
184
+
173
185
  # The login flow's terminal vocabulary. Open.
174
186
  McpOAuthLoginOutcome = str # open enum: unknown values stay representable
175
187
  MCP_O_AUTH_LOGIN_OUTCOME_KNOWN_VALUES: Final[tuple[str, ...]] = ("granted", "denied", "expired", "cancelled", "failed",)
@@ -190,6 +202,10 @@ MCP_SERVER_LIST_SOURCE_KNOWN_VALUES: Final[tuple[str, ...]] = ("settings", "plug
190
202
  McpServerListTransport = str # open enum: unknown values stay representable
191
203
  MCP_SERVER_LIST_TRANSPORT_KNOWN_VALUES: Final[tuple[str, ...]] = ("stdio", "streamableHttp", "unknown",)
192
204
 
205
+ # `agentMessage.messagePhase`: the phase the model declared on the commit, never inferred from position. Set on the completed item only; absent on `item/started`, which opens before the phase is recorded. Open: a client reads an absent or unknown value on a completed item as `"finalAnswer"` and still decodes the item. Not a turn-done signal; `turn/completed` is.
206
+ MessagePhase = str # open enum: unknown values stay representable
207
+ MESSAGE_PHASE_KNOWN_VALUES: Final[tuple[str, ...]] = ("commentary", "finalAnswer",)
208
+
193
209
  # Where a model catalog came from. **Open**: an unrecognized value is an unknown source, not an error.
194
210
  ModelCatalogSource = str # open enum: unknown values stay representable
195
211
  MODEL_CATALOG_SOURCE_KNOWN_VALUES: Final[tuple[str, ...]] = ("providerCatalog", "fakeCatalog", "unresolvedCatalog", "bundledCatalog", "configCatalog",)
@@ -210,6 +226,18 @@ PEER_STATUS_KNOWN_VALUES: Final[tuple[str, ...]] = ("idle", "active", "busy", "c
210
226
  PendingRequestKind = str # open enum: unknown values stay representable
211
227
  PENDING_REQUEST_KIND_KNOWN_VALUES: Final[tuple[str, ...]] = ("approval", "userInput",)
212
228
 
229
+ # A profile's effective approval axis. **Open**: the vocabulary can widen.
230
+ PermissionApprovalAxis = str # open enum: unknown values stay representable
231
+ PERMISSION_APPROVAL_AXIS_KNOWN_VALUES: Final[tuple[str, ...]] = ("onRequest", "promptUnmatched", "allowAll",)
232
+
233
+ # A profile's effective filesystem axis. **Open**: the vocabulary can widen.
234
+ PermissionFilesystemAxis = str # open enum: unknown values stay representable
235
+ PERMISSION_FILESYSTEM_AXIS_KNOWN_VALUES: Final[tuple[str, ...]] = ("sandboxed", "unrestricted",)
236
+
237
+ # A profile's effective local-command network axis. **Open**: the vocabulary can widen.
238
+ PermissionNetworkAxis = str # open enum: unknown values stay representable
239
+ PERMISSION_NETWORK_AXIS_KNOWN_VALUES: Final[tuple[str, ...]] = ("restricted", "off", "enabled",)
240
+
213
241
  # Whether a profile change did anything. The accepted arm spells `completed` exactly as `session/setApprovalMode` so the shared member never forks spellings. Apply failures are `commandRejected`.
214
242
  PermissionProfileApplyOutcome = str # open enum: unknown values stay representable
215
243
  PERMISSION_PROFILE_APPLY_OUTCOME_KNOWN_VALUES: Final[tuple[str, ...]] = ("completed", "noop",)
@@ -264,6 +292,14 @@ RETRACT_OUTCOME_KNOWN_VALUES: Final[tuple[str, ...]] = ("accepted", "declined",)
264
292
  ReviewerAuthority = str # open enum: unknown values stay representable
265
293
  REVIEWER_AUTHORITY_KNOWN_VALUES: Final[tuple[str, ...]] = ("autoReview", "human", "none",)
266
294
 
295
+ # Whether this host can enforce the sandbox. A property of the host process, probed once at construction and identical for every session and every connection it serves — never requested, granted, or negotiated, which is why it is not a capability. Open: a future enforcement posture arrives as a new value, read by older clients as unknown.
296
+ SandboxAvailability = str # open enum: unknown values stay representable
297
+ SANDBOX_AVAILABILITY_KNOWN_VALUES: Final[tuple[str, ...]] = ("available", "unavailable",)
298
+
299
+ # Why sandbox enforcement is impossible on this host. Sent only when [`SandboxAvailability`] is `unavailable`; a client MUST NOT infer a reason when none is sent. Open: a future reason arrives as a new value, read by older clients as unknown.
300
+ SandboxUnavailableReason = str # open enum: unknown values stay representable
301
+ SANDBOX_UNAVAILABLE_REASON_KNOWN_VALUES: Final[tuple[str, ...]] = ("userNamespacesDenied", "bubblewrapUnavailable",)
302
+
267
303
  # The closed-reason vocabulary. Server-produced and published OPEN by owner ruling — the menu-B pick, which settles that this notification reason enum publishes open rather than resting on E2's result-vocabulary rule by analogy. A crash is deliberately not a reason, because a crash emits no notification at all.
268
304
  SessionClosedReason = str # open enum: unknown values stay representable
269
305
  SESSION_CLOSED_REASON_KNOWN_VALUES: Final[tuple[str, ...]] = ("idle", "hostShutdown",)
@@ -285,6 +321,16 @@ SessionMcpServerMode = Literal["required", "optional"]
285
321
  # Stdio framing choices exposed by session MCP configuration.
286
322
  SessionMcpStdioFraming = Literal["auto", "contentLength", "lineDelimitedJson"]
287
323
 
324
+ # How the served session name was set. **Open enum** (`x-msp-openness: open`): v1 serves `automatic` and `custom`; a client MUST read absent — and any value it does not recognize — as unknown, never fabricated. Open: a future source such as conversation-generated names adds a value here, so closed would make that a breaking change.
325
+ SessionNameOrigin = str # open enum: unknown values stay representable
326
+ SESSION_NAME_ORIGIN_KNOWN_VALUES: Final[tuple[str, ...]] = ("automatic", "custom",)
327
+
328
+ # `session/reportStartupPhases` span phase: the `StartupPhasesRecord` phase vocabulary in camelCase. The host maps each value onto the record's snake_case spelling at append. Experimental: the stable bundle strips this until the surface stabilizes (in-v1 row 348).
329
+ SessionReportStartupPhase = Literal["terminalProbe", "sessionOpen", "runtimeInit", "firstFrame", "inputReady"]
330
+
331
+ # `session/reportStartupPhases` terminal color provenance: the durable `TerminalColorProvenance` vocabulary in camelCase. The host maps each value onto the record spelling at append. Experimental: the stable bundle strips this until the surface stabilizes (in-v1 row 348).
332
+ SessionReportTerminalColorProvenance = Literal["probed", "defaulted", "overridden"]
333
+
288
334
  # A session's load state.
289
335
  SessionStatus = str # open enum: unknown values stay representable
290
336
  SESSION_STATUS_KNOWN_VALUES: Final[tuple[str, ...]] = ("notLoaded", "idle", "running",)
@@ -798,6 +844,27 @@ class CommandAcceptedResult(TypedDict):
798
844
  status: CommandAckStatus
799
845
 
800
846
 
847
+ class _ComputerUseAppBase(TypedDict):
848
+ bundleId: str
849
+ choice: ComputerUseAppChoice
850
+
851
+
852
+ class ComputerUseApp(_ComputerUseAppBase, total=False):
853
+ """One row of the Settings apps list."""
854
+
855
+ lastAskedAt: str
856
+ locked: bool
857
+ lockedBy: ComputerUseAppLock
858
+ name: str
859
+
860
+
861
+ class ComputerUseAppPatch(TypedDict):
862
+ """One per-app choice to set in `computerUseSettings/update`."""
863
+
864
+ bundleId: str
865
+ choice: ComputerUseAppChoice
866
+
867
+
801
868
  class _ComputerUseBlockedAppBase(TypedDict):
802
869
  bundleId: str
803
870
  locked: bool
@@ -809,46 +876,66 @@ class ComputerUseBlockedApp(_ComputerUseBlockedAppBase, total=False):
809
876
  prefix: bool
810
877
 
811
878
 
812
- class ComputerUseSettings(TypedDict):
813
- """`computerUseSettings/read` result, also answered by `computerUseSettings/update`."""
879
+ class ComputerUseInstalledApp(TypedDict):
880
+ """One installed or running app, for Settings' app picker."""
881
+
882
+ bundleId: str
883
+ name: str
814
884
 
885
+
886
+ class _ComputerUseSettingsBase(TypedDict):
815
887
  blockedApps: list[ComputerUseBlockedApp]
816
888
  computerControl: ComputerUseChoice
817
889
  screenshots: ComputerUseChoice
818
890
 
819
891
 
892
+ class ComputerUseSettings(_ComputerUseSettingsBase, total=False):
893
+ """`computerUseSettings/read` result, also answered by `computerUseSettings/update`."""
894
+
895
+ apps: list[ComputerUseApp]
896
+ installedApps: list[ComputerUseInstalledApp]
897
+
898
+
820
899
  class ComputerUseSettingsReadParams(TypedDict, total=False):
821
900
  """`computerUseSettings/read` params."""
822
901
 
902
+ installed: bool
823
903
  showBuiltIns: bool
824
904
 
825
905
 
826
906
  class ComputerUseSettingsUpdateParams(TypedDict, total=False):
827
907
  """`computerUseSettings/update` params: a patch. Omitted members are left alone; the whole patch applies or none of it does."""
828
908
 
909
+ apps: list[ComputerUseAppPatch]
829
910
  blockApps: list[str]
830
911
  computerControl: ComputerUseChoice
831
912
  screenshots: ComputerUseChoice
832
913
  unblockApps: list[str]
833
914
 
834
915
 
835
- class ComputerUseSetupChanged(TypedDict):
916
+ class _ComputerUseSetupChangedBase(TypedDict):
917
+ state: ComputerUseSetupState
918
+
919
+
920
+ class ComputerUseSetupChanged(_ComputerUseSetupChangedBase, total=False):
836
921
  """`computerUseSetup/changed` params."""
837
922
 
838
923
  sessionId: str
839
- state: ComputerUseSetupState
840
924
 
841
925
 
842
- class ComputerUseSetupReadParams(TypedDict):
926
+ class ComputerUseSetupReadParams(TypedDict, total=False):
843
927
  """`computerUseSetup/read` params."""
844
928
 
845
929
  sessionId: str
846
930
 
847
931
 
848
- class ComputerUseSetupStartParams(TypedDict):
932
+ class _ComputerUseSetupStartParamsBase(TypedDict):
933
+ commandId: str
934
+
935
+
936
+ class ComputerUseSetupStartParams(_ComputerUseSetupStartParamsBase, total=False):
849
937
  """`computerUseSetup/start` params: a human command."""
850
938
 
851
- commandId: str
852
939
  sessionId: str
853
940
 
854
941
 
@@ -929,14 +1016,18 @@ class EffectiveModel(TypedDict):
929
1016
  source: ModelChangeSource
930
1017
 
931
1018
 
932
- class EffectivePermissionState(TypedDict):
933
- """The effective permission-state projection: the committed native permission snapshot (profile identity, reviewer authority) plus the live per-session runtime's attachment evidence. The same object `session/setPermissionProfile` returns and the `Session` object carries as `permissionState`. Served values must be coherent: a read never combines an old profile with a newer runtime's attachment claim."""
934
-
1019
+ class _EffectivePermissionStateBase(TypedDict):
935
1020
  profileId: str | None
936
1021
  reviewerAttached: bool
937
1022
  reviewerAuthority: ReviewerAuthority
938
1023
 
939
1024
 
1025
+ class EffectivePermissionState(_EffectivePermissionStateBase, total=False):
1026
+ """The effective permission-state projection: the committed native permission snapshot (profile identity, reviewer authority) plus the live per-session runtime's attachment evidence. The same object `session/setPermissionProfile` returns and the `Session` object carries as `permissionState`. Served values must be coherent: a read never combines an old profile with a newer runtime's attachment claim."""
1027
+
1028
+ axes: PermissionAxes
1029
+
1030
+
940
1031
  class _ErrorDataBase(TypedDict):
941
1032
  kind: ErrorKind
942
1033
 
@@ -1160,6 +1251,8 @@ class _InitializeResultBase(TypedDict):
1160
1251
  class InitializeResult(_InitializeResultBase, total=False):
1161
1252
  """The `initialize` result."""
1162
1253
 
1254
+ sandboxAvailability: SandboxAvailability
1255
+ sandboxUnavailableReason: SandboxUnavailableReason
1163
1256
  sessionDurability: SessionDurability
1164
1257
 
1165
1258
 
@@ -1190,6 +1283,7 @@ class Item(_ItemBase, total=False):
1190
1283
  commandId: str
1191
1284
  commandText: str
1192
1285
  controlStatus: SubagentControlStatus
1286
+ cutOff: bool
1193
1287
  declaredPhase: str
1194
1288
  depth: int
1195
1289
  displayText: str
@@ -1206,7 +1300,10 @@ class Item(_ItemBase, total=False):
1206
1300
  hookKey: str
1207
1301
  label: str
1208
1302
  message: str
1303
+ messagePhase: MessagePhase
1209
1304
  modelVisibleContent: list[ModelVisibleContent]
1305
+ monitorDescription: str
1306
+ monitorId: str
1210
1307
  objective: str
1211
1308
  outcome: CompactionOutcome
1212
1309
  outputRef: OutputRef
@@ -1340,15 +1437,19 @@ class LastTurn(_LastTurnBase, total=False):
1340
1437
  reason: str
1341
1438
 
1342
1439
 
1343
- class LogGapParams(TypedDict):
1344
- """`log/gap` notification params: the raw-altitude shape of the shared gap contract, per subscription. The client MUST fill `(after, next)` with `log/page` before treating its fold as current."""
1345
-
1440
+ class _LogGapParamsBase(TypedDict):
1346
1441
  after: RecordPosition
1347
1442
  next: RecordPosition
1348
1443
  stream: StreamRef
1349
1444
  subscriptionId: int
1350
1445
 
1351
1446
 
1447
+ class LogGapParams(_LogGapParamsBase, total=False):
1448
+ """`log/gap` notification params: the raw-altitude shape of the shared gap contract, per subscription. The client MUST fill `(after, next)` with `log/page` before treating its fold as current, except for an `overFrame` gap (see [`LogGapReason`])."""
1449
+
1450
+ reason: LogGapReason
1451
+
1452
+
1352
1453
  # `log/page` params.
1353
1454
  LogPageParams = TypedDict("LogPageParams", {
1354
1455
  "limit": "int",
@@ -1700,6 +1801,15 @@ class PendingUserInputPointer(_PendingUserInputPointerBase, total=False):
1700
1801
  itemId: str
1701
1802
 
1702
1803
 
1804
+ class PermissionAxes(TypedDict):
1805
+ """A committed profile's effective four axis values: the resolved filesystem, network, approval, and reviewer the YOLO predicate reads. The reviewer member reuses `ReviewerAuthority`, so its spelling never drifts from the served `reviewerAuthority`."""
1806
+
1807
+ approval: PermissionApprovalAxis
1808
+ filesystem: PermissionFilesystemAxis
1809
+ network: PermissionNetworkAxis
1810
+ reviewer: ReviewerAuthority
1811
+
1812
+
1703
1813
  class PermissionProfileListParams(TypedDict, total=False):
1704
1814
  """`permissionProfile/list` params: read the native profile catalog. A read-only method — takes no lease, grants nothing."""
1705
1815
 
@@ -2057,9 +2167,11 @@ class Session(_SessionBase, total=False):
2057
2167
  branch: str
2058
2168
  createdByClient: ClientInfo
2059
2169
  firstUserPrompt: str
2170
+ generatedName: str
2060
2171
  kind: SessionKind
2061
2172
  lastActivityAt: str
2062
2173
  name: str
2174
+ nameOrigin: SessionNameOrigin
2063
2175
  parentSessionId: str
2064
2176
  permissionState: EffectivePermissionState
2065
2177
  sideFrom: SideProvenance | None
@@ -2266,15 +2378,20 @@ class SessionModelRouteUnservedParams(TypedDict):
2266
2378
  viewCursor: str
2267
2379
 
2268
2380
 
2269
- class SessionNameChangedParams(TypedDict):
2270
- """`session/nameChanged` params: the fold of ANY durable session-name record — the FIRST-NAMING automatic allocate as well as an accepted `session/rename` (or the same in-process runtime command). Replace-wholesale like every sibling."""
2271
-
2381
+ class _SessionNameChangedParamsBase(TypedDict):
2272
2382
  name: str
2273
2383
  sessionId: str
2274
2384
  sourceRange: SourceRange
2275
2385
  viewCursor: str
2276
2386
 
2277
2387
 
2388
+ class SessionNameChangedParams(_SessionNameChangedParamsBase, total=False):
2389
+ """`session/nameChanged` params: the fold of ANY durable session-name record — the FIRST-NAMING automatic allocate as well as an accepted `session/rename` (or the same in-process runtime command). Replace-wholesale like every sibling."""
2390
+
2391
+ generatedName: str
2392
+ nameOrigin: SessionNameOrigin
2393
+
2394
+
2278
2395
  class SessionPermissionProfileChangedParams(TypedDict):
2279
2396
  """`session/permissionProfileChanged` params: the fold of the durable profile-commit audit fact — fired on every accepted POST-EPOCH-ONE profile commit, never for a mode-only change (that writes no such fact and keeps folding `session/approvalModeChanged` from its own reconfigure fact) and never for a reviewer-attachment change. It folds on EVERY `PermissionProfileCommittedV1` EXCEPT the epoch-one initialization fact and fork/child derivation facts — their causes (`newSessionDefault`, `launchCli` at start, `fork`, `childSpawn`, `legacyInitialization`, `launchOverrides`) are unreachable on the wire until a later commit carries them — so an omitted-profile start and an empty-cut fork fold nothing and their `\"\"`-cursor rules hold byte-for-byte. A held id recommitting under a changed definition or an managed refresh folds too (the `profileId` may equal the prior), exactly as the approvalMode precedent folds per accepted change. The `session/approvalModeChanged` member pattern with `profileId` in place of `mode`; additive-optional under the protocol spec (clients predating it skip the unknown method); subscription-gated as the protocol spec view events are."""
2280
2397
 
@@ -2287,6 +2404,26 @@ class SessionPermissionProfileChangedParams(TypedDict):
2287
2404
  viewCursor: str
2288
2405
 
2289
2406
 
2407
+ class SessionPromptHintCandidate(TypedDict):
2408
+ """One `session/promptHint` candidate: the table row's stable `id` plus its model-facing \"relevant when …\" description. Display copy stays client-side; the wire never carries it. Experimental: the stable bundle strips this until the surface stabilizes (in-v1 row 346)."""
2409
+
2410
+ description: str
2411
+ id: str
2412
+
2413
+
2414
+ class SessionPromptHintParams(TypedDict):
2415
+ """`session/promptHint` params: the session plus the client-filtered candidate table. A read-only query in the `model/list` mold: no `commandId`, no durable record, no view event — the display-only side call over the wire. Experimental: the stable bundle strips this until the surface stabilizes (in-v1 row 346)."""
2416
+
2417
+ candidates: list[SessionPromptHintCandidate]
2418
+ sessionId: str
2419
+
2420
+
2421
+ class SessionPromptHintResult(TypedDict, total=False):
2422
+ """`session/promptHint` result: the picked table id, or `None` when the model declines (the NONE arm) — never a copy string, so the pinned table stays the single source of truth. Experimental: the stable bundle strips this until the surface stabilizes (in-v1 row 346)."""
2423
+
2424
+ hintId: str
2425
+
2426
+
2290
2427
  class _SessionReadParamsBase(TypedDict):
2291
2428
  sessionId: str
2292
2429
 
@@ -2339,6 +2476,32 @@ class SessionRenameResult(_SessionRenameResultBase, total=False):
2339
2476
  name: str
2340
2477
 
2341
2478
 
2479
+ class _SessionReportStartupPhaseSpanBase(TypedDict):
2480
+ durationMs: int
2481
+ phase: SessionReportStartupPhase
2482
+ startMs: int
2483
+
2484
+
2485
+ class SessionReportStartupPhaseSpan(_SessionReportStartupPhaseSpanBase, total=False):
2486
+ """`session/reportStartupPhases` span: one `StartupPhasesRecord` phase row in camelCase. The host ignores unknown members and fails closed (`invalidParams`) on an unknown phase or provenance value; a `colorProvenance` on any other phase is stripped. The host maps each row onto the record's snake_case spelling at append. Experimental: the stable bundle strips this until the surface stabilizes (in-v1 row 348)."""
2487
+
2488
+ colorProvenance: SessionReportTerminalColorProvenance
2489
+
2490
+
2491
+ class SessionReportStartupPhasesParams(TypedDict):
2492
+ """`session/reportStartupPhases` params: the served session, the client-minted launch nonce (one UUID per process launch, any textual UUID form), and the finished spans. No `commandId`: the nonce is the idempotency key and the call is best-effort. Experimental: the stable bundle strips this until the surface stabilizes (in-v1 row 348)."""
2493
+
2494
+ launchNonce: str
2495
+ phases: list[SessionReportStartupPhaseSpan]
2496
+ sessionId: str
2497
+
2498
+
2499
+ class SessionReportStartupPhasesResult(TypedDict):
2500
+ """`session/reportStartupPhases` result: whether this report appended. A duplicate nonce succeeds with `recorded: false` and appends nothing. Experimental: the stable bundle strips this until the surface stabilizes (in-v1 row 348)."""
2501
+
2502
+ recorded: bool
2503
+
2504
+
2342
2505
  class _SessionResumeParamsBase(TypedDict):
2343
2506
  commandId: str
2344
2507
  sessionId: str
@@ -2351,6 +2514,7 @@ class SessionResumeParams(_SessionResumeParamsBase, total=False):
2351
2514
  cursor: str | None
2352
2515
  excludeItems: bool
2353
2516
  history: HistoryPreference
2517
+ permissionProfile: str
2354
2518
 
2355
2519
 
2356
2520
  class _SessionResumeResultBase(TypedDict):
@@ -2627,6 +2791,7 @@ class SkillCatalogEntry(_SkillCatalogEntryBase, total=False):
2627
2791
 
2628
2792
  argumentHint: str
2629
2793
  pluginId: str
2794
+ title: str
2630
2795
 
2631
2796
 
2632
2797
  class SkillChangedParams(TypedDict):
@@ -3099,6 +3264,25 @@ class TurnInterruptResult(TypedDict):
3099
3264
  turnId: str
3100
3265
 
3101
3266
 
3267
+ class _TurnModelRetryScheduledParamsBase(TypedDict):
3268
+ attempt: int
3269
+ maxAttempts: int
3270
+ nextAttempt: int
3271
+ retryDelayMs: int
3272
+ sessionId: str
3273
+ sourceRange: SourceRange
3274
+ turnId: str
3275
+ viewCursor: str
3276
+
3277
+
3278
+ class TurnModelRetryScheduledParams(_TurnModelRetryScheduledParamsBase, total=False):
3279
+ """`turn/modelRetryScheduled` params: a durable model-stream retry-scheduled fact folded — the provider backoff behind one model attempt is observable BEFORE the turn terminates, so a streaming client can render \"system words · retrying in Ss · attempt N/M\" instead of dead air. Non-terminal: it never resolves a turn-wait. The sibling `turn/retryScheduled` shape at the model layer: same member names and semantics (attempt/nextAttempt/maxAttempts/ retryDelayMs/system/errorKind/httpStatus), minus `reason` — the row's words derive from `errorKind` through the shared gate-off mapping, and the recorded machine message is not user text. The delay is the recorded scheduled backoff, never an absolute fire time — clients derive any countdown locally. `sourceRange` cites the session stream's mirror of the task-lifecycle record."""
3280
+
3281
+ errorKind: str
3282
+ httpStatus: int
3283
+ system: str
3284
+
3285
+
3102
3286
  class _TurnRefBase(TypedDict):
3103
3287
  commandId: str
3104
3288
  turnId: str
@@ -3711,8 +3895,9 @@ METHODS: Final[dict[str, MethodSpec]] = {
3711
3895
  "approval/listPending": {"description": "Reads the full pending approval and user-input payloads for a session; a lease-free fold read.", "params": "ApprovalListPendingParams", "result": "ApprovalListPendingResult"},
3712
3896
  "computerUseSettings/read": {"description": "Reads the computer-use Settings: each capability's Always allow switch and the user's blocked apps from the approval policy store, plus the built-in blocks as locked rows when asked; computerUseUnavailable while the CUA gate is off.", "params": "ComputerUseSettingsReadParams", "result": "ComputerUseSettings"},
3713
3897
  "computerUseSettings/update": {"description": "Applies one Settings patch (capability dropdowns, blocked apps to add or remove) all-or-nothing and answers the user's Settings after it; a built-in block is refused in either list; computerUseUnavailable while the CUA gate is off.", "params": "ComputerUseSettingsUpdateParams", "result": "ComputerUseSettings"},
3714
- "computerUseSetup/read": {"description": "Reads one session's computer-use setup state and permissions by running cua_setup status for it as a host command: no model turn, no prompt, no spawn; computerUseUnavailable while the CUA gate is off.", "params": "ComputerUseSetupReadParams", "result": "ComputerUseSetupState"},
3715
- "computerUseSetup/start": {"description": "A human command: runs cua_setup start for one session, between turns, exactly as the TUI's /cua on does, and answers the state it settles in, with the refusal code when setup refused; computerUseUnavailable while the CUA gate is off.", "params": "ComputerUseSetupStartParams", "result": "ComputerUseSetupState"},
3898
+ "computerUseSetup/check": {"description": "Reads the host's three macOS grants with no prompt: starts the computer-use helper only long enough to check them, reports each as granted or missing, and ends it; never requests a grant or opens System Settings. Needs computerUseHostSetup; commandRejected runtime_busy while a setup attempt holds the host.", "params": None, "result": "ComputerUseSetupState"},
3899
+ "computerUseSetup/read": {"description": "Reads one session's computer-use setup state and permissions by running cua_setup status for it as a host command: no model turn, no prompt, no spawn; computerUseUnavailable while the CUA gate is off. Without sessionId it reads the host's own setup, with computerUseHostSetup.", "params": "ComputerUseSetupReadParams", "result": "ComputerUseSetupState"},
3900
+ "computerUseSetup/start": {"description": "A human command: runs cua_setup start for one session, between turns, exactly as the TUI's /cua on does, and answers the state it settles in, with the refusal code when setup refused; computerUseUnavailable while the CUA gate is off. Without sessionId it starts the host's own setup under one host owner, with computerUseHostSetup.", "params": "ComputerUseSetupStartParams", "result": "ComputerUseSetupState"},
3716
3901
  "feedback/submit": {"description": "Submits a first-party feedback report through the host, reusing the TUI submitter seam (consent, bundle-first persistence, redaction), and answers the upload receipt.", "params": "FeedbackSubmitParams", "result": "FeedbackSubmitResult"},
3717
3902
  "goal/clear": {"description": "Clears the session goal; never wakes and its ack never names a turn.", "params": "GoalClearParams", "result": "GoalCommandResult"},
3718
3903
  "goal/edit": {"description": "Replaces the current goal's objective under the same wake gate as goal/set.", "params": "GoalEditParams", "result": "GoalCommandResult"},
@@ -3746,8 +3931,10 @@ METHODS: Final[dict[str, MethodSpec]] = {
3746
3931
  "session/compact": {"description": "Compacts the session's conversation context; runs asynchronously, so the ack is admission only.", "params": "SessionCompactParams", "result": "SessionCompactResult"},
3747
3932
  "session/fork": {"description": "Branches a session into a new id whose log copies the source through a cut point, with durable provenance.", "params": "SessionForkParams", "result": "SessionForkResult"},
3748
3933
  "session/list": {"description": "Pages through stored sessions under the sessions root for history and picker UIs; read-only, never touches leases.", "params": "SessionListParams", "result": "SessionListResult"},
3934
+ "session/promptHint": {"description": "Picks one feature-tip table id over the client-supplied candidates; display-only, nothing is logged.", "params": "SessionPromptHintParams", "result": "SessionPromptHintResult"},
3749
3935
  "session/read": {"description": "Reads one stored session without attaching: no lease, no load, no subscription, no resume record.", "params": "SessionReadParams", "result": "SessionReadResult"},
3750
3936
  "session/rename": {"description": "Sets or changes the durable allocated session name through the runtime session_name command; withheld under the ephemeral profile.", "params": "SessionRenameParams", "result": "SessionRenameResult"},
3937
+ "session/reportStartupPhases": {"description": "Reports the client's measured startup spans once per launch; the host appends the durable phases record as single writer.", "params": "SessionReportStartupPhasesParams", "result": "SessionReportStartupPhasesResult"},
3751
3938
  "session/resume": {"description": "Loads a stored session on this host, auto-subscribes this connection, and returns the history needed to render it.", "params": "SessionResumeParams", "result": "SessionResumeResult"},
3752
3939
  "session/setApprovalMode": {"description": "Selects a preconfigured approval enforcement mode mid-session; select, never create.", "params": "SessionSetApprovalModeParams", "result": "SessionSetApprovalModeResult"},
3753
3940
  "session/setModel": {"description": "Reconfigures the session's model; the selection is durable and applies to subsequent model calls.", "params": "SessionSetModelParams", "result": "SessionSetModelResult"},
@@ -3803,7 +3990,7 @@ NOTIFICATIONS: Final[dict[str, NotificationSpec]] = {
3803
3990
  "approval/requested": {"description": "An approval opened: the fold of its durable Requested record.", "params": "ApprovalRequestParams"},
3804
3991
  "approval/resolved": {"description": "The first durable approval terminal landed; protected delivery.", "params": "ApprovalResolvedParams"},
3805
3992
  "approval/updated": {"description": "A non-terminal approval record changed the pending view.", "params": "ApprovalUpdatedParams"},
3806
- "computerUseSetup/changed": {"description": "A computerUseSetup/read or /start observed a session's setup state differ from the last one sent for it, including inProgress when a start begins and the state it settles in.", "params": "ComputerUseSetupChanged"},
3993
+ "computerUseSetup/changed": {"description": "A computerUseSetup/read or /start observed a session's setup state differ from the last one sent for it, including inProgress when a start begins and the state it settles in. Without sessionId it carries the host's own setup state, delivered only with computerUseHostSetup.", "params": "ComputerUseSetupChanged"},
3807
3994
  "initialized": {"description": "Client-to-server notification closing the handshake; no params.", "params": None},
3808
3995
  "item/completed": {"description": "An item reached its terminal state: the authoritative final object.", "params": "ItemCompletedParams"},
3809
3996
  "item/delta": {"description": "Streaming append to an open item's field path (ephemeral-sourced, no sourceRange; opt-out-able).", "params": "ItemDeltaParams"},
@@ -3834,6 +4021,7 @@ NOTIFICATIONS: Final[dict[str, NotificationSpec]] = {
3834
4021
  "skill/changed": {"description": "The session's user-invocable skill set changed; clients re-issue skill/list. A live host-state projection, not a view event.", "params": "SkillChangedParams"},
3835
4022
  "turn/completed": {"description": "Turn terminal: completed | failed | cancelled, with usage and the settled error object.", "params": "TurnCompletedParams"},
3836
4023
  "turn/foregroundCompleted": {"description": "The turn's foreground work is done while named background reminder checks hold the turn open; explicitly non-terminal.", "params": "TurnForegroundCompletedParams"},
4024
+ "turn/modelRetryScheduled": {"description": "A provider backoff behind one model attempt is scheduled and waiting out its delay; observable mid-turn, non-terminal.", "params": "TurnModelRetryScheduledParams"},
3837
4025
  "turn/retracted": {"description": "An accepted interrupt's paired retract durably settled, accepted or declined.", "params": "TurnRetractedParams"},
3838
4026
  "turn/retryScheduled": {"description": "A failing model attempt's retry is scheduled and waiting out its backoff; observable mid-turn, non-terminal.", "params": "TurnRetryScheduledParams"},
3839
4027
  "turn/started": {"description": "A foreground turn began running.", "params": "TurnStartedParams"},
@@ -3894,4 +4082,4 @@ ERRORS: Final[tuple[ErrorSpec, ...]] = (
3894
4082
  {"code": -32072, "kind": "admissionChoiceInvalid", "retryable": False, "overrideKinds": ()},
3895
4083
  )
3896
4084
 
3897
- GRANTABLE_CAPABILITIES: Final[tuple[str, ...]] = ("userShell", "sessionMcp", "sessionListStream", "feedback", "computerUseSetup", "rawLog", "peerMessaging",)
4085
+ GRANTABLE_CAPABILITIES: Final[tuple[str, ...]] = ("userShell", "sessionMcp", "sessionListStream", "feedback", "computerUseSetup", "computerUseHostSetup", "sessionRename", "rawLog", "peerMessaging",)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: muse-code-msp
3
- Version: 1.4.6
3
+ Version: 1.4.8
4
4
  Summary: Generated Python wire types for the Muse Session Protocol (MSP). No hand-written protocol types, ever.
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/meta-models/muse-code-sdk
File without changes
File without changes
File without changes