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.
- {muse_code_msp-1.4.6/src/muse_code_msp.egg-info → muse_code_msp-1.4.8}/PKG-INFO +1 -1
- {muse_code_msp-1.4.6 → muse_code_msp-1.4.8}/pyproject.toml +1 -1
- {muse_code_msp-1.4.6 → muse_code_msp-1.4.8}/src/muse_code_msp/__init__.py +119 -18
- {muse_code_msp-1.4.6 → muse_code_msp-1.4.8}/src/muse_code_msp/experimental/__init__.py +212 -24
- {muse_code_msp-1.4.6 → muse_code_msp-1.4.8/src/muse_code_msp.egg-info}/PKG-INFO +1 -1
- {muse_code_msp-1.4.6 → muse_code_msp-1.4.8}/LICENSE +0 -0
- {muse_code_msp-1.4.6 → muse_code_msp-1.4.8}/README.md +0 -0
- {muse_code_msp-1.4.6 → muse_code_msp-1.4.8}/setup.cfg +0 -0
- {muse_code_msp-1.4.6 → muse_code_msp-1.4.8}/src/muse_code_msp/py.typed +0 -0
- {muse_code_msp-1.4.6 → muse_code_msp-1.4.8}/src/muse_code_msp.egg-info/SOURCES.txt +0 -0
- {muse_code_msp-1.4.6 → muse_code_msp-1.4.8}/src/muse_code_msp.egg-info/dependency_links.txt +0 -0
- {muse_code_msp-1.4.6 → muse_code_msp-1.4.8}/src/muse_code_msp.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: muse-code-msp
|
|
3
|
-
Version: 1.4.
|
|
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.
|
|
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:
|
|
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.
|
|
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
|
|
598
|
-
"""
|
|
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
|
|
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
|
|
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
|
|
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/
|
|
3056
|
-
"computerUseSetup/
|
|
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:
|
|
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.
|
|
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
|
|
813
|
-
"""
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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/
|
|
3715
|
-
"computerUseSetup/
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|