@markusylisiurunen/tau 0.3.18 → 0.3.20

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.
Files changed (175) hide show
  1. package/README.md +22 -48
  2. package/dist/core/cli.js +6 -39
  3. package/dist/core/cli.js.map +1 -1
  4. package/dist/core/commands/index.js +1 -1
  5. package/dist/core/commands/index.js.map +1 -1
  6. package/dist/core/commands/registry.js +5 -76
  7. package/dist/core/commands/registry.js.map +1 -1
  8. package/dist/core/config/builtin_themes.js +0 -62
  9. package/dist/core/config/builtin_themes.js.map +1 -1
  10. package/dist/core/config/content_loader.js +4 -7
  11. package/dist/core/config/content_loader.js.map +1 -1
  12. package/dist/core/config/diff_tool.js +1 -1
  13. package/dist/core/config/diff_tool.js.map +1 -1
  14. package/dist/core/config/runtime.js +1 -1
  15. package/dist/core/config/runtime.js.map +1 -1
  16. package/dist/core/config/runtime_config_snapshot.js +1 -1
  17. package/dist/core/config/runtime_config_snapshot.js.map +1 -1
  18. package/dist/core/config/schema.js +10 -43
  19. package/dist/core/config/schema.js.map +1 -1
  20. package/dist/core/config/skill_parser.js +1 -1
  21. package/dist/core/config/skill_parser.js.map +1 -1
  22. package/dist/core/config/virtual_defaults.js +0 -1
  23. package/dist/core/config/virtual_defaults.js.map +1 -1
  24. package/dist/core/debug.js +1 -7
  25. package/dist/core/debug.js.map +1 -1
  26. package/dist/core/diff_review/bridge.js +1 -3
  27. package/dist/core/diff_review/bridge.js.map +1 -1
  28. package/dist/core/diff_review/index.js.map +1 -1
  29. package/dist/core/diff_review/protocol.js +13 -13
  30. package/dist/core/diff_review/protocol.js.map +1 -1
  31. package/dist/core/diff_review/review_instructions.js +48 -0
  32. package/dist/core/diff_review/review_instructions.js.map +1 -0
  33. package/dist/core/events/index.js.map +1 -1
  34. package/dist/core/events/parser.js +161 -38
  35. package/dist/core/events/parser.js.map +1 -1
  36. package/dist/core/events/types.js +1 -1
  37. package/dist/core/events/types.js.map +1 -1
  38. package/dist/core/index.js +1 -1
  39. package/dist/core/index.js.map +1 -1
  40. package/dist/core/models/catalog.js +4 -4
  41. package/dist/core/models/catalog.js.map +1 -1
  42. package/dist/core/nook/cli.js +10 -0
  43. package/dist/core/nook/cli.js.map +1 -1
  44. package/dist/core/nook/client.js +59 -16
  45. package/dist/core/nook/client.js.map +1 -1
  46. package/dist/core/nook/index.js.map +1 -1
  47. package/dist/core/personas.js +29 -14
  48. package/dist/core/personas.js.map +1 -1
  49. package/dist/core/runtime/chat_runtime.js +12 -34
  50. package/dist/core/runtime/chat_runtime.js.map +1 -1
  51. package/dist/core/runtime/conversation_turn_runtime.js +0 -4
  52. package/dist/core/runtime/conversation_turn_runtime.js.map +1 -1
  53. package/dist/core/runtime/runtime_bootstrap.js +191 -317
  54. package/dist/core/runtime/runtime_bootstrap.js.map +1 -1
  55. package/dist/core/runtime/session_prompt_composer.js +2 -6
  56. package/dist/core/runtime/session_prompt_composer.js.map +1 -1
  57. package/dist/core/session/core_session.js +2 -5
  58. package/dist/core/session/core_session.js.map +1 -1
  59. package/dist/core/session/message_accumulator.js +6 -0
  60. package/dist/core/session/message_accumulator.js.map +1 -1
  61. package/dist/core/session/runner.js +137 -32
  62. package/dist/core/session/runner.js.map +1 -1
  63. package/dist/core/session/session_engine.js +365 -120
  64. package/dist/core/session/session_engine.js.map +1 -1
  65. package/dist/core/static/index.js +0 -11
  66. package/dist/core/static/index.js.map +1 -1
  67. package/dist/core/subagents/registry.js +0 -2
  68. package/dist/core/subagents/registry.js.map +1 -1
  69. package/dist/core/subagents/subagent_engine.js +1 -3
  70. package/dist/core/subagents/subagent_engine.js.map +1 -1
  71. package/dist/core/telegram/adapter.js +34 -2
  72. package/dist/core/telegram/adapter.js.map +1 -1
  73. package/dist/core/telegram/config.js +3 -13
  74. package/dist/core/telegram/config.js.map +1 -1
  75. package/dist/core/telegram/session_manager.js +16 -5
  76. package/dist/core/telegram/session_manager.js.map +1 -1
  77. package/dist/core/tools/bash.js +6 -21
  78. package/dist/core/tools/bash.js.map +1 -1
  79. package/dist/core/tools/edit.js +1 -4
  80. package/dist/core/tools/edit.js.map +1 -1
  81. package/dist/core/tools/emit_output.js +1 -1
  82. package/dist/core/tools/emit_output.js.map +1 -1
  83. package/dist/core/tools/execution_backend.js +3 -1
  84. package/dist/core/tools/execution_backend.js.map +1 -1
  85. package/dist/core/tools/grep.js +1 -1
  86. package/dist/core/tools/grep.js.map +1 -1
  87. package/dist/core/tools/list.js +1 -1
  88. package/dist/core/tools/list.js.map +1 -1
  89. package/dist/core/tools/nook.js +29 -15
  90. package/dist/core/tools/nook.js.map +1 -1
  91. package/dist/core/tools/read.js +1 -1
  92. package/dist/core/tools/read.js.map +1 -1
  93. package/dist/core/tools/registry.js.map +1 -1
  94. package/dist/core/tools/send_input_to_agent.js +1 -1
  95. package/dist/core/tools/send_input_to_agent.js.map +1 -1
  96. package/dist/core/tools/spawn_agent.js +40 -88
  97. package/dist/core/tools/spawn_agent.js.map +1 -1
  98. package/dist/core/tools/terminate_agent.js +1 -1
  99. package/dist/core/tools/terminate_agent.js.map +1 -1
  100. package/dist/core/tools/view_image.js +1 -1
  101. package/dist/core/tools/view_image.js.map +1 -1
  102. package/dist/core/tools/wait_for_agents.js +1 -1
  103. package/dist/core/tools/wait_for_agents.js.map +1 -1
  104. package/dist/core/tools/web_fetch.js +1 -1
  105. package/dist/core/tools/web_fetch.js.map +1 -1
  106. package/dist/core/tools/web_search.js +1 -1
  107. package/dist/core/tools/web_search.js.map +1 -1
  108. package/dist/core/tools/write.js +1 -4
  109. package/dist/core/tools/write.js.map +1 -1
  110. package/dist/core/types.js +0 -1
  111. package/dist/core/types.js.map +1 -1
  112. package/dist/core/utils/context.js +1 -1
  113. package/dist/core/utils/context.js.map +1 -1
  114. package/dist/core/utils/context_builder.js +1 -15
  115. package/dist/core/utils/context_builder.js.map +1 -1
  116. package/dist/core/utils/user_metadata.js +13 -19
  117. package/dist/core/utils/user_metadata.js.map +1 -1
  118. package/dist/core/version.js +1 -1
  119. package/dist/execution/cloudflare_sandbox_execution_environment.js +15 -10
  120. package/dist/execution/cloudflare_sandbox_execution_environment.js.map +1 -1
  121. package/dist/execution/fly_sprite_execution_environment.js +9 -1
  122. package/dist/execution/fly_sprite_execution_environment.js.map +1 -1
  123. package/dist/execution/local_execution_environment.js +9 -55
  124. package/dist/execution/local_execution_environment.js.map +1 -1
  125. package/dist/execution/tool_backend_execution_environment.js +7 -10
  126. package/dist/execution/tool_backend_execution_environment.js.map +1 -1
  127. package/dist/host/client_tool_broker.js +1 -1
  128. package/dist/host/client_tool_broker.js.map +1 -1
  129. package/dist/host/execution_runtime.js +35 -0
  130. package/dist/host/execution_runtime.js.map +1 -0
  131. package/dist/host/hosted_ephemeral_agent_session.js +20 -11
  132. package/dist/host/hosted_ephemeral_agent_session.js.map +1 -1
  133. package/dist/host/local_session_host.js +117 -109
  134. package/dist/host/local_session_host.js.map +1 -1
  135. package/dist/host/session_protocol_handler.js +0 -10
  136. package/dist/host/session_protocol_handler.js.map +1 -1
  137. package/dist/main.js +31 -63
  138. package/dist/main.js.map +1 -1
  139. package/dist/nook/README.md +4 -1
  140. package/dist/nook/worker/index.js +41 -1
  141. package/dist/nook/worker/index.js.map +1 -1
  142. package/dist/protocol/index.d.ts +1 -1
  143. package/dist/protocol/index.js.map +1 -1
  144. package/dist/protocol/session_protocol.d.ts +1 -11
  145. package/dist/protocol/session_protocol.js +242 -343
  146. package/dist/protocol/session_protocol.js.map +1 -1
  147. package/dist/sdk/client.js +2 -24
  148. package/dist/sdk/client.js.map +1 -1
  149. package/dist/sdk/index.d.ts +1 -1
  150. package/dist/sdk/index.js.map +1 -1
  151. package/dist/sdk/session.js +0 -9
  152. package/dist/sdk/session.js.map +1 -1
  153. package/dist/sdk/types.d.ts +0 -4
  154. package/dist/starter/skills/guided-review/SKILL.md +1 -1
  155. package/dist/tui/chat_controller/command_hints.js +0 -2
  156. package/dist/tui/chat_controller/command_hints.js.map +1 -1
  157. package/dist/tui/chat_view.js +0 -2
  158. package/dist/tui/chat_view.js.map +1 -1
  159. package/dist/tui/session_chat_app.js +1 -1
  160. package/dist/tui/session_chat_app.js.map +1 -1
  161. package/dist/tui/session_chat_controller.js +2 -38
  162. package/dist/tui/session_chat_controller.js.map +1 -1
  163. package/dist/tui/ui/custom_editor.js +0 -5
  164. package/dist/tui/ui/custom_editor.js.map +1 -1
  165. package/dist/tui/ui/footer.js +4 -37
  166. package/dist/tui/ui/footer.js.map +1 -1
  167. package/dist/tui/ui/slash_autocomplete.js +2 -33
  168. package/dist/tui/ui/slash_autocomplete.js.map +1 -1
  169. package/dist/tui/ui/theme/palette.js +0 -2
  170. package/dist/tui/ui/theme/palette.js.map +1 -1
  171. package/dist/tui/ui/theme/theme.js.map +1 -1
  172. package/package.json +4 -4
  173. package/dist/core/diff_review/review_thread.js +0 -264
  174. package/dist/core/diff_review/review_thread.js.map +0 -1
  175. package/dist/core/static/prompts/diff-review-wrapper.md +0 -26
@@ -15,7 +15,6 @@ export const SESSION_PROTOCOL_METHODS = [
15
15
  "session.exec",
16
16
  "session.interrupt",
17
17
  "session.snapshot",
18
- "session.setRisk",
19
18
  "session.setReasoning",
20
19
  "session.setPersona",
21
20
  "session.resolvePrompt",
@@ -90,7 +89,7 @@ const sessionProtocolReadyMessageSchema = z
90
89
  type: z.literal("ready"),
91
90
  methods: sessionProtocolMethodListSchema,
92
91
  })
93
- .strict();
92
+ .strip();
94
93
  const sessionProtocolClientToolCallMessageSchema = z
95
94
  .object({
96
95
  version: z.literal(SESSION_PROTOCOL_VERSION),
@@ -102,7 +101,7 @@ const sessionProtocolClientToolCallMessageSchema = z
102
101
  ackDeadlineMs: z.number().int().positive(),
103
102
  executionDeadlineMs: z.number().int().positive(),
104
103
  })
105
- .strict();
104
+ .strip();
106
105
  const sessionProtocolClientToolCancelMessageSchema = z
107
106
  .object({
108
107
  version: z.literal(SESSION_PROTOCOL_VERSION),
@@ -111,7 +110,7 @@ const sessionProtocolClientToolCancelMessageSchema = z
111
110
  callId: nonEmptyStringSchema,
112
111
  reason: z.enum(["aborted", "timeout", "client-detached"]),
113
112
  })
114
- .strict();
113
+ .strip();
115
114
  const sessionProtocolClientToolMessageSchema = z.discriminatedUnion("type", [
116
115
  sessionProtocolClientToolCallMessageSchema,
117
116
  sessionProtocolClientToolCancelMessageSchema,
@@ -124,7 +123,7 @@ const sessionProtocolRequestEnvelopeSchema = z
124
123
  method: z.string(),
125
124
  params: z.unknown(),
126
125
  })
127
- .strict();
126
+ .strip();
128
127
  const sessionProtocolOutgoingRoutingSchema = z
129
128
  .object({
130
129
  version: z.literal(SESSION_PROTOCOL_VERSION),
@@ -138,11 +137,11 @@ const sessionProtocolOutgoingRoutingSchema = z
138
137
  "response",
139
138
  ]),
140
139
  })
141
- .passthrough();
142
- const sessionProtocolIdFieldSchema = z.object({ id: z.unknown() }).passthrough();
143
- const sessionProtocolOkFieldSchema = z.object({ ok: z.unknown() }).passthrough();
144
- const sessionProtocolVersionFieldSchema = z.object({ version: z.unknown() }).passthrough();
145
- const sessionProtocolTypeFieldSchema = z.object({ type: z.unknown() }).passthrough();
140
+ .strip();
141
+ const sessionProtocolIdFieldSchema = z.object({ id: z.unknown() }).strip();
142
+ const sessionProtocolOkFieldSchema = z.object({ ok: z.unknown() }).strip();
143
+ const sessionProtocolVersionFieldSchema = z.object({ version: z.unknown() }).strip();
144
+ const sessionProtocolTypeFieldSchema = z.object({ type: z.unknown() }).strip();
146
145
  const sessionProtocolResponseSuccessSchema = z
147
146
  .object({
148
147
  version: z.literal(SESSION_PROTOCOL_VERSION),
@@ -151,7 +150,7 @@ const sessionProtocolResponseSuccessSchema = z
151
150
  ok: z.literal(true),
152
151
  result: z.unknown(),
153
152
  })
154
- .strict();
153
+ .strip();
155
154
  const sessionProtocolResponseErrorSchema = z
156
155
  .object({
157
156
  version: z.literal(SESSION_PROTOCOL_VERSION),
@@ -164,9 +163,9 @@ const sessionProtocolResponseErrorSchema = z
164
163
  message: z.string(),
165
164
  data: z.unknown().optional(),
166
165
  })
167
- .strict(),
166
+ .strip(),
168
167
  })
169
- .strict();
168
+ .strip();
170
169
  const sessionProtocolClientToolDefinitionSchema = z
171
170
  .object({
172
171
  name: nonEmptyStringSchema,
@@ -174,7 +173,7 @@ const sessionProtocolClientToolDefinitionSchema = z
174
173
  parameters: z.unknown(),
175
174
  executionTimeoutMs: z.number().int().positive().optional(),
176
175
  })
177
- .strict();
176
+ .strip();
178
177
  const sessionProtocolInitializeParamsSchema = z
179
178
  .object({
180
179
  client: z
@@ -183,16 +182,16 @@ const sessionProtocolInitializeParamsSchema = z
183
182
  version: nonEmptyStringSchema,
184
183
  tools: z.array(sessionProtocolClientToolDefinitionSchema).optional(),
185
184
  })
186
- .strict(),
185
+ .strip(),
187
186
  })
188
- .strict();
187
+ .strip();
189
188
  const sessionProtocolUserMessageParamsSchema = z
190
189
  .object({
191
190
  sessionId: nonEmptyStringSchema,
192
191
  text: z.string(),
193
192
  historyEntryId: nonEmptyStringSchema.optional(),
194
193
  })
195
- .strict();
194
+ .strip();
196
195
  const sessionProtocolRecordParamsSchema = sessionProtocolUserMessageParamsSchema;
197
196
  const sessionProtocolExecParamsSchema = z
198
197
  .object({
@@ -201,18 +200,12 @@ const sessionProtocolExecParamsSchema = z
201
200
  cwd: nonEmptyStringSchema.optional(),
202
201
  timeoutMs: z.number().int().positive().optional(),
203
202
  })
204
- .strict();
203
+ .strip();
205
204
  const sessionProtocolSessionIdParamsSchema = z
206
205
  .object({
207
206
  sessionId: nonEmptyStringSchema,
208
207
  })
209
- .strict();
210
- const sessionProtocolSetRiskParamsSchema = z
211
- .object({
212
- sessionId: nonEmptyStringSchema,
213
- riskLevel: z.enum(["read-only", "read-write"]),
214
- })
215
- .strict();
208
+ .strip();
216
209
  const sessionProtocolReasoningEffortSchema = z.enum([
217
210
  "none",
218
211
  "minimal",
@@ -227,33 +220,33 @@ const sessionProtocolSetReasoningParamsSchema = z
227
220
  sessionId: nonEmptyStringSchema,
228
221
  reasoning: sessionProtocolReasoningEffortSchema,
229
222
  })
230
- .strict();
223
+ .strip();
231
224
  const sessionProtocolSetPersonaParamsSchema = z
232
225
  .object({
233
226
  sessionId: nonEmptyStringSchema,
234
227
  personaId: nonEmptyStringSchema,
235
228
  })
236
- .strict();
229
+ .strip();
237
230
  const sessionProtocolResolvePromptParamsSchema = z
238
231
  .object({
239
232
  sessionId: nonEmptyStringSchema,
240
233
  promptId: nonEmptyStringSchema,
241
234
  })
242
- .strict();
235
+ .strip();
243
236
  const sessionProtocolAutocompletePathsParamsSchema = z
244
237
  .object({
245
238
  sessionId: nonEmptyStringSchema,
246
239
  query: z.string(),
247
240
  limit: z.number().int().positive().max(100),
248
241
  })
249
- .strict();
242
+ .strip();
250
243
  const sessionProtocolCompactParamsSchema = z
251
244
  .object({
252
245
  sessionId: nonEmptyStringSchema,
253
246
  mode: z.enum(["summary-only", "summary-and-last"]),
254
247
  guidance: z.string().optional(),
255
248
  })
256
- .strict();
249
+ .strip();
257
250
  const sessionProtocolPruneParamsSchema = z
258
251
  .object({
259
252
  sessionId: nonEmptyStringSchema,
@@ -261,19 +254,19 @@ const sessionProtocolPruneParamsSchema = z
261
254
  fraction: z.number().min(0).max(1),
262
255
  guidance: z.string().optional(),
263
256
  })
264
- .strict();
257
+ .strip();
265
258
  const sessionProtocolRewindParamsSchema = z
266
259
  .object({
267
260
  sessionId: nonEmptyStringSchema,
268
261
  historyEntryId: nonEmptyStringSchema,
269
262
  })
270
- .strict();
263
+ .strip();
271
264
  const sessionProtocolTerminateSubagentParamsSchema = z
272
265
  .object({
273
266
  sessionId: nonEmptyStringSchema,
274
267
  subagentId: nonEmptyStringSchema,
275
268
  })
276
- .strict();
269
+ .strip();
277
270
  const sessionProtocolEphemeralAgentToolSchema = z.enum([
278
271
  "bash",
279
272
  "write",
@@ -287,9 +280,8 @@ const sessionProtocolEphemeralCreateParamsSchema = z
287
280
  sessionId: nonEmptyStringSchema,
288
281
  instructions: nonEmptyStringSchema,
289
282
  tools: z.array(sessionProtocolEphemeralAgentToolSchema),
290
- riskLevel: z.enum(["read-only", "read-write"]),
291
283
  })
292
- .strict();
284
+ .strip();
293
285
  const sessionProtocolEphemeralSubmitParamsSchema = z
294
286
  .object({
295
287
  sessionId: nonEmptyStringSchema,
@@ -298,19 +290,19 @@ const sessionProtocolEphemeralSubmitParamsSchema = z
298
290
  forkFromThreadId: nonEmptyStringSchema.optional(),
299
291
  message: nonEmptyStringSchema,
300
292
  })
301
- .strict();
293
+ .strip();
302
294
  const sessionProtocolEphemeralCloseParamsSchema = z
303
295
  .object({
304
296
  sessionId: nonEmptyStringSchema,
305
297
  contextId: nonEmptyStringSchema,
306
298
  })
307
- .strict();
299
+ .strip();
308
300
  const sessionProtocolClientToolAckParamsSchema = z
309
301
  .object({
310
302
  sessionId: nonEmptyStringSchema,
311
303
  callId: nonEmptyStringSchema,
312
304
  })
313
- .strict();
305
+ .strip();
314
306
  const sessionProtocolClientToolResultParamsSchema = z.discriminatedUnion("ok", [
315
307
  z
316
308
  .object({
@@ -319,7 +311,7 @@ const sessionProtocolClientToolResultParamsSchema = z.discriminatedUnion("ok", [
319
311
  ok: z.literal(true),
320
312
  content: z.string(),
321
313
  })
322
- .strict(),
314
+ .strip(),
323
315
  z
324
316
  .object({
325
317
  sessionId: nonEmptyStringSchema,
@@ -327,7 +319,7 @@ const sessionProtocolClientToolResultParamsSchema = z.discriminatedUnion("ok", [
327
319
  ok: z.literal(false),
328
320
  error: z.string(),
329
321
  })
330
- .strict(),
322
+ .strip(),
331
323
  ]);
332
324
  const absolutePathSchema = nonEmptyStringSchema.refine((value) => value.startsWith("/"));
333
325
  const sessionProtocolLocalExecutionEnvironmentInputSchema = z
@@ -335,7 +327,7 @@ const sessionProtocolLocalExecutionEnvironmentInputSchema = z
335
327
  kind: z.literal("local"),
336
328
  cwd: absolutePathSchema,
337
329
  })
338
- .strict();
330
+ .strip();
339
331
  const sessionProtocolCloudflareSandboxExecutionEnvironmentInputSchema = z
340
332
  .object({
341
333
  kind: z.literal("cloudflare-sandbox"),
@@ -343,7 +335,7 @@ const sessionProtocolCloudflareSandboxExecutionEnvironmentInputSchema = z
343
335
  sandboxId: nonEmptyStringSchema,
344
336
  cwd: absolutePathSchema,
345
337
  })
346
- .strict();
338
+ .strip();
347
339
  const sessionProtocolFlySpriteExecutionEnvironmentInputSchema = z
348
340
  .object({
349
341
  kind: z.literal("fly-sprite"),
@@ -351,7 +343,7 @@ const sessionProtocolFlySpriteExecutionEnvironmentInputSchema = z
351
343
  spriteName: nonEmptyStringSchema,
352
344
  cwd: absolutePathSchema,
353
345
  })
354
- .strict();
346
+ .strip();
355
347
  const sessionProtocolExecutionEnvironmentInputSchema = z.discriminatedUnion("kind", [
356
348
  sessionProtocolLocalExecutionEnvironmentInputSchema,
357
349
  sessionProtocolCloudflareSandboxExecutionEnvironmentInputSchema,
@@ -361,17 +353,16 @@ const sessionProtocolCreateParamsSchema = z
361
353
  .object({
362
354
  executionEnvironment: sessionProtocolExecutionEnvironmentInputSchema,
363
355
  personaId: nonEmptyStringSchema.optional(),
364
- riskLevel: z.enum(["read-only", "read-write"]).optional(),
365
356
  reasoning: sessionProtocolReasoningEffortSchema.optional(),
366
357
  })
367
- .strict();
368
- const sessionProtocolEmptyParamsSchema = z.object({}).strict();
358
+ .strip();
359
+ const sessionProtocolEmptyParamsSchema = z.object({}).strip();
369
360
  const sessionProtocolSessionSummarySchema = z
370
361
  .object({
371
362
  sessionId: nonEmptyStringSchema,
372
363
  lifecycle: sessionProtocolSessionLifecycleSchema,
373
364
  })
374
- .strict();
365
+ .strip();
375
366
  const sessionProtocolServiceTierSchema = z.enum(["priority", "flex"]);
376
367
  const sessionProtocolModelSnapshotSchema = z
377
368
  .object({
@@ -400,30 +391,29 @@ const sessionProtocolModelSnapshotSchema = z
400
391
  cacheRead: z.number().nonnegative(),
401
392
  cacheWrite: z.number().nonnegative(),
402
393
  })
403
- .strict())
394
+ .strip())
404
395
  .optional(),
405
396
  })
406
- .strict(),
397
+ .strip(),
407
398
  contextWindow: z.number().int().positive(),
408
399
  maxTokens: z.number().int().positive(),
409
400
  compat: z.unknown().optional(),
410
401
  })
411
- .strict();
402
+ .strip();
412
403
  const sessionProtocolPersonaSettingsSnapshotSchema = z
413
404
  .object({
414
405
  reasoning: sessionProtocolReasoningEffortSchema.optional(),
415
406
  interleavedThinking: z.boolean().optional(),
416
407
  serviceTier: sessionProtocolServiceTierSchema.optional(),
417
408
  })
418
- .strict();
409
+ .strip();
419
410
  const sessionProtocolSubagentSnapshotSchema = z
420
411
  .object({
421
412
  description: z.string().optional(),
422
413
  tools: z.array(nonEmptyStringSchema).optional(),
423
- riskLevel: z.enum(["read-only", "read-write"]).optional(),
424
414
  launchModels: z.array(nonEmptyStringSchema).optional(),
425
415
  })
426
- .strict();
416
+ .strip();
427
417
  const sessionProtocolPersonaSnapshotSchema = z
428
418
  .object({
429
419
  id: nonEmptyStringSchema,
@@ -435,36 +425,35 @@ const sessionProtocolPersonaSnapshotSchema = z
435
425
  skills: z.union([z.literal("*"), z.array(nonEmptyStringSchema)]),
436
426
  source: z.enum(["builtin", "user", "project"]),
437
427
  })
438
- .strict();
428
+ .strip();
439
429
  const sessionProtocolPromptTemplateSnapshotSchema = z
440
430
  .object({
441
431
  id: nonEmptyStringSchema,
442
432
  label: z.string().optional(),
443
433
  description: z.string().optional(),
444
434
  })
445
- .strict();
435
+ .strip();
446
436
  const sessionProtocolSkillSnapshotSchema = z
447
437
  .object({
448
438
  name: nonEmptyStringSchema,
449
439
  description: nonEmptyStringSchema,
450
440
  path: nonEmptyStringSchema,
451
441
  })
452
- .strict();
442
+ .strip();
453
443
  const sessionProtocolContentCatalogSnapshotSchema = z
454
444
  .object({
455
445
  personas: z.array(sessionProtocolPersonaSnapshotSchema),
456
446
  prompts: z.array(sessionProtocolPromptTemplateSnapshotSchema),
457
447
  skills: z.array(sessionProtocolSkillSnapshotSchema),
458
448
  })
459
- .strict();
449
+ .strip();
460
450
  const sessionProtocolSettingsSnapshotSchema = z
461
451
  .object({
462
452
  personaId: nonEmptyStringSchema,
463
- riskLevel: z.enum(["read-only", "read-write"]),
464
453
  reasoning: sessionProtocolReasoningEffortSchema.optional(),
465
454
  serviceTier: sessionProtocolServiceTierSchema.optional(),
466
455
  })
467
- .strict();
456
+ .strip();
468
457
  const sessionProtocolBootstrapSnapshotSchema = z
469
458
  .object({
470
459
  model: sessionProtocolModelSnapshotSchema,
@@ -473,16 +462,16 @@ const sessionProtocolBootstrapSnapshotSchema = z
473
462
  environmentTag: nonEmptyStringSchema,
474
463
  subagentPrompts: z.record(z.string(), z.string()),
475
464
  })
476
- .strict(),
465
+ .strip(),
477
466
  })
478
- .strict();
467
+ .strip();
479
468
  const sessionProtocolLocalExecutionEnvironmentSnapshotSchema = z
480
469
  .object({
481
470
  kind: z.literal("local"),
482
471
  cwd: nonEmptyStringSchema,
483
472
  home: nonEmptyStringSchema,
484
473
  })
485
- .strict();
474
+ .strip();
486
475
  const sessionProtocolCloudflareSandboxExecutionEnvironmentSnapshotSchema = z
487
476
  .object({
488
477
  kind: z.literal("cloudflare-sandbox"),
@@ -491,7 +480,7 @@ const sessionProtocolCloudflareSandboxExecutionEnvironmentSnapshotSchema = z
491
480
  cwd: nonEmptyStringSchema,
492
481
  home: nonEmptyStringSchema,
493
482
  })
494
- .strict();
483
+ .strip();
495
484
  const sessionProtocolFlySpriteExecutionEnvironmentSnapshotSchema = z
496
485
  .object({
497
486
  kind: z.literal("fly-sprite"),
@@ -500,7 +489,7 @@ const sessionProtocolFlySpriteExecutionEnvironmentSnapshotSchema = z
500
489
  cwd: nonEmptyStringSchema,
501
490
  home: nonEmptyStringSchema,
502
491
  })
503
- .strict();
492
+ .strip();
504
493
  const sessionProtocolExecutionEnvironmentSnapshotSchema = z.discriminatedUnion("kind", [
505
494
  sessionProtocolLocalExecutionEnvironmentSnapshotSchema,
506
495
  sessionProtocolCloudflareSandboxExecutionEnvironmentSnapshotSchema,
@@ -512,14 +501,14 @@ const sessionProtocolSystemMessageSchema = z
512
501
  content: z.string(),
513
502
  timestamp: z.number().finite(),
514
503
  })
515
- .strict();
504
+ .strip();
516
505
  const sessionProtocolDraftAssistantMessageSchema = z
517
506
  .object({
518
507
  role: z.literal("assistant"),
519
508
  content: z.array(z.unknown()),
520
509
  timestamp: z.number().finite(),
521
510
  })
522
- .strict();
511
+ .strip();
523
512
  const sessionProtocolMessagePayloadSchema = z.union([
524
513
  sessionProtocolSystemMessageSchema,
525
514
  messageSchema,
@@ -532,14 +521,14 @@ const sessionProtocolMessageSchema = z
532
521
  modelVisible: z.boolean(),
533
522
  message: sessionProtocolMessagePayloadSchema,
534
523
  })
535
- .strict();
524
+ .strip();
536
525
  const sessionProtocolNoticeSchema = z
537
526
  .object({
538
527
  severity: z.enum(["info", "warn", "error"]),
539
528
  text: z.string(),
540
529
  timestamp: z.number().finite(),
541
530
  })
542
- .strict();
531
+ .strip();
543
532
  const sessionProtocolOperationSchema = z
544
533
  .object({
545
534
  kind: z.enum(["auto-compaction", "manual-compaction", "prune", "reload", "rewind"]),
@@ -550,7 +539,7 @@ const sessionProtocolOperationSchema = z
550
539
  error: z.string().optional(),
551
540
  data: z.record(z.string(), z.unknown()).optional(),
552
541
  })
553
- .strict();
542
+ .strip();
554
543
  const sessionProtocolTimelineItemSchema = z.discriminatedUnion("type", [
555
544
  z
556
545
  .object({
@@ -558,21 +547,21 @@ const sessionProtocolTimelineItemSchema = z.discriminatedUnion("type", [
558
547
  id: nonEmptyStringSchema,
559
548
  messageId: nonEmptyStringSchema,
560
549
  })
561
- .strict(),
550
+ .strip(),
562
551
  z
563
552
  .object({
564
553
  type: z.literal("notice"),
565
554
  id: nonEmptyStringSchema,
566
555
  notice: sessionProtocolNoticeSchema,
567
556
  })
568
- .strict(),
557
+ .strip(),
569
558
  z
570
559
  .object({
571
560
  type: z.literal("operation"),
572
561
  id: nonEmptyStringSchema,
573
562
  operation: sessionProtocolOperationSchema,
574
563
  })
575
- .strict(),
564
+ .strip(),
576
565
  ]);
577
566
  const sessionProtocolToolRunSchema = z
578
567
  .object({
@@ -584,7 +573,7 @@ const sessionProtocolToolRunSchema = z
584
573
  messageId: nonEmptyStringSchema,
585
574
  contentIndex: z.number().int().nonnegative(),
586
575
  })
587
- .strict(),
576
+ .strip(),
588
577
  status: z.enum(["queued", "running", "succeeded", "failed", "blocked", "cancelled"]),
589
578
  startedAt: z.number().finite().optional(),
590
579
  finishedAt: z.number().finite().optional(),
@@ -593,7 +582,7 @@ const sessionProtocolToolRunSchema = z
593
582
  error: z.string().optional(),
594
583
  facetIds: z.array(nonEmptyStringSchema),
595
584
  })
596
- .strict();
585
+ .strip();
597
586
  const sessionProtocolAgentUsageSchema = z
598
587
  .object({
599
588
  input: z.number().finite(),
@@ -603,7 +592,7 @@ const sessionProtocolAgentUsageSchema = z
603
592
  contextWindowUsageTokens: z.number().finite(),
604
593
  contextWindow: z.number().finite(),
605
594
  })
606
- .strict();
595
+ .strip();
607
596
  const sessionProtocolAgentRunSchema = z
608
597
  .object({
609
598
  id: nonEmptyStringSchema,
@@ -623,13 +612,13 @@ const sessionProtocolAgentRunSchema = z
623
612
  finalText: z.string().optional(),
624
613
  error: z.string().optional(),
625
614
  })
626
- .strict();
615
+ .strip();
627
616
  const sessionProtocolFacetSubjectSchema = z.discriminatedUnion("type", [
628
- z.object({ type: z.literal("session") }).strict(),
629
- z.object({ type: z.literal("message"), id: nonEmptyStringSchema }).strict(),
630
- z.object({ type: z.literal("tool"), id: nonEmptyStringSchema }).strict(),
631
- z.object({ type: z.literal("agent"), id: nonEmptyStringSchema }).strict(),
632
- z.object({ type: z.literal("operation"), id: nonEmptyStringSchema }).strict(),
617
+ z.object({ type: z.literal("session") }).strip(),
618
+ z.object({ type: z.literal("message"), id: nonEmptyStringSchema }).strip(),
619
+ z.object({ type: z.literal("tool"), id: nonEmptyStringSchema }).strip(),
620
+ z.object({ type: z.literal("agent"), id: nonEmptyStringSchema }).strip(),
621
+ z.object({ type: z.literal("operation"), id: nonEmptyStringSchema }).strip(),
633
622
  ]);
634
623
  const sessionProtocolFacetSchema = z
635
624
  .object({
@@ -639,7 +628,7 @@ const sessionProtocolFacetSchema = z
639
628
  version: z.number().int().positive(),
640
629
  data: z.record(z.string(), z.unknown()),
641
630
  })
642
- .strict();
631
+ .strip();
643
632
  const sessionProtocolSnapshotSchema = z
644
633
  .object({
645
634
  sessionId: nonEmptyStringSchema,
@@ -656,7 +645,7 @@ const sessionProtocolSnapshotSchema = z
656
645
  agents: z.record(nonEmptyStringSchema, sessionProtocolAgentRunSchema),
657
646
  facets: z.record(nonEmptyStringSchema, sessionProtocolFacetSchema),
658
647
  })
659
- .strict()
648
+ .strip()
660
649
  .superRefine((snapshot, ctx) => {
661
650
  const messageIds = new Set();
662
651
  for (const message of snapshot.messages) {
@@ -706,32 +695,32 @@ const sessionProtocolChangeSchema = z.discriminatedUnion("type", [
706
695
  type: z.literal("lifecycle.set"),
707
696
  lifecycle: sessionProtocolSessionLifecycleSchema,
708
697
  })
709
- .strict(),
698
+ .strip(),
710
699
  z
711
700
  .object({
712
701
  type: z.literal("cost.set"),
713
702
  costTotal: z.number().nonnegative(),
714
703
  })
715
- .strict(),
704
+ .strip(),
716
705
  z
717
706
  .object({
718
707
  type: z.literal("settings.set"),
719
708
  settings: sessionProtocolSettingsSnapshotSchema,
720
709
  })
721
- .strict(),
710
+ .strip(),
722
711
  z
723
712
  .object({
724
713
  type: z.literal("message.append"),
725
714
  message: sessionProtocolMessageSchema,
726
715
  timelineItem: sessionProtocolTimelineItemSchema.optional(),
727
716
  })
728
- .strict(),
717
+ .strip(),
729
718
  z
730
719
  .object({
731
720
  type: z.literal("message.replace"),
732
721
  message: sessionProtocolMessageSchema,
733
722
  })
734
- .strict(),
723
+ .strip(),
735
724
  z
736
725
  .object({
737
726
  type: z.literal("message.content.append"),
@@ -740,61 +729,61 @@ const sessionProtocolChangeSchema = z.discriminatedUnion("type", [
740
729
  thinking: z.string().optional(),
741
730
  timestamp: z.number().finite(),
742
731
  })
743
- .strict(),
732
+ .strip(),
744
733
  z
745
734
  .object({
746
735
  type: z.literal("timeline.append"),
747
736
  item: sessionProtocolTimelineItemSchema,
748
737
  })
749
- .strict(),
738
+ .strip(),
750
739
  z
751
740
  .object({
752
741
  type: z.literal("timeline.replace"),
753
742
  item: sessionProtocolTimelineItemSchema,
754
743
  })
755
- .strict(),
744
+ .strip(),
756
745
  z
757
746
  .object({
758
747
  type: z.literal("timeline.remove"),
759
748
  id: nonEmptyStringSchema,
760
749
  })
761
- .strict(),
750
+ .strip(),
762
751
  z
763
752
  .object({
764
753
  type: z.literal("tool.set"),
765
754
  tool: sessionProtocolToolRunSchema,
766
755
  })
767
- .strict(),
756
+ .strip(),
768
757
  z
769
758
  .object({
770
759
  type: z.literal("tool.remove"),
771
760
  id: nonEmptyStringSchema,
772
761
  })
773
- .strict(),
762
+ .strip(),
774
763
  z
775
764
  .object({
776
765
  type: z.literal("agent.set"),
777
766
  agent: sessionProtocolAgentRunSchema,
778
767
  })
779
- .strict(),
768
+ .strip(),
780
769
  z
781
770
  .object({
782
771
  type: z.literal("agent.remove"),
783
772
  id: nonEmptyStringSchema,
784
773
  })
785
- .strict(),
774
+ .strip(),
786
775
  z
787
776
  .object({
788
777
  type: z.literal("facet.set"),
789
778
  facet: sessionProtocolFacetSchema,
790
779
  })
791
- .strict(),
780
+ .strip(),
792
781
  z
793
782
  .object({
794
783
  type: z.literal("facet.remove"),
795
784
  id: nonEmptyStringSchema,
796
785
  })
797
- .strict(),
786
+ .strip(),
798
787
  ]);
799
788
  const sessionProtocolDeltaSchema = z.discriminatedUnion("type", [
800
789
  z
@@ -802,13 +791,13 @@ const sessionProtocolDeltaSchema = z.discriminatedUnion("type", [
802
791
  type: z.literal("snapshot.patch"),
803
792
  changes: z.array(sessionProtocolChangeSchema),
804
793
  })
805
- .strict(),
794
+ .strip(),
806
795
  z
807
796
  .object({
808
797
  type: z.literal("snapshot.reset"),
809
798
  snapshot: sessionProtocolSnapshotSchema,
810
799
  })
811
- .strict(),
800
+ .strip(),
812
801
  ]);
813
802
  const sessionProtocolDeltaMessageSchema = z
814
803
  .object({
@@ -820,7 +809,7 @@ const sessionProtocolDeltaMessageSchema = z
820
809
  reason: sessionProtocolDeltaReasonSchema,
821
810
  delta: sessionProtocolDeltaSchema,
822
811
  })
823
- .strict()
812
+ .strip()
824
813
  .superRefine((message, ctx) => {
825
814
  if (message.delta.type === "snapshot.patch" && message.fromRevision === null) {
826
815
  ctx.addIssue({
@@ -871,9 +860,9 @@ const sessionProtocolEphemeralAgentThreadUpdateEventSchema = z
871
860
  usage: sessionProtocolAgentUsageSchema,
872
861
  lastActivityText: z.string().optional(),
873
862
  })
874
- .strict(),
863
+ .strip(),
875
864
  })
876
- .strict();
865
+ .strip();
877
866
  const sessionProtocolEphemeralEventSchema = sessionProtocolEphemeralAgentThreadUpdateEventSchema;
878
867
  const sessionProtocolEphemeralMessageSchema = z
879
868
  .object({
@@ -882,20 +871,20 @@ const sessionProtocolEphemeralMessageSchema = z
882
871
  sessionId: nonEmptyStringSchema,
883
872
  event: sessionProtocolEphemeralEventSchema,
884
873
  })
885
- .strict();
874
+ .strip();
886
875
  const sessionProtocolPendingUserMessageSchema = z
887
876
  .object({
888
877
  id: nonEmptyStringSchema,
889
878
  mode: z.enum(["queue", "steer"]),
890
879
  text: nonEmptyStringSchema,
891
880
  })
892
- .strict();
881
+ .strip();
893
882
  const sessionProtocolPendingUserMessagesStateSchema = z
894
883
  .object({
895
884
  revision: z.number().int().positive(),
896
885
  messages: z.array(sessionProtocolPendingUserMessageSchema),
897
886
  })
898
- .strict()
887
+ .strip()
899
888
  .superRefine((state, ctx) => {
900
889
  const ids = new Set();
901
890
  for (const message of state.messages) {
@@ -916,30 +905,30 @@ const sessionProtocolPendingUserMessagesMessageSchema = z
916
905
  sessionId: nonEmptyStringSchema,
917
906
  state: sessionProtocolPendingUserMessagesStateSchema,
918
907
  })
919
- .strict();
908
+ .strip();
920
909
  const sessionProtocolInitializeResultSchema = z
921
910
  .object({
922
911
  protocolVersion: z.literal(SESSION_PROTOCOL_VERSION),
923
912
  methods: sessionProtocolMethodListSchema,
924
913
  alreadyInitialized: z.boolean(),
925
914
  })
926
- .strict();
915
+ .strip();
927
916
  const sessionProtocolCreateResultSchema = z
928
917
  .object({
929
918
  sessionId: nonEmptyStringSchema,
930
919
  })
931
- .strict();
920
+ .strip();
932
921
  const sessionProtocolObserveResultSchema = z
933
922
  .object({
934
923
  snapshot: sessionProtocolSnapshotSchema,
935
924
  pendingUserMessages: sessionProtocolPendingUserMessagesStateSchema,
936
925
  })
937
- .strict();
926
+ .strip();
938
927
  const sessionProtocolListResultSchema = z
939
928
  .object({
940
929
  sessions: z.array(sessionProtocolSessionSummarySchema),
941
930
  })
942
- .strict();
931
+ .strip();
943
932
  const sessionProtocolSubmitResultSchema = z
944
933
  .object({
945
934
  turn: z
@@ -950,30 +939,30 @@ const sessionProtocolSubmitResultSchema = z
950
939
  reason: z.literal("auto-compaction-failed"),
951
940
  message: z.string(),
952
941
  })
953
- .strict()
942
+ .strip()
954
943
  .optional(),
955
944
  })
956
- .strict(),
945
+ .strip(),
957
946
  })
958
- .strict();
947
+ .strip();
959
948
  const sessionProtocolTurnResultSchema = sessionProtocolSubmitResultSchema;
960
949
  const sessionProtocolRetryResultSchema = sessionProtocolTurnResultSchema;
961
950
  const sessionProtocolSubmitWithUserResultSchema = sessionProtocolTurnResultSchema
962
951
  .extend({
963
952
  userHistoryEntryId: nonEmptyStringSchema,
964
953
  })
965
- .strict();
954
+ .strip();
966
955
  const sessionProtocolCancelPendingMessagesResultSchema = z
967
956
  .object({
968
957
  cancelled: z.array(sessionProtocolPendingUserMessageSchema),
969
958
  })
970
- .strict();
959
+ .strip();
971
960
  const sessionProtocolRecordResultSchema = z
972
961
  .object({
973
962
  snapshot: sessionProtocolSnapshotSchema,
974
963
  userHistoryEntryId: nonEmptyStringSchema,
975
964
  })
976
- .strict();
965
+ .strip();
977
966
  const sessionProtocolExecResultSchema = z
978
967
  .object({
979
968
  output: z.string(),
@@ -982,26 +971,26 @@ const sessionProtocolExecResultSchema = z
982
971
  exitCode: z.number().int().nullable(),
983
972
  truncated: z.boolean(),
984
973
  })
985
- .strict();
974
+ .strip();
986
975
  const sessionProtocolInterruptResultSchema = z
987
976
  .object({
988
977
  interrupted: z.boolean(),
989
978
  isTurnRunning: z.boolean(),
990
979
  })
991
- .strict();
980
+ .strip();
992
981
  const sessionProtocolSettingsUpdateResultSchema = z
993
982
  .object({
994
983
  revision: z.number().int().positive(),
995
984
  settings: sessionProtocolSettingsSnapshotSchema,
996
985
  })
997
- .strict();
986
+ .strip();
998
987
  const sessionProtocolCompactResultSchema = z
999
988
  .object({
1000
989
  snapshot: sessionProtocolSnapshotSchema,
1001
990
  compactionMessage: nonEmptyStringSchema,
1002
991
  includedLastAssistant: z.boolean(),
1003
992
  })
1004
- .strict();
993
+ .strip();
1005
994
  const sessionProtocolPruneResultSchema = z
1006
995
  .object({
1007
996
  snapshot: sessionProtocolSnapshotSchema,
@@ -1012,7 +1001,7 @@ const sessionProtocolPruneResultSchema = z
1012
1001
  editResultsPruned: z.number().int().nonnegative(),
1013
1002
  bytesPruned: z.number().int().nonnegative(),
1014
1003
  })
1015
- .strict();
1004
+ .strip();
1016
1005
  const sessionProtocolRewindResultSchema = z
1017
1006
  .object({
1018
1007
  snapshot: sessionProtocolSnapshotSchema,
@@ -1020,7 +1009,7 @@ const sessionProtocolRewindResultSchema = z
1020
1009
  text: z.string(),
1021
1010
  removedEntryIds: z.array(nonEmptyStringSchema),
1022
1011
  })
1023
- .strict();
1012
+ .strip();
1024
1013
  const sessionProtocolReloadResultSchema = z
1025
1014
  .object({
1026
1015
  snapshot: sessionProtocolSnapshotSchema,
@@ -1031,56 +1020,56 @@ const sessionProtocolReloadResultSchema = z
1031
1020
  prompts: z.number().int().nonnegative(),
1032
1021
  skills: z.number().int().nonnegative(),
1033
1022
  })
1034
- .strict(),
1023
+ .strip(),
1035
1024
  })
1036
- .strict();
1025
+ .strip();
1037
1026
  const sessionProtocolResolvePromptResultSchema = z
1038
1027
  .object({
1039
1028
  promptId: nonEmptyStringSchema,
1040
1029
  text: z.string(),
1041
1030
  })
1042
- .strict();
1031
+ .strip();
1043
1032
  const sessionProtocolAutocompletePathsResultSchema = z
1044
1033
  .object({
1045
1034
  paths: z.array(z.string()),
1046
1035
  })
1047
- .strict();
1036
+ .strip();
1048
1037
  const sessionProtocolUnobserveResultSchema = z
1049
1038
  .object({
1050
1039
  unobserved: z.literal(true),
1051
1040
  })
1052
- .strict();
1041
+ .strip();
1053
1042
  const sessionProtocolTerminateSubagentResultSchema = z
1054
1043
  .object({
1055
1044
  found: z.boolean(),
1056
1045
  })
1057
- .strict();
1046
+ .strip();
1058
1047
  const sessionProtocolEphemeralCreateResultSchema = z
1059
1048
  .object({
1060
1049
  contextId: nonEmptyStringSchema,
1061
1050
  })
1062
- .strict();
1051
+ .strip();
1063
1052
  const sessionProtocolEphemeralSubmitResultSchema = z
1064
1053
  .object({
1065
1054
  threadId: nonEmptyStringSchema,
1066
1055
  response: z.string(),
1067
1056
  })
1068
- .strict();
1057
+ .strip();
1069
1058
  const sessionProtocolEphemeralCloseResultSchema = z
1070
1059
  .object({
1071
1060
  closed: z.boolean(),
1072
1061
  })
1073
- .strict();
1062
+ .strip();
1074
1063
  const sessionProtocolClientToolAckResultSchema = z
1075
1064
  .object({
1076
1065
  accepted: z.boolean(),
1077
1066
  })
1078
- .strict();
1067
+ .strip();
1079
1068
  const sessionProtocolClientToolResultResultSchema = z
1080
1069
  .object({
1081
1070
  accepted: z.boolean(),
1082
1071
  })
1083
- .strict();
1072
+ .strip();
1084
1073
  export function isSessionProtocolMethod(value) {
1085
1074
  return typeof value === "string" && SESSION_PROTOCOL_METHOD_SET.has(value);
1086
1075
  }
@@ -1430,13 +1419,6 @@ export function parseSessionProtocolRequestLine(line) {
1430
1419
  error: createSessionProtocolError(SESSION_PROTOCOL_ERROR_CODES.invalidRequest, "request id must be a non-empty string"),
1431
1420
  };
1432
1421
  }
1433
- if (hasIssue(requestEnvelope.error, [], "unrecognized_keys")) {
1434
- return {
1435
- ok: false,
1436
- id: requestId,
1437
- error: createSessionProtocolError(SESSION_PROTOCOL_ERROR_CODES.invalidRequest, "request contains unsupported top-level fields"),
1438
- };
1439
- }
1440
1422
  if (hasIssue(requestEnvelope.error, ["version"])) {
1441
1423
  const parsedVersionField = sessionProtocolVersionFieldSchema.safeParse(parsed);
1442
1424
  const version = parsedVersionField.success ? parsedVersionField.data.version : undefined;
@@ -1602,8 +1584,6 @@ export function validateSessionProtocolParams(method, params) {
1602
1584
  case "session.snapshot":
1603
1585
  case "session.reload":
1604
1586
  return validateSessionIdParams(method, params);
1605
- case "session.setRisk":
1606
- return validateSetRiskParams(params);
1607
1587
  case "session.setReasoning":
1608
1588
  return validateSetReasoningParams(params);
1609
1589
  case "session.setPersona":
@@ -1641,7 +1621,6 @@ export function validateSessionProtocolResult(method, result) {
1641
1621
  case "session.observe":
1642
1622
  return validateResult(method, result, sessionProtocolObserveResultSchema);
1643
1623
  case "session.snapshot":
1644
- case "session.setRisk":
1645
1624
  case "session.setPersona":
1646
1625
  return validateResult(method, result, sessionProtocolSnapshotSchema);
1647
1626
  case "session.setReasoning":
@@ -1695,11 +1674,9 @@ function validateSessionIdParams(method, params) {
1695
1674
  if (!parsed.success) {
1696
1675
  const message = hasIssue(parsed.error, [], "invalid_type")
1697
1676
  ? `${method} params must be an object`
1698
- : hasIssue(parsed.error, [], "unrecognized_keys")
1699
- ? `${method} params only support sessionId`
1700
- : hasIssue(parsed.error, ["sessionId"])
1701
- ? `${method} params.sessionId must be a non-empty string`
1702
- : `${method} params are invalid: ${formatZodError(parsed.error)}`;
1677
+ : hasIssue(parsed.error, ["sessionId"])
1678
+ ? `${method} params.sessionId must be a non-empty string`
1679
+ : `${method} params are invalid: ${formatZodError(parsed.error)}`;
1703
1680
  return invalidParams(message);
1704
1681
  }
1705
1682
  return {
@@ -1714,7 +1691,7 @@ function validateInitializeParams(params) {
1714
1691
  if (!parsed.success) {
1715
1692
  const message = hasIssue(parsed.error, [], "invalid_type")
1716
1693
  ? "initialize params must be an object with client metadata"
1717
- : hasIssue(parsed.error, ["client"]) || hasIssue(parsed.error, [], "unrecognized_keys")
1694
+ : hasIssue(parsed.error, ["client"])
1718
1695
  ? "initialize.client must be an object with name/version strings and optional tools"
1719
1696
  : hasIssue(parsed.error, ["client", "name"])
1720
1697
  ? "initialize.client.name must be a non-empty string"
@@ -1739,15 +1716,13 @@ function validateUserMessageParams(method, params) {
1739
1716
  if (!parsed.success) {
1740
1717
  const message = hasIssue(parsed.error, [], "invalid_type")
1741
1718
  ? `${method} params must be an object`
1742
- : hasIssue(parsed.error, [], "unrecognized_keys")
1743
- ? `${method} params only support sessionId, text, and optional historyEntryId`
1744
- : hasIssue(parsed.error, ["sessionId"])
1745
- ? `${method} params.sessionId must be a non-empty string`
1746
- : hasIssue(parsed.error, ["text"])
1747
- ? `${method} params.text must be a string`
1748
- : hasIssue(parsed.error, ["historyEntryId"])
1749
- ? `${method} params.historyEntryId must be a non-empty string when provided`
1750
- : `${method} params are invalid: ${formatZodError(parsed.error)}`;
1719
+ : hasIssue(parsed.error, ["sessionId"])
1720
+ ? `${method} params.sessionId must be a non-empty string`
1721
+ : hasIssue(parsed.error, ["text"])
1722
+ ? `${method} params.text must be a string`
1723
+ : hasIssue(parsed.error, ["historyEntryId"])
1724
+ ? `${method} params.historyEntryId must be a non-empty string when provided`
1725
+ : `${method} params are invalid: ${formatZodError(parsed.error)}`;
1751
1726
  return invalidParams(message);
1752
1727
  }
1753
1728
  return {
@@ -1766,15 +1741,13 @@ function validateRecordParams(params) {
1766
1741
  if (!parsed.success) {
1767
1742
  const message = hasIssue(parsed.error, [], "invalid_type")
1768
1743
  ? "session.record params must be an object"
1769
- : hasIssue(parsed.error, [], "unrecognized_keys")
1770
- ? "session.record params only support sessionId, text, and optional historyEntryId"
1771
- : hasIssue(parsed.error, ["sessionId"])
1772
- ? "session.record params.sessionId must be a non-empty string"
1773
- : hasIssue(parsed.error, ["text"])
1774
- ? "session.record params.text must be a string"
1775
- : hasIssue(parsed.error, ["historyEntryId"])
1776
- ? "session.record params.historyEntryId must be a non-empty string when provided"
1777
- : `session.record params are invalid: ${formatZodError(parsed.error)}`;
1744
+ : hasIssue(parsed.error, ["sessionId"])
1745
+ ? "session.record params.sessionId must be a non-empty string"
1746
+ : hasIssue(parsed.error, ["text"])
1747
+ ? "session.record params.text must be a string"
1748
+ : hasIssue(parsed.error, ["historyEntryId"])
1749
+ ? "session.record params.historyEntryId must be a non-empty string when provided"
1750
+ : `session.record params are invalid: ${formatZodError(parsed.error)}`;
1778
1751
  return invalidParams(message);
1779
1752
  }
1780
1753
  return {
@@ -1793,17 +1766,15 @@ function validateExecParams(params) {
1793
1766
  if (!parsed.success) {
1794
1767
  const message = hasIssue(parsed.error, [], "invalid_type")
1795
1768
  ? "session.exec params must be an object"
1796
- : hasIssue(parsed.error, [], "unrecognized_keys")
1797
- ? "session.exec params only support sessionId, command, optional cwd, and optional timeoutMs"
1798
- : hasIssue(parsed.error, ["sessionId"])
1799
- ? "session.exec params.sessionId must be a non-empty string"
1800
- : hasIssue(parsed.error, ["command"])
1801
- ? "session.exec params.command must be a non-empty string"
1802
- : hasIssue(parsed.error, ["cwd"])
1803
- ? "session.exec params.cwd must be a non-empty string when provided"
1804
- : hasIssue(parsed.error, ["timeoutMs"])
1805
- ? "session.exec params.timeoutMs must be a positive integer when provided"
1806
- : `session.exec params are invalid: ${formatZodError(parsed.error)}`;
1769
+ : hasIssue(parsed.error, ["sessionId"])
1770
+ ? "session.exec params.sessionId must be a non-empty string"
1771
+ : hasIssue(parsed.error, ["command"])
1772
+ ? "session.exec params.command must be a non-empty string"
1773
+ : hasIssue(parsed.error, ["cwd"])
1774
+ ? "session.exec params.cwd must be a non-empty string when provided"
1775
+ : hasIssue(parsed.error, ["timeoutMs"])
1776
+ ? "session.exec params.timeoutMs must be a positive integer when provided"
1777
+ : `session.exec params are invalid: ${formatZodError(parsed.error)}`;
1807
1778
  return invalidParams(message);
1808
1779
  }
1809
1780
  return {
@@ -1816,40 +1787,16 @@ function validateExecParams(params) {
1816
1787
  },
1817
1788
  };
1818
1789
  }
1819
- function validateSetRiskParams(params) {
1820
- const parsed = sessionProtocolSetRiskParamsSchema.safeParse(params);
1821
- if (!parsed.success) {
1822
- const message = hasIssue(parsed.error, [], "invalid_type")
1823
- ? "session.setRisk params must be an object"
1824
- : hasIssue(parsed.error, [], "unrecognized_keys")
1825
- ? "session.setRisk params only support sessionId and riskLevel"
1826
- : hasIssue(parsed.error, ["sessionId"])
1827
- ? "session.setRisk params.sessionId must be a non-empty string"
1828
- : hasIssue(parsed.error, ["riskLevel"])
1829
- ? "session.setRisk params.riskLevel must be 'read-only' or 'read-write'"
1830
- : `session.setRisk params are invalid: ${formatZodError(parsed.error)}`;
1831
- return invalidParams(message);
1832
- }
1833
- return {
1834
- ok: true,
1835
- value: {
1836
- sessionId: parsed.data.sessionId,
1837
- riskLevel: parsed.data.riskLevel,
1838
- },
1839
- };
1840
- }
1841
1790
  function validateSetReasoningParams(params) {
1842
1791
  const parsed = sessionProtocolSetReasoningParamsSchema.safeParse(params);
1843
1792
  if (!parsed.success) {
1844
1793
  const message = hasIssue(parsed.error, [], "invalid_type")
1845
1794
  ? "session.setReasoning params must be an object"
1846
- : hasIssue(parsed.error, [], "unrecognized_keys")
1847
- ? "session.setReasoning params only support sessionId and reasoning"
1848
- : hasIssue(parsed.error, ["sessionId"])
1849
- ? "session.setReasoning params.sessionId must be a non-empty string"
1850
- : hasIssue(parsed.error, ["reasoning"])
1851
- ? "session.setReasoning params.reasoning must be one of none, minimal, low, medium, high, xhigh, or max"
1852
- : `session.setReasoning params are invalid: ${formatZodError(parsed.error)}`;
1795
+ : hasIssue(parsed.error, ["sessionId"])
1796
+ ? "session.setReasoning params.sessionId must be a non-empty string"
1797
+ : hasIssue(parsed.error, ["reasoning"])
1798
+ ? "session.setReasoning params.reasoning must be one of none, minimal, low, medium, high, xhigh, or max"
1799
+ : `session.setReasoning params are invalid: ${formatZodError(parsed.error)}`;
1853
1800
  return invalidParams(message);
1854
1801
  }
1855
1802
  return {
@@ -1865,13 +1812,11 @@ function validateSetPersonaParams(params) {
1865
1812
  if (!parsed.success) {
1866
1813
  const message = hasIssue(parsed.error, [], "invalid_type")
1867
1814
  ? "session.setPersona params must be an object"
1868
- : hasIssue(parsed.error, [], "unrecognized_keys")
1869
- ? "session.setPersona params only support sessionId and personaId"
1870
- : hasIssue(parsed.error, ["sessionId"])
1871
- ? "session.setPersona params.sessionId must be a non-empty string"
1872
- : hasIssue(parsed.error, ["personaId"])
1873
- ? "session.setPersona params.personaId must be a non-empty string"
1874
- : `session.setPersona params are invalid: ${formatZodError(parsed.error)}`;
1815
+ : hasIssue(parsed.error, ["sessionId"])
1816
+ ? "session.setPersona params.sessionId must be a non-empty string"
1817
+ : hasIssue(parsed.error, ["personaId"])
1818
+ ? "session.setPersona params.personaId must be a non-empty string"
1819
+ : `session.setPersona params are invalid: ${formatZodError(parsed.error)}`;
1875
1820
  return invalidParams(message);
1876
1821
  }
1877
1822
  return {
@@ -1887,13 +1832,11 @@ function validateResolvePromptParams(params) {
1887
1832
  if (!parsed.success) {
1888
1833
  const message = hasIssue(parsed.error, [], "invalid_type")
1889
1834
  ? "session.resolvePrompt params must be an object"
1890
- : hasIssue(parsed.error, [], "unrecognized_keys")
1891
- ? "session.resolvePrompt params only support sessionId and promptId"
1892
- : hasIssue(parsed.error, ["sessionId"])
1893
- ? "session.resolvePrompt params.sessionId must be a non-empty string"
1894
- : hasIssue(parsed.error, ["promptId"])
1895
- ? "session.resolvePrompt params.promptId must be a non-empty string"
1896
- : `session.resolvePrompt params are invalid: ${formatZodError(parsed.error)}`;
1835
+ : hasIssue(parsed.error, ["sessionId"])
1836
+ ? "session.resolvePrompt params.sessionId must be a non-empty string"
1837
+ : hasIssue(parsed.error, ["promptId"])
1838
+ ? "session.resolvePrompt params.promptId must be a non-empty string"
1839
+ : `session.resolvePrompt params are invalid: ${formatZodError(parsed.error)}`;
1897
1840
  return invalidParams(message);
1898
1841
  }
1899
1842
  return {
@@ -1909,15 +1852,13 @@ function validateAutocompletePathsParams(params) {
1909
1852
  if (!parsed.success) {
1910
1853
  const message = hasIssue(parsed.error, [], "invalid_type")
1911
1854
  ? "session.autocompletePaths params must be an object"
1912
- : hasIssue(parsed.error, [], "unrecognized_keys")
1913
- ? "session.autocompletePaths params only support sessionId, query, and limit"
1914
- : hasIssue(parsed.error, ["sessionId"])
1915
- ? "session.autocompletePaths params.sessionId must be a non-empty string"
1916
- : hasIssue(parsed.error, ["query"])
1917
- ? "session.autocompletePaths params.query must be a string"
1918
- : hasIssue(parsed.error, ["limit"])
1919
- ? "session.autocompletePaths params.limit must be a positive integer up to 100"
1920
- : `session.autocompletePaths params are invalid: ${formatZodError(parsed.error)}`;
1855
+ : hasIssue(parsed.error, ["sessionId"])
1856
+ ? "session.autocompletePaths params.sessionId must be a non-empty string"
1857
+ : hasIssue(parsed.error, ["query"])
1858
+ ? "session.autocompletePaths params.query must be a string"
1859
+ : hasIssue(parsed.error, ["limit"])
1860
+ ? "session.autocompletePaths params.limit must be a positive integer up to 100"
1861
+ : `session.autocompletePaths params are invalid: ${formatZodError(parsed.error)}`;
1921
1862
  return invalidParams(message);
1922
1863
  }
1923
1864
  return {
@@ -1934,15 +1875,13 @@ function validateCompactParams(params) {
1934
1875
  if (!parsed.success) {
1935
1876
  const message = hasIssue(parsed.error, [], "invalid_type")
1936
1877
  ? "session.compact params must be an object"
1937
- : hasIssue(parsed.error, [], "unrecognized_keys")
1938
- ? "session.compact params only support sessionId, mode, and optional guidance"
1939
- : hasIssue(parsed.error, ["sessionId"])
1940
- ? "session.compact params.sessionId must be a non-empty string"
1941
- : hasIssue(parsed.error, ["mode"])
1942
- ? "session.compact params.mode must be 'summary-only' or 'summary-and-last'"
1943
- : hasIssue(parsed.error, ["guidance"])
1944
- ? "session.compact params.guidance must be a string when provided"
1945
- : `session.compact params are invalid: ${formatZodError(parsed.error)}`;
1878
+ : hasIssue(parsed.error, ["sessionId"])
1879
+ ? "session.compact params.sessionId must be a non-empty string"
1880
+ : hasIssue(parsed.error, ["mode"])
1881
+ ? "session.compact params.mode must be 'summary-only' or 'summary-and-last'"
1882
+ : hasIssue(parsed.error, ["guidance"])
1883
+ ? "session.compact params.guidance must be a string when provided"
1884
+ : `session.compact params are invalid: ${formatZodError(parsed.error)}`;
1946
1885
  return invalidParams(message);
1947
1886
  }
1948
1887
  return {
@@ -1959,17 +1898,15 @@ function validatePruneParams(params) {
1959
1898
  if (!parsed.success) {
1960
1899
  const message = hasIssue(parsed.error, [], "invalid_type")
1961
1900
  ? "session.prune params must be an object"
1962
- : hasIssue(parsed.error, [], "unrecognized_keys")
1963
- ? "session.prune params only support sessionId, strategy, fraction, and optional guidance"
1964
- : hasIssue(parsed.error, ["sessionId"])
1965
- ? "session.prune params.sessionId must be a non-empty string"
1966
- : hasIssue(parsed.error, ["strategy"])
1967
- ? "session.prune params.strategy must be 'earliest', 'largest', or 'smart'"
1968
- : hasIssue(parsed.error, ["fraction"])
1969
- ? "session.prune params.fraction must be a number between 0 and 1"
1970
- : hasIssue(parsed.error, ["guidance"])
1971
- ? "session.prune params.guidance must be a string when provided"
1972
- : `session.prune params are invalid: ${formatZodError(parsed.error)}`;
1901
+ : hasIssue(parsed.error, ["sessionId"])
1902
+ ? "session.prune params.sessionId must be a non-empty string"
1903
+ : hasIssue(parsed.error, ["strategy"])
1904
+ ? "session.prune params.strategy must be 'earliest', 'largest', or 'smart'"
1905
+ : hasIssue(parsed.error, ["fraction"])
1906
+ ? "session.prune params.fraction must be a number between 0 and 1"
1907
+ : hasIssue(parsed.error, ["guidance"])
1908
+ ? "session.prune params.guidance must be a string when provided"
1909
+ : `session.prune params are invalid: ${formatZodError(parsed.error)}`;
1973
1910
  return invalidParams(message);
1974
1911
  }
1975
1912
  return {
@@ -1987,13 +1924,11 @@ function validateRewindParams(params) {
1987
1924
  if (!parsed.success) {
1988
1925
  const message = hasIssue(parsed.error, [], "invalid_type")
1989
1926
  ? "session.rewind params must be an object"
1990
- : hasIssue(parsed.error, [], "unrecognized_keys")
1991
- ? "session.rewind params only support sessionId and historyEntryId"
1992
- : hasIssue(parsed.error, ["sessionId"])
1993
- ? "session.rewind params.sessionId must be a non-empty string"
1994
- : hasIssue(parsed.error, ["historyEntryId"])
1995
- ? "session.rewind params.historyEntryId must be a non-empty string"
1996
- : `session.rewind params are invalid: ${formatZodError(parsed.error)}`;
1927
+ : hasIssue(parsed.error, ["sessionId"])
1928
+ ? "session.rewind params.sessionId must be a non-empty string"
1929
+ : hasIssue(parsed.error, ["historyEntryId"])
1930
+ ? "session.rewind params.historyEntryId must be a non-empty string"
1931
+ : `session.rewind params are invalid: ${formatZodError(parsed.error)}`;
1997
1932
  return invalidParams(message);
1998
1933
  }
1999
1934
  return {
@@ -2009,13 +1944,11 @@ function validateTerminateSubagentParams(params) {
2009
1944
  if (!parsed.success) {
2010
1945
  const message = hasIssue(parsed.error, [], "invalid_type")
2011
1946
  ? "session.terminateSubagent params must be an object"
2012
- : hasIssue(parsed.error, [], "unrecognized_keys")
2013
- ? "session.terminateSubagent params only support sessionId and subagentId"
2014
- : hasIssue(parsed.error, ["sessionId"])
2015
- ? "session.terminateSubagent params.sessionId must be a non-empty string"
2016
- : hasIssue(parsed.error, ["subagentId"])
2017
- ? "session.terminateSubagent params.subagentId must be a non-empty string"
2018
- : `session.terminateSubagent params are invalid: ${formatZodError(parsed.error)}`;
1947
+ : hasIssue(parsed.error, ["sessionId"])
1948
+ ? "session.terminateSubagent params.sessionId must be a non-empty string"
1949
+ : hasIssue(parsed.error, ["subagentId"])
1950
+ ? "session.terminateSubagent params.subagentId must be a non-empty string"
1951
+ : `session.terminateSubagent params are invalid: ${formatZodError(parsed.error)}`;
2019
1952
  return invalidParams(message);
2020
1953
  }
2021
1954
  return {
@@ -2031,17 +1964,13 @@ function validateEphemeralCreateParams(params) {
2031
1964
  if (!parsed.success) {
2032
1965
  const message = hasIssue(parsed.error, [], "invalid_type")
2033
1966
  ? "session.ephemeral.create params must be an object"
2034
- : hasIssue(parsed.error, [], "unrecognized_keys")
2035
- ? "session.ephemeral.create params only support sessionId, instructions, tools, and riskLevel"
2036
- : hasIssue(parsed.error, ["sessionId"])
2037
- ? "session.ephemeral.create params.sessionId must be a non-empty string"
2038
- : hasIssue(parsed.error, ["instructions"])
2039
- ? "session.ephemeral.create params.instructions must be a non-empty string"
2040
- : hasIssue(parsed.error, ["tools"])
2041
- ? "session.ephemeral.create params.tools are invalid"
2042
- : hasIssue(parsed.error, ["riskLevel"])
2043
- ? "session.ephemeral.create params.riskLevel must be read-only or read-write"
2044
- : `session.ephemeral.create params are invalid: ${formatZodError(parsed.error)}`;
1967
+ : hasIssue(parsed.error, ["sessionId"])
1968
+ ? "session.ephemeral.create params.sessionId must be a non-empty string"
1969
+ : hasIssue(parsed.error, ["instructions"])
1970
+ ? "session.ephemeral.create params.instructions must be a non-empty string"
1971
+ : hasIssue(parsed.error, ["tools"])
1972
+ ? "session.ephemeral.create params.tools are invalid"
1973
+ : `session.ephemeral.create params are invalid: ${formatZodError(parsed.error)}`;
2045
1974
  return invalidParams(message);
2046
1975
  }
2047
1976
  return { ok: true, value: parsed.data };
@@ -2051,19 +1980,17 @@ function validateEphemeralSubmitParams(params) {
2051
1980
  if (!parsed.success) {
2052
1981
  const message = hasIssue(parsed.error, [], "invalid_type")
2053
1982
  ? "session.ephemeral.submit params must be an object"
2054
- : hasIssue(parsed.error, [], "unrecognized_keys")
2055
- ? "session.ephemeral.submit params only support sessionId, contextId, threadId, optional forkFromThreadId, and message"
2056
- : hasIssue(parsed.error, ["sessionId"])
2057
- ? "session.ephemeral.submit params.sessionId must be a non-empty string"
2058
- : hasIssue(parsed.error, ["contextId"])
2059
- ? "session.ephemeral.submit params.contextId must be a non-empty string"
2060
- : hasIssue(parsed.error, ["threadId"])
2061
- ? "session.ephemeral.submit params.threadId must be a non-empty string"
2062
- : hasIssue(parsed.error, ["forkFromThreadId"])
2063
- ? "session.ephemeral.submit params.forkFromThreadId must be a non-empty string when provided"
2064
- : hasIssue(parsed.error, ["message"])
2065
- ? "session.ephemeral.submit params.message must be a non-empty string"
2066
- : `session.ephemeral.submit params are invalid: ${formatZodError(parsed.error)}`;
1983
+ : hasIssue(parsed.error, ["sessionId"])
1984
+ ? "session.ephemeral.submit params.sessionId must be a non-empty string"
1985
+ : hasIssue(parsed.error, ["contextId"])
1986
+ ? "session.ephemeral.submit params.contextId must be a non-empty string"
1987
+ : hasIssue(parsed.error, ["threadId"])
1988
+ ? "session.ephemeral.submit params.threadId must be a non-empty string"
1989
+ : hasIssue(parsed.error, ["forkFromThreadId"])
1990
+ ? "session.ephemeral.submit params.forkFromThreadId must be a non-empty string when provided"
1991
+ : hasIssue(parsed.error, ["message"])
1992
+ ? "session.ephemeral.submit params.message must be a non-empty string"
1993
+ : `session.ephemeral.submit params are invalid: ${formatZodError(parsed.error)}`;
2067
1994
  return invalidParams(message);
2068
1995
  }
2069
1996
  return {
@@ -2084,13 +2011,11 @@ function validateEphemeralCloseParams(params) {
2084
2011
  if (!parsed.success) {
2085
2012
  const message = hasIssue(parsed.error, [], "invalid_type")
2086
2013
  ? "session.ephemeral.close params must be an object"
2087
- : hasIssue(parsed.error, [], "unrecognized_keys")
2088
- ? "session.ephemeral.close params only support sessionId and contextId"
2089
- : hasIssue(parsed.error, ["sessionId"])
2090
- ? "session.ephemeral.close params.sessionId must be a non-empty string"
2091
- : hasIssue(parsed.error, ["contextId"])
2092
- ? "session.ephemeral.close params.contextId must be a non-empty string"
2093
- : `session.ephemeral.close params are invalid: ${formatZodError(parsed.error)}`;
2014
+ : hasIssue(parsed.error, ["sessionId"])
2015
+ ? "session.ephemeral.close params.sessionId must be a non-empty string"
2016
+ : hasIssue(parsed.error, ["contextId"])
2017
+ ? "session.ephemeral.close params.contextId must be a non-empty string"
2018
+ : `session.ephemeral.close params are invalid: ${formatZodError(parsed.error)}`;
2094
2019
  return invalidParams(message);
2095
2020
  }
2096
2021
  return { ok: true, value: parsed.data };
@@ -2100,13 +2025,11 @@ function validateClientToolAckParams(params) {
2100
2025
  if (!parsed.success) {
2101
2026
  const message = hasIssue(parsed.error, [], "invalid_type")
2102
2027
  ? "session.clientTool.ack params must be an object"
2103
- : hasIssue(parsed.error, [], "unrecognized_keys")
2104
- ? "session.clientTool.ack params only support sessionId and callId"
2105
- : hasIssue(parsed.error, ["sessionId"])
2106
- ? "session.clientTool.ack params.sessionId must be a non-empty string"
2107
- : hasIssue(parsed.error, ["callId"])
2108
- ? "session.clientTool.ack params.callId must be a non-empty string"
2109
- : `session.clientTool.ack params are invalid: ${formatZodError(parsed.error)}`;
2028
+ : hasIssue(parsed.error, ["sessionId"])
2029
+ ? "session.clientTool.ack params.sessionId must be a non-empty string"
2030
+ : hasIssue(parsed.error, ["callId"])
2031
+ ? "session.clientTool.ack params.callId must be a non-empty string"
2032
+ : `session.clientTool.ack params are invalid: ${formatZodError(parsed.error)}`;
2110
2033
  return invalidParams(message);
2111
2034
  }
2112
2035
  return { ok: true, value: parsed.data };
@@ -2116,13 +2039,11 @@ function validateClientToolResultParams(params) {
2116
2039
  if (!parsed.success) {
2117
2040
  const message = hasIssue(parsed.error, [], "invalid_type")
2118
2041
  ? "session.clientTool.result params must be an object"
2119
- : hasIssue(parsed.error, [], "unrecognized_keys")
2120
- ? "session.clientTool.result params only support sessionId, callId, ok, content, and error"
2121
- : hasIssue(parsed.error, ["sessionId"])
2122
- ? "session.clientTool.result params.sessionId must be a non-empty string"
2123
- : hasIssue(parsed.error, ["callId"])
2124
- ? "session.clientTool.result params.callId must be a non-empty string"
2125
- : `session.clientTool.result params are invalid: ${formatZodError(parsed.error)}`;
2042
+ : hasIssue(parsed.error, ["sessionId"])
2043
+ ? "session.clientTool.result params.sessionId must be a non-empty string"
2044
+ : hasIssue(parsed.error, ["callId"])
2045
+ ? "session.clientTool.result params.callId must be a non-empty string"
2046
+ : `session.clientTool.result params are invalid: ${formatZodError(parsed.error)}`;
2126
2047
  return invalidParams(message);
2127
2048
  }
2128
2049
  return { ok: true, value: parsed.data };
@@ -2132,21 +2053,17 @@ function validateCreateParams(params) {
2132
2053
  if (!parsed.success) {
2133
2054
  const message = hasIssue(parsed.error, [], "invalid_type")
2134
2055
  ? "session.create params must be an object"
2135
- : hasIssue(parsed.error, [], "unrecognized_keys")
2136
- ? "session.create params only support executionEnvironment, personaId, riskLevel, and reasoning"
2137
- : hasIssue(parsed.error, ["executionEnvironment"])
2138
- ? "session.create params.executionEnvironment must be an object"
2139
- : hasIssue(parsed.error, ["executionEnvironment", "kind"])
2140
- ? "session.create params.executionEnvironment.kind must be 'local', 'cloudflare-sandbox', or 'fly-sprite'"
2141
- : hasIssue(parsed.error, ["executionEnvironment", "cwd"])
2142
- ? "session.create params.executionEnvironment.cwd must be an absolute path"
2143
- : hasIssue(parsed.error, ["personaId"])
2144
- ? "session.create params.personaId must be a non-empty string"
2145
- : hasIssue(parsed.error, ["riskLevel"])
2146
- ? "session.create params.riskLevel must be 'read-only' or 'read-write'"
2147
- : hasIssue(parsed.error, ["reasoning"])
2148
- ? "session.create params.reasoning must be one of none, minimal, low, medium, high, xhigh, or max"
2149
- : `session.create params are invalid: ${formatZodError(parsed.error)}`;
2056
+ : hasIssue(parsed.error, ["executionEnvironment"])
2057
+ ? "session.create params.executionEnvironment must be an object"
2058
+ : hasIssue(parsed.error, ["executionEnvironment", "kind"])
2059
+ ? "session.create params.executionEnvironment.kind must be 'local', 'cloudflare-sandbox', or 'fly-sprite'"
2060
+ : hasIssue(parsed.error, ["executionEnvironment", "cwd"])
2061
+ ? "session.create params.executionEnvironment.cwd must be an absolute path"
2062
+ : hasIssue(parsed.error, ["personaId"])
2063
+ ? "session.create params.personaId must be a non-empty string"
2064
+ : hasIssue(parsed.error, ["reasoning"])
2065
+ ? "session.create params.reasoning must be one of none, minimal, low, medium, high, xhigh, or max"
2066
+ : `session.create params are invalid: ${formatZodError(parsed.error)}`;
2150
2067
  return invalidParams(message);
2151
2068
  }
2152
2069
  return {
@@ -2192,9 +2109,6 @@ function parseSessionProtocolDeltaMessage(payload) {
2192
2109
  const fail = (message) => outgoingParseFailure("session.delta", null, SESSION_PROTOCOL_ERROR_CODES.invalidRequest, message);
2193
2110
  const deltaMessage = sessionProtocolDeltaMessageSchema.safeParse(payload);
2194
2111
  if (!deltaMessage.success) {
2195
- if (hasIssue(deltaMessage.error, [], "unrecognized_keys")) {
2196
- return fail("session.delta message contains unsupported fields");
2197
- }
2198
2112
  if (hasIssue(deltaMessage.error, ["sessionId"])) {
2199
2113
  return fail("session.delta.sessionId must be a non-empty string");
2200
2114
  }
@@ -2233,9 +2147,6 @@ function parseSessionProtocolClientToolMessage(payload) {
2233
2147
  const fail = (message) => outgoingParseFailure(messageType, null, SESSION_PROTOCOL_ERROR_CODES.invalidRequest, message);
2234
2148
  const message = sessionProtocolClientToolMessageSchema.safeParse(payload);
2235
2149
  if (!message.success) {
2236
- if (hasIssue(message.error, [], "unrecognized_keys")) {
2237
- return fail(`${String(messageType)} message contains unsupported fields`);
2238
- }
2239
2150
  return fail(`invalid ${String(messageType)} message: ${formatZodError(message.error)}`);
2240
2151
  }
2241
2152
  return {
@@ -2247,9 +2158,6 @@ function parseSessionProtocolEphemeralMessage(payload) {
2247
2158
  const fail = (message) => outgoingParseFailure("session.ephemeral", null, SESSION_PROTOCOL_ERROR_CODES.invalidRequest, message);
2248
2159
  const ephemeralMessage = sessionProtocolEphemeralMessageSchema.safeParse(payload);
2249
2160
  if (!ephemeralMessage.success) {
2250
- if (hasIssue(ephemeralMessage.error, [], "unrecognized_keys")) {
2251
- return fail("session.ephemeral message contains unsupported fields");
2252
- }
2253
2161
  if (hasIssue(ephemeralMessage.error, ["sessionId"])) {
2254
2162
  return fail("session.ephemeral.sessionId must be a non-empty string");
2255
2163
  }
@@ -2267,9 +2175,6 @@ function parseSessionProtocolPendingUserMessagesMessage(payload) {
2267
2175
  const fail = (message) => outgoingParseFailure("session.pendingUserMessages", null, SESSION_PROTOCOL_ERROR_CODES.invalidRequest, message);
2268
2176
  const message = sessionProtocolPendingUserMessagesMessageSchema.safeParse(payload);
2269
2177
  if (!message.success) {
2270
- if (hasIssue(message.error, [], "unrecognized_keys")) {
2271
- return fail("session.pendingUserMessages message contains unsupported fields");
2272
- }
2273
2178
  if (hasIssue(message.error, ["sessionId"])) {
2274
2179
  return fail("session.pendingUserMessages.sessionId must be a non-empty string");
2275
2180
  }
@@ -2296,9 +2201,6 @@ function parseSessionProtocolResponseMessage(payload) {
2296
2201
  if (ok === true) {
2297
2202
  const successResponse = sessionProtocolResponseSuccessSchema.safeParse(payload);
2298
2203
  if (!successResponse.success) {
2299
- if (hasIssue(successResponse.error, [], "unrecognized_keys")) {
2300
- return fail("successful response must only include result payload");
2301
- }
2302
2204
  if (hasIssue(successResponse.error, ["result"], "invalid_type")) {
2303
2205
  return fail("successful response must include result");
2304
2206
  }
@@ -2323,9 +2225,6 @@ function parseSessionProtocolResponseMessage(payload) {
2323
2225
  }
2324
2226
  const errorResponse = sessionProtocolResponseErrorSchema.safeParse(payload);
2325
2227
  if (!errorResponse.success) {
2326
- if (hasIssue(errorResponse.error, [], "unrecognized_keys")) {
2327
- return fail("error response must only include error payload");
2328
- }
2329
2228
  if (hasIssue(errorResponse.error, ["error"])) {
2330
2229
  return fail("error response.error must be an object");
2331
2230
  }