@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 the Host 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,34 +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_REMOTE = {
1367
+ export const TYPERT_REMOTE = createTypertRemoteInfo({
954
1368
  package: '@deepseek-ai/dsh-api-session-controller',
955
- descriptors: [
956
- {
957
- id: '@deepseek-ai/dsh-api-session-controller#fileReferences/list',
1369
+ methods: {
1370
+ 'fileReferences/list': {
958
1371
  service: 'sessionFileReferences',
959
- namespace: 'fileReferences',
960
- method: 'list',
1372
+ description: 'List file and directory candidates for one Agent\'s working directory.',
961
1373
  invocation: { kind: 'direct' },
962
1374
  scope: {
963
1375
  context: 'agent',
@@ -967,22 +1379,37 @@ export const TYPERT_REMOTE = {
967
1379
  {
968
1380
  name: 'agent',
969
1381
  wire: 'agentId',
1382
+ description: 'target Agent resolved from the Session identity on the wire.',
970
1383
  source: 'lookup',
971
1384
  lookup: 'agent',
972
1385
  codec: {
973
1386
  mode: 'strict',
974
1387
  typeSymbol: '@deepseek-ai/dsh-session/types#SessionId',
975
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"},
976
1396
  },
977
1397
  },
978
1398
  {
979
1399
  name: 'query',
980
- wire: 'query',
1400
+ description: 'path text following `@` or `@"`.',
981
1401
  source: 'json',
982
1402
  codec: {
983
1403
  mode: 'strict',
984
1404
  typeSymbol: '@deepseek-ai/dsh-api-session-controller#fileReferences/list:query',
985
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"},
986
1413
  },
987
1414
  },
988
1415
  ],
@@ -991,24 +1418,31 @@ export const TYPERT_REMOTE = {
991
1418
  mode: 'strict',
992
1419
  typeSymbol: '@deepseek-ai/dsh-api-session-controller#fileReferences/list:result',
993
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}},
994
1423
  },
995
1424
  sourceLocation: {"file":"packages/api/session-controller/src/file-references.ts","line":33,"column":3},
996
1425
  },
997
- {
998
- id: '@deepseek-ai/dsh-api-session-controller#session/attachment',
1426
+ 'session/attachment': {
999
1427
  service: 'sessionController',
1000
- namespace: 'session',
1001
- method: 'attachment',
1428
+ description: 'Read one image proven reachable from the addressed Session log.',
1002
1429
  invocation: { kind: 'direct' },
1003
1430
  parameters: [
1004
1431
  {
1005
1432
  name: 'request',
1006
- wire: 'request',
1433
+ description: 'Session and attachment identities used for authorization.',
1007
1434
  source: 'json',
1008
1435
  codec: {
1009
1436
  mode: 'strict',
1010
1437
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionAttachmentRequest',
1011
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},
1012
1446
  },
1013
1447
  },
1014
1448
  ],
@@ -1016,24 +1450,31 @@ export const TYPERT_REMOTE = {
1016
1450
  mode: 'strict',
1017
1451
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionAttachmentValue',
1018
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},
1019
1455
  },
1020
- 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},
1021
1457
  },
1022
- {
1023
- id: '@deepseek-ai/dsh-api-session-controller#session/cancel',
1458
+ 'session/cancel': {
1024
1459
  service: 'sessionController',
1025
- namespace: 'session',
1026
- method: 'cancel',
1460
+ description: 'Cancel one active Agent turn without dropping its pending inbox.',
1027
1461
  invocation: { kind: 'direct' },
1028
1462
  parameters: [
1029
1463
  {
1030
1464
  name: 'request',
1031
- wire: 'request',
1465
+ description: 'Session whose active Agent turn is cancelled.',
1032
1466
  source: 'json',
1033
1467
  codec: {
1034
1468
  mode: 'strict',
1035
1469
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionCancelRequest',
1036
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},
1037
1478
  },
1038
1479
  },
1039
1480
  ],
@@ -1041,14 +1482,14 @@ export const TYPERT_REMOTE = {
1041
1482
  mode: 'strict',
1042
1483
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionCancelValue',
1043
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},
1044
1487
  },
1045
- 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},
1046
1489
  },
1047
- {
1048
- id: '@deepseek-ai/dsh-api-session-controller#session/canOpenWorkspacePath',
1490
+ 'session/canOpenWorkspacePath': {
1049
1491
  service: 'sessionController',
1050
- namespace: 'session',
1051
- method: 'canOpenWorkspacePath',
1492
+ description: 'Report whether this deployment can hand a Session workspace path to a native desktop.',
1052
1493
  invocation: { kind: 'direct' },
1053
1494
  parameters: [
1054
1495
  ],
@@ -1056,14 +1497,14 @@ export const TYPERT_REMOTE = {
1056
1497
  mode: 'strict',
1057
1498
  typeSymbol: '@deepseek-ai/dsh-api-session-controller#session/canOpenWorkspacePath:result',
1058
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"},
1059
1502
  },
1060
- 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},
1061
1504
  },
1062
- {
1063
- id: '@deepseek-ai/dsh-api-session-controller#session/control',
1505
+ 'session/control': {
1064
1506
  service: 'sessionController',
1065
- namespace: 'session',
1066
- method: 'control',
1507
+ description: 'Stream a complete live-control baseline followed by replacement frames.',
1067
1508
  mode: 'stream',
1068
1509
  invocation: { kind: 'direct' },
1069
1510
  parameters: [
@@ -1073,24 +1514,31 @@ export const TYPERT_REMOTE = {
1073
1514
  mode: 'strict',
1074
1515
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionControlFrame',
1075
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',
1076
1519
  },
1077
- 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},
1078
1521
  },
1079
- {
1080
- id: '@deepseek-ai/dsh-api-session-controller#session/create',
1522
+ 'session/create': {
1081
1523
  service: 'sessionController',
1082
- namespace: 'session',
1083
- method: 'create',
1524
+ description: 'Create one ordinary Session for a new conversation, reusing the named blank Session while it is reusable.',
1084
1525
  invocation: { kind: 'direct' },
1085
1526
  parameters: [
1086
1527
  {
1087
1528
  name: 'request',
1088
- wire: 'request',
1529
+ description: 'optional blank Session to reuse, location, and Agent preset.',
1089
1530
  source: 'json',
1090
1531
  codec: {
1091
1532
  mode: 'strict',
1092
1533
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionCreateRequest',
1093
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},
1094
1542
  },
1095
1543
  },
1096
1544
  ],
@@ -1098,25 +1546,32 @@ export const TYPERT_REMOTE = {
1098
1546
  mode: 'strict',
1099
1547
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionCreateValue',
1100
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},
1101
1551
  },
1102
- 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},
1103
1553
  },
1104
- {
1105
- id: '@deepseek-ai/dsh-api-session-controller#session/follow',
1554
+ 'session/follow': {
1106
1555
  service: 'sessionController',
1107
- namespace: 'session',
1108
- method: 'follow',
1556
+ description: 'Follow one Session log from its opening or resume cursor.',
1109
1557
  mode: 'stream',
1110
1558
  invocation: { kind: 'direct' },
1111
1559
  parameters: [
1112
1560
  {
1113
1561
  name: 'request',
1114
- wire: 'request',
1562
+ description: 'durable address and last committed sequence already held by the caller.',
1115
1563
  source: 'json',
1116
1564
  codec: {
1117
1565
  mode: 'strict',
1118
1566
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionFollowRequest',
1119
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},
1120
1575
  },
1121
1576
  },
1122
1577
  ],
@@ -1125,24 +1580,31 @@ export const TYPERT_REMOTE = {
1125
1580
  mode: 'strict',
1126
1581
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionFollowFrame',
1127
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}]},
1128
1585
  },
1129
- 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},
1130
1587
  },
1131
- {
1132
- id: '@deepseek-ai/dsh-api-session-controller#session/fork',
1588
+ 'session/fork': {
1133
1589
  service: 'sessionController',
1134
- namespace: 'session',
1135
- 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.',
1136
1591
  invocation: { kind: 'direct' },
1137
1592
  parameters: [
1138
1593
  {
1139
1594
  name: 'request',
1140
- wire: 'request',
1595
+ description: 'source Session, optional exact inclusive event boundary, and migration preflight choice.',
1141
1596
  source: 'json',
1142
1597
  codec: {
1143
1598
  mode: 'strict',
1144
1599
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionForkRequest',
1145
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},
1146
1608
  },
1147
1609
  },
1148
1610
  ],
@@ -1150,14 +1612,14 @@ export const TYPERT_REMOTE = {
1150
1612
  mode: 'strict',
1151
1613
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionForkValue',
1152
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},
1153
1617
  },
1154
- 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},
1155
1619
  },
1156
- {
1157
- id: '@deepseek-ai/dsh-api-session-controller#session/initializeDefaultModel',
1620
+ 'session/initializeDefaultModel': {
1158
1621
  service: 'sessionController',
1159
- namespace: 'session',
1160
- method: 'initializeDefaultModel',
1622
+ description: 'Select the first available account model after login when no provider API key is configured.',
1161
1623
  invocation: { kind: 'direct' },
1162
1624
  parameters: [
1163
1625
  ],
@@ -1165,24 +1627,31 @@ export const TYPERT_REMOTE = {
1165
1627
  mode: 'strict',
1166
1628
  typeSymbol: '@deepseek-ai/dsh-api-session-controller#session/initializeDefaultModel:result',
1167
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',
1168
1632
  },
1169
- 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},
1170
1634
  },
1171
- {
1172
- id: '@deepseek-ai/dsh-api-session-controller#session/list',
1635
+ 'session/list': {
1173
1636
  service: 'sessionController',
1174
- namespace: 'session',
1175
- method: 'list',
1637
+ description: 'Read all visible Session rows without resuming an Agent.',
1176
1638
  invocation: { kind: 'direct' },
1177
1639
  parameters: [
1178
1640
  {
1179
1641
  name: '_request',
1180
- wire: '_request',
1642
+ description: 'reserved empty list request.',
1181
1643
  source: 'json',
1182
1644
  codec: {
1183
1645
  mode: 'strict',
1184
1646
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionListRequest',
1185
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},
1186
1655
  },
1187
1656
  },
1188
1657
  ],
@@ -1191,14 +1660,14 @@ export const TYPERT_REMOTE = {
1191
1660
  mode: 'strict',
1192
1661
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionListValue',
1193
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},
1194
1665
  },
1195
- 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},
1196
1667
  },
1197
- {
1198
- id: '@deepseek-ai/dsh-api-session-controller#session/modelCatalog',
1668
+ 'session/modelCatalog': {
1199
1669
  service: 'sessionController',
1200
- namespace: 'session',
1201
- method: 'modelCatalog',
1670
+ description: 'Describe every currently routable model for Host-generation selectors.',
1202
1671
  invocation: { kind: 'direct' },
1203
1672
  parameters: [
1204
1673
  ],
@@ -1206,24 +1675,31 @@ export const TYPERT_REMOTE = {
1206
1675
  mode: 'strict',
1207
1676
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#ModelCatalog',
1208
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},
1209
1680
  },
1210
- 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},
1211
1682
  },
1212
- {
1213
- id: '@deepseek-ai/dsh-api-session-controller#session/openWorkspacePath',
1683
+ 'session/openWorkspacePath': {
1214
1684
  service: 'sessionController',
1215
- namespace: 'session',
1216
- method: 'openWorkspacePath',
1685
+ description: 'Verify one path through the composed filesystem and open it on the Host desktop.',
1217
1686
  invocation: { kind: 'direct' },
1218
1687
  parameters: [
1219
1688
  {
1220
1689
  name: 'request',
1221
- wire: 'request',
1690
+ description: 'path after best-effort Session workspace resolution.',
1222
1691
  source: 'json',
1223
1692
  codec: {
1224
1693
  mode: 'strict',
1225
1694
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionOpenWorkspacePathRequest',
1226
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},
1227
1703
  },
1228
1704
  },
1229
1705
  ],
@@ -1232,24 +1708,31 @@ export const TYPERT_REMOTE = {
1232
1708
  mode: 'strict',
1233
1709
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionOpenWorkspacePathValue',
1234
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},
1235
1713
  },
1236
- 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},
1237
1715
  },
1238
- {
1239
- id: '@deepseek-ai/dsh-api-session-controller#session/page',
1716
+ 'session/page': {
1240
1717
  service: 'sessionController',
1241
- namespace: 'session',
1242
- method: 'page',
1718
+ description: 'Read one cold-safe, message-aligned Session history page.',
1243
1719
  invocation: { kind: 'direct' },
1244
1720
  parameters: [
1245
1721
  {
1246
1722
  name: 'request',
1247
- wire: 'request',
1723
+ description: 'durable address, backward cursor, and page budget.',
1248
1724
  source: 'json',
1249
1725
  codec: {
1250
1726
  mode: 'strict',
1251
1727
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionPageRequest',
1252
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},
1253
1736
  },
1254
1737
  },
1255
1738
  ],
@@ -1258,24 +1741,31 @@ export const TYPERT_REMOTE = {
1258
1741
  mode: 'strict',
1259
1742
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionPage',
1260
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},
1261
1746
  },
1262
- 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},
1263
1748
  },
1264
- {
1265
- id: '@deepseek-ai/dsh-api-session-controller#session/projections',
1749
+ 'session/projections': {
1266
1750
  service: 'sessionController',
1267
- namespace: 'session',
1268
- method: 'projections',
1751
+ description: 'Read exact projections, returning cached hints only when migration is required.',
1269
1752
  invocation: { kind: 'direct' },
1270
1753
  parameters: [
1271
1754
  {
1272
1755
  name: 'request',
1273
- wire: 'request',
1756
+ description: 'Session whose current values are required.',
1274
1757
  source: 'json',
1275
1758
  codec: {
1276
1759
  mode: 'strict',
1277
1760
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionProjectionsRequest',
1278
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},
1279
1769
  },
1280
1770
  },
1281
1771
  ],
@@ -1284,24 +1774,31 @@ export const TYPERT_REMOTE = {
1284
1774
  mode: 'strict',
1285
1775
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionProjectionsValue',
1286
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}]},
1287
1779
  },
1288
- 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},
1289
1781
  },
1290
- {
1291
- id: '@deepseek-ai/dsh-api-session-controller#session/prompt',
1782
+ 'session/prompt': {
1292
1783
  service: 'sessionController',
1293
- namespace: 'session',
1294
- method: 'prompt',
1784
+ description: 'Admit one prompt after explicitly resuming its Session.',
1295
1785
  invocation: { kind: 'direct' },
1296
1786
  parameters: [
1297
1787
  {
1298
1788
  name: 'request',
1299
- wire: 'request',
1789
+ description: 'Session identity, prompt content, source metadata, and delivery mode.',
1300
1790
  source: 'json',
1301
1791
  codec: {
1302
1792
  mode: 'strict',
1303
1793
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionPromptRequest',
1304
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},
1305
1802
  },
1306
1803
  },
1307
1804
  ],
@@ -1310,24 +1807,31 @@ export const TYPERT_REMOTE = {
1310
1807
  mode: 'strict',
1311
1808
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionPromptValue',
1312
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},
1313
1812
  },
1314
- 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},
1315
1814
  },
1316
- {
1317
- id: '@deepseek-ai/dsh-api-session-controller#session/rename',
1815
+ 'session/rename': {
1318
1816
  service: 'sessionController',
1319
- namespace: 'session',
1320
- method: 'rename',
1817
+ description: 'Rename one Session after explicitly resuming it.',
1321
1818
  invocation: { kind: 'direct' },
1322
1819
  parameters: [
1323
1820
  {
1324
1821
  name: 'request',
1325
- wire: 'request',
1822
+ description: 'Session identity and proposed title.',
1326
1823
  source: 'json',
1327
1824
  codec: {
1328
1825
  mode: 'strict',
1329
1826
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionRenameRequest',
1330
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},
1331
1835
  },
1332
1836
  },
1333
1837
  ],
@@ -1335,24 +1839,31 @@ export const TYPERT_REMOTE = {
1335
1839
  mode: 'strict',
1336
1840
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionRenameValue',
1337
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},
1338
1844
  },
1339
- 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},
1340
1846
  },
1341
- {
1342
- id: '@deepseek-ai/dsh-api-session-controller#session/search',
1847
+ 'session/search': {
1343
1848
  service: 'sessionController',
1344
- namespace: 'session',
1345
- 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.',
1346
1850
  invocation: { kind: 'direct' },
1347
1851
  parameters: [
1348
1852
  {
1349
1853
  name: 'request',
1350
- wire: 'request',
1854
+ description: 'literal message-content query.',
1351
1855
  source: 'json',
1352
1856
  codec: {
1353
1857
  mode: 'strict',
1354
1858
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionSearchRequest',
1355
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},
1356
1867
  },
1357
1868
  },
1358
1869
  ],
@@ -1361,24 +1872,31 @@ export const TYPERT_REMOTE = {
1361
1872
  mode: 'strict',
1362
1873
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionSearchValue',
1363
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},
1364
1877
  },
1365
- 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},
1366
1879
  },
1367
- {
1368
- id: '@deepseek-ai/dsh-api-session-controller#session/selectModel',
1880
+ 'session/selectModel': {
1369
1881
  service: 'sessionController',
1370
- namespace: 'session',
1371
- method: 'selectModel',
1882
+ description: 'Select one Session-local model after explicitly resuming the Session; save the default in the background.',
1372
1883
  invocation: { kind: 'direct' },
1373
1884
  parameters: [
1374
1885
  {
1375
1886
  name: 'request',
1376
- wire: 'request',
1887
+ description: 'Session identity and requested model selection.',
1377
1888
  source: 'json',
1378
1889
  codec: {
1379
1890
  mode: 'strict',
1380
1891
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionSelectModelRequest',
1381
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},
1382
1900
  },
1383
1901
  },
1384
1902
  ],
@@ -1386,24 +1904,31 @@ export const TYPERT_REMOTE = {
1386
1904
  mode: 'strict',
1387
1905
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionSelectModelValue',
1388
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},
1389
1909
  },
1390
- 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},
1391
1911
  },
1392
- {
1393
- id: '@deepseek-ai/dsh-api-session-controller#session/updateQueue',
1912
+ 'session/updateQueue': {
1394
1913
  service: 'sessionController',
1395
- namespace: 'session',
1396
- method: 'updateQueue',
1914
+ description: 'Mutate one still-pending queue occurrence, resuming a cold Agent first.',
1397
1915
  invocation: { kind: 'direct' },
1398
1916
  parameters: [
1399
1917
  {
1400
1918
  name: 'request',
1401
- wire: 'request',
1919
+ description: 'Session, queue item, and requested mutation.',
1402
1920
  source: 'json',
1403
1921
  codec: {
1404
1922
  mode: 'strict',
1405
1923
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionUpdateQueueRequest',
1406
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},
1407
1932
  },
1408
1933
  },
1409
1934
  ],
@@ -1411,24 +1936,31 @@ export const TYPERT_REMOTE = {
1411
1936
  mode: 'strict',
1412
1937
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SessionUpdateQueueValue',
1413
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},
1414
1941
  },
1415
- 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},
1416
1943
  },
1417
- {
1418
- id: '@deepseek-ai/dsh-api-session-controller#session/workspacePathApplications',
1944
+ 'session/workspacePathApplications': {
1419
1945
  service: 'sessionController',
1420
- namespace: 'session',
1421
- method: 'workspacePathApplications',
1946
+ description: 'Query current file handlers on the serving desktop without activating an Agent.',
1422
1947
  invocation: { kind: 'direct' },
1423
1948
  parameters: [
1424
1949
  {
1425
1950
  name: 'request',
1426
- wire: 'request',
1951
+ description: 'file path in Host filesystem syntax.',
1427
1952
  source: 'json',
1428
1953
  codec: {
1429
1954
  mode: 'strict',
1430
1955
  typeSymbol: '@deepseek-ai/dsh-api-session-controller#session/workspacePathApplications:request',
1431
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},
1432
1964
  },
1433
1965
  },
1434
1966
  ],
@@ -1437,24 +1969,31 @@ export const TYPERT_REMOTE = {
1437
1969
  mode: 'strict',
1438
1970
  typeSymbol: '@deepseek-ai/dsh-api-session-controller#session/workspacePathApplications:result',
1439
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}},
1440
1974
  },
1441
- 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},
1442
1976
  },
1443
- {
1444
- id: '@deepseek-ai/dsh-api-session-controller#skills/list',
1977
+ 'skills/list': {
1445
1978
  service: 'sessionSkillCatalog',
1446
- namespace: 'skills',
1447
- method: 'list',
1979
+ description: 'List the user-invocable skills visible to one Session composition.',
1448
1980
  invocation: { kind: 'direct' },
1449
1981
  parameters: [
1450
1982
  {
1451
1983
  name: 'request',
1452
- wire: 'request',
1984
+ description: 'Session identity whose cwd and preset select the catalog view.',
1453
1985
  source: 'json',
1454
1986
  codec: {
1455
1987
  mode: 'strict',
1456
1988
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SkillListRequest',
1457
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},
1458
1997
  },
1459
1998
  },
1460
1999
  ],
@@ -1463,10 +2002,12 @@ export const TYPERT_REMOTE = {
1463
2002
  mode: 'strict',
1464
2003
  typeSymbol: '@deepseek-ai/dsh-api-session-controller/types#SkillListValue',
1465
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},
1466
2007
  },
1467
- 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},
1468
2009
  },
1469
- ],
1470
- }
2010
+ },
2011
+ }, z)
1471
2012
 
1472
2013
  export default TYPERT_REMOTE