@junctionpanel/server 0.1.16

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