@getpaseo/server 0.1.37 → 0.1.38

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 (295) hide show
  1. package/dist/scripts/dev-runner.js +1 -1
  2. package/dist/scripts/dev-runner.js.map +1 -1
  3. package/dist/scripts/{daemon-runner.js → supervisor-entrypoint.js} +7 -9
  4. package/dist/scripts/supervisor-entrypoint.js.map +1 -0
  5. package/dist/scripts/supervisor.js +17 -1
  6. package/dist/scripts/supervisor.js.map +1 -1
  7. package/dist/server/server/bootstrap.d.ts +0 -4
  8. package/dist/server/server/bootstrap.d.ts.map +1 -1
  9. package/dist/server/server/bootstrap.js +8 -22
  10. package/dist/server/server/bootstrap.js.map +1 -1
  11. package/dist/server/server/index.js +0 -4
  12. package/dist/server/server/index.js.map +1 -1
  13. package/dist/server/server/pid-lock.d.ts +7 -2
  14. package/dist/server/server/pid-lock.d.ts.map +1 -1
  15. package/dist/server/server/pid-lock.js +21 -0
  16. package/dist/server/server/pid-lock.js.map +1 -1
  17. package/dist/server/server/session.d.ts.map +1 -1
  18. package/dist/server/server/session.js +2 -2
  19. package/dist/server/server/session.js.map +1 -1
  20. package/dist/src/server/pid-lock.js +21 -0
  21. package/dist/src/server/pid-lock.js.map +1 -1
  22. package/package.json +3 -3
  23. package/dist/scripts/daemon-runner.js.map +0 -1
  24. package/dist/src/server/agent/activity-curator.js +0 -243
  25. package/dist/src/server/agent/activity-curator.js.map +0 -1
  26. package/dist/src/server/agent/agent-manager.js +0 -1855
  27. package/dist/src/server/agent/agent-manager.js.map +0 -1
  28. package/dist/src/server/agent/agent-metadata-generator.js +0 -161
  29. package/dist/src/server/agent/agent-metadata-generator.js.map +0 -1
  30. package/dist/src/server/agent/agent-projections.js +0 -254
  31. package/dist/src/server/agent/agent-projections.js.map +0 -1
  32. package/dist/src/server/agent/agent-response-loop.js +0 -304
  33. package/dist/src/server/agent/agent-response-loop.js.map +0 -1
  34. package/dist/src/server/agent/agent-sdk-types.js +0 -12
  35. package/dist/src/server/agent/agent-sdk-types.js.map +0 -1
  36. package/dist/src/server/agent/agent-storage.js +0 -302
  37. package/dist/src/server/agent/agent-storage.js.map +0 -1
  38. package/dist/src/server/agent/agent-title-limits.js +0 -3
  39. package/dist/src/server/agent/agent-title-limits.js.map +0 -1
  40. package/dist/src/server/agent/audio-utils.js +0 -19
  41. package/dist/src/server/agent/audio-utils.js.map +0 -1
  42. package/dist/src/server/agent/dictation-debug.js +0 -50
  43. package/dist/src/server/agent/dictation-debug.js.map +0 -1
  44. package/dist/src/server/agent/mcp-server.js +0 -754
  45. package/dist/src/server/agent/mcp-server.js.map +0 -1
  46. package/dist/src/server/agent/orchestrator-instructions.js +0 -51
  47. package/dist/src/server/agent/orchestrator-instructions.js.map +0 -1
  48. package/dist/src/server/agent/pcm16-resampler.js +0 -63
  49. package/dist/src/server/agent/pcm16-resampler.js.map +0 -1
  50. package/dist/src/server/agent/provider-launch-config.js +0 -213
  51. package/dist/src/server/agent/provider-launch-config.js.map +0 -1
  52. package/dist/src/server/agent/provider-manifest.js +0 -127
  53. package/dist/src/server/agent/provider-manifest.js.map +0 -1
  54. package/dist/src/server/agent/provider-registry.js +0 -45
  55. package/dist/src/server/agent/provider-registry.js.map +0 -1
  56. package/dist/src/server/agent/providers/claude/partial-json.js +0 -306
  57. package/dist/src/server/agent/providers/claude/partial-json.js.map +0 -1
  58. package/dist/src/server/agent/providers/claude/sdk-model-resolver.js +0 -104
  59. package/dist/src/server/agent/providers/claude/sdk-model-resolver.js.map +0 -1
  60. package/dist/src/server/agent/providers/claude/sidechain-tracker.js +0 -230
  61. package/dist/src/server/agent/providers/claude/sidechain-tracker.js.map +0 -1
  62. package/dist/src/server/agent/providers/claude/task-notification-tool-call.js +0 -267
  63. package/dist/src/server/agent/providers/claude/task-notification-tool-call.js.map +0 -1
  64. package/dist/src/server/agent/providers/claude/tool-call-detail-parser.js +0 -121
  65. package/dist/src/server/agent/providers/claude/tool-call-detail-parser.js.map +0 -1
  66. package/dist/src/server/agent/providers/claude/tool-call-mapper.js +0 -252
  67. package/dist/src/server/agent/providers/claude/tool-call-mapper.js.map +0 -1
  68. package/dist/src/server/agent/providers/claude-agent.js +0 -3166
  69. package/dist/src/server/agent/providers/claude-agent.js.map +0 -1
  70. package/dist/src/server/agent/providers/codex/tool-call-detail-parser.js +0 -104
  71. package/dist/src/server/agent/providers/codex/tool-call-detail-parser.js.map +0 -1
  72. package/dist/src/server/agent/providers/codex/tool-call-mapper.js +0 -758
  73. package/dist/src/server/agent/providers/codex/tool-call-mapper.js.map +0 -1
  74. package/dist/src/server/agent/providers/codex-app-server-agent.js +0 -2949
  75. package/dist/src/server/agent/providers/codex-app-server-agent.js.map +0 -1
  76. package/dist/src/server/agent/providers/codex-rollout-timeline.js +0 -544
  77. package/dist/src/server/agent/providers/codex-rollout-timeline.js.map +0 -1
  78. package/dist/src/server/agent/providers/opencode/tool-call-detail-parser.js +0 -39
  79. package/dist/src/server/agent/providers/opencode/tool-call-detail-parser.js.map +0 -1
  80. package/dist/src/server/agent/providers/opencode/tool-call-mapper.js +0 -144
  81. package/dist/src/server/agent/providers/opencode/tool-call-mapper.js.map +0 -1
  82. package/dist/src/server/agent/providers/opencode-agent.js +0 -1193
  83. package/dist/src/server/agent/providers/opencode-agent.js.map +0 -1
  84. package/dist/src/server/agent/providers/tool-call-detail-primitives.js +0 -686
  85. package/dist/src/server/agent/providers/tool-call-detail-primitives.js.map +0 -1
  86. package/dist/src/server/agent/providers/tool-call-mapper-utils.js +0 -115
  87. package/dist/src/server/agent/providers/tool-call-mapper-utils.js.map +0 -1
  88. package/dist/src/server/agent/recordings-debug.js +0 -19
  89. package/dist/src/server/agent/recordings-debug.js.map +0 -1
  90. package/dist/src/server/agent/stt-debug.js +0 -33
  91. package/dist/src/server/agent/stt-debug.js.map +0 -1
  92. package/dist/src/server/agent/stt-manager.js +0 -232
  93. package/dist/src/server/agent/stt-manager.js.map +0 -1
  94. package/dist/src/server/agent/timeline-append.js +0 -27
  95. package/dist/src/server/agent/timeline-append.js.map +0 -1
  96. package/dist/src/server/agent/timeline-projection.js +0 -215
  97. package/dist/src/server/agent/timeline-projection.js.map +0 -1
  98. package/dist/src/server/agent/tool-name-normalization.js +0 -45
  99. package/dist/src/server/agent/tool-name-normalization.js.map +0 -1
  100. package/dist/src/server/agent/tts-debug.js +0 -24
  101. package/dist/src/server/agent/tts-debug.js.map +0 -1
  102. package/dist/src/server/agent/tts-manager.js +0 -374
  103. package/dist/src/server/agent/tts-manager.js.map +0 -1
  104. package/dist/src/server/agent/wait-for-agent-tracker.js +0 -53
  105. package/dist/src/server/agent/wait-for-agent-tracker.js.map +0 -1
  106. package/dist/src/server/agent-attention-policy.js +0 -40
  107. package/dist/src/server/agent-attention-policy.js.map +0 -1
  108. package/dist/src/server/allowed-hosts.js +0 -94
  109. package/dist/src/server/allowed-hosts.js.map +0 -1
  110. package/dist/src/server/bootstrap.js +0 -620
  111. package/dist/src/server/bootstrap.js.map +0 -1
  112. package/dist/src/server/chat/chat-mentions.js +0 -71
  113. package/dist/src/server/chat/chat-mentions.js.map +0 -1
  114. package/dist/src/server/chat/chat-rpc-schemas.js +0 -103
  115. package/dist/src/server/chat/chat-rpc-schemas.js.map +0 -1
  116. package/dist/src/server/chat/chat-service.js +0 -330
  117. package/dist/src/server/chat/chat-service.js.map +0 -1
  118. package/dist/src/server/chat/chat-types.js +0 -22
  119. package/dist/src/server/chat/chat-types.js.map +0 -1
  120. package/dist/src/server/checkout-diff-manager.js +0 -272
  121. package/dist/src/server/checkout-diff-manager.js.map +0 -1
  122. package/dist/src/server/checkout-git-utils.js +0 -37
  123. package/dist/src/server/checkout-git-utils.js.map +0 -1
  124. package/dist/src/server/client-message-id.js +0 -12
  125. package/dist/src/server/client-message-id.js.map +0 -1
  126. package/dist/src/server/config.js +0 -73
  127. package/dist/src/server/config.js.map +0 -1
  128. package/dist/src/server/connection-offer.js +0 -59
  129. package/dist/src/server/connection-offer.js.map +0 -1
  130. package/dist/src/server/daemon-keypair.js +0 -40
  131. package/dist/src/server/daemon-keypair.js.map +0 -1
  132. package/dist/src/server/daemon-version.js +0 -22
  133. package/dist/src/server/daemon-version.js.map +0 -1
  134. package/dist/src/server/dictation/dictation-stream-manager.js +0 -571
  135. package/dist/src/server/dictation/dictation-stream-manager.js.map +0 -1
  136. package/dist/src/server/file-download/token-store.js +0 -40
  137. package/dist/src/server/file-download/token-store.js.map +0 -1
  138. package/dist/src/server/file-explorer/service.js +0 -180
  139. package/dist/src/server/file-explorer/service.js.map +0 -1
  140. package/dist/src/server/json-utils.js +0 -45
  141. package/dist/src/server/json-utils.js.map +0 -1
  142. package/dist/src/server/loop/rpc-schemas.js +0 -159
  143. package/dist/src/server/loop/rpc-schemas.js.map +0 -1
  144. package/dist/src/server/loop-service.js +0 -741
  145. package/dist/src/server/loop-service.js.map +0 -1
  146. package/dist/src/server/messages.js +0 -29
  147. package/dist/src/server/messages.js.map +0 -1
  148. package/dist/src/server/package-version.js +0 -46
  149. package/dist/src/server/package-version.js.map +0 -1
  150. package/dist/src/server/pairing-offer.js +0 -45
  151. package/dist/src/server/pairing-offer.js.map +0 -1
  152. package/dist/src/server/pairing-qr.js +0 -45
  153. package/dist/src/server/pairing-qr.js.map +0 -1
  154. package/dist/src/server/path-utils.js +0 -20
  155. package/dist/src/server/path-utils.js.map +0 -1
  156. package/dist/src/server/persisted-config.js +0 -265
  157. package/dist/src/server/persisted-config.js.map +0 -1
  158. package/dist/src/server/persistence-hooks.js +0 -60
  159. package/dist/src/server/persistence-hooks.js.map +0 -1
  160. package/dist/src/server/push/push-service.js +0 -68
  161. package/dist/src/server/push/push-service.js.map +0 -1
  162. package/dist/src/server/push/token-store.js +0 -70
  163. package/dist/src/server/push/token-store.js.map +0 -1
  164. package/dist/src/server/relay-transport.js +0 -461
  165. package/dist/src/server/relay-transport.js.map +0 -1
  166. package/dist/src/server/schedule/cron.js +0 -103
  167. package/dist/src/server/schedule/cron.js.map +0 -1
  168. package/dist/src/server/schedule/rpc-schemas.js +0 -112
  169. package/dist/src/server/schedule/rpc-schemas.js.map +0 -1
  170. package/dist/src/server/schedule/service.js +0 -397
  171. package/dist/src/server/schedule/service.js.map +0 -1
  172. package/dist/src/server/schedule/store.js +0 -56
  173. package/dist/src/server/schedule/store.js.map +0 -1
  174. package/dist/src/server/schedule/types.js +0 -73
  175. package/dist/src/server/schedule/types.js.map +0 -1
  176. package/dist/src/server/server-id.js +0 -63
  177. package/dist/src/server/server-id.js.map +0 -1
  178. package/dist/src/server/session.js +0 -6381
  179. package/dist/src/server/session.js.map +0 -1
  180. package/dist/src/server/speech/audio.js +0 -101
  181. package/dist/src/server/speech/audio.js.map +0 -1
  182. package/dist/src/server/speech/provider-resolver.js +0 -7
  183. package/dist/src/server/speech/provider-resolver.js.map +0 -1
  184. package/dist/src/server/speech/providers/local/config.js +0 -74
  185. package/dist/src/server/speech/providers/local/config.js.map +0 -1
  186. package/dist/src/server/speech/providers/local/models.js +0 -17
  187. package/dist/src/server/speech/providers/local/models.js.map +0 -1
  188. package/dist/src/server/speech/providers/local/pocket/pocket-tts-onnx.js +0 -436
  189. package/dist/src/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +0 -1
  190. package/dist/src/server/speech/providers/local/runtime.js +0 -238
  191. package/dist/src/server/speech/providers/local/runtime.js.map +0 -1
  192. package/dist/src/server/speech/providers/local/sherpa/model-catalog.js +0 -166
  193. package/dist/src/server/speech/providers/local/sherpa/model-catalog.js.map +0 -1
  194. package/dist/src/server/speech/providers/local/sherpa/model-downloader.js +0 -165
  195. package/dist/src/server/speech/providers/local/sherpa/model-downloader.js.map +0 -1
  196. package/dist/src/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js +0 -73
  197. package/dist/src/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js.map +0 -1
  198. package/dist/src/server/speech/providers/local/sherpa/sherpa-online-recognizer.js +0 -84
  199. package/dist/src/server/speech/providers/local/sherpa/sherpa-online-recognizer.js.map +0 -1
  200. package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-loader.js +0 -11
  201. package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-loader.js.map +0 -1
  202. package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +0 -102
  203. package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js.map +0 -1
  204. package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +0 -135
  205. package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js.map +0 -1
  206. package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +0 -130
  207. package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js.map +0 -1
  208. package/dist/src/server/speech/providers/local/sherpa/sherpa-realtime-session.js +0 -110
  209. package/dist/src/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +0 -1
  210. package/dist/src/server/speech/providers/local/sherpa/sherpa-stt.js +0 -138
  211. package/dist/src/server/speech/providers/local/sherpa/sherpa-stt.js.map +0 -1
  212. package/dist/src/server/speech/providers/local/sherpa/sherpa-tts.js +0 -98
  213. package/dist/src/server/speech/providers/local/sherpa/sherpa-tts.js.map +0 -1
  214. package/dist/src/server/speech/providers/local/sherpa/silero-vad-provider.js +0 -23
  215. package/dist/src/server/speech/providers/local/sherpa/silero-vad-provider.js.map +0 -1
  216. package/dist/src/server/speech/providers/local/sherpa/silero-vad-session.js +0 -107
  217. package/dist/src/server/speech/providers/local/sherpa/silero-vad-session.js.map +0 -1
  218. package/dist/src/server/speech/providers/openai/config.js +0 -80
  219. package/dist/src/server/speech/providers/openai/config.js.map +0 -1
  220. package/dist/src/server/speech/providers/openai/realtime-transcription-session.js +0 -168
  221. package/dist/src/server/speech/providers/openai/realtime-transcription-session.js.map +0 -1
  222. package/dist/src/server/speech/providers/openai/runtime.js +0 -112
  223. package/dist/src/server/speech/providers/openai/runtime.js.map +0 -1
  224. package/dist/src/server/speech/providers/openai/stt.js +0 -206
  225. package/dist/src/server/speech/providers/openai/stt.js.map +0 -1
  226. package/dist/src/server/speech/providers/openai/tts.js +0 -46
  227. package/dist/src/server/speech/providers/openai/tts.js.map +0 -1
  228. package/dist/src/server/speech/speech-config-resolver.js +0 -102
  229. package/dist/src/server/speech/speech-config-resolver.js.map +0 -1
  230. package/dist/src/server/speech/speech-provider.js +0 -2
  231. package/dist/src/server/speech/speech-provider.js.map +0 -1
  232. package/dist/src/server/speech/speech-runtime.js +0 -530
  233. package/dist/src/server/speech/speech-runtime.js.map +0 -1
  234. package/dist/src/server/speech/speech-types.js +0 -8
  235. package/dist/src/server/speech/speech-types.js.map +0 -1
  236. package/dist/src/server/speech/turn-detection-provider.js +0 -2
  237. package/dist/src/server/speech/turn-detection-provider.js.map +0 -1
  238. package/dist/src/server/utils/diff-highlighter.js +0 -257
  239. package/dist/src/server/utils/diff-highlighter.js.map +0 -1
  240. package/dist/src/server/voice/fixed-duration-pcm-ring-buffer.js +0 -35
  241. package/dist/src/server/voice/fixed-duration-pcm-ring-buffer.js.map +0 -1
  242. package/dist/src/server/voice/voice-turn-controller.js +0 -159
  243. package/dist/src/server/voice/voice-turn-controller.js.map +0 -1
  244. package/dist/src/server/voice-config.js +0 -51
  245. package/dist/src/server/voice-config.js.map +0 -1
  246. package/dist/src/server/voice-mcp-bridge-command.js +0 -31
  247. package/dist/src/server/voice-mcp-bridge-command.js.map +0 -1
  248. package/dist/src/server/voice-mcp-bridge.js +0 -109
  249. package/dist/src/server/voice-mcp-bridge.js.map +0 -1
  250. package/dist/src/server/voice-permission-policy.js +0 -13
  251. package/dist/src/server/voice-permission-policy.js.map +0 -1
  252. package/dist/src/server/voice-types.js +0 -2
  253. package/dist/src/server/voice-types.js.map +0 -1
  254. package/dist/src/server/websocket-server.js +0 -1048
  255. package/dist/src/server/websocket-server.js.map +0 -1
  256. package/dist/src/server/workspace-registry-bootstrap.js +0 -98
  257. package/dist/src/server/workspace-registry-bootstrap.js.map +0 -1
  258. package/dist/src/server/workspace-registry-model.js +0 -175
  259. package/dist/src/server/workspace-registry-model.js.map +0 -1
  260. package/dist/src/server/workspace-registry.js +0 -151
  261. package/dist/src/server/workspace-registry.js.map +0 -1
  262. package/dist/src/server/worktree-bootstrap.js +0 -508
  263. package/dist/src/server/worktree-bootstrap.js.map +0 -1
  264. package/dist/src/shared/agent-attention-notification.js +0 -130
  265. package/dist/src/shared/agent-attention-notification.js.map +0 -1
  266. package/dist/src/shared/agent-lifecycle.js +0 -8
  267. package/dist/src/shared/agent-lifecycle.js.map +0 -1
  268. package/dist/src/shared/connection-offer.js +0 -17
  269. package/dist/src/shared/connection-offer.js.map +0 -1
  270. package/dist/src/shared/daemon-endpoints.js +0 -122
  271. package/dist/src/shared/daemon-endpoints.js.map +0 -1
  272. package/dist/src/shared/messages.js +0 -2107
  273. package/dist/src/shared/messages.js.map +0 -1
  274. package/dist/src/shared/path-utils.js +0 -16
  275. package/dist/src/shared/path-utils.js.map +0 -1
  276. package/dist/src/shared/terminal-stream-protocol.js +0 -99
  277. package/dist/src/shared/terminal-stream-protocol.js.map +0 -1
  278. package/dist/src/shared/tool-call-display.js +0 -122
  279. package/dist/src/shared/tool-call-display.js.map +0 -1
  280. package/dist/src/terminal/terminal-manager.js +0 -136
  281. package/dist/src/terminal/terminal-manager.js.map +0 -1
  282. package/dist/src/terminal/terminal.js +0 -333
  283. package/dist/src/terminal/terminal.js.map +0 -1
  284. package/dist/src/utils/checkout-git.js +0 -1518
  285. package/dist/src/utils/checkout-git.js.map +0 -1
  286. package/dist/src/utils/directory-suggestions.js +0 -671
  287. package/dist/src/utils/directory-suggestions.js.map +0 -1
  288. package/dist/src/utils/path.js +0 -15
  289. package/dist/src/utils/path.js.map +0 -1
  290. package/dist/src/utils/project-icon.js +0 -389
  291. package/dist/src/utils/project-icon.js.map +0 -1
  292. package/dist/src/utils/worktree-metadata.js +0 -116
  293. package/dist/src/utils/worktree-metadata.js.map +0 -1
  294. package/dist/src/utils/worktree.js +0 -744
  295. package/dist/src/utils/worktree.js.map +0 -1
@@ -1,2107 +0,0 @@
1
- import { z } from "zod";
2
- import { AGENT_LIFECYCLE_STATUSES } from "./agent-lifecycle.js";
3
- import { MAX_EXPLICIT_AGENT_TITLE_CHARS } from "../server/agent/agent-title-limits.js";
4
- import { AgentProviderSchema } from "../server/agent/provider-manifest.js";
5
- import { TOOL_CALL_ICON_NAMES } from "../server/agent/agent-sdk-types.js";
6
- import { ChatCreateRequestSchema, ChatListRequestSchema, ChatInspectRequestSchema, ChatDeleteRequestSchema, ChatPostRequestSchema, ChatReadRequestSchema, ChatWaitRequestSchema, ChatCreateResponseSchema, ChatListResponseSchema, ChatInspectResponseSchema, ChatDeleteResponseSchema, ChatPostResponseSchema, ChatReadResponseSchema, ChatWaitResponseSchema, } from "../server/chat/chat-rpc-schemas.js";
7
- import { ScheduleCreateRequestSchema, ScheduleListRequestSchema, ScheduleInspectRequestSchema, ScheduleLogsRequestSchema, SchedulePauseRequestSchema, ScheduleResumeRequestSchema, ScheduleDeleteRequestSchema, ScheduleCreateResponseSchema, ScheduleListResponseSchema, ScheduleInspectResponseSchema, ScheduleLogsResponseSchema, SchedulePauseResponseSchema, ScheduleResumeResponseSchema, ScheduleDeleteResponseSchema, } from "../server/schedule/rpc-schemas.js";
8
- import { LoopRunRequestSchema, LoopListRequestSchema, LoopInspectRequestSchema, LoopLogsRequestSchema, LoopStopRequestSchema, LoopRunResponseSchema, LoopListResponseSchema, LoopInspectResponseSchema, LoopLogsResponseSchema, LoopStopResponseSchema, } from "../server/loop/rpc-schemas.js";
9
- export const AgentStatusSchema = z.enum(AGENT_LIFECYCLE_STATUSES);
10
- const AgentModeSchema = z.object({
11
- id: z.string(),
12
- label: z.string(),
13
- description: z.string().optional(),
14
- });
15
- const AgentSelectOptionSchema = z.object({
16
- id: z.string(),
17
- label: z.string(),
18
- description: z.string().optional(),
19
- isDefault: z.boolean().optional(),
20
- metadata: z.record(z.unknown()).optional(),
21
- });
22
- const AgentModelDefinitionSchema = z.object({
23
- provider: AgentProviderSchema,
24
- id: z.string(),
25
- label: z.string(),
26
- description: z.string().optional(),
27
- isDefault: z.boolean().optional(),
28
- metadata: z.record(z.unknown()).optional(),
29
- thinkingOptions: z.array(AgentSelectOptionSchema).optional(),
30
- defaultThinkingOptionId: z.string().optional(),
31
- });
32
- const AgentCapabilityFlagsSchema = z.object({
33
- supportsStreaming: z.boolean(),
34
- supportsSessionPersistence: z.boolean(),
35
- supportsDynamicModes: z.boolean(),
36
- supportsMcpServers: z.boolean(),
37
- supportsReasoningStream: z.boolean(),
38
- supportsToolInvocations: z.boolean(),
39
- });
40
- const AgentUsageSchema = z.object({
41
- inputTokens: z.number().optional(),
42
- cachedInputTokens: z.number().optional(),
43
- outputTokens: z.number().optional(),
44
- totalCostUsd: z.number().optional(),
45
- });
46
- const McpStdioServerConfigSchema = z.object({
47
- type: z.literal("stdio"),
48
- command: z.string(),
49
- args: z.array(z.string()).optional(),
50
- env: z.record(z.string()).optional(),
51
- });
52
- const McpHttpServerConfigSchema = z.object({
53
- type: z.literal("http"),
54
- url: z.string(),
55
- headers: z.record(z.string()).optional(),
56
- });
57
- const McpSseServerConfigSchema = z.object({
58
- type: z.literal("sse"),
59
- url: z.string(),
60
- headers: z.record(z.string()).optional(),
61
- });
62
- const McpServerConfigSchema = z.discriminatedUnion("type", [
63
- McpStdioServerConfigSchema,
64
- McpHttpServerConfigSchema,
65
- McpSseServerConfigSchema,
66
- ]);
67
- const AgentSessionConfigSchema = z.object({
68
- provider: AgentProviderSchema,
69
- cwd: z.string(),
70
- modeId: z.string().optional(),
71
- model: z.string().optional(),
72
- thinkingOptionId: z.string().optional(),
73
- title: z.string().trim().min(1).max(MAX_EXPLICIT_AGENT_TITLE_CHARS).optional().nullable(),
74
- approvalPolicy: z.string().optional(),
75
- sandboxMode: z.string().optional(),
76
- networkAccess: z.boolean().optional(),
77
- webSearch: z.boolean().optional(),
78
- extra: z
79
- .object({
80
- codex: z.record(z.unknown()).optional(),
81
- claude: z.record(z.unknown()).optional(),
82
- })
83
- .partial()
84
- .optional(),
85
- systemPrompt: z.string().optional(),
86
- mcpServers: z.record(McpServerConfigSchema).optional(),
87
- });
88
- const AgentPermissionUpdateSchema = z.record(z.unknown());
89
- export const AgentPermissionResponseSchema = z.union([
90
- z.object({
91
- behavior: z.literal("allow"),
92
- updatedInput: z.record(z.unknown()).optional(),
93
- updatedPermissions: z.array(AgentPermissionUpdateSchema).optional(),
94
- }),
95
- z.object({
96
- behavior: z.literal("deny"),
97
- message: z.string().optional(),
98
- interrupt: z.boolean().optional(),
99
- }),
100
- ]);
101
- export const AgentPermissionRequestPayloadSchema = z.object({
102
- id: z.string(),
103
- provider: AgentProviderSchema,
104
- name: z.string(),
105
- kind: z.enum(["tool", "plan", "question", "mode", "other"]),
106
- title: z.string().optional(),
107
- description: z.string().optional(),
108
- input: z.record(z.unknown()).optional(),
109
- suggestions: z.array(AgentPermissionUpdateSchema).optional(),
110
- metadata: z.record(z.unknown()).optional(),
111
- });
112
- const UnknownValueSchema = z.union([
113
- z.null(),
114
- z.boolean(),
115
- z.number(),
116
- z.string(),
117
- z.array(z.unknown()),
118
- z.object({}).passthrough(),
119
- ]);
120
- const NonNullUnknownSchema = z.union([
121
- z.boolean(),
122
- z.number(),
123
- z.string(),
124
- z.array(z.unknown()),
125
- z.object({}).passthrough(),
126
- ]);
127
- const ToolCallDetailPayloadSchema = z.discriminatedUnion("type", [
128
- z.object({
129
- type: z.literal("shell"),
130
- command: z.string(),
131
- cwd: z.string().optional(),
132
- output: z.string().optional(),
133
- exitCode: z.number().nullable().optional(),
134
- }),
135
- z.object({
136
- type: z.literal("read"),
137
- filePath: z.string(),
138
- content: z.string().optional(),
139
- offset: z.number().optional(),
140
- limit: z.number().optional(),
141
- }),
142
- z.object({
143
- type: z.literal("edit"),
144
- filePath: z.string(),
145
- oldString: z.string().optional(),
146
- newString: z.string().optional(),
147
- unifiedDiff: z.string().optional(),
148
- }),
149
- z.object({
150
- type: z.literal("write"),
151
- filePath: z.string(),
152
- content: z.string().optional(),
153
- }),
154
- z.object({
155
- type: z.literal("search"),
156
- query: z.string(),
157
- toolName: z.enum(["search", "grep", "glob", "web_search"]).optional(),
158
- content: z.string().optional(),
159
- filePaths: z.array(z.string()).optional(),
160
- webResults: z
161
- .array(z.object({
162
- title: z.string(),
163
- url: z.string(),
164
- }))
165
- .optional(),
166
- annotations: z.array(z.string()).optional(),
167
- numFiles: z.number().optional(),
168
- numMatches: z.number().optional(),
169
- durationMs: z.number().optional(),
170
- durationSeconds: z.number().optional(),
171
- truncated: z.boolean().optional(),
172
- mode: z.enum(["content", "files_with_matches", "count"]).optional(),
173
- }),
174
- z.object({
175
- type: z.literal("fetch"),
176
- url: z.string(),
177
- prompt: z.string().optional(),
178
- result: z.string().optional(),
179
- code: z.number().optional(),
180
- codeText: z.string().optional(),
181
- bytes: z.number().optional(),
182
- durationMs: z.number().optional(),
183
- }),
184
- z.object({
185
- type: z.literal("worktree_setup"),
186
- worktreePath: z.string(),
187
- branchName: z.string(),
188
- log: z.string(),
189
- commands: z.array(z.object({
190
- index: z.number().int().positive(),
191
- command: z.string(),
192
- cwd: z.string(),
193
- status: z.enum(["running", "completed", "failed"]),
194
- exitCode: z.number().nullable(),
195
- durationMs: z.number().nonnegative().optional(),
196
- })),
197
- truncated: z.boolean().optional(),
198
- }),
199
- z.object({
200
- type: z.literal("sub_agent"),
201
- subAgentType: z.string().optional(),
202
- description: z.string().optional(),
203
- log: z.string(),
204
- actions: z.array(z.object({
205
- index: z.number().int().positive(),
206
- toolName: z.string(),
207
- summary: z.string().optional(),
208
- })),
209
- }),
210
- z.object({
211
- type: z.literal("plain_text"),
212
- label: z.string().optional(),
213
- text: z.string().optional(),
214
- icon: z.enum(TOOL_CALL_ICON_NAMES).optional(),
215
- }),
216
- z.object({
217
- type: z.literal("unknown"),
218
- input: UnknownValueSchema,
219
- output: UnknownValueSchema,
220
- }),
221
- ]);
222
- const ToolCallBasePayloadSchema = z
223
- .object({
224
- type: z.literal("tool_call"),
225
- callId: z.string(),
226
- name: z.string(),
227
- detail: ToolCallDetailPayloadSchema,
228
- metadata: z.record(z.unknown()).optional(),
229
- })
230
- .strict();
231
- const ToolCallRunningPayloadSchema = ToolCallBasePayloadSchema.extend({
232
- status: z.literal("running"),
233
- error: z.null(),
234
- });
235
- const ToolCallCompletedPayloadSchema = ToolCallBasePayloadSchema.extend({
236
- status: z.literal("completed"),
237
- error: z.null(),
238
- });
239
- const ToolCallFailedPayloadSchema = ToolCallBasePayloadSchema.extend({
240
- status: z.literal("failed"),
241
- error: NonNullUnknownSchema,
242
- });
243
- const ToolCallCanceledPayloadSchema = ToolCallBasePayloadSchema.extend({
244
- status: z.literal("canceled"),
245
- error: z.null(),
246
- });
247
- const ToolCallTimelineItemPayloadSchema = z.union([
248
- ToolCallRunningPayloadSchema,
249
- ToolCallCompletedPayloadSchema,
250
- ToolCallFailedPayloadSchema,
251
- ToolCallCanceledPayloadSchema,
252
- ]);
253
- export const AgentTimelineItemPayloadSchema = z.union([
254
- z.object({
255
- type: z.literal("user_message"),
256
- text: z.string(),
257
- messageId: z.string().optional(),
258
- }),
259
- z.object({
260
- type: z.literal("assistant_message"),
261
- text: z.string(),
262
- }),
263
- z.object({
264
- type: z.literal("reasoning"),
265
- text: z.string(),
266
- }),
267
- ToolCallTimelineItemPayloadSchema,
268
- z.object({
269
- type: z.literal("todo"),
270
- items: z.array(z.object({
271
- text: z.string(),
272
- completed: z.boolean(),
273
- })),
274
- }),
275
- z.object({
276
- type: z.literal("error"),
277
- message: z.string(),
278
- }),
279
- z.object({
280
- type: z.literal("compaction"),
281
- status: z.enum(["loading", "completed"]),
282
- trigger: z.enum(["auto", "manual"]).optional(),
283
- preTokens: z.number().optional(),
284
- }),
285
- ]);
286
- export const AgentStreamEventPayloadSchema = z.discriminatedUnion("type", [
287
- z.object({
288
- type: z.literal("thread_started"),
289
- sessionId: z.string(),
290
- provider: AgentProviderSchema,
291
- }),
292
- z.object({
293
- type: z.literal("turn_started"),
294
- provider: AgentProviderSchema,
295
- }),
296
- z.object({
297
- type: z.literal("turn_completed"),
298
- provider: AgentProviderSchema,
299
- usage: AgentUsageSchema.optional(),
300
- }),
301
- z.object({
302
- type: z.literal("turn_failed"),
303
- provider: AgentProviderSchema,
304
- error: z.string(),
305
- code: z.string().optional(),
306
- diagnostic: z.string().optional(),
307
- }),
308
- z.object({
309
- type: z.literal("turn_canceled"),
310
- provider: AgentProviderSchema,
311
- reason: z.string(),
312
- }),
313
- z.object({
314
- type: z.literal("timeline"),
315
- provider: AgentProviderSchema,
316
- item: AgentTimelineItemPayloadSchema,
317
- }),
318
- z.object({
319
- type: z.literal("permission_requested"),
320
- provider: AgentProviderSchema,
321
- request: AgentPermissionRequestPayloadSchema,
322
- }),
323
- z.object({
324
- type: z.literal("permission_resolved"),
325
- provider: AgentProviderSchema,
326
- requestId: z.string(),
327
- resolution: AgentPermissionResponseSchema,
328
- }),
329
- z.object({
330
- type: z.literal("attention_required"),
331
- provider: AgentProviderSchema,
332
- reason: z.enum(["finished", "error", "permission"]),
333
- timestamp: z.string(),
334
- shouldNotify: z.boolean(),
335
- notification: z
336
- .object({
337
- title: z.string(),
338
- body: z.string(),
339
- data: z.object({
340
- serverId: z.string(),
341
- agentId: z.string(),
342
- reason: z.enum(["finished", "error", "permission"]),
343
- }),
344
- })
345
- .optional(),
346
- }),
347
- ]);
348
- const AgentPersistenceHandleSchema = z
349
- .object({
350
- provider: AgentProviderSchema,
351
- sessionId: z.string(),
352
- nativeHandle: z.string().optional(),
353
- metadata: z.record(z.unknown()).optional(),
354
- })
355
- .nullable();
356
- const AgentRuntimeInfoSchema = z.object({
357
- provider: AgentProviderSchema,
358
- sessionId: z.string().nullable(),
359
- model: z.string().nullable().optional(),
360
- thinkingOptionId: z.string().nullable().optional(),
361
- modeId: z.string().nullable().optional(),
362
- extra: z.record(z.unknown()).optional(),
363
- });
364
- export const AgentSnapshotPayloadSchema = z.object({
365
- id: z.string(),
366
- provider: AgentProviderSchema,
367
- cwd: z.string(),
368
- model: z.string().nullable(),
369
- thinkingOptionId: z.string().nullable().optional(),
370
- effectiveThinkingOptionId: z.string().nullable().optional(),
371
- createdAt: z.string(),
372
- updatedAt: z.string(),
373
- lastUserMessageAt: z.string().nullable(),
374
- status: AgentStatusSchema,
375
- capabilities: AgentCapabilityFlagsSchema,
376
- currentModeId: z.string().nullable(),
377
- availableModes: z.array(AgentModeSchema),
378
- pendingPermissions: z.array(AgentPermissionRequestPayloadSchema),
379
- persistence: AgentPersistenceHandleSchema.nullable(),
380
- runtimeInfo: AgentRuntimeInfoSchema.optional(),
381
- lastUsage: AgentUsageSchema.optional(),
382
- lastError: z.string().optional(),
383
- title: z.string().nullable(),
384
- labels: z.record(z.string()).default({}),
385
- requiresAttention: z.boolean().optional(),
386
- attentionReason: z.enum(["finished", "error", "permission"]).nullable().optional(),
387
- attentionTimestamp: z.string().nullable().optional(),
388
- archivedAt: z.string().nullable().optional(),
389
- });
390
- // ============================================================================
391
- // Session Inbound Messages (Session receives these)
392
- // ============================================================================
393
- export const VoiceAudioChunkMessageSchema = z.object({
394
- type: z.literal("voice_audio_chunk"),
395
- audio: z.string(), // base64 encoded
396
- format: z.string(),
397
- isLast: z.boolean(),
398
- });
399
- export const AbortRequestMessageSchema = z.object({
400
- type: z.literal("abort_request"),
401
- });
402
- export const AudioPlayedMessageSchema = z.object({
403
- type: z.literal("audio_played"),
404
- id: z.string(),
405
- });
406
- const AgentDirectoryFilterSchema = z.object({
407
- labels: z.record(z.string()).optional(),
408
- projectKeys: z.array(z.string()).optional(),
409
- statuses: z.array(AgentStatusSchema).optional(),
410
- includeArchived: z.boolean().optional(),
411
- requiresAttention: z.boolean().optional(),
412
- thinkingOptionId: z.string().nullable().optional(),
413
- });
414
- export const DeleteAgentRequestMessageSchema = z.object({
415
- type: z.literal("delete_agent_request"),
416
- agentId: z.string(),
417
- requestId: z.string(),
418
- });
419
- export const ArchiveAgentRequestMessageSchema = z.object({
420
- type: z.literal("archive_agent_request"),
421
- agentId: z.string(),
422
- requestId: z.string(),
423
- });
424
- export const UpdateAgentRequestMessageSchema = z.object({
425
- type: z.literal("update_agent_request"),
426
- agentId: z.string(),
427
- name: z.string().optional(),
428
- labels: z.record(z.string()).optional(),
429
- requestId: z.string(),
430
- });
431
- export const SetVoiceModeMessageSchema = z.object({
432
- type: z.literal("set_voice_mode"),
433
- enabled: z.boolean(),
434
- agentId: z.string().optional(),
435
- requestId: z.string().optional(),
436
- });
437
- export const SendAgentMessageSchema = z.object({
438
- type: z.literal("send_agent_message"),
439
- agentId: z.string(),
440
- text: z.string(),
441
- messageId: z.string().optional(), // Client-provided ID for deduplication
442
- images: z
443
- .array(z.object({
444
- data: z.string(), // base64 encoded image
445
- mimeType: z.string(), // e.g., "image/jpeg", "image/png"
446
- }))
447
- .optional(),
448
- });
449
- // ============================================================================
450
- // Agent RPCs (requestId-correlated)
451
- // ============================================================================
452
- export const FetchAgentsRequestMessageSchema = z.object({
453
- type: z.literal("fetch_agents_request"),
454
- requestId: z.string(),
455
- filter: AgentDirectoryFilterSchema.optional(),
456
- sort: z
457
- .array(z.object({
458
- key: z.enum(["status_priority", "created_at", "updated_at", "title"]),
459
- direction: z.enum(["asc", "desc"]),
460
- }))
461
- .optional(),
462
- page: z
463
- .object({
464
- limit: z.number().int().positive().max(200),
465
- cursor: z.string().min(1).optional(),
466
- })
467
- .optional(),
468
- subscribe: z
469
- .object({
470
- subscriptionId: z.string().optional(),
471
- })
472
- .optional(),
473
- });
474
- const WorkspaceStateBucketSchema = z.enum([
475
- "needs_input",
476
- "failed",
477
- "running",
478
- "attention",
479
- "done",
480
- ]);
481
- export const FetchWorkspacesRequestMessageSchema = z.object({
482
- type: z.literal("fetch_workspaces_request"),
483
- requestId: z.string(),
484
- filter: z
485
- .object({
486
- query: z.string().optional(),
487
- projectId: z.string().optional(),
488
- idPrefix: z.string().optional(),
489
- })
490
- .optional(),
491
- sort: z
492
- .array(z.object({
493
- key: z.enum(["status_priority", "activity_at", "name", "project_id"]),
494
- direction: z.enum(["asc", "desc"]),
495
- }))
496
- .optional(),
497
- page: z
498
- .object({
499
- limit: z.number().int().positive().max(200),
500
- cursor: z.string().min(1).optional(),
501
- })
502
- .optional(),
503
- subscribe: z
504
- .object({
505
- subscriptionId: z.string().optional(),
506
- })
507
- .optional(),
508
- });
509
- export const FetchAgentRequestMessageSchema = z.object({
510
- type: z.literal("fetch_agent_request"),
511
- requestId: z.string(),
512
- /** Accepts full ID, unique prefix, or exact full title (server resolves). */
513
- agentId: z.string(),
514
- });
515
- export const SendAgentMessageRequestSchema = z.object({
516
- type: z.literal("send_agent_message_request"),
517
- requestId: z.string(),
518
- /** Accepts full ID, unique prefix, or exact full title (server resolves). */
519
- agentId: z.string(),
520
- text: z.string(),
521
- messageId: z.string().optional(), // Client-provided ID for deduplication
522
- images: z
523
- .array(z.object({
524
- data: z.string(), // base64 encoded image
525
- mimeType: z.string(), // e.g., "image/jpeg", "image/png"
526
- }))
527
- .optional(),
528
- });
529
- export const WaitForFinishRequestSchema = z.object({
530
- type: z.literal("wait_for_finish_request"),
531
- requestId: z.string(),
532
- /** Accepts full ID, unique prefix, or exact full title (server resolves). */
533
- agentId: z.string(),
534
- timeoutMs: z.number().int().positive().optional(),
535
- });
536
- // ============================================================================
537
- // Dictation Streaming (lossless, resumable)
538
- // ============================================================================
539
- export const DictationStreamStartMessageSchema = z.object({
540
- type: z.literal("dictation_stream_start"),
541
- dictationId: z.string(),
542
- format: z.string(), // e.g. "audio/pcm;rate=16000;bits=16"
543
- });
544
- export const DictationStreamChunkMessageSchema = z.object({
545
- type: z.literal("dictation_stream_chunk"),
546
- dictationId: z.string(),
547
- seq: z.number().int().nonnegative(),
548
- audio: z.string(), // base64 encoded chunk
549
- format: z.string(), // e.g. "audio/pcm;rate=16000;bits=16"
550
- });
551
- export const DictationStreamFinishMessageSchema = z.object({
552
- type: z.literal("dictation_stream_finish"),
553
- dictationId: z.string(),
554
- finalSeq: z.number().int().nonnegative(),
555
- });
556
- export const DictationStreamCancelMessageSchema = z.object({
557
- type: z.literal("dictation_stream_cancel"),
558
- dictationId: z.string(),
559
- });
560
- const GitSetupOptionsSchema = z.object({
561
- baseBranch: z.string().optional(),
562
- createNewBranch: z.boolean().optional(),
563
- newBranchName: z.string().optional(),
564
- createWorktree: z.boolean().optional(),
565
- worktreeSlug: z.string().optional(),
566
- });
567
- export const CreateAgentRequestMessageSchema = z.object({
568
- type: z.literal("create_agent_request"),
569
- config: AgentSessionConfigSchema,
570
- worktreeName: z.string().optional(),
571
- initialPrompt: z.string().optional(),
572
- clientMessageId: z.string().optional(),
573
- outputSchema: z.record(z.unknown()).optional(),
574
- images: z
575
- .array(z.object({
576
- data: z.string(), // base64 encoded image
577
- mimeType: z.string(), // e.g., "image/jpeg", "image/png"
578
- }))
579
- .optional(),
580
- git: GitSetupOptionsSchema.optional(),
581
- labels: z.record(z.string()).default({}),
582
- requestId: z.string(),
583
- });
584
- export const ListProviderModelsRequestMessageSchema = z.object({
585
- type: z.literal("list_provider_models_request"),
586
- provider: AgentProviderSchema,
587
- cwd: z.string().optional(),
588
- requestId: z.string(),
589
- });
590
- export const ListAvailableProvidersRequestMessageSchema = z.object({
591
- type: z.literal("list_available_providers_request"),
592
- requestId: z.string(),
593
- });
594
- export const SpeechModelsListRequestSchema = z.object({
595
- type: z.literal("speech_models_list_request"),
596
- requestId: z.string(),
597
- });
598
- export const SpeechModelsDownloadRequestSchema = z.object({
599
- type: z.literal("speech_models_download_request"),
600
- modelIds: z.array(z.string()).optional(),
601
- requestId: z.string(),
602
- });
603
- export const ResumeAgentRequestMessageSchema = z.object({
604
- type: z.literal("resume_agent_request"),
605
- handle: AgentPersistenceHandleSchema,
606
- overrides: AgentSessionConfigSchema.partial().optional(),
607
- requestId: z.string(),
608
- });
609
- export const RefreshAgentRequestMessageSchema = z.object({
610
- type: z.literal("refresh_agent_request"),
611
- agentId: z.string(),
612
- requestId: z.string(),
613
- });
614
- export const CancelAgentRequestMessageSchema = z.object({
615
- type: z.literal("cancel_agent_request"),
616
- agentId: z.string(),
617
- });
618
- export const RestartServerRequestMessageSchema = z.object({
619
- type: z.literal("restart_server_request"),
620
- reason: z.string().optional(),
621
- requestId: z.string(),
622
- });
623
- export const ShutdownServerRequestMessageSchema = z.object({
624
- type: z.literal("shutdown_server_request"),
625
- requestId: z.string(),
626
- });
627
- export const AgentTimelineCursorSchema = z.object({
628
- epoch: z.string(),
629
- seq: z.number().int().nonnegative(),
630
- });
631
- export const FetchAgentTimelineRequestMessageSchema = z.object({
632
- type: z.literal("fetch_agent_timeline_request"),
633
- agentId: z.string(),
634
- requestId: z.string(),
635
- direction: z.enum(["tail", "before", "after"]).optional(),
636
- cursor: AgentTimelineCursorSchema.optional(),
637
- // 0 means "all matching rows for this query window".
638
- limit: z.number().int().nonnegative().optional(),
639
- // Default should be projected for app timeline loading.
640
- projection: z.enum(["projected", "canonical"]).optional(),
641
- });
642
- export const SetAgentModeRequestMessageSchema = z.object({
643
- type: z.literal("set_agent_mode_request"),
644
- agentId: z.string(),
645
- modeId: z.string(),
646
- requestId: z.string(),
647
- });
648
- export const SetAgentModeResponseMessageSchema = z.object({
649
- type: z.literal("set_agent_mode_response"),
650
- payload: z.object({
651
- requestId: z.string(),
652
- agentId: z.string(),
653
- accepted: z.boolean(),
654
- error: z.string().nullable(),
655
- }),
656
- });
657
- export const SetAgentModelRequestMessageSchema = z.object({
658
- type: z.literal("set_agent_model_request"),
659
- agentId: z.string(),
660
- modelId: z.string().nullable(),
661
- requestId: z.string(),
662
- });
663
- export const SetAgentModelResponseMessageSchema = z.object({
664
- type: z.literal("set_agent_model_response"),
665
- payload: z.object({
666
- requestId: z.string(),
667
- agentId: z.string(),
668
- accepted: z.boolean(),
669
- error: z.string().nullable(),
670
- }),
671
- });
672
- export const SetAgentThinkingRequestMessageSchema = z.object({
673
- type: z.literal("set_agent_thinking_request"),
674
- agentId: z.string(),
675
- thinkingOptionId: z.string().nullable(),
676
- requestId: z.string(),
677
- });
678
- export const SetAgentThinkingResponseMessageSchema = z.object({
679
- type: z.literal("set_agent_thinking_response"),
680
- payload: z.object({
681
- requestId: z.string(),
682
- agentId: z.string(),
683
- accepted: z.boolean(),
684
- error: z.string().nullable(),
685
- }),
686
- });
687
- export const UpdateAgentResponseMessageSchema = z.object({
688
- type: z.literal("update_agent_response"),
689
- payload: z.object({
690
- requestId: z.string(),
691
- agentId: z.string(),
692
- accepted: z.boolean(),
693
- error: z.string().nullable(),
694
- }),
695
- });
696
- export const SetVoiceModeResponseMessageSchema = z.object({
697
- type: z.literal("set_voice_mode_response"),
698
- payload: z.object({
699
- requestId: z.string(),
700
- enabled: z.boolean(),
701
- agentId: z.string().nullable(),
702
- accepted: z.boolean(),
703
- error: z.string().nullable(),
704
- reasonCode: z.string().optional(),
705
- retryable: z.boolean().optional(),
706
- missingModelIds: z.array(z.string()).optional(),
707
- }),
708
- });
709
- export const AgentPermissionResponseMessageSchema = z.object({
710
- type: z.literal("agent_permission_response"),
711
- agentId: z.string(),
712
- requestId: z.string(),
713
- response: AgentPermissionResponseSchema,
714
- });
715
- const CheckoutErrorCodeSchema = z.enum([
716
- "NOT_GIT_REPO",
717
- "NOT_ALLOWED",
718
- "MERGE_CONFLICT",
719
- "UNKNOWN",
720
- ]);
721
- const CheckoutErrorSchema = z.object({
722
- code: CheckoutErrorCodeSchema,
723
- message: z.string(),
724
- });
725
- const CheckoutDiffCompareSchema = z.object({
726
- mode: z.enum(["uncommitted", "base"]),
727
- baseRef: z.string().optional(),
728
- });
729
- export const CheckoutStatusRequestSchema = z.object({
730
- type: z.literal("checkout_status_request"),
731
- cwd: z.string(),
732
- requestId: z.string(),
733
- });
734
- export const SubscribeCheckoutDiffRequestSchema = z.object({
735
- type: z.literal("subscribe_checkout_diff_request"),
736
- subscriptionId: z.string(),
737
- cwd: z.string(),
738
- compare: CheckoutDiffCompareSchema,
739
- requestId: z.string(),
740
- });
741
- export const UnsubscribeCheckoutDiffRequestSchema = z.object({
742
- type: z.literal("unsubscribe_checkout_diff_request"),
743
- subscriptionId: z.string(),
744
- });
745
- export const CheckoutCommitRequestSchema = z.object({
746
- type: z.literal("checkout_commit_request"),
747
- cwd: z.string(),
748
- message: z.string().optional(),
749
- addAll: z.boolean().optional(),
750
- requestId: z.string(),
751
- });
752
- export const CheckoutMergeRequestSchema = z.object({
753
- type: z.literal("checkout_merge_request"),
754
- cwd: z.string(),
755
- baseRef: z.string().optional(),
756
- strategy: z.enum(["merge", "squash"]).optional(),
757
- requireCleanTarget: z.boolean().optional(),
758
- requestId: z.string(),
759
- });
760
- export const CheckoutMergeFromBaseRequestSchema = z.object({
761
- type: z.literal("checkout_merge_from_base_request"),
762
- cwd: z.string(),
763
- baseRef: z.string().optional(),
764
- requireCleanTarget: z.boolean().optional(),
765
- requestId: z.string(),
766
- });
767
- export const CheckoutPushRequestSchema = z.object({
768
- type: z.literal("checkout_push_request"),
769
- cwd: z.string(),
770
- requestId: z.string(),
771
- });
772
- export const CheckoutPrCreateRequestSchema = z.object({
773
- type: z.literal("checkout_pr_create_request"),
774
- cwd: z.string(),
775
- title: z.string().optional(),
776
- body: z.string().optional(),
777
- baseRef: z.string().optional(),
778
- requestId: z.string(),
779
- });
780
- export const CheckoutPrStatusRequestSchema = z.object({
781
- type: z.literal("checkout_pr_status_request"),
782
- cwd: z.string(),
783
- requestId: z.string(),
784
- });
785
- export const ValidateBranchRequestSchema = z.object({
786
- type: z.literal("validate_branch_request"),
787
- cwd: z.string(),
788
- branchName: z.string(),
789
- requestId: z.string(),
790
- });
791
- export const BranchSuggestionsRequestSchema = z.object({
792
- type: z.literal("branch_suggestions_request"),
793
- cwd: z.string(),
794
- query: z.string().optional(),
795
- limit: z.number().int().min(1).max(200).optional(),
796
- requestId: z.string(),
797
- });
798
- export const DirectorySuggestionsRequestSchema = z.object({
799
- type: z.literal("directory_suggestions_request"),
800
- query: z.string(),
801
- cwd: z.string().optional(),
802
- includeFiles: z.boolean().optional(),
803
- includeDirectories: z.boolean().optional(),
804
- limit: z.number().int().min(1).max(100).optional(),
805
- requestId: z.string(),
806
- });
807
- export const PaseoWorktreeListRequestSchema = z.object({
808
- type: z.literal("paseo_worktree_list_request"),
809
- cwd: z.string().optional(),
810
- repoRoot: z.string().optional(),
811
- requestId: z.string(),
812
- });
813
- export const PaseoWorktreeArchiveRequestSchema = z.object({
814
- type: z.literal("paseo_worktree_archive_request"),
815
- worktreePath: z.string().optional(),
816
- repoRoot: z.string().optional(),
817
- branchName: z.string().optional(),
818
- requestId: z.string(),
819
- });
820
- export const CreatePaseoWorktreeRequestSchema = z.object({
821
- type: z.literal("create_paseo_worktree_request"),
822
- cwd: z.string(),
823
- worktreeSlug: z.string().optional(),
824
- requestId: z.string(),
825
- });
826
- export const OpenProjectRequestSchema = z.object({
827
- type: z.literal("open_project_request"),
828
- cwd: z.string(),
829
- requestId: z.string(),
830
- });
831
- export const ArchiveWorkspaceRequestSchema = z.object({
832
- type: z.literal("archive_workspace_request"),
833
- workspaceId: z.string(),
834
- requestId: z.string(),
835
- });
836
- // Highlighted diff token schema
837
- // Note: style can be a compound class name (e.g., "heading meta") from the syntax highlighter
838
- const HighlightTokenSchema = z.object({
839
- text: z.string(),
840
- style: z.string().nullable(),
841
- });
842
- const DiffLineSchema = z.object({
843
- type: z.enum(["add", "remove", "context", "header"]),
844
- content: z.string(),
845
- tokens: z.array(HighlightTokenSchema).optional(),
846
- });
847
- const DiffHunkSchema = z.object({
848
- oldStart: z.number(),
849
- oldCount: z.number(),
850
- newStart: z.number(),
851
- newCount: z.number(),
852
- lines: z.array(DiffLineSchema),
853
- });
854
- const ParsedDiffFileSchema = z.object({
855
- path: z.string(),
856
- isNew: z.boolean(),
857
- isDeleted: z.boolean(),
858
- additions: z.number(),
859
- deletions: z.number(),
860
- hunks: z.array(DiffHunkSchema),
861
- status: z.enum(["ok", "too_large", "binary"]).optional(),
862
- });
863
- const FileExplorerEntrySchema = z.object({
864
- name: z.string(),
865
- path: z.string(),
866
- kind: z.enum(["file", "directory"]),
867
- size: z.number(),
868
- modifiedAt: z.string(),
869
- });
870
- const FileExplorerFileSchema = z.object({
871
- path: z.string(),
872
- kind: z.enum(["text", "image", "binary"]),
873
- encoding: z.enum(["utf-8", "base64", "none"]),
874
- content: z.string().optional(),
875
- mimeType: z.string().optional(),
876
- size: z.number(),
877
- modifiedAt: z.string(),
878
- });
879
- const FileExplorerDirectorySchema = z.object({
880
- path: z.string(),
881
- entries: z.array(FileExplorerEntrySchema),
882
- });
883
- export const FileExplorerRequestSchema = z.object({
884
- type: z.literal("file_explorer_request"),
885
- cwd: z.string(),
886
- path: z.string().optional(),
887
- mode: z.enum(["list", "file"]),
888
- requestId: z.string(),
889
- });
890
- export const ProjectIconRequestSchema = z.object({
891
- type: z.literal("project_icon_request"),
892
- cwd: z.string(),
893
- requestId: z.string(),
894
- });
895
- export const FileDownloadTokenRequestSchema = z.object({
896
- type: z.literal("file_download_token_request"),
897
- cwd: z.string(),
898
- path: z.string(),
899
- requestId: z.string(),
900
- });
901
- export const ClearAgentAttentionMessageSchema = z.object({
902
- type: z.literal("clear_agent_attention"),
903
- agentId: z.union([z.string(), z.array(z.string())]),
904
- });
905
- export const ClientHeartbeatMessageSchema = z.object({
906
- type: z.literal("client_heartbeat"),
907
- deviceType: z.enum(["web", "mobile"]),
908
- focusedAgentId: z.string().nullable(),
909
- lastActivityAt: z.string(),
910
- appVisible: z.boolean(),
911
- appVisibilityChangedAt: z.string().optional(),
912
- });
913
- export const PingMessageSchema = z.object({
914
- type: z.literal("ping"),
915
- requestId: z.string(),
916
- clientSentAt: z.number().int().optional(),
917
- });
918
- const ListCommandsDraftConfigSchema = z.object({
919
- provider: AgentProviderSchema,
920
- cwd: z.string(),
921
- modeId: z.string().optional(),
922
- model: z.string().optional(),
923
- thinkingOptionId: z.string().optional(),
924
- });
925
- export const ListCommandsRequestSchema = z.object({
926
- type: z.literal("list_commands_request"),
927
- agentId: z.string(),
928
- draftConfig: ListCommandsDraftConfigSchema.optional(),
929
- requestId: z.string(),
930
- });
931
- export const RegisterPushTokenMessageSchema = z.object({
932
- type: z.literal("register_push_token"),
933
- token: z.string(),
934
- });
935
- // ============================================================================
936
- // Terminal Messages
937
- // ============================================================================
938
- export const ListTerminalsRequestSchema = z.object({
939
- type: z.literal("list_terminals_request"),
940
- cwd: z.string(),
941
- requestId: z.string(),
942
- });
943
- export const SubscribeTerminalsRequestSchema = z.object({
944
- type: z.literal("subscribe_terminals_request"),
945
- cwd: z.string(),
946
- });
947
- export const UnsubscribeTerminalsRequestSchema = z.object({
948
- type: z.literal("unsubscribe_terminals_request"),
949
- cwd: z.string(),
950
- });
951
- export const CreateTerminalRequestSchema = z.object({
952
- type: z.literal("create_terminal_request"),
953
- cwd: z.string(),
954
- name: z.string().optional(),
955
- requestId: z.string(),
956
- });
957
- export const SubscribeTerminalRequestSchema = z.object({
958
- type: z.literal("subscribe_terminal_request"),
959
- terminalId: z.string(),
960
- requestId: z.string(),
961
- });
962
- export const UnsubscribeTerminalRequestSchema = z.object({
963
- type: z.literal("unsubscribe_terminal_request"),
964
- terminalId: z.string(),
965
- });
966
- const TerminalClientMessageSchema = z.discriminatedUnion("type", [
967
- z.object({ type: z.literal("input"), data: z.string() }),
968
- z.object({ type: z.literal("resize"), rows: z.number(), cols: z.number() }),
969
- z.object({
970
- type: z.literal("mouse"),
971
- row: z.number(),
972
- col: z.number(),
973
- button: z.number(),
974
- action: z.enum(["down", "up", "move"]),
975
- }),
976
- ]);
977
- export const TerminalInputSchema = z.object({
978
- type: z.literal("terminal_input"),
979
- terminalId: z.string(),
980
- message: TerminalClientMessageSchema,
981
- });
982
- export const KillTerminalRequestSchema = z.object({
983
- type: z.literal("kill_terminal_request"),
984
- terminalId: z.string(),
985
- requestId: z.string(),
986
- });
987
- export const SessionInboundMessageSchema = z.discriminatedUnion("type", [
988
- VoiceAudioChunkMessageSchema,
989
- AbortRequestMessageSchema,
990
- AudioPlayedMessageSchema,
991
- FetchAgentsRequestMessageSchema,
992
- FetchWorkspacesRequestMessageSchema,
993
- FetchAgentRequestMessageSchema,
994
- DeleteAgentRequestMessageSchema,
995
- ArchiveAgentRequestMessageSchema,
996
- UpdateAgentRequestMessageSchema,
997
- SetVoiceModeMessageSchema,
998
- SendAgentMessageRequestSchema,
999
- WaitForFinishRequestSchema,
1000
- DictationStreamStartMessageSchema,
1001
- DictationStreamChunkMessageSchema,
1002
- DictationStreamFinishMessageSchema,
1003
- DictationStreamCancelMessageSchema,
1004
- CreateAgentRequestMessageSchema,
1005
- ListProviderModelsRequestMessageSchema,
1006
- ListAvailableProvidersRequestMessageSchema,
1007
- SpeechModelsListRequestSchema,
1008
- SpeechModelsDownloadRequestSchema,
1009
- ResumeAgentRequestMessageSchema,
1010
- RefreshAgentRequestMessageSchema,
1011
- CancelAgentRequestMessageSchema,
1012
- ShutdownServerRequestMessageSchema,
1013
- RestartServerRequestMessageSchema,
1014
- FetchAgentTimelineRequestMessageSchema,
1015
- SetAgentModeRequestMessageSchema,
1016
- SetAgentModelRequestMessageSchema,
1017
- SetAgentThinkingRequestMessageSchema,
1018
- AgentPermissionResponseMessageSchema,
1019
- CheckoutStatusRequestSchema,
1020
- SubscribeCheckoutDiffRequestSchema,
1021
- UnsubscribeCheckoutDiffRequestSchema,
1022
- CheckoutCommitRequestSchema,
1023
- CheckoutMergeRequestSchema,
1024
- CheckoutMergeFromBaseRequestSchema,
1025
- CheckoutPushRequestSchema,
1026
- CheckoutPrCreateRequestSchema,
1027
- CheckoutPrStatusRequestSchema,
1028
- ValidateBranchRequestSchema,
1029
- BranchSuggestionsRequestSchema,
1030
- DirectorySuggestionsRequestSchema,
1031
- PaseoWorktreeListRequestSchema,
1032
- PaseoWorktreeArchiveRequestSchema,
1033
- CreatePaseoWorktreeRequestSchema,
1034
- OpenProjectRequestSchema,
1035
- ArchiveWorkspaceRequestSchema,
1036
- FileExplorerRequestSchema,
1037
- ProjectIconRequestSchema,
1038
- FileDownloadTokenRequestSchema,
1039
- ClearAgentAttentionMessageSchema,
1040
- ClientHeartbeatMessageSchema,
1041
- PingMessageSchema,
1042
- ListCommandsRequestSchema,
1043
- RegisterPushTokenMessageSchema,
1044
- ListTerminalsRequestSchema,
1045
- SubscribeTerminalsRequestSchema,
1046
- UnsubscribeTerminalsRequestSchema,
1047
- CreateTerminalRequestSchema,
1048
- SubscribeTerminalRequestSchema,
1049
- UnsubscribeTerminalRequestSchema,
1050
- TerminalInputSchema,
1051
- KillTerminalRequestSchema,
1052
- ChatCreateRequestSchema,
1053
- ChatListRequestSchema,
1054
- ChatInspectRequestSchema,
1055
- ChatDeleteRequestSchema,
1056
- ChatPostRequestSchema,
1057
- ChatReadRequestSchema,
1058
- ChatWaitRequestSchema,
1059
- ScheduleCreateRequestSchema,
1060
- ScheduleListRequestSchema,
1061
- ScheduleInspectRequestSchema,
1062
- ScheduleLogsRequestSchema,
1063
- SchedulePauseRequestSchema,
1064
- ScheduleResumeRequestSchema,
1065
- ScheduleDeleteRequestSchema,
1066
- LoopRunRequestSchema,
1067
- LoopListRequestSchema,
1068
- LoopInspectRequestSchema,
1069
- LoopLogsRequestSchema,
1070
- LoopStopRequestSchema,
1071
- ]);
1072
- // ============================================================================
1073
- // Session Outbound Messages (Session emits these)
1074
- // ============================================================================
1075
- export const ActivityLogPayloadSchema = z.object({
1076
- id: z.string(),
1077
- timestamp: z.coerce.date(),
1078
- type: z.enum(["transcript", "assistant", "tool_call", "tool_result", "error", "system"]),
1079
- content: z.string(),
1080
- metadata: z.record(z.unknown()).optional(),
1081
- });
1082
- export const ActivityLogMessageSchema = z.object({
1083
- type: z.literal("activity_log"),
1084
- payload: ActivityLogPayloadSchema,
1085
- });
1086
- export const AssistantChunkMessageSchema = z.object({
1087
- type: z.literal("assistant_chunk"),
1088
- payload: z.object({
1089
- chunk: z.string(),
1090
- }),
1091
- });
1092
- export const AudioOutputMessageSchema = z.object({
1093
- type: z.literal("audio_output"),
1094
- payload: z.object({
1095
- audio: z.string(), // base64 encoded
1096
- format: z.string(),
1097
- id: z.string(),
1098
- isVoiceMode: z.boolean(), // Mode when audio was generated (for drift protection)
1099
- groupId: z.string().optional(), // Logical utterance id
1100
- chunkIndex: z.number().int().nonnegative().optional(),
1101
- isLastChunk: z.boolean().optional(),
1102
- }),
1103
- });
1104
- export const TranscriptionResultMessageSchema = z.object({
1105
- type: z.literal("transcription_result"),
1106
- payload: z.object({
1107
- text: z.string(),
1108
- language: z.string().optional(),
1109
- duration: z.number().optional(),
1110
- requestId: z.string(), // Echoed back from request for tracking
1111
- avgLogprob: z.number().optional(),
1112
- isLowConfidence: z.boolean().optional(),
1113
- byteLength: z.number().optional(),
1114
- format: z.string().optional(),
1115
- debugRecordingPath: z.string().optional(),
1116
- }),
1117
- });
1118
- export const VoiceInputStateMessageSchema = z.object({
1119
- type: z.literal("voice_input_state"),
1120
- payload: z.object({
1121
- isSpeaking: z.boolean(),
1122
- }),
1123
- });
1124
- export const DictationStreamAckMessageSchema = z.object({
1125
- type: z.literal("dictation_stream_ack"),
1126
- payload: z.object({
1127
- dictationId: z.string(),
1128
- ackSeq: z.number().int(),
1129
- }),
1130
- });
1131
- export const DictationStreamFinishAcceptedMessageSchema = z.object({
1132
- type: z.literal("dictation_stream_finish_accepted"),
1133
- payload: z.object({
1134
- dictationId: z.string(),
1135
- timeoutMs: z.number().int().positive(),
1136
- }),
1137
- });
1138
- export const DictationStreamPartialMessageSchema = z.object({
1139
- type: z.literal("dictation_stream_partial"),
1140
- payload: z.object({
1141
- dictationId: z.string(),
1142
- text: z.string(),
1143
- }),
1144
- });
1145
- export const DictationStreamFinalMessageSchema = z.object({
1146
- type: z.literal("dictation_stream_final"),
1147
- payload: z.object({
1148
- dictationId: z.string(),
1149
- text: z.string(),
1150
- debugRecordingPath: z.string().optional(),
1151
- }),
1152
- });
1153
- export const DictationStreamErrorMessageSchema = z.object({
1154
- type: z.literal("dictation_stream_error"),
1155
- payload: z.object({
1156
- dictationId: z.string(),
1157
- error: z.string(),
1158
- retryable: z.boolean(),
1159
- reasonCode: z.string().optional(),
1160
- missingModelIds: z.array(z.string()).optional(),
1161
- debugRecordingPath: z.string().optional(),
1162
- }),
1163
- });
1164
- export const ServerCapabilityStateSchema = z.object({
1165
- enabled: z.boolean(),
1166
- reason: z.string(),
1167
- });
1168
- export const ServerVoiceCapabilitiesSchema = z.object({
1169
- dictation: ServerCapabilityStateSchema,
1170
- voice: ServerCapabilityStateSchema,
1171
- });
1172
- export const ServerCapabilitiesSchema = z
1173
- .object({
1174
- voice: ServerVoiceCapabilitiesSchema.optional(),
1175
- })
1176
- .passthrough();
1177
- const ServerInfoHostnameSchema = z.unknown().transform((value) => {
1178
- if (typeof value !== "string") {
1179
- return null;
1180
- }
1181
- const trimmed = value.trim();
1182
- return trimmed.length > 0 ? trimmed : null;
1183
- });
1184
- const ServerInfoVersionSchema = z.unknown().transform((value) => {
1185
- if (typeof value !== "string") {
1186
- return null;
1187
- }
1188
- const trimmed = value.trim();
1189
- return trimmed.length > 0 ? trimmed : null;
1190
- });
1191
- const ServerCapabilitiesFromUnknownSchema = z
1192
- .unknown()
1193
- .optional()
1194
- .transform((value) => {
1195
- if (value === undefined) {
1196
- return undefined;
1197
- }
1198
- const parsed = ServerCapabilitiesSchema.safeParse(value);
1199
- if (!parsed.success) {
1200
- return undefined;
1201
- }
1202
- return parsed.data;
1203
- });
1204
- export const ServerInfoStatusPayloadSchema = z
1205
- .object({
1206
- status: z.literal("server_info"),
1207
- serverId: z.string().trim().min(1),
1208
- hostname: ServerInfoHostnameSchema.optional(),
1209
- version: ServerInfoVersionSchema.optional(),
1210
- capabilities: ServerCapabilitiesFromUnknownSchema,
1211
- })
1212
- .passthrough()
1213
- .transform((payload) => ({
1214
- ...payload,
1215
- hostname: payload.hostname ?? null,
1216
- version: payload.version ?? null,
1217
- }));
1218
- export const StatusMessageSchema = z.object({
1219
- type: z.literal("status"),
1220
- payload: z
1221
- .object({
1222
- status: z.string(),
1223
- })
1224
- .passthrough(), // Allow additional fields
1225
- });
1226
- export const PongMessageSchema = z.object({
1227
- type: z.literal("pong"),
1228
- payload: z.object({
1229
- requestId: z.string(),
1230
- clientSentAt: z.number().int().optional(),
1231
- serverReceivedAt: z.number().int(),
1232
- serverSentAt: z.number().int(),
1233
- }),
1234
- });
1235
- export const RpcErrorMessageSchema = z.object({
1236
- type: z.literal("rpc_error"),
1237
- payload: z.object({
1238
- requestId: z.string(),
1239
- requestType: z.string().optional(),
1240
- error: z.string(),
1241
- code: z.string().optional(),
1242
- }),
1243
- });
1244
- const AgentStatusWithRequestSchema = z.object({
1245
- agentId: z.string(),
1246
- requestId: z.string(),
1247
- });
1248
- const AgentStatusWithTimelineSchema = AgentStatusWithRequestSchema.extend({
1249
- timelineSize: z.number().optional(),
1250
- });
1251
- export const AgentCreatedStatusPayloadSchema = z
1252
- .object({
1253
- status: z.literal("agent_created"),
1254
- agent: AgentSnapshotPayloadSchema,
1255
- })
1256
- .extend(AgentStatusWithRequestSchema.shape);
1257
- export const AgentCreateFailedStatusPayloadSchema = z.object({
1258
- status: z.literal("agent_create_failed"),
1259
- requestId: z.string(),
1260
- error: z.string(),
1261
- });
1262
- export const AgentResumedStatusPayloadSchema = z
1263
- .object({
1264
- status: z.literal("agent_resumed"),
1265
- agent: AgentSnapshotPayloadSchema,
1266
- })
1267
- .extend(AgentStatusWithTimelineSchema.shape);
1268
- export const AgentRefreshedStatusPayloadSchema = z
1269
- .object({
1270
- status: z.literal("agent_refreshed"),
1271
- })
1272
- .extend(AgentStatusWithTimelineSchema.shape);
1273
- export const RestartRequestedStatusPayloadSchema = z.object({
1274
- status: z.literal("restart_requested"),
1275
- clientId: z.string(),
1276
- reason: z.string().optional(),
1277
- requestId: z.string(),
1278
- });
1279
- export const ShutdownRequestedStatusPayloadSchema = z.object({
1280
- status: z.literal("shutdown_requested"),
1281
- clientId: z.string(),
1282
- requestId: z.string(),
1283
- });
1284
- export const KnownStatusPayloadSchema = z.discriminatedUnion("status", [
1285
- AgentCreatedStatusPayloadSchema,
1286
- AgentCreateFailedStatusPayloadSchema,
1287
- AgentResumedStatusPayloadSchema,
1288
- AgentRefreshedStatusPayloadSchema,
1289
- ShutdownRequestedStatusPayloadSchema,
1290
- RestartRequestedStatusPayloadSchema,
1291
- ]);
1292
- export const ArtifactMessageSchema = z.object({
1293
- type: z.literal("artifact"),
1294
- payload: z.object({
1295
- type: z.enum(["markdown", "diff", "image", "code"]),
1296
- id: z.string(),
1297
- title: z.string(),
1298
- content: z.string(),
1299
- isBase64: z.boolean(),
1300
- }),
1301
- });
1302
- export const ProjectCheckoutLiteNotGitPayloadSchema = z.object({
1303
- cwd: z.string(),
1304
- isGit: z.literal(false),
1305
- currentBranch: z.null(),
1306
- remoteUrl: z.null(),
1307
- isPaseoOwnedWorktree: z.literal(false),
1308
- mainRepoRoot: z.null(),
1309
- });
1310
- export const ProjectCheckoutLiteGitNonPaseoPayloadSchema = z.object({
1311
- cwd: z.string(),
1312
- isGit: z.literal(true),
1313
- currentBranch: z.string().nullable(),
1314
- remoteUrl: z.string().nullable(),
1315
- isPaseoOwnedWorktree: z.literal(false),
1316
- mainRepoRoot: z.null(),
1317
- });
1318
- export const ProjectCheckoutLiteGitPaseoPayloadSchema = z.object({
1319
- cwd: z.string(),
1320
- isGit: z.literal(true),
1321
- currentBranch: z.string().nullable(),
1322
- remoteUrl: z.string().nullable(),
1323
- isPaseoOwnedWorktree: z.literal(true),
1324
- mainRepoRoot: z.string(),
1325
- });
1326
- export const ProjectCheckoutLitePayloadSchema = z.union([
1327
- ProjectCheckoutLiteNotGitPayloadSchema,
1328
- ProjectCheckoutLiteGitNonPaseoPayloadSchema,
1329
- ProjectCheckoutLiteGitPaseoPayloadSchema,
1330
- ]);
1331
- export const ProjectPlacementPayloadSchema = z.object({
1332
- projectKey: z.string(),
1333
- projectName: z.string(),
1334
- checkout: ProjectCheckoutLitePayloadSchema,
1335
- });
1336
- export const WorkspaceDescriptorPayloadSchema = z.object({
1337
- id: z.string(),
1338
- projectId: z.string(),
1339
- projectDisplayName: z.string(),
1340
- projectRootPath: z.string(),
1341
- projectKind: z.enum(["git", "non_git"]),
1342
- workspaceKind: z.enum(["local_checkout", "worktree", "directory"]),
1343
- name: z.string(),
1344
- status: WorkspaceStateBucketSchema,
1345
- activityAt: z.string().nullable(),
1346
- diffStat: z
1347
- .object({
1348
- additions: z.number(),
1349
- deletions: z.number(),
1350
- })
1351
- .nullable()
1352
- .optional(),
1353
- });
1354
- export const AgentUpdateMessageSchema = z.object({
1355
- type: z.literal("agent_update"),
1356
- payload: z.discriminatedUnion("kind", [
1357
- z.object({
1358
- kind: z.literal("upsert"),
1359
- agent: AgentSnapshotPayloadSchema,
1360
- project: ProjectPlacementPayloadSchema,
1361
- }),
1362
- z.object({
1363
- kind: z.literal("remove"),
1364
- agentId: z.string(),
1365
- }),
1366
- ]),
1367
- });
1368
- export const AgentStreamMessageSchema = z.object({
1369
- type: z.literal("agent_stream"),
1370
- payload: z.object({
1371
- agentId: z.string(),
1372
- event: AgentStreamEventPayloadSchema,
1373
- timestamp: z.string(),
1374
- // Present for timeline events. Maps 1:1 to canonical in-memory timeline rows.
1375
- seq: z.number().int().nonnegative().optional(),
1376
- epoch: z.string().optional(),
1377
- }),
1378
- });
1379
- export const AgentStatusMessageSchema = z.object({
1380
- type: z.literal("agent_status"),
1381
- payload: z.object({
1382
- agentId: z.string(),
1383
- status: z.string(),
1384
- info: AgentSnapshotPayloadSchema,
1385
- }),
1386
- });
1387
- export const AgentListMessageSchema = z.object({
1388
- type: z.literal("agent_list"),
1389
- payload: z.object({
1390
- agents: z.array(AgentSnapshotPayloadSchema),
1391
- }),
1392
- });
1393
- export const FetchAgentsResponseMessageSchema = z.object({
1394
- type: z.literal("fetch_agents_response"),
1395
- payload: z.object({
1396
- requestId: z.string(),
1397
- subscriptionId: z.string().nullable().optional(),
1398
- entries: z.array(z.object({
1399
- agent: AgentSnapshotPayloadSchema,
1400
- project: ProjectPlacementPayloadSchema,
1401
- })),
1402
- pageInfo: z.object({
1403
- nextCursor: z.string().nullable(),
1404
- prevCursor: z.string().nullable(),
1405
- hasMore: z.boolean(),
1406
- }),
1407
- }),
1408
- });
1409
- export const FetchWorkspacesResponseMessageSchema = z.object({
1410
- type: z.literal("fetch_workspaces_response"),
1411
- payload: z.object({
1412
- requestId: z.string(),
1413
- subscriptionId: z.string().nullable().optional(),
1414
- entries: z.array(WorkspaceDescriptorPayloadSchema),
1415
- pageInfo: z.object({
1416
- nextCursor: z.string().nullable(),
1417
- prevCursor: z.string().nullable(),
1418
- hasMore: z.boolean(),
1419
- }),
1420
- }),
1421
- });
1422
- export const WorkspaceUpdateMessageSchema = z.object({
1423
- type: z.literal("workspace_update"),
1424
- payload: z.discriminatedUnion("kind", [
1425
- z.object({
1426
- kind: z.literal("upsert"),
1427
- workspace: WorkspaceDescriptorPayloadSchema,
1428
- }),
1429
- z.object({
1430
- kind: z.literal("remove"),
1431
- id: z.string(),
1432
- }),
1433
- ]),
1434
- });
1435
- export const OpenProjectResponseMessageSchema = z.object({
1436
- type: z.literal("open_project_response"),
1437
- payload: z.object({
1438
- requestId: z.string(),
1439
- workspace: WorkspaceDescriptorPayloadSchema.nullable(),
1440
- error: z.string().nullable(),
1441
- }),
1442
- });
1443
- export const ArchiveWorkspaceResponseMessageSchema = z.object({
1444
- type: z.literal("archive_workspace_response"),
1445
- payload: z.object({
1446
- requestId: z.string(),
1447
- workspaceId: z.string(),
1448
- archivedAt: z.string().nullable(),
1449
- error: z.string().nullable(),
1450
- }),
1451
- });
1452
- export const FetchAgentResponseMessageSchema = z.object({
1453
- type: z.literal("fetch_agent_response"),
1454
- payload: z.object({
1455
- requestId: z.string(),
1456
- agent: AgentSnapshotPayloadSchema.nullable(),
1457
- project: ProjectPlacementPayloadSchema.nullable().optional(),
1458
- error: z.string().nullable(),
1459
- }),
1460
- });
1461
- const AgentTimelineSeqRangeSchema = z.object({
1462
- startSeq: z.number().int().nonnegative(),
1463
- endSeq: z.number().int().nonnegative(),
1464
- });
1465
- export const AgentTimelineEntryPayloadSchema = z.object({
1466
- provider: AgentProviderSchema,
1467
- item: AgentTimelineItemPayloadSchema,
1468
- timestamp: z.string(),
1469
- seqStart: z.number().int().nonnegative(),
1470
- seqEnd: z.number().int().nonnegative(),
1471
- sourceSeqRanges: z.array(AgentTimelineSeqRangeSchema),
1472
- collapsed: z.array(z.enum(["assistant_merge", "tool_lifecycle"])),
1473
- });
1474
- export const FetchAgentTimelineResponseMessageSchema = z.object({
1475
- type: z.literal("fetch_agent_timeline_response"),
1476
- payload: z.object({
1477
- requestId: z.string(),
1478
- agentId: z.string(),
1479
- agent: AgentSnapshotPayloadSchema.nullable(),
1480
- direction: z.enum(["tail", "before", "after"]),
1481
- projection: z.enum(["projected", "canonical"]),
1482
- epoch: z.string(),
1483
- reset: z.boolean(),
1484
- staleCursor: z.boolean(),
1485
- gap: z.boolean(),
1486
- window: z.object({
1487
- minSeq: z.number().int().nonnegative(),
1488
- maxSeq: z.number().int().nonnegative(),
1489
- nextSeq: z.number().int().nonnegative(),
1490
- }),
1491
- startCursor: AgentTimelineCursorSchema.nullable(),
1492
- endCursor: AgentTimelineCursorSchema.nullable(),
1493
- hasOlder: z.boolean(),
1494
- hasNewer: z.boolean(),
1495
- entries: z.array(AgentTimelineEntryPayloadSchema),
1496
- error: z.string().nullable(),
1497
- }),
1498
- });
1499
- export const SendAgentMessageResponseMessageSchema = z.object({
1500
- type: z.literal("send_agent_message_response"),
1501
- payload: z.object({
1502
- requestId: z.string(),
1503
- agentId: z.string(),
1504
- accepted: z.boolean(),
1505
- error: z.string().nullable(),
1506
- }),
1507
- });
1508
- export const WaitForFinishResponseMessageSchema = z.object({
1509
- type: z.literal("wait_for_finish_response"),
1510
- payload: z.object({
1511
- requestId: z.string(),
1512
- status: z.enum(["idle", "error", "permission", "timeout"]),
1513
- final: AgentSnapshotPayloadSchema.nullable(),
1514
- error: z.string().nullable(),
1515
- lastMessage: z.string().nullable(),
1516
- }),
1517
- });
1518
- export const AgentPermissionRequestMessageSchema = z.object({
1519
- type: z.literal("agent_permission_request"),
1520
- payload: z.object({
1521
- agentId: z.string(),
1522
- request: AgentPermissionRequestPayloadSchema,
1523
- }),
1524
- });
1525
- export const AgentPermissionResolvedMessageSchema = z.object({
1526
- type: z.literal("agent_permission_resolved"),
1527
- payload: z.object({
1528
- agentId: z.string(),
1529
- requestId: z.string(),
1530
- resolution: AgentPermissionResponseSchema,
1531
- }),
1532
- });
1533
- export const AgentDeletedMessageSchema = z.object({
1534
- type: z.literal("agent_deleted"),
1535
- payload: z.object({
1536
- agentId: z.string(),
1537
- requestId: z.string(),
1538
- }),
1539
- });
1540
- export const AgentArchivedMessageSchema = z.object({
1541
- type: z.literal("agent_archived"),
1542
- payload: z.object({
1543
- agentId: z.string(),
1544
- archivedAt: z.string(),
1545
- requestId: z.string(),
1546
- }),
1547
- });
1548
- const AheadBehindSchema = z.object({
1549
- ahead: z.number(),
1550
- behind: z.number(),
1551
- });
1552
- const CheckoutStatusCommonSchema = z.object({
1553
- cwd: z.string(),
1554
- error: CheckoutErrorSchema.nullable(),
1555
- requestId: z.string(),
1556
- });
1557
- const CheckoutStatusNotGitSchema = CheckoutStatusCommonSchema.extend({
1558
- isGit: z.literal(false),
1559
- isPaseoOwnedWorktree: z.literal(false),
1560
- repoRoot: z.null(),
1561
- currentBranch: z.null(),
1562
- isDirty: z.null(),
1563
- baseRef: z.null(),
1564
- aheadBehind: z.null(),
1565
- aheadOfOrigin: z.null(),
1566
- behindOfOrigin: z.null(),
1567
- hasRemote: z.boolean(),
1568
- remoteUrl: z.null(),
1569
- });
1570
- const CheckoutStatusGitNonPaseoSchema = CheckoutStatusCommonSchema.extend({
1571
- isGit: z.literal(true),
1572
- isPaseoOwnedWorktree: z.literal(false),
1573
- repoRoot: z.string(),
1574
- currentBranch: z.string().nullable(),
1575
- isDirty: z.boolean(),
1576
- baseRef: z.string().nullable(),
1577
- aheadBehind: AheadBehindSchema.nullable(),
1578
- aheadOfOrigin: z.number().nullable(),
1579
- behindOfOrigin: z.number().nullable(),
1580
- hasRemote: z.boolean(),
1581
- remoteUrl: z.string().nullable(),
1582
- });
1583
- const CheckoutStatusGitPaseoSchema = CheckoutStatusCommonSchema.extend({
1584
- isGit: z.literal(true),
1585
- isPaseoOwnedWorktree: z.literal(true),
1586
- repoRoot: z.string(),
1587
- mainRepoRoot: z.string(),
1588
- currentBranch: z.string().nullable(),
1589
- isDirty: z.boolean(),
1590
- baseRef: z.string(),
1591
- aheadBehind: AheadBehindSchema.nullable(),
1592
- aheadOfOrigin: z.number().nullable(),
1593
- behindOfOrigin: z.number().nullable(),
1594
- hasRemote: z.boolean(),
1595
- remoteUrl: z.string().nullable(),
1596
- });
1597
- export const CheckoutStatusResponseSchema = z.object({
1598
- type: z.literal("checkout_status_response"),
1599
- payload: z.union([
1600
- CheckoutStatusNotGitSchema,
1601
- CheckoutStatusGitNonPaseoSchema,
1602
- CheckoutStatusGitPaseoSchema,
1603
- ]),
1604
- });
1605
- const CheckoutDiffSubscriptionPayloadSchema = z.object({
1606
- subscriptionId: z.string(),
1607
- cwd: z.string(),
1608
- files: z.array(ParsedDiffFileSchema),
1609
- error: CheckoutErrorSchema.nullable(),
1610
- });
1611
- export const SubscribeCheckoutDiffResponseSchema = z.object({
1612
- type: z.literal("subscribe_checkout_diff_response"),
1613
- payload: CheckoutDiffSubscriptionPayloadSchema.extend({
1614
- requestId: z.string(),
1615
- }),
1616
- });
1617
- export const CheckoutDiffUpdateSchema = z.object({
1618
- type: z.literal("checkout_diff_update"),
1619
- payload: CheckoutDiffSubscriptionPayloadSchema,
1620
- });
1621
- export const CheckoutCommitResponseSchema = z.object({
1622
- type: z.literal("checkout_commit_response"),
1623
- payload: z.object({
1624
- cwd: z.string(),
1625
- success: z.boolean(),
1626
- error: CheckoutErrorSchema.nullable(),
1627
- requestId: z.string(),
1628
- }),
1629
- });
1630
- export const CheckoutMergeResponseSchema = z.object({
1631
- type: z.literal("checkout_merge_response"),
1632
- payload: z.object({
1633
- cwd: z.string(),
1634
- success: z.boolean(),
1635
- error: CheckoutErrorSchema.nullable(),
1636
- requestId: z.string(),
1637
- }),
1638
- });
1639
- export const CheckoutMergeFromBaseResponseSchema = z.object({
1640
- type: z.literal("checkout_merge_from_base_response"),
1641
- payload: z.object({
1642
- cwd: z.string(),
1643
- success: z.boolean(),
1644
- error: CheckoutErrorSchema.nullable(),
1645
- requestId: z.string(),
1646
- }),
1647
- });
1648
- export const CheckoutPushResponseSchema = z.object({
1649
- type: z.literal("checkout_push_response"),
1650
- payload: z.object({
1651
- cwd: z.string(),
1652
- success: z.boolean(),
1653
- error: CheckoutErrorSchema.nullable(),
1654
- requestId: z.string(),
1655
- }),
1656
- });
1657
- export const CheckoutPrCreateResponseSchema = z.object({
1658
- type: z.literal("checkout_pr_create_response"),
1659
- payload: z.object({
1660
- cwd: z.string(),
1661
- url: z.string().nullable(),
1662
- number: z.number().nullable(),
1663
- error: CheckoutErrorSchema.nullable(),
1664
- requestId: z.string(),
1665
- }),
1666
- });
1667
- const CheckoutPrStatusSchema = z.object({
1668
- url: z.string(),
1669
- title: z.string(),
1670
- state: z.string(),
1671
- baseRefName: z.string(),
1672
- headRefName: z.string(),
1673
- isMerged: z.boolean(),
1674
- });
1675
- export const CheckoutPrStatusResponseSchema = z.object({
1676
- type: z.literal("checkout_pr_status_response"),
1677
- payload: z.object({
1678
- cwd: z.string(),
1679
- status: CheckoutPrStatusSchema.nullable(),
1680
- githubFeaturesEnabled: z.boolean(),
1681
- error: CheckoutErrorSchema.nullable(),
1682
- requestId: z.string(),
1683
- }),
1684
- });
1685
- export const ValidateBranchResponseSchema = z.object({
1686
- type: z.literal("validate_branch_response"),
1687
- payload: z.object({
1688
- exists: z.boolean(),
1689
- resolvedRef: z.string().nullable(),
1690
- isRemote: z.boolean(),
1691
- error: z.string().nullable(),
1692
- requestId: z.string(),
1693
- }),
1694
- });
1695
- export const BranchSuggestionsResponseSchema = z.object({
1696
- type: z.literal("branch_suggestions_response"),
1697
- payload: z.object({
1698
- branches: z.array(z.string()),
1699
- error: z.string().nullable(),
1700
- requestId: z.string(),
1701
- }),
1702
- });
1703
- export const DirectorySuggestionsResponseSchema = z.object({
1704
- type: z.literal("directory_suggestions_response"),
1705
- payload: z.object({
1706
- directories: z.array(z.string()),
1707
- entries: z
1708
- .array(z.object({
1709
- path: z.string(),
1710
- kind: z.enum(["file", "directory"]),
1711
- }))
1712
- .optional()
1713
- .default([]),
1714
- error: z.string().nullable(),
1715
- requestId: z.string(),
1716
- }),
1717
- });
1718
- const PaseoWorktreeSchema = z.object({
1719
- worktreePath: z.string(),
1720
- createdAt: z.string(),
1721
- branchName: z.string().nullable().optional(),
1722
- head: z.string().nullable().optional(),
1723
- });
1724
- export const PaseoWorktreeListResponseSchema = z.object({
1725
- type: z.literal("paseo_worktree_list_response"),
1726
- payload: z.object({
1727
- worktrees: z.array(PaseoWorktreeSchema),
1728
- error: CheckoutErrorSchema.nullable(),
1729
- requestId: z.string(),
1730
- }),
1731
- });
1732
- export const PaseoWorktreeArchiveResponseSchema = z.object({
1733
- type: z.literal("paseo_worktree_archive_response"),
1734
- payload: z.object({
1735
- success: z.boolean(),
1736
- removedAgents: z.array(z.string()).optional(),
1737
- error: CheckoutErrorSchema.nullable(),
1738
- requestId: z.string(),
1739
- }),
1740
- });
1741
- export const CreatePaseoWorktreeResponseSchema = z.object({
1742
- type: z.literal("create_paseo_worktree_response"),
1743
- payload: z.object({
1744
- workspace: WorkspaceDescriptorPayloadSchema.nullable(),
1745
- error: z.string().nullable(),
1746
- setupTerminalId: z.string().nullable(),
1747
- requestId: z.string(),
1748
- }),
1749
- });
1750
- export const FileExplorerResponseSchema = z.object({
1751
- type: z.literal("file_explorer_response"),
1752
- payload: z.object({
1753
- cwd: z.string(),
1754
- path: z.string(),
1755
- mode: z.enum(["list", "file"]),
1756
- directory: FileExplorerDirectorySchema.nullable(),
1757
- file: FileExplorerFileSchema.nullable(),
1758
- error: z.string().nullable(),
1759
- requestId: z.string(),
1760
- }),
1761
- });
1762
- const ProjectIconSchema = z.object({
1763
- data: z.string(),
1764
- mimeType: z.string(),
1765
- });
1766
- export const ProjectIconResponseSchema = z.object({
1767
- type: z.literal("project_icon_response"),
1768
- payload: z.object({
1769
- cwd: z.string(),
1770
- icon: ProjectIconSchema.nullable(),
1771
- error: z.string().nullable(),
1772
- requestId: z.string(),
1773
- }),
1774
- });
1775
- export const FileDownloadTokenResponseSchema = z.object({
1776
- type: z.literal("file_download_token_response"),
1777
- payload: z.object({
1778
- cwd: z.string(),
1779
- path: z.string(),
1780
- token: z.string().nullable(),
1781
- fileName: z.string().nullable(),
1782
- mimeType: z.string().nullable(),
1783
- size: z.number().nullable(),
1784
- error: z.string().nullable(),
1785
- requestId: z.string(),
1786
- }),
1787
- });
1788
- export const ListProviderModelsResponseMessageSchema = z.object({
1789
- type: z.literal("list_provider_models_response"),
1790
- payload: z.object({
1791
- provider: AgentProviderSchema,
1792
- models: z.array(AgentModelDefinitionSchema).optional(),
1793
- error: z.string().nullable().optional(),
1794
- fetchedAt: z.string(),
1795
- requestId: z.string(),
1796
- }),
1797
- });
1798
- const ProviderAvailabilitySchema = z.object({
1799
- provider: AgentProviderSchema,
1800
- available: z.boolean(),
1801
- error: z.string().nullable().optional(),
1802
- });
1803
- export const ListAvailableProvidersResponseSchema = z.object({
1804
- type: z.literal("list_available_providers_response"),
1805
- payload: z.object({
1806
- providers: z.array(ProviderAvailabilitySchema),
1807
- error: z.string().nullable().optional(),
1808
- fetchedAt: z.string(),
1809
- requestId: z.string(),
1810
- }),
1811
- });
1812
- export const SpeechModelsListResponseSchema = z.object({
1813
- type: z.literal("speech_models_list_response"),
1814
- payload: z.object({
1815
- modelsDir: z.string(),
1816
- models: z.array(z.object({
1817
- id: z.string(),
1818
- kind: z.string(),
1819
- description: z.string(),
1820
- modelDir: z.string(),
1821
- isDownloaded: z.boolean(),
1822
- missingFiles: z.array(z.string()).optional(),
1823
- })),
1824
- requestId: z.string(),
1825
- }),
1826
- });
1827
- export const SpeechModelsDownloadResponseSchema = z.object({
1828
- type: z.literal("speech_models_download_response"),
1829
- payload: z.object({
1830
- modelsDir: z.string(),
1831
- downloadedModelIds: z.array(z.string()),
1832
- error: z.string().nullable(),
1833
- requestId: z.string(),
1834
- }),
1835
- });
1836
- const AgentSlashCommandSchema = z.object({
1837
- name: z.string(),
1838
- description: z.string(),
1839
- argumentHint: z.string(),
1840
- });
1841
- export const ListCommandsResponseSchema = z.object({
1842
- type: z.literal("list_commands_response"),
1843
- payload: z.object({
1844
- agentId: z.string(),
1845
- commands: z.array(AgentSlashCommandSchema),
1846
- error: z.string().nullable(),
1847
- requestId: z.string(),
1848
- }),
1849
- });
1850
- // ============================================================================
1851
- // Terminal Outbound Messages
1852
- // ============================================================================
1853
- const TerminalInfoSchema = z.object({
1854
- id: z.string(),
1855
- name: z.string(),
1856
- cwd: z.string(),
1857
- });
1858
- export const TerminalCellSchema = z
1859
- .object({
1860
- char: z.string(),
1861
- fg: z.number().optional(),
1862
- bg: z.number().optional(),
1863
- fgMode: z.number().optional(),
1864
- bgMode: z.number().optional(),
1865
- bold: z.boolean().optional(),
1866
- italic: z.boolean().optional(),
1867
- underline: z.boolean().optional(),
1868
- dim: z.boolean().optional(),
1869
- inverse: z.boolean().optional(),
1870
- strikethrough: z.boolean().optional(),
1871
- })
1872
- .strict();
1873
- export const TerminalCursorStyleSchema = z.enum(["block", "underline", "bar"]);
1874
- export const TerminalCursorSchema = z
1875
- .object({
1876
- row: z.number(),
1877
- col: z.number(),
1878
- hidden: z.boolean().optional(),
1879
- style: TerminalCursorStyleSchema.optional(),
1880
- blink: z.boolean().optional(),
1881
- })
1882
- .strict();
1883
- export const TerminalStateSchema = z
1884
- .object({
1885
- rows: z.number(),
1886
- cols: z.number(),
1887
- grid: z.array(z.array(TerminalCellSchema)),
1888
- scrollback: z.array(z.array(TerminalCellSchema)),
1889
- cursor: TerminalCursorSchema,
1890
- })
1891
- .strict();
1892
- export const ListTerminalsResponseSchema = z.object({
1893
- type: z.literal("list_terminals_response"),
1894
- payload: z.object({
1895
- cwd: z.string(),
1896
- terminals: z.array(TerminalInfoSchema.omit({ cwd: true })),
1897
- requestId: z.string(),
1898
- }),
1899
- });
1900
- export const TerminalsChangedSchema = z.object({
1901
- type: z.literal("terminals_changed"),
1902
- payload: z.object({
1903
- cwd: z.string(),
1904
- terminals: z.array(TerminalInfoSchema.omit({ cwd: true })),
1905
- }),
1906
- });
1907
- export const CreateTerminalResponseSchema = z.object({
1908
- type: z.literal("create_terminal_response"),
1909
- payload: z.object({
1910
- terminal: TerminalInfoSchema.nullable(),
1911
- error: z.string().nullable(),
1912
- requestId: z.string(),
1913
- }),
1914
- });
1915
- export const SubscribeTerminalResponseSchema = z.object({
1916
- type: z.literal("subscribe_terminal_response"),
1917
- payload: z.union([
1918
- z.object({
1919
- terminalId: z.string(),
1920
- slot: z.number().int().min(0).max(255),
1921
- error: z.null(),
1922
- requestId: z.string(),
1923
- }),
1924
- z.object({
1925
- terminalId: z.string(),
1926
- error: z.string(),
1927
- requestId: z.string(),
1928
- }),
1929
- ]),
1930
- });
1931
- export const KillTerminalResponseSchema = z.object({
1932
- type: z.literal("kill_terminal_response"),
1933
- payload: z.object({
1934
- terminalId: z.string(),
1935
- success: z.boolean(),
1936
- requestId: z.string(),
1937
- }),
1938
- });
1939
- export const TerminalStreamExitSchema = z.object({
1940
- type: z.literal("terminal_stream_exit"),
1941
- payload: z.object({
1942
- terminalId: z.string(),
1943
- }),
1944
- });
1945
- export const SessionOutboundMessageSchema = z.discriminatedUnion("type", [
1946
- ActivityLogMessageSchema,
1947
- AssistantChunkMessageSchema,
1948
- AudioOutputMessageSchema,
1949
- TranscriptionResultMessageSchema,
1950
- VoiceInputStateMessageSchema,
1951
- DictationStreamAckMessageSchema,
1952
- DictationStreamFinishAcceptedMessageSchema,
1953
- DictationStreamPartialMessageSchema,
1954
- DictationStreamFinalMessageSchema,
1955
- DictationStreamErrorMessageSchema,
1956
- StatusMessageSchema,
1957
- PongMessageSchema,
1958
- RpcErrorMessageSchema,
1959
- ArtifactMessageSchema,
1960
- AgentUpdateMessageSchema,
1961
- WorkspaceUpdateMessageSchema,
1962
- AgentStreamMessageSchema,
1963
- AgentStatusMessageSchema,
1964
- FetchAgentsResponseMessageSchema,
1965
- FetchWorkspacesResponseMessageSchema,
1966
- OpenProjectResponseMessageSchema,
1967
- ArchiveWorkspaceResponseMessageSchema,
1968
- FetchAgentResponseMessageSchema,
1969
- FetchAgentTimelineResponseMessageSchema,
1970
- SendAgentMessageResponseMessageSchema,
1971
- SetVoiceModeResponseMessageSchema,
1972
- SetAgentModeResponseMessageSchema,
1973
- SetAgentModelResponseMessageSchema,
1974
- SetAgentThinkingResponseMessageSchema,
1975
- UpdateAgentResponseMessageSchema,
1976
- WaitForFinishResponseMessageSchema,
1977
- AgentPermissionRequestMessageSchema,
1978
- AgentPermissionResolvedMessageSchema,
1979
- AgentDeletedMessageSchema,
1980
- AgentArchivedMessageSchema,
1981
- CheckoutStatusResponseSchema,
1982
- SubscribeCheckoutDiffResponseSchema,
1983
- CheckoutDiffUpdateSchema,
1984
- CheckoutCommitResponseSchema,
1985
- CheckoutMergeResponseSchema,
1986
- CheckoutMergeFromBaseResponseSchema,
1987
- CheckoutPushResponseSchema,
1988
- CheckoutPrCreateResponseSchema,
1989
- CheckoutPrStatusResponseSchema,
1990
- ValidateBranchResponseSchema,
1991
- BranchSuggestionsResponseSchema,
1992
- DirectorySuggestionsResponseSchema,
1993
- PaseoWorktreeListResponseSchema,
1994
- PaseoWorktreeArchiveResponseSchema,
1995
- CreatePaseoWorktreeResponseSchema,
1996
- FileExplorerResponseSchema,
1997
- ProjectIconResponseSchema,
1998
- FileDownloadTokenResponseSchema,
1999
- ListProviderModelsResponseMessageSchema,
2000
- ListAvailableProvidersResponseSchema,
2001
- SpeechModelsListResponseSchema,
2002
- SpeechModelsDownloadResponseSchema,
2003
- ListCommandsResponseSchema,
2004
- ListTerminalsResponseSchema,
2005
- TerminalsChangedSchema,
2006
- CreateTerminalResponseSchema,
2007
- SubscribeTerminalResponseSchema,
2008
- KillTerminalResponseSchema,
2009
- TerminalStreamExitSchema,
2010
- ChatCreateResponseSchema,
2011
- ChatListResponseSchema,
2012
- ChatInspectResponseSchema,
2013
- ChatDeleteResponseSchema,
2014
- ChatPostResponseSchema,
2015
- ChatReadResponseSchema,
2016
- ChatWaitResponseSchema,
2017
- ScheduleCreateResponseSchema,
2018
- ScheduleListResponseSchema,
2019
- ScheduleInspectResponseSchema,
2020
- ScheduleLogsResponseSchema,
2021
- SchedulePauseResponseSchema,
2022
- ScheduleResumeResponseSchema,
2023
- ScheduleDeleteResponseSchema,
2024
- LoopRunResponseSchema,
2025
- LoopListResponseSchema,
2026
- LoopInspectResponseSchema,
2027
- LoopLogsResponseSchema,
2028
- LoopStopResponseSchema,
2029
- ]);
2030
- // ============================================================================
2031
- // WebSocket Level Messages (wraps session messages)
2032
- // ============================================================================
2033
- // WebSocket-only messages (not session messages)
2034
- export const WSPingMessageSchema = z.object({
2035
- type: z.literal("ping"),
2036
- });
2037
- export const WSPongMessageSchema = z.object({
2038
- type: z.literal("pong"),
2039
- });
2040
- export const WSHelloMessageSchema = z.object({
2041
- type: z.literal("hello"),
2042
- clientId: z.string().min(1),
2043
- clientType: z.enum(["mobile", "browser", "cli", "mcp"]),
2044
- protocolVersion: z.number().int(),
2045
- capabilities: z
2046
- .object({
2047
- voice: z.boolean().optional(),
2048
- pushNotifications: z.boolean().optional(),
2049
- })
2050
- .passthrough()
2051
- .optional(),
2052
- });
2053
- export const WSRecordingStateMessageSchema = z.object({
2054
- type: z.literal("recording_state"),
2055
- isRecording: z.boolean(),
2056
- });
2057
- // Wrapped session message
2058
- export const WSSessionInboundSchema = z.object({
2059
- type: z.literal("session"),
2060
- message: SessionInboundMessageSchema,
2061
- });
2062
- export const WSSessionOutboundSchema = z.object({
2063
- type: z.literal("session"),
2064
- message: SessionOutboundMessageSchema,
2065
- });
2066
- // Complete WebSocket message schemas
2067
- export const WSInboundMessageSchema = z.discriminatedUnion("type", [
2068
- WSPingMessageSchema,
2069
- WSHelloMessageSchema,
2070
- WSRecordingStateMessageSchema,
2071
- WSSessionInboundSchema,
2072
- ]);
2073
- export const WSOutboundMessageSchema = z.discriminatedUnion("type", [
2074
- WSPongMessageSchema,
2075
- WSSessionOutboundSchema,
2076
- ]);
2077
- // ============================================================================
2078
- // Helper functions for message conversion
2079
- // ============================================================================
2080
- /**
2081
- * Extract session message from WebSocket message
2082
- * Returns null if message should be handled at WS level only
2083
- */
2084
- export function extractSessionMessage(wsMsg) {
2085
- if (wsMsg.type === "session") {
2086
- return wsMsg.message;
2087
- }
2088
- // Ping and recording_state are WS-level only
2089
- return null;
2090
- }
2091
- /**
2092
- * Wrap session message in WebSocket envelope
2093
- */
2094
- export function wrapSessionMessage(sessionMsg) {
2095
- return {
2096
- type: "session",
2097
- message: sessionMsg,
2098
- };
2099
- }
2100
- export function parseServerInfoStatusPayload(payload) {
2101
- const parsed = ServerInfoStatusPayloadSchema.safeParse(payload);
2102
- if (!parsed.success) {
2103
- return null;
2104
- }
2105
- return parsed.data;
2106
- }
2107
- //# sourceMappingURL=messages.js.map