muse-code-msp 1.4.11__tar.gz → 1.4.12__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.11
3
+ Version: 1.4.12
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.11"
8
+ version = "1.4.12"
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,17 +7,20 @@ from __future__ import annotations
7
7
 
8
8
  from typing import Any, Final, Literal, TypedDict
9
9
 
10
- SCHEMA_FINGERPRINT: Final[str] = "sha256:f282ad16e21520d0cda68cb190149b86e2b062eef1dd282749360c05aa3d1082"
10
+ SCHEMA_FINGERPRINT: Final[str] = "sha256:cfdb6d2525601b9bac76584ccb0610ab3a5539b5e4f51141f079b99b39fcb4e0"
11
11
  SCHEMA_VERSION: Final[int] = 1
12
12
  EXPERIMENTAL: Final[bool] = False
13
- REQUIRED_HOST_VERSION: Final[str] = "1.4.11"
13
+ REQUIRED_HOST_VERSION: Final[str] = "1.4.12"
14
14
 
15
+ # How long a rule created by an approval decision lasts. The set is open, so newer hosts may send other values.
15
16
  ApprovalAmendmentDurability = str # open enum: unknown values stay representable
16
17
  APPROVAL_AMENDMENT_DURABILITY_KNOWN_VALUES: Final[tuple[str, ...]] = ("session", "localPersistent",)
17
18
 
19
+ # How long a grant made by a choice lasts. The set is open, so newer hosts may send other values.
18
20
  ApprovalChoiceScope = str # open enum: unknown values stay representable
19
21
  APPROVAL_CHOICE_SCOPE_KNOWN_VALUES: Final[tuple[str, ...]] = ("once", "session", "localPersistent",)
20
22
 
23
+ # The kind of decision a choice applies or an approval received. The set is open, so newer hosts may send values this version does not list.
21
24
  ApprovalDecision = str # open enum: unknown values stay representable
22
25
  APPROVAL_DECISION_KNOWN_VALUES: Final[tuple[str, ...]] = ("approved", "approvedForSession", "approvedPolicyAmendment", "denied", "deniedPolicyAmendment", "timedOut", "abort",)
23
26
 
@@ -32,12 +35,15 @@ APPROVAL_MODE_APPLY_OUTCOME_KNOWN_VALUES: Final[tuple[str, ...]] = ("completed",
32
35
  ApprovalModeSource = str # open enum: unknown values stay representable
33
36
  APPROVAL_MODE_SOURCE_KNOWN_VALUES: Final[tuple[str, ...]] = ("startup", "replay", "approvalReconfigure",)
34
37
 
38
+ # The result of saving a granted rule to the local policy store. The set is open, so newer hosts may send other values.
35
39
  ApprovalPersistenceStatus = str # open enum: unknown values stay representable
36
40
  APPROVAL_PERSISTENCE_STATUS_KNOWN_VALUES: Final[tuple[str, ...]] = ("succeeded", "failed",)
37
41
 
42
+ # Whether an approval's final decision lets the action run. The set is open, so newer hosts may send other values.
38
43
  ApprovalPolicyResult = str # open enum: unknown values stay representable
39
44
  APPROVAL_POLICY_RESULT_KNOWN_VALUES: Final[tuple[str, ...]] = ("allow", "deny",)
40
45
 
46
+ # Who or what made an approval's final decision. The set is open, so newer hosts may send other values.
41
47
  ApprovalResolvedBy = str # open enum: unknown values stay representable
42
48
  APPROVAL_RESOLVED_BY_KNOWN_VALUES: Final[tuple[str, ...]] = ("user", "policy", "llmJudge",)
43
49
 
@@ -49,7 +55,7 @@ ATTENTION_FLAG_KNOWN_VALUES: Final[tuple[str, ...]] = ("approvalPending", "input
49
55
  BackgroundInitiator = str # open enum: unknown values stay representable
50
56
  BACKGROUND_INITIATOR_KNOWN_VALUES: Final[tuple[str, ...]] = ("user", "timeout",)
51
57
 
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.
58
+ # A grantable capability name. Open: the experimental-only `rawLog` entry joins the stable domain as an additive open-enum extension when it graduates — closed would make that a retype.
53
59
  CapabilityName = str # open enum: unknown values stay representable
54
60
  CAPABILITY_NAME_KNOWN_VALUES: Final[tuple[str, ...]] = ("userShell", "sessionMcp", "sessionListStream", "feedback", "computerUseSetup", "computerUseHostSetup", "sessionRename",)
55
61
 
@@ -61,7 +67,7 @@ CODE_MODE_LANGUAGE_KNOWN_VALUES: Final[tuple[str, ...]] = ("javascript",)
61
67
  CodeModeOutputStream = str # open enum: unknown values stay representable
62
68
  CODE_MODE_OUTPUT_STREAM_KNOWN_VALUES: Final[tuple[str, ...]] = ("transcript",)
63
69
 
64
- # The ack-status vocabulary: `"accepted"` for every admitted command; `session/compact` alone may answer `"noop"`. Closed: the protocol spec names exactly these two values, so SDK clients get a discriminated type and validation catches a wrong status — and a client that received a third value would have been told nothing it can act on, unlike [`TurnStartDisposition`], where "acked, not otherwise classified" is a usable reading.
70
+ # The ack-status vocabulary: `"accepted"` for every admitted command; `session/compact` alone may answer `"noop"`. Closed: the protocol defines exactly these two values, so SDK clients get a discriminated type and validation catches a wrong status — and a client that received a third value would have been told nothing it can act on, unlike [`TurnStartDisposition`], where "acked, not otherwise classified" is a usable reading.
65
71
  CommandAckStatus = Literal["accepted", "noop"]
66
72
 
67
73
  # The ack `status`: `accepted` for every admitted command. `session/compact` is the one method that may additionally answer `noop` ([`crate::method::runtime::CompactStatus`]); no other command uses another status.
@@ -104,7 +110,7 @@ COMPUTER_USE_SETUP_PHASE_KNOWN_VALUES: Final[tuple[str, ...]] = ("dormant", "inP
104
110
  ContextPressureLevel = str # open enum: unknown values stay representable
105
111
  CONTEXT_PRESSURE_LEVEL_KNOWN_VALUES: Final[tuple[str, ...]] = ("normal", "warning", "blocked",)
106
112
 
107
- # A stable `error.data.kind` category: camelCase, the value clients branch on. Open: the protocol spec lanes add kinds additively as their methods land, and the spec's edge-case rule makes a new `kind` additive only because this domain is declared open.
113
+ # A stable `error.data.kind` category: camelCase, the value clients branch on. Open: new kinds are added as their methods land, and a new `kind` is additive only because this domain is declared open.
108
114
  ErrorKind = str # open enum: unknown values stay representable
109
115
  ERROR_KIND_KNOWN_VALUES: Final[tuple[str, ...]] = ("parseError", "invalidRequest", "notInitialized", "alreadyInitialized", "methodNotFound", "invalidParams", "experimentalRequired", "internal", "pageEventTooLarge", "outputResultTooLarge", "overloaded", "inputTooLarge", "capabilityRequired", "notFound", "interrupted", "cancelled", "sessionNotFound", "sessionInUse", "sessionAmbiguous", "forkBoundaryInvalid", "sessionNotLoaded", "sessionStreamMismatch", "commandRejected", "backpressured", "skillNotFound", "computerUseUnavailable", "marketplaceNotFound", "pluginNotFound", "marketplaceAlreadyExists", "pluginMutationsDisabled", "uploadNotFound", "viewTruncated", "outputUnavailable", "boundaryPruned", "boundaryUnusable", "noBoundary", "approvalNotFound", "approvalAlreadyResolved", "approvalChoiceInvalid", "approvalRequirementStale", "approvalReviewerUnavailable", "userInputNotFound", "userInputAlreadySettled", "userInputAnswerInvalid",)
110
116
 
@@ -119,7 +125,7 @@ FEEDBACK_SUBMIT_OUTCOME_KNOWN_VALUES: Final[tuple[str, ...]] = ("uploaded", "rec
119
125
  HistoryMode = str # open enum: unknown values stay representable
120
126
  HISTORY_MODE_KNOWN_VALUES: Final[tuple[str, ...]] = ("anchoredSnapshot", "inline", "snapshot", "none",)
121
127
 
122
- # Why a result served `history.mode: "none"` — the owning spec typed unavailability. Open on the client side: an absent (older server) or unknown (newer server) value decodes conservatively as an unknown reason, and `viewCursor` text never substitutes for it.
128
+ # Why a result served `history.mode: "none"`: the server's typed reason for serving no history. Open on the client side: an absent (older server) or unknown (newer server) value decodes conservatively as an unknown reason, and `viewCursor` text never substitutes for it.
123
129
  HistoryNoneReason = str # open enum: unknown values stay representable
124
130
  HISTORY_NONE_REASON_KNOWN_VALUES: Final[tuple[str, ...]] = ("excluded", "cursorSuffix", "historyBudget", "projectionUnavailable", "projectionReadLimit",)
125
131
 
@@ -128,7 +134,7 @@ HistoryPreference = Literal["auto", "inline", "snapshot", "anchored"]
128
134
 
129
135
  # Hook event names: the lowercase-first-letter spelling of every `HookEventKind::all()` variant. Open: a future event value is additive.
130
136
  HookEventName = str # open enum: unknown values stay representable
131
- HOOK_EVENT_NAME_KNOWN_VALUES: Final[tuple[str, ...]] = ("sessionStart", "userPromptSubmit", "preToolUse", "permissionRequest", "postToolUse", "preCompact", "postCompact", "subagentStart", "subagentStop", "stop", "sessionEnd", "notification", "postToolUseFailure", "stopFailure", "postToolBatch", "interrupt", "sessionFork", "toolUseStart", "preLLMCall", "postLLMCall",)
137
+ HOOK_EVENT_NAME_KNOWN_VALUES: Final[tuple[str, ...]] = ("sessionStart", "userPromptSubmit", "preToolUse", "permissionRequest", "postToolUse", "preLLMCall", "postLLMCall", "preCompact", "postCompact", "subagentStart", "subagentStop", "stop", "sessionEnd", "notification", "postToolUseFailure", "stopFailure", "postToolBatch", "interrupt", "sessionFork", "toolUseStart",)
132
138
 
133
139
  # A hook row's origin: the config `HookSourceKind` values plus plugin-contributed. Open: a future origin is additive.
134
140
  HookHandlerKind = str # open enum: unknown values stay representable
@@ -143,7 +149,7 @@ IfBusy = Literal["queue", "steer", "replace"]
143
149
 
144
150
  # The eleven v1 item kinds plus post-v1 kinds. Open: a new kind is additive evolution, and clients MUST render unknown kinds generically.
145
151
  ItemKind = str # open enum: unknown values stay representable
146
- ITEM_KIND_KNOWN_VALUES: Final[tuple[str, ...]] = ("userMessage", "agentMessage", "reasoning", "toolCall", "userShell", "subagent", "workflow", "reminderChild", "compaction", "hookRun", "sideChat", "webSearch", "monitorFeed", "damagedRange", "scheduledFire",)
152
+ ITEM_KIND_KNOWN_VALUES: Final[tuple[str, ...]] = ("userMessage", "agentMessage", "reasoning", "toolCall", "userShell", "subagent", "workflow", "reminderChild", "compaction", "hookRun", "sideChat", "webSearch", "monitorFeed", "damagedRange", "scheduledFire", "backgroundTerminalCompletion", "overdueNotice",)
147
153
 
148
154
  # 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.
149
155
  ItemReadOutputEncoding = Literal["utf8", "base64"]
@@ -179,7 +185,7 @@ OUTPUT_REF_AVAILABILITY_KNOWN_VALUES: Final[tuple[str, ...]] = ("available", "mi
179
185
  PendingRequestKind = str # open enum: unknown values stay representable
180
186
  PENDING_REQUEST_KIND_KNOWN_VALUES: Final[tuple[str, ...]] = ("approval", "userInput",)
181
187
 
182
- # The server runtime's platform family; may differ from the client's. Closed: the protocol spec fixes the value set, so widening it is a deliberate, gate-visible protocol change rather than a silent addition.
188
+ # The server runtime's platform family; may differ from the client's. Closed: the protocol fixes the value set, so widening it is a deliberate, gate-visible protocol change rather than a silent addition (a later `Closed`→`Open` flip is itself additive).
183
189
  PlatformFamily = Literal["unix", "windows"]
184
190
 
185
191
  # The server's operating system. Closed, for the same reason as [`PlatformFamily`].
@@ -206,7 +212,7 @@ REASONING_EFFORT_CHANGE_SOURCE_KNOWN_VALUES: Final[tuple[str, ...]] = ("user", "
206
212
  RecapFailureReason = str # open enum: unknown values stay representable
207
213
  RECAP_FAILURE_REASON_KNOWN_VALUES: Final[tuple[str, ...]] = ("providerFailed",)
208
214
 
209
- # `recap/completed` outcome: the terminal vocabulary, camelCase per the protocol spec. **Open**: a server-produced result vocabulary.
215
+ # `recap/completed` outcome: the terminal vocabulary, in camelCase. **Open**: a server-produced result vocabulary.
210
216
  RecapOutcome = str # open enum: unknown values stay representable
211
217
  RECAP_OUTCOME_KNOWN_VALUES: Final[tuple[str, ...]] = ("completed", "failed", "cancelled", "timedOut",)
212
218
 
@@ -305,6 +311,10 @@ STATUS_HEALTH_LEVEL_KNOWN_VALUES: Final[tuple[str, ...]] = ("ok", "waiting", "de
305
311
  SubagentControlStatus = str # open enum: unknown values stay representable
306
312
  SUBAGENT_CONTROL_STATUS_KNOWN_VALUES: Final[tuple[str, ...]] = ("accepted", "starting", "running", "resultReady", "closing", "closed", "recoveryPending", "manualReconciliation",)
307
313
 
314
+ # A task row's execution mode. Open: clients MUST ignore unknown modes.
315
+ TaskExecutionMode = str # open enum: unknown values stay representable
316
+ TASK_EXECUTION_MODE_KNOWN_VALUES: Final[tuple[str, ...]] = ("foreground", "background",)
317
+
308
318
  # A task row's status. Open: a future state is additive, and clients MUST ignore unknown statuses.
309
319
  TaskListStatus = str # open enum: unknown values stay representable
310
320
  TASK_LIST_STATUS_KNOWN_VALUES: Final[tuple[str, ...]] = ("inProgress",)
@@ -339,20 +349,22 @@ TURN_TERMINAL_KNOWN_VALUES: Final[tuple[str, ...]] = ("completed", "failed", "ca
339
349
  # The only scalar alternative to a known effort array. Kept as a closed singleton so arbitrary strings and uppercase spellings fail decoding.
340
350
  UnknownModelReasoningEffortVariants = Literal["unknown"]
341
351
 
352
+ # How a user-input prompt settled. More values may be added, so handle values you do not recognize.
342
353
  UserInputOutcome = str # open enum: unknown values stay representable
343
354
  USER_INPUT_OUTCOME_KNOWN_VALUES: Final[tuple[str, ...]] = ("answered", "cancelled", "interrupted", "clarified", "timedOut", "aborted",)
344
355
 
356
+ # Whether a question takes one option or several.
345
357
  UserInputSelectionMode = Literal["single", "multiple"]
346
358
 
347
359
  # Version-control system of a branch observation. Open.
348
360
  Vcs = str # open enum: unknown values stay representable
349
361
  VCS_KNOWN_VALUES: Final[tuple[str, ...]] = ("git", "sapling",)
350
362
 
351
- # The `view/page` request-mode anchor. Declared **open**: the protocol spec spells it "open string enum, v1 value `latestCompaction`".
363
+ # The `view/page` request-mode anchor. Declared **open**: the protocol spells it "open string enum, v1 value `latestCompaction`".
352
364
  ViewPageAnchor = str # open enum: unknown values stay representable
353
365
  VIEW_PAGE_ANCHOR_KNOWN_VALUES: Final[tuple[str, ...]] = ("latestCompaction",)
354
366
 
355
- # The `view/page` paging direction. Closed: the protocol spec spells exactly two values and a third would change the paging contract.
367
+ # The `view/page` paging direction. Closed: the protocol spells exactly two values and a third would change the paging contract.
356
368
  ViewPageDirection = Literal["forward", "backward"]
357
369
 
358
370
  # Which control to apply to the child's current attempt. Closed on the wire: an unknown value is `-32602 invalidParams`.
@@ -362,6 +374,8 @@ WorkflowChildAction = Literal["skip", "retry"]
362
374
  ModelReasoningEffortVariants = list[ReasoningEffort] | UnknownModelReasoningEffortVariants
363
375
 
364
376
  class ApprovalAmendment(TypedDict):
377
+ """The policy rule a decision created, in display form; the full rule is not included."""
378
+
365
379
  durability: ApprovalAmendmentDurability
366
380
  rulePreview: str
367
381
 
@@ -371,6 +385,8 @@ class _ApprovalChangeBase(TypedDict):
371
385
 
372
386
 
373
387
  class ApprovalChange(_ApprovalChangeBase, total=False):
388
+ """The change an `approval/updated` event reports. `kind` says what happened, and only the fields for that kind are present."""
389
+
374
390
  choiceId: str
375
391
  decision: ApprovalDecision
376
392
  executable: bool
@@ -388,10 +404,50 @@ class _ApprovalChoiceBase(TypedDict):
388
404
 
389
405
 
390
406
  class ApprovalChoice(_ApprovalChoiceBase, total=False):
407
+ """One option the server offers for deciding an approval. Clients pick one and send its `choiceId` in `approval/decide`; they never build their own."""
408
+
391
409
  acceptsFeedback: bool
392
410
  rulePreview: str
393
411
 
394
412
 
413
+ class ApprovalCuaCardFacts(TypedDict, total=False):
414
+ """One Computer Use card's facts. Empty collections and absent rows are omitted, never `null`."""
415
+
416
+ page: ApprovalCuaPage
417
+ steps: list[ApprovalCuaStep]
418
+ windowTitle: str
419
+
420
+
421
+ class ApprovalCuaPage(TypedDict):
422
+ """The page's full host, no path or query."""
423
+
424
+ host: str
425
+ hostAscii: str
426
+
427
+
428
+ class ApprovalCuaPoint(TypedDict):
429
+ """A point in the model's 0–1000 coordinates."""
430
+
431
+ x: int
432
+ y: int
433
+
434
+
435
+ class _ApprovalCuaStepBase(TypedDict):
436
+ action: str
437
+ effect: str
438
+ kind: str
439
+ step: int
440
+
441
+
442
+ class ApprovalCuaStep(_ApprovalCuaStepBase, total=False):
443
+ """One consequential step. A client renders \"Step N: <action> <roleWord> \"<label>\" — <effect>\"; a key step names its `chord`, and only a step with a `point` (and no label or chord) reads \"at x,y\"."""
444
+
445
+ chord: str
446
+ label: str
447
+ point: ApprovalCuaPoint
448
+ roleWord: str
449
+
450
+
395
451
  class _ApprovalDecideParamsBase(TypedDict):
396
452
  approvalId: str
397
453
  choiceId: str
@@ -433,6 +489,8 @@ class _ApprovalOriginBase(TypedDict):
433
489
 
434
490
 
435
491
  class ApprovalOrigin(_ApprovalOriginBase, total=False):
492
+ """What triggered a tool action, shown so the user can judge it. It is display-only and untrusted, and policy rules never match on it."""
493
+
436
494
  command: str
437
495
  url: str
438
496
 
@@ -458,11 +516,12 @@ class _ApprovalRequestParamsBase(TypedDict):
458
516
  class ApprovalRequestParams(_ApprovalRequestParamsBase, total=False):
459
517
  """Full params shared by `approval/request` and `approval/requested`."""
460
518
 
519
+ cuaCardFacts: ApprovalCuaCardFacts
461
520
  subagentOrigin: ApprovalSubagentOrigin
462
521
 
463
522
 
464
523
  class ApprovalRequirementRef(TypedDict):
465
- """Approval-stage token carried in the protocol spec params and stale-requirement errors."""
524
+ """Identifies one requirement of an approval: for a `shell` approval, one stage. A client sends it back as `requirementId` in `approval/decide`, and a stale-requirement error names the current one."""
466
525
 
467
526
  approvalId: str
468
527
  sourceIndex: int
@@ -508,10 +567,14 @@ class _ApprovalStageBase(TypedDict):
508
567
 
509
568
 
510
569
  class ApprovalStage(_ApprovalStageBase, total=False):
570
+ """One stage of a `shell` approval: a single command from the pipeline or command list, approved separately from the others."""
571
+
511
572
  suggestedPrefix: ApprovalSuggestedPrefix
512
573
 
513
574
 
514
575
  class ApprovalStageEvidence(TypedDict):
576
+ """How one stage of a `shell` approval was resolved when the decision became final."""
577
+
515
578
  argv: list[str]
516
579
  position: int
517
580
  requirementId: ApprovalRequirementRef
@@ -524,6 +587,8 @@ class _ApprovalStageResolutionBase(TypedDict):
524
587
 
525
588
 
526
589
  class ApprovalStageResolution(_ApprovalStageResolutionBase, total=False):
590
+ """Whether a shell stage still needs a decision, or how it was satisfied. Satisfied stages are included so a client can show progress."""
591
+
527
592
  argvPrefix: list[str]
528
593
  diagnostic: str
529
594
 
@@ -557,6 +622,8 @@ class ApprovalSubject(_ApprovalSubjectBase, total=False):
557
622
 
558
623
 
559
624
  class ApprovalSuggestedPrefix(TypedDict):
625
+ """A suggested always-allow rule for a shell stage: commands starting with `argvPrefix` would run in this workspace without asking."""
626
+
560
627
  argvPrefix: list[str]
561
628
  label: str
562
629
 
@@ -578,6 +645,22 @@ class ApprovalUpdatedParams(_ApprovalUpdatedParamsBase, total=False):
578
645
  subagentOrigin: ApprovalSubagentOrigin
579
646
 
580
647
 
648
+ class BackgroundTerminalCompletion(TypedDict):
649
+ """`backgroundTerminalCompletion`: the five facts the Finished cell renders. The fold reads them from the inbox terminal record and the backgrounded call it names; every member is required (empty output serializes as `\"\"`, never absent)."""
650
+
651
+ command: str
652
+ output: str
653
+ outputTruncated: bool
654
+ terminalStatus: str
655
+ toolCallId: str
656
+
657
+
658
+ class BlockedPrompt(TypedDict):
659
+ """The cold recall seed on `session/resume` and `session/read` results: at most one, the latest blocked Main prompt — exactly the host's mirror of `prompt_recovery::replay::ReplayInput`'s choice."""
660
+
661
+ text: str
662
+
663
+
581
664
  class _BranchStateBase(TypedDict):
582
665
  branch: str | None
583
666
  workspaceRoot: str
@@ -589,6 +672,12 @@ class BranchState(_BranchStateBase, total=False):
589
672
  vcs: Vcs
590
673
 
591
674
 
675
+ class CheckpointBoundary(TypedDict):
676
+ """A served checkpoint-prune boundary: `through_item_id` names the last first-opened item that opened strictly before the boundary checkpoint event."""
677
+
678
+ throughItemId: str
679
+
680
+
592
681
  class ClientCapabilities(TypedDict, total=False):
593
682
  """The client's requested capability posture. Every member defaults; an absent `capabilities` object means all defaults."""
594
683
 
@@ -754,7 +843,7 @@ class ContextUsage(_ContextUsageBase, total=False):
754
843
 
755
844
 
756
845
  class CronReceipt(TypedDict, total=False):
757
- """Cron's `details` payload. Every field a family owns lives here, under the container's one `details` key, rather than flat beside the discriminators — the governing rules as amended. Each is a **bounded machine fact**: scalars, short identifiers and a small fixed-shape array of those."""
846
+ """Cron's `details` payload. Every field a family owns lives here, under the container's one `details` key, rather than flat beside the discriminators. Each is a **bounded machine fact**: scalars, short identifiers and a small fixed-shape array of those."""
758
847
 
759
848
  jobId: str
760
849
  jobs: list[CronReceiptJob]
@@ -762,7 +851,7 @@ class CronReceipt(TypedDict, total=False):
762
851
 
763
852
 
764
853
  class CronReceiptJob(TypedDict):
765
- """One row of the Cron `list` receipt's `jobs` array. Server order, and **`active` + `firing` rows only** — the owner's `Serve active+firing only` directive. A small fixed-shape array of scalars, which is what keeps it inside the governing rules bounded-machine-fact rule."""
854
+ """One row of the Cron `list` receipt's `jobs` array. Server order, and **`active` + `firing` rows only**. A small fixed-shape array of scalars, which is what keeps it a bounded machine fact."""
766
855
 
767
856
  jobId: str
768
857
  nextFireAtMs: int
@@ -782,7 +871,7 @@ class _CumulativeTokenUsageBase(TypedDict):
782
871
 
783
872
 
784
873
  class CumulativeTokenUsage(_CumulativeTokenUsageBase, total=False):
785
- """Session running totals of counted-once usage. Amendment a tracked change: the cache splits and server-computed `cost` join the counters. The counters stay accumulate-only; `cost` is the documented exception — it may move either way on price re-adoption and is labeled estimate. `Copy` was dropped for the `cost` member."""
874
+ """Session running totals of counted-once usage. The cache splits and server-computed `cost` join the counters. The counters stay accumulate-only; `cost` is the documented exception — it may move either way on price re-adoption and is labeled estimate. `Copy` was dropped for the `cost` member."""
786
875
 
787
876
  cacheReadTokens: int
788
877
  cacheWriteTokens: int
@@ -1054,6 +1143,7 @@ class Item(_ItemBase, total=False):
1054
1143
  attachments: list[MessageAttachment]
1055
1144
  background: bool
1056
1145
  backgroundInitiator: BackgroundInitiator
1146
+ backgroundTerminalCompletion: BackgroundTerminalCompletion
1057
1147
  blocking: bool
1058
1148
  callId: str
1059
1149
  childPromptRefs: list[OutputRef]
@@ -1165,7 +1255,7 @@ class _ItemReadOutputParamsBase(TypedDict):
1165
1255
 
1166
1256
 
1167
1257
  class ItemReadOutputParams(_ItemReadOutputParamsBase, total=False):
1168
- """`item/readOutput` params: byte-ranged fetch of stored full output that the view truncated — the `outputRef` fetch path the protocol's sections owe. Read-only; works on loaded and unloaded sessions; no lease."""
1258
+ """`item/readOutput` params: byte-ranged fetch of stored full output that the view truncated, via the item's `outputRef`. Read-only; works on loaded and unloaded sessions; no lease."""
1169
1259
 
1170
1260
  lengthBytes: int
1171
1261
  offsetBytes: int
@@ -1428,7 +1518,7 @@ class _PendingRequestPointerBase(TypedDict):
1428
1518
 
1429
1519
 
1430
1520
  class PendingRequestPointer(_PendingRequestPointerBase, total=False):
1431
- """A late-joiner pointer at an unsettled server-initiated request. The full payloads arrive as re-issued server-to-client requests right after a `session/resume` response; `session/read` never re-issues them. **A second E4 instance, RULED with E4: the flat discriminated-object precedent is accepted for this type too, on the `ApprovalSubject` precedent, with the serialized JSON unchanged. A strict union node kind may be funded later; if it is, it must cover both this type and `TurnInputPart`.** the protocol spec ratifies two kind-discriminated entry shapes (`{kind: \"approval\", approvalId, viewCursor}` / `{kind: \"userInput\", userInputId, viewCursor}`); this is one flat object with both ids optional, so the published schema accepts `{\"kind\":\"approval\",\"userInputId\":…}` and an entry carrying no id at all. The v1 model names no object-variant union (the `ApprovalSubject` precedent, followed for `TurnInputPart`), and this instance differs from that one in a way the ruling should see: `kind` here is an OPEN enum, where `TurnInputPart.type` is closed."""
1521
+ """A late-joiner pointer at an unsettled server-initiated request. The full payloads arrive as re-issued server-to-client requests right after a `session/resume` response; `session/read` never re-issues them. The protocol defines two kind-discriminated entry shapes (`{kind: \"approval\", approvalId, viewCursor}` / `{kind: \"userInput\", userInputId, viewCursor}`). This type is one flat object with both ids optional, as for `ApprovalSubject` and `TurnInputPart`, because the v1 model names no object-variant union; the serialized JSON is the same, but the published schema also accepts `{\"kind\":\"approval\",\"userInputId\":…}` and an entry carrying no id at all. Unlike `TurnInputPart.type`, `kind` here is an OPEN enum."""
1432
1522
 
1433
1523
  approvalId: str
1434
1524
  userInputId: str
@@ -1790,7 +1880,7 @@ class SessionCompactResult(_SessionCompactResultBase, total=False):
1790
1880
 
1791
1881
 
1792
1882
  class SessionConfig(TypedDict, total=False):
1793
- """The open configuration extension object shared by `session/start` and `session/resume`. Unknown keys are ignored on the wire, never rejected: the live decoder is the governing rules tolerant path, and the governing rules keeps every exported bundle free of `additionalProperties: false`. The Rust typed model's `deny_unknown_fields` is internal and never exported — the E6b closedness export applies nowhere, and the `x-msp-closed` opt-in mechanism stays inert. Recognized `mcpServers` values are typed and validated before they leave the wire boundary."""
1883
+ """The open configuration extension object shared by `session/start` and `session/resume`. Unknown keys are ignored on the wire, never rejected: the live decoder tolerates them, and no exported bundle carries `additionalProperties: false`. The Rust typed model's `deny_unknown_fields` is internal and never exported — the closedness export applies nowhere, and the `x-msp-closed` opt-in mechanism stays inert. Recognized `mcpServers` values are typed and validated before they leave the wire boundary."""
1794
1884
 
1795
1885
  mcpServers: dict[str, SessionMcpServerConfig]
1796
1886
 
@@ -1848,6 +1938,7 @@ class _SessionHistoryBase(TypedDict):
1848
1938
  class SessionHistory(_SessionHistoryBase, total=False):
1849
1939
  """The `history` envelope shared by `session/resume`, `session/fork`, and `session/read`."""
1850
1940
 
1941
+ checkpointBoundary: CheckpointBoundary
1851
1942
  noneReason: HistoryNoneReason
1852
1943
 
1853
1944
 
@@ -1997,6 +2088,7 @@ class _SessionReadResultBase(TypedDict):
1997
2088
  class SessionReadResult(_SessionReadResultBase, total=False):
1998
2089
  """`session/read` result. The `viewCursor` is the fold head at read time — a point-in-time read, immediately stale if a foreign host is appending."""
1999
2090
 
2091
+ blockedPrompt: BlockedPrompt
2000
2092
  lastTurn: LastTurn
2001
2093
  recoveryObservation: RecoveryObservation
2002
2094
 
@@ -2056,6 +2148,7 @@ class _SessionResumeResultBase(TypedDict):
2056
2148
  class SessionResumeResult(_SessionResumeResultBase, total=False):
2057
2149
  """`session/resume` result."""
2058
2150
 
2151
+ blockedPrompt: BlockedPrompt
2059
2152
  lastTurn: LastTurn
2060
2153
 
2061
2154
 
@@ -2356,7 +2449,7 @@ class _SnapshotStateBase(TypedDict):
2356
2449
 
2357
2450
 
2358
2451
  class SnapshotState(_SnapshotStateBase, total=False):
2359
- """The complete folded view at the snapshot cursor. Additive-optional evolution applies exactly as everywhere else; unknown members MUST be ignored, and preserved if re-serialized. **One served site does not satisfy this type today, escalated under a tracked change (E8).** The genesis snapshot rung serves `state: {\"items\": [...]}` alone, while the anchored rung serves the full folded state. A schema-validating client resuming with `{\"history\": \"snapshot\"}` against the real fold therefore sees the other required members missing. The fix is a serving change in the lane (serialize the `SessionViewState` the genesis path already folds, as the anchored path does) plus its own RED against the real fold; it is not a shape change here, because the protocol spec ratifies this shape."""
2452
+ """The complete folded view at the snapshot cursor. Additive-optional evolution applies exactly as everywhere else; unknown members MUST be ignored, and preserved if re-serialized."""
2360
2453
 
2361
2454
  contextUsage: ContextUsage
2362
2455
  name: str | None
@@ -2538,9 +2631,11 @@ class _TaskListEntryBase(TypedDict):
2538
2631
 
2539
2632
 
2540
2633
  class TaskListEntry(_TaskListEntryBase, total=False):
2541
- """One background-task inventory row. The row is the stable contract: `kind` and `status` stay open so a future state extends them without breaking clients."""
2634
+ """One task inventory row. The row is the stable contract: `kind` and `status` stay open so a future state extends them without breaking clients."""
2542
2635
 
2543
2636
  backgroundInitiator: BackgroundInitiator
2637
+ command: str
2638
+ executionMode: TaskExecutionMode
2544
2639
  startedAt: str
2545
2640
  tool: str
2546
2641
 
@@ -2552,7 +2647,7 @@ class TaskListParams(TypedDict):
2552
2647
 
2553
2648
 
2554
2649
  class TaskListResult(TypedDict):
2555
- """`task/list` result: one row per running background workload in `task/stopAll` reach, oldest first; empty when nothing is running."""
2650
+ """`task/list` result: one row per live workload, background and foreground, oldest first; empty when nothing is running."""
2556
2651
 
2557
2652
  tasks: list[TaskListEntry]
2558
2653
 
@@ -2691,7 +2786,7 @@ class _TurnInputPartBase(TypedDict):
2691
2786
 
2692
2787
 
2693
2788
  class TurnInputPart(_TurnInputPartBase, total=False):
2694
- """One ordered content part of a turn submission. File mentions are text, not a part type: write `@relative/path` in a text part. A structured `mention` part is reserved and currently rejected, and an unknown part type is `invalidParams` — which is what closes [`TurnInputPartType`]. Modelled as a discriminated flat object rather than a Rust `enum`, the convention [`crate::view::approval::ApprovalSubject`] already established for a wire union in this crate: the v1 schema model names no object-variant union shape and fails closed on one. The serialized JSON is the protocol spec shape either way; what a flat object cannot express is \"`mediaType` is required exactly when `type` is `image`\". **RULED: the precedent is accepted.** A strict union node kind may be funded later as a follow-up; if it is, it must cover [`crate::method::lifecycle::PendingRequestPointer`] too."""
2789
+ """One ordered content part of a turn submission. File mentions are text, not a part type: write `@relative/path` in a text part. A structured `mention` part is reserved and currently rejected, and an unknown part type is `invalidParams` — which is what closes [`TurnInputPartType`]. Modelled as a discriminated flat object rather than a Rust `enum`, the convention [`crate::view::approval::ApprovalSubject`] already established for a wire union in this crate: the v1 schema model names no object-variant union shape and fails closed on one. The serialized JSON is the same either way; what a flat object cannot express is \"`mediaType` is required exactly when `type` is `image`\"."""
2695
2790
 
2696
2791
  arguments: str
2697
2792
  base64Data: str
@@ -2879,14 +2974,14 @@ class TurnUserShell(TypedDict):
2879
2974
 
2880
2975
 
2881
2976
  class UnframedViewNotification(TypedDict):
2882
- """One element of a `view/page` result's `events` array: an **unframed view notification** exactly as the protocol spec defines it — the nested pair `{\"method\", \"params\"}`, which is the live notification minus `jsonrpc` and `emittedAtMs`, with nothing lifted out of `params` and nothing spliced into it. the protocol spec is the single normative definition; the protocol's sections both cite it, so the two surfaces cannot drift."""
2977
+ """One element of a `view/page` result's `events` array: an **unframed view notification** — the nested pair `{\"method\", \"params\"}`, which is the live notification minus `jsonrpc` and `emittedAtMs`, with nothing lifted out of `params` and nothing spliced into it. `view/page` and `muse exec --json` share this one definition, so the two surfaces cannot drift."""
2883
2978
 
2884
2979
  method: str
2885
2980
  params: UnframedViewNotificationParams
2886
2981
 
2887
2982
 
2888
2983
  class UnframedViewNotificationParams(TypedDict):
2889
- """The `params` of an unframed view notification. Declares the base members every view notification carries, and stays **open** for the event-specific fields the protocol's sections add per event type. The v1 schema model names no method-correlated union, so the per-event arms cannot be expressed here without one; enumerating them as an uncorrelated union would additionally exclude `turn/unqueued`, whose notification row is another lane's ratified deferral — a published schema that rejects a real page element is the exact defect this PR exists to close. Recorded as a Design delta on a tracked change. `sourceRange` is required here and not optional: `view/page` serves durable-sourced events only, and durable-sourced is *defined* as carrying a `sourceRange` — the ephemeral-sourced exemption applies to `item/delta`, which `view/page` never replays."""
2984
+ """The `params` of an unframed view notification. Declares the base members every view notification carries, and stays **open** for the event-specific fields each event type adds. The v1 schema model names no method-correlated union (the `events` element's `params` arm is selected by its sibling `method`), so the per-event arms cannot be expressed here without one, and an uncorrelated union of them could reject a real page element, which a published schema must not do. `sourceRange` is required here and not optional: `view/page` serves durable-sourced events only, and durable-sourced is *defined* as carrying a `sourceRange` — the ephemeral-sourced exemption applies to `item/delta`, which `view/page` never replays."""
2890
2985
 
2891
2986
  sessionId: str
2892
2987
  sourceRange: SourceRange
@@ -2904,6 +2999,8 @@ class _UserInputAnswerBase(TypedDict):
2904
2999
 
2905
3000
 
2906
3001
  class UserInputAnswer(_UserInputAnswerBase, total=False):
3002
+ """One question's answer, as sent in `userInput/answer` or `userInput/interrupt` and as recorded in `userInput/settled`."""
3003
+
2907
3004
  freeText: str
2908
3005
  note: str
2909
3006
  selectedLabel: str
@@ -2911,7 +3008,7 @@ class UserInputAnswer(_UserInputAnswerBase, total=False):
2911
3008
 
2912
3009
 
2913
3010
  class UserInputAnswerParams(TypedDict):
2914
- """`userInput/answer` params: answer every question. Each answer carries `questionId` then exactly one of `selectedLabel` (single mode), `selectedLabels` (multiple mode, within min/max bounds), or `freeText` (<=500 chars); plus an optional `note` (<=500). Answers that do not match the prompt fail -32057 `userInputAnswerInvalid`. Image `attachments` are a **reserved** field in v1, rejected if sent, because the blob-upload path they reference is reserved in the protocol spec."""
3011
+ """`userInput/answer` params: answer every question. Each answer carries `questionId` then exactly one of `selectedLabel` (single mode), `selectedLabels` (multiple mode, within min/max bounds), or `freeText` (<=500 chars); plus an optional `note` (<=500). Answers that do not match the prompt fail -32057 `userInputAnswerInvalid`. Image `attachments` are a **reserved** field in v1, rejected if sent, because the blob-upload path they reference is also reserved."""
2915
3012
 
2916
3013
  answers: list[UserInputAnswer]
2917
3014
  commandId: str
@@ -2948,6 +3045,8 @@ class UserInputCancelResult(TypedDict):
2948
3045
 
2949
3046
 
2950
3047
  class UserInputClarification(TypedDict):
3048
+ """A free-form reply the user gives instead of choosing from the options; the model reads it and decides again."""
3049
+
2951
3050
  content: str
2952
3051
  format: str
2953
3052
 
@@ -3001,16 +3100,22 @@ class _UserInputOptionBase(TypedDict):
3001
3100
 
3002
3101
 
3003
3102
  class UserInputOption(_UserInputOptionBase, total=False):
3103
+ """One option offered for a question."""
3104
+
3004
3105
  description: str
3005
3106
  preview: UserInputOptionPreview
3006
3107
 
3007
3108
 
3008
3109
  class UserInputOptionPreview(TypedDict):
3110
+ """Rich content a client can show for an option. Only single-select questions carry previews."""
3111
+
3009
3112
  content: str
3010
3113
  format: str
3011
3114
 
3012
3115
 
3013
3116
  class UserInputQuestion(TypedDict):
3117
+ """One question in a user-input prompt."""
3118
+
3014
3119
  header: str
3015
3120
  id: str
3016
3121
  options: list[UserInputOption]
@@ -3041,6 +3146,8 @@ class _UserInputSelectionBase(TypedDict):
3041
3146
 
3042
3147
 
3043
3148
  class UserInputSelection(_UserInputSelectionBase, total=False):
3149
+ """How many options the user may pick for a question."""
3150
+
3044
3151
  maxSelections: int
3045
3152
  minSelections: int
3046
3153
 
@@ -3312,15 +3419,15 @@ METHODS: Final[dict[str, MethodSpec]] = {
3312
3419
  "hook/list": {"description": "Reads the session's installed hook rows — one per installed handler per event, config-file handlers plus plugin-contributed hooks; a query, not a command.", "params": "HookListParams", "result": "HookListResult"},
3313
3420
  "initialize": {"description": "Opens the connection: client identification, capability requests, and the experimental opt-in; the reply carries the envelope schema version and the stable-surface fingerprint.", "params": "InitializeParams", "result": "InitializeResult"},
3314
3421
  "item/readOutput": {"description": "Byte-ranged read of stored full output the view truncated; works on loaded and unloaded sessions and takes no lease.", "params": "ItemReadOutputParams", "result": "ItemReadOutputResult"},
3315
- "media/upload": {"description": "Moves one video chunk into the session's video store; answers the \\ `uploadId` receipt on every chunk.", "params": "MediaUploadParams", "result": "MediaUploadResult"},
3422
+ "media/upload": {"description": "Moves one video chunk into the session's video store; answers the `uploadId` receipt on every chunk.", "params": "MediaUploadParams", "result": "MediaUploadResult"},
3316
3423
  "model/list": {"description": "Reads the catalog of models the host will accept in `session/setModel`; a query, not a command.", "params": "ModelListParams", "result": "ModelListResult"},
3317
3424
  "plugin/install": {"description": "Install one plugin from a marketplace pair or a host local path with scope (per-session, `commandId`-idempotent, hold-open; answers the installed receipt).", "params": "PluginInstallParams", "result": "PluginInstallResult"},
3318
3425
  "plugin/list": {"description": "Reads the installed plugin records — one row per installed plugin; a query, not a command.", "params": "PluginListParams", "result": "PluginListResult"},
3319
3426
  "plugin/marketplaceAdd": {"description": "Add a marketplace from `owner/repo`, git URL, `file://` URL, or local path (per-session, `commandId`-idempotent; answers the stored record).", "params": "PluginMarketplaceAddParams", "result": "PluginMarketplaceRecordResult"},
3320
3427
  "plugin/marketplaceRemove": {"description": "Remove a marketplace (per-session, `commandId`-idempotent; answers the removed name).", "params": "PluginMarketplaceRemoveParams", "result": "PluginMarketplaceRemoveResult"},
3321
3428
  "plugin/marketplaceUpdate": {"description": "Refresh a marketplace in place (per-session, `commandId`-idempotent; answers the stored record).", "params": "PluginMarketplaceUpdateParams", "result": "PluginMarketplaceRecordResult"},
3322
- "recap/cancel": {"description": "Cancels the session's in-flight recap, which settles `cancelled`; \\ idle is an accepted no-op.", "params": "RecapCancelParams", "result": "RecapCancelResult"},
3323
- "recap/request": {"description": "Requests a \"while you were away\" recap for a loaded session; acks \\ `accepted` and settles exactly once on `recap/completed` — one \\ in flight per session, host-enforced 45s timeout.", "params": "RecapRequestParams", "result": "RecapRequestResult"},
3429
+ "recap/cancel": {"description": "Cancels the session's in-flight recap, which settles `cancelled`; idle is an accepted no-op.", "params": "RecapCancelParams", "result": "RecapCancelResult"},
3430
+ "recap/request": {"description": "Requests a \"while you were away\" recap for a loaded session; acks `accepted` and settles exactly once on `recap/completed` — one in flight per session, host-enforced 45s timeout.", "params": "RecapRequestParams", "result": "RecapRequestResult"},
3324
3431
  "session/compact": {"description": "Compacts the session's conversation context; runs asynchronously, so the ack is admission only.", "params": "SessionCompactParams", "result": "SessionCompactResult"},
3325
3432
  "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"},
3326
3433
  "session/leave": {"description": "Admits release of one loaded session; final release or failure is pushed through session/leaveCompleted.", "params": "SessionLeaveParams", "result": "SessionLeaveResult"},
@@ -3334,9 +3441,9 @@ METHODS: Final[dict[str, MethodSpec]] = {
3334
3441
  "session/sideChat": {"description": "Opens a side chat from a loaded main session, with durable provenance.", "params": "SessionSideChatParams", "result": "SessionSideChatResult"},
3335
3442
  "session/start": {"description": "Creates a brand-new session, loads it on this host, durably records the start, and auto-subscribes this connection.", "params": "SessionStartParams", "result": "SessionStartResult"},
3336
3443
  "session/userShell": {"description": "Runs a user-initiated shell command in the session's workspace; capability-gated on `userShell`.", "params": "SessionUserShellParams", "result": "SessionUserShellResult"},
3337
- "skill/import": {"description": "Imports foreign skills from the host's own `claude | codex` dirs \\through the single `SkillsService::import_skills` seam; answers \\per-skill installed/quarantined/skipped/failed plus counts. \\`commandId`-idempotent (including `dryRun` previews); each \\successful write is an detection point.", "params": "SkillImportParams", "result": "SkillImportResult"},
3444
+ "skill/import": {"description": "Imports foreign skills from the host's own `claude | codex` dirs through the single `SkillsService::import_skills` seam; answers per-skill installed/quarantined/skipped/failed plus counts. `commandId`-idempotent (including `dryRun` previews); each successful write is a `skill/changed` detection point.", "params": "SkillImportParams", "result": "SkillImportResult"},
3338
3445
  "skill/list": {"description": "Reads the session's user-invocable skill rows — one per typed-invocable shortcut spelling, the predicate and shared name resolution by call-through; a query, not a command.", "params": "SkillListParams", "result": "SkillListResult"},
3339
- "skill/setActivation": {"description": "Writes one skill's activation in any scope through the single \\ `SkillsService::set_activation` seam; answers the applied \\ state plus `previous`. `commandId`-idempotent; each \\ successful write is an detection point.", "params": "SkillSetActivationParams", "result": "SkillSetActivationResult"},
3446
+ "skill/setActivation": {"description": "Writes one skill's activation in any scope through the single `SkillsService::set_activation` seam; answers the applied state plus `previous`. `commandId`-idempotent; each successful write is a `skill/changed` detection point.", "params": "SkillSetActivationParams", "result": "SkillSetActivationResult"},
3340
3447
  "subagent/close": {"description": "Owner-close a child; the terminal mapping folds per the protocol spec.", "params": "SubagentOwnerReasonParams", "result": "CommandAcceptedResult"},
3341
3448
  "subagent/followupTask": {"description": "Queue a follow-up task for a child; admission-only ack, the task settles on the child session's view stream.", "params": "SubagentInputParams", "result": "CommandAcceptedResult"},
3342
3449
  "subagent/interrupt": {"description": "Ask a child to yield at its next boundary; outcome folds to the parent's subagent item.", "params": "SubagentOwnerReasonParams", "result": "CommandAcceptedResult"},
@@ -3379,12 +3486,12 @@ NOTIFICATIONS: Final[dict[str, NotificationSpec]] = {
3379
3486
  "item/delta": {"description": "Streaming append to an open item's field path (ephemeral-sourced, no sourceRange; opt-out-able).", "params": "ItemDeltaParams"},
3380
3487
  "item/started": {"description": "An item opened on the transcript.", "params": "ItemStartedParams"},
3381
3488
  "item/updated": {"description": "An open item changed non-terminally: full re-emission at a higher revision.", "params": "ItemUpdatedParams"},
3382
- "monitor/inboxItemAdmitted": {"description": "One monitor inbox admission: the fold keys gate-off consumes \\.", "params": "MonitorInboxItemAdmittedParams"},
3383
- "monitor/inboxItemDrained": {"description": "One monitor inbox drain with its recorded stamp, the \\ drain-side operand of latest-wins.", "params": "MonitorInboxItemDrainedParams"},
3384
- "monitor/inboxItemVoided": {"description": "One wake-missed void with its recorded stamp; count-only, \\ no transcript row.", "params": "MonitorInboxItemVoidedParams"},
3489
+ "monitor/inboxItemAdmitted": {"description": "One monitor inbox admission: the fold keys gate-off consumes.", "params": "MonitorInboxItemAdmittedParams"},
3490
+ "monitor/inboxItemDrained": {"description": "One monitor inbox drain with its recorded stamp, the drain-side operand of latest-wins.", "params": "MonitorInboxItemDrainedParams"},
3491
+ "monitor/inboxItemVoided": {"description": "One wake-missed void with its recorded stamp; count-only, no transcript row.", "params": "MonitorInboxItemVoidedParams"},
3385
3492
  "plugin/changed": {"description": "An install landed; carries the installed-row summary and clients re-issue `plugin/list`.", "params": "PluginChangedParams"},
3386
3493
  "plugin/marketplaceChanged": {"description": "A marketplace was added, updated, or removed; carries the change summary.", "params": "PluginMarketplaceChangedParams"},
3387
- "recap/completed": {"description": "A recap request settled exactly once — `completed` (with \\ `text` plus optional `title`), `failed` (`providerFailed`), \\ `cancelled`, or `timedOut` — delivered to the requesting \\ connection outside the view stream.", "params": "RecapCompletedParams"},
3494
+ "recap/completed": {"description": "A recap request settled exactly once — `completed` (with `text` plus optional `title`), `failed` (`providerFailed`), `cancelled`, or `timedOut` — delivered to the requesting connection outside the view stream.", "params": "RecapCompletedParams"},
3388
3495
  "session/approvalModeChanged": {"description": "The approval enforcement mode changed: the fold of the durable reconfigure audit fact.", "params": "SessionApprovalModeChangedParams"},
3389
3496
  "session/branchChanged": {"description": "A durable workspace-branch observation landed; null branch is a detached-HEAD fact.", "params": "SessionBranchChangedParams"},
3390
3497
  "session/closed": {"description": "A loaded session was unloaded (idle | hostShutdown | leave) with the final view cursor; broadcast to every initialized connection.", "params": "SessionClosedParams"},