@deepseek-ai/dsh-api-session-controller 0.2.1-alpha.1 → 0.2.1-alpha.3

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,49 +1,41 @@
1
1
  /* Generated by @deepseek-ai/dsh-typert-generator from FaceModel — do not edit. */
2
2
  import { z } from 'zod'
3
3
 
4
- let JsonValueRemoteCodec$schema$value
5
- const JsonValueRemoteCodec$schema = () => (JsonValueRemoteCodec$schema$value ??= z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema()))]))
6
- let JsonValueRemoteCodec$schema2$value
7
- const JsonValueRemoteCodec$schema2 = () => (JsonValueRemoteCodec$schema2$value ??= z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema2())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema2()))]))
8
- let JsonValueRemoteCodec$schema3$value
9
- const JsonValueRemoteCodec$schema3 = () => (JsonValueRemoteCodec$schema3$value ??= z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema3())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema3()))]))
10
- let JsonValueRemoteCodec$schema4$value
11
- const JsonValueRemoteCodec$schema4 = () => (JsonValueRemoteCodec$schema4$value ??= z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema4())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema4()))]))
12
- let JsonValueRemoteCodec$schema5$value
13
- const JsonValueRemoteCodec$schema5 = () => (JsonValueRemoteCodec$schema5$value ??= z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema5())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema5()))]))
4
+ import { createTypertRemoteInfo } from '@deepseek-ai/dsh-typert-protocol/remote-info'
5
+
14
6
  let _deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_0$schema$value
15
- const _deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_0$schema$value ??= z.intersection(z.string(), z.unknown()))
7
+ const _deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_0$schema$value ??= z.string())
16
8
  let _deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_1$schema$value
17
9
  const _deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_1$schema = () => (_deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_1$schema$value ??= z.string())
18
10
  let _deepseek_ai_dsh_api_session_controller_fileReferences_list_result$schema$value
19
11
  const _deepseek_ai_dsh_api_session_controller_fileReferences_list_result$schema = () => (_deepseek_ai_dsh_api_session_controller_fileReferences_list_result$schema$value ??= z.array(z.object({
20
- 'path': z.string(),
21
- 'kind': z.union([z.literal("file"), z.literal("directory")]),
12
+ 'path': z.string().describe('User-facing path accepted by normal prompts and filesystem tools.'),
13
+ 'kind': z.union([z.literal("file"), z.literal("directory")]).describe('Directories keep completion open; files finish the mention.'),
22
14
  })))
23
15
  let _deepseek_ai_dsh_api_session_controller_session_attachment_parameter_0$schema$value
24
16
  const _deepseek_ai_dsh_api_session_controller_session_attachment_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_session_attachment_parameter_0$schema$value ??= z.object({
25
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
26
- 'attachmentId': z.intersection(z.string(), z.unknown()).readonly(),
17
+ 'sessionId': z.string().readonly(),
18
+ 'attachmentId': z.string().readonly(),
27
19
  }))
28
20
  let _deepseek_ai_dsh_api_session_controller_session_attachment_result$schema$value
29
21
  const _deepseek_ai_dsh_api_session_controller_session_attachment_result$schema = () => (_deepseek_ai_dsh_api_session_controller_session_attachment_result$schema$value ??= z.object({
30
22
  'attachment': z.object({
31
- 'attachmentId': z.intersection(z.string(), z.unknown()),
32
- 'mediaType': z.union([z.literal("image/png"), z.literal("image/jpeg"), z.literal("image/webp"), z.literal("image/gif")]),
33
- 'bytes': z.number(),
34
- 'width': z.number(),
35
- 'height': z.number(),
36
- 'name': z.string().optional(),
23
+ 'attachmentId': z.string().describe('Opaque storage identifier; never a filesystem path or bearer URL.'),
24
+ 'mediaType': z.union([z.literal("image/png"), z.literal("image/jpeg"), z.literal("image/webp"), z.literal("image/gif")]).describe('Media type verified from the stored bytes.'),
25
+ 'bytes': z.number().describe('Exact encoded byte length.'),
26
+ 'width': z.number().describe('Intrinsic encoded width in pixels.'),
27
+ 'height': z.number().describe('Intrinsic encoded height in pixels.'),
28
+ 'name': z.string().optional().describe('Optional display name stripped of local path information.'),
37
29
  'originalDimensions': z.object({
38
30
  'width': z.number(),
39
31
  'height': z.number(),
40
- }).optional(),
32
+ }).optional().describe('Input dimensions after applying EXIF orientation and before normalization scaling. Present only when normalization reduced the image.'),
41
33
  }).readonly(),
42
34
  'data': z.string().readonly(),
43
35
  }))
44
36
  let _deepseek_ai_dsh_api_session_controller_session_cancel_parameter_0$schema$value
45
37
  const _deepseek_ai_dsh_api_session_controller_session_cancel_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_session_cancel_parameter_0$schema$value ??= z.object({
46
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
38
+ 'sessionId': z.string().readonly(),
47
39
  }))
48
40
  let _deepseek_ai_dsh_api_session_controller_session_cancel_result$schema$value
49
41
  const _deepseek_ai_dsh_api_session_controller_session_cancel_result$schema = () => (_deepseek_ai_dsh_api_session_controller_session_cancel_result$schema$value ??= z.object({
@@ -55,184 +47,212 @@ let _deepseek_ai_dsh_api_session_controller_session_control_result$schema$value
55
47
  const _deepseek_ai_dsh_api_session_controller_session_control_result$schema = () => (_deepseek_ai_dsh_api_session_controller_session_control_result$schema$value ??= z.union([z.object({
56
48
  'type': z.literal("baseline").readonly(),
57
49
  'value': z.object({
58
- 'projections': z.record(z.intersection(z.string(), z.unknown()), z.object({
50
+ 'projections': z.record(z.string(), z.object({
59
51
  'asOfSeq': z.number().readonly(),
60
52
  'values': z.intersection(z.object({
61
53
  'inbox': z.object({
62
- 'next-turn': z.array(z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema5())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema5()))])).readonly(),
63
- 'next-step': z.array(z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema5())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema5()))])).readonly(),
64
- }).optional(),
65
- 'agentPreset': z.union([z.literal(null), z.string()]).optional(),
66
- 'title': z.union([z.literal(null), z.string()]).optional(),
54
+ 'next-turn': z.array(z.json()).readonly(),
55
+ 'next-step': z.array(z.json()).readonly(),
56
+ }).optional().describe('Pending agent input reconstructed from durable inbox splices.'),
57
+ 'workingDirectory': z.union([z.literal(null), z.string()]).optional().describe('Recorded current directory for Session observations, or null when none is recorded.'),
58
+ 'agentPreset': z.union([z.literal(null), z.string()]).optional().describe('Preset the Session runs, or null when the deployment composes none.'),
59
+ 'title': z.union([z.literal(null), z.string()]).optional().describe('The session\'s current normalized title — the latest `session/title` event\'s text (last-wins), or `null` before the first title lands. A plain string: the shape the client list rows consume.'),
67
60
  'todos': z.union([z.literal(null), z.array(z.object({
68
- 'content': z.string(),
69
- 'status': z.union([z.literal("completed"), z.literal("pending"), z.literal("in_progress")]),
70
- }))]).optional(),
61
+ 'content': z.string().describe('What this task is — a short imperative line shown in the UI.'),
62
+ 'status': z.union([z.literal("completed"), z.literal("pending"), z.literal("in_progress")]).describe('Lifecycle state. `in_progress` marks a task being worked now; parallel work may mark several.'),
63
+ }))]).optional().describe('The agent\'s current whole todo list (the latest `todo/write` snapshot), or `null` before the first write. Whole-value rule: every `todo/write` carries the complete replacement list, so the fold is last-wins.'),
71
64
  'sessionListMetadata': z.object({
72
- 'blank': z.boolean().readonly(),
73
- 'lastPromptAt': z.union([z.literal(null), z.number()]).readonly(),
74
- }).optional(),
65
+ 'blank': z.boolean().readonly().describe('Whether the folded prefix contains no turn.'),
66
+ 'lastPromptAt': z.union([z.literal(null), z.number()]).readonly().describe('Latest human-authored prompt time in the folded prefix.'),
67
+ }).optional().describe('Persisted facts used to summarize a Session without activating it.'),
75
68
  'imageLimits': z.object({
76
69
  'maxImageBytes': z.number(),
77
70
  'maxImagesPerMessage': z.number(),
78
71
  'maxMessageImageBytes': z.number(),
79
72
  'maxImagePixels': z.number(),
80
- 'maxImageDimension': z.number(),
73
+ 'maxImageDimension': z.number().describe('Maximum intrinsic width and maximum intrinsic height in pixels for one image.'),
81
74
  'mediaTypes': z.array(z.union([z.literal("image/png"), z.literal("image/jpeg"), z.literal("image/webp"), z.literal("image/gif")])),
82
- }).optional(),
75
+ }).optional().describe('Image-intake limits enforced by the Session prompt endpoint.'),
83
76
  'modelSelection': z.object({
84
77
  'lastUsed': z.union([z.literal(null), z.object({
85
78
  'provider': z.string().readonly(),
86
79
  'model': z.string().readonly(),
87
80
  'reasoningEffort': z.string().readonly().optional(),
88
- })]).readonly(),
81
+ })]).readonly().describe('Selection consumed by the latest recorded model request.'),
89
82
  'next': z.union([z.literal(null), z.object({
90
83
  'provider': z.string().readonly(),
91
84
  'model': z.string().readonly(),
92
85
  'reasoningEffort': z.string().readonly().optional(),
93
- })]).readonly(),
94
- }).optional(),
86
+ })]).readonly().describe('Selection the next request should use, falling back to {@link lastUsed}.'),
87
+ }).optional().describe('Durable model selection already used and selected for the next request.'),
95
88
  'permissions': z.object({
96
- 'currentValue': z.string(),
97
- }).optional(),
98
- 'subagentCatalog': z.array(z.union([z.intersection(z.object({
99
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
89
+ 'currentValue': z.string().describe('The effective current value: a configured preset key, `auto`, or `custom`.'),
90
+ }).optional().describe('The session\'s current permission, folded from the three whole-value knob events (`permission/preset`, `sandbox/mode`, `approval/policy`) over the composition defaults. Selectable options come from the process-level catalog Remote. Key absence means no permission service is composed — clients hide the control.'),
91
+ 'subagentCatalog': z.array(z.union([z.object({
92
+ 'id': z.string().readonly(),
100
93
  'createdAt': z.number().readonly(),
101
- }), z.object({
102
94
  'mode': z.literal("one-shot").readonly(),
103
95
  'label': z.string().readonly().optional(),
104
- })), z.intersection(z.object({
105
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
96
+ }), z.object({
97
+ 'id': z.string().readonly(),
106
98
  'createdAt': z.number().readonly(),
99
+ 'mode': z.literal("external").readonly(),
100
+ 'label': z.string().readonly().optional(),
107
101
  }), z.object({
102
+ 'id': z.string().readonly(),
103
+ 'createdAt': z.number().readonly(),
108
104
  'mode': z.literal("continuable").readonly(),
109
105
  'label': z.string().readonly(),
110
- })), z.intersection(z.object({
111
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
112
- 'createdAt': z.number().readonly(),
113
106
  }), z.object({
107
+ 'id': z.string().readonly(),
108
+ 'createdAt': z.number().readonly(),
114
109
  'mode': z.literal("unknown").readonly(),
115
110
  'label': z.string().readonly().optional(),
116
- }))])).optional(),
111
+ })])).optional().describe('Direct children in parent catalog event order, excluding fork-inherited facts.'),
117
112
  'subagentTiming': z.object({
118
- 'settledMs': z.number(),
113
+ 'settledMs': z.number().describe('Milliseconds accumulated across completed turns after the child\'s own descriptor.'),
119
114
  'active': z.object({
120
- 'since': z.number(),
121
- 'through': z.number(),
122
- }).optional(),
123
- 'lastTurnCompleted': z.boolean().optional(),
124
- }).optional(),
115
+ 'since': z.number().describe('Start of the open turn.'),
116
+ 'through': z.number().describe('Latest event time folded into this projection cut.'),
117
+ }).optional().describe('Same-cut bounds of the currently open turn, when one has not reached `turn/end`.'),
118
+ 'lastTurnCompleted': z.boolean().optional().describe('Whether the latest closed turn after the child\'s own descriptor completed normally; absent while a turn is open or before one closes.'),
119
+ }).optional().describe('Active-turn duration and latest closed-turn completion for a descriptor-backed subagent session.'),
125
120
  'subagent': z.union([z.literal(null), z.object({
126
- 'mode': z.literal("one-shot"),
127
- 'label': z.string().optional(),
128
- 'seq': z.intersection(z.number(), z.unknown()),
121
+ 'mode': z.literal("one-shot").describe('A terminal one-shot child.'),
122
+ 'label': z.string().optional().describe('Optional durable creation label from the child\'s descriptor.'),
123
+ 'seq': z.number().describe('Seq of the `subagent/descriptor` event this identity was folded from. `session.isOwnSeq(seq)` proves the identity comes from the child\'s OWN log suffix — where a descriptor is immutable once appended — and not from a fork seed\'s replayed ancestor descriptor.'),
129
124
  }), z.object({
130
- 'mode': z.literal("continuable"),
131
- 'label': z.string(),
132
- 'seq': z.intersection(z.number(), z.unknown()),
133
- })]).optional(),
125
+ 'mode': z.literal("continuable").describe('A resumable conversation.'),
126
+ 'label': z.string().describe('Durable creation label from the child\'s descriptor.'),
127
+ 'seq': z.number().describe('Seq of the folded descriptor event; see the one-shot arm for the own-suffix proof.'),
128
+ })]).optional().describe('Identity of a descriptor-backed subagent session. `null` ⟺ no valid descriptor (missing, malformed, or unrecognized-version — deliberately undistinguished). The sentinel is deliberately serializable: a value pushed over JSON transports must survive `JSON.stringify` losslessly, where an `undefined` field would be dropped and a stale identity would survive on the receiving side. The entry itself stays non-optional.'),
134
129
  'tokenUsage': z.object({
135
130
  'uncachedInputTokens': z.number(),
136
131
  'outputTokens': z.number(),
137
132
  'cacheReadTokens': z.number(),
138
133
  'cacheWriteTokens': z.number(),
139
- }).optional(),
134
+ }).optional().describe('Provider-reported usage accumulated across the complete durable log.'),
140
135
  'contextPressure': z.object({
141
- 'pressureTokens': z.number().optional(),
142
- 'projectedTokens': z.number().optional(),
143
- 'contextWindow': z.number().optional(),
144
- }).optional(),
136
+ 'pressureTokens': z.number().optional().describe('Provider-reported prompt size of the most recent request: uncached input plus cache reads and writes. Response output is excluded, so this does not grow as the current turn streams. Absent until a provider reports usage.'),
137
+ 'projectedTokens': z.number().optional().describe('What the NEXT request\'s prompt would cost: {@link pressureTokens} plus the heuristic repricing of everything the surface gained or lost since that sample. Only the delta is estimated, so the figure stays anchored to the provider while still reacting the moment a compaction shadows a span — which `pressureTokens` alone cannot do, since compaction reports no usage of its own. Absent until a provider reports usage.'),
138
+ 'contextWindow': z.number().optional().describe('Newest recorded route capacity; absent when no adapter advertised one.'),
139
+ }).optional().describe('Newest request pressure paired with the newest known route capacity.'),
145
140
  'contextBreakdown': z.object({
146
- 'systemTokens': z.number(),
147
- 'toolsTokens': z.number(),
148
- 'messageTokens': z.number(),
149
- }).optional(),
141
+ 'systemTokens': z.number().describe('Heuristic tokens of the last nonempty surviving system prompt in surface order; 0 when none exists.'),
142
+ 'toolsTokens': z.number().describe('Heuristic tokens of the newest request envelope\'s tool schemas; 0 before any request.'),
143
+ 'messageTokens': z.number().describe('Heuristic tokens of every other visible surface node, including superseded system prompts.'),
144
+ }).optional().describe('Heuristic system/tools/message composition of the next request.'),
145
+ 'agentTeam': z.object({
146
+ 'members': z.array(z.object({
147
+ 'id': z.string().readonly(),
148
+ 'name': z.string().readonly(),
149
+ 'role': z.union([z.literal("lead"), z.literal("teammate")]).readonly(),
150
+ 'phase': z.union([z.literal("failed"), z.literal("provisioning"), z.literal("active")]).readonly().describe('Durable lifecycle; the Lead row is always `active`. Turn activity comes from Session status.'),
151
+ 'error': z.string().readonly().optional(),
152
+ })).readonly(),
153
+ 'tasks': z.array(z.object({
154
+ 'id': z.string().readonly(),
155
+ 'revision': z.number().readonly(),
156
+ 'subject': z.string().readonly(),
157
+ 'description': z.string().readonly(),
158
+ 'status': z.union([z.literal("completed"), z.literal("pending"), z.literal("in_progress"), z.literal("deleted")]).readonly(),
159
+ 'blockedBy': z.array(z.string()).readonly(),
160
+ 'writeScopes': z.array(z.string()).readonly(),
161
+ 'ownerName': z.string().readonly().optional(),
162
+ 'ready': z.boolean().readonly(),
163
+ 'writeScopeWarnings': z.array(z.string()).readonly(),
164
+ })).readonly(),
165
+ 'failure': z.string().readonly().optional(),
166
+ }).optional().describe('Durable roster and non-deleted task board of the Team rooted at the projected Session.'),
150
167
  'userQuestions': z.object({
151
168
  'active': z.array(z.object({
152
- 'callId': z.intersection(z.string(), z.unknown()).readonly(),
169
+ 'callId': z.string().readonly(),
153
170
  'questions': z.array(z.object({
154
- 'id': z.string(),
155
- 'question': z.string(),
156
- 'detail': z.string().optional(),
157
- 'header': z.string().optional(),
171
+ 'id': z.string().describe('Stable caller-provided question id, echoed in the answer.'),
172
+ 'question': z.string().describe('The question to display.'),
173
+ 'detail': z.string().optional().describe('Optional supporting detail rendered with the question but kept out of option labels.'),
174
+ 'header': z.string().optional().describe('Optional short heading/group label.'),
158
175
  'options': z.array(z.object({
159
- 'label': z.string(),
160
- 'description': z.string().optional(),
161
- })).optional(),
162
- 'multiSelect': z.boolean().optional(),
176
+ 'label': z.string().describe('User-facing label.'),
177
+ 'description': z.string().optional().describe('Optional extra context rendered by capable UIs.'),
178
+ })).optional().describe('Optional choices the UI can render as a menu.'),
179
+ 'multiSelect': z.boolean().optional().describe('Whether more than one option may be selected. Defaults to single-select.'),
163
180
  'intent': z.object({
164
- 'kind': z.literal("plan-review"),
165
- 'approve': z.string(),
166
- 'callId': z.intersection(z.string(), z.unknown()).optional(),
167
- }).optional(),
181
+ 'kind': z.literal("plan-review").describe('A plan submitted for review: `detail` is the plan markdown `ask()` requires, and the decision approves or declines it.'),
182
+ 'approve': z.string().describe('The option label that approves the plan; every other option declines it. Named rather than positional so no UI infers the verdict from option order. An `approve` naming no option of its own question is rejected at `ask()`.'),
183
+ 'callId': z.string().optional().describe('Logged tool invocation whose arguments contain the reviewed plan.'),
184
+ }).optional().describe('Optional presentation intent for capable UIs; absent asks for the generic option list.'),
168
185
  })).readonly(),
169
186
  'state': z.union([z.literal("open"), z.literal("continued")]).readonly(),
170
- })).readonly(),
187
+ })).readonly().describe('Calls that can still take an answer, in ask order.'),
171
188
  'settled': z.array(z.object({
172
- 'callId': z.intersection(z.string(), z.unknown()).readonly(),
189
+ 'callId': z.string().readonly().describe('The settled call.'),
173
190
  'answers': z.array(z.object({
174
- 'id': z.string(),
175
- 'selected': z.array(z.string()),
176
- 'custom': z.string().optional(),
177
- })).readonly(),
178
- })).readonly(),
179
- }).optional(),
191
+ 'id': z.string().describe('The answered question id.'),
192
+ 'selected': z.array(z.string()).describe('Selected option labels. May accompany custom text for a multi-select question.'),
193
+ 'custom': z.string().optional().describe('Optional free-text "Other" answer.'),
194
+ })).readonly().describe('The recorded batch, one entry per question; empty when the late reply carried none.'),
195
+ })).readonly().describe('Calls an answer settled, in settlement order.'),
196
+ }).optional().describe('Timed questions that remain answerable in this Session, and the ones a late reply settled.'),
180
197
  'goal': z.union([z.literal(null), z.object({
181
198
  'goal': z.object({
182
- 'objective': z.string().readonly(),
183
- 'phase': z.union([z.literal("active"), z.literal("paused"), z.literal("blocked"), z.literal("complete")]).readonly(),
199
+ 'objective': z.string().readonly().describe('Human-requested completion objective.'),
200
+ 'phase': z.union([z.literal("active"), z.literal("paused"), z.literal("blocked"), z.literal("complete")]).readonly().describe('Durable lifecycle phase.'),
184
201
  'blockedReason': z.object({
185
- 'code': z.string().readonly(),
186
- 'message': z.string().readonly(),
187
- }).readonly().optional(),
188
- 'maxGoalRounds': z.number().readonly(),
189
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
190
- 'revision': z.number().readonly(),
191
- }).readonly(),
192
- 'roundsStarted': z.number().readonly(),
193
- 'createdAt': z.number().readonly(),
194
- 'updatedAt': z.number().readonly(),
195
- })]).optional(),
196
- }), z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema5())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema5()))])).readonly()).readonly(),
202
+ 'code': z.string().readonly().describe('Stable lower-kebab-case classification chosen by the blocking policy.'),
203
+ 'message': z.string().readonly().describe('Non-empty explanation shown to humans and models.'),
204
+ }).readonly().optional().describe('Present exactly while `phase` is `blocked`.'),
205
+ 'maxGoalRounds': z.number().readonly().describe('Total admitted goal-round cap.'),
206
+ 'id': z.string().readonly().describe('Stable goal identity.'),
207
+ 'revision': z.number().readonly().describe('Positive revision; every durable mutation increments it.'),
208
+ }).readonly().describe('Current durable goal snapshot (the CAS ref for mutations rides on it).'),
209
+ 'roundsStarted': z.number().readonly().describe('Highest admitted round number for this goal.'),
210
+ 'createdAt': z.number().readonly().describe('Epoch milliseconds of the create mutation.'),
211
+ 'updatedAt': z.number().readonly().describe('Epoch milliseconds of the latest mutation.'),
212
+ })]).optional().describe('The session\'s current goal and admitted-round count, or `null` before the first create and after a clear tombstone. `goal/change` supplies the whole lifecycle value; matching admitted `user/message` events advance `roundsStarted`.'),
213
+ 'plan': z.object({
214
+ 'active': z.boolean(),
215
+ 'pending': z.boolean(),
216
+ }).optional().describe('Plan collaboration state folded from the plan command lifecycle and `plan/mode` events.'),
217
+ }), z.record(z.string(), z.json()).readonly()).readonly().describe('Provider-validated values; omitted keys are absent capabilities at this cut.'),
197
218
  })).readonly().readonly(),
198
219
  }).readonly(),
199
- }), z.intersection(z.object({
200
- 'type': z.literal("projection").readonly(),
201
220
  }), z.object({
202
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
221
+ 'type': z.literal("projection").readonly(),
222
+ 'sessionId': z.string().readonly(),
203
223
  'key': z.string().readonly(),
204
- 'value': z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema5())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema5()))]).readonly(),
224
+ 'value': z.json().readonly(),
205
225
  'seq': z.number().readonly(),
206
- }))]))
226
+ })]))
207
227
  let _deepseek_ai_dsh_api_session_controller_session_create_parameter_0$schema$value
208
228
  const _deepseek_ai_dsh_api_session_controller_session_create_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_session_create_parameter_0$schema$value ??= z.object({
209
- 'workspaceId': z.intersection(z.string(), z.unknown()).readonly().optional(),
210
- 'cwd': z.string().readonly().optional(),
211
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly().optional(),
212
- 'agentPreset': z.string().readonly().optional(),
229
+ 'workspaceId': z.string().readonly().optional().describe('Workspace the Session joins; exclusive with `cwd`.'),
230
+ 'cwd': z.string().readonly().optional().describe('Directory the Session owns when no Workspace is named.'),
231
+ 'sessionId': z.string().readonly().optional().describe('Blank Session to reuse while it is reusable, or the identity of a new Session when none is stored under it.'),
232
+ 'agentPreset': z.string().readonly().optional().describe('Preset the Session runs, replacing a reused Session\'s recorded preset; the configured default when omitted.'),
213
233
  }))
214
234
  let _deepseek_ai_dsh_api_session_controller_session_create_result$schema$value
215
235
  const _deepseek_ai_dsh_api_session_controller_session_create_result$schema = () => (_deepseek_ai_dsh_api_session_controller_session_create_result$schema$value ??= z.object({
216
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
217
- 'agentPreset': z.string().readonly().optional(),
236
+ 'sessionId': z.string().readonly().describe('The created or reused Session, which may differ from the requested `sessionId`.'),
237
+ 'agentPreset': z.string().readonly().optional().describe('Preset the Session runs, when the deployment composes a preset roster.'),
218
238
  }))
219
239
  let _deepseek_ai_dsh_api_session_controller_session_follow_parameter_0$schema$value
220
240
  const _deepseek_ai_dsh_api_session_controller_session_follow_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_session_follow_parameter_0$schema$value ??= z.object({
221
241
  'address': z.union([z.object({
222
242
  'kind': z.literal("session").readonly(),
223
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
243
+ 'sessionId': z.string().readonly(),
224
244
  }), z.object({
225
245
  'kind': z.literal("subagent").readonly(),
226
- 'parentSessionId': z.intersection(z.string(), z.unknown()).readonly(),
227
- 'childSessionId': z.intersection(z.string(), z.unknown()).readonly(),
246
+ 'parentSessionId': z.string().readonly(),
247
+ 'childSessionId': z.string().readonly(),
228
248
  'mode': z.union([z.literal("one-shot"), z.literal("continuable"), z.literal("unknown")]).readonly(),
229
249
  })]).readonly(),
230
- 'assistantStream': z.literal(true).readonly().optional(),
250
+ 'assistantStream': z.literal(true).readonly().optional().describe('Include process-local assistant presentation frames for the Web client.'),
231
251
  'maxMessages': z.number().readonly().optional(),
232
252
  'turnWindow': z.object({
233
- 'minMessages': z.number().readonly(),
234
- 'minTurns': z.number().readonly(),
235
- }).readonly().optional(),
253
+ 'minMessages': z.number().readonly().describe('Minimum append-origin user/assistant messages; must not exceed maxMessages.'),
254
+ 'minTurns': z.number().readonly().describe('Minimum Turn starts crossed, including the partial Turn at beforeSeq.'),
255
+ }).readonly().optional().describe('Stop at a Turn start after both minima, unless maxMessages or history exhaustion wins.'),
236
256
  }))
237
257
  let _deepseek_ai_dsh_api_session_controller_session_follow_result$schema$value
238
258
  const _deepseek_ai_dsh_api_session_controller_session_follow_result$schema = () => (_deepseek_ai_dsh_api_session_controller_session_follow_result$schema$value ??= z.union([z.object({
@@ -241,20 +261,20 @@ const _deepseek_ai_dsh_api_session_controller_session_follow_result$schema = ()
241
261
  'type': z.string().readonly(),
242
262
  'seq': z.number().readonly(),
243
263
  'time': z.number().readonly(),
244
- 'data': z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema3())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema3()))]).readonly(),
264
+ 'data': z.json().readonly(),
245
265
  'ignorable': z.literal(true).readonly().optional(),
246
- 'sourceEventSeqs': z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema3())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema3()))]).readonly().optional(),
247
- 'surfaceOp': z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema3())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema3()))]).readonly().optional(),
266
+ 'sourceEventSeqs': z.json().readonly().optional().describe('Earlier sources on current surface events; opaque JSON on unknown ignorable events.'),
267
+ 'surfaceOp': z.json().readonly().optional().describe('Canonical placement on current surface events; opaque JSON on unknown ignorable events.'),
248
268
  }).readonly(),
249
269
  }), z.object({
250
270
  'type': z.literal("snapshot").readonly(),
251
271
  'header': z.object({
252
272
  'version': z.number().readonly(),
253
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
273
+ 'id': z.string().readonly(),
254
274
  'createdAt': z.number().readonly(),
255
275
  'cwd': z.string().readonly().optional(),
256
- 'parentSession': z.intersection(z.string(), z.unknown()).readonly().optional(),
257
- 'isSeeded': z.boolean().readonly(),
276
+ 'parentSession': z.string().readonly().optional(),
277
+ 'isSeeded': z.boolean().readonly().describe('Whether the Session contains a fork-inherited prefix.'),
258
278
  'origin': z.literal("subagent").readonly().optional(),
259
279
  'delegationDepth': z.number().readonly().optional(),
260
280
  'agentPreset': z.string().readonly().optional(),
@@ -266,10 +286,10 @@ const _deepseek_ai_dsh_api_session_controller_session_follow_result$schema = ()
266
286
  'type': z.string().readonly(),
267
287
  'seq': z.number().readonly(),
268
288
  'time': z.number().readonly(),
269
- 'data': z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema3())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema3()))]).readonly(),
289
+ 'data': z.json().readonly(),
270
290
  'ignorable': z.literal(true).readonly().optional(),
271
- 'sourceEventSeqs': z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema3())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema3()))]).readonly().optional(),
272
- 'surfaceOp': z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema3())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema3()))]).readonly().optional(),
291
+ 'sourceEventSeqs': z.json().readonly().optional().describe('Earlier sources on current surface events; opaque JSON on unknown ignorable events.'),
292
+ 'surfaceOp': z.json().readonly().optional().describe('Canonical placement on current surface events; opaque JSON on unknown ignorable events.'),
273
293
  }).readonly(),
274
294
  })).readonly(),
275
295
  'hasMore': z.boolean().readonly(),
@@ -277,174 +297,203 @@ const _deepseek_ai_dsh_api_session_controller_session_follow_result$schema = ()
277
297
  'asOfSeq': z.number().readonly(),
278
298
  'values': z.intersection(z.object({
279
299
  'inbox': z.object({
280
- 'next-turn': z.array(z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema3())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema3()))])).readonly(),
281
- 'next-step': z.array(z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema3())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema3()))])).readonly(),
282
- }).optional(),
283
- 'agentPreset': z.union([z.literal(null), z.string()]).optional(),
284
- 'title': z.union([z.literal(null), z.string()]).optional(),
300
+ 'next-turn': z.array(z.json()).readonly(),
301
+ 'next-step': z.array(z.json()).readonly(),
302
+ }).optional().describe('Pending agent input reconstructed from durable inbox splices.'),
303
+ 'workingDirectory': z.union([z.literal(null), z.string()]).optional().describe('Recorded current directory for Session observations, or null when none is recorded.'),
304
+ 'agentPreset': z.union([z.literal(null), z.string()]).optional().describe('Preset the Session runs, or null when the deployment composes none.'),
305
+ 'title': z.union([z.literal(null), z.string()]).optional().describe('The session\'s current normalized title — the latest `session/title` event\'s text (last-wins), or `null` before the first title lands. A plain string: the shape the client list rows consume.'),
285
306
  'todos': z.union([z.literal(null), z.array(z.object({
286
- 'content': z.string(),
287
- 'status': z.union([z.literal("completed"), z.literal("pending"), z.literal("in_progress")]),
288
- }))]).optional(),
307
+ 'content': z.string().describe('What this task is — a short imperative line shown in the UI.'),
308
+ 'status': z.union([z.literal("completed"), z.literal("pending"), z.literal("in_progress")]).describe('Lifecycle state. `in_progress` marks a task being worked now; parallel work may mark several.'),
309
+ }))]).optional().describe('The agent\'s current whole todo list (the latest `todo/write` snapshot), or `null` before the first write. Whole-value rule: every `todo/write` carries the complete replacement list, so the fold is last-wins.'),
289
310
  'sessionListMetadata': z.object({
290
- 'blank': z.boolean().readonly(),
291
- 'lastPromptAt': z.union([z.literal(null), z.number()]).readonly(),
292
- }).optional(),
311
+ 'blank': z.boolean().readonly().describe('Whether the folded prefix contains no turn.'),
312
+ 'lastPromptAt': z.union([z.literal(null), z.number()]).readonly().describe('Latest human-authored prompt time in the folded prefix.'),
313
+ }).optional().describe('Persisted facts used to summarize a Session without activating it.'),
293
314
  'imageLimits': z.object({
294
315
  'maxImageBytes': z.number(),
295
316
  'maxImagesPerMessage': z.number(),
296
317
  'maxMessageImageBytes': z.number(),
297
318
  'maxImagePixels': z.number(),
298
- 'maxImageDimension': z.number(),
319
+ 'maxImageDimension': z.number().describe('Maximum intrinsic width and maximum intrinsic height in pixels for one image.'),
299
320
  'mediaTypes': z.array(z.union([z.literal("image/png"), z.literal("image/jpeg"), z.literal("image/webp"), z.literal("image/gif")])),
300
- }).optional(),
321
+ }).optional().describe('Image-intake limits enforced by the Session prompt endpoint.'),
301
322
  'modelSelection': z.object({
302
323
  'lastUsed': z.union([z.literal(null), z.object({
303
324
  'provider': z.string().readonly(),
304
325
  'model': z.string().readonly(),
305
326
  'reasoningEffort': z.string().readonly().optional(),
306
- })]).readonly(),
327
+ })]).readonly().describe('Selection consumed by the latest recorded model request.'),
307
328
  'next': z.union([z.literal(null), z.object({
308
329
  'provider': z.string().readonly(),
309
330
  'model': z.string().readonly(),
310
331
  'reasoningEffort': z.string().readonly().optional(),
311
- })]).readonly(),
312
- }).optional(),
332
+ })]).readonly().describe('Selection the next request should use, falling back to {@link lastUsed}.'),
333
+ }).optional().describe('Durable model selection already used and selected for the next request.'),
313
334
  'permissions': z.object({
314
- 'currentValue': z.string(),
315
- }).optional(),
316
- 'subagentCatalog': z.array(z.union([z.intersection(z.object({
317
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
335
+ 'currentValue': z.string().describe('The effective current value: a configured preset key, `auto`, or `custom`.'),
336
+ }).optional().describe('The session\'s current permission, folded from the three whole-value knob events (`permission/preset`, `sandbox/mode`, `approval/policy`) over the composition defaults. Selectable options come from the process-level catalog Remote. Key absence means no permission service is composed — clients hide the control.'),
337
+ 'subagentCatalog': z.array(z.union([z.object({
338
+ 'id': z.string().readonly(),
318
339
  'createdAt': z.number().readonly(),
319
- }), z.object({
320
340
  'mode': z.literal("one-shot").readonly(),
321
341
  'label': z.string().readonly().optional(),
322
- })), z.intersection(z.object({
323
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
342
+ }), z.object({
343
+ 'id': z.string().readonly(),
324
344
  'createdAt': z.number().readonly(),
345
+ 'mode': z.literal("external").readonly(),
346
+ 'label': z.string().readonly().optional(),
325
347
  }), z.object({
348
+ 'id': z.string().readonly(),
349
+ 'createdAt': z.number().readonly(),
326
350
  'mode': z.literal("continuable").readonly(),
327
351
  'label': z.string().readonly(),
328
- })), z.intersection(z.object({
329
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
330
- 'createdAt': z.number().readonly(),
331
352
  }), z.object({
353
+ 'id': z.string().readonly(),
354
+ 'createdAt': z.number().readonly(),
332
355
  'mode': z.literal("unknown").readonly(),
333
356
  'label': z.string().readonly().optional(),
334
- }))])).optional(),
357
+ })])).optional().describe('Direct children in parent catalog event order, excluding fork-inherited facts.'),
335
358
  'subagentTiming': z.object({
336
- 'settledMs': z.number(),
359
+ 'settledMs': z.number().describe('Milliseconds accumulated across completed turns after the child\'s own descriptor.'),
337
360
  'active': z.object({
338
- 'since': z.number(),
339
- 'through': z.number(),
340
- }).optional(),
341
- 'lastTurnCompleted': z.boolean().optional(),
342
- }).optional(),
361
+ 'since': z.number().describe('Start of the open turn.'),
362
+ 'through': z.number().describe('Latest event time folded into this projection cut.'),
363
+ }).optional().describe('Same-cut bounds of the currently open turn, when one has not reached `turn/end`.'),
364
+ 'lastTurnCompleted': z.boolean().optional().describe('Whether the latest closed turn after the child\'s own descriptor completed normally; absent while a turn is open or before one closes.'),
365
+ }).optional().describe('Active-turn duration and latest closed-turn completion for a descriptor-backed subagent session.'),
343
366
  'subagent': z.union([z.literal(null), z.object({
344
- 'mode': z.literal("one-shot"),
345
- 'label': z.string().optional(),
346
- 'seq': z.intersection(z.number(), z.unknown()),
367
+ 'mode': z.literal("one-shot").describe('A terminal one-shot child.'),
368
+ 'label': z.string().optional().describe('Optional durable creation label from the child\'s descriptor.'),
369
+ 'seq': z.number().describe('Seq of the `subagent/descriptor` event this identity was folded from. `session.isOwnSeq(seq)` proves the identity comes from the child\'s OWN log suffix — where a descriptor is immutable once appended — and not from a fork seed\'s replayed ancestor descriptor.'),
347
370
  }), z.object({
348
- 'mode': z.literal("continuable"),
349
- 'label': z.string(),
350
- 'seq': z.intersection(z.number(), z.unknown()),
351
- })]).optional(),
371
+ 'mode': z.literal("continuable").describe('A resumable conversation.'),
372
+ 'label': z.string().describe('Durable creation label from the child\'s descriptor.'),
373
+ 'seq': z.number().describe('Seq of the folded descriptor event; see the one-shot arm for the own-suffix proof.'),
374
+ })]).optional().describe('Identity of a descriptor-backed subagent session. `null` ⟺ no valid descriptor (missing, malformed, or unrecognized-version — deliberately undistinguished). The sentinel is deliberately serializable: a value pushed over JSON transports must survive `JSON.stringify` losslessly, where an `undefined` field would be dropped and a stale identity would survive on the receiving side. The entry itself stays non-optional.'),
352
375
  'tokenUsage': z.object({
353
376
  'uncachedInputTokens': z.number(),
354
377
  'outputTokens': z.number(),
355
378
  'cacheReadTokens': z.number(),
356
379
  'cacheWriteTokens': z.number(),
357
- }).optional(),
380
+ }).optional().describe('Provider-reported usage accumulated across the complete durable log.'),
358
381
  'contextPressure': z.object({
359
- 'pressureTokens': z.number().optional(),
360
- 'projectedTokens': z.number().optional(),
361
- 'contextWindow': z.number().optional(),
362
- }).optional(),
382
+ 'pressureTokens': z.number().optional().describe('Provider-reported prompt size of the most recent request: uncached input plus cache reads and writes. Response output is excluded, so this does not grow as the current turn streams. Absent until a provider reports usage.'),
383
+ 'projectedTokens': z.number().optional().describe('What the NEXT request\'s prompt would cost: {@link pressureTokens} plus the heuristic repricing of everything the surface gained or lost since that sample. Only the delta is estimated, so the figure stays anchored to the provider while still reacting the moment a compaction shadows a span — which `pressureTokens` alone cannot do, since compaction reports no usage of its own. Absent until a provider reports usage.'),
384
+ 'contextWindow': z.number().optional().describe('Newest recorded route capacity; absent when no adapter advertised one.'),
385
+ }).optional().describe('Newest request pressure paired with the newest known route capacity.'),
363
386
  'contextBreakdown': z.object({
364
- 'systemTokens': z.number(),
365
- 'toolsTokens': z.number(),
366
- 'messageTokens': z.number(),
367
- }).optional(),
387
+ 'systemTokens': z.number().describe('Heuristic tokens of the last nonempty surviving system prompt in surface order; 0 when none exists.'),
388
+ 'toolsTokens': z.number().describe('Heuristic tokens of the newest request envelope\'s tool schemas; 0 before any request.'),
389
+ 'messageTokens': z.number().describe('Heuristic tokens of every other visible surface node, including superseded system prompts.'),
390
+ }).optional().describe('Heuristic system/tools/message composition of the next request.'),
391
+ 'agentTeam': z.object({
392
+ 'members': z.array(z.object({
393
+ 'id': z.string().readonly(),
394
+ 'name': z.string().readonly(),
395
+ 'role': z.union([z.literal("lead"), z.literal("teammate")]).readonly(),
396
+ 'phase': z.union([z.literal("failed"), z.literal("provisioning"), z.literal("active")]).readonly().describe('Durable lifecycle; the Lead row is always `active`. Turn activity comes from Session status.'),
397
+ 'error': z.string().readonly().optional(),
398
+ })).readonly(),
399
+ 'tasks': z.array(z.object({
400
+ 'id': z.string().readonly(),
401
+ 'revision': z.number().readonly(),
402
+ 'subject': z.string().readonly(),
403
+ 'description': z.string().readonly(),
404
+ 'status': z.union([z.literal("completed"), z.literal("pending"), z.literal("in_progress"), z.literal("deleted")]).readonly(),
405
+ 'blockedBy': z.array(z.string()).readonly(),
406
+ 'writeScopes': z.array(z.string()).readonly(),
407
+ 'ownerName': z.string().readonly().optional(),
408
+ 'ready': z.boolean().readonly(),
409
+ 'writeScopeWarnings': z.array(z.string()).readonly(),
410
+ })).readonly(),
411
+ 'failure': z.string().readonly().optional(),
412
+ }).optional().describe('Durable roster and non-deleted task board of the Team rooted at the projected Session.'),
368
413
  'userQuestions': z.object({
369
414
  'active': z.array(z.object({
370
- 'callId': z.intersection(z.string(), z.unknown()).readonly(),
415
+ 'callId': z.string().readonly(),
371
416
  'questions': z.array(z.object({
372
- 'id': z.string(),
373
- 'question': z.string(),
374
- 'detail': z.string().optional(),
375
- 'header': z.string().optional(),
417
+ 'id': z.string().describe('Stable caller-provided question id, echoed in the answer.'),
418
+ 'question': z.string().describe('The question to display.'),
419
+ 'detail': z.string().optional().describe('Optional supporting detail rendered with the question but kept out of option labels.'),
420
+ 'header': z.string().optional().describe('Optional short heading/group label.'),
376
421
  'options': z.array(z.object({
377
- 'label': z.string(),
378
- 'description': z.string().optional(),
379
- })).optional(),
380
- 'multiSelect': z.boolean().optional(),
422
+ 'label': z.string().describe('User-facing label.'),
423
+ 'description': z.string().optional().describe('Optional extra context rendered by capable UIs.'),
424
+ })).optional().describe('Optional choices the UI can render as a menu.'),
425
+ 'multiSelect': z.boolean().optional().describe('Whether more than one option may be selected. Defaults to single-select.'),
381
426
  'intent': z.object({
382
- 'kind': z.literal("plan-review"),
383
- 'approve': z.string(),
384
- 'callId': z.intersection(z.string(), z.unknown()).optional(),
385
- }).optional(),
427
+ 'kind': z.literal("plan-review").describe('A plan submitted for review: `detail` is the plan markdown `ask()` requires, and the decision approves or declines it.'),
428
+ 'approve': z.string().describe('The option label that approves the plan; every other option declines it. Named rather than positional so no UI infers the verdict from option order. An `approve` naming no option of its own question is rejected at `ask()`.'),
429
+ 'callId': z.string().optional().describe('Logged tool invocation whose arguments contain the reviewed plan.'),
430
+ }).optional().describe('Optional presentation intent for capable UIs; absent asks for the generic option list.'),
386
431
  })).readonly(),
387
432
  'state': z.union([z.literal("open"), z.literal("continued")]).readonly(),
388
- })).readonly(),
433
+ })).readonly().describe('Calls that can still take an answer, in ask order.'),
389
434
  'settled': z.array(z.object({
390
- 'callId': z.intersection(z.string(), z.unknown()).readonly(),
435
+ 'callId': z.string().readonly().describe('The settled call.'),
391
436
  'answers': z.array(z.object({
392
- 'id': z.string(),
393
- 'selected': z.array(z.string()),
394
- 'custom': z.string().optional(),
395
- })).readonly(),
396
- })).readonly(),
397
- }).optional(),
437
+ 'id': z.string().describe('The answered question id.'),
438
+ 'selected': z.array(z.string()).describe('Selected option labels. May accompany custom text for a multi-select question.'),
439
+ 'custom': z.string().optional().describe('Optional free-text "Other" answer.'),
440
+ })).readonly().describe('The recorded batch, one entry per question; empty when the late reply carried none.'),
441
+ })).readonly().describe('Calls an answer settled, in settlement order.'),
442
+ }).optional().describe('Timed questions that remain answerable in this Session, and the ones a late reply settled.'),
398
443
  'goal': z.union([z.literal(null), z.object({
399
444
  'goal': z.object({
400
- 'objective': z.string().readonly(),
401
- 'phase': z.union([z.literal("active"), z.literal("paused"), z.literal("blocked"), z.literal("complete")]).readonly(),
445
+ 'objective': z.string().readonly().describe('Human-requested completion objective.'),
446
+ 'phase': z.union([z.literal("active"), z.literal("paused"), z.literal("blocked"), z.literal("complete")]).readonly().describe('Durable lifecycle phase.'),
402
447
  'blockedReason': z.object({
403
- 'code': z.string().readonly(),
404
- 'message': z.string().readonly(),
405
- }).readonly().optional(),
406
- 'maxGoalRounds': z.number().readonly(),
407
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
408
- 'revision': z.number().readonly(),
409
- }).readonly(),
410
- 'roundsStarted': z.number().readonly(),
411
- 'createdAt': z.number().readonly(),
412
- 'updatedAt': z.number().readonly(),
413
- })]).optional(),
414
- }), z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema3())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema3()))])).readonly()).readonly(),
448
+ 'code': z.string().readonly().describe('Stable lower-kebab-case classification chosen by the blocking policy.'),
449
+ 'message': z.string().readonly().describe('Non-empty explanation shown to humans and models.'),
450
+ }).readonly().optional().describe('Present exactly while `phase` is `blocked`.'),
451
+ 'maxGoalRounds': z.number().readonly().describe('Total admitted goal-round cap.'),
452
+ 'id': z.string().readonly().describe('Stable goal identity.'),
453
+ 'revision': z.number().readonly().describe('Positive revision; every durable mutation increments it.'),
454
+ }).readonly().describe('Current durable goal snapshot (the CAS ref for mutations rides on it).'),
455
+ 'roundsStarted': z.number().readonly().describe('Highest admitted round number for this goal.'),
456
+ 'createdAt': z.number().readonly().describe('Epoch milliseconds of the create mutation.'),
457
+ 'updatedAt': z.number().readonly().describe('Epoch milliseconds of the latest mutation.'),
458
+ })]).optional().describe('The session\'s current goal and admitted-round count, or `null` before the first create and after a clear tombstone. `goal/change` supplies the whole lifecycle value; matching admitted `user/message` events advance `roundsStarted`.'),
459
+ 'plan': z.object({
460
+ 'active': z.boolean(),
461
+ 'pending': z.boolean(),
462
+ }).optional().describe('Plan collaboration state folded from the plan command lifecycle and `plan/mode` events.'),
463
+ }), z.record(z.string(), z.json()).readonly()).readonly().describe('Provider-validated values; omitted keys are absent capabilities at this cut.'),
415
464
  }).readonly(),
416
465
  'assistantStream': z.object({
417
466
  'revision': z.number().readonly(),
418
467
  'activeAttempt': z.object({
419
- 'attemptId': z.intersection(z.string(), z.unknown()).readonly(),
420
- 'startedAfterSeq': z.union([z.intersection(z.number(), z.unknown()), z.literal(-1)]).readonly(),
468
+ 'attemptId': z.string().readonly(),
469
+ 'startedAfterSeq': z.union([z.number(), z.literal(-1)]).readonly().describe('Last durable Session seq observed when this attempt started.'),
421
470
  'turn': z.number().readonly(),
422
471
  'step': z.number().readonly(),
423
- 'nextIndex': z.number().readonly(),
424
- 'stream': z.array(z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema3())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema3()))])).readonly(),
472
+ 'nextIndex': z.number().readonly().describe('Dense position expected for the next live chunk frame.'),
473
+ 'stream': z.array(z.json()).readonly().describe('Compact detached stream accumulated at this opening revision.'),
425
474
  }).readonly().optional(),
426
475
  }).readonly().optional(),
427
476
  }), z.object({
428
477
  'type': z.literal("assistant-stream").readonly(),
429
478
  'frame': z.union([z.object({
430
479
  'type': z.literal("start").readonly(),
431
- 'attemptId': z.intersection(z.string(), z.unknown()).readonly(),
480
+ 'attemptId': z.string().readonly(),
432
481
  'revision': z.number().readonly(),
433
- 'startedAfterSeq': z.union([z.intersection(z.number(), z.unknown()), z.literal(-1)]).readonly(),
482
+ 'startedAfterSeq': z.union([z.number(), z.literal(-1)]).readonly(),
434
483
  'turn': z.number().readonly(),
435
484
  'step': z.number().readonly(),
436
485
  }), z.object({
437
486
  'type': z.literal("chunk").readonly(),
438
- 'attemptId': z.intersection(z.string(), z.unknown()).readonly(),
487
+ 'attemptId': z.string().readonly(),
439
488
  'revision': z.number().readonly(),
440
489
  'index': z.number().readonly(),
441
490
  'time': z.number().readonly(),
442
- 'chunk': z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema3())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema3()))]).readonly(),
491
+ 'chunk': z.json().readonly(),
443
492
  }), z.object({
444
493
  'type': z.literal("end").readonly(),
445
- 'attemptId': z.intersection(z.string(), z.unknown()).readonly(),
494
+ 'attemptId': z.string().readonly(),
446
495
  'revision': z.number().readonly(),
447
- 'index': z.number().readonly(),
496
+ 'index': z.number().readonly().describe('Number of chunk frames represented by this terminal marker.'),
448
497
  'outcome': z.union([z.object({
449
498
  'kind': z.literal("committed").readonly(),
450
499
  'eventType': z.union([z.literal("assistant/message"), z.literal("assistant/attempt")]).readonly(),
@@ -456,12 +505,13 @@ const _deepseek_ai_dsh_api_session_controller_session_follow_result$schema = ()
456
505
  })]))
457
506
  let _deepseek_ai_dsh_api_session_controller_session_fork_parameter_0$schema$value
458
507
  const _deepseek_ai_dsh_api_session_controller_session_fork_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_session_fork_parameter_0$schema$value ??= z.object({
459
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
460
- 'atSeq': z.number().readonly().optional(),
508
+ 'sessionId': z.string().readonly(),
509
+ 'atSeq': z.number().readonly().optional().describe('Exact inclusive source event seq; omission selects the latest completed-turn prefix.'),
510
+ 'allowMigration': z.boolean().readonly().optional().describe('False asks the Host to check for required migration before forking. Defaults to true.'),
461
511
  }))
462
512
  let _deepseek_ai_dsh_api_session_controller_session_fork_result$schema$value
463
513
  const _deepseek_ai_dsh_api_session_controller_session_fork_result$schema = () => (_deepseek_ai_dsh_api_session_controller_session_fork_result$schema$value ??= z.object({
464
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
514
+ 'sessionId': z.string().readonly(),
465
515
  }))
466
516
  let _deepseek_ai_dsh_api_session_controller_session_initializeDefaultModel_result$schema$value
467
517
  const _deepseek_ai_dsh_api_session_controller_session_initializeDefaultModel_result$schema = () => (_deepseek_ai_dsh_api_session_controller_session_initializeDefaultModel_result$schema$value ??= z.void())
@@ -472,154 +522,184 @@ const _deepseek_ai_dsh_api_session_controller_session_list_parameter_0$schema =
472
522
  let _deepseek_ai_dsh_api_session_controller_session_list_result$schema$value
473
523
  const _deepseek_ai_dsh_api_session_controller_session_list_result$schema = () => (_deepseek_ai_dsh_api_session_controller_session_list_result$schema$value ??= z.object({
474
524
  'items': z.array(z.object({
475
- 'agentAvailable': z.boolean().readonly(),
476
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
525
+ 'agentAvailable': z.boolean().readonly().describe('Whether this Session currently owns a live Agent.'),
526
+ 'formatStatus': z.union([z.literal("current"), z.literal("migration-required")]).readonly().optional().describe('Current for attached Sessions; otherwise the persistence format status when reported.'),
527
+ 'sessionId': z.string().readonly(),
477
528
  'updatedAt': z.number().readonly(),
478
529
  'running': z.boolean().readonly(),
479
530
  'blank': z.boolean().readonly(),
480
- 'parentSessionId': z.intersection(z.string(), z.unknown()).readonly().optional(),
531
+ 'parentSessionId': z.string().readonly().optional(),
481
532
  'origin': z.literal("subagent").readonly().optional(),
482
533
  'cwd': z.string().readonly().optional(),
483
534
  'projections': z.object({
484
- 'kind': z.union([z.literal("cached"), z.literal("sequenced")]).readonly(),
485
- 'asOfSeq': z.number().readonly(),
535
+ 'kind': z.union([z.literal("cached"), z.literal("sequenced")]).readonly().describe('`sequenced`: the Host\'s live registry produced the block for an attached Session, so `asOfSeq` is comparable with baselines and frames of the same connection. `cached`: a header-only listing viewed the block from the persisted projection cache, so `asOfSeq` is the stored record\'s own watermark and must not be compared with the connected Session\'s values.'),
536
+ 'asOfSeq': z.number().readonly().describe('Watermark of the block in the sequence space named by `kind`.'),
486
537
  'values': z.intersection(z.object({
487
538
  'inbox': z.object({
488
- 'next-turn': z.array(z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema()))])).readonly(),
489
- 'next-step': z.array(z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema()))])).readonly(),
490
- }).optional(),
491
- 'agentPreset': z.union([z.literal(null), z.string()]).optional(),
492
- 'title': z.union([z.literal(null), z.string()]).optional(),
539
+ 'next-turn': z.array(z.json()).readonly(),
540
+ 'next-step': z.array(z.json()).readonly(),
541
+ }).optional().describe('Pending agent input reconstructed from durable inbox splices.'),
542
+ 'workingDirectory': z.union([z.literal(null), z.string()]).optional().describe('Recorded current directory for Session observations, or null when none is recorded.'),
543
+ 'agentPreset': z.union([z.literal(null), z.string()]).optional().describe('Preset the Session runs, or null when the deployment composes none.'),
544
+ 'title': z.union([z.literal(null), z.string()]).optional().describe('The session\'s current normalized title — the latest `session/title` event\'s text (last-wins), or `null` before the first title lands. A plain string: the shape the client list rows consume.'),
493
545
  'todos': z.union([z.literal(null), z.array(z.object({
494
- 'content': z.string(),
495
- 'status': z.union([z.literal("completed"), z.literal("pending"), z.literal("in_progress")]),
496
- }))]).optional(),
546
+ 'content': z.string().describe('What this task is — a short imperative line shown in the UI.'),
547
+ 'status': z.union([z.literal("completed"), z.literal("pending"), z.literal("in_progress")]).describe('Lifecycle state. `in_progress` marks a task being worked now; parallel work may mark several.'),
548
+ }))]).optional().describe('The agent\'s current whole todo list (the latest `todo/write` snapshot), or `null` before the first write. Whole-value rule: every `todo/write` carries the complete replacement list, so the fold is last-wins.'),
497
549
  'sessionListMetadata': z.object({
498
- 'blank': z.boolean().readonly(),
499
- 'lastPromptAt': z.union([z.literal(null), z.number()]).readonly(),
500
- }).optional(),
550
+ 'blank': z.boolean().readonly().describe('Whether the folded prefix contains no turn.'),
551
+ 'lastPromptAt': z.union([z.literal(null), z.number()]).readonly().describe('Latest human-authored prompt time in the folded prefix.'),
552
+ }).optional().describe('Persisted facts used to summarize a Session without activating it.'),
501
553
  'imageLimits': z.object({
502
554
  'maxImageBytes': z.number(),
503
555
  'maxImagesPerMessage': z.number(),
504
556
  'maxMessageImageBytes': z.number(),
505
557
  'maxImagePixels': z.number(),
506
- 'maxImageDimension': z.number(),
558
+ 'maxImageDimension': z.number().describe('Maximum intrinsic width and maximum intrinsic height in pixels for one image.'),
507
559
  'mediaTypes': z.array(z.union([z.literal("image/png"), z.literal("image/jpeg"), z.literal("image/webp"), z.literal("image/gif")])),
508
- }).optional(),
560
+ }).optional().describe('Image-intake limits enforced by the Session prompt endpoint.'),
509
561
  'modelSelection': z.object({
510
562
  'lastUsed': z.union([z.literal(null), z.object({
511
563
  'provider': z.string().readonly(),
512
564
  'model': z.string().readonly(),
513
565
  'reasoningEffort': z.string().readonly().optional(),
514
- })]).readonly(),
566
+ })]).readonly().describe('Selection consumed by the latest recorded model request.'),
515
567
  'next': z.union([z.literal(null), z.object({
516
568
  'provider': z.string().readonly(),
517
569
  'model': z.string().readonly(),
518
570
  'reasoningEffort': z.string().readonly().optional(),
519
- })]).readonly(),
520
- }).optional(),
571
+ })]).readonly().describe('Selection the next request should use, falling back to {@link lastUsed}.'),
572
+ }).optional().describe('Durable model selection already used and selected for the next request.'),
521
573
  'permissions': z.object({
522
- 'currentValue': z.string(),
523
- }).optional(),
524
- 'subagentCatalog': z.array(z.union([z.intersection(z.object({
525
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
574
+ 'currentValue': z.string().describe('The effective current value: a configured preset key, `auto`, or `custom`.'),
575
+ }).optional().describe('The session\'s current permission, folded from the three whole-value knob events (`permission/preset`, `sandbox/mode`, `approval/policy`) over the composition defaults. Selectable options come from the process-level catalog Remote. Key absence means no permission service is composed — clients hide the control.'),
576
+ 'subagentCatalog': z.array(z.union([z.object({
577
+ 'id': z.string().readonly(),
526
578
  'createdAt': z.number().readonly(),
527
- }), z.object({
528
579
  'mode': z.literal("one-shot").readonly(),
529
580
  'label': z.string().readonly().optional(),
530
- })), z.intersection(z.object({
531
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
581
+ }), z.object({
582
+ 'id': z.string().readonly(),
532
583
  'createdAt': z.number().readonly(),
584
+ 'mode': z.literal("external").readonly(),
585
+ 'label': z.string().readonly().optional(),
533
586
  }), z.object({
587
+ 'id': z.string().readonly(),
588
+ 'createdAt': z.number().readonly(),
534
589
  'mode': z.literal("continuable").readonly(),
535
590
  'label': z.string().readonly(),
536
- })), z.intersection(z.object({
537
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
538
- 'createdAt': z.number().readonly(),
539
591
  }), z.object({
592
+ 'id': z.string().readonly(),
593
+ 'createdAt': z.number().readonly(),
540
594
  'mode': z.literal("unknown").readonly(),
541
595
  'label': z.string().readonly().optional(),
542
- }))])).optional(),
596
+ })])).optional().describe('Direct children in parent catalog event order, excluding fork-inherited facts.'),
543
597
  'subagentTiming': z.object({
544
- 'settledMs': z.number(),
598
+ 'settledMs': z.number().describe('Milliseconds accumulated across completed turns after the child\'s own descriptor.'),
545
599
  'active': z.object({
546
- 'since': z.number(),
547
- 'through': z.number(),
548
- }).optional(),
549
- 'lastTurnCompleted': z.boolean().optional(),
550
- }).optional(),
600
+ 'since': z.number().describe('Start of the open turn.'),
601
+ 'through': z.number().describe('Latest event time folded into this projection cut.'),
602
+ }).optional().describe('Same-cut bounds of the currently open turn, when one has not reached `turn/end`.'),
603
+ 'lastTurnCompleted': z.boolean().optional().describe('Whether the latest closed turn after the child\'s own descriptor completed normally; absent while a turn is open or before one closes.'),
604
+ }).optional().describe('Active-turn duration and latest closed-turn completion for a descriptor-backed subagent session.'),
551
605
  'subagent': z.union([z.literal(null), z.object({
552
- 'mode': z.literal("one-shot"),
553
- 'label': z.string().optional(),
554
- 'seq': z.intersection(z.number(), z.unknown()),
606
+ 'mode': z.literal("one-shot").describe('A terminal one-shot child.'),
607
+ 'label': z.string().optional().describe('Optional durable creation label from the child\'s descriptor.'),
608
+ 'seq': z.number().describe('Seq of the `subagent/descriptor` event this identity was folded from. `session.isOwnSeq(seq)` proves the identity comes from the child\'s OWN log suffix — where a descriptor is immutable once appended — and not from a fork seed\'s replayed ancestor descriptor.'),
555
609
  }), z.object({
556
- 'mode': z.literal("continuable"),
557
- 'label': z.string(),
558
- 'seq': z.intersection(z.number(), z.unknown()),
559
- })]).optional(),
610
+ 'mode': z.literal("continuable").describe('A resumable conversation.'),
611
+ 'label': z.string().describe('Durable creation label from the child\'s descriptor.'),
612
+ 'seq': z.number().describe('Seq of the folded descriptor event; see the one-shot arm for the own-suffix proof.'),
613
+ })]).optional().describe('Identity of a descriptor-backed subagent session. `null` ⟺ no valid descriptor (missing, malformed, or unrecognized-version — deliberately undistinguished). The sentinel is deliberately serializable: a value pushed over JSON transports must survive `JSON.stringify` losslessly, where an `undefined` field would be dropped and a stale identity would survive on the receiving side. The entry itself stays non-optional.'),
560
614
  'tokenUsage': z.object({
561
615
  'uncachedInputTokens': z.number(),
562
616
  'outputTokens': z.number(),
563
617
  'cacheReadTokens': z.number(),
564
618
  'cacheWriteTokens': z.number(),
565
- }).optional(),
619
+ }).optional().describe('Provider-reported usage accumulated across the complete durable log.'),
566
620
  'contextPressure': z.object({
567
- 'pressureTokens': z.number().optional(),
568
- 'projectedTokens': z.number().optional(),
569
- 'contextWindow': z.number().optional(),
570
- }).optional(),
621
+ 'pressureTokens': z.number().optional().describe('Provider-reported prompt size of the most recent request: uncached input plus cache reads and writes. Response output is excluded, so this does not grow as the current turn streams. Absent until a provider reports usage.'),
622
+ 'projectedTokens': z.number().optional().describe('What the NEXT request\'s prompt would cost: {@link pressureTokens} plus the heuristic repricing of everything the surface gained or lost since that sample. Only the delta is estimated, so the figure stays anchored to the provider while still reacting the moment a compaction shadows a span — which `pressureTokens` alone cannot do, since compaction reports no usage of its own. Absent until a provider reports usage.'),
623
+ 'contextWindow': z.number().optional().describe('Newest recorded route capacity; absent when no adapter advertised one.'),
624
+ }).optional().describe('Newest request pressure paired with the newest known route capacity.'),
571
625
  'contextBreakdown': z.object({
572
- 'systemTokens': z.number(),
573
- 'toolsTokens': z.number(),
574
- 'messageTokens': z.number(),
575
- }).optional(),
626
+ 'systemTokens': z.number().describe('Heuristic tokens of the last nonempty surviving system prompt in surface order; 0 when none exists.'),
627
+ 'toolsTokens': z.number().describe('Heuristic tokens of the newest request envelope\'s tool schemas; 0 before any request.'),
628
+ 'messageTokens': z.number().describe('Heuristic tokens of every other visible surface node, including superseded system prompts.'),
629
+ }).optional().describe('Heuristic system/tools/message composition of the next request.'),
630
+ 'agentTeam': z.object({
631
+ 'members': z.array(z.object({
632
+ 'id': z.string().readonly(),
633
+ 'name': z.string().readonly(),
634
+ 'role': z.union([z.literal("lead"), z.literal("teammate")]).readonly(),
635
+ 'phase': z.union([z.literal("failed"), z.literal("provisioning"), z.literal("active")]).readonly().describe('Durable lifecycle; the Lead row is always `active`. Turn activity comes from Session status.'),
636
+ 'error': z.string().readonly().optional(),
637
+ })).readonly(),
638
+ 'tasks': z.array(z.object({
639
+ 'id': z.string().readonly(),
640
+ 'revision': z.number().readonly(),
641
+ 'subject': z.string().readonly(),
642
+ 'description': z.string().readonly(),
643
+ 'status': z.union([z.literal("completed"), z.literal("pending"), z.literal("in_progress"), z.literal("deleted")]).readonly(),
644
+ 'blockedBy': z.array(z.string()).readonly(),
645
+ 'writeScopes': z.array(z.string()).readonly(),
646
+ 'ownerName': z.string().readonly().optional(),
647
+ 'ready': z.boolean().readonly(),
648
+ 'writeScopeWarnings': z.array(z.string()).readonly(),
649
+ })).readonly(),
650
+ 'failure': z.string().readonly().optional(),
651
+ }).optional().describe('Durable roster and non-deleted task board of the Team rooted at the projected Session.'),
576
652
  'userQuestions': z.object({
577
653
  'active': z.array(z.object({
578
- 'callId': z.intersection(z.string(), z.unknown()).readonly(),
654
+ 'callId': z.string().readonly(),
579
655
  'questions': z.array(z.object({
580
- 'id': z.string(),
581
- 'question': z.string(),
582
- 'detail': z.string().optional(),
583
- 'header': z.string().optional(),
656
+ 'id': z.string().describe('Stable caller-provided question id, echoed in the answer.'),
657
+ 'question': z.string().describe('The question to display.'),
658
+ 'detail': z.string().optional().describe('Optional supporting detail rendered with the question but kept out of option labels.'),
659
+ 'header': z.string().optional().describe('Optional short heading/group label.'),
584
660
  'options': z.array(z.object({
585
- 'label': z.string(),
586
- 'description': z.string().optional(),
587
- })).optional(),
588
- 'multiSelect': z.boolean().optional(),
661
+ 'label': z.string().describe('User-facing label.'),
662
+ 'description': z.string().optional().describe('Optional extra context rendered by capable UIs.'),
663
+ })).optional().describe('Optional choices the UI can render as a menu.'),
664
+ 'multiSelect': z.boolean().optional().describe('Whether more than one option may be selected. Defaults to single-select.'),
589
665
  'intent': z.object({
590
- 'kind': z.literal("plan-review"),
591
- 'approve': z.string(),
592
- 'callId': z.intersection(z.string(), z.unknown()).optional(),
593
- }).optional(),
666
+ 'kind': z.literal("plan-review").describe('A plan submitted for review: `detail` is the plan markdown `ask()` requires, and the decision approves or declines it.'),
667
+ 'approve': z.string().describe('The option label that approves the plan; every other option declines it. Named rather than positional so no UI infers the verdict from option order. An `approve` naming no option of its own question is rejected at `ask()`.'),
668
+ 'callId': z.string().optional().describe('Logged tool invocation whose arguments contain the reviewed plan.'),
669
+ }).optional().describe('Optional presentation intent for capable UIs; absent asks for the generic option list.'),
594
670
  })).readonly(),
595
671
  'state': z.union([z.literal("open"), z.literal("continued")]).readonly(),
596
- })).readonly(),
672
+ })).readonly().describe('Calls that can still take an answer, in ask order.'),
597
673
  'settled': z.array(z.object({
598
- 'callId': z.intersection(z.string(), z.unknown()).readonly(),
674
+ 'callId': z.string().readonly().describe('The settled call.'),
599
675
  'answers': z.array(z.object({
600
- 'id': z.string(),
601
- 'selected': z.array(z.string()),
602
- 'custom': z.string().optional(),
603
- })).readonly(),
604
- })).readonly(),
605
- }).optional(),
676
+ 'id': z.string().describe('The answered question id.'),
677
+ 'selected': z.array(z.string()).describe('Selected option labels. May accompany custom text for a multi-select question.'),
678
+ 'custom': z.string().optional().describe('Optional free-text "Other" answer.'),
679
+ })).readonly().describe('The recorded batch, one entry per question; empty when the late reply carried none.'),
680
+ })).readonly().describe('Calls an answer settled, in settlement order.'),
681
+ }).optional().describe('Timed questions that remain answerable in this Session, and the ones a late reply settled.'),
606
682
  'goal': z.union([z.literal(null), z.object({
607
683
  'goal': z.object({
608
- 'objective': z.string().readonly(),
609
- 'phase': z.union([z.literal("active"), z.literal("paused"), z.literal("blocked"), z.literal("complete")]).readonly(),
684
+ 'objective': z.string().readonly().describe('Human-requested completion objective.'),
685
+ 'phase': z.union([z.literal("active"), z.literal("paused"), z.literal("blocked"), z.literal("complete")]).readonly().describe('Durable lifecycle phase.'),
610
686
  'blockedReason': z.object({
611
- 'code': z.string().readonly(),
612
- 'message': z.string().readonly(),
613
- }).readonly().optional(),
614
- 'maxGoalRounds': z.number().readonly(),
615
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
616
- 'revision': z.number().readonly(),
617
- }).readonly(),
618
- 'roundsStarted': z.number().readonly(),
619
- 'createdAt': z.number().readonly(),
620
- 'updatedAt': z.number().readonly(),
621
- })]).optional(),
622
- }), z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema()))])).readonly()).readonly(),
687
+ 'code': z.string().readonly().describe('Stable lower-kebab-case classification chosen by the blocking policy.'),
688
+ 'message': z.string().readonly().describe('Non-empty explanation shown to humans and models.'),
689
+ }).readonly().optional().describe('Present exactly while `phase` is `blocked`.'),
690
+ 'maxGoalRounds': z.number().readonly().describe('Total admitted goal-round cap.'),
691
+ 'id': z.string().readonly().describe('Stable goal identity.'),
692
+ 'revision': z.number().readonly().describe('Positive revision; every durable mutation increments it.'),
693
+ }).readonly().describe('Current durable goal snapshot (the CAS ref for mutations rides on it).'),
694
+ 'roundsStarted': z.number().readonly().describe('Highest admitted round number for this goal.'),
695
+ 'createdAt': z.number().readonly().describe('Epoch milliseconds of the create mutation.'),
696
+ 'updatedAt': z.number().readonly().describe('Epoch milliseconds of the latest mutation.'),
697
+ })]).optional().describe('The session\'s current goal and admitted-round count, or `null` before the first create and after a clear tombstone. `goal/change` supplies the whole lifecycle value; matching admitted `user/message` events advance `roundsStarted`.'),
698
+ 'plan': z.object({
699
+ 'active': z.boolean(),
700
+ 'pending': z.boolean(),
701
+ }).optional().describe('Plan collaboration state folded from the plan command lifecycle and `plan/mode` events.'),
702
+ }), z.record(z.string(), z.json()).readonly()).readonly().describe('Provider-validated values present in the block; omitted keys remain unknown.'),
623
703
  }).readonly().optional(),
624
704
  })).readonly(),
625
705
  }))
@@ -630,7 +710,7 @@ const _deepseek_ai_dsh_api_session_controller_session_modelCatalog_result$schema
630
710
  'model': z.string().readonly(),
631
711
  'reasoningEffort': z.string().readonly().optional(),
632
712
  }).readonly(),
633
- 'routableProviders': z.array(z.string()).readonly(),
713
+ 'routableProviders': z.array(z.string()).readonly().describe('Provider routes with at least one currently available catalog model.'),
634
714
  'groups': z.array(z.object({
635
715
  'id': z.string().readonly(),
636
716
  'name': z.string().readonly(),
@@ -656,9 +736,9 @@ const _deepseek_ai_dsh_api_session_controller_session_modelCatalog_result$schema
656
736
  }))
657
737
  let _deepseek_ai_dsh_api_session_controller_session_openWorkspacePath_parameter_0$schema$value
658
738
  const _deepseek_ai_dsh_api_session_controller_session_openWorkspacePath_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_session_openWorkspacePath_parameter_0$schema$value ??= z.object({
659
- 'action': z.literal("reveal").readonly().optional(),
660
- 'application': z.string().readonly().optional(),
661
- 'path': z.string().readonly(),
739
+ 'action': z.literal("reveal").readonly().optional().describe('File-manager navigation when requested; omission uses the default application.'),
740
+ 'application': z.string().readonly().optional().describe('Registered application identifier; ignored for reveal. Omission preserves the operating system default.'),
741
+ 'path': z.string().readonly().describe('Path after best-effort Session workspace resolution, in Host filesystem syntax.'),
662
742
  }))
663
743
  let _deepseek_ai_dsh_api_session_controller_session_openWorkspacePath_result$schema$value
664
744
  const _deepseek_ai_dsh_api_session_controller_session_openWorkspacePath_result$schema = () => (_deepseek_ai_dsh_api_session_controller_session_openWorkspacePath_result$schema$value ??= z.object({
@@ -668,20 +748,20 @@ let _deepseek_ai_dsh_api_session_controller_session_page_parameter_0$schema$valu
668
748
  const _deepseek_ai_dsh_api_session_controller_session_page_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_session_page_parameter_0$schema$value ??= z.object({
669
749
  'address': z.union([z.object({
670
750
  'kind': z.literal("session").readonly(),
671
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
751
+ 'sessionId': z.string().readonly(),
672
752
  }), z.object({
673
753
  'kind': z.literal("subagent").readonly(),
674
- 'parentSessionId': z.intersection(z.string(), z.unknown()).readonly(),
675
- 'childSessionId': z.intersection(z.string(), z.unknown()).readonly(),
754
+ 'parentSessionId': z.string().readonly(),
755
+ 'childSessionId': z.string().readonly(),
676
756
  'mode': z.union([z.literal("one-shot"), z.literal("continuable"), z.literal("unknown")]).readonly(),
677
757
  })]).readonly(),
678
- 'throughSeq': z.number().readonly(),
758
+ 'throughSeq': z.number().readonly().describe('Inclusive log cut obtained from the corresponding follow opening frame.'),
679
759
  'beforeSeq': z.number().readonly().optional(),
680
760
  'maxMessages': z.number().readonly().optional(),
681
761
  'turnWindow': z.object({
682
- 'minMessages': z.number().readonly(),
683
- 'minTurns': z.number().readonly(),
684
- }).readonly().optional(),
762
+ 'minMessages': z.number().readonly().describe('Minimum append-origin user/assistant messages; must not exceed maxMessages.'),
763
+ 'minTurns': z.number().readonly().describe('Minimum Turn starts crossed, including the partial Turn at beforeSeq.'),
764
+ }).readonly().optional().describe('Stop at a Turn start after both minima, unless maxMessages or history exhaustion wins.'),
685
765
  }))
686
766
  let _deepseek_ai_dsh_api_session_controller_session_page_result$schema$value
687
767
  const _deepseek_ai_dsh_api_session_controller_session_page_result$schema = () => (_deepseek_ai_dsh_api_session_controller_session_page_result$schema$value ??= z.object({
@@ -691,163 +771,361 @@ const _deepseek_ai_dsh_api_session_controller_session_page_result$schema = () =>
691
771
  'type': z.string().readonly(),
692
772
  'seq': z.number().readonly(),
693
773
  'time': z.number().readonly(),
694
- 'data': z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema2())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema2()))]).readonly(),
774
+ 'data': z.json().readonly(),
695
775
  'ignorable': z.literal(true).readonly().optional(),
696
- 'sourceEventSeqs': z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema2())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema2()))]).readonly().optional(),
697
- 'surfaceOp': z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema2())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema2()))]).readonly().optional(),
776
+ 'sourceEventSeqs': z.json().readonly().optional().describe('Earlier sources on current surface events; opaque JSON on unknown ignorable events.'),
777
+ 'surfaceOp': z.json().readonly().optional().describe('Canonical placement on current surface events; opaque JSON on unknown ignorable events.'),
698
778
  }).readonly(),
699
779
  })).readonly(),
700
780
  'hasMore': z.boolean().readonly(),
701
781
  }))
702
782
  let _deepseek_ai_dsh_api_session_controller_session_projections_parameter_0$schema$value
703
783
  const _deepseek_ai_dsh_api_session_controller_session_projections_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_session_projections_parameter_0$schema$value ??= z.object({
704
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
784
+ 'sessionId': z.string().readonly(),
705
785
  }))
706
786
  let _deepseek_ai_dsh_api_session_controller_session_projections_result$schema$value
707
787
  const _deepseek_ai_dsh_api_session_controller_session_projections_result$schema = () => (_deepseek_ai_dsh_api_session_controller_session_projections_result$schema$value ??= z.union([z.literal(null), z.object({
708
788
  'asOfSeq': z.number().readonly(),
709
789
  'values': z.intersection(z.object({
710
790
  'inbox': z.object({
711
- 'next-turn': z.array(z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema4())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema4()))])).readonly(),
712
- 'next-step': z.array(z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema4())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema4()))])).readonly(),
713
- }).optional(),
714
- 'agentPreset': z.union([z.literal(null), z.string()]).optional(),
715
- 'title': z.union([z.literal(null), z.string()]).optional(),
791
+ 'next-turn': z.array(z.json()).readonly(),
792
+ 'next-step': z.array(z.json()).readonly(),
793
+ }).optional().describe('Pending agent input reconstructed from durable inbox splices.'),
794
+ 'workingDirectory': z.union([z.literal(null), z.string()]).optional().describe('Recorded current directory for Session observations, or null when none is recorded.'),
795
+ 'agentPreset': z.union([z.literal(null), z.string()]).optional().describe('Preset the Session runs, or null when the deployment composes none.'),
796
+ 'title': z.union([z.literal(null), z.string()]).optional().describe('The session\'s current normalized title — the latest `session/title` event\'s text (last-wins), or `null` before the first title lands. A plain string: the shape the client list rows consume.'),
716
797
  'todos': z.union([z.literal(null), z.array(z.object({
717
- 'content': z.string(),
718
- 'status': z.union([z.literal("completed"), z.literal("pending"), z.literal("in_progress")]),
719
- }))]).optional(),
798
+ 'content': z.string().describe('What this task is — a short imperative line shown in the UI.'),
799
+ 'status': z.union([z.literal("completed"), z.literal("pending"), z.literal("in_progress")]).describe('Lifecycle state. `in_progress` marks a task being worked now; parallel work may mark several.'),
800
+ }))]).optional().describe('The agent\'s current whole todo list (the latest `todo/write` snapshot), or `null` before the first write. Whole-value rule: every `todo/write` carries the complete replacement list, so the fold is last-wins.'),
720
801
  'sessionListMetadata': z.object({
721
- 'blank': z.boolean().readonly(),
722
- 'lastPromptAt': z.union([z.literal(null), z.number()]).readonly(),
723
- }).optional(),
802
+ 'blank': z.boolean().readonly().describe('Whether the folded prefix contains no turn.'),
803
+ 'lastPromptAt': z.union([z.literal(null), z.number()]).readonly().describe('Latest human-authored prompt time in the folded prefix.'),
804
+ }).optional().describe('Persisted facts used to summarize a Session without activating it.'),
724
805
  'imageLimits': z.object({
725
806
  'maxImageBytes': z.number(),
726
807
  'maxImagesPerMessage': z.number(),
727
808
  'maxMessageImageBytes': z.number(),
728
809
  'maxImagePixels': z.number(),
729
- 'maxImageDimension': z.number(),
810
+ 'maxImageDimension': z.number().describe('Maximum intrinsic width and maximum intrinsic height in pixels for one image.'),
730
811
  'mediaTypes': z.array(z.union([z.literal("image/png"), z.literal("image/jpeg"), z.literal("image/webp"), z.literal("image/gif")])),
731
- }).optional(),
812
+ }).optional().describe('Image-intake limits enforced by the Session prompt endpoint.'),
732
813
  'modelSelection': z.object({
733
814
  'lastUsed': z.union([z.literal(null), z.object({
734
815
  'provider': z.string().readonly(),
735
816
  'model': z.string().readonly(),
736
817
  'reasoningEffort': z.string().readonly().optional(),
737
- })]).readonly(),
818
+ })]).readonly().describe('Selection consumed by the latest recorded model request.'),
738
819
  'next': z.union([z.literal(null), z.object({
739
820
  'provider': z.string().readonly(),
740
821
  'model': z.string().readonly(),
741
822
  'reasoningEffort': z.string().readonly().optional(),
742
- })]).readonly(),
743
- }).optional(),
823
+ })]).readonly().describe('Selection the next request should use, falling back to {@link lastUsed}.'),
824
+ }).optional().describe('Durable model selection already used and selected for the next request.'),
744
825
  'permissions': z.object({
745
- 'currentValue': z.string(),
746
- }).optional(),
747
- 'subagentCatalog': z.array(z.union([z.intersection(z.object({
748
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
826
+ 'currentValue': z.string().describe('The effective current value: a configured preset key, `auto`, or `custom`.'),
827
+ }).optional().describe('The session\'s current permission, folded from the three whole-value knob events (`permission/preset`, `sandbox/mode`, `approval/policy`) over the composition defaults. Selectable options come from the process-level catalog Remote. Key absence means no permission service is composed — clients hide the control.'),
828
+ 'subagentCatalog': z.array(z.union([z.object({
829
+ 'id': z.string().readonly(),
749
830
  'createdAt': z.number().readonly(),
750
- }), z.object({
751
831
  'mode': z.literal("one-shot").readonly(),
752
832
  'label': z.string().readonly().optional(),
753
- })), z.intersection(z.object({
754
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
833
+ }), z.object({
834
+ 'id': z.string().readonly(),
755
835
  'createdAt': z.number().readonly(),
836
+ 'mode': z.literal("external").readonly(),
837
+ 'label': z.string().readonly().optional(),
756
838
  }), z.object({
839
+ 'id': z.string().readonly(),
840
+ 'createdAt': z.number().readonly(),
757
841
  'mode': z.literal("continuable").readonly(),
758
842
  'label': z.string().readonly(),
759
- })), z.intersection(z.object({
760
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
761
- 'createdAt': z.number().readonly(),
762
843
  }), z.object({
844
+ 'id': z.string().readonly(),
845
+ 'createdAt': z.number().readonly(),
763
846
  'mode': z.literal("unknown").readonly(),
764
847
  'label': z.string().readonly().optional(),
765
- }))])).optional(),
848
+ })])).optional().describe('Direct children in parent catalog event order, excluding fork-inherited facts.'),
766
849
  'subagentTiming': z.object({
767
- 'settledMs': z.number(),
850
+ 'settledMs': z.number().describe('Milliseconds accumulated across completed turns after the child\'s own descriptor.'),
768
851
  'active': z.object({
769
- 'since': z.number(),
770
- 'through': z.number(),
771
- }).optional(),
772
- 'lastTurnCompleted': z.boolean().optional(),
773
- }).optional(),
852
+ 'since': z.number().describe('Start of the open turn.'),
853
+ 'through': z.number().describe('Latest event time folded into this projection cut.'),
854
+ }).optional().describe('Same-cut bounds of the currently open turn, when one has not reached `turn/end`.'),
855
+ 'lastTurnCompleted': z.boolean().optional().describe('Whether the latest closed turn after the child\'s own descriptor completed normally; absent while a turn is open or before one closes.'),
856
+ }).optional().describe('Active-turn duration and latest closed-turn completion for a descriptor-backed subagent session.'),
774
857
  'subagent': z.union([z.literal(null), z.object({
775
- 'mode': z.literal("one-shot"),
776
- 'label': z.string().optional(),
777
- 'seq': z.intersection(z.number(), z.unknown()),
858
+ 'mode': z.literal("one-shot").describe('A terminal one-shot child.'),
859
+ 'label': z.string().optional().describe('Optional durable creation label from the child\'s descriptor.'),
860
+ 'seq': z.number().describe('Seq of the `subagent/descriptor` event this identity was folded from. `session.isOwnSeq(seq)` proves the identity comes from the child\'s OWN log suffix — where a descriptor is immutable once appended — and not from a fork seed\'s replayed ancestor descriptor.'),
778
861
  }), z.object({
779
- 'mode': z.literal("continuable"),
780
- 'label': z.string(),
781
- 'seq': z.intersection(z.number(), z.unknown()),
782
- })]).optional(),
862
+ 'mode': z.literal("continuable").describe('A resumable conversation.'),
863
+ 'label': z.string().describe('Durable creation label from the child\'s descriptor.'),
864
+ 'seq': z.number().describe('Seq of the folded descriptor event; see the one-shot arm for the own-suffix proof.'),
865
+ })]).optional().describe('Identity of a descriptor-backed subagent session. `null` ⟺ no valid descriptor (missing, malformed, or unrecognized-version — deliberately undistinguished). The sentinel is deliberately serializable: a value pushed over JSON transports must survive `JSON.stringify` losslessly, where an `undefined` field would be dropped and a stale identity would survive on the receiving side. The entry itself stays non-optional.'),
783
866
  'tokenUsage': z.object({
784
867
  'uncachedInputTokens': z.number(),
785
868
  'outputTokens': z.number(),
786
869
  'cacheReadTokens': z.number(),
787
870
  'cacheWriteTokens': z.number(),
788
- }).optional(),
871
+ }).optional().describe('Provider-reported usage accumulated across the complete durable log.'),
789
872
  'contextPressure': z.object({
790
- 'pressureTokens': z.number().optional(),
791
- 'projectedTokens': z.number().optional(),
792
- 'contextWindow': z.number().optional(),
793
- }).optional(),
873
+ 'pressureTokens': z.number().optional().describe('Provider-reported prompt size of the most recent request: uncached input plus cache reads and writes. Response output is excluded, so this does not grow as the current turn streams. Absent until a provider reports usage.'),
874
+ 'projectedTokens': z.number().optional().describe('What the NEXT request\'s prompt would cost: {@link pressureTokens} plus the heuristic repricing of everything the surface gained or lost since that sample. Only the delta is estimated, so the figure stays anchored to the provider while still reacting the moment a compaction shadows a span — which `pressureTokens` alone cannot do, since compaction reports no usage of its own. Absent until a provider reports usage.'),
875
+ 'contextWindow': z.number().optional().describe('Newest recorded route capacity; absent when no adapter advertised one.'),
876
+ }).optional().describe('Newest request pressure paired with the newest known route capacity.'),
794
877
  'contextBreakdown': z.object({
795
- 'systemTokens': z.number(),
796
- 'toolsTokens': z.number(),
797
- 'messageTokens': z.number(),
798
- }).optional(),
878
+ 'systemTokens': z.number().describe('Heuristic tokens of the last nonempty surviving system prompt in surface order; 0 when none exists.'),
879
+ 'toolsTokens': z.number().describe('Heuristic tokens of the newest request envelope\'s tool schemas; 0 before any request.'),
880
+ 'messageTokens': z.number().describe('Heuristic tokens of every other visible surface node, including superseded system prompts.'),
881
+ }).optional().describe('Heuristic system/tools/message composition of the next request.'),
882
+ 'agentTeam': z.object({
883
+ 'members': z.array(z.object({
884
+ 'id': z.string().readonly(),
885
+ 'name': z.string().readonly(),
886
+ 'role': z.union([z.literal("lead"), z.literal("teammate")]).readonly(),
887
+ 'phase': z.union([z.literal("failed"), z.literal("provisioning"), z.literal("active")]).readonly().describe('Durable lifecycle; the Lead row is always `active`. Turn activity comes from Session status.'),
888
+ 'error': z.string().readonly().optional(),
889
+ })).readonly(),
890
+ 'tasks': z.array(z.object({
891
+ 'id': z.string().readonly(),
892
+ 'revision': z.number().readonly(),
893
+ 'subject': z.string().readonly(),
894
+ 'description': z.string().readonly(),
895
+ 'status': z.union([z.literal("completed"), z.literal("pending"), z.literal("in_progress"), z.literal("deleted")]).readonly(),
896
+ 'blockedBy': z.array(z.string()).readonly(),
897
+ 'writeScopes': z.array(z.string()).readonly(),
898
+ 'ownerName': z.string().readonly().optional(),
899
+ 'ready': z.boolean().readonly(),
900
+ 'writeScopeWarnings': z.array(z.string()).readonly(),
901
+ })).readonly(),
902
+ 'failure': z.string().readonly().optional(),
903
+ }).optional().describe('Durable roster and non-deleted task board of the Team rooted at the projected Session.'),
799
904
  'userQuestions': z.object({
800
905
  'active': z.array(z.object({
801
- 'callId': z.intersection(z.string(), z.unknown()).readonly(),
906
+ 'callId': z.string().readonly(),
802
907
  'questions': z.array(z.object({
803
- 'id': z.string(),
804
- 'question': z.string(),
805
- 'detail': z.string().optional(),
806
- 'header': z.string().optional(),
908
+ 'id': z.string().describe('Stable caller-provided question id, echoed in the answer.'),
909
+ 'question': z.string().describe('The question to display.'),
910
+ 'detail': z.string().optional().describe('Optional supporting detail rendered with the question but kept out of option labels.'),
911
+ 'header': z.string().optional().describe('Optional short heading/group label.'),
807
912
  'options': z.array(z.object({
808
- 'label': z.string(),
809
- 'description': z.string().optional(),
810
- })).optional(),
811
- 'multiSelect': z.boolean().optional(),
913
+ 'label': z.string().describe('User-facing label.'),
914
+ 'description': z.string().optional().describe('Optional extra context rendered by capable UIs.'),
915
+ })).optional().describe('Optional choices the UI can render as a menu.'),
916
+ 'multiSelect': z.boolean().optional().describe('Whether more than one option may be selected. Defaults to single-select.'),
812
917
  'intent': z.object({
813
- 'kind': z.literal("plan-review"),
814
- 'approve': z.string(),
815
- 'callId': z.intersection(z.string(), z.unknown()).optional(),
816
- }).optional(),
918
+ 'kind': z.literal("plan-review").describe('A plan submitted for review: `detail` is the plan markdown `ask()` requires, and the decision approves or declines it.'),
919
+ 'approve': z.string().describe('The option label that approves the plan; every other option declines it. Named rather than positional so no UI infers the verdict from option order. An `approve` naming no option of its own question is rejected at `ask()`.'),
920
+ 'callId': z.string().optional().describe('Logged tool invocation whose arguments contain the reviewed plan.'),
921
+ }).optional().describe('Optional presentation intent for capable UIs; absent asks for the generic option list.'),
817
922
  })).readonly(),
818
923
  'state': z.union([z.literal("open"), z.literal("continued")]).readonly(),
819
- })).readonly(),
924
+ })).readonly().describe('Calls that can still take an answer, in ask order.'),
820
925
  'settled': z.array(z.object({
821
- 'callId': z.intersection(z.string(), z.unknown()).readonly(),
926
+ 'callId': z.string().readonly().describe('The settled call.'),
822
927
  'answers': z.array(z.object({
823
- 'id': z.string(),
824
- 'selected': z.array(z.string()),
825
- 'custom': z.string().optional(),
928
+ 'id': z.string().describe('The answered question id.'),
929
+ 'selected': z.array(z.string()).describe('Selected option labels. May accompany custom text for a multi-select question.'),
930
+ 'custom': z.string().optional().describe('Optional free-text "Other" answer.'),
931
+ })).readonly().describe('The recorded batch, one entry per question; empty when the late reply carried none.'),
932
+ })).readonly().describe('Calls an answer settled, in settlement order.'),
933
+ }).optional().describe('Timed questions that remain answerable in this Session, and the ones a late reply settled.'),
934
+ 'goal': z.union([z.literal(null), z.object({
935
+ 'goal': z.object({
936
+ 'objective': z.string().readonly().describe('Human-requested completion objective.'),
937
+ 'phase': z.union([z.literal("active"), z.literal("paused"), z.literal("blocked"), z.literal("complete")]).readonly().describe('Durable lifecycle phase.'),
938
+ 'blockedReason': z.object({
939
+ 'code': z.string().readonly().describe('Stable lower-kebab-case classification chosen by the blocking policy.'),
940
+ 'message': z.string().readonly().describe('Non-empty explanation shown to humans and models.'),
941
+ }).readonly().optional().describe('Present exactly while `phase` is `blocked`.'),
942
+ 'maxGoalRounds': z.number().readonly().describe('Total admitted goal-round cap.'),
943
+ 'id': z.string().readonly().describe('Stable goal identity.'),
944
+ 'revision': z.number().readonly().describe('Positive revision; every durable mutation increments it.'),
945
+ }).readonly().describe('Current durable goal snapshot (the CAS ref for mutations rides on it).'),
946
+ 'roundsStarted': z.number().readonly().describe('Highest admitted round number for this goal.'),
947
+ 'createdAt': z.number().readonly().describe('Epoch milliseconds of the create mutation.'),
948
+ 'updatedAt': z.number().readonly().describe('Epoch milliseconds of the latest mutation.'),
949
+ })]).optional().describe('The session\'s current goal and admitted-round count, or `null` before the first create and after a clear tombstone. `goal/change` supplies the whole lifecycle value; matching admitted `user/message` events advance `roundsStarted`.'),
950
+ 'plan': z.object({
951
+ 'active': z.boolean(),
952
+ 'pending': z.boolean(),
953
+ }).optional().describe('Plan collaboration state folded from the plan command lifecycle and `plan/mode` events.'),
954
+ }), z.record(z.string(), z.json()).readonly()).readonly().describe('Provider-validated values; omitted keys are absent capabilities at this cut.'),
955
+ 'kind': z.literal("sequenced").readonly(),
956
+ }), z.object({
957
+ 'kind': z.literal("migration-required").readonly(),
958
+ 'values': z.intersection(z.object({
959
+ 'inbox': z.object({
960
+ 'next-turn': z.array(z.json()).readonly(),
961
+ 'next-step': z.array(z.json()).readonly(),
962
+ }).optional().describe('Pending agent input reconstructed from durable inbox splices.'),
963
+ 'workingDirectory': z.union([z.literal(null), z.string()]).optional().describe('Recorded current directory for Session observations, or null when none is recorded.'),
964
+ 'agentPreset': z.union([z.literal(null), z.string()]).optional().describe('Preset the Session runs, or null when the deployment composes none.'),
965
+ 'title': z.union([z.literal(null), z.string()]).optional().describe('The session\'s current normalized title — the latest `session/title` event\'s text (last-wins), or `null` before the first title lands. A plain string: the shape the client list rows consume.'),
966
+ 'todos': z.union([z.literal(null), z.array(z.object({
967
+ 'content': z.string().describe('What this task is — a short imperative line shown in the UI.'),
968
+ 'status': z.union([z.literal("completed"), z.literal("pending"), z.literal("in_progress")]).describe('Lifecycle state. `in_progress` marks a task being worked now; parallel work may mark several.'),
969
+ }))]).optional().describe('The agent\'s current whole todo list (the latest `todo/write` snapshot), or `null` before the first write. Whole-value rule: every `todo/write` carries the complete replacement list, so the fold is last-wins.'),
970
+ 'sessionListMetadata': z.object({
971
+ 'blank': z.boolean().readonly().describe('Whether the folded prefix contains no turn.'),
972
+ 'lastPromptAt': z.union([z.literal(null), z.number()]).readonly().describe('Latest human-authored prompt time in the folded prefix.'),
973
+ }).optional().describe('Persisted facts used to summarize a Session without activating it.'),
974
+ 'imageLimits': z.object({
975
+ 'maxImageBytes': z.number(),
976
+ 'maxImagesPerMessage': z.number(),
977
+ 'maxMessageImageBytes': z.number(),
978
+ 'maxImagePixels': z.number(),
979
+ 'maxImageDimension': z.number().describe('Maximum intrinsic width and maximum intrinsic height in pixels for one image.'),
980
+ 'mediaTypes': z.array(z.union([z.literal("image/png"), z.literal("image/jpeg"), z.literal("image/webp"), z.literal("image/gif")])),
981
+ }).optional().describe('Image-intake limits enforced by the Session prompt endpoint.'),
982
+ 'modelSelection': z.object({
983
+ 'lastUsed': z.union([z.literal(null), z.object({
984
+ 'provider': z.string().readonly(),
985
+ 'model': z.string().readonly(),
986
+ 'reasoningEffort': z.string().readonly().optional(),
987
+ })]).readonly().describe('Selection consumed by the latest recorded model request.'),
988
+ 'next': z.union([z.literal(null), z.object({
989
+ 'provider': z.string().readonly(),
990
+ 'model': z.string().readonly(),
991
+ 'reasoningEffort': z.string().readonly().optional(),
992
+ })]).readonly().describe('Selection the next request should use, falling back to {@link lastUsed}.'),
993
+ }).optional().describe('Durable model selection already used and selected for the next request.'),
994
+ 'permissions': z.object({
995
+ 'currentValue': z.string().describe('The effective current value: a configured preset key, `auto`, or `custom`.'),
996
+ }).optional().describe('The session\'s current permission, folded from the three whole-value knob events (`permission/preset`, `sandbox/mode`, `approval/policy`) over the composition defaults. Selectable options come from the process-level catalog Remote. Key absence means no permission service is composed — clients hide the control.'),
997
+ 'subagentCatalog': z.array(z.union([z.object({
998
+ 'id': z.string().readonly(),
999
+ 'createdAt': z.number().readonly(),
1000
+ 'mode': z.literal("one-shot").readonly(),
1001
+ 'label': z.string().readonly().optional(),
1002
+ }), z.object({
1003
+ 'id': z.string().readonly(),
1004
+ 'createdAt': z.number().readonly(),
1005
+ 'mode': z.literal("external").readonly(),
1006
+ 'label': z.string().readonly().optional(),
1007
+ }), z.object({
1008
+ 'id': z.string().readonly(),
1009
+ 'createdAt': z.number().readonly(),
1010
+ 'mode': z.literal("continuable").readonly(),
1011
+ 'label': z.string().readonly(),
1012
+ }), z.object({
1013
+ 'id': z.string().readonly(),
1014
+ 'createdAt': z.number().readonly(),
1015
+ 'mode': z.literal("unknown").readonly(),
1016
+ 'label': z.string().readonly().optional(),
1017
+ })])).optional().describe('Direct children in parent catalog event order, excluding fork-inherited facts.'),
1018
+ 'subagentTiming': z.object({
1019
+ 'settledMs': z.number().describe('Milliseconds accumulated across completed turns after the child\'s own descriptor.'),
1020
+ 'active': z.object({
1021
+ 'since': z.number().describe('Start of the open turn.'),
1022
+ 'through': z.number().describe('Latest event time folded into this projection cut.'),
1023
+ }).optional().describe('Same-cut bounds of the currently open turn, when one has not reached `turn/end`.'),
1024
+ 'lastTurnCompleted': z.boolean().optional().describe('Whether the latest closed turn after the child\'s own descriptor completed normally; absent while a turn is open or before one closes.'),
1025
+ }).optional().describe('Active-turn duration and latest closed-turn completion for a descriptor-backed subagent session.'),
1026
+ 'subagent': z.union([z.literal(null), z.object({
1027
+ 'mode': z.literal("one-shot").describe('A terminal one-shot child.'),
1028
+ 'label': z.string().optional().describe('Optional durable creation label from the child\'s descriptor.'),
1029
+ 'seq': z.number().describe('Seq of the `subagent/descriptor` event this identity was folded from. `session.isOwnSeq(seq)` proves the identity comes from the child\'s OWN log suffix — where a descriptor is immutable once appended — and not from a fork seed\'s replayed ancestor descriptor.'),
1030
+ }), z.object({
1031
+ 'mode': z.literal("continuable").describe('A resumable conversation.'),
1032
+ 'label': z.string().describe('Durable creation label from the child\'s descriptor.'),
1033
+ 'seq': z.number().describe('Seq of the folded descriptor event; see the one-shot arm for the own-suffix proof.'),
1034
+ })]).optional().describe('Identity of a descriptor-backed subagent session. `null` ⟺ no valid descriptor (missing, malformed, or unrecognized-version — deliberately undistinguished). The sentinel is deliberately serializable: a value pushed over JSON transports must survive `JSON.stringify` losslessly, where an `undefined` field would be dropped and a stale identity would survive on the receiving side. The entry itself stays non-optional.'),
1035
+ 'tokenUsage': z.object({
1036
+ 'uncachedInputTokens': z.number(),
1037
+ 'outputTokens': z.number(),
1038
+ 'cacheReadTokens': z.number(),
1039
+ 'cacheWriteTokens': z.number(),
1040
+ }).optional().describe('Provider-reported usage accumulated across the complete durable log.'),
1041
+ 'contextPressure': z.object({
1042
+ 'pressureTokens': z.number().optional().describe('Provider-reported prompt size of the most recent request: uncached input plus cache reads and writes. Response output is excluded, so this does not grow as the current turn streams. Absent until a provider reports usage.'),
1043
+ 'projectedTokens': z.number().optional().describe('What the NEXT request\'s prompt would cost: {@link pressureTokens} plus the heuristic repricing of everything the surface gained or lost since that sample. Only the delta is estimated, so the figure stays anchored to the provider while still reacting the moment a compaction shadows a span — which `pressureTokens` alone cannot do, since compaction reports no usage of its own. Absent until a provider reports usage.'),
1044
+ 'contextWindow': z.number().optional().describe('Newest recorded route capacity; absent when no adapter advertised one.'),
1045
+ }).optional().describe('Newest request pressure paired with the newest known route capacity.'),
1046
+ 'contextBreakdown': z.object({
1047
+ 'systemTokens': z.number().describe('Heuristic tokens of the last nonempty surviving system prompt in surface order; 0 when none exists.'),
1048
+ 'toolsTokens': z.number().describe('Heuristic tokens of the newest request envelope\'s tool schemas; 0 before any request.'),
1049
+ 'messageTokens': z.number().describe('Heuristic tokens of every other visible surface node, including superseded system prompts.'),
1050
+ }).optional().describe('Heuristic system/tools/message composition of the next request.'),
1051
+ 'agentTeam': z.object({
1052
+ 'members': z.array(z.object({
1053
+ 'id': z.string().readonly(),
1054
+ 'name': z.string().readonly(),
1055
+ 'role': z.union([z.literal("lead"), z.literal("teammate")]).readonly(),
1056
+ 'phase': z.union([z.literal("failed"), z.literal("provisioning"), z.literal("active")]).readonly().describe('Durable lifecycle; the Lead row is always `active`. Turn activity comes from Session status.'),
1057
+ 'error': z.string().readonly().optional(),
826
1058
  })).readonly(),
1059
+ 'tasks': z.array(z.object({
1060
+ 'id': z.string().readonly(),
1061
+ 'revision': z.number().readonly(),
1062
+ 'subject': z.string().readonly(),
1063
+ 'description': z.string().readonly(),
1064
+ 'status': z.union([z.literal("completed"), z.literal("pending"), z.literal("in_progress"), z.literal("deleted")]).readonly(),
1065
+ 'blockedBy': z.array(z.string()).readonly(),
1066
+ 'writeScopes': z.array(z.string()).readonly(),
1067
+ 'ownerName': z.string().readonly().optional(),
1068
+ 'ready': z.boolean().readonly(),
1069
+ 'writeScopeWarnings': z.array(z.string()).readonly(),
827
1070
  })).readonly(),
828
- }).optional(),
1071
+ 'failure': z.string().readonly().optional(),
1072
+ }).optional().describe('Durable roster and non-deleted task board of the Team rooted at the projected Session.'),
1073
+ 'userQuestions': z.object({
1074
+ 'active': z.array(z.object({
1075
+ 'callId': z.string().readonly(),
1076
+ 'questions': z.array(z.object({
1077
+ 'id': z.string().describe('Stable caller-provided question id, echoed in the answer.'),
1078
+ 'question': z.string().describe('The question to display.'),
1079
+ 'detail': z.string().optional().describe('Optional supporting detail rendered with the question but kept out of option labels.'),
1080
+ 'header': z.string().optional().describe('Optional short heading/group label.'),
1081
+ 'options': z.array(z.object({
1082
+ 'label': z.string().describe('User-facing label.'),
1083
+ 'description': z.string().optional().describe('Optional extra context rendered by capable UIs.'),
1084
+ })).optional().describe('Optional choices the UI can render as a menu.'),
1085
+ 'multiSelect': z.boolean().optional().describe('Whether more than one option may be selected. Defaults to single-select.'),
1086
+ 'intent': z.object({
1087
+ 'kind': z.literal("plan-review").describe('A plan submitted for review: `detail` is the plan markdown `ask()` requires, and the decision approves or declines it.'),
1088
+ 'approve': z.string().describe('The option label that approves the plan; every other option declines it. Named rather than positional so no UI infers the verdict from option order. An `approve` naming no option of its own question is rejected at `ask()`.'),
1089
+ 'callId': z.string().optional().describe('Logged tool invocation whose arguments contain the reviewed plan.'),
1090
+ }).optional().describe('Optional presentation intent for capable UIs; absent asks for the generic option list.'),
1091
+ })).readonly(),
1092
+ 'state': z.union([z.literal("open"), z.literal("continued")]).readonly(),
1093
+ })).readonly().describe('Calls that can still take an answer, in ask order.'),
1094
+ 'settled': z.array(z.object({
1095
+ 'callId': z.string().readonly().describe('The settled call.'),
1096
+ 'answers': z.array(z.object({
1097
+ 'id': z.string().describe('The answered question id.'),
1098
+ 'selected': z.array(z.string()).describe('Selected option labels. May accompany custom text for a multi-select question.'),
1099
+ 'custom': z.string().optional().describe('Optional free-text "Other" answer.'),
1100
+ })).readonly().describe('The recorded batch, one entry per question; empty when the late reply carried none.'),
1101
+ })).readonly().describe('Calls an answer settled, in settlement order.'),
1102
+ }).optional().describe('Timed questions that remain answerable in this Session, and the ones a late reply settled.'),
829
1103
  'goal': z.union([z.literal(null), z.object({
830
1104
  'goal': z.object({
831
- 'objective': z.string().readonly(),
832
- 'phase': z.union([z.literal("active"), z.literal("paused"), z.literal("blocked"), z.literal("complete")]).readonly(),
1105
+ 'objective': z.string().readonly().describe('Human-requested completion objective.'),
1106
+ 'phase': z.union([z.literal("active"), z.literal("paused"), z.literal("blocked"), z.literal("complete")]).readonly().describe('Durable lifecycle phase.'),
833
1107
  'blockedReason': z.object({
834
- 'code': z.string().readonly(),
835
- 'message': z.string().readonly(),
836
- }).readonly().optional(),
837
- 'maxGoalRounds': z.number().readonly(),
838
- 'id': z.intersection(z.string(), z.unknown()).readonly(),
839
- 'revision': z.number().readonly(),
840
- }).readonly(),
841
- 'roundsStarted': z.number().readonly(),
842
- 'createdAt': z.number().readonly(),
843
- 'updatedAt': z.number().readonly(),
844
- })]).optional(),
845
- }), z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema4())), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema4()))])).readonly()).readonly(),
1108
+ 'code': z.string().readonly().describe('Stable lower-kebab-case classification chosen by the blocking policy.'),
1109
+ 'message': z.string().readonly().describe('Non-empty explanation shown to humans and models.'),
1110
+ }).readonly().optional().describe('Present exactly while `phase` is `blocked`.'),
1111
+ 'maxGoalRounds': z.number().readonly().describe('Total admitted goal-round cap.'),
1112
+ 'id': z.string().readonly().describe('Stable goal identity.'),
1113
+ 'revision': z.number().readonly().describe('Positive revision; every durable mutation increments it.'),
1114
+ }).readonly().describe('Current durable goal snapshot (the CAS ref for mutations rides on it).'),
1115
+ 'roundsStarted': z.number().readonly().describe('Highest admitted round number for this goal.'),
1116
+ 'createdAt': z.number().readonly().describe('Epoch milliseconds of the create mutation.'),
1117
+ 'updatedAt': z.number().readonly().describe('Epoch milliseconds of the latest mutation.'),
1118
+ })]).optional().describe('The session\'s current goal and admitted-round count, or `null` before the first create and after a clear tombstone. `goal/change` supplies the whole lifecycle value; matching admitted `user/message` events advance `roundsStarted`.'),
1119
+ 'plan': z.object({
1120
+ 'active': z.boolean(),
1121
+ 'pending': z.boolean(),
1122
+ }).optional().describe('Plan collaboration state folded from the plan command lifecycle and `plan/mode` events.'),
1123
+ }), z.record(z.string(), z.json()).readonly()).readonly(),
846
1124
  })]))
847
1125
  let _deepseek_ai_dsh_api_session_controller_session_prompt_parameter_0$schema$value
848
1126
  const _deepseek_ai_dsh_api_session_controller_session_prompt_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_session_prompt_parameter_0$schema$value ??= z.object({
849
- 'requestId': z.intersection(z.string(), z.unknown()).readonly(),
850
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
1127
+ 'requestId': z.string().readonly().describe('Client-minted identity persisted on the exact accepted user message.'),
1128
+ 'sessionId': z.string().readonly(),
851
1129
  'mode': z.union([z.literal("queue"), z.literal("steer")]).readonly(),
852
1130
  'content': z.array(z.union([z.object({
853
1131
  'type': z.literal("text").readonly(),
@@ -859,8 +1137,8 @@ const _deepseek_ai_dsh_api_session_controller_session_prompt_parameter_0$schema
859
1137
  'name': z.string().readonly().optional(),
860
1138
  }), z.object({
861
1139
  'type': z.literal("file").readonly(),
862
- 'receiptId': z.intersection(z.string(), z.unknown()).readonly(),
863
- })])).readonly(),
1140
+ 'receiptId': z.string().readonly(),
1141
+ })])).readonly().describe('At least one non-whitespace text part or attachment.'),
864
1142
  'clientTimeZone': z.string().readonly().optional(),
865
1143
  }))
866
1144
  let _deepseek_ai_dsh_api_session_controller_session_prompt_result$schema$value
@@ -869,7 +1147,7 @@ const _deepseek_ai_dsh_api_session_controller_session_prompt_result$schema = ()
869
1147
  }))
870
1148
  let _deepseek_ai_dsh_api_session_controller_session_rename_parameter_0$schema$value
871
1149
  const _deepseek_ai_dsh_api_session_controller_session_rename_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_session_rename_parameter_0$schema$value ??= z.object({
872
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
1150
+ 'sessionId': z.string().readonly(),
873
1151
  'title': z.string().readonly(),
874
1152
  }))
875
1153
  let _deepseek_ai_dsh_api_session_controller_session_rename_result$schema$value
@@ -884,14 +1162,14 @@ const _deepseek_ai_dsh_api_session_controller_session_search_parameter_0$schema
884
1162
  let _deepseek_ai_dsh_api_session_controller_session_search_result$schema$value
885
1163
  const _deepseek_ai_dsh_api_session_controller_session_search_result$schema = () => (_deepseek_ai_dsh_api_session_controller_session_search_result$schema$value ??= z.object({
886
1164
  'items': z.array(z.object({
887
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
1165
+ 'sessionId': z.string().readonly(),
888
1166
  'snippet': z.string().readonly(),
889
1167
  })).readonly(),
890
1168
  'hasMore': z.boolean().readonly(),
891
1169
  }))
892
1170
  let _deepseek_ai_dsh_api_session_controller_session_selectModel_parameter_0$schema$value
893
1171
  const _deepseek_ai_dsh_api_session_controller_session_selectModel_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_session_selectModel_parameter_0$schema$value ??= z.object({
894
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
1172
+ 'sessionId': z.string().readonly(),
895
1173
  'provider': z.string().readonly(),
896
1174
  'model': z.string().readonly(),
897
1175
  'reasoningEffort': z.string().readonly().optional(),
@@ -906,14 +1184,14 @@ const _deepseek_ai_dsh_api_session_controller_session_selectModel_result$schema
906
1184
  }))
907
1185
  let _deepseek_ai_dsh_api_session_controller_session_updateQueue_parameter_0$schema$value
908
1186
  const _deepseek_ai_dsh_api_session_controller_session_updateQueue_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_session_updateQueue_parameter_0$schema$value ??= z.object({
909
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
910
- 'itemId': z.intersection(z.string(), z.unknown()).readonly(),
1187
+ 'sessionId': z.string().readonly(),
1188
+ 'itemId': z.string().readonly(),
911
1189
  'action': z.union([z.object({
912
1190
  'kind': z.literal("edit").readonly(),
913
1191
  'content': z.array(z.object({
914
1192
  'type': z.literal("text"),
915
1193
  'text': z.string(),
916
- })).readonly(),
1194
+ })).readonly().describe('Non-empty text-only replacement content.'),
917
1195
  }), z.object({
918
1196
  'kind': z.literal("remove").readonly(),
919
1197
  }), z.object({
@@ -930,37 +1208,168 @@ const _deepseek_ai_dsh_api_session_controller_session_workspacePathApplications_
930
1208
  }))
931
1209
  let _deepseek_ai_dsh_api_session_controller_session_workspacePathApplications_result$schema$value
932
1210
  const _deepseek_ai_dsh_api_session_controller_session_workspacePathApplications_result$schema = () => (_deepseek_ai_dsh_api_session_controller_session_workspacePathApplications_result$schema$value ??= z.array(z.object({
933
- 'id': z.string().readonly(),
1211
+ 'id': z.string().readonly().describe('OS application identifier; callers must revalidate it against the file\'s current handlers before opening.'),
934
1212
  'name': z.string().readonly(),
935
1213
  'default': z.boolean().readonly(),
936
- 'icon': z.union([z.literal(null), z.string()]).readonly(),
1214
+ 'icon': z.union([z.literal(null), z.string()]).readonly().describe('PNG or SVG data URL, or null when the desktop supplies no icon.'),
937
1215
  })))
938
1216
  let _deepseek_ai_dsh_api_session_controller_skills_list_parameter_0$schema$value
939
1217
  const _deepseek_ai_dsh_api_session_controller_skills_list_parameter_0$schema = () => (_deepseek_ai_dsh_api_session_controller_skills_list_parameter_0$schema$value ??= z.object({
940
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
1218
+ 'sessionId': z.string().readonly(),
941
1219
  }))
942
1220
  let _deepseek_ai_dsh_api_session_controller_skills_list_result$schema$value
943
1221
  const _deepseek_ai_dsh_api_session_controller_skills_list_result$schema = () => (_deepseek_ai_dsh_api_session_controller_skills_list_result$schema$value ??= z.object({
944
1222
  'skills': z.array(z.object({
945
- 'path': z.string().readonly().optional(),
946
- 'name': z.string().readonly(),
947
- 'description': z.string().readonly(),
948
- 'whenToUse': z.string().readonly().optional(),
949
- 'modelInvocable': z.boolean().readonly(),
1223
+ 'path': z.string().readonly().optional().describe('Absolute SKILL.md path when supplied by a filesystem provider.'),
1224
+ 'name': z.string().readonly().describe('Kebab-case identifier referenced as `/name`.'),
1225
+ 'description': z.string().readonly().describe('Short routing description.'),
1226
+ 'whenToUse': z.string().readonly().optional().describe('Optional extra routing guidance.'),
1227
+ 'modelInvocable': z.boolean().readonly().describe('Whether the same skill is also advertised to the model.'),
950
1228
  })).readonly(),
951
1229
  }))
1230
+ let _deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_0_strict$schema$value
1231
+ const _deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_0_strict$schema$value ??= z.string())
1232
+ let _deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_1_strict$schema$value
1233
+ const _deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_1_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_1_strict$schema$value ??= z.string())
1234
+ let _deepseek_ai_dsh_api_session_controller_session_attachment_parameter_0_strict$schema$value
1235
+ const _deepseek_ai_dsh_api_session_controller_session_attachment_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_attachment_parameter_0_strict$schema$value ??= z.strictObject({
1236
+ 'sessionId': z.string().readonly(),
1237
+ 'attachmentId': z.string().readonly(),
1238
+ }))
1239
+ let _deepseek_ai_dsh_api_session_controller_session_cancel_parameter_0_strict$schema$value
1240
+ const _deepseek_ai_dsh_api_session_controller_session_cancel_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_cancel_parameter_0_strict$schema$value ??= z.strictObject({
1241
+ 'sessionId': z.string().readonly(),
1242
+ }))
1243
+ let _deepseek_ai_dsh_api_session_controller_session_create_parameter_0_strict$schema$value
1244
+ const _deepseek_ai_dsh_api_session_controller_session_create_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_create_parameter_0_strict$schema$value ??= z.strictObject({
1245
+ 'workspaceId': z.string().readonly().optional().describe('Workspace the Session joins; exclusive with `cwd`.'),
1246
+ 'cwd': z.string().readonly().optional().describe('Directory the Session owns when no Workspace is named.'),
1247
+ 'sessionId': z.string().readonly().optional().describe('Blank Session to reuse while it is reusable, or the identity of a new Session when none is stored under it.'),
1248
+ 'agentPreset': z.string().readonly().optional().describe('Preset the Session runs, replacing a reused Session\'s recorded preset; the configured default when omitted.'),
1249
+ }))
1250
+ let _deepseek_ai_dsh_api_session_controller_session_follow_parameter_0_strict$schema$value
1251
+ const _deepseek_ai_dsh_api_session_controller_session_follow_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_follow_parameter_0_strict$schema$value ??= z.strictObject({
1252
+ 'address': z.union([z.strictObject({
1253
+ 'kind': z.literal("session").readonly(),
1254
+ 'sessionId': z.string().readonly(),
1255
+ }), z.strictObject({
1256
+ 'kind': z.literal("subagent").readonly(),
1257
+ 'parentSessionId': z.string().readonly(),
1258
+ 'childSessionId': z.string().readonly(),
1259
+ 'mode': z.union([z.literal("one-shot"), z.literal("continuable"), z.literal("unknown")]).readonly(),
1260
+ })]).readonly(),
1261
+ 'assistantStream': z.literal(true).readonly().optional().describe('Include process-local assistant presentation frames for the Web client.'),
1262
+ 'maxMessages': z.number().readonly().optional(),
1263
+ 'turnWindow': z.strictObject({
1264
+ 'minMessages': z.number().readonly().describe('Minimum append-origin user/assistant messages; must not exceed maxMessages.'),
1265
+ 'minTurns': z.number().readonly().describe('Minimum Turn starts crossed, including the partial Turn at beforeSeq.'),
1266
+ }).readonly().optional().describe('Stop at a Turn start after both minima, unless maxMessages or history exhaustion wins.'),
1267
+ }))
1268
+ let _deepseek_ai_dsh_api_session_controller_session_fork_parameter_0_strict$schema$value
1269
+ const _deepseek_ai_dsh_api_session_controller_session_fork_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_fork_parameter_0_strict$schema$value ??= z.strictObject({
1270
+ 'sessionId': z.string().readonly(),
1271
+ 'atSeq': z.number().readonly().optional().describe('Exact inclusive source event seq; omission selects the latest completed-turn prefix.'),
1272
+ 'allowMigration': z.boolean().readonly().optional().describe('False asks the Host to check for required migration before forking. Defaults to true.'),
1273
+ }))
1274
+ let _deepseek_ai_dsh_api_session_controller_session_list_parameter_0_strict$schema$value
1275
+ const _deepseek_ai_dsh_api_session_controller_session_list_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_list_parameter_0_strict$schema$value ??= z.strictObject({
1276
+ 'cursor': z.string().readonly().optional(),
1277
+ }))
1278
+ let _deepseek_ai_dsh_api_session_controller_session_openWorkspacePath_parameter_0_strict$schema$value
1279
+ const _deepseek_ai_dsh_api_session_controller_session_openWorkspacePath_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_openWorkspacePath_parameter_0_strict$schema$value ??= z.strictObject({
1280
+ 'action': z.literal("reveal").readonly().optional().describe('File-manager navigation when requested; omission uses the default application.'),
1281
+ 'application': z.string().readonly().optional().describe('Registered application identifier; ignored for reveal. Omission preserves the operating system default.'),
1282
+ 'path': z.string().readonly().describe('Path after best-effort Session workspace resolution, in Host filesystem syntax.'),
1283
+ }))
1284
+ let _deepseek_ai_dsh_api_session_controller_session_page_parameter_0_strict$schema$value
1285
+ const _deepseek_ai_dsh_api_session_controller_session_page_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_page_parameter_0_strict$schema$value ??= z.strictObject({
1286
+ 'address': z.union([z.strictObject({
1287
+ 'kind': z.literal("session").readonly(),
1288
+ 'sessionId': z.string().readonly(),
1289
+ }), z.strictObject({
1290
+ 'kind': z.literal("subagent").readonly(),
1291
+ 'parentSessionId': z.string().readonly(),
1292
+ 'childSessionId': z.string().readonly(),
1293
+ 'mode': z.union([z.literal("one-shot"), z.literal("continuable"), z.literal("unknown")]).readonly(),
1294
+ })]).readonly(),
1295
+ 'throughSeq': z.number().readonly().describe('Inclusive log cut obtained from the corresponding follow opening frame.'),
1296
+ 'beforeSeq': z.number().readonly().optional(),
1297
+ 'maxMessages': z.number().readonly().optional(),
1298
+ 'turnWindow': z.strictObject({
1299
+ 'minMessages': z.number().readonly().describe('Minimum append-origin user/assistant messages; must not exceed maxMessages.'),
1300
+ 'minTurns': z.number().readonly().describe('Minimum Turn starts crossed, including the partial Turn at beforeSeq.'),
1301
+ }).readonly().optional().describe('Stop at a Turn start after both minima, unless maxMessages or history exhaustion wins.'),
1302
+ }))
1303
+ let _deepseek_ai_dsh_api_session_controller_session_projections_parameter_0_strict$schema$value
1304
+ const _deepseek_ai_dsh_api_session_controller_session_projections_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_projections_parameter_0_strict$schema$value ??= z.strictObject({
1305
+ 'sessionId': z.string().readonly(),
1306
+ }))
1307
+ let _deepseek_ai_dsh_api_session_controller_session_prompt_parameter_0_strict$schema$value
1308
+ const _deepseek_ai_dsh_api_session_controller_session_prompt_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_prompt_parameter_0_strict$schema$value ??= z.strictObject({
1309
+ 'requestId': z.string().readonly().describe('Client-minted identity persisted on the exact accepted user message.'),
1310
+ 'sessionId': z.string().readonly(),
1311
+ 'mode': z.union([z.literal("queue"), z.literal("steer")]).readonly(),
1312
+ 'content': z.array(z.union([z.strictObject({
1313
+ 'type': z.literal("text").readonly(),
1314
+ 'text': z.string().readonly(),
1315
+ }), z.strictObject({
1316
+ 'type': z.literal("image").readonly(),
1317
+ 'mediaType': z.union([z.literal("image/png"), z.literal("image/jpeg"), z.literal("image/webp"), z.literal("image/gif")]).readonly(),
1318
+ 'data': z.string().readonly(),
1319
+ 'name': z.string().readonly().optional(),
1320
+ }), z.strictObject({
1321
+ 'type': z.literal("file").readonly(),
1322
+ 'receiptId': z.string().readonly(),
1323
+ })])).readonly().describe('At least one non-whitespace text part or attachment.'),
1324
+ 'clientTimeZone': z.string().readonly().optional(),
1325
+ }))
1326
+ let _deepseek_ai_dsh_api_session_controller_session_rename_parameter_0_strict$schema$value
1327
+ const _deepseek_ai_dsh_api_session_controller_session_rename_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_rename_parameter_0_strict$schema$value ??= z.strictObject({
1328
+ 'sessionId': z.string().readonly(),
1329
+ 'title': z.string().readonly(),
1330
+ }))
1331
+ let _deepseek_ai_dsh_api_session_controller_session_search_parameter_0_strict$schema$value
1332
+ const _deepseek_ai_dsh_api_session_controller_session_search_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_search_parameter_0_strict$schema$value ??= z.strictObject({
1333
+ 'query': z.string().readonly(),
1334
+ }))
1335
+ let _deepseek_ai_dsh_api_session_controller_session_selectModel_parameter_0_strict$schema$value
1336
+ const _deepseek_ai_dsh_api_session_controller_session_selectModel_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_selectModel_parameter_0_strict$schema$value ??= z.strictObject({
1337
+ 'sessionId': z.string().readonly(),
1338
+ 'provider': z.string().readonly(),
1339
+ 'model': z.string().readonly(),
1340
+ 'reasoningEffort': z.string().readonly().optional(),
1341
+ }))
1342
+ let _deepseek_ai_dsh_api_session_controller_session_updateQueue_parameter_0_strict$schema$value
1343
+ const _deepseek_ai_dsh_api_session_controller_session_updateQueue_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_updateQueue_parameter_0_strict$schema$value ??= z.strictObject({
1344
+ 'sessionId': z.string().readonly(),
1345
+ 'itemId': z.string().readonly(),
1346
+ 'action': z.union([z.strictObject({
1347
+ 'kind': z.literal("edit").readonly(),
1348
+ 'content': z.array(z.strictObject({
1349
+ 'type': z.literal("text"),
1350
+ 'text': z.string(),
1351
+ })).readonly().describe('Non-empty text-only replacement content.'),
1352
+ }), z.strictObject({
1353
+ 'kind': z.literal("remove").readonly(),
1354
+ }), z.strictObject({
1355
+ 'kind': z.literal("steer").readonly(),
1356
+ })]).readonly(),
1357
+ }))
1358
+ let _deepseek_ai_dsh_api_session_controller_session_workspacePathApplications_parameter_0_strict$schema$value
1359
+ const _deepseek_ai_dsh_api_session_controller_session_workspacePathApplications_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_session_workspacePathApplications_parameter_0_strict$schema$value ??= z.strictObject({
1360
+ 'path': z.string().readonly(),
1361
+ }))
1362
+ let _deepseek_ai_dsh_api_session_controller_skills_list_parameter_0_strict$schema$value
1363
+ const _deepseek_ai_dsh_api_session_controller_skills_list_parameter_0_strict$schema = () => (_deepseek_ai_dsh_api_session_controller_skills_list_parameter_0_strict$schema$value ??= z.strictObject({
1364
+ 'sessionId': z.string().readonly(),
1365
+ }))
952
1366
 
953
- export const TYPERT = {
1367
+ const $remote = createTypertRemoteInfo({
954
1368
  package: '@deepseek-ai/dsh-api-session-controller',
955
- face: 'host',
956
- schemas: [
957
- ],
958
- invocations: [
959
- {
960
- id: '@deepseek-ai/dsh-api-session-controller#fileReferences/list',
1369
+ methods: {
1370
+ 'fileReferences/list': {
961
1371
  service: 'sessionFileReferences',
962
- namespace: 'fileReferences',
963
- method: 'list',
1372
+ description: 'List file and directory candidates for one Agent\'s working directory.',
964
1373
  invocation: { kind: 'direct' },
965
1374
  scope: {
966
1375
  context: 'agent',
@@ -970,22 +1379,37 @@ export const TYPERT = {
970
1379
  {
971
1380
  name: 'agent',
972
1381
  wire: 'agentId',
1382
+ description: 'target Agent resolved from the Session identity on the wire.',
973
1383
  source: 'lookup',
974
1384
  lookup: 'agent',
975
1385
  codec: {
976
1386
  mode: 'strict',
977
1387
  typeSymbol: '@deepseek-ai/dsh-session/types#SessionId',
978
1388
  create: _deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_0$schema,
1389
+ jsonSchema: {"type":"string"},
1390
+ },
1391
+ strictCodec: {
1392
+ mode: 'strict',
1393
+ typeSymbol: '@deepseek-ai/dsh-session/types#SessionId',
1394
+ create: _deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_0_strict$schema,
1395
+ jsonSchema: {"type":"string"},
979
1396
  },
980
1397
  },
981
1398
  {
982
1399
  name: 'query',
983
- wire: 'query',
1400
+ description: 'path text following `@` or `@"`.',
984
1401
  source: 'json',
985
1402
  codec: {
986
1403
  mode: 'strict',
987
1404
  typeSymbol: '@deepseek-ai/dsh-api-session-controller#fileReferences/list:query',
988
1405
  create: _deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_1$schema,
1406
+ jsonSchema: {"type":"string"},
1407
+ },
1408
+ strictCodec: {
1409
+ mode: 'strict',
1410
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller#fileReferences/list:query',
1411
+ create: _deepseek_ai_dsh_api_session_controller_fileReferences_list_parameter_1_strict$schema,
1412
+ jsonSchema: {"type":"string"},
989
1413
  },
990
1414
  },
991
1415
  ],
@@ -994,24 +1418,31 @@ export const TYPERT = {
994
1418
  mode: 'strict',
995
1419
  typeSymbol: '@deepseek-ai/dsh-api-session-controller#fileReferences/list:result',
996
1420
  create: _deepseek_ai_dsh_api_session_controller_fileReferences_list_result$schema,
1421
+ description: 'deterministic path-only candidates from the composed provider.',
1422
+ jsonSchema: {"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"User-facing path accepted by normal prompts and filesystem tools."},"kind":{"type":"string","enum":["file","directory"],"description":"Directories keep completion open; files finish the mention."}},"required":["path","kind"],"additionalProperties":true}},
997
1423
  },
998
1424
  sourceLocation: {"file":"packages/api/session-controller/src/file-references.ts","line":33,"column":3},
999
1425
  },
1000
- {
1001
- id: '@deepseek-ai/dsh-api-session-controller#session/attachment',
1426
+ 'session/attachment': {
1002
1427
  service: 'sessionController',
1003
- namespace: 'session',
1004
- method: 'attachment',
1428
+ description: 'Read one image proven reachable from the addressed Session log.',
1005
1429
  invocation: { kind: 'direct' },
1006
1430
  parameters: [
1007
1431
  {
1008
1432
  name: 'request',
1009
- wire: 'request',
1433
+ description: 'Session and attachment identities used for authorization.',
1010
1434
  source: 'json',
1011
1435
  codec: {
1012
1436
  mode: 'strict',
1013
1437
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionAttachmentRequest',
1014
1438
  create: _deepseek_ai_dsh_api_session_controller_session_attachment_parameter_0$schema,
1439
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"},"attachmentId":{"type":"string"}},"required":["sessionId","attachmentId"],"additionalProperties":true},
1440
+ },
1441
+ strictCodec: {
1442
+ mode: 'strict',
1443
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionAttachmentRequest',
1444
+ create: _deepseek_ai_dsh_api_session_controller_session_attachment_parameter_0_strict$schema,
1445
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"},"attachmentId":{"type":"string"}},"required":["sessionId","attachmentId"],"additionalProperties":false},
1015
1446
  },
1016
1447
  },
1017
1448
  ],
@@ -1019,24 +1450,31 @@ export const TYPERT = {
1019
1450
  mode: 'strict',
1020
1451
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionAttachmentValue',
1021
1452
  create: _deepseek_ai_dsh_api_session_controller_session_attachment_result$schema,
1453
+ description: 'the durable attachment reference and base64-encoded bytes.',
1454
+ jsonSchema: {"type":"object","properties":{"attachment":{"type":"object","properties":{"attachmentId":{"type":"string","description":"Opaque storage identifier; never a filesystem path or bearer URL."},"mediaType":{"type":"string","enum":["image/png","image/jpeg","image/webp","image/gif"],"description":"Media type verified from the stored bytes."},"bytes":{"type":"number","description":"Exact encoded byte length."},"width":{"type":"number","description":"Intrinsic encoded width in pixels."},"height":{"type":"number","description":"Intrinsic encoded height in pixels."},"name":{"type":"string","description":"Optional display name stripped of local path information."},"originalDimensions":{"type":"object","properties":{"width":{"type":"number"},"height":{"type":"number"}},"required":["width","height"],"additionalProperties":true,"description":"Input dimensions after applying EXIF orientation and before normalization scaling. Present only when normalization reduced the image."}},"required":["attachmentId","mediaType","bytes","width","height"],"additionalProperties":true},"data":{"type":"string"}},"required":["attachment","data"],"additionalProperties":true},
1022
1455
  },
1023
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":444,"column":3},
1456
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":494,"column":3},
1024
1457
  },
1025
- {
1026
- id: '@deepseek-ai/dsh-api-session-controller#session/cancel',
1458
+ 'session/cancel': {
1027
1459
  service: 'sessionController',
1028
- namespace: 'session',
1029
- method: 'cancel',
1460
+ description: 'Cancel one active Agent turn without dropping its pending inbox.',
1030
1461
  invocation: { kind: 'direct' },
1031
1462
  parameters: [
1032
1463
  {
1033
1464
  name: 'request',
1034
- wire: 'request',
1465
+ description: 'Session whose active Agent turn is cancelled.',
1035
1466
  source: 'json',
1036
1467
  codec: {
1037
1468
  mode: 'strict',
1038
1469
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionCancelRequest',
1039
1470
  create: _deepseek_ai_dsh_api_session_controller_session_cancel_parameter_0$schema,
1471
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"}},"required":["sessionId"],"additionalProperties":true},
1472
+ },
1473
+ strictCodec: {
1474
+ mode: 'strict',
1475
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionCancelRequest',
1476
+ create: _deepseek_ai_dsh_api_session_controller_session_cancel_parameter_0_strict$schema,
1477
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"}},"required":["sessionId"],"additionalProperties":false},
1040
1478
  },
1041
1479
  },
1042
1480
  ],
@@ -1044,14 +1482,14 @@ export const TYPERT = {
1044
1482
  mode: 'strict',
1045
1483
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionCancelValue',
1046
1484
  create: _deepseek_ai_dsh_api_session_controller_session_cancel_result$schema,
1485
+ description: 'acknowledgement that cancellation was requested.',
1486
+ jsonSchema: {"type":"object","properties":{"accepted":{"type":"boolean","const":true}},"required":["accepted"],"additionalProperties":true},
1047
1487
  },
1048
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":464,"column":3},
1488
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":514,"column":3},
1049
1489
  },
1050
- {
1051
- id: '@deepseek-ai/dsh-api-session-controller#session/canOpenWorkspacePath',
1490
+ 'session/canOpenWorkspacePath': {
1052
1491
  service: 'sessionController',
1053
- namespace: 'session',
1054
- method: 'canOpenWorkspacePath',
1492
+ description: 'Report whether this deployment can hand a Session workspace path to a native desktop.',
1055
1493
  invocation: { kind: 'direct' },
1056
1494
  parameters: [
1057
1495
  ],
@@ -1059,14 +1497,14 @@ export const TYPERT = {
1059
1497
  mode: 'strict',
1060
1498
  typeSymbol: '@deepseek-ai/dsh-api-session-controller#session/canOpenWorkspacePath:result',
1061
1499
  create: _deepseek_ai_dsh_api_session_controller_session_canOpenWorkspacePath_result$schema,
1500
+ description: 'true when the matching open operation is available.',
1501
+ jsonSchema: {"type":"boolean"},
1062
1502
  },
1063
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":326,"column":3},
1503
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":347,"column":3},
1064
1504
  },
1065
- {
1066
- id: '@deepseek-ai/dsh-api-session-controller#session/control',
1505
+ 'session/control': {
1067
1506
  service: 'sessionController',
1068
- namespace: 'session',
1069
- method: 'control',
1507
+ description: 'Stream a complete live-control baseline followed by replacement frames.',
1070
1508
  mode: 'stream',
1071
1509
  invocation: { kind: 'direct' },
1072
1510
  parameters: [
@@ -1076,24 +1514,31 @@ export const TYPERT = {
1076
1514
  mode: 'strict',
1077
1515
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionControlFrame',
1078
1516
  create: _deepseek_ai_dsh_api_session_controller_session_control_result$schema,
1517
+ description: 'one complete baseline followed by live replacement frames.',
1518
+ jsonSchemaError: 'typert tool schema: selected dictionaries require string keys and unconstrained JSON values',
1079
1519
  },
1080
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":527,"column":3},
1520
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":599,"column":10},
1081
1521
  },
1082
- {
1083
- id: '@deepseek-ai/dsh-api-session-controller#session/create',
1522
+ 'session/create': {
1084
1523
  service: 'sessionController',
1085
- namespace: 'session',
1086
- method: 'create',
1524
+ description: 'Create one ordinary Session for a new conversation, reusing the named blank Session while it is reusable.',
1087
1525
  invocation: { kind: 'direct' },
1088
1526
  parameters: [
1089
1527
  {
1090
1528
  name: 'request',
1091
- wire: 'request',
1529
+ description: 'optional blank Session to reuse, location, and Agent preset.',
1092
1530
  source: 'json',
1093
1531
  codec: {
1094
1532
  mode: 'strict',
1095
1533
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionCreateRequest',
1096
1534
  create: _deepseek_ai_dsh_api_session_controller_session_create_parameter_0$schema,
1535
+ jsonSchema: {"type":"object","properties":{"workspaceId":{"type":"string","description":"Workspace the Session joins; exclusive with `cwd`."},"cwd":{"type":"string","description":"Directory the Session owns when no Workspace is named."},"sessionId":{"type":"string","description":"Blank Session to reuse while it is reusable, or the identity of a new Session when none is stored under it."},"agentPreset":{"type":"string","description":"Preset the Session runs, replacing a reused Session's recorded preset; the configured default when omitted."}},"required":[],"additionalProperties":true},
1536
+ },
1537
+ strictCodec: {
1538
+ mode: 'strict',
1539
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionCreateRequest',
1540
+ create: _deepseek_ai_dsh_api_session_controller_session_create_parameter_0_strict$schema,
1541
+ jsonSchema: {"type":"object","properties":{"workspaceId":{"type":"string","description":"Workspace the Session joins; exclusive with `cwd`."},"cwd":{"type":"string","description":"Directory the Session owns when no Workspace is named."},"sessionId":{"type":"string","description":"Blank Session to reuse while it is reusable, or the identity of a new Session when none is stored under it."},"agentPreset":{"type":"string","description":"Preset the Session runs, replacing a reused Session's recorded preset; the configured default when omitted."}},"required":[],"additionalProperties":false},
1097
1542
  },
1098
1543
  },
1099
1544
  ],
@@ -1101,25 +1546,32 @@ export const TYPERT = {
1101
1546
  mode: 'strict',
1102
1547
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionCreateValue',
1103
1548
  create: _deepseek_ai_dsh_api_session_controller_session_create_result$schema,
1549
+ description: 'the created or reused Session identity and its preset when configured.',
1550
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string","description":"The created or reused Session, which may differ from the requested `sessionId`."},"agentPreset":{"type":"string","description":"Preset the Session runs, when the deployment composes a preset roster."}},"required":["sessionId"],"additionalProperties":true},
1104
1551
  },
1105
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":280,"column":3},
1552
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":301,"column":3},
1106
1553
  },
1107
- {
1108
- id: '@deepseek-ai/dsh-api-session-controller#session/follow',
1554
+ 'session/follow': {
1109
1555
  service: 'sessionController',
1110
- namespace: 'session',
1111
- method: 'follow',
1556
+ description: 'Follow one Session log from its opening or resume cursor.',
1112
1557
  mode: 'stream',
1113
1558
  invocation: { kind: 'direct' },
1114
1559
  parameters: [
1115
1560
  {
1116
1561
  name: 'request',
1117
- wire: 'request',
1562
+ description: 'durable address and last committed sequence already held by the caller.',
1118
1563
  source: 'json',
1119
1564
  codec: {
1120
1565
  mode: 'strict',
1121
1566
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionFollowRequest',
1122
1567
  create: _deepseek_ai_dsh_api_session_controller_session_follow_parameter_0$schema,
1568
+ jsonSchema: {"type":"object","properties":{"address":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"session"},"sessionId":{"type":"string"}},"required":["kind","sessionId"],"additionalProperties":true},{"type":"object","properties":{"kind":{"type":"string","const":"subagent"},"parentSessionId":{"type":"string"},"childSessionId":{"type":"string"},"mode":{"type":"string","enum":["one-shot","continuable","unknown"]}},"required":["kind","parentSessionId","childSessionId","mode"],"additionalProperties":true}]},"assistantStream":{"type":"boolean","const":true,"description":"Include process-local assistant presentation frames for the Web client."},"maxMessages":{"type":"number"},"turnWindow":{"type":"object","properties":{"minMessages":{"type":"number","description":"Minimum append-origin user/assistant messages; must not exceed maxMessages."},"minTurns":{"type":"number","description":"Minimum Turn starts crossed, including the partial Turn at beforeSeq."}},"required":["minMessages","minTurns"],"additionalProperties":true,"description":"Stop at a Turn start after both minima, unless maxMessages or history exhaustion wins."}},"required":["address"],"additionalProperties":true},
1569
+ },
1570
+ strictCodec: {
1571
+ mode: 'strict',
1572
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionFollowRequest',
1573
+ create: _deepseek_ai_dsh_api_session_controller_session_follow_parameter_0_strict$schema,
1574
+ jsonSchema: {"type":"object","properties":{"address":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"session"},"sessionId":{"type":"string"}},"required":["kind","sessionId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"subagent"},"parentSessionId":{"type":"string"},"childSessionId":{"type":"string"},"mode":{"type":"string","enum":["one-shot","continuable","unknown"]}},"required":["kind","parentSessionId","childSessionId","mode"],"additionalProperties":false}]},"assistantStream":{"type":"boolean","const":true,"description":"Include process-local assistant presentation frames for the Web client."},"maxMessages":{"type":"number"},"turnWindow":{"type":"object","properties":{"minMessages":{"type":"number","description":"Minimum append-origin user/assistant messages; must not exceed maxMessages."},"minTurns":{"type":"number","description":"Minimum Turn starts crossed, including the partial Turn at beforeSeq."}},"required":["minMessages","minTurns"],"additionalProperties":false,"description":"Stop at a Turn start after both minima, unless maxMessages or history exhaustion wins."}},"required":["address"],"additionalProperties":false},
1123
1575
  },
1124
1576
  },
1125
1577
  ],
@@ -1128,24 +1580,31 @@ export const TYPERT = {
1128
1580
  mode: 'strict',
1129
1581
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionFollowFrame',
1130
1582
  create: _deepseek_ai_dsh_api_session_controller_session_follow_result$schema,
1583
+ description: 'a complete opening snapshot followed by gap-free durable event frames and optional cursorless assistant-stream frames.',
1584
+ jsonSchema: {"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"event"},"event":{"type":"object","properties":{"type":{"type":"string"},"seq":{"type":"number"},"time":{"type":"number"},"data":{},"ignorable":{"type":"boolean","const":true},"sourceEventSeqs":{"description":"Earlier sources on current surface events; opaque JSON on unknown ignorable events."},"surfaceOp":{"description":"Canonical placement on current surface events; opaque JSON on unknown ignorable events."}},"required":["type","seq","time","data"],"additionalProperties":true}},"required":["type","event"],"additionalProperties":true},{"type":"object","properties":{"type":{"type":"string","const":"snapshot"},"header":{"type":"object","properties":{"version":{"type":"number"},"id":{"type":"string"},"createdAt":{"type":"number"},"cwd":{"type":"string"},"parentSession":{"type":"string"},"isSeeded":{"type":"boolean","description":"Whether the Session contains a fork-inherited prefix."},"origin":{"type":"string","const":"subagent"},"delegationDepth":{"type":"number"},"agentPreset":{"type":"string"}},"required":["version","id","createdAt","isSeeded"],"additionalProperties":true},"cursor":{"type":"number"},"records":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"event"},"event":{"type":"object","properties":{"type":{"type":"string"},"seq":{"type":"number"},"time":{"type":"number"},"data":{},"ignorable":{"type":"boolean","const":true},"sourceEventSeqs":{"description":"Earlier sources on current surface events; opaque JSON on unknown ignorable events."},"surfaceOp":{"description":"Canonical placement on current surface events; opaque JSON on unknown ignorable events."}},"required":["type","seq","time","data"],"additionalProperties":true}},"required":["type","event"],"additionalProperties":true}},"hasMore":{"type":"boolean"},"projections":{"type":"object","properties":{"asOfSeq":{"type":"number"},"values":{"type":"object","properties":{"inbox":{"type":"object","properties":{"next-turn":{"type":"array","items":{}},"next-step":{"type":"array","items":{}}},"required":["next-turn","next-step"],"additionalProperties":true,"description":"Pending agent input reconstructed from durable inbox splices."},"workingDirectory":{"oneOf":[{"type":"null","const":null},{"type":"string"}],"description":"Recorded current directory for Session observations, or null when none is recorded."},"agentPreset":{"oneOf":[{"type":"null","const":null},{"type":"string"}],"description":"Preset the Session runs, or null when the deployment composes none."},"title":{"oneOf":[{"type":"null","const":null},{"type":"string"}],"description":"The session's current normalized title — the latest `session/title` event's text (last-wins), or `null` before the first title lands. A plain string: the shape the client list rows consume."},"todos":{"oneOf":[{"type":"null","const":null},{"type":"array","items":{"type":"object","properties":{"content":{"type":"string","description":"What this task is — a short imperative line shown in the UI."},"status":{"type":"string","enum":["completed","pending","in_progress"],"description":"Lifecycle state. `in_progress` marks a task being worked now; parallel work may mark several."}},"required":["content","status"],"additionalProperties":true}}],"description":"The agent's current whole todo list (the latest `todo/write` snapshot), or `null` before the first write. Whole-value rule: every `todo/write` carries the complete replacement list, so the fold is last-wins."},"sessionListMetadata":{"type":"object","properties":{"blank":{"type":"boolean","description":"Whether the folded prefix contains no turn."},"lastPromptAt":{"oneOf":[{"type":"null","const":null},{"type":"number"}],"description":"Latest human-authored prompt time in the folded prefix."}},"required":["blank","lastPromptAt"],"additionalProperties":true,"description":"Persisted facts used to summarize a Session without activating it."},"imageLimits":{"type":"object","properties":{"maxImageBytes":{"type":"number"},"maxImagesPerMessage":{"type":"number"},"maxMessageImageBytes":{"type":"number"},"maxImagePixels":{"type":"number"},"maxImageDimension":{"type":"number","description":"Maximum intrinsic width and maximum intrinsic height in pixels for one image."},"mediaTypes":{"type":"array","items":{"type":"string","enum":["image/png","image/jpeg","image/webp","image/gif"]}}},"required":["maxImageBytes","maxImagesPerMessage","maxMessageImageBytes","maxImagePixels","maxImageDimension","mediaTypes"],"additionalProperties":true,"description":"Image-intake limits enforced by the Session prompt endpoint."},"modelSelection":{"type":"object","properties":{"lastUsed":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"provider":{"type":"string"},"model":{"type":"string"},"reasoningEffort":{"type":"string"}},"required":["provider","model"],"additionalProperties":true}],"description":"Selection consumed by the latest recorded model request."},"next":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"provider":{"type":"string"},"model":{"type":"string"},"reasoningEffort":{"type":"string"}},"required":["provider","model"],"additionalProperties":true}],"description":"Selection the next request should use, falling back to {@link lastUsed}."}},"required":["lastUsed","next"],"additionalProperties":true,"description":"Durable model selection already used and selected for the next request."},"permissions":{"type":"object","properties":{"currentValue":{"type":"string","description":"The effective current value: a configured preset key, `auto`, or `custom`."}},"required":["currentValue"],"additionalProperties":true,"description":"The session's current permission, folded from the three whole-value knob events (`permission/preset`, `sandbox/mode`, `approval/policy`) over the composition defaults. Selectable options come from the process-level catalog Remote. Key absence means no permission service is composed — clients hide the control."},"subagentCatalog":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"one-shot"},"label":{"type":"string"}},"required":["id","createdAt","mode"],"additionalProperties":true},{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"external"},"label":{"type":"string"}},"required":["id","createdAt","mode"],"additionalProperties":true},{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"continuable"},"label":{"type":"string"}},"required":["id","createdAt","mode","label"],"additionalProperties":true},{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"unknown"},"label":{"type":"string"}},"required":["id","createdAt","mode"],"additionalProperties":true}]},"description":"Direct children in parent catalog event order, excluding fork-inherited facts."},"subagentTiming":{"type":"object","properties":{"settledMs":{"type":"number","description":"Milliseconds accumulated across completed turns after the child's own descriptor."},"active":{"type":"object","properties":{"since":{"type":"number","description":"Start of the open turn."},"through":{"type":"number","description":"Latest event time folded into this projection cut."}},"required":["since","through"],"additionalProperties":true,"description":"Same-cut bounds of the currently open turn, when one has not reached `turn/end`."},"lastTurnCompleted":{"type":"boolean","description":"Whether the latest closed turn after the child's own descriptor completed normally; absent while a turn is open or before one closes."}},"required":["settledMs"],"additionalProperties":true,"description":"Active-turn duration and latest closed-turn completion for a descriptor-backed subagent session."},"subagent":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"mode":{"type":"string","const":"one-shot","description":"A terminal one-shot child."},"label":{"type":"string","description":"Optional durable creation label from the child's descriptor."},"seq":{"type":"number","description":"Seq of the `subagent/descriptor` event this identity was folded from. `session.isOwnSeq(seq)` proves the identity comes from the child's OWN log suffix — where a descriptor is immutable once appended — and not from a fork seed's replayed ancestor descriptor."}},"required":["mode","seq"],"additionalProperties":true},{"type":"object","properties":{"mode":{"type":"string","const":"continuable","description":"A resumable conversation."},"label":{"type":"string","description":"Durable creation label from the child's descriptor."},"seq":{"type":"number","description":"Seq of the folded descriptor event; see the one-shot arm for the own-suffix proof."}},"required":["mode","label","seq"],"additionalProperties":true}],"description":"Identity of a descriptor-backed subagent session. `null` ⟺ no valid descriptor (missing, malformed, or unrecognized-version — deliberately undistinguished). The sentinel is deliberately serializable: a value pushed over JSON transports must survive `JSON.stringify` losslessly, where an `undefined` field would be dropped and a stale identity would survive on the receiving side. The entry itself stays non-optional."},"tokenUsage":{"type":"object","properties":{"uncachedInputTokens":{"type":"number"},"outputTokens":{"type":"number"},"cacheReadTokens":{"type":"number"},"cacheWriteTokens":{"type":"number"}},"required":["uncachedInputTokens","outputTokens","cacheReadTokens","cacheWriteTokens"],"additionalProperties":true,"description":"Provider-reported usage accumulated across the complete durable log."},"contextPressure":{"type":"object","properties":{"pressureTokens":{"type":"number","description":"Provider-reported prompt size of the most recent request: uncached input plus cache reads and writes. Response output is excluded, so this does not grow as the current turn streams. Absent until a provider reports usage."},"projectedTokens":{"type":"number","description":"What the NEXT request's prompt would cost: {@link pressureTokens} plus the heuristic repricing of everything the surface gained or lost since that sample. Only the delta is estimated, so the figure stays anchored to the provider while still reacting the moment a compaction shadows a span — which `pressureTokens` alone cannot do, since compaction reports no usage of its own. Absent until a provider reports usage."},"contextWindow":{"type":"number","description":"Newest recorded route capacity; absent when no adapter advertised one."}},"required":[],"additionalProperties":true,"description":"Newest request pressure paired with the newest known route capacity."},"contextBreakdown":{"type":"object","properties":{"systemTokens":{"type":"number","description":"Heuristic tokens of the last nonempty surviving system prompt in surface order; 0 when none exists."},"toolsTokens":{"type":"number","description":"Heuristic tokens of the newest request envelope's tool schemas; 0 before any request."},"messageTokens":{"type":"number","description":"Heuristic tokens of every other visible surface node, including superseded system prompts."}},"required":["systemTokens","toolsTokens","messageTokens"],"additionalProperties":true,"description":"Heuristic system/tools/message composition of the next request."},"agentTeam":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["lead","teammate"]},"phase":{"type":"string","enum":["failed","provisioning","active"],"description":"Durable lifecycle; the Lead row is always `active`. Turn activity comes from Session status."},"error":{"type":"string"}},"required":["id","name","role","phase"],"additionalProperties":true}},"tasks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"revision":{"type":"number"},"subject":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["completed","pending","in_progress","deleted"]},"blockedBy":{"type":"array","items":{"type":"string"}},"writeScopes":{"type":"array","items":{"type":"string"}},"ownerName":{"type":"string"},"ready":{"type":"boolean"},"writeScopeWarnings":{"type":"array","items":{"type":"string"}}},"required":["id","revision","subject","description","status","blockedBy","writeScopes","ready","writeScopeWarnings"],"additionalProperties":true}},"failure":{"type":"string"}},"required":["members","tasks"],"additionalProperties":true,"description":"Durable roster and non-deleted task board of the Team rooted at the projected Session."},"userQuestions":{"type":"object","properties":{"active":{"type":"array","items":{"type":"object","properties":{"callId":{"type":"string"},"questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Stable caller-provided question id, echoed in the answer."},"question":{"type":"string","description":"The question to display."},"detail":{"type":"string","description":"Optional supporting detail rendered with the question but kept out of option labels."},"header":{"type":"string","description":"Optional short heading/group label."},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","description":"User-facing label."},"description":{"type":"string","description":"Optional extra context rendered by capable UIs."}},"required":["label"],"additionalProperties":true},"description":"Optional choices the UI can render as a menu."},"multiSelect":{"type":"boolean","description":"Whether more than one option may be selected. Defaults to single-select."},"intent":{"type":"object","properties":{"kind":{"type":"string","const":"plan-review","description":"A plan submitted for review: `detail` is the plan markdown `ask()` requires, and the decision approves or declines it."},"approve":{"type":"string","description":"The option label that approves the plan; every other option declines it. Named rather than positional so no UI infers the verdict from option order. An `approve` naming no option of its own question is rejected at `ask()`."},"callId":{"type":"string","description":"Logged tool invocation whose arguments contain the reviewed plan."}},"required":["kind","approve"],"additionalProperties":true,"description":"Optional presentation intent for capable UIs; absent asks for the generic option list."}},"required":["id","question"],"additionalProperties":true}},"state":{"type":"string","enum":["open","continued"]}},"required":["callId","questions","state"],"additionalProperties":true},"description":"Calls that can still take an answer, in ask order."},"settled":{"type":"array","items":{"type":"object","properties":{"callId":{"type":"string","description":"The settled call."},"answers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The answered question id."},"selected":{"type":"array","items":{"type":"string"},"description":"Selected option labels. May accompany custom text for a multi-select question."},"custom":{"type":"string","description":"Optional free-text \"Other\" answer."}},"required":["id","selected"],"additionalProperties":true},"description":"The recorded batch, one entry per question; empty when the late reply carried none."}},"required":["callId","answers"],"additionalProperties":true},"description":"Calls an answer settled, in settlement order."}},"required":["active","settled"],"additionalProperties":true,"description":"Timed questions that remain answerable in this Session, and the ones a late reply settled."},"goal":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"goal":{"type":"object","properties":{"objective":{"type":"string","description":"Human-requested completion objective."},"phase":{"type":"string","enum":["active","paused","blocked","complete"],"description":"Durable lifecycle phase."},"blockedReason":{"type":"object","properties":{"code":{"type":"string","description":"Stable lower-kebab-case classification chosen by the blocking policy."},"message":{"type":"string","description":"Non-empty explanation shown to humans and models."}},"required":["code","message"],"additionalProperties":true,"description":"Present exactly while `phase` is `blocked`."},"maxGoalRounds":{"type":"number","description":"Total admitted goal-round cap."},"id":{"type":"string","description":"Stable goal identity."},"revision":{"type":"number","description":"Positive revision; every durable mutation increments it."}},"required":["objective","phase","maxGoalRounds","id","revision"],"additionalProperties":true,"description":"Current durable goal snapshot (the CAS ref for mutations rides on it)."},"roundsStarted":{"type":"number","description":"Highest admitted round number for this goal."},"createdAt":{"type":"number","description":"Epoch milliseconds of the create mutation."},"updatedAt":{"type":"number","description":"Epoch milliseconds of the latest mutation."}},"required":["goal","roundsStarted","createdAt","updatedAt"],"additionalProperties":true}],"description":"The session's current goal and admitted-round count, or `null` before the first create and after a clear tombstone. `goal/change` supplies the whole lifecycle value; matching admitted `user/message` events advance `roundsStarted`."},"plan":{"type":"object","properties":{"active":{"type":"boolean"},"pending":{"type":"boolean"}},"required":["active","pending"],"additionalProperties":true,"description":"Plan collaboration state folded from the plan command lifecycle and `plan/mode` events."}},"required":[],"additionalProperties":true,"description":"Provider-validated values; omitted keys are absent capabilities at this cut."}},"required":["asOfSeq","values"],"additionalProperties":true},"assistantStream":{"type":"object","properties":{"revision":{"type":"number"},"activeAttempt":{"type":"object","properties":{"attemptId":{"type":"string"},"startedAfterSeq":{"type":"number","description":"Last durable Session seq observed when this attempt started."},"turn":{"type":"number"},"step":{"type":"number"},"nextIndex":{"type":"number","description":"Dense position expected for the next live chunk frame."},"stream":{"type":"array","items":{},"description":"Compact detached stream accumulated at this opening revision."}},"required":["attemptId","startedAfterSeq","turn","step","nextIndex","stream"],"additionalProperties":true}},"required":["revision"],"additionalProperties":true}},"required":["type","header","cursor","records","hasMore","projections"],"additionalProperties":true},{"type":"object","properties":{"type":{"type":"string","const":"assistant-stream"},"frame":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"start"},"attemptId":{"type":"string"},"revision":{"type":"number"},"startedAfterSeq":{"type":"number"},"turn":{"type":"number"},"step":{"type":"number"}},"required":["type","attemptId","revision","startedAfterSeq","turn","step"],"additionalProperties":true},{"type":"object","properties":{"type":{"type":"string","const":"chunk"},"attemptId":{"type":"string"},"revision":{"type":"number"},"index":{"type":"number"},"time":{"type":"number"},"chunk":{}},"required":["type","attemptId","revision","index","time","chunk"],"additionalProperties":true},{"type":"object","properties":{"type":{"type":"string","const":"end"},"attemptId":{"type":"string"},"revision":{"type":"number"},"index":{"type":"number","description":"Number of chunk frames represented by this terminal marker."},"outcome":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"committed"},"eventType":{"type":"string","enum":["assistant/message","assistant/attempt"]},"seq":{"type":"number"}},"required":["kind","eventType","seq"],"additionalProperties":true},{"type":"object","properties":{"kind":{"type":"string","const":"abandoned"}},"required":["kind"],"additionalProperties":true}]}},"required":["type","attemptId","revision","index","outcome"],"additionalProperties":true}]}},"required":["type","frame"],"additionalProperties":true}]},
1131
1585
  },
1132
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":487,"column":3},
1586
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":537,"column":3},
1133
1587
  },
1134
- {
1135
- id: '@deepseek-ai/dsh-api-session-controller#session/fork',
1588
+ 'session/fork': {
1136
1589
  service: 'sessionController',
1137
- namespace: 'session',
1138
- method: 'fork',
1590
+ description: 'Fork one cold-readable exact event prefix into a new Session. An omitted boundary selects the latest completed-turn prefix; an open cut receives synthetic fork closers.',
1139
1591
  invocation: { kind: 'direct' },
1140
1592
  parameters: [
1141
1593
  {
1142
1594
  name: 'request',
1143
- wire: 'request',
1595
+ description: 'source Session, optional exact inclusive event boundary, and migration preflight choice.',
1144
1596
  source: 'json',
1145
1597
  codec: {
1146
1598
  mode: 'strict',
1147
1599
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionForkRequest',
1148
1600
  create: _deepseek_ai_dsh_api_session_controller_session_fork_parameter_0$schema,
1601
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"},"atSeq":{"type":"number","description":"Exact inclusive source event seq; omission selects the latest completed-turn prefix."},"allowMigration":{"type":"boolean","description":"False asks the Host to check for required migration before forking. Defaults to true."}},"required":["sessionId"],"additionalProperties":true},
1602
+ },
1603
+ strictCodec: {
1604
+ mode: 'strict',
1605
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionForkRequest',
1606
+ create: _deepseek_ai_dsh_api_session_controller_session_fork_parameter_0_strict$schema,
1607
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"},"atSeq":{"type":"number","description":"Exact inclusive source event seq; omission selects the latest completed-turn prefix."},"allowMigration":{"type":"boolean","description":"False asks the Host to check for required migration before forking. Defaults to true."}},"required":["sessionId"],"additionalProperties":false},
1149
1608
  },
1150
1609
  },
1151
1610
  ],
@@ -1153,14 +1612,14 @@ export const TYPERT = {
1153
1612
  mode: 'strict',
1154
1613
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionForkValue',
1155
1614
  create: _deepseek_ai_dsh_api_session_controller_session_fork_result$schema,
1615
+ description: 'the new Session identity.',
1616
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"}},"required":["sessionId"],"additionalProperties":true},
1156
1617
  },
1157
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":422,"column":3},
1618
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":443,"column":9},
1158
1619
  },
1159
- {
1160
- id: '@deepseek-ai/dsh-api-session-controller#session/initializeDefaultModel',
1620
+ 'session/initializeDefaultModel': {
1161
1621
  service: 'sessionController',
1162
- namespace: 'session',
1163
- method: 'initializeDefaultModel',
1622
+ description: 'Select the first available account model after login when no provider API key is configured.',
1164
1623
  invocation: { kind: 'direct' },
1165
1624
  parameters: [
1166
1625
  ],
@@ -1168,24 +1627,31 @@ export const TYPERT = {
1168
1627
  mode: 'strict',
1169
1628
  typeSymbol: '@deepseek-ai/dsh-api-session-controller#session/initializeDefaultModel:result',
1170
1629
  create: _deepseek_ai_dsh_api_session_controller_session_initializeDefaultModel_result$schema,
1630
+ description: 'after saving the first available model or retaining the existing default.',
1631
+ jsonSchemaError: 'typert tool schema: unsupported void value',
1171
1632
  },
1172
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":299,"column":9},
1633
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":320,"column":9},
1173
1634
  },
1174
- {
1175
- id: '@deepseek-ai/dsh-api-session-controller#session/list',
1635
+ 'session/list': {
1176
1636
  service: 'sessionController',
1177
- namespace: 'session',
1178
- method: 'list',
1637
+ description: 'Read all visible Session rows without resuming an Agent.',
1179
1638
  invocation: { kind: 'direct' },
1180
1639
  parameters: [
1181
1640
  {
1182
1641
  name: '_request',
1183
- wire: '_request',
1642
+ description: 'reserved empty list request.',
1184
1643
  source: 'json',
1185
1644
  codec: {
1186
1645
  mode: 'strict',
1187
1646
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionListRequest',
1188
1647
  create: _deepseek_ai_dsh_api_session_controller_session_list_parameter_0$schema,
1648
+ jsonSchema: {"type":"object","properties":{"cursor":{"type":"string"}},"required":[],"additionalProperties":true},
1649
+ },
1650
+ strictCodec: {
1651
+ mode: 'strict',
1652
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionListRequest',
1653
+ create: _deepseek_ai_dsh_api_session_controller_session_list_parameter_0_strict$schema,
1654
+ jsonSchema: {"type":"object","properties":{"cursor":{"type":"string"}},"required":[],"additionalProperties":false},
1189
1655
  },
1190
1656
  },
1191
1657
  ],
@@ -1194,14 +1660,14 @@ export const TYPERT = {
1194
1660
  mode: 'strict',
1195
1661
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionListValue',
1196
1662
  create: _deepseek_ai_dsh_api_session_controller_session_list_result$schema,
1663
+ description: 'visible Session summaries ordered by activity.',
1664
+ jsonSchema: {"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"agentAvailable":{"type":"boolean","description":"Whether this Session currently owns a live Agent."},"formatStatus":{"type":"string","enum":["current","migration-required"],"description":"Current for attached Sessions; otherwise the persistence format status when reported."},"sessionId":{"type":"string"},"updatedAt":{"type":"number"},"running":{"type":"boolean"},"blank":{"type":"boolean"},"parentSessionId":{"type":"string"},"origin":{"type":"string","const":"subagent"},"cwd":{"type":"string"},"projections":{"type":"object","properties":{"kind":{"type":"string","enum":["cached","sequenced"],"description":"`sequenced`: the Host's live registry produced the block for an attached Session, so `asOfSeq` is comparable with baselines and frames of the same connection. `cached`: a header-only listing viewed the block from the persisted projection cache, so `asOfSeq` is the stored record's own watermark and must not be compared with the connected Session's values."},"asOfSeq":{"type":"number","description":"Watermark of the block in the sequence space named by `kind`."},"values":{"type":"object","properties":{"inbox":{"type":"object","properties":{"next-turn":{"type":"array","items":{}},"next-step":{"type":"array","items":{}}},"required":["next-turn","next-step"],"additionalProperties":true,"description":"Pending agent input reconstructed from durable inbox splices."},"workingDirectory":{"oneOf":[{"type":"null","const":null},{"type":"string"}],"description":"Recorded current directory for Session observations, or null when none is recorded."},"agentPreset":{"oneOf":[{"type":"null","const":null},{"type":"string"}],"description":"Preset the Session runs, or null when the deployment composes none."},"title":{"oneOf":[{"type":"null","const":null},{"type":"string"}],"description":"The session's current normalized title — the latest `session/title` event's text (last-wins), or `null` before the first title lands. A plain string: the shape the client list rows consume."},"todos":{"oneOf":[{"type":"null","const":null},{"type":"array","items":{"type":"object","properties":{"content":{"type":"string","description":"What this task is — a short imperative line shown in the UI."},"status":{"type":"string","enum":["completed","pending","in_progress"],"description":"Lifecycle state. `in_progress` marks a task being worked now; parallel work may mark several."}},"required":["content","status"],"additionalProperties":true}}],"description":"The agent's current whole todo list (the latest `todo/write` snapshot), or `null` before the first write. Whole-value rule: every `todo/write` carries the complete replacement list, so the fold is last-wins."},"sessionListMetadata":{"type":"object","properties":{"blank":{"type":"boolean","description":"Whether the folded prefix contains no turn."},"lastPromptAt":{"oneOf":[{"type":"null","const":null},{"type":"number"}],"description":"Latest human-authored prompt time in the folded prefix."}},"required":["blank","lastPromptAt"],"additionalProperties":true,"description":"Persisted facts used to summarize a Session without activating it."},"imageLimits":{"type":"object","properties":{"maxImageBytes":{"type":"number"},"maxImagesPerMessage":{"type":"number"},"maxMessageImageBytes":{"type":"number"},"maxImagePixels":{"type":"number"},"maxImageDimension":{"type":"number","description":"Maximum intrinsic width and maximum intrinsic height in pixels for one image."},"mediaTypes":{"type":"array","items":{"type":"string","enum":["image/png","image/jpeg","image/webp","image/gif"]}}},"required":["maxImageBytes","maxImagesPerMessage","maxMessageImageBytes","maxImagePixels","maxImageDimension","mediaTypes"],"additionalProperties":true,"description":"Image-intake limits enforced by the Session prompt endpoint."},"modelSelection":{"type":"object","properties":{"lastUsed":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"provider":{"type":"string"},"model":{"type":"string"},"reasoningEffort":{"type":"string"}},"required":["provider","model"],"additionalProperties":true}],"description":"Selection consumed by the latest recorded model request."},"next":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"provider":{"type":"string"},"model":{"type":"string"},"reasoningEffort":{"type":"string"}},"required":["provider","model"],"additionalProperties":true}],"description":"Selection the next request should use, falling back to {@link lastUsed}."}},"required":["lastUsed","next"],"additionalProperties":true,"description":"Durable model selection already used and selected for the next request."},"permissions":{"type":"object","properties":{"currentValue":{"type":"string","description":"The effective current value: a configured preset key, `auto`, or `custom`."}},"required":["currentValue"],"additionalProperties":true,"description":"The session's current permission, folded from the three whole-value knob events (`permission/preset`, `sandbox/mode`, `approval/policy`) over the composition defaults. Selectable options come from the process-level catalog Remote. Key absence means no permission service is composed — clients hide the control."},"subagentCatalog":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"one-shot"},"label":{"type":"string"}},"required":["id","createdAt","mode"],"additionalProperties":true},{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"external"},"label":{"type":"string"}},"required":["id","createdAt","mode"],"additionalProperties":true},{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"continuable"},"label":{"type":"string"}},"required":["id","createdAt","mode","label"],"additionalProperties":true},{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"unknown"},"label":{"type":"string"}},"required":["id","createdAt","mode"],"additionalProperties":true}]},"description":"Direct children in parent catalog event order, excluding fork-inherited facts."},"subagentTiming":{"type":"object","properties":{"settledMs":{"type":"number","description":"Milliseconds accumulated across completed turns after the child's own descriptor."},"active":{"type":"object","properties":{"since":{"type":"number","description":"Start of the open turn."},"through":{"type":"number","description":"Latest event time folded into this projection cut."}},"required":["since","through"],"additionalProperties":true,"description":"Same-cut bounds of the currently open turn, when one has not reached `turn/end`."},"lastTurnCompleted":{"type":"boolean","description":"Whether the latest closed turn after the child's own descriptor completed normally; absent while a turn is open or before one closes."}},"required":["settledMs"],"additionalProperties":true,"description":"Active-turn duration and latest closed-turn completion for a descriptor-backed subagent session."},"subagent":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"mode":{"type":"string","const":"one-shot","description":"A terminal one-shot child."},"label":{"type":"string","description":"Optional durable creation label from the child's descriptor."},"seq":{"type":"number","description":"Seq of the `subagent/descriptor` event this identity was folded from. `session.isOwnSeq(seq)` proves the identity comes from the child's OWN log suffix — where a descriptor is immutable once appended — and not from a fork seed's replayed ancestor descriptor."}},"required":["mode","seq"],"additionalProperties":true},{"type":"object","properties":{"mode":{"type":"string","const":"continuable","description":"A resumable conversation."},"label":{"type":"string","description":"Durable creation label from the child's descriptor."},"seq":{"type":"number","description":"Seq of the folded descriptor event; see the one-shot arm for the own-suffix proof."}},"required":["mode","label","seq"],"additionalProperties":true}],"description":"Identity of a descriptor-backed subagent session. `null` ⟺ no valid descriptor (missing, malformed, or unrecognized-version — deliberately undistinguished). The sentinel is deliberately serializable: a value pushed over JSON transports must survive `JSON.stringify` losslessly, where an `undefined` field would be dropped and a stale identity would survive on the receiving side. The entry itself stays non-optional."},"tokenUsage":{"type":"object","properties":{"uncachedInputTokens":{"type":"number"},"outputTokens":{"type":"number"},"cacheReadTokens":{"type":"number"},"cacheWriteTokens":{"type":"number"}},"required":["uncachedInputTokens","outputTokens","cacheReadTokens","cacheWriteTokens"],"additionalProperties":true,"description":"Provider-reported usage accumulated across the complete durable log."},"contextPressure":{"type":"object","properties":{"pressureTokens":{"type":"number","description":"Provider-reported prompt size of the most recent request: uncached input plus cache reads and writes. Response output is excluded, so this does not grow as the current turn streams. Absent until a provider reports usage."},"projectedTokens":{"type":"number","description":"What the NEXT request's prompt would cost: {@link pressureTokens} plus the heuristic repricing of everything the surface gained or lost since that sample. Only the delta is estimated, so the figure stays anchored to the provider while still reacting the moment a compaction shadows a span — which `pressureTokens` alone cannot do, since compaction reports no usage of its own. Absent until a provider reports usage."},"contextWindow":{"type":"number","description":"Newest recorded route capacity; absent when no adapter advertised one."}},"required":[],"additionalProperties":true,"description":"Newest request pressure paired with the newest known route capacity."},"contextBreakdown":{"type":"object","properties":{"systemTokens":{"type":"number","description":"Heuristic tokens of the last nonempty surviving system prompt in surface order; 0 when none exists."},"toolsTokens":{"type":"number","description":"Heuristic tokens of the newest request envelope's tool schemas; 0 before any request."},"messageTokens":{"type":"number","description":"Heuristic tokens of every other visible surface node, including superseded system prompts."}},"required":["systemTokens","toolsTokens","messageTokens"],"additionalProperties":true,"description":"Heuristic system/tools/message composition of the next request."},"agentTeam":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["lead","teammate"]},"phase":{"type":"string","enum":["failed","provisioning","active"],"description":"Durable lifecycle; the Lead row is always `active`. Turn activity comes from Session status."},"error":{"type":"string"}},"required":["id","name","role","phase"],"additionalProperties":true}},"tasks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"revision":{"type":"number"},"subject":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["completed","pending","in_progress","deleted"]},"blockedBy":{"type":"array","items":{"type":"string"}},"writeScopes":{"type":"array","items":{"type":"string"}},"ownerName":{"type":"string"},"ready":{"type":"boolean"},"writeScopeWarnings":{"type":"array","items":{"type":"string"}}},"required":["id","revision","subject","description","status","blockedBy","writeScopes","ready","writeScopeWarnings"],"additionalProperties":true}},"failure":{"type":"string"}},"required":["members","tasks"],"additionalProperties":true,"description":"Durable roster and non-deleted task board of the Team rooted at the projected Session."},"userQuestions":{"type":"object","properties":{"active":{"type":"array","items":{"type":"object","properties":{"callId":{"type":"string"},"questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Stable caller-provided question id, echoed in the answer."},"question":{"type":"string","description":"The question to display."},"detail":{"type":"string","description":"Optional supporting detail rendered with the question but kept out of option labels."},"header":{"type":"string","description":"Optional short heading/group label."},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","description":"User-facing label."},"description":{"type":"string","description":"Optional extra context rendered by capable UIs."}},"required":["label"],"additionalProperties":true},"description":"Optional choices the UI can render as a menu."},"multiSelect":{"type":"boolean","description":"Whether more than one option may be selected. Defaults to single-select."},"intent":{"type":"object","properties":{"kind":{"type":"string","const":"plan-review","description":"A plan submitted for review: `detail` is the plan markdown `ask()` requires, and the decision approves or declines it."},"approve":{"type":"string","description":"The option label that approves the plan; every other option declines it. Named rather than positional so no UI infers the verdict from option order. An `approve` naming no option of its own question is rejected at `ask()`."},"callId":{"type":"string","description":"Logged tool invocation whose arguments contain the reviewed plan."}},"required":["kind","approve"],"additionalProperties":true,"description":"Optional presentation intent for capable UIs; absent asks for the generic option list."}},"required":["id","question"],"additionalProperties":true}},"state":{"type":"string","enum":["open","continued"]}},"required":["callId","questions","state"],"additionalProperties":true},"description":"Calls that can still take an answer, in ask order."},"settled":{"type":"array","items":{"type":"object","properties":{"callId":{"type":"string","description":"The settled call."},"answers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The answered question id."},"selected":{"type":"array","items":{"type":"string"},"description":"Selected option labels. May accompany custom text for a multi-select question."},"custom":{"type":"string","description":"Optional free-text \"Other\" answer."}},"required":["id","selected"],"additionalProperties":true},"description":"The recorded batch, one entry per question; empty when the late reply carried none."}},"required":["callId","answers"],"additionalProperties":true},"description":"Calls an answer settled, in settlement order."}},"required":["active","settled"],"additionalProperties":true,"description":"Timed questions that remain answerable in this Session, and the ones a late reply settled."},"goal":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"goal":{"type":"object","properties":{"objective":{"type":"string","description":"Human-requested completion objective."},"phase":{"type":"string","enum":["active","paused","blocked","complete"],"description":"Durable lifecycle phase."},"blockedReason":{"type":"object","properties":{"code":{"type":"string","description":"Stable lower-kebab-case classification chosen by the blocking policy."},"message":{"type":"string","description":"Non-empty explanation shown to humans and models."}},"required":["code","message"],"additionalProperties":true,"description":"Present exactly while `phase` is `blocked`."},"maxGoalRounds":{"type":"number","description":"Total admitted goal-round cap."},"id":{"type":"string","description":"Stable goal identity."},"revision":{"type":"number","description":"Positive revision; every durable mutation increments it."}},"required":["objective","phase","maxGoalRounds","id","revision"],"additionalProperties":true,"description":"Current durable goal snapshot (the CAS ref for mutations rides on it)."},"roundsStarted":{"type":"number","description":"Highest admitted round number for this goal."},"createdAt":{"type":"number","description":"Epoch milliseconds of the create mutation."},"updatedAt":{"type":"number","description":"Epoch milliseconds of the latest mutation."}},"required":["goal","roundsStarted","createdAt","updatedAt"],"additionalProperties":true}],"description":"The session's current goal and admitted-round count, or `null` before the first create and after a clear tombstone. `goal/change` supplies the whole lifecycle value; matching admitted `user/message` events advance `roundsStarted`."},"plan":{"type":"object","properties":{"active":{"type":"boolean"},"pending":{"type":"boolean"}},"required":["active","pending"],"additionalProperties":true,"description":"Plan collaboration state folded from the plan command lifecycle and `plan/mode` events."}},"required":[],"additionalProperties":true,"description":"Provider-validated values present in the block; omitted keys remain unknown."}},"required":["kind","asOfSeq","values"],"additionalProperties":true}},"required":["agentAvailable","sessionId","updatedAt","running","blank"],"additionalProperties":true}}},"required":["items"],"additionalProperties":true},
1197
1665
  },
1198
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":259,"column":9},
1666
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":276,"column":9},
1199
1667
  },
1200
- {
1201
- id: '@deepseek-ai/dsh-api-session-controller#session/modelCatalog',
1668
+ 'session/modelCatalog': {
1202
1669
  service: 'sessionController',
1203
- namespace: 'session',
1204
- method: 'modelCatalog',
1670
+ description: 'Describe every currently routable model for Host-generation selectors.',
1205
1671
  invocation: { kind: 'direct' },
1206
1672
  parameters: [
1207
1673
  ],
@@ -1209,24 +1675,31 @@ export const TYPERT = {
1209
1675
  mode: 'strict',
1210
1676
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#ModelCatalog',
1211
1677
  create: _deepseek_ai_dsh_api_session_controller_session_modelCatalog_result$schema,
1678
+ description: 'provider-grouped models, the deployment default, and isolated provider failures.',
1679
+ jsonSchema: {"type":"object","properties":{"default":{"type":"object","properties":{"provider":{"type":"string"},"model":{"type":"string"},"reasoningEffort":{"type":"string"}},"required":["provider","model"],"additionalProperties":true},"routableProviders":{"type":"array","items":{"type":"string"},"description":"Provider routes with at least one currently available catalog model."},"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"models":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"reasoning":{"type":"object","properties":{"efforts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["id","name"],"additionalProperties":true}},"defaultEffort":{"type":"string"}},"required":["efforts"],"additionalProperties":true}},"required":["id","name"],"additionalProperties":true}}},"required":["id","name","models"],"additionalProperties":true}},"failures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"message":{"type":"string"}},"required":["id","name","message"],"additionalProperties":true}}},"required":["default","routableProviders","groups","failures"],"additionalProperties":true},
1212
1680
  },
1213
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":317,"column":3},
1681
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":338,"column":3},
1214
1682
  },
1215
- {
1216
- id: '@deepseek-ai/dsh-api-session-controller#session/openWorkspacePath',
1683
+ 'session/openWorkspacePath': {
1217
1684
  service: 'sessionController',
1218
- namespace: 'session',
1219
- method: 'openWorkspacePath',
1685
+ description: 'Verify one path through the composed filesystem and open it on the Host desktop.',
1220
1686
  invocation: { kind: 'direct' },
1221
1687
  parameters: [
1222
1688
  {
1223
1689
  name: 'request',
1224
- wire: 'request',
1690
+ description: 'path after best-effort Session workspace resolution.',
1225
1691
  source: 'json',
1226
1692
  codec: {
1227
1693
  mode: 'strict',
1228
1694
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionOpenWorkspacePathRequest',
1229
1695
  create: _deepseek_ai_dsh_api_session_controller_session_openWorkspacePath_parameter_0$schema,
1696
+ jsonSchema: {"type":"object","properties":{"action":{"type":"string","const":"reveal","description":"File-manager navigation when requested; omission uses the default application."},"application":{"type":"string","description":"Registered application identifier; ignored for reveal. Omission preserves the operating system default."},"path":{"type":"string","description":"Path after best-effort Session workspace resolution, in Host filesystem syntax."}},"required":["path"],"additionalProperties":true},
1697
+ },
1698
+ strictCodec: {
1699
+ mode: 'strict',
1700
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionOpenWorkspacePathRequest',
1701
+ create: _deepseek_ai_dsh_api_session_controller_session_openWorkspacePath_parameter_0_strict$schema,
1702
+ jsonSchema: {"type":"object","properties":{"action":{"type":"string","const":"reveal","description":"File-manager navigation when requested; omission uses the default application."},"application":{"type":"string","description":"Registered application identifier; ignored for reveal. Omission preserves the operating system default."},"path":{"type":"string","description":"Path after best-effort Session workspace resolution, in Host filesystem syntax."}},"required":["path"],"additionalProperties":false},
1230
1703
  },
1231
1704
  },
1232
1705
  ],
@@ -1235,24 +1708,31 @@ export const TYPERT = {
1235
1708
  mode: 'strict',
1236
1709
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionOpenWorkspacePathValue',
1237
1710
  create: _deepseek_ai_dsh_api_session_controller_session_openWorkspacePath_result$schema,
1711
+ description: 'confirmation after the native opener accepts the path.',
1712
+ jsonSchema: {"type":"object","properties":{"opened":{"type":"boolean","const":true}},"required":["opened"],"additionalProperties":true},
1238
1713
  },
1239
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":347,"column":9},
1714
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":368,"column":9},
1240
1715
  },
1241
- {
1242
- id: '@deepseek-ai/dsh-api-session-controller#session/page',
1716
+ 'session/page': {
1243
1717
  service: 'sessionController',
1244
- namespace: 'session',
1245
- method: 'page',
1718
+ description: 'Read one cold-safe, message-aligned Session history page.',
1246
1719
  invocation: { kind: 'direct' },
1247
1720
  parameters: [
1248
1721
  {
1249
1722
  name: 'request',
1250
- wire: 'request',
1723
+ description: 'durable address, backward cursor, and page budget.',
1251
1724
  source: 'json',
1252
1725
  codec: {
1253
1726
  mode: 'strict',
1254
1727
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionPageRequest',
1255
1728
  create: _deepseek_ai_dsh_api_session_controller_session_page_parameter_0$schema,
1729
+ jsonSchema: {"type":"object","properties":{"address":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"session"},"sessionId":{"type":"string"}},"required":["kind","sessionId"],"additionalProperties":true},{"type":"object","properties":{"kind":{"type":"string","const":"subagent"},"parentSessionId":{"type":"string"},"childSessionId":{"type":"string"},"mode":{"type":"string","enum":["one-shot","continuable","unknown"]}},"required":["kind","parentSessionId","childSessionId","mode"],"additionalProperties":true}]},"throughSeq":{"type":"number","description":"Inclusive log cut obtained from the corresponding follow opening frame."},"beforeSeq":{"type":"number"},"maxMessages":{"type":"number"},"turnWindow":{"type":"object","properties":{"minMessages":{"type":"number","description":"Minimum append-origin user/assistant messages; must not exceed maxMessages."},"minTurns":{"type":"number","description":"Minimum Turn starts crossed, including the partial Turn at beforeSeq."}},"required":["minMessages","minTurns"],"additionalProperties":true,"description":"Stop at a Turn start after both minima, unless maxMessages or history exhaustion wins."}},"required":["address","throughSeq"],"additionalProperties":true},
1730
+ },
1731
+ strictCodec: {
1732
+ mode: 'strict',
1733
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionPageRequest',
1734
+ create: _deepseek_ai_dsh_api_session_controller_session_page_parameter_0_strict$schema,
1735
+ jsonSchema: {"type":"object","properties":{"address":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"session"},"sessionId":{"type":"string"}},"required":["kind","sessionId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"subagent"},"parentSessionId":{"type":"string"},"childSessionId":{"type":"string"},"mode":{"type":"string","enum":["one-shot","continuable","unknown"]}},"required":["kind","parentSessionId","childSessionId","mode"],"additionalProperties":false}]},"throughSeq":{"type":"number","description":"Inclusive log cut obtained from the corresponding follow opening frame."},"beforeSeq":{"type":"number"},"maxMessages":{"type":"number"},"turnWindow":{"type":"object","properties":{"minMessages":{"type":"number","description":"Minimum append-origin user/assistant messages; must not exceed maxMessages."},"minTurns":{"type":"number","description":"Minimum Turn starts crossed, including the partial Turn at beforeSeq."}},"required":["minMessages","minTurns"],"additionalProperties":false,"description":"Stop at a Turn start after both minima, unless maxMessages or history exhaustion wins."}},"required":["address","throughSeq"],"additionalProperties":false},
1256
1736
  },
1257
1737
  },
1258
1738
  ],
@@ -1261,24 +1741,31 @@ export const TYPERT = {
1261
1741
  mode: 'strict',
1262
1742
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionPage',
1263
1743
  create: _deepseek_ai_dsh_api_session_controller_session_page_result$schema,
1744
+ description: 'one chronological page.',
1745
+ jsonSchema: {"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"event"},"event":{"type":"object","properties":{"type":{"type":"string"},"seq":{"type":"number"},"time":{"type":"number"},"data":{},"ignorable":{"type":"boolean","const":true},"sourceEventSeqs":{"description":"Earlier sources on current surface events; opaque JSON on unknown ignorable events."},"surfaceOp":{"description":"Canonical placement on current surface events; opaque JSON on unknown ignorable events."}},"required":["type","seq","time","data"],"additionalProperties":true}},"required":["type","event"],"additionalProperties":true}},"hasMore":{"type":"boolean"}},"required":["records","hasMore"],"additionalProperties":true},
1264
1746
  },
1265
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":475,"column":3},
1747
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":525,"column":3},
1266
1748
  },
1267
- {
1268
- id: '@deepseek-ai/dsh-api-session-controller#session/projections',
1749
+ 'session/projections': {
1269
1750
  service: 'sessionController',
1270
- namespace: 'session',
1271
- method: 'projections',
1751
+ description: 'Read exact projections, returning cached hints only when migration is required.',
1272
1752
  invocation: { kind: 'direct' },
1273
1753
  parameters: [
1274
1754
  {
1275
1755
  name: 'request',
1276
- wire: 'request',
1756
+ description: 'Session whose current values are required.',
1277
1757
  source: 'json',
1278
1758
  codec: {
1279
1759
  mode: 'strict',
1280
1760
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionProjectionsRequest',
1281
1761
  create: _deepseek_ai_dsh_api_session_controller_session_projections_parameter_0$schema,
1762
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"}},"required":["sessionId"],"additionalProperties":true},
1763
+ },
1764
+ strictCodec: {
1765
+ mode: 'strict',
1766
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionProjectionsRequest',
1767
+ create: _deepseek_ai_dsh_api_session_controller_session_projections_parameter_0_strict$schema,
1768
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"}},"required":["sessionId"],"additionalProperties":false},
1282
1769
  },
1283
1770
  },
1284
1771
  ],
@@ -1287,24 +1774,31 @@ export const TYPERT = {
1287
1774
  mode: 'strict',
1288
1775
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionProjectionsValue',
1289
1776
  create: _deepseek_ai_dsh_api_session_controller_session_projections_result$schema,
1777
+ description: 'a sequenced baseline, cached hints when migration is deferred, or null when absent.',
1778
+ jsonSchema: {"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"asOfSeq":{"type":"number"},"values":{"type":"object","properties":{"inbox":{"type":"object","properties":{"next-turn":{"type":"array","items":{}},"next-step":{"type":"array","items":{}}},"required":["next-turn","next-step"],"additionalProperties":true,"description":"Pending agent input reconstructed from durable inbox splices."},"workingDirectory":{"oneOf":[{"type":"null","const":null},{"type":"string"}],"description":"Recorded current directory for Session observations, or null when none is recorded."},"agentPreset":{"oneOf":[{"type":"null","const":null},{"type":"string"}],"description":"Preset the Session runs, or null when the deployment composes none."},"title":{"oneOf":[{"type":"null","const":null},{"type":"string"}],"description":"The session's current normalized title — the latest `session/title` event's text (last-wins), or `null` before the first title lands. A plain string: the shape the client list rows consume."},"todos":{"oneOf":[{"type":"null","const":null},{"type":"array","items":{"type":"object","properties":{"content":{"type":"string","description":"What this task is — a short imperative line shown in the UI."},"status":{"type":"string","enum":["completed","pending","in_progress"],"description":"Lifecycle state. `in_progress` marks a task being worked now; parallel work may mark several."}},"required":["content","status"],"additionalProperties":true}}],"description":"The agent's current whole todo list (the latest `todo/write` snapshot), or `null` before the first write. Whole-value rule: every `todo/write` carries the complete replacement list, so the fold is last-wins."},"sessionListMetadata":{"type":"object","properties":{"blank":{"type":"boolean","description":"Whether the folded prefix contains no turn."},"lastPromptAt":{"oneOf":[{"type":"null","const":null},{"type":"number"}],"description":"Latest human-authored prompt time in the folded prefix."}},"required":["blank","lastPromptAt"],"additionalProperties":true,"description":"Persisted facts used to summarize a Session without activating it."},"imageLimits":{"type":"object","properties":{"maxImageBytes":{"type":"number"},"maxImagesPerMessage":{"type":"number"},"maxMessageImageBytes":{"type":"number"},"maxImagePixels":{"type":"number"},"maxImageDimension":{"type":"number","description":"Maximum intrinsic width and maximum intrinsic height in pixels for one image."},"mediaTypes":{"type":"array","items":{"type":"string","enum":["image/png","image/jpeg","image/webp","image/gif"]}}},"required":["maxImageBytes","maxImagesPerMessage","maxMessageImageBytes","maxImagePixels","maxImageDimension","mediaTypes"],"additionalProperties":true,"description":"Image-intake limits enforced by the Session prompt endpoint."},"modelSelection":{"type":"object","properties":{"lastUsed":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"provider":{"type":"string"},"model":{"type":"string"},"reasoningEffort":{"type":"string"}},"required":["provider","model"],"additionalProperties":true}],"description":"Selection consumed by the latest recorded model request."},"next":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"provider":{"type":"string"},"model":{"type":"string"},"reasoningEffort":{"type":"string"}},"required":["provider","model"],"additionalProperties":true}],"description":"Selection the next request should use, falling back to {@link lastUsed}."}},"required":["lastUsed","next"],"additionalProperties":true,"description":"Durable model selection already used and selected for the next request."},"permissions":{"type":"object","properties":{"currentValue":{"type":"string","description":"The effective current value: a configured preset key, `auto`, or `custom`."}},"required":["currentValue"],"additionalProperties":true,"description":"The session's current permission, folded from the three whole-value knob events (`permission/preset`, `sandbox/mode`, `approval/policy`) over the composition defaults. Selectable options come from the process-level catalog Remote. Key absence means no permission service is composed — clients hide the control."},"subagentCatalog":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"one-shot"},"label":{"type":"string"}},"required":["id","createdAt","mode"],"additionalProperties":true},{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"external"},"label":{"type":"string"}},"required":["id","createdAt","mode"],"additionalProperties":true},{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"continuable"},"label":{"type":"string"}},"required":["id","createdAt","mode","label"],"additionalProperties":true},{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"unknown"},"label":{"type":"string"}},"required":["id","createdAt","mode"],"additionalProperties":true}]},"description":"Direct children in parent catalog event order, excluding fork-inherited facts."},"subagentTiming":{"type":"object","properties":{"settledMs":{"type":"number","description":"Milliseconds accumulated across completed turns after the child's own descriptor."},"active":{"type":"object","properties":{"since":{"type":"number","description":"Start of the open turn."},"through":{"type":"number","description":"Latest event time folded into this projection cut."}},"required":["since","through"],"additionalProperties":true,"description":"Same-cut bounds of the currently open turn, when one has not reached `turn/end`."},"lastTurnCompleted":{"type":"boolean","description":"Whether the latest closed turn after the child's own descriptor completed normally; absent while a turn is open or before one closes."}},"required":["settledMs"],"additionalProperties":true,"description":"Active-turn duration and latest closed-turn completion for a descriptor-backed subagent session."},"subagent":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"mode":{"type":"string","const":"one-shot","description":"A terminal one-shot child."},"label":{"type":"string","description":"Optional durable creation label from the child's descriptor."},"seq":{"type":"number","description":"Seq of the `subagent/descriptor` event this identity was folded from. `session.isOwnSeq(seq)` proves the identity comes from the child's OWN log suffix — where a descriptor is immutable once appended — and not from a fork seed's replayed ancestor descriptor."}},"required":["mode","seq"],"additionalProperties":true},{"type":"object","properties":{"mode":{"type":"string","const":"continuable","description":"A resumable conversation."},"label":{"type":"string","description":"Durable creation label from the child's descriptor."},"seq":{"type":"number","description":"Seq of the folded descriptor event; see the one-shot arm for the own-suffix proof."}},"required":["mode","label","seq"],"additionalProperties":true}],"description":"Identity of a descriptor-backed subagent session. `null` ⟺ no valid descriptor (missing, malformed, or unrecognized-version — deliberately undistinguished). The sentinel is deliberately serializable: a value pushed over JSON transports must survive `JSON.stringify` losslessly, where an `undefined` field would be dropped and a stale identity would survive on the receiving side. The entry itself stays non-optional."},"tokenUsage":{"type":"object","properties":{"uncachedInputTokens":{"type":"number"},"outputTokens":{"type":"number"},"cacheReadTokens":{"type":"number"},"cacheWriteTokens":{"type":"number"}},"required":["uncachedInputTokens","outputTokens","cacheReadTokens","cacheWriteTokens"],"additionalProperties":true,"description":"Provider-reported usage accumulated across the complete durable log."},"contextPressure":{"type":"object","properties":{"pressureTokens":{"type":"number","description":"Provider-reported prompt size of the most recent request: uncached input plus cache reads and writes. Response output is excluded, so this does not grow as the current turn streams. Absent until a provider reports usage."},"projectedTokens":{"type":"number","description":"What the NEXT request's prompt would cost: {@link pressureTokens} plus the heuristic repricing of everything the surface gained or lost since that sample. Only the delta is estimated, so the figure stays anchored to the provider while still reacting the moment a compaction shadows a span — which `pressureTokens` alone cannot do, since compaction reports no usage of its own. Absent until a provider reports usage."},"contextWindow":{"type":"number","description":"Newest recorded route capacity; absent when no adapter advertised one."}},"required":[],"additionalProperties":true,"description":"Newest request pressure paired with the newest known route capacity."},"contextBreakdown":{"type":"object","properties":{"systemTokens":{"type":"number","description":"Heuristic tokens of the last nonempty surviving system prompt in surface order; 0 when none exists."},"toolsTokens":{"type":"number","description":"Heuristic tokens of the newest request envelope's tool schemas; 0 before any request."},"messageTokens":{"type":"number","description":"Heuristic tokens of every other visible surface node, including superseded system prompts."}},"required":["systemTokens","toolsTokens","messageTokens"],"additionalProperties":true,"description":"Heuristic system/tools/message composition of the next request."},"agentTeam":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["lead","teammate"]},"phase":{"type":"string","enum":["failed","provisioning","active"],"description":"Durable lifecycle; the Lead row is always `active`. Turn activity comes from Session status."},"error":{"type":"string"}},"required":["id","name","role","phase"],"additionalProperties":true}},"tasks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"revision":{"type":"number"},"subject":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["completed","pending","in_progress","deleted"]},"blockedBy":{"type":"array","items":{"type":"string"}},"writeScopes":{"type":"array","items":{"type":"string"}},"ownerName":{"type":"string"},"ready":{"type":"boolean"},"writeScopeWarnings":{"type":"array","items":{"type":"string"}}},"required":["id","revision","subject","description","status","blockedBy","writeScopes","ready","writeScopeWarnings"],"additionalProperties":true}},"failure":{"type":"string"}},"required":["members","tasks"],"additionalProperties":true,"description":"Durable roster and non-deleted task board of the Team rooted at the projected Session."},"userQuestions":{"type":"object","properties":{"active":{"type":"array","items":{"type":"object","properties":{"callId":{"type":"string"},"questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Stable caller-provided question id, echoed in the answer."},"question":{"type":"string","description":"The question to display."},"detail":{"type":"string","description":"Optional supporting detail rendered with the question but kept out of option labels."},"header":{"type":"string","description":"Optional short heading/group label."},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","description":"User-facing label."},"description":{"type":"string","description":"Optional extra context rendered by capable UIs."}},"required":["label"],"additionalProperties":true},"description":"Optional choices the UI can render as a menu."},"multiSelect":{"type":"boolean","description":"Whether more than one option may be selected. Defaults to single-select."},"intent":{"type":"object","properties":{"kind":{"type":"string","const":"plan-review","description":"A plan submitted for review: `detail` is the plan markdown `ask()` requires, and the decision approves or declines it."},"approve":{"type":"string","description":"The option label that approves the plan; every other option declines it. Named rather than positional so no UI infers the verdict from option order. An `approve` naming no option of its own question is rejected at `ask()`."},"callId":{"type":"string","description":"Logged tool invocation whose arguments contain the reviewed plan."}},"required":["kind","approve"],"additionalProperties":true,"description":"Optional presentation intent for capable UIs; absent asks for the generic option list."}},"required":["id","question"],"additionalProperties":true}},"state":{"type":"string","enum":["open","continued"]}},"required":["callId","questions","state"],"additionalProperties":true},"description":"Calls that can still take an answer, in ask order."},"settled":{"type":"array","items":{"type":"object","properties":{"callId":{"type":"string","description":"The settled call."},"answers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The answered question id."},"selected":{"type":"array","items":{"type":"string"},"description":"Selected option labels. May accompany custom text for a multi-select question."},"custom":{"type":"string","description":"Optional free-text \"Other\" answer."}},"required":["id","selected"],"additionalProperties":true},"description":"The recorded batch, one entry per question; empty when the late reply carried none."}},"required":["callId","answers"],"additionalProperties":true},"description":"Calls an answer settled, in settlement order."}},"required":["active","settled"],"additionalProperties":true,"description":"Timed questions that remain answerable in this Session, and the ones a late reply settled."},"goal":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"goal":{"type":"object","properties":{"objective":{"type":"string","description":"Human-requested completion objective."},"phase":{"type":"string","enum":["active","paused","blocked","complete"],"description":"Durable lifecycle phase."},"blockedReason":{"type":"object","properties":{"code":{"type":"string","description":"Stable lower-kebab-case classification chosen by the blocking policy."},"message":{"type":"string","description":"Non-empty explanation shown to humans and models."}},"required":["code","message"],"additionalProperties":true,"description":"Present exactly while `phase` is `blocked`."},"maxGoalRounds":{"type":"number","description":"Total admitted goal-round cap."},"id":{"type":"string","description":"Stable goal identity."},"revision":{"type":"number","description":"Positive revision; every durable mutation increments it."}},"required":["objective","phase","maxGoalRounds","id","revision"],"additionalProperties":true,"description":"Current durable goal snapshot (the CAS ref for mutations rides on it)."},"roundsStarted":{"type":"number","description":"Highest admitted round number for this goal."},"createdAt":{"type":"number","description":"Epoch milliseconds of the create mutation."},"updatedAt":{"type":"number","description":"Epoch milliseconds of the latest mutation."}},"required":["goal","roundsStarted","createdAt","updatedAt"],"additionalProperties":true}],"description":"The session's current goal and admitted-round count, or `null` before the first create and after a clear tombstone. `goal/change` supplies the whole lifecycle value; matching admitted `user/message` events advance `roundsStarted`."},"plan":{"type":"object","properties":{"active":{"type":"boolean"},"pending":{"type":"boolean"}},"required":["active","pending"],"additionalProperties":true,"description":"Plan collaboration state folded from the plan command lifecycle and `plan/mode` events."}},"required":[],"additionalProperties":true,"description":"Provider-validated values; omitted keys are absent capabilities at this cut."},"kind":{"type":"string","const":"sequenced"}},"required":["asOfSeq","values","kind"],"additionalProperties":true},{"type":"object","properties":{"kind":{"type":"string","const":"migration-required"},"values":{"type":"object","properties":{"inbox":{"type":"object","properties":{"next-turn":{"type":"array","items":{}},"next-step":{"type":"array","items":{}}},"required":["next-turn","next-step"],"additionalProperties":true,"description":"Pending agent input reconstructed from durable inbox splices."},"workingDirectory":{"oneOf":[{"type":"null","const":null},{"type":"string"}],"description":"Recorded current directory for Session observations, or null when none is recorded."},"agentPreset":{"oneOf":[{"type":"null","const":null},{"type":"string"}],"description":"Preset the Session runs, or null when the deployment composes none."},"title":{"oneOf":[{"type":"null","const":null},{"type":"string"}],"description":"The session's current normalized title — the latest `session/title` event's text (last-wins), or `null` before the first title lands. A plain string: the shape the client list rows consume."},"todos":{"oneOf":[{"type":"null","const":null},{"type":"array","items":{"type":"object","properties":{"content":{"type":"string","description":"What this task is — a short imperative line shown in the UI."},"status":{"type":"string","enum":["completed","pending","in_progress"],"description":"Lifecycle state. `in_progress` marks a task being worked now; parallel work may mark several."}},"required":["content","status"],"additionalProperties":true}}],"description":"The agent's current whole todo list (the latest `todo/write` snapshot), or `null` before the first write. Whole-value rule: every `todo/write` carries the complete replacement list, so the fold is last-wins."},"sessionListMetadata":{"type":"object","properties":{"blank":{"type":"boolean","description":"Whether the folded prefix contains no turn."},"lastPromptAt":{"oneOf":[{"type":"null","const":null},{"type":"number"}],"description":"Latest human-authored prompt time in the folded prefix."}},"required":["blank","lastPromptAt"],"additionalProperties":true,"description":"Persisted facts used to summarize a Session without activating it."},"imageLimits":{"type":"object","properties":{"maxImageBytes":{"type":"number"},"maxImagesPerMessage":{"type":"number"},"maxMessageImageBytes":{"type":"number"},"maxImagePixels":{"type":"number"},"maxImageDimension":{"type":"number","description":"Maximum intrinsic width and maximum intrinsic height in pixels for one image."},"mediaTypes":{"type":"array","items":{"type":"string","enum":["image/png","image/jpeg","image/webp","image/gif"]}}},"required":["maxImageBytes","maxImagesPerMessage","maxMessageImageBytes","maxImagePixels","maxImageDimension","mediaTypes"],"additionalProperties":true,"description":"Image-intake limits enforced by the Session prompt endpoint."},"modelSelection":{"type":"object","properties":{"lastUsed":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"provider":{"type":"string"},"model":{"type":"string"},"reasoningEffort":{"type":"string"}},"required":["provider","model"],"additionalProperties":true}],"description":"Selection consumed by the latest recorded model request."},"next":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"provider":{"type":"string"},"model":{"type":"string"},"reasoningEffort":{"type":"string"}},"required":["provider","model"],"additionalProperties":true}],"description":"Selection the next request should use, falling back to {@link lastUsed}."}},"required":["lastUsed","next"],"additionalProperties":true,"description":"Durable model selection already used and selected for the next request."},"permissions":{"type":"object","properties":{"currentValue":{"type":"string","description":"The effective current value: a configured preset key, `auto`, or `custom`."}},"required":["currentValue"],"additionalProperties":true,"description":"The session's current permission, folded from the three whole-value knob events (`permission/preset`, `sandbox/mode`, `approval/policy`) over the composition defaults. Selectable options come from the process-level catalog Remote. Key absence means no permission service is composed — clients hide the control."},"subagentCatalog":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"one-shot"},"label":{"type":"string"}},"required":["id","createdAt","mode"],"additionalProperties":true},{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"external"},"label":{"type":"string"}},"required":["id","createdAt","mode"],"additionalProperties":true},{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"continuable"},"label":{"type":"string"}},"required":["id","createdAt","mode","label"],"additionalProperties":true},{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"number"},"mode":{"type":"string","const":"unknown"},"label":{"type":"string"}},"required":["id","createdAt","mode"],"additionalProperties":true}]},"description":"Direct children in parent catalog event order, excluding fork-inherited facts."},"subagentTiming":{"type":"object","properties":{"settledMs":{"type":"number","description":"Milliseconds accumulated across completed turns after the child's own descriptor."},"active":{"type":"object","properties":{"since":{"type":"number","description":"Start of the open turn."},"through":{"type":"number","description":"Latest event time folded into this projection cut."}},"required":["since","through"],"additionalProperties":true,"description":"Same-cut bounds of the currently open turn, when one has not reached `turn/end`."},"lastTurnCompleted":{"type":"boolean","description":"Whether the latest closed turn after the child's own descriptor completed normally; absent while a turn is open or before one closes."}},"required":["settledMs"],"additionalProperties":true,"description":"Active-turn duration and latest closed-turn completion for a descriptor-backed subagent session."},"subagent":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"mode":{"type":"string","const":"one-shot","description":"A terminal one-shot child."},"label":{"type":"string","description":"Optional durable creation label from the child's descriptor."},"seq":{"type":"number","description":"Seq of the `subagent/descriptor` event this identity was folded from. `session.isOwnSeq(seq)` proves the identity comes from the child's OWN log suffix — where a descriptor is immutable once appended — and not from a fork seed's replayed ancestor descriptor."}},"required":["mode","seq"],"additionalProperties":true},{"type":"object","properties":{"mode":{"type":"string","const":"continuable","description":"A resumable conversation."},"label":{"type":"string","description":"Durable creation label from the child's descriptor."},"seq":{"type":"number","description":"Seq of the folded descriptor event; see the one-shot arm for the own-suffix proof."}},"required":["mode","label","seq"],"additionalProperties":true}],"description":"Identity of a descriptor-backed subagent session. `null` ⟺ no valid descriptor (missing, malformed, or unrecognized-version — deliberately undistinguished). The sentinel is deliberately serializable: a value pushed over JSON transports must survive `JSON.stringify` losslessly, where an `undefined` field would be dropped and a stale identity would survive on the receiving side. The entry itself stays non-optional."},"tokenUsage":{"type":"object","properties":{"uncachedInputTokens":{"type":"number"},"outputTokens":{"type":"number"},"cacheReadTokens":{"type":"number"},"cacheWriteTokens":{"type":"number"}},"required":["uncachedInputTokens","outputTokens","cacheReadTokens","cacheWriteTokens"],"additionalProperties":true,"description":"Provider-reported usage accumulated across the complete durable log."},"contextPressure":{"type":"object","properties":{"pressureTokens":{"type":"number","description":"Provider-reported prompt size of the most recent request: uncached input plus cache reads and writes. Response output is excluded, so this does not grow as the current turn streams. Absent until a provider reports usage."},"projectedTokens":{"type":"number","description":"What the NEXT request's prompt would cost: {@link pressureTokens} plus the heuristic repricing of everything the surface gained or lost since that sample. Only the delta is estimated, so the figure stays anchored to the provider while still reacting the moment a compaction shadows a span — which `pressureTokens` alone cannot do, since compaction reports no usage of its own. Absent until a provider reports usage."},"contextWindow":{"type":"number","description":"Newest recorded route capacity; absent when no adapter advertised one."}},"required":[],"additionalProperties":true,"description":"Newest request pressure paired with the newest known route capacity."},"contextBreakdown":{"type":"object","properties":{"systemTokens":{"type":"number","description":"Heuristic tokens of the last nonempty surviving system prompt in surface order; 0 when none exists."},"toolsTokens":{"type":"number","description":"Heuristic tokens of the newest request envelope's tool schemas; 0 before any request."},"messageTokens":{"type":"number","description":"Heuristic tokens of every other visible surface node, including superseded system prompts."}},"required":["systemTokens","toolsTokens","messageTokens"],"additionalProperties":true,"description":"Heuristic system/tools/message composition of the next request."},"agentTeam":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["lead","teammate"]},"phase":{"type":"string","enum":["failed","provisioning","active"],"description":"Durable lifecycle; the Lead row is always `active`. Turn activity comes from Session status."},"error":{"type":"string"}},"required":["id","name","role","phase"],"additionalProperties":true}},"tasks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"revision":{"type":"number"},"subject":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["completed","pending","in_progress","deleted"]},"blockedBy":{"type":"array","items":{"type":"string"}},"writeScopes":{"type":"array","items":{"type":"string"}},"ownerName":{"type":"string"},"ready":{"type":"boolean"},"writeScopeWarnings":{"type":"array","items":{"type":"string"}}},"required":["id","revision","subject","description","status","blockedBy","writeScopes","ready","writeScopeWarnings"],"additionalProperties":true}},"failure":{"type":"string"}},"required":["members","tasks"],"additionalProperties":true,"description":"Durable roster and non-deleted task board of the Team rooted at the projected Session."},"userQuestions":{"type":"object","properties":{"active":{"type":"array","items":{"type":"object","properties":{"callId":{"type":"string"},"questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Stable caller-provided question id, echoed in the answer."},"question":{"type":"string","description":"The question to display."},"detail":{"type":"string","description":"Optional supporting detail rendered with the question but kept out of option labels."},"header":{"type":"string","description":"Optional short heading/group label."},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","description":"User-facing label."},"description":{"type":"string","description":"Optional extra context rendered by capable UIs."}},"required":["label"],"additionalProperties":true},"description":"Optional choices the UI can render as a menu."},"multiSelect":{"type":"boolean","description":"Whether more than one option may be selected. Defaults to single-select."},"intent":{"type":"object","properties":{"kind":{"type":"string","const":"plan-review","description":"A plan submitted for review: `detail` is the plan markdown `ask()` requires, and the decision approves or declines it."},"approve":{"type":"string","description":"The option label that approves the plan; every other option declines it. Named rather than positional so no UI infers the verdict from option order. An `approve` naming no option of its own question is rejected at `ask()`."},"callId":{"type":"string","description":"Logged tool invocation whose arguments contain the reviewed plan."}},"required":["kind","approve"],"additionalProperties":true,"description":"Optional presentation intent for capable UIs; absent asks for the generic option list."}},"required":["id","question"],"additionalProperties":true}},"state":{"type":"string","enum":["open","continued"]}},"required":["callId","questions","state"],"additionalProperties":true},"description":"Calls that can still take an answer, in ask order."},"settled":{"type":"array","items":{"type":"object","properties":{"callId":{"type":"string","description":"The settled call."},"answers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The answered question id."},"selected":{"type":"array","items":{"type":"string"},"description":"Selected option labels. May accompany custom text for a multi-select question."},"custom":{"type":"string","description":"Optional free-text \"Other\" answer."}},"required":["id","selected"],"additionalProperties":true},"description":"The recorded batch, one entry per question; empty when the late reply carried none."}},"required":["callId","answers"],"additionalProperties":true},"description":"Calls an answer settled, in settlement order."}},"required":["active","settled"],"additionalProperties":true,"description":"Timed questions that remain answerable in this Session, and the ones a late reply settled."},"goal":{"oneOf":[{"type":"null","const":null},{"type":"object","properties":{"goal":{"type":"object","properties":{"objective":{"type":"string","description":"Human-requested completion objective."},"phase":{"type":"string","enum":["active","paused","blocked","complete"],"description":"Durable lifecycle phase."},"blockedReason":{"type":"object","properties":{"code":{"type":"string","description":"Stable lower-kebab-case classification chosen by the blocking policy."},"message":{"type":"string","description":"Non-empty explanation shown to humans and models."}},"required":["code","message"],"additionalProperties":true,"description":"Present exactly while `phase` is `blocked`."},"maxGoalRounds":{"type":"number","description":"Total admitted goal-round cap."},"id":{"type":"string","description":"Stable goal identity."},"revision":{"type":"number","description":"Positive revision; every durable mutation increments it."}},"required":["objective","phase","maxGoalRounds","id","revision"],"additionalProperties":true,"description":"Current durable goal snapshot (the CAS ref for mutations rides on it)."},"roundsStarted":{"type":"number","description":"Highest admitted round number for this goal."},"createdAt":{"type":"number","description":"Epoch milliseconds of the create mutation."},"updatedAt":{"type":"number","description":"Epoch milliseconds of the latest mutation."}},"required":["goal","roundsStarted","createdAt","updatedAt"],"additionalProperties":true}],"description":"The session's current goal and admitted-round count, or `null` before the first create and after a clear tombstone. `goal/change` supplies the whole lifecycle value; matching admitted `user/message` events advance `roundsStarted`."},"plan":{"type":"object","properties":{"active":{"type":"boolean"},"pending":{"type":"boolean"}},"required":["active","pending"],"additionalProperties":true,"description":"Plan collaboration state folded from the plan command lifecycle and `plan/mode` events."}},"required":[],"additionalProperties":true}},"required":["kind","values"],"additionalProperties":true}]},
1290
1779
  },
1291
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":498,"column":9},
1780
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":548,"column":9},
1292
1781
  },
1293
- {
1294
- id: '@deepseek-ai/dsh-api-session-controller#session/prompt',
1782
+ 'session/prompt': {
1295
1783
  service: 'sessionController',
1296
- namespace: 'session',
1297
- method: 'prompt',
1784
+ description: 'Admit one prompt after explicitly resuming its Session.',
1298
1785
  invocation: { kind: 'direct' },
1299
1786
  parameters: [
1300
1787
  {
1301
1788
  name: 'request',
1302
- wire: 'request',
1789
+ description: 'Session identity, prompt content, source metadata, and delivery mode.',
1303
1790
  source: 'json',
1304
1791
  codec: {
1305
1792
  mode: 'strict',
1306
1793
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionPromptRequest',
1307
1794
  create: _deepseek_ai_dsh_api_session_controller_session_prompt_parameter_0$schema,
1795
+ jsonSchema: {"type":"object","properties":{"requestId":{"type":"string","description":"Client-minted identity persisted on the exact accepted user message."},"sessionId":{"type":"string"},"mode":{"type":"string","enum":["queue","steer"]},"content":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"text"},"text":{"type":"string"}},"required":["type","text"],"additionalProperties":true},{"type":"object","properties":{"type":{"type":"string","const":"image"},"mediaType":{"type":"string","enum":["image/png","image/jpeg","image/webp","image/gif"]},"data":{"type":"string"},"name":{"type":"string"}},"required":["type","mediaType","data"],"additionalProperties":true},{"type":"object","properties":{"type":{"type":"string","const":"file"},"receiptId":{"type":"string"}},"required":["type","receiptId"],"additionalProperties":true}]},"description":"At least one non-whitespace text part or attachment."},"clientTimeZone":{"type":"string"}},"required":["requestId","sessionId","mode","content"],"additionalProperties":true},
1796
+ },
1797
+ strictCodec: {
1798
+ mode: 'strict',
1799
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionPromptRequest',
1800
+ create: _deepseek_ai_dsh_api_session_controller_session_prompt_parameter_0_strict$schema,
1801
+ jsonSchema: {"type":"object","properties":{"requestId":{"type":"string","description":"Client-minted identity persisted on the exact accepted user message."},"sessionId":{"type":"string"},"mode":{"type":"string","enum":["queue","steer"]},"content":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"text"},"text":{"type":"string"}},"required":["type","text"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"image"},"mediaType":{"type":"string","enum":["image/png","image/jpeg","image/webp","image/gif"]},"data":{"type":"string"},"name":{"type":"string"}},"required":["type","mediaType","data"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"file"},"receiptId":{"type":"string"}},"required":["type","receiptId"],"additionalProperties":false}]},"description":"At least one non-whitespace text part or attachment."},"clientTimeZone":{"type":"string"}},"required":["requestId","sessionId","mode","content"],"additionalProperties":false},
1308
1802
  },
1309
1803
  },
1310
1804
  ],
@@ -1313,24 +1807,31 @@ export const TYPERT = {
1313
1807
  mode: 'strict',
1314
1808
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionPromptValue',
1315
1809
  create: _deepseek_ai_dsh_api_session_controller_session_prompt_result$schema,
1810
+ description: 'acknowledgement that the Agent accepted the prompt.',
1811
+ jsonSchema: {"type":"object","properties":{"accepted":{"type":"boolean","const":true}},"required":["accepted"],"additionalProperties":true},
1316
1812
  },
1317
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":433,"column":3},
1813
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":462,"column":9},
1318
1814
  },
1319
- {
1320
- id: '@deepseek-ai/dsh-api-session-controller#session/rename',
1815
+ 'session/rename': {
1321
1816
  service: 'sessionController',
1322
- namespace: 'session',
1323
- method: 'rename',
1817
+ description: 'Rename one Session after explicitly resuming it.',
1324
1818
  invocation: { kind: 'direct' },
1325
1819
  parameters: [
1326
1820
  {
1327
1821
  name: 'request',
1328
- wire: 'request',
1822
+ description: 'Session identity and proposed title.',
1329
1823
  source: 'json',
1330
1824
  codec: {
1331
1825
  mode: 'strict',
1332
1826
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionRenameRequest',
1333
1827
  create: _deepseek_ai_dsh_api_session_controller_session_rename_parameter_0$schema,
1828
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"},"title":{"type":"string"}},"required":["sessionId","title"],"additionalProperties":true},
1829
+ },
1830
+ strictCodec: {
1831
+ mode: 'strict',
1832
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionRenameRequest',
1833
+ create: _deepseek_ai_dsh_api_session_controller_session_rename_parameter_0_strict$schema,
1834
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"},"title":{"type":"string"}},"required":["sessionId","title"],"additionalProperties":false},
1334
1835
  },
1335
1836
  },
1336
1837
  ],
@@ -1338,24 +1839,31 @@ export const TYPERT = {
1338
1839
  mode: 'strict',
1339
1840
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionRenameValue',
1340
1841
  create: _deepseek_ai_dsh_api_session_controller_session_rename_result$schema,
1842
+ description: 'the accepted title and durable event sequence.',
1843
+ jsonSchema: {"type":"object","properties":{"title":{"type":"string"},"seq":{"type":"number"}},"required":["title","seq"],"additionalProperties":true},
1341
1844
  },
1342
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":410,"column":3},
1845
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":431,"column":3},
1343
1846
  },
1344
- {
1345
- id: '@deepseek-ai/dsh-api-session-controller#session/search',
1847
+ 'session/search': {
1346
1848
  service: 'sessionController',
1347
- namespace: 'session',
1348
- method: 'search',
1849
+ description: 'Search visible Session content without resuming an Agent. A non-owner receives only the hits whose Session `allows()` admits; `hasMore` describes the bounded result before that filtering.',
1349
1850
  invocation: { kind: 'direct' },
1350
1851
  parameters: [
1351
1852
  {
1352
1853
  name: 'request',
1353
- wire: 'request',
1854
+ description: 'literal message-content query.',
1354
1855
  source: 'json',
1355
1856
  codec: {
1356
1857
  mode: 'strict',
1357
1858
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionSearchRequest',
1358
1859
  create: _deepseek_ai_dsh_api_session_controller_session_search_parameter_0$schema,
1860
+ jsonSchema: {"type":"object","properties":{"query":{"type":"string"}},"required":["query"],"additionalProperties":true},
1861
+ },
1862
+ strictCodec: {
1863
+ mode: 'strict',
1864
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionSearchRequest',
1865
+ create: _deepseek_ai_dsh_api_session_controller_session_search_parameter_0_strict$schema,
1866
+ jsonSchema: {"type":"object","properties":{"query":{"type":"string"}},"required":["query"],"additionalProperties":false},
1359
1867
  },
1360
1868
  },
1361
1869
  ],
@@ -1364,24 +1872,31 @@ export const TYPERT = {
1364
1872
  mode: 'strict',
1365
1873
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionSearchValue',
1366
1874
  create: _deepseek_ai_dsh_api_session_controller_session_search_result$schema,
1875
+ description: 'authorized bounded Session search results.',
1876
+ jsonSchema: {"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"sessionId":{"type":"string"},"snippet":{"type":"string"}},"required":["sessionId","snippet"],"additionalProperties":true}},"hasMore":{"type":"boolean"}},"required":["items","hasMore"],"additionalProperties":true},
1367
1877
  },
1368
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":270,"column":3},
1878
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":290,"column":9},
1369
1879
  },
1370
- {
1371
- id: '@deepseek-ai/dsh-api-session-controller#session/selectModel',
1880
+ 'session/selectModel': {
1372
1881
  service: 'sessionController',
1373
- namespace: 'session',
1374
- method: 'selectModel',
1882
+ description: 'Select one Session-local model after explicitly resuming the Session; save the default in the background.',
1375
1883
  invocation: { kind: 'direct' },
1376
1884
  parameters: [
1377
1885
  {
1378
1886
  name: 'request',
1379
- wire: 'request',
1887
+ description: 'Session identity and requested model selection.',
1380
1888
  source: 'json',
1381
1889
  codec: {
1382
1890
  mode: 'strict',
1383
1891
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionSelectModelRequest',
1384
1892
  create: _deepseek_ai_dsh_api_session_controller_session_selectModel_parameter_0$schema,
1893
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"},"provider":{"type":"string"},"model":{"type":"string"},"reasoningEffort":{"type":"string"}},"required":["sessionId","provider","model"],"additionalProperties":true},
1894
+ },
1895
+ strictCodec: {
1896
+ mode: 'strict',
1897
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionSelectModelRequest',
1898
+ create: _deepseek_ai_dsh_api_session_controller_session_selectModel_parameter_0_strict$schema,
1899
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"},"provider":{"type":"string"},"model":{"type":"string"},"reasoningEffort":{"type":"string"}},"required":["sessionId","provider","model"],"additionalProperties":false},
1385
1900
  },
1386
1901
  },
1387
1902
  ],
@@ -1389,24 +1904,31 @@ export const TYPERT = {
1389
1904
  mode: 'strict',
1390
1905
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionSelectModelValue',
1391
1906
  create: _deepseek_ai_dsh_api_session_controller_session_selectModel_result$schema,
1907
+ description: 'the normalized selection installed for the Session, without waiting for default persistence.',
1908
+ jsonSchema: {"type":"object","properties":{"selected":{"type":"object","properties":{"provider":{"type":"string"},"model":{"type":"string"},"reasoningEffort":{"type":"string"}},"required":["provider","model"],"additionalProperties":true}},"required":["selected"],"additionalProperties":true},
1392
1909
  },
1393
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":290,"column":3},
1910
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":311,"column":3},
1394
1911
  },
1395
- {
1396
- id: '@deepseek-ai/dsh-api-session-controller#session/updateQueue',
1912
+ 'session/updateQueue': {
1397
1913
  service: 'sessionController',
1398
- namespace: 'session',
1399
- method: 'updateQueue',
1914
+ description: 'Mutate one still-pending queue occurrence, resuming a cold Agent first.',
1400
1915
  invocation: { kind: 'direct' },
1401
1916
  parameters: [
1402
1917
  {
1403
1918
  name: 'request',
1404
- wire: 'request',
1919
+ description: 'Session, queue item, and requested mutation.',
1405
1920
  source: 'json',
1406
1921
  codec: {
1407
1922
  mode: 'strict',
1408
1923
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionUpdateQueueRequest',
1409
1924
  create: _deepseek_ai_dsh_api_session_controller_session_updateQueue_parameter_0$schema,
1925
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"},"itemId":{"type":"string"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"edit"},"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"text"},"text":{"type":"string"}},"required":["type","text"],"additionalProperties":true},"description":"Non-empty text-only replacement content."}},"required":["kind","content"],"additionalProperties":true},{"type":"object","properties":{"kind":{"type":"string","const":"remove"}},"required":["kind"],"additionalProperties":true},{"type":"object","properties":{"kind":{"type":"string","const":"steer"}},"required":["kind"],"additionalProperties":true}]}},"required":["sessionId","itemId","action"],"additionalProperties":true},
1926
+ },
1927
+ strictCodec: {
1928
+ mode: 'strict',
1929
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionUpdateQueueRequest',
1930
+ create: _deepseek_ai_dsh_api_session_controller_session_updateQueue_parameter_0_strict$schema,
1931
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"},"itemId":{"type":"string"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"edit"},"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"text"},"text":{"type":"string"}},"required":["type","text"],"additionalProperties":false},"description":"Non-empty text-only replacement content."}},"required":["kind","content"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"remove"}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"steer"}},"required":["kind"],"additionalProperties":false}]}},"required":["sessionId","itemId","action"],"additionalProperties":false},
1410
1932
  },
1411
1933
  },
1412
1934
  ],
@@ -1414,24 +1936,31 @@ export const TYPERT = {
1414
1936
  mode: 'strict',
1415
1937
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionUpdateQueueValue',
1416
1938
  create: _deepseek_ai_dsh_api_session_controller_session_updateQueue_result$schema,
1939
+ description: 'acknowledgement that the queue mutation was applied.',
1940
+ jsonSchema: {"type":"object","properties":{"accepted":{"type":"boolean","const":true}},"required":["accepted"],"additionalProperties":true},
1417
1941
  },
1418
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":454,"column":3},
1942
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":504,"column":3},
1419
1943
  },
1420
- {
1421
- id: '@deepseek-ai/dsh-api-session-controller#session/workspacePathApplications',
1944
+ 'session/workspacePathApplications': {
1422
1945
  service: 'sessionController',
1423
- namespace: 'session',
1424
- method: 'workspacePathApplications',
1946
+ description: 'Query current file handlers on the serving desktop without activating an Agent.',
1425
1947
  invocation: { kind: 'direct' },
1426
1948
  parameters: [
1427
1949
  {
1428
1950
  name: 'request',
1429
- wire: 'request',
1951
+ description: 'file path in Host filesystem syntax.',
1430
1952
  source: 'json',
1431
1953
  codec: {
1432
1954
  mode: 'strict',
1433
1955
  typeSymbol: '@deepseek-ai/dsh-api-session-controller#session/workspacePathApplications:request',
1434
1956
  create: _deepseek_ai_dsh_api_session_controller_session_workspacePathApplications_parameter_0$schema,
1957
+ jsonSchema: {"type":"object","properties":{"path":{"type":"string"}},"required":["path"],"additionalProperties":true},
1958
+ },
1959
+ strictCodec: {
1960
+ mode: 'strict',
1961
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller#session/workspacePathApplications:request',
1962
+ create: _deepseek_ai_dsh_api_session_controller_session_workspacePathApplications_parameter_0_strict$schema,
1963
+ jsonSchema: {"type":"object","properties":{"path":{"type":"string"}},"required":["path"],"additionalProperties":false},
1435
1964
  },
1436
1965
  },
1437
1966
  ],
@@ -1440,24 +1969,31 @@ export const TYPERT = {
1440
1969
  mode: 'strict',
1441
1970
  typeSymbol: '@deepseek-ai/dsh-api-session-controller#session/workspacePathApplications:result',
1442
1971
  create: _deepseek_ai_dsh_api_session_controller_session_workspacePathApplications_result$schema,
1972
+ description: 'OS application names, icons, and default selection; empty when desktop opening is unavailable.',
1973
+ jsonSchema: {"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"OS application identifier; callers must revalidate it against the file's current handlers before opening."},"name":{"type":"string"},"default":{"type":"boolean"},"icon":{"oneOf":[{"type":"null","const":null},{"type":"string"}],"description":"PNG or SVG data URL, or null when the desktop supplies no icon."}},"required":["id","name","default","icon"],"additionalProperties":true}},
1443
1974
  },
1444
- sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":377,"column":9},
1975
+ sourceLocation: {"file":"packages/api/session-controller/src/index.ts","line":398,"column":9},
1445
1976
  },
1446
- {
1447
- id: '@deepseek-ai/dsh-api-session-controller#skills/list',
1977
+ 'skills/list': {
1448
1978
  service: 'sessionSkillCatalog',
1449
- namespace: 'skills',
1450
- method: 'list',
1979
+ description: 'List the user-invocable skills visible to one Session composition.',
1451
1980
  invocation: { kind: 'direct' },
1452
1981
  parameters: [
1453
1982
  {
1454
1983
  name: 'request',
1455
- wire: 'request',
1984
+ description: 'Session identity whose cwd and preset select the catalog view.',
1456
1985
  source: 'json',
1457
1986
  codec: {
1458
1987
  mode: 'strict',
1459
1988
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SkillListRequest',
1460
1989
  create: _deepseek_ai_dsh_api_session_controller_skills_list_parameter_0$schema,
1990
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"}},"required":["sessionId"],"additionalProperties":true},
1991
+ },
1992
+ strictCodec: {
1993
+ mode: 'strict',
1994
+ typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SkillListRequest',
1995
+ create: _deepseek_ai_dsh_api_session_controller_skills_list_parameter_0_strict$schema,
1996
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string"}},"required":["sessionId"],"additionalProperties":false},
1461
1997
  },
1462
1998
  },
1463
1999
  ],
@@ -1466,10 +2002,20 @@ export const TYPERT = {
1466
2002
  mode: 'strict',
1467
2003
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SkillListValue',
1468
2004
  create: _deepseek_ai_dsh_api_session_controller_skills_list_result$schema,
2005
+ description: 'user-invocable skill metadata without loading skill bodies.',
2006
+ jsonSchema: {"type":"object","properties":{"skills":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"Absolute SKILL.md path when supplied by a filesystem provider."},"name":{"type":"string","description":"Kebab-case identifier referenced as `/name`."},"description":{"type":"string","description":"Short routing description."},"whenToUse":{"type":"string","description":"Optional extra routing guidance."},"modelInvocable":{"type":"boolean","description":"Whether the same skill is also advertised to the model."}},"required":["name","description","modelInvocable"],"additionalProperties":true}}},"required":["skills"],"additionalProperties":true},
1469
2007
  },
1470
- sourceLocation: {"file":"packages/api/session-controller/src/skill-catalog.ts","line":35,"column":9},
2008
+ sourceLocation: {"file":"packages/api/session-controller/src/skill-catalog.ts","line":36,"column":9},
1471
2009
  },
2010
+ },
2011
+ }, z)
2012
+
2013
+ export const TYPERT = {
2014
+ package: '@deepseek-ai/dsh-api-session-controller',
2015
+ face: 'host',
2016
+ schemas: [
1472
2017
  ],
2018
+ get invocations() { return $remote.descriptors },
1473
2019
  model: {
1474
2020
  "services": [
1475
2021
  {
@@ -1504,16 +2050,16 @@ export const TYPERT = {
1504
2050
  {
1505
2051
  "kind": "method",
1506
2052
  "name": "search",
1507
- "signature": "@Remote('search') search(request: SessionSearchRequest, signal: AbortSignal): Promise<SessionSearchValue>",
2053
+ "signature": "@Remote('search') async search(request: SessionSearchRequest, signal: AbortSignal): Promise<SessionSearchValue>",
1508
2054
  "summary": "Search visible Session content without resuming an Agent.",
1509
- "jsDoc": "/**\n * Search visible Session content without resuming an Agent.\n * @param request - literal message-content query.\n * @param signal - cancellation for list and search reads.\n * @returns authorized bounded Session search results.\n */"
2055
+ "jsDoc": "/**\n * Search visible Session content without resuming an Agent. A non-owner\n * receives only the hits whose Session `allows()` admits; `hasMore`\n * describes the bounded result before that filtering.\n * @param request - literal message-content query.\n * @param signal - cancellation for list and search reads.\n * @returns authorized bounded Session search results.\n */"
1510
2056
  },
1511
2057
  {
1512
2058
  "kind": "method",
1513
2059
  "name": "create",
1514
2060
  "signature": "@Remote('create') create(request: SessionCreateRequest): Promise<SessionCreateValue>",
1515
- "summary": "Create or idempotently adopt one ordinary Session.",
1516
- "jsDoc": "/**\n * Create or idempotently adopt one ordinary Session.\n * @param request - requested identity, location, and Agent preset.\n * @returns the Session identity and resolved preset when configured.\n */"
2061
+ "summary": "Create one ordinary Session for a new conversation, reusing the named blank Session while it is reusable.",
2062
+ "jsDoc": "/**\n * Create one ordinary Session for a new conversation, reusing the named blank Session while it is reusable.\n * @param request - optional blank Session to reuse, location, and Agent preset.\n * @returns the created or reused Session identity and its preset when configured.\n */"
1517
2063
  },
1518
2064
  {
1519
2065
  "kind": "method",
@@ -1574,14 +2120,14 @@ export const TYPERT = {
1574
2120
  {
1575
2121
  "kind": "method",
1576
2122
  "name": "fork",
1577
- "signature": "@Remote('fork') fork(request: SessionForkRequest): Promise<SessionForkValue>",
2123
+ "signature": "@Remote('fork') async fork(request: SessionForkRequest): Promise<SessionForkValue>",
1578
2124
  "summary": "Fork one cold-readable exact event prefix into a new Session.",
1579
- "jsDoc": "/**\n * Fork one cold-readable exact event prefix into a new Session. An omitted\n * boundary selects the latest completed-turn prefix; an open cut receives\n * synthetic fork closers.\n * @param request - source Session and optional exact inclusive event boundary.\n * @returns the new Session identity.\n */"
2125
+ "jsDoc": "/**\n * Fork one cold-readable exact event prefix into a new Session. An omitted\n * boundary selects the latest completed-turn prefix; an open cut receives\n * synthetic fork closers.\n * @param request - source Session, optional exact inclusive event boundary, and migration preflight choice.\n * @returns the new Session identity.\n */"
1580
2126
  },
1581
2127
  {
1582
2128
  "kind": "method",
1583
2129
  "name": "prompt",
1584
- "signature": "@Remote('prompt') prompt(request: SessionPromptRequest, signal: AbortSignal): Promise<SessionPromptValue>",
2130
+ "signature": "@Remote('prompt') async prompt(request: SessionPromptRequest, signal: AbortSignal): Promise<SessionPromptValue>",
1585
2131
  "summary": "Admit one prompt after explicitly resuming its Session.",
1586
2132
  "jsDoc": "/**\n * Admit one prompt after explicitly resuming its Session.\n * @param request - Session identity, prompt content, source metadata, and delivery mode.\n * @param signal - caller cancellation before prompt admission begins.\n * @returns acknowledgement that the Agent accepted the prompt.\n */"
1587
2133
  },
@@ -1609,14 +2155,14 @@ export const TYPERT = {
1609
2155
  {
1610
2156
  "kind": "method",
1611
2157
  "name": "page",
1612
- "signature": "@Remote('page') page(request: SessionPageRequest, signal: AbortSignal): Promise<SessionPage>",
2158
+ "signature": "@Remote({ name: 'page', resources: { session: addressedSession } }) page(request: SessionPageRequest, signal: AbortSignal): Promise<SessionPage>",
1613
2159
  "summary": "Read one cold-safe, message-aligned Session history page.",
1614
2160
  "jsDoc": "/**\n * Read one cold-safe, message-aligned Session history page.\n * @param request - durable address, backward cursor, and page budget.\n * @param signal - cancellation for persistence reads.\n * @returns one chronological page.\n */"
1615
2161
  },
1616
2162
  {
1617
2163
  "kind": "method",
1618
2164
  "name": "follow",
1619
- "signature": "@Remote({ mode: 'stream' }) follow(request: SessionFollowRequest, signal: AbortSignal): AsyncIterable<SessionFollowFrame>",
2165
+ "signature": "@Remote({ mode: 'stream', resources: { session: addressedSession } }) follow(request: SessionFollowRequest, signal: AbortSignal): AsyncIterable<SessionFollowFrame>",
1620
2166
  "summary": "Follow one Session log from its opening or resume cursor.",
1621
2167
  "jsDoc": "/**\n * Follow one Session log from its opening or resume cursor.\n * @param request - durable address and last committed sequence already held by the caller.\n * @param signal - cancellation owned by the Remote stream carrier.\n * @returns a complete opening snapshot followed by gap-free durable event\n * frames and optional cursorless assistant-stream frames.\n */"
1622
2168
  },
@@ -1624,13 +2170,13 @@ export const TYPERT = {
1624
2170
  "kind": "method",
1625
2171
  "name": "projections",
1626
2172
  "signature": "@Remote('projections') async projections(request: SessionProjectionsRequest, signal: AbortSignal): Promise<SessionProjectionsValue>",
1627
- "summary": "Read all registered projections without activating an Agent.",
1628
- "jsDoc": "/**\n * Read all registered projections without activating an Agent.\n * @param request - Session whose current values are required.\n * @param signal - cancellation for the Session observation.\n * @returns complete baseline, or null when the Session does not exist.\n */"
2173
+ "summary": "Read exact projections, returning cached hints only when migration is required.",
2174
+ "jsDoc": "/**\n * Read exact projections, returning cached hints only when migration is required.\n * @param request - Session whose current values are required.\n * @param signal - cancellation for the Session read.\n * @returns a sequenced baseline, cached hints when migration is deferred, or null when absent.\n */"
1629
2175
  },
1630
2176
  {
1631
2177
  "kind": "method",
1632
2178
  "name": "control",
1633
- "signature": "@Remote({ mode: 'stream' }) control(signal: AbortSignal): AsyncIterable<SessionControlFrame>",
2179
+ "signature": "@Remote({ mode: 'stream' }) async *control(signal: AbortSignal): AsyncIterable<SessionControlFrame>",
1634
2180
  "summary": "Stream a complete live-control baseline followed by replacement frames.",
1635
2181
  "jsDoc": "/**\n * Stream a complete live-control baseline followed by replacement frames.\n * @param signal - cancellation owned by the Remote stream carrier.\n * @returns one complete baseline followed by live replacement frames.\n */"
1636
2182
  }
@@ -1660,6 +2206,10 @@ export const TYPERT = {
1660
2206
  "name": "AgentStatus",
1661
2207
  "declaration": "export type AgentStatus = 'idle' | 'running';"
1662
2208
  },
2209
+ {
2210
+ "name": "AllowedModelRoute",
2211
+ "declaration": "export interface AllowedModelRoute {\n readonly provider: string;\n readonly model: string;\n}"
2212
+ },
1663
2213
  {
1664
2214
  "name": "ApiSessionAgentError",
1665
2215
  "declaration": "export type ApiSessionAgentError = RemoteError<'session/not-found' | 'session/agent-busy' | 'session/writer-held' | 'gateway/internal'>;"
@@ -1900,6 +2450,26 @@ export const TYPERT = {
1900
2450
  "name": "JobId",
1901
2451
  "declaration": "export type JobId = Branded<'JobId'>;"
1902
2452
  },
2453
+ {
2454
+ "name": "JobOutcome",
2455
+ "declaration": "export interface JobOutcome {\n status: 'completed' | 'killed' | 'failed';\n detail?: string;\n result?: string;\n}"
2456
+ },
2457
+ {
2458
+ "name": "JobRegisteredData",
2459
+ "declaration": "export interface JobRegisteredData {\n readonly jobId: JobId;\n readonly owner: SessionId;\n readonly kind: string;\n readonly label: string;\n readonly startedAt: number;\n readonly toolCall?: JobToolCall;\n}"
2460
+ },
2461
+ {
2462
+ "name": "JobSettleCause",
2463
+ "declaration": "export type JobSettleCause = 'producer' | 'kill' | 'teardown';"
2464
+ },
2465
+ {
2466
+ "name": "JobSettledData",
2467
+ "declaration": "export interface JobSettledData extends JobRegisteredData {\n readonly finishedAt: number;\n readonly status: JobOutcome['status'];\n readonly cause: JobSettleCause;\n readonly producerReported: boolean;\n readonly detail?: string;\n}"
2468
+ },
2469
+ {
2470
+ "name": "JobToolCall",
2471
+ "declaration": "export interface JobToolCall {\n readonly callId: SessionEventMap['tool/call']['callId'];\n readonly rootCallId: SessionEventMap['tool/call']['callId'];\n}"
2472
+ },
1903
2473
  {
1904
2474
  "name": "JsonValue",
1905
2475
  "declaration": "export type JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue; };"
@@ -1930,12 +2500,16 @@ export const TYPERT = {
1930
2500
  },
1931
2501
  {
1932
2502
  "name": "LlmCallConfig",
1933
- "declaration": "export interface LlmCallConfig {\n provider: string;\n model: string;\n reasoningEffort?: ReasoningEffortId;\n temperature?: number;\n maxTokens?: number;\n stop?: string[];\n}"
2503
+ "declaration": "export interface LlmCallConfig extends LlmCallControls {\n provider: string;\n model: string;\n}"
1934
2504
  },
1935
2505
  {
1936
2506
  "name": "LlmCallConfigAdapterDefaults",
1937
2507
  "declaration": "export interface LlmCallConfigAdapterDefaults {\n reasoningEffort?: true;\n maxTokens?: true;\n}"
1938
2508
  },
2509
+ {
2510
+ "name": "LlmCallControls",
2511
+ "declaration": "export interface LlmCallControls {\n reasoningEffort?: ReasoningEffortId;\n temperature?: number;\n maxTokens?: number;\n stop?: string[];\n}"
2512
+ },
1939
2513
  {
1940
2514
  "name": "LlmFailure",
1941
2515
  "declaration": "export interface LlmFailure {\n readonly message: string;\n readonly code: string;\n readonly status?: number;\n readonly providerRetryAfterMs?: number;\n readonly requestId?: ProviderRequestId;\n readonly offloadImages?: number;\n}"
@@ -1990,7 +2564,7 @@ export const TYPERT = {
1990
2564
  },
1991
2565
  {
1992
2566
  "name": "MessageSourceMap",
1993
- "declaration": "export interface MessageSourceMap {\n user: { kind: 'user'; };\n model: ModelMessageSource;\n tool: ToolMessageSource;\n 'system-prompt': SystemPromptMessageSource;\n 'model-selection': { kind: 'model-selection'; } & ContextFormed;\n 'user-approval': { kind: 'user-approval'; } & ContextFormed;\n 'ptc-mode': { kind: 'ptc-mode'; };\n 'tool-registry': { kind: 'tool-registry'; };\n 'user-rpc': { kind: 'user'; rpcId: SessionRequestId; clientTimeZone?: string; };\n 'agent-message': AgentMessageSource;\n 'subagent-settled': SubagentSettledMessageSource;\n 'skill-invocation': SkillInvocationSource;\n 'cordis-host-runner': { kind: 'cordis-host-runner'; };\n 'compact-checkpoint': CompactionCheckpointSource;\n 'user-question-reply': { kind: 'user-question-reply'; callId: ToolCallId; outcome: 'answered'; };\n goal: GoalMessageSource;\n schedule: { kind: 'schedule'; } & ContextFormed;\n 'session-reference': SessionReferenceSource;\n}"
2567
+ "declaration": "export interface MessageSourceMap {\n user: { kind: 'user'; };\n model: ModelMessageSource;\n tool: ToolMessageSource;\n 'system-prompt': SystemPromptMessageSource;\n 'model-selection': { kind: 'model-selection'; } & ContextFormed;\n 'runtime-context': { kind: 'runtime-context'; } & ContextFormed;\n 'working-directory': { kind: 'working-directory'; };\n 'user-approval': { kind: 'user-approval'; } & ContextFormed;\n 'ptc-mode': { kind: 'ptc-mode'; };\n 'tool-registry': { kind: 'tool-registry'; };\n 'user-rpc': { kind: 'user'; rpcId: SessionRequestId; clientTimeZone?: string; principal?: Principal; };\n 'agent-message': AgentMessageSource;\n 'subagent-settled': SubagentSettledMessageSource;\n 'skill-invocation': SkillInvocationSource;\n 'compact-checkpoint': CompactionCheckpointSource;\n 'cordis-host-runner': { kind: 'cordis-host-runner'; };\n 'team-message': TeamMessageSource;\n 'user-question-reply': { kind: 'user-question-reply'; callId: ToolCallId; outcome: 'answered'; };\n goal: GoalMessageSource;\n 'plan-mode': { kind: 'plan-mode'; } & ContextFormed;\n schedule: { kind: 'schedule'; } & ContextFormed;\n 'session-reference': SessionReferenceSource;\n webhook: { readonly kind: 'webhook'; readonly provider: string; readonly source: WebhookSourceId; readonly deliveryId: WebhookDeliveryId; readonly ruleId: WebhookRuleId; readonly form: 'notice'; readonly summary: string; };\n}"
1994
2568
  },
1995
2569
  {
1996
2570
  "name": "ModelCatalog",
@@ -2056,6 +2630,18 @@ export const TYPERT = {
2056
2630
  "name": "PermissionSelection",
2057
2631
  "declaration": "export interface PermissionSelection {\n currentValue: string;\n}"
2058
2632
  },
2633
+ {
2634
+ "name": "PlanProjection",
2635
+ "declaration": "export interface PlanProjection {\n active: boolean;\n pending: boolean;\n}"
2636
+ },
2637
+ {
2638
+ "name": "Principal",
2639
+ "declaration": "export type Principal = PrincipalMap[keyof PrincipalMap];"
2640
+ },
2641
+ {
2642
+ "name": "PrincipalMap",
2643
+ "declaration": "export interface PrincipalMap {\n owner: { readonly kind: 'owner'; };\n}"
2644
+ },
2059
2645
  {
2060
2646
  "name": "PromptContentPart",
2061
2647
  "declaration": "export type PromptContentPart = { readonly type: 'text'; readonly text: string; } | { readonly type: 'image'; readonly mediaType: ImageMediaType; readonly data: string; readonly name?: string; } | { readonly type: 'file'; readonly receiptId: Branded<'file-upload-receipt-id'>; };"
@@ -2066,7 +2652,7 @@ export const TYPERT = {
2066
2652
  },
2067
2653
  {
2068
2654
  "name": "PtcDispatchEventData",
2069
- "declaration": "export interface PtcDispatchEventData extends PtcDispatchStartEventData {\n isError: boolean;\n content: ContentBlock[];\n error?: { name: string; code: string; reason?: string; };\n}"
2655
+ "declaration": "export interface PtcDispatchEventData extends PtcDispatchStartEventData {\n isError: boolean;\n content: ContentBlock[];\n meta?: JsonValue;\n error?: { name: string; code: string; reason?: string; };\n}"
2070
2656
  },
2071
2657
  {
2072
2658
  "name": "PtcDispatchStartEventData",
@@ -2084,6 +2670,10 @@ export const TYPERT = {
2084
2670
  "name": "ReasoningEffortId",
2085
2671
  "declaration": "export type ReasoningEffortId = Branded<'ReasoningEffortId'>;"
2086
2672
  },
2673
+ {
2674
+ "name": "RemoteAccessDeniedDetails",
2675
+ "declaration": "export interface RemoteAccessDeniedDetails {\n readonly action: string;\n readonly reason: string;\n}"
2676
+ },
2087
2677
  {
2088
2678
  "name": "RemoteError",
2089
2679
  "declaration": "export class RemoteError<Code extends RemoteErrorCode = RemoteErrorCode> extends Error {\n readonly isDSHRemoteError: true;\n}"
@@ -2094,7 +2684,7 @@ export const TYPERT = {
2094
2684
  },
2095
2685
  {
2096
2686
  "name": "RemoteErrorDetailsMap",
2097
- "declaration": "export interface RemoteErrorDetailsMap {\n 'gateway/bad-request': { readonly issues?: readonly object[]; };\n 'gateway/cancelled': {};\n 'gateway/internal': {};\n 'llm/model-discovery-rejected': { readonly settingsNs: string; readonly baseURL?: string; };\n 'session/not-found': { readonly sessionId: SessionId; };\n 'workspace/not-found': { readonly workspaceId: WorkspaceId; };\n 'agent-preset/not-found': { readonly agentPreset: string; readonly available: readonly string[]; };\n 'agent-preset/invalid': { readonly agentPreset: string; readonly reason: string; };\n 'agent-preset/locked': { readonly sessionId: SessionId; readonly agentPreset: string; };\n 'job/not-found': { readonly sessionId: SessionId; readonly jobId: JobId; };\n 'session/provider-credentials-unavailable': Record<string, never>;\n 'session/provider-models-unavailable': { readonly provider: string; };\n 'session/model-unavailable': { readonly provider: string; readonly model: string; };\n 'session/conflict': { readonly sessionId: SessionId; readonly requestedCwd: string; readonly existingCwd?: string; };\n 'session/projections-unavailable': Record<string, never>;\n 'session/writer-held': { readonly sessionId: SessionId; };\n 'session/agent-busy': { readonly reason: string; };\n 'session/invalid-time-zone': { readonly value: string; };\n 'session/workspace-attach-failed': { readonly sessionId: SessionId; readonly workspaceId: string; };\n 'agent-preset/conflict': { readonly sessionId: SessionId; readonly requestedPreset: string; readonly existingPreset?: string; };\n 'session/attachment-invalid': { readonly reason: string; };\n 'session/queue-item-not-found': { readonly itemId: MessageId; };\n 'session/steer-unavailable': { readonly itemId: MessageId; };\n 'session/title-invalid': { readonly sessionId: SessionId; };\n 'session/fork-unavailable': { readonly sessionId: SessionId; };\n 'subagent/not-found': { readonly parentSessionId: SessionId; readonly childSessionId: SessionId; };\n 'subagent/catalog-diagnostic': { readonly parentSessionId: SessionId; readonly childSessionId: SessionId; readonly reason: 'corrupt' | 'unsupported' | 'unavailable'; };\n 'subagent/invalid-time-zone': { readonly value: string; };\n 'subagent/parent-unavailable': { readonly parentSessionId: SessionId; };\n 'subagent/not-resumable': { readonly childSessionId: SessionId; };\n 'subagent/unauthorized': { readonly childSessionId: SessionId; };\n 'subagent/attachment-invalid': { readonly reason: string; };\n 'subagent/delivery-unavailable': { readonly childSessionId: SessionId; };\n 'settings/rejected': { readonly ns: string; };\n 'settings/conflict': { readonly ns: string; readonly expected: number; readonly actual: number; };\n 'credential/rejected': { readonly ref: string; };\n 'terminal/unavailable': Record<string, never>;\n 'terminal/control-unavailable': { readonly reason: 'read-only' | 'not-running'; };\n 'terminal/limit-reached': { readonly limit: number; };\n 'workspace/invalid-path': { readonly path: string; };\n 'workspace/name-conflict': { readonly name: string; };\n 'workspace/session-active': { readonly sessionId: SessionId; readonly activity: readonly SessionActivity[]; };\n 'workspace/move-invalid': { readonly workspaceId: WorkspaceId; readonly sessionId: SessionId; readonly beforeSessionId?: SessionId; };\n 'directory-picker/unavailable': { readonly capability: string; };\n 'directory-picker/unreadable': { readonly path: string; };\n 'directory-picker/exists': { readonly path: string; };\n 'directory-picker/create-failed': { readonly path: string; };\n 'workspace-file/watch-unsupported': { readonly path: string; };\n 'workspace-file/not-found': { readonly path: string; };\n 'workspace-file/outside-workspace': { readonly path: string; };\n 'workspace-file/too-large': { readonly path: string; readonly limit: number; };\n 'workspace-file/not-text': { readonly path: string; };\n 'workspace-file/not-regular-file': { readonly path: string; readonly kind: 'directory' | 'symlink' | 'other'; };\n 'workspace-file/not-directory': { readonly path: string; readonly kind: 'file' | 'symlink' | 'other'; };\n 'gateway/ambiguous-endpoint': TypertGatewayFaultDetails;\n 'gateway/arguments-invalid': TypertGatewayFaultDetails;\n 'gateway/binding-invalid': TypertGatewayFaultDetails;\n 'gateway/context-failed': TypertGatewayFaultDetails;\n 'gateway/context-not-found': TypertGatewayFaultDetails;\n 'gateway/context-unavailable': TypertGatewayFaultDetails;\n 'gateway/definition-unavailable': TypertGatewayFaultDetails;\n 'gateway/input-invalid': TypertGatewayFaultDetails;\n 'gateway/invocation-unavailable': TypertGatewayFaultDetails;\n 'gateway/lookup-failed': TypertGatewayFaultDetails;\n 'gateway/lookup-not-found': TypertGatewayFaultDetails;\n 'gateway/lookup-unavailable': TypertGatewayFaultDetails;\n 'gateway/method-unavailable': TypertGatewayFaultDetails;\n 'gateway/protocol': TypertGatewayFaultDetails;\n 'gateway/provider-mismatch': TypertGatewayFaultDetails;\n 'gateway/result-invalid': TypertGatewayFaultDetails;\n 'gateway/service-unavailable': TypertGatewayFaultDetails;\n 'gateway/signature-invalid': TypertGatewayFaultDetails;\n 'gateway/uplink-overflow': TypertGatewayFaultDetails;\n 'speech/invalid-audio': { readonly reason: string; };\n 'speech/transcription-failed': { readonly reason: string; };\n 'document-render/failed': { readonly reason: OfficeToPdfErrorCode; };\n}"
2687
+ "declaration": "export interface RemoteErrorDetailsMap {\n 'gateway/bad-request': { readonly issues?: readonly object[]; };\n 'gateway/cancelled': {};\n 'gateway/internal': {};\n 'llm/model-discovery-rejected': { readonly settingsNs: string; readonly baseURL?: string; };\n 'session/not-found': { readonly sessionId: SessionId; };\n 'workspace/not-found': { readonly workspaceId: WorkspaceId; };\n 'agent-preset/not-found': { readonly agentPreset: string; readonly available: readonly string[]; };\n 'agent-preset/invalid': { readonly agentPreset: string; readonly reason: string; };\n 'agent-preset/locked': { readonly sessionId: SessionId; readonly agentPreset: string; };\n 'remote-access/denied': RemoteAccessDeniedDetails;\n 'gateway/ambiguous-endpoint': TypertGatewayFaultDetails;\n 'gateway/arguments-invalid': TypertGatewayFaultDetails;\n 'gateway/binding-invalid': TypertGatewayFaultDetails;\n 'gateway/context-failed': TypertGatewayFaultDetails;\n 'gateway/context-not-found': TypertGatewayFaultDetails;\n 'gateway/context-unavailable': TypertGatewayFaultDetails;\n 'gateway/definition-unavailable': TypertGatewayFaultDetails;\n 'gateway/input-invalid': TypertGatewayFaultDetails;\n 'gateway/interactions-forbidden': TypertGatewayFaultDetails;\n 'gateway/invocation-unavailable': TypertGatewayFaultDetails;\n 'gateway/lookup-failed': TypertGatewayFaultDetails;\n 'gateway/lookup-not-found': TypertGatewayFaultDetails;\n 'gateway/lookup-unavailable': TypertGatewayFaultDetails;\n 'gateway/method-unavailable': TypertGatewayFaultDetails;\n 'gateway/peer-disposed': TypertGatewayFaultDetails;\n 'gateway/protocol': TypertGatewayFaultDetails;\n 'gateway/provider-mismatch': TypertGatewayFaultDetails;\n 'gateway/result-invalid': TypertGatewayFaultDetails;\n 'gateway/service-unavailable': TypertGatewayFaultDetails;\n 'gateway/signature-invalid': TypertGatewayFaultDetails;\n 'gateway/uplink-overflow': TypertGatewayFaultDetails;\n 'job/not-found': { readonly sessionId: SessionId; readonly jobId: JobId; };\n 'session/provider-credentials-unavailable': Record<string, never>;\n 'session/provider-models-unavailable': { readonly provider: string; };\n 'session/model-unavailable': { readonly provider: string; readonly model: string; };\n 'session/conflict': { readonly sessionId: SessionId; readonly requestedCwd: string; readonly existingCwd?: string; };\n 'session/projections-unavailable': Record<string, never>;\n 'session/writer-held': { readonly sessionId: SessionId; };\n 'session/agent-busy': { readonly reason: string; };\n 'session/invalid-time-zone': { readonly value: string; };\n 'session/workspace-attach-failed': { readonly sessionId: SessionId; readonly workspaceId: string; };\n 'agent-preset/conflict': { readonly sessionId: SessionId; readonly requestedPreset: string; };\n 'session/attachment-invalid': { readonly reason: string; };\n 'session/queue-item-not-found': { readonly itemId: MessageId; };\n 'session/steer-unavailable': { readonly itemId: MessageId; };\n 'session/title-invalid': { readonly sessionId: SessionId; };\n 'session/fork-unavailable': { readonly sessionId: SessionId; };\n 'session/migration-required': { readonly sessionId: SessionId; };\n 'subagent/not-found': { readonly parentSessionId: SessionId; readonly childSessionId: SessionId; };\n 'subagent/catalog-diagnostic': { readonly parentSessionId: SessionId; readonly childSessionId: SessionId; readonly reason: 'corrupt' | 'unsupported' | 'unavailable'; };\n 'subagent/invalid-time-zone': { readonly value: string; };\n 'subagent/parent-unavailable': { readonly parentSessionId: SessionId; };\n 'subagent/not-resumable': { readonly childSessionId: SessionId; };\n 'subagent/unauthorized': { readonly childSessionId: SessionId; };\n 'subagent/attachment-invalid': { readonly reason: string; };\n 'subagent/delivery-unavailable': { readonly childSessionId: SessionId; };\n 'settings/rejected': { readonly ns: string; };\n 'settings/conflict': { readonly ns: string; readonly expected: number; readonly actual: number; };\n 'credential/rejected': { readonly ref: string; };\n 'terminal/unavailable': Record<string, never>;\n 'terminal/control-unavailable': { readonly reason: 'read-only' | 'not-running'; };\n 'terminal/limit-reached': { readonly limit: number; };\n 'workspace/invalid-path': { readonly path: string; };\n 'workspace/name-conflict': { readonly name: string; };\n 'workspace/session-active': { readonly sessionId: SessionId; readonly activity: readonly SessionActivity[]; };\n 'workspace/move-invalid': { readonly workspaceId: WorkspaceId; readonly sessionId: SessionId; readonly beforeSessionId?: SessionId; };\n 'directory-picker/unavailable': { readonly capability: string; };\n 'directory-picker/unreadable': { readonly path: string; };\n 'directory-picker/exists': { readonly path: string; };\n 'directory-picker/create-failed': { readonly path: string; };\n 'workspace-file/watch-unsupported': { readonly path: string; };\n 'workspace-file/not-found': { readonly path: string; };\n 'workspace-file/outside-workspace': { readonly path: string; };\n 'workspace-file/too-large': { readonly path: string; readonly limit: number; };\n 'workspace-file/not-text': { readonly path: string; };\n 'workspace-file/not-regular-file': { readonly path: string; readonly kind: 'directory' | 'symlink' | 'other'; };\n 'workspace-file/not-directory': { readonly path: string; readonly kind: 'file' | 'symlink' | 'other'; };\n 'speech/invalid-audio': { readonly reason: string; };\n 'speech/transcription-failed': { readonly reason: string; };\n 'cotTranslation/failed': Record<string, never>;\n 'document-render/failed': { readonly reason: OfficeToPdfErrorCode; };\n}"
2098
2688
  },
2099
2689
  {
2100
2690
  "name": "ReplayEnvelope",
@@ -2214,7 +2804,7 @@ export const TYPERT = {
2214
2804
  },
2215
2805
  {
2216
2806
  "name": "SessionEventMap",
2217
- "declaration": "export interface SessionEventMap {\n 'turn/start': { turn: number; };\n 'turn/end': { turn: number; reason: TurnEndReason; };\n 'step/start': { turn: number; step: number; };\n 'step/end': { turn: number; step: number; };\n 'user/message': UserMessage;\n 'developer/message': { turn: number; step: number; message: DeveloperMessage; headerSeq?: SessionSeq; };\n 'system/message': { turn: number; step: number; message: SystemMessage; };\n 'assistant/message': { turn: number; step: number; message: AssistantMessage; stream: AssistantStreamRecord[]; usage?: TokenUsage; interrupted?: true; };\n 'assistant/attempt': { turn: number; step: number; stream: AssistantStreamRecord[]; };\n 'tool/call': { turn: number; step: number; callId: ToolCallId; name: string; arguments: string; };\n 'tool/result': { turn: number; step: number; message: ToolResultMessage; error?: { name: string; code: string; reason?: string; }; meta?: JsonValue; };\n 'request/header': { header: EpochHeader; reason: RequestHeaderReason; startsSeries?: true; };\n 'request/context': RequestContext;\n 'session/end-seed': { inherited?: true; };\n 'agent/inbox/spliced': { target: InboxTarget; start: number; removedCount?: number; inserted: UserMessage[]; outcome?: 'canceled'; };\n 'sandbox/mode': { mode: SandboxMode; source?: 'delegation'; };\n 'approval/asked': { id: ApprovalRequestId; toolName: string; callId?: ToolCallId; reason?: string; };\n 'approval/decided': { id: ApprovalRequestId; outcome: ApprovalOutcome; };\n 'approval/policy': { policy: ApprovalPolicy; source?: 'delegation'; };\n 'tool/ptc-dispatch-start': PtcDispatchStartEventData;\n 'tool/ptc-dispatch': PtcDispatchEventData;\n 'agent-preset/selected': { agentPreset: string; };\n 'command/run': { commandId: CommandId; name: string; args?: string; source: CommandSource; };\n 'command/done': { commandId: CommandId; kind: 'success' | 'error'; text?: string; sourceEventSeq?: import('@deepseek-ai/dsh-session/types').SessionSeq; };\n 'image/offload': { targets: ImageOffloadTarget[]; };\n 'session/title': SessionTitleEventData;\n 'todo/write': { todos: TodoItem[]; };\n 'model/selection': ModelSelection;\n 'subagent/descriptor': SubagentDescriptorData;\n 'permission/preset': { preset: string; };\n 'subagent/catalog': SubagentCatalogEvent;\n 'compaction/start': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; };\n 'compaction/summary': { compactionId: CompactionId; sourceCommandId?: CommandId; summary: ContentBlock[]; shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; provider: string; model: string; maxTokens?: number; usage?: TokenUsage; } & ({ rawOutput: ContentBlock[]; llmStreamCall: true; } | { rawOutput?: ContentBlock[]; llmStreamCall?: never; });\n 'compaction/end': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; error?: string; };\n 'compaction/prune': { shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; };\n 'feedback/record': FeedbackRecord;\n 'llm/retry': LlmRetryEventData;\n 'llm/retry-started': LlmRetryStartedEventData;\n 'goal/change': GoalChangeMeta;\n 'feedback/message-put': MessageFeedbackPut;\n 'feedback/message-delete': MessageFeedbackDelete;\n 'schedule/change': ScheduleChange;\n}"
2807
+ "declaration": "export interface SessionEventMap {\n 'turn/start': { turn: number; };\n 'turn/end': { turn: number; reason: TurnEndReason; };\n 'step/start': { turn: number; step: number; };\n 'step/end': { turn: number; step: number; };\n 'user/message': UserMessage;\n 'developer/message': { turn: number; step: number; message: DeveloperMessage; headerSeq?: SessionSeq; };\n 'system/message': { turn: number; step: number; message: SystemMessage; };\n 'assistant/message': { turn: number; step: number; message: AssistantMessage; stream: AssistantStreamRecord[]; usage?: TokenUsage; interrupted?: true; };\n 'assistant/attempt': { turn: number; step: number; stream: AssistantStreamRecord[]; };\n 'tool/call': { turn: number; step: number; callId: ToolCallId; name: string; arguments: string; };\n 'tool/result': { turn: number; step: number; message: ToolResultMessage; error?: { name: string; code: string; reason?: string; }; meta?: JsonValue; };\n 'request/header': { header: EpochHeader; reason: RequestHeaderReason; startsSeries?: true; };\n 'request/context': RequestContext;\n 'session/end-seed': { inherited?: true; };\n 'agent/inbox/spliced': { target: InboxTarget; start: number; removedCount?: number; inserted: UserMessage[]; outcome?: 'canceled'; };\n 'working-directory/change': { cwd: string; };\n 'sandbox/mode': { mode: SandboxMode; source?: 'delegation'; };\n 'approval/asked': { id: ApprovalRequestId; toolName: string; callId?: ToolCallId; reason?: string; };\n 'approval/decided': { id: ApprovalRequestId; outcome: ApprovalOutcome; };\n 'approval/policy': { policy: ApprovalPolicy; source?: 'delegation'; };\n 'tool/ptc-dispatch-start': PtcDispatchStartEventData;\n 'tool/ptc-dispatch': PtcDispatchEventData;\n 'agent-preset/selected': { agentPreset: string; };\n 'job/registered': JobRegisteredData;\n 'job/settled': JobSettledData;\n 'command/run': { commandId: CommandId; name: string; args?: string; source: CommandSource; };\n 'command/done': { commandId: CommandId; kind: 'success' | 'error'; text?: string; sourceEventSeq?: import('@deepseek-ai/dsh-session/types').SessionSeq; };\n 'image/offload': { targets: ImageOffloadTarget[]; };\n 'session/title': SessionTitleEventData;\n 'todo/write': { todos: TodoItem[]; };\n 'model/selection': ModelSelection;\n 'permission/preset': { preset: string; };\n 'subagent/descriptor': SubagentDescriptorData;\n 'subagent/catalog': SubagentCatalogEvent;\n 'compaction/start': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; };\n 'compaction/summary': { compactionId: CompactionId; sourceCommandId?: CommandId; summary: ContentBlock[]; shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; provider: string; model: string; maxTokens?: number; usage?: TokenUsage; } & ({ rawOutput: ContentBlock[]; llmStreamCall: true; } | { rawOutput?: ContentBlock[]; llmStreamCall?: never; });\n 'compaction/end': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; error?: string; };\n 'compaction/prune': { shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; };\n 'feedback/record': FeedbackRecord;\n 'llm/retry': LlmRetryEventData;\n 'llm/retry-started': LlmRetryStartedEventData;\n 'team/member': { version: 2; teamId: TeamId; member: TeamMemberSnapshot; };\n 'team/task': { version: 2; teamId: TeamId; task: TeamTaskSnapshot; };\n 'team/message/queued': { version: 2; teamId: TeamId; message: TeamMessageSnapshot; };\n 'team/message/delivered': { version: 2; teamId: TeamId; messageId: TeamMessageId; targetId: SessionId; };\n 'goal/change': GoalChangeMeta;\n 'feedback/message-put': MessageFeedbackPut;\n 'feedback/message-delete': MessageFeedbackDelete;\n 'plan/mode': { active: boolean; };\n 'schedule/change': ScheduleChange;\n 'subagent/model-selection-policy': { allowedModels: AllowedModelRoute[]; };\n 'workspace/changes': { turn: number; };\n}"
2218
2808
  },
2219
2809
  {
2220
2810
  "name": "SessionEventType",
@@ -2230,7 +2820,7 @@ export const TYPERT = {
2230
2820
  },
2231
2821
  {
2232
2822
  "name": "SessionForkRequest",
2233
- "declaration": "export interface SessionForkRequest {\n readonly sessionId: SessionId;\n readonly atSeq?: number;\n}"
2823
+ "declaration": "export interface SessionForkRequest {\n readonly sessionId: SessionId;\n readonly atSeq?: number;\n readonly allowMigration?: boolean;\n}"
2234
2824
  },
2235
2825
  {
2236
2826
  "name": "SessionForkValue",
@@ -2294,7 +2884,7 @@ export const TYPERT = {
2294
2884
  },
2295
2885
  {
2296
2886
  "name": "SessionProjectionMap",
2297
- "declaration": "export interface SessionProjectionMap {\n inbox: InboxWireState;\n agentPreset: string | null;\n title: string | null;\n todos: TodoItem[] | null;\n sessionListMetadata: SessionListMetadata;\n imageLimits: ImageAttachmentLimits;\n modelSelection: ModelSelectionProjection;\n permissions: PermissionSelection;\n subagentCatalog: SubagentCatalogEntry[];\n subagentTiming: SubagentTimingProjection;\n subagent: SubagentIdentityProjection | null;\n tokenUsage: TokenUsageProjection;\n contextPressure: ContextPressureProjection;\n contextBreakdown: ContextBreakdownProjection;\n userQuestions: UserQuestionProjectionView;\n goal: GoalProjection | null;\n}"
2887
+ "declaration": "export interface SessionProjectionMap {\n inbox: InboxWireState;\n workingDirectory: string | null;\n agentPreset: string | null;\n title: string | null;\n todos: TodoItem[] | null;\n sessionListMetadata: SessionListMetadata;\n imageLimits: ImageAttachmentLimits;\n modelSelection: ModelSelectionProjection;\n permissions: PermissionSelection;\n subagentCatalog: SubagentCatalogEntry[];\n subagentTiming: SubagentTimingProjection;\n subagent: SubagentIdentityProjection | null;\n tokenUsage: TokenUsageProjection;\n contextPressure: ContextPressureProjection;\n contextBreakdown: ContextBreakdownProjection;\n agentTeam: TeamProjection;\n userQuestions: UserQuestionProjectionView;\n goal: GoalProjection | null;\n plan: PlanProjection;\n}"
2298
2888
  },
2299
2889
  {
2300
2890
  "name": "SessionProjectionsRequest",
@@ -2302,7 +2892,7 @@ export const TYPERT = {
2302
2892
  },
2303
2893
  {
2304
2894
  "name": "SessionProjectionsValue",
2305
- "declaration": "export type SessionProjectionsValue = SessionProjectionBaseline | null;"
2895
+ "declaration": "export type SessionProjectionsValue = (SessionProjectionBaseline & { readonly kind: 'sequenced'; }) | { readonly kind: 'migration-required'; readonly values: SessionProjectionValues; } | null;"
2306
2896
  },
2307
2897
  {
2308
2898
  "name": "SessionProjectionUpdate",
@@ -2374,7 +2964,7 @@ export const TYPERT = {
2374
2964
  },
2375
2965
  {
2376
2966
  "name": "SessionSummary",
2377
- "declaration": "export interface SessionSummary {\n readonly agentAvailable: boolean;\n readonly sessionId: SessionId;\n readonly updatedAt: number;\n readonly running: boolean;\n readonly blank: boolean;\n readonly parentSessionId?: SessionId;\n readonly origin?: 'subagent';\n readonly cwd?: string;\n readonly projections?: SessionProjectionHints;\n}"
2967
+ "declaration": "export interface SessionSummary {\n readonly agentAvailable: boolean;\n readonly formatStatus?: 'current' | 'migration-required';\n readonly sessionId: SessionId;\n readonly updatedAt: number;\n readonly running: boolean;\n readonly blank: boolean;\n readonly parentSessionId?: SessionId;\n readonly origin?: 'subagent';\n readonly cwd?: string;\n readonly projections?: SessionProjectionHints;\n}"
2378
2968
  },
2379
2969
  {
2380
2970
  "name": "SessionSurface",
@@ -2430,11 +3020,11 @@ export const TYPERT = {
2430
3020
  },
2431
3021
  {
2432
3022
  "name": "SubagentCatalogEntry",
2433
- "declaration": "export type SubagentCatalogEntry = { readonly id: SessionId; readonly createdAt: number; } & ({ readonly mode: 'one-shot'; readonly label?: string; } | { readonly mode: 'continuable'; readonly label: string; } | { readonly mode: 'unknown'; readonly label?: string; });"
3023
+ "declaration": "export type SubagentCatalogEntry = { readonly id: SessionId; readonly createdAt: number; } & ({ readonly mode: 'one-shot'; readonly label?: string; } | { readonly mode: 'external'; readonly label?: string; } | { readonly mode: 'continuable'; readonly label: string; } | { readonly mode: 'unknown'; readonly label?: string; });"
2434
3024
  },
2435
3025
  {
2436
3026
  "name": "SubagentCatalogEvent",
2437
- "declaration": "export type SubagentCatalogEvent = { readonly childId: SessionId; readonly childCreatedAt: number; } & (({ readonly version: 0; } & KnownCatalogMode) | ({ readonly version: 1; } & (KnownCatalogMode | { readonly mode: 'unknown'; readonly label?: string; })));"
3027
+ "declaration": "export type SubagentCatalogEvent = { readonly childId: SessionId; readonly childCreatedAt: number; } & (({ readonly version: 0; } & KnownCatalogMode) | ({ readonly version: 1; } & (KnownCatalogMode | { readonly mode: 'unknown'; readonly label?: string; })) | { readonly version: 2; readonly mode: 'external'; readonly label?: string; });"
2438
3028
  },
2439
3029
  {
2440
3030
  "name": "SubagentDescriptorBase",
@@ -2480,6 +3070,54 @@ export const TYPERT = {
2480
3070
  "name": "SystemPromptUpdate",
2481
3071
  "declaration": "export type SystemPromptUpdate = 'in-history';"
2482
3072
  },
3073
+ {
3074
+ "name": "TeamId",
3075
+ "declaration": "export type TeamId = Branded<'TeamId'>;"
3076
+ },
3077
+ {
3078
+ "name": "TeamMemberPhase",
3079
+ "declaration": "export type TeamMemberPhase = 'provisioning' | 'active' | 'failed';"
3080
+ },
3081
+ {
3082
+ "name": "TeamMemberProjection",
3083
+ "declaration": "export interface TeamMemberProjection {\n readonly id: SessionId;\n readonly name: string;\n readonly role: 'lead' | 'teammate';\n readonly phase: TeamMemberPhase;\n readonly error?: string;\n}"
3084
+ },
3085
+ {
3086
+ "name": "TeamMemberSnapshot",
3087
+ "declaration": "export interface TeamMemberSnapshot {\n readonly id: SessionId;\n readonly name: string;\n readonly description: string;\n readonly provider: string;\n readonly context: 'fresh' | 'fork';\n readonly phase: TeamMemberPhase;\n readonly error?: string;\n}"
3088
+ },
3089
+ {
3090
+ "name": "TeamMessageId",
3091
+ "declaration": "export type TeamMessageId = Branded<'TeamMessageId'>;"
3092
+ },
3093
+ {
3094
+ "name": "TeamMessageSnapshot",
3095
+ "declaration": "export interface TeamMessageSnapshot {\n readonly id: TeamMessageId;\n readonly senderId: SessionId;\n readonly senderName: string;\n readonly targetId: SessionId;\n readonly content: ContentBlock[];\n}"
3096
+ },
3097
+ {
3098
+ "name": "TeamMessageSource",
3099
+ "declaration": "export interface TeamMessageSource {\n readonly kind: 'team-message';\n readonly teamId: TeamId;\n readonly messageId: TeamMessageId;\n readonly senderId: SessionId;\n readonly senderName: string;\n}"
3100
+ },
3101
+ {
3102
+ "name": "TeamProjection",
3103
+ "declaration": "export interface TeamProjection {\n readonly members: TeamMemberProjection[];\n readonly tasks: TeamTaskView[];\n readonly failure?: string;\n}"
3104
+ },
3105
+ {
3106
+ "name": "TeamTaskId",
3107
+ "declaration": "export type TeamTaskId = Branded<'TeamTaskId'>;"
3108
+ },
3109
+ {
3110
+ "name": "TeamTaskSnapshot",
3111
+ "declaration": "export interface TeamTaskSnapshot {\n readonly id: TeamTaskId;\n readonly revision: number;\n readonly subject: string;\n readonly description: string;\n readonly status: TeamTaskStatus;\n readonly ownerId?: SessionId;\n readonly blockedBy: TeamTaskId[];\n readonly writeScopes: string[];\n}"
3112
+ },
3113
+ {
3114
+ "name": "TeamTaskStatus",
3115
+ "declaration": "export type TeamTaskStatus = 'pending' | 'in_progress' | 'completed' | 'deleted';"
3116
+ },
3117
+ {
3118
+ "name": "TeamTaskView",
3119
+ "declaration": "export interface TeamTaskView {\n readonly id: TeamTaskId;\n readonly revision: number;\n readonly subject: string;\n readonly description: string;\n readonly status: TeamTaskStatus;\n readonly blockedBy: TeamTaskId[];\n readonly writeScopes: string[];\n readonly ownerName?: string;\n readonly ready: boolean;\n readonly writeScopeWarnings: string[];\n}"
3120
+ },
2483
3121
  {
2484
3122
  "name": "TextBlock",
2485
3123
  "declaration": "export interface TextBlock {\n type: 'text';\n text: string;\n}"
@@ -2560,6 +3198,18 @@ export const TYPERT = {
2560
3198
  "name": "UserQuestionState",
2561
3199
  "declaration": "export type UserQuestionState = 'open' | 'continued';"
2562
3200
  },
3201
+ {
3202
+ "name": "WebhookDeliveryId",
3203
+ "declaration": "export type WebhookDeliveryId = Branded<'WebhookDeliveryId'>;"
3204
+ },
3205
+ {
3206
+ "name": "WebhookRuleId",
3207
+ "declaration": "export type WebhookRuleId = Branded<'WebhookRuleId'>;"
3208
+ },
3209
+ {
3210
+ "name": "WebhookSourceId",
3211
+ "declaration": "export type WebhookSourceId = Branded<'WebhookSourceId'>;"
3212
+ },
2563
3213
  {
2564
3214
  "name": "WorkspaceId",
2565
3215
  "declaration": "export type WorkspaceId = Branded<'WorkspaceId'>;"
@@ -2607,6 +3257,10 @@ export const TYPERT = {
2607
3257
  "name": "AgentStatus",
2608
3258
  "declaration": "export type AgentStatus = 'idle' | 'running';"
2609
3259
  },
3260
+ {
3261
+ "name": "AllowedModelRoute",
3262
+ "declaration": "export interface AllowedModelRoute {\n readonly provider: string;\n readonly model: string;\n}"
3263
+ },
2610
3264
  {
2611
3265
  "name": "ApprovalOutcome",
2612
3266
  "declaration": "export type ApprovalOutcome = 'allowed-once' | 'rejected' | 'cancelled' | 'unavailable';"
@@ -2803,6 +3457,30 @@ export const TYPERT = {
2803
3457
  "name": "InboxTarget",
2804
3458
  "declaration": "export type InboxTarget = 'next-turn' | 'next-step';"
2805
3459
  },
3460
+ {
3461
+ "name": "JobId",
3462
+ "declaration": "export type JobId = Branded<'JobId'>;"
3463
+ },
3464
+ {
3465
+ "name": "JobOutcome",
3466
+ "declaration": "export interface JobOutcome {\n status: 'completed' | 'killed' | 'failed';\n detail?: string;\n result?: string;\n}"
3467
+ },
3468
+ {
3469
+ "name": "JobRegisteredData",
3470
+ "declaration": "export interface JobRegisteredData {\n readonly jobId: JobId;\n readonly owner: SessionId;\n readonly kind: string;\n readonly label: string;\n readonly startedAt: number;\n readonly toolCall?: JobToolCall;\n}"
3471
+ },
3472
+ {
3473
+ "name": "JobSettleCause",
3474
+ "declaration": "export type JobSettleCause = 'producer' | 'kill' | 'teardown';"
3475
+ },
3476
+ {
3477
+ "name": "JobSettledData",
3478
+ "declaration": "export interface JobSettledData extends JobRegisteredData {\n readonly finishedAt: number;\n readonly status: JobOutcome['status'];\n readonly cause: JobSettleCause;\n readonly producerReported: boolean;\n readonly detail?: string;\n}"
3479
+ },
3480
+ {
3481
+ "name": "JobToolCall",
3482
+ "declaration": "export interface JobToolCall {\n readonly callId: SessionEventMap['tool/call']['callId'];\n readonly rootCallId: SessionEventMap['tool/call']['callId'];\n}"
3483
+ },
2806
3484
  {
2807
3485
  "name": "JsonValue",
2808
3486
  "declaration": "export type JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue; };"
@@ -2829,12 +3507,16 @@ export const TYPERT = {
2829
3507
  },
2830
3508
  {
2831
3509
  "name": "LlmCallConfig",
2832
- "declaration": "export interface LlmCallConfig {\n provider: string;\n model: string;\n reasoningEffort?: ReasoningEffortId;\n temperature?: number;\n maxTokens?: number;\n stop?: string[];\n}"
3510
+ "declaration": "export interface LlmCallConfig extends LlmCallControls {\n provider: string;\n model: string;\n}"
2833
3511
  },
2834
3512
  {
2835
3513
  "name": "LlmCallConfigAdapterDefaults",
2836
3514
  "declaration": "export interface LlmCallConfigAdapterDefaults {\n reasoningEffort?: true;\n maxTokens?: true;\n}"
2837
3515
  },
3516
+ {
3517
+ "name": "LlmCallControls",
3518
+ "declaration": "export interface LlmCallControls {\n reasoningEffort?: ReasoningEffortId;\n temperature?: number;\n maxTokens?: number;\n stop?: string[];\n}"
3519
+ },
2838
3520
  {
2839
3521
  "name": "LlmFailure",
2840
3522
  "declaration": "export interface LlmFailure {\n readonly message: string;\n readonly code: string;\n readonly status?: number;\n readonly providerRetryAfterMs?: number;\n readonly requestId?: ProviderRequestId;\n readonly offloadImages?: number;\n}"
@@ -2889,7 +3571,7 @@ export const TYPERT = {
2889
3571
  },
2890
3572
  {
2891
3573
  "name": "MessageSourceMap",
2892
- "declaration": "export interface MessageSourceMap {\n user: { kind: 'user'; };\n model: ModelMessageSource;\n tool: ToolMessageSource;\n 'system-prompt': SystemPromptMessageSource;\n 'model-selection': { kind: 'model-selection'; } & ContextFormed;\n 'user-approval': { kind: 'user-approval'; } & ContextFormed;\n 'ptc-mode': { kind: 'ptc-mode'; };\n 'tool-registry': { kind: 'tool-registry'; };\n 'user-rpc': { kind: 'user'; rpcId: SessionRequestId; clientTimeZone?: string; };\n 'agent-message': AgentMessageSource;\n 'subagent-settled': SubagentSettledMessageSource;\n 'skill-invocation': SkillInvocationSource;\n 'cordis-host-runner': { kind: 'cordis-host-runner'; };\n 'compact-checkpoint': CompactionCheckpointSource;\n 'user-question-reply': { kind: 'user-question-reply'; callId: ToolCallId; outcome: 'answered'; };\n goal: GoalMessageSource;\n schedule: { kind: 'schedule'; } & ContextFormed;\n 'session-reference': SessionReferenceSource;\n}"
3574
+ "declaration": "export interface MessageSourceMap {\n user: { kind: 'user'; };\n model: ModelMessageSource;\n tool: ToolMessageSource;\n 'system-prompt': SystemPromptMessageSource;\n 'model-selection': { kind: 'model-selection'; } & ContextFormed;\n 'runtime-context': { kind: 'runtime-context'; } & ContextFormed;\n 'working-directory': { kind: 'working-directory'; };\n 'user-approval': { kind: 'user-approval'; } & ContextFormed;\n 'ptc-mode': { kind: 'ptc-mode'; };\n 'tool-registry': { kind: 'tool-registry'; };\n 'user-rpc': { kind: 'user'; rpcId: SessionRequestId; clientTimeZone?: string; principal?: Principal; };\n 'agent-message': AgentMessageSource;\n 'subagent-settled': SubagentSettledMessageSource;\n 'skill-invocation': SkillInvocationSource;\n 'compact-checkpoint': CompactionCheckpointSource;\n 'cordis-host-runner': { kind: 'cordis-host-runner'; };\n 'team-message': TeamMessageSource;\n 'user-question-reply': { kind: 'user-question-reply'; callId: ToolCallId; outcome: 'answered'; };\n goal: GoalMessageSource;\n 'plan-mode': { kind: 'plan-mode'; } & ContextFormed;\n schedule: { kind: 'schedule'; } & ContextFormed;\n 'session-reference': SessionReferenceSource;\n webhook: { readonly kind: 'webhook'; readonly provider: string; readonly source: WebhookSourceId; readonly deliveryId: WebhookDeliveryId; readonly ruleId: WebhookRuleId; readonly form: 'notice'; readonly summary: string; };\n}"
2893
3575
  },
2894
3576
  {
2895
3577
  "name": "ModelMessageSource",
@@ -2911,13 +3593,21 @@ export const TYPERT = {
2911
3593
  "name": "OptionalSessionSeq",
2912
3594
  "declaration": "export type OptionalSessionSeq = SessionSeq | null;"
2913
3595
  },
3596
+ {
3597
+ "name": "Principal",
3598
+ "declaration": "export type Principal = PrincipalMap[keyof PrincipalMap];"
3599
+ },
3600
+ {
3601
+ "name": "PrincipalMap",
3602
+ "declaration": "export interface PrincipalMap {\n owner: { readonly kind: 'owner'; };\n}"
3603
+ },
2914
3604
  {
2915
3605
  "name": "ProviderRequestId",
2916
3606
  "declaration": "export type ProviderRequestId = Branded<'ProviderRequestId'>;"
2917
3607
  },
2918
3608
  {
2919
3609
  "name": "PtcDispatchEventData",
2920
- "declaration": "export interface PtcDispatchEventData extends PtcDispatchStartEventData {\n isError: boolean;\n content: ContentBlock[];\n error?: { name: string; code: string; reason?: string; };\n}"
3610
+ "declaration": "export interface PtcDispatchEventData extends PtcDispatchStartEventData {\n isError: boolean;\n content: ContentBlock[];\n meta?: JsonValue;\n error?: { name: string; code: string; reason?: string; };\n}"
2921
3611
  },
2922
3612
  {
2923
3613
  "name": "PtcDispatchStartEventData",
@@ -2981,7 +3671,7 @@ export const TYPERT = {
2981
3671
  },
2982
3672
  {
2983
3673
  "name": "SessionEventMap",
2984
- "declaration": "export interface SessionEventMap {\n 'turn/start': { turn: number; };\n 'turn/end': { turn: number; reason: TurnEndReason; };\n 'step/start': { turn: number; step: number; };\n 'step/end': { turn: number; step: number; };\n 'user/message': UserMessage;\n 'developer/message': { turn: number; step: number; message: DeveloperMessage; headerSeq?: SessionSeq; };\n 'system/message': { turn: number; step: number; message: SystemMessage; };\n 'assistant/message': { turn: number; step: number; message: AssistantMessage; stream: AssistantStreamRecord[]; usage?: TokenUsage; interrupted?: true; };\n 'assistant/attempt': { turn: number; step: number; stream: AssistantStreamRecord[]; };\n 'tool/call': { turn: number; step: number; callId: ToolCallId; name: string; arguments: string; };\n 'tool/result': { turn: number; step: number; message: ToolResultMessage; error?: { name: string; code: string; reason?: string; }; meta?: JsonValue; };\n 'request/header': { header: EpochHeader; reason: RequestHeaderReason; startsSeries?: true; };\n 'request/context': RequestContext;\n 'session/end-seed': { inherited?: true; };\n 'agent/inbox/spliced': { target: InboxTarget; start: number; removedCount?: number; inserted: UserMessage[]; outcome?: 'canceled'; };\n 'sandbox/mode': { mode: SandboxMode; source?: 'delegation'; };\n 'approval/asked': { id: ApprovalRequestId; toolName: string; callId?: ToolCallId; reason?: string; };\n 'approval/decided': { id: ApprovalRequestId; outcome: ApprovalOutcome; };\n 'approval/policy': { policy: ApprovalPolicy; source?: 'delegation'; };\n 'tool/ptc-dispatch-start': PtcDispatchStartEventData;\n 'tool/ptc-dispatch': PtcDispatchEventData;\n 'agent-preset/selected': { agentPreset: string; };\n 'command/run': { commandId: CommandId; name: string; args?: string; source: CommandSource; };\n 'command/done': { commandId: CommandId; kind: 'success' | 'error'; text?: string; sourceEventSeq?: import('@deepseek-ai/dsh-session/types').SessionSeq; };\n 'image/offload': { targets: ImageOffloadTarget[]; };\n 'session/title': SessionTitleEventData;\n 'todo/write': { todos: TodoItem[]; };\n 'model/selection': ModelSelection;\n 'subagent/descriptor': SubagentDescriptorData;\n 'permission/preset': { preset: string; };\n 'subagent/catalog': SubagentCatalogEvent;\n 'compaction/start': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; };\n 'compaction/summary': { compactionId: CompactionId; sourceCommandId?: CommandId; summary: ContentBlock[]; shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; provider: string; model: string; maxTokens?: number; usage?: TokenUsage; } & ({ rawOutput: ContentBlock[]; llmStreamCall: true; } | { rawOutput?: ContentBlock[]; llmStreamCall?: never; });\n 'compaction/end': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; error?: string; };\n 'compaction/prune': { shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; };\n 'feedback/record': FeedbackRecord;\n 'llm/retry': LlmRetryEventData;\n 'llm/retry-started': LlmRetryStartedEventData;\n 'goal/change': GoalChangeMeta;\n 'feedback/message-put': MessageFeedbackPut;\n 'feedback/message-delete': MessageFeedbackDelete;\n 'schedule/change': ScheduleChange;\n}"
3674
+ "declaration": "export interface SessionEventMap {\n 'turn/start': { turn: number; };\n 'turn/end': { turn: number; reason: TurnEndReason; };\n 'step/start': { turn: number; step: number; };\n 'step/end': { turn: number; step: number; };\n 'user/message': UserMessage;\n 'developer/message': { turn: number; step: number; message: DeveloperMessage; headerSeq?: SessionSeq; };\n 'system/message': { turn: number; step: number; message: SystemMessage; };\n 'assistant/message': { turn: number; step: number; message: AssistantMessage; stream: AssistantStreamRecord[]; usage?: TokenUsage; interrupted?: true; };\n 'assistant/attempt': { turn: number; step: number; stream: AssistantStreamRecord[]; };\n 'tool/call': { turn: number; step: number; callId: ToolCallId; name: string; arguments: string; };\n 'tool/result': { turn: number; step: number; message: ToolResultMessage; error?: { name: string; code: string; reason?: string; }; meta?: JsonValue; };\n 'request/header': { header: EpochHeader; reason: RequestHeaderReason; startsSeries?: true; };\n 'request/context': RequestContext;\n 'session/end-seed': { inherited?: true; };\n 'agent/inbox/spliced': { target: InboxTarget; start: number; removedCount?: number; inserted: UserMessage[]; outcome?: 'canceled'; };\n 'working-directory/change': { cwd: string; };\n 'sandbox/mode': { mode: SandboxMode; source?: 'delegation'; };\n 'approval/asked': { id: ApprovalRequestId; toolName: string; callId?: ToolCallId; reason?: string; };\n 'approval/decided': { id: ApprovalRequestId; outcome: ApprovalOutcome; };\n 'approval/policy': { policy: ApprovalPolicy; source?: 'delegation'; };\n 'tool/ptc-dispatch-start': PtcDispatchStartEventData;\n 'tool/ptc-dispatch': PtcDispatchEventData;\n 'agent-preset/selected': { agentPreset: string; };\n 'job/registered': JobRegisteredData;\n 'job/settled': JobSettledData;\n 'command/run': { commandId: CommandId; name: string; args?: string; source: CommandSource; };\n 'command/done': { commandId: CommandId; kind: 'success' | 'error'; text?: string; sourceEventSeq?: import('@deepseek-ai/dsh-session/types').SessionSeq; };\n 'image/offload': { targets: ImageOffloadTarget[]; };\n 'session/title': SessionTitleEventData;\n 'todo/write': { todos: TodoItem[]; };\n 'model/selection': ModelSelection;\n 'permission/preset': { preset: string; };\n 'subagent/descriptor': SubagentDescriptorData;\n 'subagent/catalog': SubagentCatalogEvent;\n 'compaction/start': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; };\n 'compaction/summary': { compactionId: CompactionId; sourceCommandId?: CommandId; summary: ContentBlock[]; shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; provider: string; model: string; maxTokens?: number; usage?: TokenUsage; } & ({ rawOutput: ContentBlock[]; llmStreamCall: true; } | { rawOutput?: ContentBlock[]; llmStreamCall?: never; });\n 'compaction/end': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; error?: string; };\n 'compaction/prune': { shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; };\n 'feedback/record': FeedbackRecord;\n 'llm/retry': LlmRetryEventData;\n 'llm/retry-started': LlmRetryStartedEventData;\n 'team/member': { version: 2; teamId: TeamId; member: TeamMemberSnapshot; };\n 'team/task': { version: 2; teamId: TeamId; task: TeamTaskSnapshot; };\n 'team/message/queued': { version: 2; teamId: TeamId; message: TeamMessageSnapshot; };\n 'team/message/delivered': { version: 2; teamId: TeamId; messageId: TeamMessageId; targetId: SessionId; };\n 'goal/change': GoalChangeMeta;\n 'feedback/message-put': MessageFeedbackPut;\n 'feedback/message-delete': MessageFeedbackDelete;\n 'plan/mode': { active: boolean; };\n 'schedule/change': ScheduleChange;\n 'subagent/model-selection-policy': { allowedModels: AllowedModelRoute[]; };\n 'workspace/changes': { turn: number; };\n}"
2985
3675
  },
2986
3676
  {
2987
3677
  "name": "SessionEventType",
@@ -3041,7 +3731,7 @@ export const TYPERT = {
3041
3731
  },
3042
3732
  {
3043
3733
  "name": "SubagentCatalogEvent",
3044
- "declaration": "export type SubagentCatalogEvent = { readonly childId: SessionId; readonly childCreatedAt: number; } & (({ readonly version: 0; } & KnownCatalogMode) | ({ readonly version: 1; } & (KnownCatalogMode | { readonly mode: 'unknown'; readonly label?: string; })));"
3734
+ "declaration": "export type SubagentCatalogEvent = { readonly childId: SessionId; readonly childCreatedAt: number; } & (({ readonly version: 0; } & KnownCatalogMode) | ({ readonly version: 1; } & (KnownCatalogMode | { readonly mode: 'unknown'; readonly label?: string; })) | { readonly version: 2; readonly mode: 'external'; readonly label?: string; });"
3045
3735
  },
3046
3736
  {
3047
3737
  "name": "SubagentDescriptorBase",
@@ -3079,6 +3769,42 @@ export const TYPERT = {
3079
3769
  "name": "SystemPromptUpdate",
3080
3770
  "declaration": "export type SystemPromptUpdate = 'in-history';"
3081
3771
  },
3772
+ {
3773
+ "name": "TeamId",
3774
+ "declaration": "export type TeamId = Branded<'TeamId'>;"
3775
+ },
3776
+ {
3777
+ "name": "TeamMemberPhase",
3778
+ "declaration": "export type TeamMemberPhase = 'provisioning' | 'active' | 'failed';"
3779
+ },
3780
+ {
3781
+ "name": "TeamMemberSnapshot",
3782
+ "declaration": "export interface TeamMemberSnapshot {\n readonly id: SessionId;\n readonly name: string;\n readonly description: string;\n readonly provider: string;\n readonly context: 'fresh' | 'fork';\n readonly phase: TeamMemberPhase;\n readonly error?: string;\n}"
3783
+ },
3784
+ {
3785
+ "name": "TeamMessageId",
3786
+ "declaration": "export type TeamMessageId = Branded<'TeamMessageId'>;"
3787
+ },
3788
+ {
3789
+ "name": "TeamMessageSnapshot",
3790
+ "declaration": "export interface TeamMessageSnapshot {\n readonly id: TeamMessageId;\n readonly senderId: SessionId;\n readonly senderName: string;\n readonly targetId: SessionId;\n readonly content: ContentBlock[];\n}"
3791
+ },
3792
+ {
3793
+ "name": "TeamMessageSource",
3794
+ "declaration": "export interface TeamMessageSource {\n readonly kind: 'team-message';\n readonly teamId: TeamId;\n readonly messageId: TeamMessageId;\n readonly senderId: SessionId;\n readonly senderName: string;\n}"
3795
+ },
3796
+ {
3797
+ "name": "TeamTaskId",
3798
+ "declaration": "export type TeamTaskId = Branded<'TeamTaskId'>;"
3799
+ },
3800
+ {
3801
+ "name": "TeamTaskSnapshot",
3802
+ "declaration": "export interface TeamTaskSnapshot {\n readonly id: TeamTaskId;\n readonly revision: number;\n readonly subject: string;\n readonly description: string;\n readonly status: TeamTaskStatus;\n readonly ownerId?: SessionId;\n readonly blockedBy: TeamTaskId[];\n readonly writeScopes: string[];\n}"
3803
+ },
3804
+ {
3805
+ "name": "TeamTaskStatus",
3806
+ "declaration": "export type TeamTaskStatus = 'pending' | 'in_progress' | 'completed' | 'deleted';"
3807
+ },
3082
3808
  {
3083
3809
  "name": "TextBlock",
3084
3810
  "declaration": "export interface TextBlock {\n type: 'text';\n text: string;\n}"
@@ -3142,6 +3868,18 @@ export const TYPERT = {
3142
3868
  {
3143
3869
  "name": "UserMessage",
3144
3870
  "declaration": "export interface UserMessage extends MessageBase {\n readonly role: 'user';\n}"
3871
+ },
3872
+ {
3873
+ "name": "WebhookDeliveryId",
3874
+ "declaration": "export type WebhookDeliveryId = Branded<'WebhookDeliveryId'>;"
3875
+ },
3876
+ {
3877
+ "name": "WebhookRuleId",
3878
+ "declaration": "export type WebhookRuleId = Branded<'WebhookRuleId'>;"
3879
+ },
3880
+ {
3881
+ "name": "WebhookSourceId",
3882
+ "declaration": "export type WebhookSourceId = Branded<'WebhookSourceId'>;"
3145
3883
  }
3146
3884
  ]
3147
3885
  },