@getpaseo/server 0.1.68 → 0.1.70

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 (335) hide show
  1. package/dist/scripts/dev-runner.js +4 -1
  2. package/dist/scripts/dev-runner.js.map +1 -1
  3. package/dist/scripts/supervisor-entrypoint.js +32 -10
  4. package/dist/scripts/supervisor-entrypoint.js.map +1 -1
  5. package/dist/scripts/supervisor.js +71 -6
  6. package/dist/scripts/supervisor.js.map +1 -1
  7. package/dist/server/client/daemon-client-runtime-metrics.js.map +1 -1
  8. package/dist/server/client/daemon-client-websocket-transport.js.map +1 -1
  9. package/dist/server/client/daemon-client.d.ts +33 -0
  10. package/dist/server/client/daemon-client.d.ts.map +1 -1
  11. package/dist/server/client/daemon-client.js +37 -1
  12. package/dist/server/client/daemon-client.js.map +1 -1
  13. package/dist/server/server/agent/agent-manager.d.ts +8 -0
  14. package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
  15. package/dist/server/server/agent/agent-manager.js +54 -5
  16. package/dist/server/server/agent/agent-manager.js.map +1 -1
  17. package/dist/server/server/agent/agent-response-loop.js.map +1 -1
  18. package/dist/server/server/agent/agent-sdk-types.d.ts +15 -2
  19. package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
  20. package/dist/server/server/agent/agent-storage.d.ts +2 -2
  21. package/dist/server/server/agent/agent-stream-coalescer.d.ts +1 -1
  22. package/dist/server/server/agent/agent-stream-coalescer.d.ts.map +1 -1
  23. package/dist/server/server/agent/agent-timeline-store.js +1 -1
  24. package/dist/server/server/agent/agent-timeline-store.js.map +1 -1
  25. package/dist/server/server/agent/create-agent-mode.d.ts +14 -0
  26. package/dist/server/server/agent/create-agent-mode.d.ts.map +1 -0
  27. package/dist/server/server/agent/create-agent-mode.js +23 -0
  28. package/dist/server/server/agent/create-agent-mode.js.map +1 -0
  29. package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
  30. package/dist/server/server/agent/mcp-server.js +36 -12
  31. package/dist/server/server/agent/mcp-server.js.map +1 -1
  32. package/dist/server/server/agent/mcp-shared.d.ts +8 -4
  33. package/dist/server/server/agent/mcp-shared.d.ts.map +1 -1
  34. package/dist/server/server/agent/mcp-shared.js +12 -5
  35. package/dist/server/server/agent/mcp-shared.js.map +1 -1
  36. package/dist/server/server/agent/pcm16-resampler.js.map +1 -1
  37. package/dist/server/server/agent/prompt-attachments.d.ts.map +1 -1
  38. package/dist/server/server/agent/prompt-attachments.js +2 -0
  39. package/dist/server/server/agent/prompt-attachments.js.map +1 -1
  40. package/dist/server/server/agent/provider-launch-config.js.map +1 -1
  41. package/dist/server/server/agent/provider-manifest.d.ts +4 -1
  42. package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
  43. package/dist/server/server/agent/provider-manifest.js +11 -0
  44. package/dist/server/server/agent/provider-manifest.js.map +1 -1
  45. package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
  46. package/dist/server/server/agent/provider-registry.js +8 -3
  47. package/dist/server/server/agent/provider-registry.js.map +1 -1
  48. package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
  49. package/dist/server/server/agent/providers/acp-agent.d.ts +2 -1
  50. package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
  51. package/dist/server/server/agent/providers/acp-agent.js +35 -17
  52. package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
  53. package/dist/server/server/agent/providers/{claude-agent.d.ts → claude/agent.d.ts} +10 -6
  54. package/dist/server/server/agent/providers/claude/agent.d.ts.map +1 -0
  55. package/dist/server/server/agent/providers/{claude-agent.js → claude/agent.js} +216 -153
  56. package/dist/server/server/agent/providers/claude/agent.js.map +1 -0
  57. package/dist/server/server/agent/providers/claude/{claude-models.d.ts → models.d.ts} +1 -1
  58. package/dist/server/server/agent/providers/claude/models.d.ts.map +1 -0
  59. package/dist/server/server/agent/providers/claude/{claude-models.js → models.js} +8 -1
  60. package/dist/server/server/agent/providers/claude/models.js.map +1 -0
  61. package/dist/server/server/agent/providers/claude/query.d.ts +14 -0
  62. package/dist/server/server/agent/providers/claude/query.d.ts.map +1 -0
  63. package/dist/server/server/agent/providers/claude/query.js +84 -0
  64. package/dist/server/server/agent/providers/claude/query.js.map +1 -0
  65. package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -1
  66. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +11 -2
  67. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  68. package/dist/server/server/agent/providers/codex-app-server-agent.js +408 -91
  69. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  70. package/dist/server/server/agent/providers/diagnostic-utils.d.ts.map +1 -1
  71. package/dist/server/server/agent/providers/diagnostic-utils.js +4 -0
  72. package/dist/server/server/agent/providers/diagnostic-utils.js.map +1 -1
  73. package/dist/server/server/agent/providers/generic-acp-agent.d.ts +1 -1
  74. package/dist/server/server/agent/providers/generic-acp-agent.d.ts.map +1 -1
  75. package/dist/server/server/agent/providers/generic-acp-agent.js +0 -3
  76. package/dist/server/server/agent/providers/generic-acp-agent.js.map +1 -1
  77. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -1
  78. package/dist/server/server/agent/providers/mock-load-test-agent.js +6 -2
  79. package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -1
  80. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
  81. package/dist/server/server/agent/providers/opencode-agent.js +32 -27
  82. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
  83. package/dist/server/server/agent/providers/provider-image-output.d.ts +20 -0
  84. package/dist/server/server/agent/providers/provider-image-output.d.ts.map +1 -0
  85. package/dist/server/server/agent/providers/provider-image-output.js +51 -0
  86. package/dist/server/server/agent/providers/provider-image-output.js.map +1 -0
  87. package/dist/server/server/agent/providers/provider-runner.d.ts +3 -3
  88. package/dist/server/server/agent/providers/provider-runner.d.ts.map +1 -1
  89. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js.map +1 -1
  90. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +7 -7
  91. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
  92. package/dist/server/server/agent/providers/tool-call-detail-primitives.js +12 -18
  93. package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -1
  94. package/dist/server/server/agent/stt-manager.d.ts +1 -0
  95. package/dist/server/server/agent/stt-manager.d.ts.map +1 -1
  96. package/dist/server/server/agent/stt-manager.js +3 -0
  97. package/dist/server/server/agent/stt-manager.js.map +1 -1
  98. package/dist/server/server/agent/tool-name-normalization.js.map +1 -1
  99. package/dist/server/server/agent/tts-manager.js.map +1 -1
  100. package/dist/server/server/bootstrap.d.ts +3 -0
  101. package/dist/server/server/bootstrap.d.ts.map +1 -1
  102. package/dist/server/server/bootstrap.js +3 -9
  103. package/dist/server/server/bootstrap.js.map +1 -1
  104. package/dist/server/server/chat/chat-rpc-schemas.d.ts +42 -42
  105. package/dist/server/server/chat/chat-types.d.ts +6 -6
  106. package/dist/server/server/config.d.ts +1 -0
  107. package/dist/server/server/config.d.ts.map +1 -1
  108. package/dist/server/server/config.js +27 -2
  109. package/dist/server/server/config.js.map +1 -1
  110. package/dist/server/server/connection-offer.d.ts +1 -0
  111. package/dist/server/server/connection-offer.d.ts.map +1 -1
  112. package/dist/server/server/daemon-config-store.d.ts.map +1 -1
  113. package/dist/server/server/daemon-config-store.js +2 -6
  114. package/dist/server/server/daemon-config-store.js.map +1 -1
  115. package/dist/server/server/daemon-keypair.js.map +1 -1
  116. package/dist/server/server/daemon-worker.d.ts +2 -0
  117. package/dist/server/server/daemon-worker.d.ts.map +1 -0
  118. package/dist/server/server/{index.js → daemon-worker.js} +13 -41
  119. package/dist/server/server/daemon-worker.js.map +1 -0
  120. package/dist/server/server/editor-targets.js.map +1 -1
  121. package/dist/server/server/json-utils.js.map +1 -1
  122. package/dist/server/server/logger.d.ts +2 -6
  123. package/dist/server/server/logger.d.ts.map +1 -1
  124. package/dist/server/server/logger.js +28 -118
  125. package/dist/server/server/logger.js.map +1 -1
  126. package/dist/server/server/loop/rpc-schemas.d.ts +340 -272
  127. package/dist/server/server/loop/rpc-schemas.d.ts.map +1 -1
  128. package/dist/server/server/loop/rpc-schemas.js +4 -0
  129. package/dist/server/server/loop/rpc-schemas.js.map +1 -1
  130. package/dist/server/server/loop-service.d.ts +58 -50
  131. package/dist/server/server/loop-service.d.ts.map +1 -1
  132. package/dist/server/server/loop-service.js +11 -2
  133. package/dist/server/server/loop-service.js.map +1 -1
  134. package/dist/server/server/package-version.d.ts +12 -0
  135. package/dist/server/server/package-version.d.ts.map +1 -1
  136. package/dist/server/server/package-version.js +13 -1
  137. package/dist/server/server/package-version.js.map +1 -1
  138. package/dist/server/server/pairing-offer.d.ts +1 -0
  139. package/dist/server/server/pairing-offer.d.ts.map +1 -1
  140. package/dist/server/server/pairing-offer.js +2 -1
  141. package/dist/server/server/pairing-offer.js.map +1 -1
  142. package/dist/server/server/pairing-qr.js +1 -1
  143. package/dist/server/server/pairing-qr.js.map +1 -1
  144. package/dist/server/server/paseo-env.d.ts +7 -3
  145. package/dist/server/server/paseo-env.d.ts.map +1 -1
  146. package/dist/server/server/paseo-env.js +16 -33
  147. package/dist/server/server/paseo-env.js.map +1 -1
  148. package/dist/server/server/persisted-config.d.ts +27 -16
  149. package/dist/server/server/persisted-config.d.ts.map +1 -1
  150. package/dist/server/server/persisted-config.js +3 -2
  151. package/dist/server/server/persisted-config.js.map +1 -1
  152. package/dist/server/server/persistence-hooks.js.map +1 -1
  153. package/dist/server/server/pid-lock.d.ts +21 -4
  154. package/dist/server/server/pid-lock.d.ts.map +1 -1
  155. package/dist/server/server/pid-lock.js +30 -8
  156. package/dist/server/server/pid-lock.js.map +1 -1
  157. package/dist/server/server/relay-transport.d.ts +2 -1
  158. package/dist/server/server/relay-transport.d.ts.map +1 -1
  159. package/dist/server/server/relay-transport.js +8 -5
  160. package/dist/server/server/relay-transport.js.map +1 -1
  161. package/dist/server/server/schedule/rpc-schemas.d.ts +1188 -52
  162. package/dist/server/server/schedule/rpc-schemas.d.ts.map +1 -1
  163. package/dist/server/server/schedule/rpc-schemas.js +39 -0
  164. package/dist/server/server/schedule/rpc-schemas.js.map +1 -1
  165. package/dist/server/server/schedule/service.d.ts +3 -1
  166. package/dist/server/server/schedule/service.d.ts.map +1 -1
  167. package/dist/server/server/schedule/service.js +92 -5
  168. package/dist/server/server/schedule/service.js.map +1 -1
  169. package/dist/server/server/schedule/types.d.ts +28 -12
  170. package/dist/server/server/schedule/types.d.ts.map +1 -1
  171. package/dist/server/server/script-health-monitor.js.map +1 -1
  172. package/dist/server/server/session.d.ts +3 -4
  173. package/dist/server/server/session.d.ts.map +1 -1
  174. package/dist/server/server/session.js +160 -120
  175. package/dist/server/server/session.js.map +1 -1
  176. package/dist/server/server/speech/audio.js.map +1 -1
  177. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts.map +1 -1
  178. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js +52 -52
  179. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +1 -1
  180. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts.map +1 -1
  181. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +9 -3
  182. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js.map +1 -1
  183. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts.map +1 -1
  184. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +12 -10
  185. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js.map +1 -1
  186. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js +2 -2
  187. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +1 -1
  188. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js +1 -1
  189. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js.map +1 -1
  190. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js.map +1 -1
  191. package/dist/server/server/voice/voice-turn-controller.d.ts +16 -13
  192. package/dist/server/server/voice/voice-turn-controller.d.ts.map +1 -1
  193. package/dist/server/server/voice/voice-turn-controller.js +303 -71
  194. package/dist/server/server/voice/voice-turn-controller.js.map +1 -1
  195. package/dist/server/server/voice-config.js +1 -1
  196. package/dist/server/server/voice-config.js.map +1 -1
  197. package/dist/server/server/websocket-server.js.map +1 -1
  198. package/dist/server/server/workspace-directory.d.ts.map +1 -1
  199. package/dist/server/server/workspace-directory.js +4 -2
  200. package/dist/server/server/workspace-directory.js.map +1 -1
  201. package/dist/server/server/workspace-git-metadata.d.ts.map +1 -1
  202. package/dist/server/server/workspace-git-metadata.js +12 -5
  203. package/dist/server/server/workspace-git-metadata.js.map +1 -1
  204. package/dist/server/server/workspace-git-service.d.ts +2 -0
  205. package/dist/server/server/workspace-git-service.d.ts.map +1 -1
  206. package/dist/server/server/workspace-git-service.js +49 -1
  207. package/dist/server/server/workspace-git-service.js.map +1 -1
  208. package/dist/server/server/workspace-registry-model.d.ts.map +1 -1
  209. package/dist/server/server/workspace-registry-model.js +10 -3
  210. package/dist/server/server/workspace-registry-model.js.map +1 -1
  211. package/dist/server/server/worktree-session.js +1 -1
  212. package/dist/server/server/worktree-session.js.map +1 -1
  213. package/dist/server/services/github-service.d.ts.map +1 -1
  214. package/dist/server/services/github-service.js +9 -2
  215. package/dist/server/services/github-service.js.map +1 -1
  216. package/dist/server/shared/connection-offer.d.ts +10 -0
  217. package/dist/server/shared/connection-offer.d.ts.map +1 -1
  218. package/dist/server/shared/connection-offer.js +1 -0
  219. package/dist/server/shared/connection-offer.js.map +1 -1
  220. package/dist/server/shared/daemon-endpoints.d.ts +4 -0
  221. package/dist/server/shared/daemon-endpoints.d.ts.map +1 -1
  222. package/dist/server/shared/daemon-endpoints.js +6 -1
  223. package/dist/server/shared/daemon-endpoints.js.map +1 -1
  224. package/dist/server/shared/error-utils.d.ts +11 -0
  225. package/dist/server/shared/error-utils.d.ts.map +1 -0
  226. package/dist/server/shared/error-utils.js +27 -0
  227. package/dist/server/shared/error-utils.js.map +1 -0
  228. package/dist/server/shared/messages.d.ts +8669 -4459
  229. package/dist/server/shared/messages.d.ts.map +1 -1
  230. package/dist/server/shared/messages.js +5 -1
  231. package/dist/server/shared/messages.js.map +1 -1
  232. package/dist/server/shared/tool-call-display.d.ts.map +1 -1
  233. package/dist/server/shared/tool-call-display.js +2 -0
  234. package/dist/server/shared/tool-call-display.js.map +1 -1
  235. package/dist/server/terminal/terminal-capture.d.ts +12 -0
  236. package/dist/server/terminal/terminal-capture.d.ts.map +1 -0
  237. package/dist/server/terminal/terminal-capture.js +43 -0
  238. package/dist/server/terminal/terminal-capture.js.map +1 -0
  239. package/dist/server/terminal/terminal-manager-factory.d.ts +2 -6
  240. package/dist/server/terminal/terminal-manager-factory.d.ts.map +1 -1
  241. package/dist/server/terminal/terminal-manager-factory.js +2 -10
  242. package/dist/server/terminal/terminal-manager-factory.js.map +1 -1
  243. package/dist/server/terminal/terminal-manager.d.ts +2 -1
  244. package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
  245. package/dist/server/terminal/terminal-manager.js +2 -1
  246. package/dist/server/terminal/terminal-manager.js.map +1 -1
  247. package/dist/server/terminal/terminal-output-coalescer.js.map +1 -1
  248. package/dist/server/terminal/terminal-session-controller.d.ts.map +1 -1
  249. package/dist/server/terminal/terminal-session-controller.js +2 -0
  250. package/dist/server/terminal/terminal-session-controller.js.map +1 -1
  251. package/dist/server/terminal/terminal-worker-process.js +1 -1
  252. package/dist/server/terminal/terminal-worker-process.js.map +1 -1
  253. package/dist/server/terminal/terminal-worker-protocol.d.ts +1 -1
  254. package/dist/server/terminal/terminal-worker-protocol.d.ts.map +1 -1
  255. package/dist/server/terminal/terminal.d.ts +0 -10
  256. package/dist/server/terminal/terminal.d.ts.map +1 -1
  257. package/dist/server/terminal/terminal.js +53 -49
  258. package/dist/server/terminal/terminal.js.map +1 -1
  259. package/dist/server/terminal/worker-terminal-manager.js.map +1 -1
  260. package/dist/server/utils/checkout-git.d.ts.map +1 -1
  261. package/dist/server/utils/checkout-git.js +67 -11
  262. package/dist/server/utils/checkout-git.js.map +1 -1
  263. package/dist/server/utils/directory-suggestions.js.map +1 -1
  264. package/dist/server/utils/executable.d.ts +2 -1
  265. package/dist/server/utils/executable.d.ts.map +1 -1
  266. package/dist/server/utils/executable.js +50 -51
  267. package/dist/server/utils/executable.js.map +1 -1
  268. package/dist/server/utils/paseo-config-file.d.ts +1 -1
  269. package/dist/server/utils/paseo-config-file.d.ts.map +1 -1
  270. package/dist/server/utils/spawn.d.ts +2 -0
  271. package/dist/server/utils/spawn.d.ts.map +1 -1
  272. package/dist/server/utils/spawn.js +2 -1
  273. package/dist/server/utils/spawn.js.map +1 -1
  274. package/dist/server/utils/tree-kill.d.ts +18 -0
  275. package/dist/server/utils/tree-kill.d.ts.map +1 -0
  276. package/dist/server/utils/{process-tree.js → tree-kill.js} +14 -33
  277. package/dist/server/utils/tree-kill.js.map +1 -0
  278. package/dist/server/utils/worktree.d.ts.map +1 -1
  279. package/dist/server/utils/worktree.js +18 -43
  280. package/dist/server/utils/worktree.js.map +1 -1
  281. package/dist/src/server/agent/agent-sdk-types.js +12 -0
  282. package/dist/src/server/agent/agent-sdk-types.js.map +1 -0
  283. package/dist/src/server/agent/agent-title-limits.js +3 -0
  284. package/dist/src/server/agent/agent-title-limits.js.map +1 -0
  285. package/dist/src/server/agent/provider-launch-config.js +189 -0
  286. package/dist/src/server/agent/provider-launch-config.js.map +1 -0
  287. package/dist/src/server/agent/provider-manifest.js +197 -0
  288. package/dist/src/server/agent/provider-manifest.js.map +1 -0
  289. package/dist/src/server/chat/chat-rpc-schemas.js +103 -0
  290. package/dist/src/server/chat/chat-rpc-schemas.js.map +1 -0
  291. package/dist/src/server/chat/chat-types.js +22 -0
  292. package/dist/src/server/chat/chat-types.js.map +1 -0
  293. package/dist/src/server/loop/rpc-schemas.js +163 -0
  294. package/dist/src/server/loop/rpc-schemas.js.map +1 -0
  295. package/dist/src/server/paseo-env.js +53 -0
  296. package/dist/src/server/paseo-env.js.map +1 -0
  297. package/dist/src/server/persisted-config.js +363 -0
  298. package/dist/src/server/persisted-config.js.map +1 -0
  299. package/dist/src/server/pid-lock.js +30 -8
  300. package/dist/src/server/pid-lock.js.map +1 -1
  301. package/dist/src/server/schedule/rpc-schemas.js +151 -0
  302. package/dist/src/server/schedule/rpc-schemas.js.map +1 -0
  303. package/dist/src/server/schedule/types.js +73 -0
  304. package/dist/src/server/schedule/types.js.map +1 -0
  305. package/dist/src/shared/agent-lifecycle.js +8 -0
  306. package/dist/src/shared/agent-lifecycle.js.map +1 -0
  307. package/dist/src/shared/client-capabilities.js +4 -0
  308. package/dist/src/shared/client-capabilities.js.map +1 -0
  309. package/dist/src/shared/literal-union.js +2 -0
  310. package/dist/src/shared/literal-union.js.map +1 -0
  311. package/dist/src/shared/messages.js +3026 -0
  312. package/dist/src/shared/messages.js.map +1 -0
  313. package/dist/src/utils/executable.js +113 -0
  314. package/dist/src/utils/executable.js.map +1 -0
  315. package/dist/src/utils/paseo-config-schema.js +60 -0
  316. package/dist/src/utils/paseo-config-schema.js.map +1 -0
  317. package/dist/src/utils/spawn.js +71 -0
  318. package/dist/src/utils/spawn.js.map +1 -0
  319. package/dist/src/utils/windows-command.js +41 -0
  320. package/dist/src/utils/windows-command.js.map +1 -0
  321. package/package.json +7 -6
  322. package/dist/server/server/agent/providers/claude/claude-models.d.ts.map +0 -1
  323. package/dist/server/server/agent/providers/claude/claude-models.js.map +0 -1
  324. package/dist/server/server/agent/providers/claude-agent.d.ts.map +0 -1
  325. package/dist/server/server/agent/providers/claude-agent.js.map +0 -1
  326. package/dist/server/server/index.d.ts +0 -2
  327. package/dist/server/server/index.d.ts.map +0 -1
  328. package/dist/server/server/index.js.map +0 -1
  329. package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.d.ts +0 -16
  330. package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.d.ts.map +0 -1
  331. package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.js +0 -35
  332. package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.js.map +0 -1
  333. package/dist/server/utils/process-tree.d.ts +0 -25
  334. package/dist/server/utils/process-tree.d.ts.map +0 -1
  335. package/dist/server/utils/process-tree.js.map +0 -1
@@ -3,22 +3,79 @@ import fs from "node:fs";
3
3
  import { promises } from "node:fs";
4
4
  import os from "node:os";
5
5
  import path from "node:path";
6
- import { query, } from "@anthropic-ai/claude-agent-sdk";
7
- import { mapClaudeCanceledToolCall, mapClaudeCompletedToolCall, mapClaudeFailedToolCall, mapClaudeRunningToolCall, } from "./claude/tool-call-mapper.js";
8
- import { mapTaskNotificationSystemRecordToToolCall, mapTaskNotificationUserContentToToolCall, } from "./claude/task-notification-tool-call.js";
9
- import { getClaudeModels, normalizeClaudeRuntimeModelId } from "./claude/claude-models.js";
10
- import { parsePartialJsonObject } from "./claude/partial-json.js";
11
- import { ClaudeSidechainTracker } from "./claude/sidechain-tracker.js";
12
- import { formatDiagnosticStatus, formatProviderDiagnostic, formatProviderDiagnosticError, toDiagnosticErrorMessage, } from "./diagnostic-utils.js";
13
- import { appendOrReplaceGrowingAssistantMessage, runProviderTurn } from "./provider-runner.js";
14
- import { renderPromptAttachmentAsText } from "../prompt-attachments.js";
15
- import { createProviderEnv, createProviderEnvSpec, } from "../provider-launch-config.js";
16
- import { findExecutable, isCommandAvailable } from "../../../utils/executable.js";
17
- import { withTimeout } from "../../../utils/promise-timeout.js";
18
- import { execCommand, spawnProcess } from "../../../utils/spawn.js";
19
- import { getOrchestratorModeInstructions } from "../orchestrator-instructions.js";
6
+ import { mapClaudeCanceledToolCall, mapClaudeCompletedToolCall, mapClaudeFailedToolCall, mapClaudeRunningToolCall, } from "./tool-call-mapper.js";
7
+ import { mapTaskNotificationSystemRecordToToolCall, mapTaskNotificationUserContentToToolCall, } from "./task-notification-tool-call.js";
8
+ import { getClaudeModels, normalizeClaudeRuntimeModelId } from "./models.js";
9
+ import { parsePartialJsonObject } from "./partial-json.js";
10
+ import { ClaudeSidechainTracker } from "./sidechain-tracker.js";
11
+ import { formatDiagnosticStatus, formatProviderDiagnostic, formatProviderDiagnosticError, toDiagnosticErrorMessage, } from "../diagnostic-utils.js";
12
+ import { appendOrReplaceGrowingAssistantMessage, runProviderTurn } from "../provider-runner.js";
13
+ import { renderPromptAttachmentAsText } from "../../prompt-attachments.js";
14
+ import { claudeQuery } from "./query.js";
15
+ import { createProviderEnv, createProviderEnvSpec, } from "../../provider-launch-config.js";
16
+ import { findExecutable, isCommandAvailable } from "../../../../utils/executable.js";
17
+ import { withTimeout } from "../../../../utils/promise-timeout.js";
18
+ import { execCommand } from "../../../../utils/spawn.js";
19
+ import { getOrchestratorModeInstructions } from "../../orchestrator-instructions.js";
20
20
  const fsPromises = promises;
21
21
  const CLAUDE_SETTING_SOURCES = ["user", "project"];
22
+ function readNonEmptyString(value) {
23
+ return typeof value === "string" && value.trim().length > 0 ? value : null;
24
+ }
25
+ export function normalizeClaudeAskUserQuestionUpdatedInput(updatedInput, fallbackInput) {
26
+ const fallback = isMetadata(fallbackInput) ? fallbackInput : {};
27
+ const base = isMetadata(updatedInput) ? updatedInput : {};
28
+ // Paseo's shared question UI serializes answers by question header, but Claude's
29
+ // AskUserQuestion tool expects answer keys to match the full question text. Merge
30
+ // the original request payload back in so provider callbacks that only return
31
+ // `{ answers }` still satisfy Claude's full tool input schema.
32
+ const merged = { ...fallback, ...base };
33
+ const questions = (Array.isArray(base.questions) ? base.questions : null) ??
34
+ (Array.isArray(fallback.questions) ? fallback.questions : null);
35
+ const answers = isMetadata(base.answers) ? base.answers : null;
36
+ if (!questions || !answers) {
37
+ return merged;
38
+ }
39
+ const normalizedAnswers = {};
40
+ for (const item of questions) {
41
+ const question = isMetadata(item) ? item : null;
42
+ if (!question) {
43
+ continue;
44
+ }
45
+ const questionText = readNonEmptyString(question.question);
46
+ if (!questionText) {
47
+ continue;
48
+ }
49
+ const header = readNonEmptyString(question.header);
50
+ const answer = readNonEmptyString(answers[questionText]) ??
51
+ (header ? readNonEmptyString(answers[header]) : null);
52
+ if (answer) {
53
+ normalizedAnswers[questionText] = answer;
54
+ }
55
+ }
56
+ if (Object.keys(normalizedAnswers).length === 0) {
57
+ return merged;
58
+ }
59
+ return {
60
+ ...merged,
61
+ answers: normalizedAnswers,
62
+ };
63
+ }
64
+ function isObjectRecord(value) {
65
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
66
+ }
67
+ function toObjectRecord(value) {
68
+ return isObjectRecord(value) ? value : undefined;
69
+ }
70
+ function isUnknownArray(value) {
71
+ return Array.isArray(value);
72
+ }
73
+ function isImageMimeType(value) {
74
+ return (value === "image/jpeg" ||
75
+ value === "image/png" ||
76
+ value === "image/gif" ||
77
+ value === "image/webp");
78
+ }
22
79
  const CLAUDE_CAPABILITIES = {
23
80
  supportsStreaming: true,
24
81
  supportsSessionPersistence: true,
@@ -92,60 +149,6 @@ function extractSessionIdRaw(msg) {
92
149
  return msg.session.id;
93
150
  return "";
94
151
  }
95
- function resolveClaudeSpawnCommand(spawnOptions, runtimeSettings) {
96
- const commandConfig = runtimeSettings?.command;
97
- if (!commandConfig || commandConfig.mode === "default") {
98
- return {
99
- command: spawnOptions.command,
100
- args: [...spawnOptions.args],
101
- };
102
- }
103
- if (commandConfig.mode === "append") {
104
- return {
105
- command: spawnOptions.command,
106
- args: [...spawnOptions.args, ...(commandConfig.args ?? [])],
107
- };
108
- }
109
- return {
110
- command: commandConfig.argv[0],
111
- args: [...commandConfig.argv.slice(1), ...spawnOptions.args],
112
- };
113
- }
114
- function applyRuntimeSettingsToClaudeOptions(options, runtimeSettings, launchEnv) {
115
- return {
116
- ...options,
117
- spawnClaudeCodeProcess: (spawnOptions) => {
118
- const resolved = resolveClaudeSpawnCommand(spawnOptions, runtimeSettings);
119
- // When the SDK passes a default JS runtime ("node"/"bun"), replace it with
120
- // process.execPath — the actual node binary running the daemon. This avoids
121
- // PATH lookup failures in the managed runtime bundle.
122
- // When the SDK passes a native binary path (from pathToClaudeCodeExecutable)
123
- // or the user overrides the command via runtime settings, use that directly.
124
- const isDefaultRuntime = resolved.command === "node" || resolved.command === "bun";
125
- const command = isDefaultRuntime ? process.execPath : resolved.command;
126
- const child = spawnProcess(command, resolved.args, {
127
- cwd: spawnOptions.cwd,
128
- ...createProviderEnvSpec({
129
- baseEnv: spawnOptions.env,
130
- runtimeSettings,
131
- overlays: [launchEnv],
132
- }),
133
- signal: spawnOptions.signal,
134
- stdio: ["pipe", "pipe", "pipe"],
135
- // Bypass cmd.exe on Windows: the SDK passes --mcp-config with inline JSON
136
- // containing double quotes, which cmd.exe mangles (strips quotes, breaks parsing).
137
- // The command is always a resolved binary path, so shell routing is unnecessary.
138
- shell: false,
139
- });
140
- if (typeof options.stderr === "function") {
141
- child.stderr?.on("data", (chunk) => {
142
- options.stderr?.(chunk.toString());
143
- });
144
- }
145
- return child;
146
- },
147
- };
148
- }
149
152
  function isClaudeThinkingEffort(value) {
150
153
  return (value === "low" ||
151
154
  value === "medium" ||
@@ -168,11 +171,11 @@ function summarizeClaudeOptionsForLog(options) {
168
171
  if (typeof systemPromptRaw === "string") {
169
172
  return { mode: "string", preset: null };
170
173
  }
171
- const prompt = systemPromptRaw;
172
- const promptType = typeof prompt.type === "string" ? prompt.type : "custom";
174
+ const prompt = toObjectRecord(systemPromptRaw);
175
+ const promptType = typeof prompt?.type === "string" ? prompt.type : "custom";
173
176
  return {
174
177
  mode: promptType === "preset" ? "preset" : "custom",
175
- preset: typeof prompt.preset === "string" && prompt.preset.length > 0 ? prompt.preset : null,
178
+ preset: typeof prompt?.preset === "string" && prompt.preset.length > 0 ? prompt.preset : null,
176
179
  };
177
180
  })();
178
181
  const mcpServerNames = options.mcpServers ? Object.keys(options.mcpServers).sort() : [];
@@ -234,7 +237,11 @@ function normalizeForDeterministicString(value, seen) {
234
237
  return "[circular]";
235
238
  }
236
239
  seen.add(objectValue);
237
- const record = value;
240
+ const record = toObjectRecord(value);
241
+ if (!record) {
242
+ seen.delete(objectValue);
243
+ return "[invalid]";
244
+ }
238
245
  const normalized = {};
239
246
  for (const key of Object.keys(record).sort()) {
240
247
  normalized[key] = normalizeForDeterministicString(record[key], seen);
@@ -242,7 +249,10 @@ function normalizeForDeterministicString(value, seen) {
242
249
  seen.delete(objectValue);
243
250
  return normalized;
244
251
  }
245
- return String(value);
252
+ if (typeof value === "number" || typeof value === "boolean") {
253
+ return String(value);
254
+ }
255
+ return "[unsupported]";
246
256
  }
247
257
  function deterministicStringify(value) {
248
258
  if (typeof value === "undefined") {
@@ -256,12 +266,13 @@ function deterministicStringify(value) {
256
266
  return JSON.stringify(normalized);
257
267
  }
258
268
  catch {
259
- try {
260
- return String(value);
269
+ if (typeof value === "string") {
270
+ return value;
261
271
  }
262
- catch {
263
- return "[unserializable]";
272
+ if (typeof value === "number" || typeof value === "boolean") {
273
+ return String(value);
264
274
  }
275
+ return "[unserializable]";
265
276
  }
266
277
  }
267
278
  function coerceToolResultContentToString(content) {
@@ -302,20 +313,21 @@ function collectClaudeTextContentParts(content) {
302
313
  const normalized = normalizeClaudeTranscriptText(content);
303
314
  return normalized ? [normalized] : [];
304
315
  }
305
- if (!Array.isArray(content)) {
316
+ if (!isUnknownArray(content)) {
306
317
  return [];
307
318
  }
308
319
  const parts = [];
309
320
  for (const block of content) {
310
- if (!block || typeof block !== "object") {
321
+ const blockRecord = toObjectRecord(block);
322
+ if (!blockRecord) {
311
323
  continue;
312
324
  }
313
- const text = normalizeClaudeTranscriptText(block.text);
325
+ const text = normalizeClaudeTranscriptText(blockRecord.text);
314
326
  if (text) {
315
327
  parts.push(text);
316
328
  continue;
317
329
  }
318
- const input = normalizeClaudeTranscriptText(block.input);
330
+ const input = normalizeClaudeTranscriptText(blockRecord.input);
319
331
  if (input) {
320
332
  parts.push(input);
321
333
  }
@@ -495,6 +507,7 @@ function toClaudeSdkMcpConfig(config) {
495
507
  headers: config.headers,
496
508
  };
497
509
  }
510
+ throw new Error("Unhandled MCP server config type");
498
511
  }
499
512
  function isClaudeContentChunk(value) {
500
513
  return isMetadata(value) && typeof value.type === "string";
@@ -585,7 +598,7 @@ class TimelineAssembler {
585
598
  return this.applyAbsoluteFragments(state, fragments);
586
599
  }
587
600
  consumeStreamEvent(message, runId, messageIdHint) {
588
- const event = message.event;
601
+ const event = toObjectRecord(message.event) ?? {};
589
602
  const eventType = readTrimmedString(event.type);
590
603
  const streamEventMessageId = this.readMessageIdFromStreamEvent(event) ?? messageIdHint;
591
604
  if (eventType === "message_start") {
@@ -768,19 +781,20 @@ class TimelineAssembler {
768
781
  return fragments;
769
782
  }
770
783
  readMessageIdFromAssistantMessage(message) {
771
- const candidate = message;
772
- return (readTrimmedString(candidate.message_id) ?? readTrimmedString(candidate.message?.id) ?? null);
784
+ const candidate = toObjectRecord(message);
785
+ const messageContainer = toObjectRecord(candidate?.message);
786
+ return (readTrimmedString(candidate?.message_id) ?? readTrimmedString(messageContainer?.id) ?? null);
773
787
  }
774
788
  readMessageIdFromStreamEvent(event) {
775
- const message = event.message;
776
- return readTrimmedString(event.message_id) ?? readTrimmedString(message?.id) ?? null;
789
+ const messageContainer = toObjectRecord(event.message);
790
+ return readTrimmedString(event.message_id) ?? readTrimmedString(messageContainer?.id) ?? null;
777
791
  }
778
792
  }
779
793
  function isSyntheticUserEntry(entry) {
780
- if (!entry || typeof entry !== "object") {
794
+ const candidate = toObjectRecord(entry);
795
+ if (!candidate) {
781
796
  return false;
782
797
  }
783
- const candidate = entry;
784
798
  return candidate.isSynthetic === true || candidate.isMeta === true;
785
799
  }
786
800
  function firstTrimmedString(sources) {
@@ -793,11 +807,11 @@ function firstTrimmedString(sources) {
793
807
  return null;
794
808
  }
795
809
  export function readEventIdentifiers(message) {
796
- const root = message;
810
+ const root = toObjectRecord(message) ?? {};
797
811
  const messageType = readTrimmedString(root.type);
798
- const streamEvent = root.event;
799
- const streamEventMessage = streamEvent?.message;
800
- const messageContainer = root.message;
812
+ const streamEvent = toObjectRecord(root.event);
813
+ const streamEventMessage = toObjectRecord(streamEvent?.message);
814
+ const messageContainer = toObjectRecord(root.message);
801
815
  const messageIdFromUuid = messageType === "user" ? root.uuid : undefined;
802
816
  return {
803
817
  taskId: firstTrimmedString([
@@ -831,7 +845,8 @@ export class ClaudeAgentClient {
831
845
  this.defaults = options.defaults;
832
846
  this.logger = options.logger.child({ module: "agent", provider: "claude" });
833
847
  this.runtimeSettings = options.runtimeSettings;
834
- this.queryFactory = options.queryFactory ?? query;
848
+ this.queryFactory = options.queryFactory;
849
+ this.resolveBinary = options.resolveBinary ?? (() => resolveClaudeBinary(this.runtimeSettings));
835
850
  }
836
851
  async createSession(config, launchContext, options) {
837
852
  const claudeConfig = this.assertConfig(config);
@@ -842,6 +857,7 @@ export class ClaudeAgentClient {
842
857
  persistSession: options?.persistSession,
843
858
  logger: this.logger,
844
859
  queryFactory: this.queryFactory,
860
+ resolveBinary: this.resolveBinary,
845
861
  });
846
862
  }
847
863
  async resumeSession(handle, overrides, launchContext) {
@@ -863,6 +879,7 @@ export class ClaudeAgentClient {
863
879
  launchEnv: launchContext?.env,
864
880
  logger: this.logger,
865
881
  queryFactory: this.queryFactory,
882
+ resolveBinary: this.resolveBinary,
866
883
  });
867
884
  }
868
885
  async listModels(_options) {
@@ -887,9 +904,7 @@ export class ClaudeAgentClient {
887
904
  if (command?.mode === "replace") {
888
905
  return await isCommandAvailable(command.argv[0]);
889
906
  }
890
- // Default mode uses @anthropic-ai/claude-agent-sdk's bundled cli.js run
891
- // via process.execPath. No external `claude` binary is required.
892
- return true;
907
+ return await isCommandAvailable("claude");
893
908
  }
894
909
  async getDiagnostic() {
895
910
  try {
@@ -938,6 +953,20 @@ export class ClaudeAgentClient {
938
953
  return { ...config, provider: "claude" };
939
954
  }
940
955
  }
956
+ async function resolveClaudeBinary(runtimeSettings) {
957
+ const command = runtimeSettings?.command;
958
+ if (command?.mode === "replace") {
959
+ const foundOverride = await findExecutable(command.argv[0]);
960
+ if (foundOverride) {
961
+ return foundOverride;
962
+ }
963
+ }
964
+ const found = await findExecutable("claude");
965
+ if (found) {
966
+ return found;
967
+ }
968
+ throw new Error("Claude binary not found. Install Claude Code (https://github.com/anthropics/claude-code) and ensure it is available in your shell PATH.");
969
+ }
941
970
  async function resolveClaudeVersion(runtimeSettings) {
942
971
  const command = runtimeSettings?.command;
943
972
  const envSpec = createProviderEnvSpec({ runtimeSettings });
@@ -970,11 +999,11 @@ async function resolveClaudeAuth(runtimeSettings) {
970
999
  });
971
1000
  }
972
1001
  catch (error) {
973
- const err = error;
974
- return {
975
- stdout: err.stdout ?? "",
976
- stderr: err.stderr ?? err.message ?? "",
977
- };
1002
+ const err = toObjectRecord(error);
1003
+ const stdout = typeof err?.stdout === "string" ? err.stdout : "";
1004
+ const stderr = typeof err?.stderr === "string" ? err.stderr : "";
1005
+ const fallbackMessage = typeof err?.message === "string" ? err.message : "";
1006
+ return { stdout, stderr: stderr || fallbackMessage };
978
1007
  }
979
1008
  };
980
1009
  try {
@@ -1000,15 +1029,17 @@ async function resolveClaudeAuth(runtimeSettings) {
1000
1029
  }
1001
1030
  }
1002
1031
  function extractContextWindowSize(modelUsage) {
1003
- if (!modelUsage || typeof modelUsage !== "object") {
1032
+ const usageRecord = toObjectRecord(modelUsage);
1033
+ if (!usageRecord) {
1004
1034
  return undefined;
1005
1035
  }
1006
1036
  let maxContextWindow;
1007
- for (const value of Object.values(modelUsage)) {
1008
- if (!value || typeof value !== "object") {
1037
+ for (const value of Object.values(usageRecord)) {
1038
+ const valueRecord = toObjectRecord(value);
1039
+ if (!valueRecord) {
1009
1040
  continue;
1010
1041
  }
1011
- const contextWindow = value.contextWindow;
1042
+ const contextWindow = valueRecord.contextWindow;
1012
1043
  if (typeof contextWindow !== "number" ||
1013
1044
  !Number.isFinite(contextWindow) ||
1014
1045
  contextWindow <= 0) {
@@ -1035,8 +1066,8 @@ function readUsageFromTaskNotification(message) {
1035
1066
  return readUsageTotalTokens(message.usage);
1036
1067
  }
1037
1068
  function readStreamRequestInputTokens(event) {
1038
- const messageUsage = event.message?.usage;
1039
- if (!messageUsage || typeof messageUsage !== "object") {
1069
+ const messageUsage = toObjectRecord(toObjectRecord(event.message)?.usage);
1070
+ if (!messageUsage) {
1040
1071
  return undefined;
1041
1072
  }
1042
1073
  const usage = messageUsage;
@@ -1057,7 +1088,7 @@ function readStreamRequestInputTokens(event) {
1057
1088
  return inputTokens + cacheCreationInputTokens + cacheReadInputTokens;
1058
1089
  }
1059
1090
  function readStreamRequestOutputTokens(event) {
1060
- const outputTokens = event.usage?.output_tokens;
1091
+ const outputTokens = toObjectRecord(event.usage)?.output_tokens;
1061
1092
  if (typeof outputTokens !== "number" || !Number.isFinite(outputTokens) || outputTokens < 0) {
1062
1093
  return undefined;
1063
1094
  }
@@ -1175,7 +1206,8 @@ class ClaudeAgentSession {
1175
1206
  this.runtimeSettings = options.runtimeSettings;
1176
1207
  this.persistSession = options.persistSession;
1177
1208
  this.logger = options.logger;
1178
- this.queryFactory = options.queryFactory ?? query;
1209
+ this.queryFactory = options.queryFactory;
1210
+ this.resolveBinary = options.resolveBinary;
1179
1211
  const handle = options.handle;
1180
1212
  if (handle) {
1181
1213
  if (!handle.sessionId) {
@@ -1409,9 +1441,12 @@ class ClaudeAgentSession {
1409
1441
  },
1410
1442
  }));
1411
1443
  }
1444
+ const updatedInput = pending.request.kind === "question"
1445
+ ? normalizeClaudeAskUserQuestionUpdatedInput(response.updatedInput, pending.request.input ?? undefined)
1446
+ : (response.updatedInput ?? pending.request.input ?? {});
1412
1447
  const result = {
1413
1448
  behavior: "allow",
1414
- updatedInput: response.updatedInput ?? pending.request.input ?? {},
1449
+ updatedInput,
1415
1450
  updatedPermissions: this.normalizePermissionUpdates(response.updatedPermissions),
1416
1451
  };
1417
1452
  pending.resolve(result);
@@ -1700,7 +1735,11 @@ class ClaudeAgentSession {
1700
1735
  const options = await this.buildOptions();
1701
1736
  this.logger.debug({ options: summarizeClaudeOptionsForLog(options) }, "claude query");
1702
1737
  this.input = input;
1703
- this.query = this.queryFactory({ prompt: input.iterable, options });
1738
+ this.query = claudeQuery({ prompt: input.iterable, options }, {
1739
+ runtimeSettings: this.runtimeSettings,
1740
+ launchEnv: this.launchEnv,
1741
+ queryFactory: this.queryFactory,
1742
+ });
1704
1743
  // Do not kick off background control-plane queries here. Methods like
1705
1744
  // supportedCommands()/setPermissionMode() may execute immediately after
1706
1745
  // ensureQuery() (for listCommands()/setMode()), and sharing the same query
@@ -1727,12 +1766,7 @@ class ClaudeAgentSession {
1727
1766
  ? this.config.thinkingOptionId
1728
1767
  : undefined;
1729
1768
  if (thinkingOptionId && isClaudeThinkingEffort(thinkingOptionId)) {
1730
- // SDK 0.2.71 types `effort` as 'low' | 'medium' | 'high' | 'max'; Opus 4.7
1731
- // adds 'xhigh' which the binary accepts but the typings don't yet expose.
1732
- return {
1733
- thinking: { type: "adaptive" },
1734
- effort: thinkingOptionId,
1735
- };
1769
+ return { thinking: { type: "adaptive" }, effort: thinkingOptionId };
1736
1770
  }
1737
1771
  return { thinking: undefined, effort: undefined };
1738
1772
  }
@@ -1758,7 +1792,7 @@ class ClaudeAgentSession {
1758
1792
  this.launchEnv,
1759
1793
  ],
1760
1794
  });
1761
- const claudeBinary = await findExecutable("claude");
1795
+ const claudeBinary = await this.resolveBinary();
1762
1796
  this.logger.debug({
1763
1797
  claudeBinary,
1764
1798
  pathEnvKey: resolvePathEnvKey(),
@@ -1776,7 +1810,7 @@ class ClaudeAgentSession {
1776
1810
  allowDangerouslySkipPermissions: true,
1777
1811
  agents: this.defaults?.agents,
1778
1812
  canUseTool: this.handlePermissionRequest,
1779
- ...(claudeBinary ? { pathToClaudeCodeExecutable: claudeBinary } : {}),
1813
+ pathToClaudeCodeExecutable: claudeBinary,
1780
1814
  // Use Claude Code preset system prompt and load CLAUDE.md files
1781
1815
  // Append provider-agnostic system prompt and orchestrator instructions for agents.
1782
1816
  systemPrompt: {
@@ -1816,10 +1850,7 @@ class ClaudeAgentSession {
1816
1850
  ...this.runtimeSettings.disallowedTools,
1817
1851
  ];
1818
1852
  }
1819
- return this.applyRuntimeSettings(base);
1820
- }
1821
- applyRuntimeSettings(options) {
1822
- return applyRuntimeSettingsToClaudeOptions(options, this.runtimeSettings, this.launchEnv);
1853
+ return base;
1823
1854
  }
1824
1855
  normalizeMcpServers(servers) {
1825
1856
  const result = {};
@@ -1836,14 +1867,16 @@ class ClaudeAgentSession {
1836
1867
  content.push({ type: "text", text: chunk.text });
1837
1868
  }
1838
1869
  else if (chunk.type === "image") {
1839
- content.push({
1840
- type: "image",
1841
- source: {
1842
- type: "base64",
1843
- media_type: chunk.mimeType,
1844
- data: chunk.data,
1845
- },
1846
- });
1870
+ if (isImageMimeType(chunk.mimeType)) {
1871
+ content.push({
1872
+ type: "image",
1873
+ source: {
1874
+ type: "base64",
1875
+ media_type: chunk.mimeType,
1876
+ data: chunk.data,
1877
+ },
1878
+ });
1879
+ }
1847
1880
  }
1848
1881
  else {
1849
1882
  content.push({ type: "text", text: renderPromptAttachmentAsText(chunk) });
@@ -2062,7 +2095,7 @@ class ClaudeAgentSession {
2062
2095
  this.logger.trace({ err: error }, "Claude query pump exited unexpectedly");
2063
2096
  });
2064
2097
  this.queryPumpPromise = pump;
2065
- pump.finally(() => {
2098
+ void pump.finally(() => {
2066
2099
  if (this.queryPumpPromise === pump) {
2067
2100
  this.queryPumpPromise = null;
2068
2101
  }
@@ -2341,7 +2374,7 @@ class ClaudeAgentSession {
2341
2374
  return;
2342
2375
  }
2343
2376
  if (message.subtype === "status") {
2344
- const status = message.status;
2377
+ const status = toObjectRecord(message)?.status;
2345
2378
  if (status === "compacting") {
2346
2379
  this.compacting = true;
2347
2380
  events.push({
@@ -2367,6 +2400,16 @@ class ClaudeAgentSession {
2367
2400
  return;
2368
2401
  }
2369
2402
  if (message.subtype === "task_notification") {
2403
+ // TODO: subagent timelines are best-effort. Subagent task_notifications
2404
+ // arrive without parent_tool_use_id but with tool_use_id pointing at the
2405
+ // parent's Task call, so they slip past the sidechain router and pollute
2406
+ // the parent timeline. Drop them here; eventually thread them into the
2407
+ // parent Task tool call's sub_agent log instead.
2408
+ const taskUseId = message.tool_use_id;
2409
+ const cachedTool = taskUseId ? this.toolUseCache.get(taskUseId) : undefined;
2410
+ if (cachedTool?.name === "Task") {
2411
+ return;
2412
+ }
2370
2413
  const taskNotificationItem = mapTaskNotificationSystemRecordToToolCall(message);
2371
2414
  if (taskNotificationItem) {
2372
2415
  events.push({
@@ -2478,8 +2521,12 @@ class ClaudeAgentSession {
2478
2521
  };
2479
2522
  }
2480
2523
  captureSessionIdFromMessage(message) {
2481
- const msg = message;
2482
- const sessionId = extractSessionIdRaw(msg).trim();
2524
+ const msgRecord = toObjectRecord(message) ?? {};
2525
+ const sessionId = extractSessionIdRaw({
2526
+ session_id: msgRecord.session_id,
2527
+ sessionId: msgRecord.sessionId,
2528
+ session: isObjectRecord(msgRecord.session) ? { id: msgRecord.session.id } : null,
2529
+ }).trim();
2483
2530
  if (!sessionId) {
2484
2531
  return { threadStartedSessionId: null, notice: null };
2485
2532
  }
@@ -2507,8 +2554,12 @@ class ClaudeAgentSession {
2507
2554
  if (message.subtype !== "init") {
2508
2555
  return { threadStartedSessionId: null, notice: null };
2509
2556
  }
2510
- const msg = message;
2511
- const newSessionId = extractSessionIdRaw(msg).trim();
2557
+ const msgRecord = toObjectRecord(message) ?? {};
2558
+ const newSessionId = extractSessionIdRaw({
2559
+ session_id: msgRecord.session_id,
2560
+ sessionId: msgRecord.sessionId,
2561
+ session: isObjectRecord(msgRecord.session) ? { id: msgRecord.session.id } : null,
2562
+ }).trim();
2512
2563
  if (!newSessionId) {
2513
2564
  return { threadStartedSessionId: null, notice: null };
2514
2565
  }
@@ -2631,10 +2682,10 @@ class ClaudeAgentSession {
2631
2682
  };
2632
2683
  }
2633
2684
  trackStreamEventUsage(event) {
2634
- if (!event || typeof event !== "object") {
2685
+ const streamEvent = toObjectRecord(event);
2686
+ if (!streamEvent) {
2635
2687
  return null;
2636
2688
  }
2637
- const streamEvent = event;
2638
2689
  const eventType = readTrimmedString(streamEvent.type);
2639
2690
  if (eventType === "message_start") {
2640
2691
  const inputTokens = readStreamRequestInputTokens(streamEvent);
@@ -2748,7 +2799,12 @@ class ClaudeAgentSession {
2748
2799
  }
2749
2800
  let entry;
2750
2801
  try {
2751
- entry = JSON.parse(trimmed);
2802
+ const parsed = JSON.parse(trimmed);
2803
+ const record = toObjectRecord(parsed);
2804
+ if (!record) {
2805
+ return;
2806
+ }
2807
+ entry = record;
2752
2808
  }
2753
2809
  catch {
2754
2810
  return;
@@ -3289,12 +3345,20 @@ function hasToolLikeBlock(block) {
3289
3345
  return type.includes("tool");
3290
3346
  }
3291
3347
  function readCompactionMetadata(source) {
3292
- const candidates = [source.compact_metadata, source.compactMetadata, source.compactionMetadata];
3348
+ const sourceRecord = toObjectRecord(source);
3349
+ if (!sourceRecord) {
3350
+ return null;
3351
+ }
3352
+ const candidates = [
3353
+ sourceRecord.compact_metadata,
3354
+ sourceRecord.compactMetadata,
3355
+ sourceRecord.compactionMetadata,
3356
+ ];
3293
3357
  for (const candidate of candidates) {
3294
- if (!candidate || typeof candidate !== "object") {
3358
+ const metadata = toObjectRecord(candidate);
3359
+ if (!metadata) {
3295
3360
  continue;
3296
3361
  }
3297
- const metadata = candidate;
3298
3362
  const trigger = typeof metadata.trigger === "string" ? metadata.trigger : undefined;
3299
3363
  const preTokensRaw = metadata.preTokens ?? metadata.pre_tokens;
3300
3364
  const preTokens = typeof preTokensRaw === "number" ? preTokensRaw : undefined;
@@ -3484,10 +3548,10 @@ function isFinishedAccumulator(acc) {
3484
3548
  return Boolean(acc.sessionId && acc.cwd && acc.title);
3485
3549
  }
3486
3550
  function applyClaudeSessionEntryToAccumulator(entryRaw, acc) {
3487
- if (!entryRaw || typeof entryRaw !== "object") {
3551
+ const entry = toObjectRecord(entryRaw);
3552
+ if (!entry) {
3488
3553
  return;
3489
3554
  }
3490
- const entry = entryRaw;
3491
3555
  if (entry.isSidechain) {
3492
3556
  return;
3493
3557
  }
@@ -3571,10 +3635,10 @@ async function parseClaudeSessionDescriptor(filePath, mtime) {
3571
3635
  };
3572
3636
  }
3573
3637
  function extractClaudeUserText(messageRaw) {
3574
- if (!messageRaw || typeof messageRaw !== "object") {
3638
+ const message = toObjectRecord(messageRaw);
3639
+ if (!message) {
3575
3640
  return null;
3576
3641
  }
3577
- const message = messageRaw;
3578
3642
  if (typeof message.content === "string") {
3579
3643
  const normalized = message.content.trim();
3580
3644
  return normalized && !isClaudeTranscriptNoiseText(normalized) ? normalized : null;
@@ -3583,12 +3647,11 @@ function extractClaudeUserText(messageRaw) {
3583
3647
  const normalized = message.text.trim();
3584
3648
  return normalized && !isClaudeTranscriptNoiseText(normalized) ? normalized : null;
3585
3649
  }
3586
- if (Array.isArray(message.content)) {
3650
+ if (isUnknownArray(message.content)) {
3587
3651
  for (const block of message.content) {
3588
- if (block &&
3589
- typeof block === "object" &&
3590
- typeof block.text === "string") {
3591
- const normalized = block.text.trim();
3652
+ const blockRecord = toObjectRecord(block);
3653
+ if (blockRecord && typeof blockRecord.text === "string") {
3654
+ const normalized = blockRecord.text.trim();
3592
3655
  if (normalized && !isClaudeTranscriptNoiseText(normalized)) {
3593
3656
  return normalized;
3594
3657
  }
@@ -3597,4 +3660,4 @@ function extractClaudeUserText(messageRaw) {
3597
3660
  }
3598
3661
  return null;
3599
3662
  }
3600
- //# sourceMappingURL=claude-agent.js.map
3663
+ //# sourceMappingURL=agent.js.map