@getpaseo/server 0.1.69 → 0.1.71

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 (360) hide show
  1. package/dist/server/client/daemon-client-runtime-metrics.js.map +1 -1
  2. package/dist/server/client/daemon-client-websocket-transport.js.map +1 -1
  3. package/dist/server/client/daemon-client.d.ts +57 -4
  4. package/dist/server/client/daemon-client.d.ts.map +1 -1
  5. package/dist/server/client/daemon-client.js +78 -3
  6. package/dist/server/client/daemon-client.js.map +1 -1
  7. package/dist/server/server/agent/agent-manager.d.ts +25 -4
  8. package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
  9. package/dist/server/server/agent/agent-manager.js +231 -26
  10. package/dist/server/server/agent/agent-manager.js.map +1 -1
  11. package/dist/server/server/agent/agent-metadata-generator.d.ts +2 -0
  12. package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -1
  13. package/dist/server/server/agent/agent-metadata-generator.js +16 -7
  14. package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
  15. package/dist/server/server/agent/agent-projections.d.ts +6 -2
  16. package/dist/server/server/agent/agent-projections.d.ts.map +1 -1
  17. package/dist/server/server/agent/agent-projections.js +32 -0
  18. package/dist/server/server/agent/agent-projections.js.map +1 -1
  19. package/dist/server/server/agent/agent-prompt.d.ts +72 -0
  20. package/dist/server/server/agent/agent-prompt.d.ts.map +1 -0
  21. package/dist/server/server/agent/agent-prompt.js +169 -0
  22. package/dist/server/server/agent/agent-prompt.js.map +1 -0
  23. package/dist/server/server/agent/agent-response-loop.js.map +1 -1
  24. package/dist/server/server/agent/agent-sdk-types.d.ts +27 -2
  25. package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
  26. package/dist/server/server/agent/agent-stream-coalescer.d.ts +1 -1
  27. package/dist/server/server/agent/agent-stream-coalescer.d.ts.map +1 -1
  28. package/dist/server/server/agent/agent-timeline-store.js +1 -1
  29. package/dist/server/server/agent/agent-timeline-store.js.map +1 -1
  30. package/dist/server/server/agent/create-agent-mode.d.ts +16 -0
  31. package/dist/server/server/agent/create-agent-mode.d.ts.map +1 -0
  32. package/dist/server/server/agent/create-agent-mode.js +26 -0
  33. package/dist/server/server/agent/create-agent-mode.js.map +1 -0
  34. package/dist/server/server/agent/import-sessions.d.ts +33 -0
  35. package/dist/server/server/agent/import-sessions.d.ts.map +1 -0
  36. package/dist/server/server/agent/import-sessions.js +107 -0
  37. package/dist/server/server/agent/import-sessions.js.map +1 -0
  38. package/dist/server/server/agent/mcp-server.d.ts +1 -1
  39. package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
  40. package/dist/server/server/agent/mcp-server.js +61 -14
  41. package/dist/server/server/agent/mcp-server.js.map +1 -1
  42. package/dist/server/server/agent/mcp-shared.d.ts +1 -43
  43. package/dist/server/server/agent/mcp-shared.d.ts.map +1 -1
  44. package/dist/server/server/agent/mcp-shared.js +0 -138
  45. package/dist/server/server/agent/mcp-shared.js.map +1 -1
  46. package/dist/server/server/agent/pcm16-resampler.js.map +1 -1
  47. package/dist/server/server/agent/prompt-attachments.d.ts.map +1 -1
  48. package/dist/server/server/agent/prompt-attachments.js +2 -0
  49. package/dist/server/server/agent/prompt-attachments.js.map +1 -1
  50. package/dist/server/server/agent/provider-launch-config.js.map +1 -1
  51. package/dist/server/server/agent/provider-manifest.d.ts +4 -1
  52. package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
  53. package/dist/server/server/agent/provider-manifest.js +11 -0
  54. package/dist/server/server/agent/provider-manifest.js.map +1 -1
  55. package/dist/server/server/agent/provider-registry.d.ts +7 -0
  56. package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
  57. package/dist/server/server/agent/provider-registry.js +13 -3
  58. package/dist/server/server/agent/provider-registry.js.map +1 -1
  59. package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
  60. package/dist/server/server/agent/providers/acp-agent.d.ts +2 -1
  61. package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
  62. package/dist/server/server/agent/providers/acp-agent.js +35 -17
  63. package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
  64. package/dist/server/server/agent/providers/{claude-agent.d.ts → claude/agent.d.ts} +9 -6
  65. package/dist/server/server/agent/providers/claude/agent.d.ts.map +1 -0
  66. package/dist/server/server/agent/providers/{claude-agent.js → claude/agent.js} +185 -152
  67. package/dist/server/server/agent/providers/claude/agent.js.map +1 -0
  68. package/dist/server/server/agent/providers/claude/{claude-models.d.ts → models.d.ts} +1 -1
  69. package/dist/server/server/agent/providers/claude/models.d.ts.map +1 -0
  70. package/dist/server/server/agent/providers/claude/{claude-models.js → models.js} +8 -1
  71. package/dist/server/server/agent/providers/claude/models.js.map +1 -0
  72. package/dist/server/server/agent/providers/claude/query.d.ts +14 -0
  73. package/dist/server/server/agent/providers/claude/query.d.ts.map +1 -0
  74. package/dist/server/server/agent/providers/claude/query.js +84 -0
  75. package/dist/server/server/agent/providers/claude/query.js.map +1 -0
  76. package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -1
  77. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +19 -3
  78. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  79. package/dist/server/server/agent/providers/codex-app-server-agent.js +447 -93
  80. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  81. package/dist/server/server/agent/providers/diagnostic-utils.d.ts.map +1 -1
  82. package/dist/server/server/agent/providers/diagnostic-utils.js +4 -0
  83. package/dist/server/server/agent/providers/diagnostic-utils.js.map +1 -1
  84. package/dist/server/server/agent/providers/generic-acp-agent.d.ts +1 -1
  85. package/dist/server/server/agent/providers/generic-acp-agent.d.ts.map +1 -1
  86. package/dist/server/server/agent/providers/generic-acp-agent.js +0 -3
  87. package/dist/server/server/agent/providers/generic-acp-agent.js.map +1 -1
  88. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -1
  89. package/dist/server/server/agent/providers/mock-load-test-agent.js +6 -2
  90. package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -1
  91. package/dist/server/server/agent/providers/opencode-agent.d.ts +3 -2
  92. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
  93. package/dist/server/server/agent/providers/opencode-agent.js +204 -31
  94. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
  95. package/dist/server/server/agent/providers/provider-image-output.d.ts +20 -0
  96. package/dist/server/server/agent/providers/provider-image-output.d.ts.map +1 -0
  97. package/dist/server/server/agent/providers/provider-image-output.js +51 -0
  98. package/dist/server/server/agent/providers/provider-image-output.js.map +1 -0
  99. package/dist/server/server/agent/providers/provider-runner.d.ts +3 -3
  100. package/dist/server/server/agent/providers/provider-runner.d.ts.map +1 -1
  101. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js.map +1 -1
  102. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +7 -7
  103. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
  104. package/dist/server/server/agent/providers/tool-call-detail-primitives.js +12 -18
  105. package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -1
  106. package/dist/server/server/agent/stt-manager.d.ts +1 -0
  107. package/dist/server/server/agent/stt-manager.d.ts.map +1 -1
  108. package/dist/server/server/agent/stt-manager.js +3 -0
  109. package/dist/server/server/agent/stt-manager.js.map +1 -1
  110. package/dist/server/server/agent/tool-name-normalization.js.map +1 -1
  111. package/dist/server/server/agent/tts-manager.js.map +1 -1
  112. package/dist/server/server/bootstrap.d.ts +1 -0
  113. package/dist/server/server/bootstrap.d.ts.map +1 -1
  114. package/dist/server/server/bootstrap.js +3 -1
  115. package/dist/server/server/bootstrap.js.map +1 -1
  116. package/dist/server/server/chat/chat-mentions.d.ts +24 -8
  117. package/dist/server/server/chat/chat-mentions.d.ts.map +1 -1
  118. package/dist/server/server/chat/chat-mentions.js +77 -35
  119. package/dist/server/server/chat/chat-mentions.js.map +1 -1
  120. package/dist/server/server/chat/chat-service.d.ts +4 -0
  121. package/dist/server/server/chat/chat-service.d.ts.map +1 -1
  122. package/dist/server/server/chat/chat-service.js +9 -0
  123. package/dist/server/server/chat/chat-service.js.map +1 -1
  124. package/dist/server/server/config.d.ts +1 -0
  125. package/dist/server/server/config.d.ts.map +1 -1
  126. package/dist/server/server/config.js +7 -1
  127. package/dist/server/server/config.js.map +1 -1
  128. package/dist/server/server/connection-offer.d.ts +1 -0
  129. package/dist/server/server/connection-offer.d.ts.map +1 -1
  130. package/dist/server/server/daemon-config-store.d.ts.map +1 -1
  131. package/dist/server/server/daemon-config-store.js +2 -6
  132. package/dist/server/server/daemon-config-store.js.map +1 -1
  133. package/dist/server/server/daemon-keypair.d.ts.map +1 -1
  134. package/dist/server/server/daemon-keypair.js +4 -2
  135. package/dist/server/server/daemon-keypair.js.map +1 -1
  136. package/dist/server/server/daemon-worker.js +3 -0
  137. package/dist/server/server/daemon-worker.js.map +1 -1
  138. package/dist/server/server/editor-targets.js.map +1 -1
  139. package/dist/server/server/exports.d.ts +1 -0
  140. package/dist/server/server/exports.d.ts.map +1 -1
  141. package/dist/server/server/exports.js +1 -0
  142. package/dist/server/server/exports.js.map +1 -1
  143. package/dist/server/server/json-utils.js.map +1 -1
  144. package/dist/server/server/logger.js.map +1 -1
  145. package/dist/server/server/loop/rpc-schemas.d.ts +68 -0
  146. package/dist/server/server/loop/rpc-schemas.d.ts.map +1 -1
  147. package/dist/server/server/loop/rpc-schemas.js +4 -0
  148. package/dist/server/server/loop/rpc-schemas.js.map +1 -1
  149. package/dist/server/server/loop-service.d.ts +8 -0
  150. package/dist/server/server/loop-service.d.ts.map +1 -1
  151. package/dist/server/server/loop-service.js +11 -2
  152. package/dist/server/server/loop-service.js.map +1 -1
  153. package/dist/server/server/package-version.d.ts +12 -0
  154. package/dist/server/server/package-version.d.ts.map +1 -1
  155. package/dist/server/server/package-version.js +13 -1
  156. package/dist/server/server/package-version.js.map +1 -1
  157. package/dist/server/server/pairing-offer.d.ts +1 -0
  158. package/dist/server/server/pairing-offer.d.ts.map +1 -1
  159. package/dist/server/server/pairing-offer.js +2 -1
  160. package/dist/server/server/pairing-offer.js.map +1 -1
  161. package/dist/server/server/pairing-qr.js +1 -1
  162. package/dist/server/server/pairing-qr.js.map +1 -1
  163. package/dist/server/server/paseo-env.d.ts +7 -3
  164. package/dist/server/server/paseo-env.d.ts.map +1 -1
  165. package/dist/server/server/paseo-env.js +16 -33
  166. package/dist/server/server/paseo-env.js.map +1 -1
  167. package/dist/server/server/paseo-home.js +2 -2
  168. package/dist/server/server/paseo-home.js.map +1 -1
  169. package/dist/server/server/persisted-config.d.ts +9 -0
  170. package/dist/server/server/persisted-config.d.ts.map +1 -1
  171. package/dist/server/server/persisted-config.js +6 -4
  172. package/dist/server/server/persisted-config.js.map +1 -1
  173. package/dist/server/server/persistence-hooks.js.map +1 -1
  174. package/dist/server/server/pid-lock.d.ts +21 -4
  175. package/dist/server/server/pid-lock.d.ts.map +1 -1
  176. package/dist/server/server/pid-lock.js +30 -8
  177. package/dist/server/server/pid-lock.js.map +1 -1
  178. package/dist/server/server/private-files.d.ts +7 -0
  179. package/dist/server/server/private-files.d.ts.map +1 -0
  180. package/dist/server/server/private-files.js +42 -0
  181. package/dist/server/server/private-files.js.map +1 -0
  182. package/dist/server/server/push/token-store.d.ts.map +1 -1
  183. package/dist/server/server/push/token-store.js +4 -6
  184. package/dist/server/server/push/token-store.js.map +1 -1
  185. package/dist/server/server/relay-transport.d.ts +2 -1
  186. package/dist/server/server/relay-transport.d.ts.map +1 -1
  187. package/dist/server/server/relay-transport.js +8 -5
  188. package/dist/server/server/relay-transport.js.map +1 -1
  189. package/dist/server/server/schedule/rpc-schemas.d.ts +1136 -0
  190. package/dist/server/server/schedule/rpc-schemas.d.ts.map +1 -1
  191. package/dist/server/server/schedule/rpc-schemas.js +39 -0
  192. package/dist/server/server/schedule/rpc-schemas.js.map +1 -1
  193. package/dist/server/server/schedule/service.d.ts +4 -2
  194. package/dist/server/server/schedule/service.d.ts.map +1 -1
  195. package/dist/server/server/schedule/service.js +106 -16
  196. package/dist/server/server/schedule/service.js.map +1 -1
  197. package/dist/server/server/schedule/types.d.ts +16 -0
  198. package/dist/server/server/schedule/types.d.ts.map +1 -1
  199. package/dist/server/server/script-health-monitor.js.map +1 -1
  200. package/dist/server/server/server-id.d.ts.map +1 -1
  201. package/dist/server/server/server-id.js +8 -3
  202. package/dist/server/server/server-id.js.map +1 -1
  203. package/dist/server/server/session.d.ts +5 -4
  204. package/dist/server/server/session.d.ts.map +1 -1
  205. package/dist/server/server/session.js +318 -149
  206. package/dist/server/server/session.js.map +1 -1
  207. package/dist/server/server/speech/audio.js.map +1 -1
  208. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts.map +1 -1
  209. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js +52 -52
  210. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +1 -1
  211. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts.map +1 -1
  212. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +9 -3
  213. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js.map +1 -1
  214. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts.map +1 -1
  215. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +12 -10
  216. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js.map +1 -1
  217. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js +2 -2
  218. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +1 -1
  219. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js +1 -1
  220. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js.map +1 -1
  221. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js.map +1 -1
  222. package/dist/server/server/voice/voice-turn-controller.d.ts +16 -13
  223. package/dist/server/server/voice/voice-turn-controller.d.ts.map +1 -1
  224. package/dist/server/server/voice/voice-turn-controller.js +303 -71
  225. package/dist/server/server/voice/voice-turn-controller.js.map +1 -1
  226. package/dist/server/server/voice-config.js +1 -1
  227. package/dist/server/server/voice-config.js.map +1 -1
  228. package/dist/server/server/websocket-server.js.map +1 -1
  229. package/dist/server/server/workspace-directory.d.ts.map +1 -1
  230. package/dist/server/server/workspace-directory.js +4 -2
  231. package/dist/server/server/workspace-directory.js.map +1 -1
  232. package/dist/server/server/workspace-git-metadata.d.ts.map +1 -1
  233. package/dist/server/server/workspace-git-metadata.js +12 -5
  234. package/dist/server/server/workspace-git-metadata.js.map +1 -1
  235. package/dist/server/server/workspace-git-service.d.ts +4 -1
  236. package/dist/server/server/workspace-git-service.d.ts.map +1 -1
  237. package/dist/server/server/workspace-git-service.js +50 -2
  238. package/dist/server/server/workspace-git-service.js.map +1 -1
  239. package/dist/server/server/workspace-registry-model.d.ts.map +1 -1
  240. package/dist/server/server/workspace-registry-model.js +10 -3
  241. package/dist/server/server/workspace-registry-model.js.map +1 -1
  242. package/dist/server/server/worktree-branch-name-generator.d.ts +2 -0
  243. package/dist/server/server/worktree-branch-name-generator.d.ts.map +1 -1
  244. package/dist/server/server/worktree-branch-name-generator.js +18 -11
  245. package/dist/server/server/worktree-branch-name-generator.js.map +1 -1
  246. package/dist/server/server/worktree-session.js +1 -1
  247. package/dist/server/server/worktree-session.js.map +1 -1
  248. package/dist/server/services/github-service.d.ts +13 -0
  249. package/dist/server/services/github-service.d.ts.map +1 -1
  250. package/dist/server/services/github-service.js +21 -4
  251. package/dist/server/services/github-service.js.map +1 -1
  252. package/dist/server/shared/agent-labels.d.ts +2 -0
  253. package/dist/server/shared/agent-labels.d.ts.map +1 -0
  254. package/dist/server/shared/agent-labels.js +2 -0
  255. package/dist/server/shared/agent-labels.js.map +1 -0
  256. package/dist/server/shared/connection-offer.d.ts +10 -0
  257. package/dist/server/shared/connection-offer.d.ts.map +1 -1
  258. package/dist/server/shared/connection-offer.js +1 -0
  259. package/dist/server/shared/connection-offer.js.map +1 -1
  260. package/dist/server/shared/daemon-endpoints.d.ts +4 -0
  261. package/dist/server/shared/daemon-endpoints.d.ts.map +1 -1
  262. package/dist/server/shared/daemon-endpoints.js +6 -1
  263. package/dist/server/shared/daemon-endpoints.js.map +1 -1
  264. package/dist/server/shared/error-utils.d.ts +11 -0
  265. package/dist/server/shared/error-utils.d.ts.map +1 -0
  266. package/dist/server/shared/error-utils.js +27 -0
  267. package/dist/server/shared/error-utils.js.map +1 -0
  268. package/dist/server/shared/importable-providers.d.ts +7 -0
  269. package/dist/server/shared/importable-providers.d.ts.map +1 -0
  270. package/dist/server/shared/importable-providers.js +7 -0
  271. package/dist/server/shared/importable-providers.js.map +1 -0
  272. package/dist/server/shared/messages.d.ts +12753 -2085
  273. package/dist/server/shared/messages.d.ts.map +1 -1
  274. package/dist/server/shared/messages.js +61 -5
  275. package/dist/server/shared/messages.js.map +1 -1
  276. package/dist/server/shared/tool-call-display.d.ts.map +1 -1
  277. package/dist/server/shared/tool-call-display.js +2 -0
  278. package/dist/server/shared/tool-call-display.js.map +1 -1
  279. package/dist/server/terminal/terminal-manager.d.ts +2 -1
  280. package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
  281. package/dist/server/terminal/terminal-manager.js +2 -1
  282. package/dist/server/terminal/terminal-manager.js.map +1 -1
  283. package/dist/server/terminal/terminal-output-coalescer.js.map +1 -1
  284. package/dist/server/terminal/terminal-session-controller.d.ts.map +1 -1
  285. package/dist/server/terminal/terminal-session-controller.js +2 -0
  286. package/dist/server/terminal/terminal-session-controller.js.map +1 -1
  287. package/dist/server/terminal/terminal.d.ts +1 -1
  288. package/dist/server/terminal/terminal.d.ts.map +1 -1
  289. package/dist/server/terminal/terminal.js +53 -8
  290. package/dist/server/terminal/terminal.js.map +1 -1
  291. package/dist/server/terminal/worker-terminal-manager.js.map +1 -1
  292. package/dist/server/utils/build-metadata-prompt.d.ts +14 -0
  293. package/dist/server/utils/build-metadata-prompt.d.ts.map +1 -0
  294. package/dist/server/utils/build-metadata-prompt.js +28 -0
  295. package/dist/server/utils/build-metadata-prompt.js.map +1 -0
  296. package/dist/server/utils/checkout-git.d.ts +2 -1
  297. package/dist/server/utils/checkout-git.d.ts.map +1 -1
  298. package/dist/server/utils/checkout-git.js +67 -11
  299. package/dist/server/utils/checkout-git.js.map +1 -1
  300. package/dist/server/utils/directory-suggestions.js.map +1 -1
  301. package/dist/server/utils/executable.d.ts +2 -1
  302. package/dist/server/utils/executable.d.ts.map +1 -1
  303. package/dist/server/utils/executable.js +50 -51
  304. package/dist/server/utils/executable.js.map +1 -1
  305. package/dist/server/utils/paseo-config-file.d.ts +1 -1
  306. package/dist/server/utils/paseo-config-file.d.ts.map +1 -1
  307. package/dist/server/utils/paseo-config-schema.d.ts +625 -0
  308. package/dist/server/utils/paseo-config-schema.d.ts.map +1 -1
  309. package/dist/server/utils/paseo-config-schema.js +17 -0
  310. package/dist/server/utils/paseo-config-schema.js.map +1 -1
  311. package/dist/server/utils/spawn.d.ts +2 -0
  312. package/dist/server/utils/spawn.d.ts.map +1 -1
  313. package/dist/server/utils/spawn.js +2 -1
  314. package/dist/server/utils/spawn.js.map +1 -1
  315. package/dist/server/utils/tree-kill.d.ts +18 -0
  316. package/dist/server/utils/tree-kill.d.ts.map +1 -0
  317. package/dist/server/utils/{process-tree.js → tree-kill.js} +14 -33
  318. package/dist/server/utils/tree-kill.js.map +1 -0
  319. package/dist/server/utils/worktree.js.map +1 -1
  320. package/dist/server/utils/wrap-user-instructions.d.ts +2 -0
  321. package/dist/server/utils/wrap-user-instructions.d.ts.map +1 -0
  322. package/dist/server/utils/wrap-user-instructions.js +13 -0
  323. package/dist/server/utils/wrap-user-instructions.js.map +1 -0
  324. package/dist/src/server/agent/provider-launch-config.js.map +1 -1
  325. package/dist/src/server/agent/provider-manifest.js +11 -0
  326. package/dist/src/server/agent/provider-manifest.js.map +1 -1
  327. package/dist/src/server/loop/rpc-schemas.js +4 -0
  328. package/dist/src/server/loop/rpc-schemas.js.map +1 -1
  329. package/dist/src/server/paseo-env.js +16 -33
  330. package/dist/src/server/paseo-env.js.map +1 -1
  331. package/dist/src/server/paseo-home.js +2 -2
  332. package/dist/src/server/paseo-home.js.map +1 -1
  333. package/dist/src/server/persisted-config.js +6 -4
  334. package/dist/src/server/persisted-config.js.map +1 -1
  335. package/dist/src/server/pid-lock.js +30 -8
  336. package/dist/src/server/pid-lock.js.map +1 -1
  337. package/dist/src/server/private-files.js +42 -0
  338. package/dist/src/server/private-files.js.map +1 -0
  339. package/dist/src/server/schedule/rpc-schemas.js +39 -0
  340. package/dist/src/server/schedule/rpc-schemas.js.map +1 -1
  341. package/dist/src/shared/messages.js +61 -5
  342. package/dist/src/shared/messages.js.map +1 -1
  343. package/dist/src/utils/executable.js +50 -51
  344. package/dist/src/utils/executable.js.map +1 -1
  345. package/dist/src/utils/paseo-config-schema.js +17 -0
  346. package/dist/src/utils/paseo-config-schema.js.map +1 -1
  347. package/dist/src/utils/spawn.js +2 -1
  348. package/dist/src/utils/spawn.js.map +1 -1
  349. package/package.json +5 -4
  350. package/dist/server/server/agent/providers/claude/claude-models.d.ts.map +0 -1
  351. package/dist/server/server/agent/providers/claude/claude-models.js.map +0 -1
  352. package/dist/server/server/agent/providers/claude-agent.d.ts.map +0 -1
  353. package/dist/server/server/agent/providers/claude-agent.js.map +0 -1
  354. package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.d.ts +0 -16
  355. package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.d.ts.map +0 -1
  356. package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.js +0 -35
  357. package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.js.map +0 -1
  358. package/dist/server/utils/process-tree.d.ts +0 -25
  359. package/dist/server/utils/process-tree.d.ts.map +0 -1
  360. package/dist/server/utils/process-tree.js.map +0 -1
@@ -3,20 +3,20 @@ 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
22
  function readNonEmptyString(value) {
@@ -61,6 +61,21 @@ export function normalizeClaudeAskUserQuestionUpdatedInput(updatedInput, fallbac
61
61
  answers: normalizedAnswers,
62
62
  };
63
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
+ }
64
79
  const CLAUDE_CAPABILITIES = {
65
80
  supportsStreaming: true,
66
81
  supportsSessionPersistence: true,
@@ -134,60 +149,6 @@ function extractSessionIdRaw(msg) {
134
149
  return msg.session.id;
135
150
  return "";
136
151
  }
137
- function resolveClaudeSpawnCommand(spawnOptions, runtimeSettings) {
138
- const commandConfig = runtimeSettings?.command;
139
- if (!commandConfig || commandConfig.mode === "default") {
140
- return {
141
- command: spawnOptions.command,
142
- args: [...spawnOptions.args],
143
- };
144
- }
145
- if (commandConfig.mode === "append") {
146
- return {
147
- command: spawnOptions.command,
148
- args: [...spawnOptions.args, ...(commandConfig.args ?? [])],
149
- };
150
- }
151
- return {
152
- command: commandConfig.argv[0],
153
- args: [...commandConfig.argv.slice(1), ...spawnOptions.args],
154
- };
155
- }
156
- function applyRuntimeSettingsToClaudeOptions(options, runtimeSettings, launchEnv) {
157
- return {
158
- ...options,
159
- spawnClaudeCodeProcess: (spawnOptions) => {
160
- const resolved = resolveClaudeSpawnCommand(spawnOptions, runtimeSettings);
161
- // When the SDK passes a default JS runtime ("node"/"bun"), replace it with
162
- // process.execPath — the actual node binary running the daemon. This avoids
163
- // PATH lookup failures in the managed runtime bundle.
164
- // When the SDK passes a native binary path (from pathToClaudeCodeExecutable)
165
- // or the user overrides the command via runtime settings, use that directly.
166
- const isDefaultRuntime = resolved.command === "node" || resolved.command === "bun";
167
- const command = isDefaultRuntime ? process.execPath : resolved.command;
168
- const child = spawnProcess(command, resolved.args, {
169
- cwd: spawnOptions.cwd,
170
- ...createProviderEnvSpec({
171
- baseEnv: spawnOptions.env,
172
- runtimeSettings,
173
- overlays: [launchEnv],
174
- }),
175
- signal: spawnOptions.signal,
176
- stdio: ["pipe", "pipe", "pipe"],
177
- // Bypass cmd.exe on Windows: the SDK passes --mcp-config with inline JSON
178
- // containing double quotes, which cmd.exe mangles (strips quotes, breaks parsing).
179
- // The command is always a resolved binary path, so shell routing is unnecessary.
180
- shell: false,
181
- });
182
- if (typeof options.stderr === "function") {
183
- child.stderr?.on("data", (chunk) => {
184
- options.stderr?.(chunk.toString());
185
- });
186
- }
187
- return child;
188
- },
189
- };
190
- }
191
152
  function isClaudeThinkingEffort(value) {
192
153
  return (value === "low" ||
193
154
  value === "medium" ||
@@ -210,11 +171,11 @@ function summarizeClaudeOptionsForLog(options) {
210
171
  if (typeof systemPromptRaw === "string") {
211
172
  return { mode: "string", preset: null };
212
173
  }
213
- const prompt = systemPromptRaw;
214
- const promptType = typeof prompt.type === "string" ? prompt.type : "custom";
174
+ const prompt = toObjectRecord(systemPromptRaw);
175
+ const promptType = typeof prompt?.type === "string" ? prompt.type : "custom";
215
176
  return {
216
177
  mode: promptType === "preset" ? "preset" : "custom",
217
- 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,
218
179
  };
219
180
  })();
220
181
  const mcpServerNames = options.mcpServers ? Object.keys(options.mcpServers).sort() : [];
@@ -276,7 +237,11 @@ function normalizeForDeterministicString(value, seen) {
276
237
  return "[circular]";
277
238
  }
278
239
  seen.add(objectValue);
279
- const record = value;
240
+ const record = toObjectRecord(value);
241
+ if (!record) {
242
+ seen.delete(objectValue);
243
+ return "[invalid]";
244
+ }
280
245
  const normalized = {};
281
246
  for (const key of Object.keys(record).sort()) {
282
247
  normalized[key] = normalizeForDeterministicString(record[key], seen);
@@ -284,7 +249,10 @@ function normalizeForDeterministicString(value, seen) {
284
249
  seen.delete(objectValue);
285
250
  return normalized;
286
251
  }
287
- return String(value);
252
+ if (typeof value === "number" || typeof value === "boolean") {
253
+ return String(value);
254
+ }
255
+ return "[unsupported]";
288
256
  }
289
257
  function deterministicStringify(value) {
290
258
  if (typeof value === "undefined") {
@@ -298,12 +266,13 @@ function deterministicStringify(value) {
298
266
  return JSON.stringify(normalized);
299
267
  }
300
268
  catch {
301
- try {
302
- return String(value);
269
+ if (typeof value === "string") {
270
+ return value;
303
271
  }
304
- catch {
305
- return "[unserializable]";
272
+ if (typeof value === "number" || typeof value === "boolean") {
273
+ return String(value);
306
274
  }
275
+ return "[unserializable]";
307
276
  }
308
277
  }
309
278
  function coerceToolResultContentToString(content) {
@@ -344,20 +313,21 @@ function collectClaudeTextContentParts(content) {
344
313
  const normalized = normalizeClaudeTranscriptText(content);
345
314
  return normalized ? [normalized] : [];
346
315
  }
347
- if (!Array.isArray(content)) {
316
+ if (!isUnknownArray(content)) {
348
317
  return [];
349
318
  }
350
319
  const parts = [];
351
320
  for (const block of content) {
352
- if (!block || typeof block !== "object") {
321
+ const blockRecord = toObjectRecord(block);
322
+ if (!blockRecord) {
353
323
  continue;
354
324
  }
355
- const text = normalizeClaudeTranscriptText(block.text);
325
+ const text = normalizeClaudeTranscriptText(blockRecord.text);
356
326
  if (text) {
357
327
  parts.push(text);
358
328
  continue;
359
329
  }
360
- const input = normalizeClaudeTranscriptText(block.input);
330
+ const input = normalizeClaudeTranscriptText(blockRecord.input);
361
331
  if (input) {
362
332
  parts.push(input);
363
333
  }
@@ -537,6 +507,7 @@ function toClaudeSdkMcpConfig(config) {
537
507
  headers: config.headers,
538
508
  };
539
509
  }
510
+ throw new Error("Unhandled MCP server config type");
540
511
  }
541
512
  function isClaudeContentChunk(value) {
542
513
  return isMetadata(value) && typeof value.type === "string";
@@ -627,7 +598,7 @@ class TimelineAssembler {
627
598
  return this.applyAbsoluteFragments(state, fragments);
628
599
  }
629
600
  consumeStreamEvent(message, runId, messageIdHint) {
630
- const event = message.event;
601
+ const event = toObjectRecord(message.event) ?? {};
631
602
  const eventType = readTrimmedString(event.type);
632
603
  const streamEventMessageId = this.readMessageIdFromStreamEvent(event) ?? messageIdHint;
633
604
  if (eventType === "message_start") {
@@ -810,19 +781,20 @@ class TimelineAssembler {
810
781
  return fragments;
811
782
  }
812
783
  readMessageIdFromAssistantMessage(message) {
813
- const candidate = message;
814
- 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);
815
787
  }
816
788
  readMessageIdFromStreamEvent(event) {
817
- const message = event.message;
818
- 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;
819
791
  }
820
792
  }
821
793
  function isSyntheticUserEntry(entry) {
822
- if (!entry || typeof entry !== "object") {
794
+ const candidate = toObjectRecord(entry);
795
+ if (!candidate) {
823
796
  return false;
824
797
  }
825
- const candidate = entry;
826
798
  return candidate.isSynthetic === true || candidate.isMeta === true;
827
799
  }
828
800
  function firstTrimmedString(sources) {
@@ -835,11 +807,11 @@ function firstTrimmedString(sources) {
835
807
  return null;
836
808
  }
837
809
  export function readEventIdentifiers(message) {
838
- const root = message;
810
+ const root = toObjectRecord(message) ?? {};
839
811
  const messageType = readTrimmedString(root.type);
840
- const streamEvent = root.event;
841
- const streamEventMessage = streamEvent?.message;
842
- const messageContainer = root.message;
812
+ const streamEvent = toObjectRecord(root.event);
813
+ const streamEventMessage = toObjectRecord(streamEvent?.message);
814
+ const messageContainer = toObjectRecord(root.message);
843
815
  const messageIdFromUuid = messageType === "user" ? root.uuid : undefined;
844
816
  return {
845
817
  taskId: firstTrimmedString([
@@ -873,7 +845,8 @@ export class ClaudeAgentClient {
873
845
  this.defaults = options.defaults;
874
846
  this.logger = options.logger.child({ module: "agent", provider: "claude" });
875
847
  this.runtimeSettings = options.runtimeSettings;
876
- this.queryFactory = options.queryFactory ?? query;
848
+ this.queryFactory = options.queryFactory;
849
+ this.resolveBinary = options.resolveBinary ?? (() => resolveClaudeBinary(this.runtimeSettings));
877
850
  }
878
851
  async createSession(config, launchContext, options) {
879
852
  const claudeConfig = this.assertConfig(config);
@@ -884,6 +857,7 @@ export class ClaudeAgentClient {
884
857
  persistSession: options?.persistSession,
885
858
  logger: this.logger,
886
859
  queryFactory: this.queryFactory,
860
+ resolveBinary: this.resolveBinary,
887
861
  });
888
862
  }
889
863
  async resumeSession(handle, overrides, launchContext) {
@@ -905,6 +879,7 @@ export class ClaudeAgentClient {
905
879
  launchEnv: launchContext?.env,
906
880
  logger: this.logger,
907
881
  queryFactory: this.queryFactory,
882
+ resolveBinary: this.resolveBinary,
908
883
  });
909
884
  }
910
885
  async listModels(_options) {
@@ -929,9 +904,7 @@ export class ClaudeAgentClient {
929
904
  if (command?.mode === "replace") {
930
905
  return await isCommandAvailable(command.argv[0]);
931
906
  }
932
- // Default mode uses @anthropic-ai/claude-agent-sdk's bundled cli.js run
933
- // via process.execPath. No external `claude` binary is required.
934
- return true;
907
+ return await isCommandAvailable("claude");
935
908
  }
936
909
  async getDiagnostic() {
937
910
  try {
@@ -980,6 +953,20 @@ export class ClaudeAgentClient {
980
953
  return { ...config, provider: "claude" };
981
954
  }
982
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
+ }
983
970
  async function resolveClaudeVersion(runtimeSettings) {
984
971
  const command = runtimeSettings?.command;
985
972
  const envSpec = createProviderEnvSpec({ runtimeSettings });
@@ -1012,11 +999,11 @@ async function resolveClaudeAuth(runtimeSettings) {
1012
999
  });
1013
1000
  }
1014
1001
  catch (error) {
1015
- const err = error;
1016
- return {
1017
- stdout: err.stdout ?? "",
1018
- stderr: err.stderr ?? err.message ?? "",
1019
- };
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 };
1020
1007
  }
1021
1008
  };
1022
1009
  try {
@@ -1042,15 +1029,17 @@ async function resolveClaudeAuth(runtimeSettings) {
1042
1029
  }
1043
1030
  }
1044
1031
  function extractContextWindowSize(modelUsage) {
1045
- if (!modelUsage || typeof modelUsage !== "object") {
1032
+ const usageRecord = toObjectRecord(modelUsage);
1033
+ if (!usageRecord) {
1046
1034
  return undefined;
1047
1035
  }
1048
1036
  let maxContextWindow;
1049
- for (const value of Object.values(modelUsage)) {
1050
- if (!value || typeof value !== "object") {
1037
+ for (const value of Object.values(usageRecord)) {
1038
+ const valueRecord = toObjectRecord(value);
1039
+ if (!valueRecord) {
1051
1040
  continue;
1052
1041
  }
1053
- const contextWindow = value.contextWindow;
1042
+ const contextWindow = valueRecord.contextWindow;
1054
1043
  if (typeof contextWindow !== "number" ||
1055
1044
  !Number.isFinite(contextWindow) ||
1056
1045
  contextWindow <= 0) {
@@ -1077,8 +1066,8 @@ function readUsageFromTaskNotification(message) {
1077
1066
  return readUsageTotalTokens(message.usage);
1078
1067
  }
1079
1068
  function readStreamRequestInputTokens(event) {
1080
- const messageUsage = event.message?.usage;
1081
- if (!messageUsage || typeof messageUsage !== "object") {
1069
+ const messageUsage = toObjectRecord(toObjectRecord(event.message)?.usage);
1070
+ if (!messageUsage) {
1082
1071
  return undefined;
1083
1072
  }
1084
1073
  const usage = messageUsage;
@@ -1099,7 +1088,7 @@ function readStreamRequestInputTokens(event) {
1099
1088
  return inputTokens + cacheCreationInputTokens + cacheReadInputTokens;
1100
1089
  }
1101
1090
  function readStreamRequestOutputTokens(event) {
1102
- const outputTokens = event.usage?.output_tokens;
1091
+ const outputTokens = toObjectRecord(event.usage)?.output_tokens;
1103
1092
  if (typeof outputTokens !== "number" || !Number.isFinite(outputTokens) || outputTokens < 0) {
1104
1093
  return undefined;
1105
1094
  }
@@ -1217,7 +1206,8 @@ class ClaudeAgentSession {
1217
1206
  this.runtimeSettings = options.runtimeSettings;
1218
1207
  this.persistSession = options.persistSession;
1219
1208
  this.logger = options.logger;
1220
- this.queryFactory = options.queryFactory ?? query;
1209
+ this.queryFactory = options.queryFactory;
1210
+ this.resolveBinary = options.resolveBinary;
1221
1211
  const handle = options.handle;
1222
1212
  if (handle) {
1223
1213
  if (!handle.sessionId) {
@@ -1525,6 +1515,21 @@ class ClaudeAgentSession {
1525
1515
  await this.awaitWithTimeout(this.query?.return?.(), "close query return");
1526
1516
  this.query = null;
1527
1517
  this.input = null;
1518
+ if (this.persistSession === false && this.claudeSessionId) {
1519
+ // Claude Code currently ignores --no-session-persistence outside --print mode
1520
+ // (see `claude --help`), so the SDK's persistSession=false is silently dropped
1521
+ // in stream-json mode. Sweep the transcript ourselves so ephemeral runs
1522
+ // (metadata generator, branch-name generator) don't show up as resumable.
1523
+ const historyPath = this.resolveHistoryPath(this.claudeSessionId);
1524
+ if (historyPath) {
1525
+ try {
1526
+ await promises.rm(historyPath, { force: true });
1527
+ }
1528
+ catch (error) {
1529
+ this.logger.warn({ err: error, historyPath, claudeSessionId: this.claudeSessionId }, "Failed to delete ephemeral Claude session transcript");
1530
+ }
1531
+ }
1532
+ }
1528
1533
  this.logger.trace({ claudeSessionId: this.claudeSessionId, turnState: this.turnState }, "Claude session close: completed");
1529
1534
  }
1530
1535
  async listCommands() {
@@ -1745,7 +1750,11 @@ class ClaudeAgentSession {
1745
1750
  const options = await this.buildOptions();
1746
1751
  this.logger.debug({ options: summarizeClaudeOptionsForLog(options) }, "claude query");
1747
1752
  this.input = input;
1748
- this.query = this.queryFactory({ prompt: input.iterable, options });
1753
+ this.query = claudeQuery({ prompt: input.iterable, options }, {
1754
+ runtimeSettings: this.runtimeSettings,
1755
+ launchEnv: this.launchEnv,
1756
+ queryFactory: this.queryFactory,
1757
+ });
1749
1758
  // Do not kick off background control-plane queries here. Methods like
1750
1759
  // supportedCommands()/setPermissionMode() may execute immediately after
1751
1760
  // ensureQuery() (for listCommands()/setMode()), and sharing the same query
@@ -1772,12 +1781,7 @@ class ClaudeAgentSession {
1772
1781
  ? this.config.thinkingOptionId
1773
1782
  : undefined;
1774
1783
  if (thinkingOptionId && isClaudeThinkingEffort(thinkingOptionId)) {
1775
- // SDK 0.2.71 types `effort` as 'low' | 'medium' | 'high' | 'max'; Opus 4.7
1776
- // adds 'xhigh' which the binary accepts but the typings don't yet expose.
1777
- return {
1778
- thinking: { type: "adaptive" },
1779
- effort: thinkingOptionId,
1780
- };
1784
+ return { thinking: { type: "adaptive" }, effort: thinkingOptionId };
1781
1785
  }
1782
1786
  return { thinking: undefined, effort: undefined };
1783
1787
  }
@@ -1803,7 +1807,7 @@ class ClaudeAgentSession {
1803
1807
  this.launchEnv,
1804
1808
  ],
1805
1809
  });
1806
- const claudeBinary = await findExecutable("claude");
1810
+ const claudeBinary = await this.resolveBinary();
1807
1811
  this.logger.debug({
1808
1812
  claudeBinary,
1809
1813
  pathEnvKey: resolvePathEnvKey(),
@@ -1821,7 +1825,7 @@ class ClaudeAgentSession {
1821
1825
  allowDangerouslySkipPermissions: true,
1822
1826
  agents: this.defaults?.agents,
1823
1827
  canUseTool: this.handlePermissionRequest,
1824
- ...(claudeBinary ? { pathToClaudeCodeExecutable: claudeBinary } : {}),
1828
+ pathToClaudeCodeExecutable: claudeBinary,
1825
1829
  // Use Claude Code preset system prompt and load CLAUDE.md files
1826
1830
  // Append provider-agnostic system prompt and orchestrator instructions for agents.
1827
1831
  systemPrompt: {
@@ -1861,10 +1865,7 @@ class ClaudeAgentSession {
1861
1865
  ...this.runtimeSettings.disallowedTools,
1862
1866
  ];
1863
1867
  }
1864
- return this.applyRuntimeSettings(base);
1865
- }
1866
- applyRuntimeSettings(options) {
1867
- return applyRuntimeSettingsToClaudeOptions(options, this.runtimeSettings, this.launchEnv);
1868
+ return base;
1868
1869
  }
1869
1870
  normalizeMcpServers(servers) {
1870
1871
  const result = {};
@@ -1881,14 +1882,16 @@ class ClaudeAgentSession {
1881
1882
  content.push({ type: "text", text: chunk.text });
1882
1883
  }
1883
1884
  else if (chunk.type === "image") {
1884
- content.push({
1885
- type: "image",
1886
- source: {
1887
- type: "base64",
1888
- media_type: chunk.mimeType,
1889
- data: chunk.data,
1890
- },
1891
- });
1885
+ if (isImageMimeType(chunk.mimeType)) {
1886
+ content.push({
1887
+ type: "image",
1888
+ source: {
1889
+ type: "base64",
1890
+ media_type: chunk.mimeType,
1891
+ data: chunk.data,
1892
+ },
1893
+ });
1894
+ }
1892
1895
  }
1893
1896
  else {
1894
1897
  content.push({ type: "text", text: renderPromptAttachmentAsText(chunk) });
@@ -2107,7 +2110,7 @@ class ClaudeAgentSession {
2107
2110
  this.logger.trace({ err: error }, "Claude query pump exited unexpectedly");
2108
2111
  });
2109
2112
  this.queryPumpPromise = pump;
2110
- pump.finally(() => {
2113
+ void pump.finally(() => {
2111
2114
  if (this.queryPumpPromise === pump) {
2112
2115
  this.queryPumpPromise = null;
2113
2116
  }
@@ -2386,7 +2389,7 @@ class ClaudeAgentSession {
2386
2389
  return;
2387
2390
  }
2388
2391
  if (message.subtype === "status") {
2389
- const status = message.status;
2392
+ const status = toObjectRecord(message)?.status;
2390
2393
  if (status === "compacting") {
2391
2394
  this.compacting = true;
2392
2395
  events.push({
@@ -2412,6 +2415,16 @@ class ClaudeAgentSession {
2412
2415
  return;
2413
2416
  }
2414
2417
  if (message.subtype === "task_notification") {
2418
+ // TODO: subagent timelines are best-effort. Subagent task_notifications
2419
+ // arrive without parent_tool_use_id but with tool_use_id pointing at the
2420
+ // parent's Task call, so they slip past the sidechain router and pollute
2421
+ // the parent timeline. Drop them here; eventually thread them into the
2422
+ // parent Task tool call's sub_agent log instead.
2423
+ const taskUseId = message.tool_use_id;
2424
+ const cachedTool = taskUseId ? this.toolUseCache.get(taskUseId) : undefined;
2425
+ if (cachedTool?.name === "Task") {
2426
+ return;
2427
+ }
2415
2428
  const taskNotificationItem = mapTaskNotificationSystemRecordToToolCall(message);
2416
2429
  if (taskNotificationItem) {
2417
2430
  events.push({
@@ -2523,8 +2536,12 @@ class ClaudeAgentSession {
2523
2536
  };
2524
2537
  }
2525
2538
  captureSessionIdFromMessage(message) {
2526
- const msg = message;
2527
- const sessionId = extractSessionIdRaw(msg).trim();
2539
+ const msgRecord = toObjectRecord(message) ?? {};
2540
+ const sessionId = extractSessionIdRaw({
2541
+ session_id: msgRecord.session_id,
2542
+ sessionId: msgRecord.sessionId,
2543
+ session: isObjectRecord(msgRecord.session) ? { id: msgRecord.session.id } : null,
2544
+ }).trim();
2528
2545
  if (!sessionId) {
2529
2546
  return { threadStartedSessionId: null, notice: null };
2530
2547
  }
@@ -2552,8 +2569,12 @@ class ClaudeAgentSession {
2552
2569
  if (message.subtype !== "init") {
2553
2570
  return { threadStartedSessionId: null, notice: null };
2554
2571
  }
2555
- const msg = message;
2556
- const newSessionId = extractSessionIdRaw(msg).trim();
2572
+ const msgRecord = toObjectRecord(message) ?? {};
2573
+ const newSessionId = extractSessionIdRaw({
2574
+ session_id: msgRecord.session_id,
2575
+ sessionId: msgRecord.sessionId,
2576
+ session: isObjectRecord(msgRecord.session) ? { id: msgRecord.session.id } : null,
2577
+ }).trim();
2557
2578
  if (!newSessionId) {
2558
2579
  return { threadStartedSessionId: null, notice: null };
2559
2580
  }
@@ -2676,10 +2697,10 @@ class ClaudeAgentSession {
2676
2697
  };
2677
2698
  }
2678
2699
  trackStreamEventUsage(event) {
2679
- if (!event || typeof event !== "object") {
2700
+ const streamEvent = toObjectRecord(event);
2701
+ if (!streamEvent) {
2680
2702
  return null;
2681
2703
  }
2682
- const streamEvent = event;
2683
2704
  const eventType = readTrimmedString(streamEvent.type);
2684
2705
  if (eventType === "message_start") {
2685
2706
  const inputTokens = readStreamRequestInputTokens(streamEvent);
@@ -2793,7 +2814,12 @@ class ClaudeAgentSession {
2793
2814
  }
2794
2815
  let entry;
2795
2816
  try {
2796
- entry = JSON.parse(trimmed);
2817
+ const parsed = JSON.parse(trimmed);
2818
+ const record = toObjectRecord(parsed);
2819
+ if (!record) {
2820
+ return;
2821
+ }
2822
+ entry = record;
2797
2823
  }
2798
2824
  catch {
2799
2825
  return;
@@ -3334,12 +3360,20 @@ function hasToolLikeBlock(block) {
3334
3360
  return type.includes("tool");
3335
3361
  }
3336
3362
  function readCompactionMetadata(source) {
3337
- const candidates = [source.compact_metadata, source.compactMetadata, source.compactionMetadata];
3363
+ const sourceRecord = toObjectRecord(source);
3364
+ if (!sourceRecord) {
3365
+ return null;
3366
+ }
3367
+ const candidates = [
3368
+ sourceRecord.compact_metadata,
3369
+ sourceRecord.compactMetadata,
3370
+ sourceRecord.compactionMetadata,
3371
+ ];
3338
3372
  for (const candidate of candidates) {
3339
- if (!candidate || typeof candidate !== "object") {
3373
+ const metadata = toObjectRecord(candidate);
3374
+ if (!metadata) {
3340
3375
  continue;
3341
3376
  }
3342
- const metadata = candidate;
3343
3377
  const trigger = typeof metadata.trigger === "string" ? metadata.trigger : undefined;
3344
3378
  const preTokensRaw = metadata.preTokens ?? metadata.pre_tokens;
3345
3379
  const preTokens = typeof preTokensRaw === "number" ? preTokensRaw : undefined;
@@ -3529,10 +3563,10 @@ function isFinishedAccumulator(acc) {
3529
3563
  return Boolean(acc.sessionId && acc.cwd && acc.title);
3530
3564
  }
3531
3565
  function applyClaudeSessionEntryToAccumulator(entryRaw, acc) {
3532
- if (!entryRaw || typeof entryRaw !== "object") {
3566
+ const entry = toObjectRecord(entryRaw);
3567
+ if (!entry) {
3533
3568
  return;
3534
3569
  }
3535
- const entry = entryRaw;
3536
3570
  if (entry.isSidechain) {
3537
3571
  return;
3538
3572
  }
@@ -3616,10 +3650,10 @@ async function parseClaudeSessionDescriptor(filePath, mtime) {
3616
3650
  };
3617
3651
  }
3618
3652
  function extractClaudeUserText(messageRaw) {
3619
- if (!messageRaw || typeof messageRaw !== "object") {
3653
+ const message = toObjectRecord(messageRaw);
3654
+ if (!message) {
3620
3655
  return null;
3621
3656
  }
3622
- const message = messageRaw;
3623
3657
  if (typeof message.content === "string") {
3624
3658
  const normalized = message.content.trim();
3625
3659
  return normalized && !isClaudeTranscriptNoiseText(normalized) ? normalized : null;
@@ -3628,12 +3662,11 @@ function extractClaudeUserText(messageRaw) {
3628
3662
  const normalized = message.text.trim();
3629
3663
  return normalized && !isClaudeTranscriptNoiseText(normalized) ? normalized : null;
3630
3664
  }
3631
- if (Array.isArray(message.content)) {
3665
+ if (isUnknownArray(message.content)) {
3632
3666
  for (const block of message.content) {
3633
- if (block &&
3634
- typeof block === "object" &&
3635
- typeof block.text === "string") {
3636
- const normalized = block.text.trim();
3667
+ const blockRecord = toObjectRecord(block);
3668
+ if (blockRecord && typeof blockRecord.text === "string") {
3669
+ const normalized = blockRecord.text.trim();
3637
3670
  if (normalized && !isClaudeTranscriptNoiseText(normalized)) {
3638
3671
  return normalized;
3639
3672
  }
@@ -3642,4 +3675,4 @@ function extractClaudeUserText(messageRaw) {
3642
3675
  }
3643
3676
  return null;
3644
3677
  }
3645
- //# sourceMappingURL=claude-agent.js.map
3678
+ //# sourceMappingURL=agent.js.map