@markusylisiurunen/tau 0.3.17 → 0.3.19

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 (101) hide show
  1. package/README.md +27 -25
  2. package/dist/core/cli.js +2 -2
  3. package/dist/core/cli.js.map +1 -1
  4. package/dist/core/commands/registry.js +1 -1
  5. package/dist/core/commands/registry.js.map +1 -1
  6. package/dist/core/config/builtin_themes.js +31 -0
  7. package/dist/core/config/builtin_themes.js.map +1 -1
  8. package/dist/core/models/catalog.js +14 -1
  9. package/dist/core/models/catalog.js.map +1 -1
  10. package/dist/core/nook/cli.js +62 -1
  11. package/dist/core/nook/cli.js.map +1 -1
  12. package/dist/core/nook/client.js +156 -2
  13. package/dist/core/nook/client.js.map +1 -1
  14. package/dist/core/nook/deploy.js +27 -8
  15. package/dist/core/nook/deploy.js.map +1 -1
  16. package/dist/core/nook/index.js +2 -2
  17. package/dist/core/nook/index.js.map +1 -1
  18. package/dist/core/nook/validation.js +25 -10
  19. package/dist/core/nook/validation.js.map +1 -1
  20. package/dist/core/personas.js +8 -8
  21. package/dist/core/personas.js.map +1 -1
  22. package/dist/core/runtime/chat_runtime.js +3 -0
  23. package/dist/core/runtime/chat_runtime.js.map +1 -1
  24. package/dist/core/runtime/conversation_turn_runtime.js +7 -0
  25. package/dist/core/runtime/conversation_turn_runtime.js.map +1 -1
  26. package/dist/core/telegram/adapter.js +54 -11
  27. package/dist/core/telegram/adapter.js.map +1 -1
  28. package/dist/core/telegram/cli.js +0 -25
  29. package/dist/core/telegram/cli.js.map +1 -1
  30. package/dist/core/telegram/runtime.js +6 -1
  31. package/dist/core/telegram/runtime.js.map +1 -1
  32. package/dist/core/telegram/session_manager.js +269 -20
  33. package/dist/core/telegram/session_manager.js.map +1 -1
  34. package/dist/core/telegram/workspace.js +55 -32
  35. package/dist/core/telegram/workspace.js.map +1 -1
  36. package/dist/core/tools/execution_backend.js +12 -0
  37. package/dist/core/tools/execution_backend.js.map +1 -1
  38. package/dist/core/tools/nook.js +80 -5
  39. package/dist/core/tools/nook.js.map +1 -1
  40. package/dist/core/types.js +1 -0
  41. package/dist/core/types.js.map +1 -1
  42. package/dist/core/utils/model_stream.js +2 -1
  43. package/dist/core/utils/model_stream.js.map +1 -1
  44. package/dist/core/version.js +1 -1
  45. package/dist/execution/cloudflare_sandbox_execution_environment.js +8 -0
  46. package/dist/execution/cloudflare_sandbox_execution_environment.js.map +1 -1
  47. package/dist/execution/fly_sprite_execution_environment.js +8 -0
  48. package/dist/execution/fly_sprite_execution_environment.js.map +1 -1
  49. package/dist/host/local_session_host.js +18 -2
  50. package/dist/host/local_session_host.js.map +1 -1
  51. package/dist/host/session_protocol_handler.js +132 -34
  52. package/dist/host/session_protocol_handler.js.map +1 -1
  53. package/dist/nook/README.md +23 -0
  54. package/dist/nook/worker/index.js +318 -18
  55. package/dist/nook/worker/index.js.map +1 -1
  56. package/dist/protocol/index.d.ts +2 -2
  57. package/dist/protocol/index.js +1 -1
  58. package/dist/protocol/index.js.map +1 -1
  59. package/dist/protocol/session_protocol.d.ts +52 -7
  60. package/dist/protocol/session_protocol.js +120 -3
  61. package/dist/protocol/session_protocol.js.map +1 -1
  62. package/dist/sdk/index.d.ts +3 -3
  63. package/dist/sdk/index.js.map +1 -1
  64. package/dist/sdk/session.js +72 -10
  65. package/dist/sdk/session.js.map +1 -1
  66. package/dist/sdk/types.d.ts +11 -3
  67. package/dist/transport/in_process_session_transport.js +15 -1
  68. package/dist/transport/in_process_session_transport.js.map +1 -1
  69. package/dist/transport/index.d.ts +1 -1
  70. package/dist/transport/index.js.map +1 -1
  71. package/dist/transport/session_protocol_transport_helpers.js +14 -0
  72. package/dist/transport/session_protocol_transport_helpers.js.map +1 -1
  73. package/dist/transport/session_transport.d.ts +3 -1
  74. package/dist/transport/stdio_session_transport.d.ts +3 -1
  75. package/dist/transport/stdio_session_transport.js +15 -1
  76. package/dist/transport/stdio_session_transport.js.map +1 -1
  77. package/dist/transport/websocket_session_transport.d.ts +3 -1
  78. package/dist/transport/websocket_session_transport.js +15 -1
  79. package/dist/transport/websocket_session_transport.js.map +1 -1
  80. package/dist/tui/chat_view.js +9 -10
  81. package/dist/tui/chat_view.js.map +1 -1
  82. package/dist/tui/session_chat_app.js +0 -3
  83. package/dist/tui/session_chat_app.js.map +1 -1
  84. package/dist/tui/session_chat_controller.js +47 -78
  85. package/dist/tui/session_chat_controller.js.map +1 -1
  86. package/dist/tui/session_tool_execution_backend.js +9 -4
  87. package/dist/tui/session_tool_execution_backend.js.map +1 -1
  88. package/dist/tui/ui/custom_editor.js +0 -12
  89. package/dist/tui/ui/custom_editor.js.map +1 -1
  90. package/dist/tui/ui/{queued_messages.js → pending_messages.js} +14 -11
  91. package/dist/tui/ui/pending_messages.js.map +1 -0
  92. package/dist/tui/ui/subagent_panel.js +0 -7
  93. package/dist/tui/ui/subagent_panel.js.map +1 -1
  94. package/dist/tui/ui/theme/palette.js +1 -0
  95. package/dist/tui/ui/theme/palette.js.map +1 -1
  96. package/dist/tui/ui/theme/theme.js +2 -0
  97. package/dist/tui/ui/theme/theme.js.map +1 -1
  98. package/package.json +3 -3
  99. package/dist/tui/chat_controller/queued_user_messages.js +0 -80
  100. package/dist/tui/chat_controller/queued_user_messages.js.map +0 -1
  101. package/dist/tui/ui/queued_messages.js.map +0 -1
@@ -1,2 +1,2 @@
1
- export { applySessionProtocolDelta, createSessionProtocolDeltaMessage, createSessionProtocolEphemeralMessage, createSessionProtocolError, createSessionProtocolErrorResponse, createSessionProtocolReadyMessage, createSessionProtocolRequest, createSessionProtocolSuccessResponse, isSessionProtocolMethod, parseSessionProtocolOutgoingLine, parseSessionProtocolRequestLine, SESSION_PROTOCOL_ERROR_CODES, SESSION_PROTOCOL_METHODS, SESSION_PROTOCOL_VERSION, serializeSessionProtocolMessage, validateSessionProtocolParams, validateSessionProtocolResult, } from "./session_protocol.js";
1
+ export { applySessionProtocolDelta, createSessionProtocolDeltaMessage, createSessionProtocolEphemeralMessage, createSessionProtocolError, createSessionProtocolErrorResponse, createSessionProtocolPendingUserMessagesMessage, createSessionProtocolReadyMessage, createSessionProtocolRequest, createSessionProtocolSuccessResponse, isSessionProtocolMethod, parseSessionProtocolOutgoingLine, parseSessionProtocolRequestLine, SESSION_PROTOCOL_ERROR_CODES, SESSION_PROTOCOL_METHODS, SESSION_PROTOCOL_VERSION, serializeSessionProtocolMessage, validateSessionProtocolParams, validateSessionProtocolResult, } from "./session_protocol.js";
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/protocol/index.ts"],"names":[],"mappings":"AAoHA,OAAO,EACL,yBAAyB,EACzB,iCAAiC,EACjC,qCAAqC,EACrC,0BAA0B,EAC1B,kCAAkC,EAClC,iCAAiC,EACjC,4BAA4B,EAC5B,oCAAoC,EACpC,uBAAuB,EACvB,gCAAgC,EAChC,+BAA+B,EAC/B,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/protocol/index.ts"],"names":[],"mappings":"AA2HA,OAAO,EACL,yBAAyB,EACzB,iCAAiC,EACjC,qCAAqC,EACrC,0BAA0B,EAC1B,kCAAkC,EAClC,+CAA+C,EAC/C,iCAAiC,EACjC,4BAA4B,EAC5B,oCAAoC,EACpC,uBAAuB,EACvB,gCAAgC,EAChC,+BAA+B,EAC/B,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { Message, TextContent, ThinkingContent, ToolCall } from "@earendil-works/pi-ai";
2
2
  export declare const SESSION_PROTOCOL_VERSION: 1;
3
- export declare const SESSION_PROTOCOL_METHODS: readonly ["initialize", "session.create", "session.list", "session.observe", "session.unobserve", "session.record", "session.submit", "session.queue", "session.steer", "session.retry", "session.exec", "session.interrupt", "session.snapshot", "session.setRisk", "session.setReasoning", "session.setPersona", "session.resolvePrompt", "session.autocompletePaths", "session.reload", "session.compact", "session.prune", "session.rewind", "session.terminateSubagent", "session.ephemeral.create", "session.ephemeral.submit", "session.ephemeral.close", "session.clientTool.ack", "session.clientTool.result"];
3
+ export declare const SESSION_PROTOCOL_METHODS: readonly ["initialize", "session.create", "session.list", "session.observe", "session.unobserve", "session.record", "session.submit", "session.queue", "session.steer", "session.cancelPendingMessages", "session.retry", "session.exec", "session.interrupt", "session.snapshot", "session.setRisk", "session.setReasoning", "session.setPersona", "session.resolvePrompt", "session.autocompletePaths", "session.reload", "session.compact", "session.prune", "session.rewind", "session.terminateSubagent", "session.ephemeral.create", "session.ephemeral.submit", "session.ephemeral.close", "session.clientTool.ack", "session.clientTool.result"];
4
4
  export type SessionProtocolMethod = (typeof SESSION_PROTOCOL_METHODS)[number];
5
5
  export declare const SESSION_PROTOCOL_ERROR_CODES: {
6
6
  readonly parseError: "parse_error";
@@ -9,6 +9,7 @@ export declare const SESSION_PROTOCOL_ERROR_CODES: {
9
9
  readonly invalidParams: "invalid_params";
10
10
  readonly notFound: "not_found";
11
11
  readonly busy: "busy";
12
+ readonly cancelled: "cancelled";
12
13
  readonly internalError: "internal_error";
13
14
  };
14
15
  export type SessionProtocolErrorCode = (typeof SESSION_PROTOCOL_ERROR_CODES)[keyof typeof SESSION_PROTOCOL_ERROR_CODES];
@@ -62,6 +63,7 @@ export type SessionProtocolUserMessageParams = {
62
63
  export type SessionProtocolSubmitParams = SessionProtocolUserMessageParams;
63
64
  export type SessionProtocolQueueParams = SessionProtocolUserMessageParams;
64
65
  export type SessionProtocolSteerParams = SessionProtocolUserMessageParams;
66
+ export type SessionProtocolCancelPendingMessagesParams = SessionProtocolSessionIdParams;
65
67
  export type SessionProtocolRecordParams = SessionProtocolSessionIdParams & {
66
68
  text: string;
67
69
  historyEntryId?: string;
@@ -145,6 +147,7 @@ export type SessionProtocolParamsByMethod = {
145
147
  "session.submit": SessionProtocolSubmitParams;
146
148
  "session.queue": SessionProtocolQueueParams;
147
149
  "session.steer": SessionProtocolSteerParams;
150
+ "session.cancelPendingMessages": SessionProtocolCancelPendingMessagesParams;
148
151
  "session.retry": SessionProtocolRetryParams;
149
152
  "session.exec": SessionProtocolExecParams;
150
153
  "session.interrupt": SessionProtocolSessionIdParams;
@@ -185,6 +188,25 @@ export type SessionProtocolUserMessageTurnResult = SessionProtocolTurnResult & {
185
188
  export type SessionProtocolSubmitResult = SessionProtocolUserMessageTurnResult;
186
189
  export type SessionProtocolQueueResult = SessionProtocolUserMessageTurnResult;
187
190
  export type SessionProtocolSteerResult = SessionProtocolUserMessageTurnResult;
191
+ export type SessionProtocolPendingUserMessage = {
192
+ id: string;
193
+ mode: "queue" | "steer";
194
+ text: string;
195
+ };
196
+ export type SessionProtocolPendingUserMessagesState = {
197
+ revision: number;
198
+ messages: SessionProtocolPendingUserMessage[];
199
+ };
200
+ export type SessionProtocolCreateResult = {
201
+ sessionId: string;
202
+ };
203
+ export type SessionProtocolObserveResult = {
204
+ snapshot: SessionProtocolSnapshot;
205
+ pendingUserMessages: SessionProtocolPendingUserMessagesState;
206
+ };
207
+ export type SessionProtocolCancelPendingMessagesResult = {
208
+ cancelled: SessionProtocolPendingUserMessage[];
209
+ };
188
210
  export type SessionProtocolRecordResult = {
189
211
  snapshot: SessionProtocolSnapshot;
190
212
  userHistoryEntryId: string;
@@ -254,8 +276,8 @@ export type SessionProtocolPromptCompositionSnapshot = {
254
276
  environmentTag: string;
255
277
  subagentPrompts: Record<string, string>;
256
278
  };
257
- export type SessionProtocolReasoningEffort = "none" | "minimal" | "low" | "medium" | "high" | "xhigh";
258
- export type SessionProtocolThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
279
+ export type SessionProtocolReasoningEffort = "none" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
280
+ export type SessionProtocolThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
259
281
  export type SessionProtocolServiceTier = "priority" | "flex";
260
282
  export type SessionProtocolModelSnapshot = {
261
283
  id: string;
@@ -271,6 +293,13 @@ export type SessionProtocolModelSnapshot = {
271
293
  output: number;
272
294
  cacheRead: number;
273
295
  cacheWrite: number;
296
+ tiers?: Array<{
297
+ inputTokensAbove: number;
298
+ input: number;
299
+ output: number;
300
+ cacheRead: number;
301
+ cacheWrite: number;
302
+ }>;
274
303
  };
275
304
  contextWindow: number;
276
305
  maxTokens: number;
@@ -346,6 +375,7 @@ export type SessionProtocolSnapshot = {
346
375
  sessionId: string;
347
376
  revision: number;
348
377
  lifecycle: SessionProtocolSessionLifecycle;
378
+ costTotal: number;
349
379
  settings: SessionProtocolSettingsSnapshot;
350
380
  bootstrap: SessionProtocolBootstrapSnapshot;
351
381
  catalog: SessionProtocolContentCatalogSnapshot;
@@ -483,14 +513,15 @@ export type SessionProtocolClientToolResultResult = {
483
513
  };
484
514
  export type SessionProtocolResultByMethod = {
485
515
  initialize: SessionProtocolInitializeResult;
486
- "session.create": SessionProtocolSnapshot;
516
+ "session.create": SessionProtocolCreateResult;
487
517
  "session.list": SessionProtocolListResult;
488
- "session.observe": SessionProtocolSnapshot;
518
+ "session.observe": SessionProtocolObserveResult;
489
519
  "session.unobserve": SessionProtocolUnobserveResult;
490
520
  "session.record": SessionProtocolRecordResult;
491
521
  "session.submit": SessionProtocolSubmitResult;
492
522
  "session.queue": SessionProtocolQueueResult;
493
523
  "session.steer": SessionProtocolSteerResult;
524
+ "session.cancelPendingMessages": SessionProtocolCancelPendingMessagesResult;
494
525
  "session.retry": SessionProtocolRetryResult;
495
526
  "session.exec": SessionProtocolExecResult;
496
527
  "session.interrupt": SessionProtocolInterruptResult;
@@ -548,6 +579,9 @@ export type SessionProtocolDeltaReason = "user-message" | "assistant-stream" | "
548
579
  export type SessionProtocolChange = {
549
580
  type: "lifecycle.set";
550
581
  lifecycle: SessionProtocolSessionLifecycle;
582
+ } | {
583
+ type: "cost.set";
584
+ costTotal: number;
551
585
  } | {
552
586
  type: "settings.set";
553
587
  settings: SessionProtocolSettingsSnapshot;
@@ -655,8 +689,14 @@ export type SessionProtocolEphemeralMessage = {
655
689
  sessionId: string;
656
690
  event: SessionProtocolEphemeralEvent;
657
691
  };
658
- export type SessionProtocolOutgoingMessage = SessionProtocolResponseMessage | SessionProtocolDeltaMessage | SessionProtocolEphemeralMessage | SessionProtocolClientToolMessage | SessionProtocolReadyMessage;
659
- export type SessionProtocolParsedOutgoingMessage = SessionProtocolParsedResponseMessage | SessionProtocolDeltaMessage | SessionProtocolEphemeralMessage | SessionProtocolClientToolMessage | SessionProtocolReadyMessage;
692
+ export type SessionProtocolPendingUserMessagesMessage = {
693
+ version: typeof SESSION_PROTOCOL_VERSION;
694
+ type: "session.pendingUserMessages";
695
+ sessionId: string;
696
+ state: SessionProtocolPendingUserMessagesState;
697
+ };
698
+ export type SessionProtocolOutgoingMessage = SessionProtocolResponseMessage | SessionProtocolDeltaMessage | SessionProtocolEphemeralMessage | SessionProtocolPendingUserMessagesMessage | SessionProtocolClientToolMessage | SessionProtocolReadyMessage;
699
+ export type SessionProtocolParsedOutgoingMessage = SessionProtocolParsedResponseMessage | SessionProtocolDeltaMessage | SessionProtocolEphemeralMessage | SessionProtocolPendingUserMessagesMessage | SessionProtocolClientToolMessage | SessionProtocolReadyMessage;
660
700
  export type SessionProtocolOutgoingParseFailureReason = "invalid_payload" | "empty_line" | "parse_error" | "unsupported_version" | "unsupported_message_type" | "response_invalid_id";
661
701
  export type SessionProtocolOutgoingParseFailure = {
662
702
  ok: false;
@@ -709,6 +749,10 @@ export declare function createSessionProtocolEphemeralMessage(options: {
709
749
  sessionId: string;
710
750
  event: SessionProtocolEphemeralEvent;
711
751
  }): SessionProtocolEphemeralMessage;
752
+ export declare function createSessionProtocolPendingUserMessagesMessage(options: {
753
+ sessionId: string;
754
+ state: SessionProtocolPendingUserMessagesState;
755
+ }): SessionProtocolPendingUserMessagesMessage;
712
756
  export declare function applySessionProtocolDelta(snapshot: SessionProtocolSnapshot, message: SessionProtocolDeltaMessage): SessionProtocolSnapshot;
713
757
  export declare function createSessionProtocolReadyMessage(): SessionProtocolReadyMessage;
714
758
  export declare function serializeSessionProtocolMessage(message: SessionProtocolOutgoingMessage): string;
@@ -724,6 +768,7 @@ export declare function validateSessionProtocolParams(method: "session.record",
724
768
  export declare function validateSessionProtocolParams(method: "session.submit", params: unknown): SessionProtocolParamsValidationResult<SessionProtocolSubmitParams>;
725
769
  export declare function validateSessionProtocolParams(method: "session.queue", params: unknown): SessionProtocolParamsValidationResult<SessionProtocolQueueParams>;
726
770
  export declare function validateSessionProtocolParams(method: "session.steer", params: unknown): SessionProtocolParamsValidationResult<SessionProtocolSteerParams>;
771
+ export declare function validateSessionProtocolParams(method: "session.cancelPendingMessages", params: unknown): SessionProtocolParamsValidationResult<SessionProtocolCancelPendingMessagesParams>;
727
772
  export declare function validateSessionProtocolParams(method: "session.retry", params: unknown): SessionProtocolParamsValidationResult<SessionProtocolRetryParams>;
728
773
  export declare function validateSessionProtocolParams(method: "session.exec", params: unknown): SessionProtocolParamsValidationResult<SessionProtocolExecParams>;
729
774
  export declare function validateSessionProtocolParams(method: "session.interrupt", params: unknown): SessionProtocolParamsValidationResult<SessionProtocolSessionIdParams>;
@@ -10,6 +10,7 @@ export const SESSION_PROTOCOL_METHODS = [
10
10
  "session.submit",
11
11
  "session.queue",
12
12
  "session.steer",
13
+ "session.cancelPendingMessages",
13
14
  "session.retry",
14
15
  "session.exec",
15
16
  "session.interrupt",
@@ -46,6 +47,7 @@ export const SESSION_PROTOCOL_ERROR_CODES = {
46
47
  invalidParams: "invalid_params",
47
48
  notFound: "not_found",
48
49
  busy: "busy",
50
+ cancelled: "cancelled",
49
51
  internalError: "internal_error",
50
52
  };
51
53
  const SESSION_PROTOCOL_ERROR_CODE_VALUES = [
@@ -55,6 +57,7 @@ const SESSION_PROTOCOL_ERROR_CODE_VALUES = [
55
57
  SESSION_PROTOCOL_ERROR_CODES.invalidParams,
56
58
  SESSION_PROTOCOL_ERROR_CODES.notFound,
57
59
  SESSION_PROTOCOL_ERROR_CODES.busy,
60
+ SESSION_PROTOCOL_ERROR_CODES.cancelled,
58
61
  SESSION_PROTOCOL_ERROR_CODES.internalError,
59
62
  ];
60
63
  const sessionProtocolMethodSchema = z.enum(SESSION_PROTOCOL_METHODS);
@@ -129,6 +132,7 @@ const sessionProtocolOutgoingRoutingSchema = z
129
132
  "ready",
130
133
  "session.delta",
131
134
  "session.ephemeral",
135
+ "session.pendingUserMessages",
132
136
  "session.clientTool.call",
133
137
  "session.clientTool.cancel",
134
138
  "response",
@@ -216,6 +220,7 @@ const sessionProtocolReasoningEffortSchema = z.enum([
216
220
  "medium",
217
221
  "high",
218
222
  "xhigh",
223
+ "max",
219
224
  ]);
220
225
  const sessionProtocolSetReasoningParamsSchema = z
221
226
  .object({
@@ -377,7 +382,7 @@ const sessionProtocolModelSnapshotSchema = z
377
382
  baseUrl: z.string(),
378
383
  reasoning: z.boolean(),
379
384
  thinkingLevelMap: z
380
- .partialRecord(z.enum(["off", "minimal", "low", "medium", "high", "xhigh"]), z.string().nullable())
385
+ .partialRecord(z.enum(["off", "minimal", "low", "medium", "high", "xhigh", "max"]), z.string().nullable())
381
386
  .optional(),
382
387
  input: z.array(z.enum(["text", "image"])),
383
388
  cost: z
@@ -386,6 +391,17 @@ const sessionProtocolModelSnapshotSchema = z
386
391
  output: z.number().nonnegative(),
387
392
  cacheRead: z.number().nonnegative(),
388
393
  cacheWrite: z.number().nonnegative(),
394
+ tiers: z
395
+ .array(z
396
+ .object({
397
+ inputTokensAbove: z.number().int().nonnegative(),
398
+ input: z.number().nonnegative(),
399
+ output: z.number().nonnegative(),
400
+ cacheRead: z.number().nonnegative(),
401
+ cacheWrite: z.number().nonnegative(),
402
+ })
403
+ .strict())
404
+ .optional(),
389
405
  })
390
406
  .strict(),
391
407
  contextWindow: z.number().int().positive(),
@@ -629,6 +645,7 @@ const sessionProtocolSnapshotSchema = z
629
645
  sessionId: nonEmptyStringSchema,
630
646
  revision: z.number().int().positive(),
631
647
  lifecycle: sessionProtocolSessionLifecycleSchema,
648
+ costTotal: z.number().nonnegative(),
632
649
  settings: sessionProtocolSettingsSnapshotSchema,
633
650
  bootstrap: sessionProtocolBootstrapSnapshotSchema,
634
651
  catalog: sessionProtocolContentCatalogSnapshotSchema,
@@ -690,6 +707,12 @@ const sessionProtocolChangeSchema = z.discriminatedUnion("type", [
690
707
  lifecycle: sessionProtocolSessionLifecycleSchema,
691
708
  })
692
709
  .strict(),
710
+ z
711
+ .object({
712
+ type: z.literal("cost.set"),
713
+ costTotal: z.number().nonnegative(),
714
+ })
715
+ .strict(),
693
716
  z
694
717
  .object({
695
718
  type: z.literal("settings.set"),
@@ -860,6 +883,40 @@ const sessionProtocolEphemeralMessageSchema = z
860
883
  event: sessionProtocolEphemeralEventSchema,
861
884
  })
862
885
  .strict();
886
+ const sessionProtocolPendingUserMessageSchema = z
887
+ .object({
888
+ id: nonEmptyStringSchema,
889
+ mode: z.enum(["queue", "steer"]),
890
+ text: nonEmptyStringSchema,
891
+ })
892
+ .strict();
893
+ const sessionProtocolPendingUserMessagesStateSchema = z
894
+ .object({
895
+ revision: z.number().int().positive(),
896
+ messages: z.array(sessionProtocolPendingUserMessageSchema),
897
+ })
898
+ .strict()
899
+ .superRefine((state, ctx) => {
900
+ const ids = new Set();
901
+ for (const message of state.messages) {
902
+ if (ids.has(message.id)) {
903
+ ctx.addIssue({
904
+ code: "custom",
905
+ path: ["messages"],
906
+ message: `duplicate pending user message id '${message.id}'`,
907
+ });
908
+ }
909
+ ids.add(message.id);
910
+ }
911
+ });
912
+ const sessionProtocolPendingUserMessagesMessageSchema = z
913
+ .object({
914
+ version: z.literal(SESSION_PROTOCOL_VERSION),
915
+ type: z.literal("session.pendingUserMessages"),
916
+ sessionId: nonEmptyStringSchema,
917
+ state: sessionProtocolPendingUserMessagesStateSchema,
918
+ })
919
+ .strict();
863
920
  const sessionProtocolInitializeResultSchema = z
864
921
  .object({
865
922
  protocolVersion: z.literal(SESSION_PROTOCOL_VERSION),
@@ -867,6 +924,17 @@ const sessionProtocolInitializeResultSchema = z
867
924
  alreadyInitialized: z.boolean(),
868
925
  })
869
926
  .strict();
927
+ const sessionProtocolCreateResultSchema = z
928
+ .object({
929
+ sessionId: nonEmptyStringSchema,
930
+ })
931
+ .strict();
932
+ const sessionProtocolObserveResultSchema = z
933
+ .object({
934
+ snapshot: sessionProtocolSnapshotSchema,
935
+ pendingUserMessages: sessionProtocolPendingUserMessagesStateSchema,
936
+ })
937
+ .strict();
870
938
  const sessionProtocolListResultSchema = z
871
939
  .object({
872
940
  sessions: z.array(sessionProtocolSessionSummarySchema),
@@ -895,6 +963,11 @@ const sessionProtocolSubmitWithUserResultSchema = sessionProtocolTurnResultSchem
895
963
  userHistoryEntryId: nonEmptyStringSchema,
896
964
  })
897
965
  .strict();
966
+ const sessionProtocolCancelPendingMessagesResultSchema = z
967
+ .object({
968
+ cancelled: z.array(sessionProtocolPendingUserMessageSchema),
969
+ })
970
+ .strict();
898
971
  const sessionProtocolRecordResultSchema = z
899
972
  .object({
900
973
  snapshot: sessionProtocolSnapshotSchema,
@@ -1075,6 +1148,19 @@ export function createSessionProtocolEphemeralMessage(options) {
1075
1148
  }
1076
1149
  return parsedMessage.data;
1077
1150
  }
1151
+ export function createSessionProtocolPendingUserMessagesMessage(options) {
1152
+ const message = {
1153
+ version: SESSION_PROTOCOL_VERSION,
1154
+ type: "session.pendingUserMessages",
1155
+ sessionId: options.sessionId,
1156
+ state: options.state,
1157
+ };
1158
+ const parsedMessage = sessionProtocolPendingUserMessagesMessageSchema.safeParse(message);
1159
+ if (!parsedMessage.success) {
1160
+ throw new Error(`session protocol pending user messages message is invalid: ${formatZodError(parsedMessage.error)}`);
1161
+ }
1162
+ return parsedMessage.data;
1163
+ }
1078
1164
  export function applySessionProtocolDelta(snapshot, message) {
1079
1165
  if (message.sessionId !== snapshot.sessionId) {
1080
1166
  throw new Error(`session delta targets '${message.sessionId}' but current snapshot is '${snapshot.sessionId}'`);
@@ -1100,6 +1186,9 @@ export function applySessionProtocolDelta(snapshot, message) {
1100
1186
  case "lifecycle.set":
1101
1187
  next.lifecycle = change.lifecycle;
1102
1188
  break;
1189
+ case "cost.set":
1190
+ next.costTotal = change.costTotal;
1191
+ break;
1103
1192
  case "settings.set":
1104
1193
  next.settings = structuredClone(change.settings);
1105
1194
  break;
@@ -1478,6 +1567,9 @@ export function parseSessionProtocolOutgoingLine(line) {
1478
1567
  if (routing.data.type === "session.ephemeral") {
1479
1568
  return parseSessionProtocolEphemeralMessage(parsed);
1480
1569
  }
1570
+ if (routing.data.type === "session.pendingUserMessages") {
1571
+ return parseSessionProtocolPendingUserMessagesMessage(parsed);
1572
+ }
1481
1573
  if (routing.data.type === "session.clientTool.call" ||
1482
1574
  routing.data.type === "session.clientTool.cancel") {
1483
1575
  return parseSessionProtocolClientToolMessage(parsed);
@@ -1504,6 +1596,7 @@ export function validateSessionProtocolParams(method, params) {
1504
1596
  return validateExecParams(params);
1505
1597
  case "session.list":
1506
1598
  return validateNoParams(method, params);
1599
+ case "session.cancelPendingMessages":
1507
1600
  case "session.retry":
1508
1601
  case "session.interrupt":
1509
1602
  case "session.snapshot":
@@ -1544,7 +1637,9 @@ export function validateSessionProtocolResult(method, result) {
1544
1637
  case "initialize":
1545
1638
  return validateResult(method, result, sessionProtocolInitializeResultSchema);
1546
1639
  case "session.create":
1640
+ return validateResult(method, result, sessionProtocolCreateResultSchema);
1547
1641
  case "session.observe":
1642
+ return validateResult(method, result, sessionProtocolObserveResultSchema);
1548
1643
  case "session.snapshot":
1549
1644
  case "session.setRisk":
1550
1645
  case "session.setPersona":
@@ -1583,6 +1678,8 @@ export function validateSessionProtocolResult(method, result) {
1583
1678
  case "session.queue":
1584
1679
  case "session.steer":
1585
1680
  return validateResult(method, result, sessionProtocolSubmitWithUserResultSchema);
1681
+ case "session.cancelPendingMessages":
1682
+ return validateResult(method, result, sessionProtocolCancelPendingMessagesResultSchema);
1586
1683
  case "session.record":
1587
1684
  return validateResult(method, result, sessionProtocolRecordResultSchema);
1588
1685
  case "session.retry":
@@ -1751,7 +1848,7 @@ function validateSetReasoningParams(params) {
1751
1848
  : hasIssue(parsed.error, ["sessionId"])
1752
1849
  ? "session.setReasoning params.sessionId must be a non-empty string"
1753
1850
  : hasIssue(parsed.error, ["reasoning"])
1754
- ? "session.setReasoning params.reasoning must be one of none, minimal, low, medium, high, or xhigh"
1851
+ ? "session.setReasoning params.reasoning must be one of none, minimal, low, medium, high, xhigh, or max"
1755
1852
  : `session.setReasoning params are invalid: ${formatZodError(parsed.error)}`;
1756
1853
  return invalidParams(message);
1757
1854
  }
@@ -2048,7 +2145,7 @@ function validateCreateParams(params) {
2048
2145
  : hasIssue(parsed.error, ["riskLevel"])
2049
2146
  ? "session.create params.riskLevel must be 'read-only' or 'read-write'"
2050
2147
  : hasIssue(parsed.error, ["reasoning"])
2051
- ? "session.create params.reasoning must be one of none, minimal, low, medium, high, or xhigh"
2148
+ ? "session.create params.reasoning must be one of none, minimal, low, medium, high, xhigh, or max"
2052
2149
  : `session.create params are invalid: ${formatZodError(parsed.error)}`;
2053
2150
  return invalidParams(message);
2054
2151
  }
@@ -2166,6 +2263,26 @@ function parseSessionProtocolEphemeralMessage(payload) {
2166
2263
  message: ephemeralMessage.data,
2167
2264
  };
2168
2265
  }
2266
+ function parseSessionProtocolPendingUserMessagesMessage(payload) {
2267
+ const fail = (message) => outgoingParseFailure("session.pendingUserMessages", null, SESSION_PROTOCOL_ERROR_CODES.invalidRequest, message);
2268
+ const message = sessionProtocolPendingUserMessagesMessageSchema.safeParse(payload);
2269
+ if (!message.success) {
2270
+ if (hasIssue(message.error, [], "unrecognized_keys")) {
2271
+ return fail("session.pendingUserMessages message contains unsupported fields");
2272
+ }
2273
+ if (hasIssue(message.error, ["sessionId"])) {
2274
+ return fail("session.pendingUserMessages.sessionId must be a non-empty string");
2275
+ }
2276
+ if (hasIssue(message.error, ["state"])) {
2277
+ return fail("session.pendingUserMessages.state is invalid");
2278
+ }
2279
+ return fail(`invalid session.pendingUserMessages message: ${formatZodError(message.error)}`);
2280
+ }
2281
+ return {
2282
+ ok: true,
2283
+ message: message.data,
2284
+ };
2285
+ }
2169
2286
  function parseSessionProtocolResponseMessage(payload) {
2170
2287
  const parsedIdField = sessionProtocolIdFieldSchema.safeParse(payload);
2171
2288
  const responseId = parseNullableRequestId(parsedIdField.success ? parsedIdField.data.id : undefined);