@getpaseo/server 0.1.37 → 0.1.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/dist/scripts/dev-runner.js +1 -1
  2. package/dist/scripts/dev-runner.js.map +1 -1
  3. package/dist/scripts/{daemon-runner.js → supervisor-entrypoint.js} +7 -9
  4. package/dist/scripts/supervisor-entrypoint.js.map +1 -0
  5. package/dist/scripts/supervisor.js +17 -1
  6. package/dist/scripts/supervisor.js.map +1 -1
  7. package/dist/server/server/bootstrap.d.ts +0 -4
  8. package/dist/server/server/bootstrap.d.ts.map +1 -1
  9. package/dist/server/server/bootstrap.js +8 -22
  10. package/dist/server/server/bootstrap.js.map +1 -1
  11. package/dist/server/server/index.js +0 -4
  12. package/dist/server/server/index.js.map +1 -1
  13. package/dist/server/server/pid-lock.d.ts +7 -2
  14. package/dist/server/server/pid-lock.d.ts.map +1 -1
  15. package/dist/server/server/pid-lock.js +21 -0
  16. package/dist/server/server/pid-lock.js.map +1 -1
  17. package/dist/server/server/session.d.ts.map +1 -1
  18. package/dist/server/server/session.js +2 -2
  19. package/dist/server/server/session.js.map +1 -1
  20. package/dist/src/server/pid-lock.js +21 -0
  21. package/dist/src/server/pid-lock.js.map +1 -1
  22. package/package.json +3 -3
  23. package/dist/scripts/daemon-runner.js.map +0 -1
  24. package/dist/src/server/agent/activity-curator.js +0 -243
  25. package/dist/src/server/agent/activity-curator.js.map +0 -1
  26. package/dist/src/server/agent/agent-manager.js +0 -1855
  27. package/dist/src/server/agent/agent-manager.js.map +0 -1
  28. package/dist/src/server/agent/agent-metadata-generator.js +0 -161
  29. package/dist/src/server/agent/agent-metadata-generator.js.map +0 -1
  30. package/dist/src/server/agent/agent-projections.js +0 -254
  31. package/dist/src/server/agent/agent-projections.js.map +0 -1
  32. package/dist/src/server/agent/agent-response-loop.js +0 -304
  33. package/dist/src/server/agent/agent-response-loop.js.map +0 -1
  34. package/dist/src/server/agent/agent-sdk-types.js +0 -12
  35. package/dist/src/server/agent/agent-sdk-types.js.map +0 -1
  36. package/dist/src/server/agent/agent-storage.js +0 -302
  37. package/dist/src/server/agent/agent-storage.js.map +0 -1
  38. package/dist/src/server/agent/agent-title-limits.js +0 -3
  39. package/dist/src/server/agent/agent-title-limits.js.map +0 -1
  40. package/dist/src/server/agent/audio-utils.js +0 -19
  41. package/dist/src/server/agent/audio-utils.js.map +0 -1
  42. package/dist/src/server/agent/dictation-debug.js +0 -50
  43. package/dist/src/server/agent/dictation-debug.js.map +0 -1
  44. package/dist/src/server/agent/mcp-server.js +0 -754
  45. package/dist/src/server/agent/mcp-server.js.map +0 -1
  46. package/dist/src/server/agent/orchestrator-instructions.js +0 -51
  47. package/dist/src/server/agent/orchestrator-instructions.js.map +0 -1
  48. package/dist/src/server/agent/pcm16-resampler.js +0 -63
  49. package/dist/src/server/agent/pcm16-resampler.js.map +0 -1
  50. package/dist/src/server/agent/provider-launch-config.js +0 -213
  51. package/dist/src/server/agent/provider-launch-config.js.map +0 -1
  52. package/dist/src/server/agent/provider-manifest.js +0 -127
  53. package/dist/src/server/agent/provider-manifest.js.map +0 -1
  54. package/dist/src/server/agent/provider-registry.js +0 -45
  55. package/dist/src/server/agent/provider-registry.js.map +0 -1
  56. package/dist/src/server/agent/providers/claude/partial-json.js +0 -306
  57. package/dist/src/server/agent/providers/claude/partial-json.js.map +0 -1
  58. package/dist/src/server/agent/providers/claude/sdk-model-resolver.js +0 -104
  59. package/dist/src/server/agent/providers/claude/sdk-model-resolver.js.map +0 -1
  60. package/dist/src/server/agent/providers/claude/sidechain-tracker.js +0 -230
  61. package/dist/src/server/agent/providers/claude/sidechain-tracker.js.map +0 -1
  62. package/dist/src/server/agent/providers/claude/task-notification-tool-call.js +0 -267
  63. package/dist/src/server/agent/providers/claude/task-notification-tool-call.js.map +0 -1
  64. package/dist/src/server/agent/providers/claude/tool-call-detail-parser.js +0 -121
  65. package/dist/src/server/agent/providers/claude/tool-call-detail-parser.js.map +0 -1
  66. package/dist/src/server/agent/providers/claude/tool-call-mapper.js +0 -252
  67. package/dist/src/server/agent/providers/claude/tool-call-mapper.js.map +0 -1
  68. package/dist/src/server/agent/providers/claude-agent.js +0 -3166
  69. package/dist/src/server/agent/providers/claude-agent.js.map +0 -1
  70. package/dist/src/server/agent/providers/codex/tool-call-detail-parser.js +0 -104
  71. package/dist/src/server/agent/providers/codex/tool-call-detail-parser.js.map +0 -1
  72. package/dist/src/server/agent/providers/codex/tool-call-mapper.js +0 -758
  73. package/dist/src/server/agent/providers/codex/tool-call-mapper.js.map +0 -1
  74. package/dist/src/server/agent/providers/codex-app-server-agent.js +0 -2949
  75. package/dist/src/server/agent/providers/codex-app-server-agent.js.map +0 -1
  76. package/dist/src/server/agent/providers/codex-rollout-timeline.js +0 -544
  77. package/dist/src/server/agent/providers/codex-rollout-timeline.js.map +0 -1
  78. package/dist/src/server/agent/providers/opencode/tool-call-detail-parser.js +0 -39
  79. package/dist/src/server/agent/providers/opencode/tool-call-detail-parser.js.map +0 -1
  80. package/dist/src/server/agent/providers/opencode/tool-call-mapper.js +0 -144
  81. package/dist/src/server/agent/providers/opencode/tool-call-mapper.js.map +0 -1
  82. package/dist/src/server/agent/providers/opencode-agent.js +0 -1193
  83. package/dist/src/server/agent/providers/opencode-agent.js.map +0 -1
  84. package/dist/src/server/agent/providers/tool-call-detail-primitives.js +0 -686
  85. package/dist/src/server/agent/providers/tool-call-detail-primitives.js.map +0 -1
  86. package/dist/src/server/agent/providers/tool-call-mapper-utils.js +0 -115
  87. package/dist/src/server/agent/providers/tool-call-mapper-utils.js.map +0 -1
  88. package/dist/src/server/agent/recordings-debug.js +0 -19
  89. package/dist/src/server/agent/recordings-debug.js.map +0 -1
  90. package/dist/src/server/agent/stt-debug.js +0 -33
  91. package/dist/src/server/agent/stt-debug.js.map +0 -1
  92. package/dist/src/server/agent/stt-manager.js +0 -232
  93. package/dist/src/server/agent/stt-manager.js.map +0 -1
  94. package/dist/src/server/agent/timeline-append.js +0 -27
  95. package/dist/src/server/agent/timeline-append.js.map +0 -1
  96. package/dist/src/server/agent/timeline-projection.js +0 -215
  97. package/dist/src/server/agent/timeline-projection.js.map +0 -1
  98. package/dist/src/server/agent/tool-name-normalization.js +0 -45
  99. package/dist/src/server/agent/tool-name-normalization.js.map +0 -1
  100. package/dist/src/server/agent/tts-debug.js +0 -24
  101. package/dist/src/server/agent/tts-debug.js.map +0 -1
  102. package/dist/src/server/agent/tts-manager.js +0 -374
  103. package/dist/src/server/agent/tts-manager.js.map +0 -1
  104. package/dist/src/server/agent/wait-for-agent-tracker.js +0 -53
  105. package/dist/src/server/agent/wait-for-agent-tracker.js.map +0 -1
  106. package/dist/src/server/agent-attention-policy.js +0 -40
  107. package/dist/src/server/agent-attention-policy.js.map +0 -1
  108. package/dist/src/server/allowed-hosts.js +0 -94
  109. package/dist/src/server/allowed-hosts.js.map +0 -1
  110. package/dist/src/server/bootstrap.js +0 -620
  111. package/dist/src/server/bootstrap.js.map +0 -1
  112. package/dist/src/server/chat/chat-mentions.js +0 -71
  113. package/dist/src/server/chat/chat-mentions.js.map +0 -1
  114. package/dist/src/server/chat/chat-rpc-schemas.js +0 -103
  115. package/dist/src/server/chat/chat-rpc-schemas.js.map +0 -1
  116. package/dist/src/server/chat/chat-service.js +0 -330
  117. package/dist/src/server/chat/chat-service.js.map +0 -1
  118. package/dist/src/server/chat/chat-types.js +0 -22
  119. package/dist/src/server/chat/chat-types.js.map +0 -1
  120. package/dist/src/server/checkout-diff-manager.js +0 -272
  121. package/dist/src/server/checkout-diff-manager.js.map +0 -1
  122. package/dist/src/server/checkout-git-utils.js +0 -37
  123. package/dist/src/server/checkout-git-utils.js.map +0 -1
  124. package/dist/src/server/client-message-id.js +0 -12
  125. package/dist/src/server/client-message-id.js.map +0 -1
  126. package/dist/src/server/config.js +0 -73
  127. package/dist/src/server/config.js.map +0 -1
  128. package/dist/src/server/connection-offer.js +0 -59
  129. package/dist/src/server/connection-offer.js.map +0 -1
  130. package/dist/src/server/daemon-keypair.js +0 -40
  131. package/dist/src/server/daemon-keypair.js.map +0 -1
  132. package/dist/src/server/daemon-version.js +0 -22
  133. package/dist/src/server/daemon-version.js.map +0 -1
  134. package/dist/src/server/dictation/dictation-stream-manager.js +0 -571
  135. package/dist/src/server/dictation/dictation-stream-manager.js.map +0 -1
  136. package/dist/src/server/file-download/token-store.js +0 -40
  137. package/dist/src/server/file-download/token-store.js.map +0 -1
  138. package/dist/src/server/file-explorer/service.js +0 -180
  139. package/dist/src/server/file-explorer/service.js.map +0 -1
  140. package/dist/src/server/json-utils.js +0 -45
  141. package/dist/src/server/json-utils.js.map +0 -1
  142. package/dist/src/server/loop/rpc-schemas.js +0 -159
  143. package/dist/src/server/loop/rpc-schemas.js.map +0 -1
  144. package/dist/src/server/loop-service.js +0 -741
  145. package/dist/src/server/loop-service.js.map +0 -1
  146. package/dist/src/server/messages.js +0 -29
  147. package/dist/src/server/messages.js.map +0 -1
  148. package/dist/src/server/package-version.js +0 -46
  149. package/dist/src/server/package-version.js.map +0 -1
  150. package/dist/src/server/pairing-offer.js +0 -45
  151. package/dist/src/server/pairing-offer.js.map +0 -1
  152. package/dist/src/server/pairing-qr.js +0 -45
  153. package/dist/src/server/pairing-qr.js.map +0 -1
  154. package/dist/src/server/path-utils.js +0 -20
  155. package/dist/src/server/path-utils.js.map +0 -1
  156. package/dist/src/server/persisted-config.js +0 -265
  157. package/dist/src/server/persisted-config.js.map +0 -1
  158. package/dist/src/server/persistence-hooks.js +0 -60
  159. package/dist/src/server/persistence-hooks.js.map +0 -1
  160. package/dist/src/server/push/push-service.js +0 -68
  161. package/dist/src/server/push/push-service.js.map +0 -1
  162. package/dist/src/server/push/token-store.js +0 -70
  163. package/dist/src/server/push/token-store.js.map +0 -1
  164. package/dist/src/server/relay-transport.js +0 -461
  165. package/dist/src/server/relay-transport.js.map +0 -1
  166. package/dist/src/server/schedule/cron.js +0 -103
  167. package/dist/src/server/schedule/cron.js.map +0 -1
  168. package/dist/src/server/schedule/rpc-schemas.js +0 -112
  169. package/dist/src/server/schedule/rpc-schemas.js.map +0 -1
  170. package/dist/src/server/schedule/service.js +0 -397
  171. package/dist/src/server/schedule/service.js.map +0 -1
  172. package/dist/src/server/schedule/store.js +0 -56
  173. package/dist/src/server/schedule/store.js.map +0 -1
  174. package/dist/src/server/schedule/types.js +0 -73
  175. package/dist/src/server/schedule/types.js.map +0 -1
  176. package/dist/src/server/server-id.js +0 -63
  177. package/dist/src/server/server-id.js.map +0 -1
  178. package/dist/src/server/session.js +0 -6381
  179. package/dist/src/server/session.js.map +0 -1
  180. package/dist/src/server/speech/audio.js +0 -101
  181. package/dist/src/server/speech/audio.js.map +0 -1
  182. package/dist/src/server/speech/provider-resolver.js +0 -7
  183. package/dist/src/server/speech/provider-resolver.js.map +0 -1
  184. package/dist/src/server/speech/providers/local/config.js +0 -74
  185. package/dist/src/server/speech/providers/local/config.js.map +0 -1
  186. package/dist/src/server/speech/providers/local/models.js +0 -17
  187. package/dist/src/server/speech/providers/local/models.js.map +0 -1
  188. package/dist/src/server/speech/providers/local/pocket/pocket-tts-onnx.js +0 -436
  189. package/dist/src/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +0 -1
  190. package/dist/src/server/speech/providers/local/runtime.js +0 -238
  191. package/dist/src/server/speech/providers/local/runtime.js.map +0 -1
  192. package/dist/src/server/speech/providers/local/sherpa/model-catalog.js +0 -166
  193. package/dist/src/server/speech/providers/local/sherpa/model-catalog.js.map +0 -1
  194. package/dist/src/server/speech/providers/local/sherpa/model-downloader.js +0 -165
  195. package/dist/src/server/speech/providers/local/sherpa/model-downloader.js.map +0 -1
  196. package/dist/src/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js +0 -73
  197. package/dist/src/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js.map +0 -1
  198. package/dist/src/server/speech/providers/local/sherpa/sherpa-online-recognizer.js +0 -84
  199. package/dist/src/server/speech/providers/local/sherpa/sherpa-online-recognizer.js.map +0 -1
  200. package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-loader.js +0 -11
  201. package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-loader.js.map +0 -1
  202. package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +0 -102
  203. package/dist/src/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js.map +0 -1
  204. package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +0 -135
  205. package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js.map +0 -1
  206. package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +0 -130
  207. package/dist/src/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js.map +0 -1
  208. package/dist/src/server/speech/providers/local/sherpa/sherpa-realtime-session.js +0 -110
  209. package/dist/src/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +0 -1
  210. package/dist/src/server/speech/providers/local/sherpa/sherpa-stt.js +0 -138
  211. package/dist/src/server/speech/providers/local/sherpa/sherpa-stt.js.map +0 -1
  212. package/dist/src/server/speech/providers/local/sherpa/sherpa-tts.js +0 -98
  213. package/dist/src/server/speech/providers/local/sherpa/sherpa-tts.js.map +0 -1
  214. package/dist/src/server/speech/providers/local/sherpa/silero-vad-provider.js +0 -23
  215. package/dist/src/server/speech/providers/local/sherpa/silero-vad-provider.js.map +0 -1
  216. package/dist/src/server/speech/providers/local/sherpa/silero-vad-session.js +0 -107
  217. package/dist/src/server/speech/providers/local/sherpa/silero-vad-session.js.map +0 -1
  218. package/dist/src/server/speech/providers/openai/config.js +0 -80
  219. package/dist/src/server/speech/providers/openai/config.js.map +0 -1
  220. package/dist/src/server/speech/providers/openai/realtime-transcription-session.js +0 -168
  221. package/dist/src/server/speech/providers/openai/realtime-transcription-session.js.map +0 -1
  222. package/dist/src/server/speech/providers/openai/runtime.js +0 -112
  223. package/dist/src/server/speech/providers/openai/runtime.js.map +0 -1
  224. package/dist/src/server/speech/providers/openai/stt.js +0 -206
  225. package/dist/src/server/speech/providers/openai/stt.js.map +0 -1
  226. package/dist/src/server/speech/providers/openai/tts.js +0 -46
  227. package/dist/src/server/speech/providers/openai/tts.js.map +0 -1
  228. package/dist/src/server/speech/speech-config-resolver.js +0 -102
  229. package/dist/src/server/speech/speech-config-resolver.js.map +0 -1
  230. package/dist/src/server/speech/speech-provider.js +0 -2
  231. package/dist/src/server/speech/speech-provider.js.map +0 -1
  232. package/dist/src/server/speech/speech-runtime.js +0 -530
  233. package/dist/src/server/speech/speech-runtime.js.map +0 -1
  234. package/dist/src/server/speech/speech-types.js +0 -8
  235. package/dist/src/server/speech/speech-types.js.map +0 -1
  236. package/dist/src/server/speech/turn-detection-provider.js +0 -2
  237. package/dist/src/server/speech/turn-detection-provider.js.map +0 -1
  238. package/dist/src/server/utils/diff-highlighter.js +0 -257
  239. package/dist/src/server/utils/diff-highlighter.js.map +0 -1
  240. package/dist/src/server/voice/fixed-duration-pcm-ring-buffer.js +0 -35
  241. package/dist/src/server/voice/fixed-duration-pcm-ring-buffer.js.map +0 -1
  242. package/dist/src/server/voice/voice-turn-controller.js +0 -159
  243. package/dist/src/server/voice/voice-turn-controller.js.map +0 -1
  244. package/dist/src/server/voice-config.js +0 -51
  245. package/dist/src/server/voice-config.js.map +0 -1
  246. package/dist/src/server/voice-mcp-bridge-command.js +0 -31
  247. package/dist/src/server/voice-mcp-bridge-command.js.map +0 -1
  248. package/dist/src/server/voice-mcp-bridge.js +0 -109
  249. package/dist/src/server/voice-mcp-bridge.js.map +0 -1
  250. package/dist/src/server/voice-permission-policy.js +0 -13
  251. package/dist/src/server/voice-permission-policy.js.map +0 -1
  252. package/dist/src/server/voice-types.js +0 -2
  253. package/dist/src/server/voice-types.js.map +0 -1
  254. package/dist/src/server/websocket-server.js +0 -1048
  255. package/dist/src/server/websocket-server.js.map +0 -1
  256. package/dist/src/server/workspace-registry-bootstrap.js +0 -98
  257. package/dist/src/server/workspace-registry-bootstrap.js.map +0 -1
  258. package/dist/src/server/workspace-registry-model.js +0 -175
  259. package/dist/src/server/workspace-registry-model.js.map +0 -1
  260. package/dist/src/server/workspace-registry.js +0 -151
  261. package/dist/src/server/workspace-registry.js.map +0 -1
  262. package/dist/src/server/worktree-bootstrap.js +0 -508
  263. package/dist/src/server/worktree-bootstrap.js.map +0 -1
  264. package/dist/src/shared/agent-attention-notification.js +0 -130
  265. package/dist/src/shared/agent-attention-notification.js.map +0 -1
  266. package/dist/src/shared/agent-lifecycle.js +0 -8
  267. package/dist/src/shared/agent-lifecycle.js.map +0 -1
  268. package/dist/src/shared/connection-offer.js +0 -17
  269. package/dist/src/shared/connection-offer.js.map +0 -1
  270. package/dist/src/shared/daemon-endpoints.js +0 -122
  271. package/dist/src/shared/daemon-endpoints.js.map +0 -1
  272. package/dist/src/shared/messages.js +0 -2107
  273. package/dist/src/shared/messages.js.map +0 -1
  274. package/dist/src/shared/path-utils.js +0 -16
  275. package/dist/src/shared/path-utils.js.map +0 -1
  276. package/dist/src/shared/terminal-stream-protocol.js +0 -99
  277. package/dist/src/shared/terminal-stream-protocol.js.map +0 -1
  278. package/dist/src/shared/tool-call-display.js +0 -122
  279. package/dist/src/shared/tool-call-display.js.map +0 -1
  280. package/dist/src/terminal/terminal-manager.js +0 -136
  281. package/dist/src/terminal/terminal-manager.js.map +0 -1
  282. package/dist/src/terminal/terminal.js +0 -333
  283. package/dist/src/terminal/terminal.js.map +0 -1
  284. package/dist/src/utils/checkout-git.js +0 -1518
  285. package/dist/src/utils/checkout-git.js.map +0 -1
  286. package/dist/src/utils/directory-suggestions.js +0 -671
  287. package/dist/src/utils/directory-suggestions.js.map +0 -1
  288. package/dist/src/utils/path.js +0 -15
  289. package/dist/src/utils/path.js.map +0 -1
  290. package/dist/src/utils/project-icon.js +0 -389
  291. package/dist/src/utils/project-icon.js.map +0 -1
  292. package/dist/src/utils/worktree-metadata.js +0 -116
  293. package/dist/src/utils/worktree-metadata.js.map +0 -1
  294. package/dist/src/utils/worktree.js +0 -744
  295. package/dist/src/utils/worktree.js.map +0 -1
@@ -1,8 +0,0 @@
1
- import { z } from "zod";
2
- export const SpeechProviderIdSchema = z.enum(["openai", "local"]);
3
- export const RequestedSpeechProviderSchema = z.object({
4
- provider: SpeechProviderIdSchema,
5
- explicit: z.boolean(),
6
- enabled: z.boolean().optional(),
7
- });
8
- //# sourceMappingURL=speech-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"speech-types.js","sourceRoot":"","sources":["../../../../src/server/speech/speech-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAGlE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,QAAQ,EAAE,sBAAsB;IAChC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;IACrB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=turn-detection-provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"turn-detection-provider.js","sourceRoot":"","sources":["../../../../src/server/speech/turn-detection-provider.ts"],"names":[],"mappings":""}
@@ -1,257 +0,0 @@
1
- import { readFile } from "node:fs/promises";
2
- import { resolve } from "node:path";
3
- import { highlightCode, isLanguageSupported } from "@getpaseo/highlight";
4
- /**
5
- * Parse a unified diff into structured data
6
- */
7
- export function parseDiff(diffText) {
8
- if (!diffText || diffText.trim().length === 0) {
9
- return [];
10
- }
11
- const files = [];
12
- const fileSections = diffText.split(/^diff --git /m).filter(Boolean);
13
- for (const section of fileSections) {
14
- const lines = section.split("\n");
15
- const firstLine = lines[0];
16
- // Detect new/deleted file
17
- const isNew = section.includes("new file mode") || section.includes("--- /dev/null");
18
- const isDeleted = section.includes("deleted file mode") || section.includes("+++ /dev/null");
19
- // Extract path
20
- let path = "unknown";
21
- const pathMatch = firstLine.match(/a\/(.*?) b\//);
22
- if (pathMatch) {
23
- path = pathMatch[1];
24
- }
25
- else {
26
- const newFileMatch = firstLine.match(/b\/(.+)$/);
27
- if (newFileMatch) {
28
- path = newFileMatch[1];
29
- }
30
- }
31
- const hunks = [];
32
- let currentHunk = null;
33
- let additions = 0;
34
- let deletions = 0;
35
- for (let i = 1; i < lines.length; i++) {
36
- const line = lines[i];
37
- // Skip metadata lines
38
- if (line.startsWith("index "))
39
- continue;
40
- if (line.startsWith("--- "))
41
- continue;
42
- if (line.startsWith("+++ "))
43
- continue;
44
- if (line.startsWith("new file mode"))
45
- continue;
46
- if (line.startsWith("deleted file mode"))
47
- continue;
48
- // Parse hunk header: @@ -oldStart,oldCount +newStart,newCount @@
49
- const hunkMatch = line.match(/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);
50
- if (hunkMatch) {
51
- if (currentHunk) {
52
- hunks.push(currentHunk);
53
- }
54
- currentHunk = {
55
- oldStart: parseInt(hunkMatch[1], 10),
56
- oldCount: parseInt(hunkMatch[2] ?? "1", 10),
57
- newStart: parseInt(hunkMatch[3], 10),
58
- newCount: parseInt(hunkMatch[4] ?? "1", 10),
59
- lines: [{ type: "header", content: line.match(/^(@@ .+? @@)/)?.[1] ?? line }],
60
- };
61
- continue;
62
- }
63
- if (!currentHunk)
64
- continue;
65
- if (line.startsWith("+")) {
66
- currentHunk.lines.push({ type: "add", content: line.slice(1) });
67
- additions++;
68
- }
69
- else if (line.startsWith("-")) {
70
- currentHunk.lines.push({ type: "remove", content: line.slice(1) });
71
- deletions++;
72
- }
73
- else if (line.startsWith(" ")) {
74
- currentHunk.lines.push({ type: "context", content: line.slice(1) });
75
- }
76
- else if (line.length > 0 && !line.startsWith("\\")) {
77
- // Non-empty line that's not a "\ No newline" marker
78
- currentHunk.lines.push({ type: "context", content: line });
79
- }
80
- }
81
- if (currentHunk) {
82
- hunks.push(currentHunk);
83
- }
84
- files.push({ path, isNew, isDeleted, additions, deletions, hunks });
85
- }
86
- return files;
87
- }
88
- /**
89
- * Reconstruct the "new" version of a file from diff hunks.
90
- * Returns a map of new line numbers to their content.
91
- */
92
- export function reconstructNewFile(hunks) {
93
- const lines = new Map();
94
- for (const hunk of hunks) {
95
- let newLineNum = hunk.newStart;
96
- for (const line of hunk.lines) {
97
- if (line.type === "header")
98
- continue;
99
- if (line.type === "add" || line.type === "context") {
100
- lines.set(newLineNum, line.content);
101
- newLineNum++;
102
- }
103
- }
104
- }
105
- return lines;
106
- }
107
- /**
108
- * Reconstruct the "old" version of a file from diff hunks.
109
- * Returns a map of old line numbers to their content.
110
- */
111
- export function reconstructOldFile(hunks) {
112
- const lines = new Map();
113
- for (const hunk of hunks) {
114
- let oldLineNum = hunk.oldStart;
115
- for (const line of hunk.lines) {
116
- if (line.type === "header")
117
- continue;
118
- if (line.type === "remove" || line.type === "context") {
119
- lines.set(oldLineNum, line.content);
120
- oldLineNum++;
121
- }
122
- }
123
- }
124
- return lines;
125
- }
126
- function buildFileContent(lineMap) {
127
- if (lineMap.size === 0)
128
- return "";
129
- const lineNumbers = Array.from(lineMap.keys()).sort((a, b) => a - b);
130
- const minLine = lineNumbers[0];
131
- const maxLine = lineNumbers[lineNumbers.length - 1];
132
- const lines = [];
133
- for (let i = minLine; i <= maxLine; i++) {
134
- lines.push(lineMap.get(i) ?? "");
135
- }
136
- return lines.join("\n");
137
- }
138
- function buildTokenLookup(lineMap, highlighted) {
139
- const lookup = new Map();
140
- if (lineMap.size === 0)
141
- return lookup;
142
- const lineNumbers = Array.from(lineMap.keys()).sort((a, b) => a - b);
143
- const minLine = lineNumbers[0];
144
- for (let i = 0; i < highlighted.length; i++) {
145
- const lineNum = minLine + i;
146
- if (lineMap.has(lineNum)) {
147
- lookup.set(lineNum, highlighted[i]);
148
- }
149
- }
150
- return lookup;
151
- }
152
- function buildFullFileTokenLookup(fileContent, path) {
153
- const lookup = new Map();
154
- const highlighted = highlightCode(fileContent, path);
155
- for (let i = 0; i < highlighted.length; i++) {
156
- lookup.set(i + 1, highlighted[i]);
157
- }
158
- return lookup;
159
- }
160
- function buildReconstructedTokenLookups(file) {
161
- const newFileLines = reconstructNewFile(file.hunks);
162
- const oldFileLines = reconstructOldFile(file.hunks);
163
- const newFileContent = buildFileContent(newFileLines);
164
- const oldFileContent = buildFileContent(oldFileLines);
165
- const newHighlighted = highlightCode(newFileContent, file.path);
166
- const oldHighlighted = highlightCode(oldFileContent, file.path);
167
- return {
168
- newTokensByLine: buildTokenLookup(newFileLines, newHighlighted),
169
- oldTokensByLine: buildTokenLookup(oldFileLines, oldHighlighted),
170
- };
171
- }
172
- /**
173
- * Apply syntax highlighting to diff hunks using reconstructed file content.
174
- * This is the fallback when actual file content is not available.
175
- */
176
- export function highlightDiffFromHunks(file) {
177
- if (!isLanguageSupported(file.path)) {
178
- return file;
179
- }
180
- const { newTokensByLine, oldTokensByLine } = buildReconstructedTokenLookups(file);
181
- return applyTokensToHunks(file, newTokensByLine, oldTokensByLine);
182
- }
183
- /**
184
- * Apply syntax highlighting to diff hunks using actual file content.
185
- * This provides better context for the parser.
186
- */
187
- export async function highlightDiffWithFileContent(file, cwd, options = {}) {
188
- if (!isLanguageSupported(file.path)) {
189
- return file;
190
- }
191
- const reconstructedTokens = buildReconstructedTokenLookups(file);
192
- let newTokensByLine = reconstructedTokens.newTokensByLine;
193
- let oldTokensByLine = reconstructedTokens.oldTokensByLine;
194
- if (typeof options.oldFileContent === "string") {
195
- oldTokensByLine = buildFullFileTokenLookup(options.oldFileContent, file.path);
196
- }
197
- if (typeof options.newFileContent === "string") {
198
- newTokensByLine = buildFullFileTokenLookup(options.newFileContent, file.path);
199
- return applyTokensToHunks(file, newTokensByLine, oldTokensByLine);
200
- }
201
- const filePath = resolve(cwd, file.path);
202
- try {
203
- const fileContent = await readFile(filePath, "utf-8");
204
- newTokensByLine = buildFullFileTokenLookup(fileContent, file.path);
205
- }
206
- catch {
207
- // If file read fails (deleted file, etc.), fall back to reconstructed new-side tokens.
208
- }
209
- return applyTokensToHunks(file, newTokensByLine, oldTokensByLine);
210
- }
211
- function applyTokensToHunks(file, newTokensByLine, oldTokensByLine) {
212
- const highlightedHunks = file.hunks.map((hunk) => {
213
- let oldLineNum = hunk.oldStart;
214
- let newLineNum = hunk.newStart;
215
- const highlightedLines = hunk.lines.map((line) => {
216
- if (line.type === "header") {
217
- return line;
218
- }
219
- let tokens;
220
- if (line.type === "add") {
221
- tokens = newTokensByLine.get(newLineNum);
222
- newLineNum++;
223
- }
224
- else if (line.type === "remove") {
225
- tokens = oldTokensByLine.get(oldLineNum);
226
- oldLineNum++;
227
- }
228
- else if (line.type === "context") {
229
- // Context lines exist in both - use new file version
230
- tokens = newTokensByLine.get(newLineNum);
231
- oldLineNum++;
232
- newLineNum++;
233
- }
234
- return tokens ? { ...line, tokens } : line;
235
- });
236
- return { ...hunk, lines: highlightedLines };
237
- });
238
- return { ...file, hunks: highlightedHunks };
239
- }
240
- /**
241
- * Parse and highlight a complete diff, using actual file content when available.
242
- */
243
- export async function parseAndHighlightDiff(diffText, cwd, options = {}) {
244
- const files = parseDiff(diffText);
245
- const highlightedFiles = await Promise.all(files.map(async (file) => {
246
- const [oldFileContent, newFileContent] = await Promise.all([
247
- options.getOldFileContent?.(file),
248
- options.getNewFileContent?.(file),
249
- ]);
250
- return highlightDiffWithFileContent(file, cwd, {
251
- oldFileContent: oldFileContent ?? undefined,
252
- newFileContent: newFileContent ?? undefined,
253
- });
254
- }));
255
- return highlightedFiles;
256
- }
257
- //# sourceMappingURL=diff-highlighter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diff-highlighter.js","sourceRoot":"","sources":["../../../../src/server/utils/diff-highlighter.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- export class FixedDurationPcmRingBuffer {
2
- constructor(params) {
3
- this.chunks = [];
4
- this.totalBytes = 0;
5
- const bytesPerSecond = params.sampleRate * params.channels * (params.bitsPerSample / 8);
6
- this.maxBytes = Math.max(1, Math.round((bytesPerSecond * params.durationMs) / 1000));
7
- }
8
- append(chunk) {
9
- if (chunk.length === 0) {
10
- return;
11
- }
12
- this.chunks.push(chunk);
13
- this.totalBytes += chunk.length;
14
- while (this.totalBytes > this.maxBytes && this.chunks.length > 0) {
15
- const removed = this.chunks.shift();
16
- if (!removed) {
17
- break;
18
- }
19
- this.totalBytes -= removed.length;
20
- }
21
- }
22
- drain() {
23
- const combined = Buffer.concat(this.chunks);
24
- this.clear();
25
- return combined;
26
- }
27
- get byteLength() {
28
- return this.totalBytes;
29
- }
30
- clear() {
31
- this.chunks = [];
32
- this.totalBytes = 0;
33
- }
34
- }
35
- //# sourceMappingURL=fixed-duration-pcm-ring-buffer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fixed-duration-pcm-ring-buffer.js","sourceRoot":"","sources":["../../../../src/server/voice/fixed-duration-pcm-ring-buffer.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,0BAA0B;IAKrC,YAAY,MAKX;QARO,WAAM,GAAa,EAAE,CAAC;QACtB,eAAU,GAAG,CAAC,CAAC;QAQrB,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;QAEhC,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM;YACR,CAAC;YACD,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;QACpC,CAAC;IACH,CAAC;IAED,KAAK;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACtB,CAAC;CACF"}
@@ -1,159 +0,0 @@
1
- import { Buffer } from "node:buffer";
2
- import { v4 as uuidv4 } from "uuid";
3
- import { Pcm16MonoResampler } from "../agent/pcm16-resampler.js";
4
- import { parsePcmRateFromFormat } from "../speech/audio.js";
5
- import { FixedDurationPcmRingBuffer } from "./fixed-duration-pcm-ring-buffer.js";
6
- const PCM_CHANNELS = 1;
7
- const PCM_BITS_PER_SAMPLE = 16;
8
- const DEFAULT_PREFIX_DURATION_MS = 400;
9
- export function createVoiceTurnController(params) {
10
- const detector = params.turnDetection.createSession({
11
- logger: params.logger.child({ component: "turn-detection" }),
12
- });
13
- const prefixBuffer = new FixedDurationPcmRingBuffer({
14
- sampleRate: detector.requiredSampleRate,
15
- channels: PCM_CHANNELS,
16
- bitsPerSample: PCM_BITS_PER_SAMPLE,
17
- durationMs: params.prefixDurationMs ?? DEFAULT_PREFIX_DURATION_MS,
18
- });
19
- let state = { status: "idle" };
20
- let resampler = null;
21
- let inputRate = detector.requiredSampleRate;
22
- let utteranceChunks = [];
23
- let queued = Promise.resolve();
24
- let submissionQueue = Promise.resolve();
25
- function buildVoicePcmFormat(sampleRate) {
26
- return `audio/pcm;rate=${sampleRate};bits=16`;
27
- }
28
- function fail(error) {
29
- params.callbacks.onError(error instanceof Error ? error : new Error(String(error)));
30
- }
31
- function runSerial(task) {
32
- queued = queued.then(task).catch((error) => {
33
- fail(error);
34
- });
35
- return queued;
36
- }
37
- function enqueueUtteranceSubmission(utterance) {
38
- submissionQueue = submissionQueue
39
- .then(async () => {
40
- await params.utteranceSink.submitUtterance(utterance);
41
- })
42
- .catch((error) => {
43
- fail(error);
44
- });
45
- }
46
- async function handleSpeechStarted() {
47
- if (state.status === "capturing") {
48
- return;
49
- }
50
- await params.callbacks.onSpeechStarted();
51
- const prefix = prefixBuffer.drain();
52
- const startedAt = Date.now();
53
- utteranceChunks = prefix.length > 0 ? [prefix] : [];
54
- state = {
55
- status: "capturing",
56
- utteranceId: uuidv4(),
57
- startedAt,
58
- rollingPrefixBytes: prefixBuffer.byteLength,
59
- utteranceBytes: prefix.length,
60
- };
61
- params.logger.info({
62
- utteranceId: state.utteranceId,
63
- prefixBytes: prefix.length,
64
- rollingPrefixBytes: prefixBuffer.byteLength,
65
- }, "voice_turn.speech_started");
66
- }
67
- async function handleSpeechStopped() {
68
- if (state.status !== "capturing") {
69
- return;
70
- }
71
- const utterance = Buffer.concat(utteranceChunks);
72
- const startedAt = state.startedAt;
73
- const endedAt = Date.now();
74
- utteranceChunks = [];
75
- state = { status: "listening", rollingPrefixBytes: prefixBuffer.byteLength };
76
- await params.callbacks.onSpeechStopped();
77
- params.logger.info({
78
- utteranceBytes: utterance.length,
79
- utteranceAgeMs: Math.max(0, endedAt - startedAt),
80
- }, "voice_turn.speech_stopped");
81
- if (utterance.length === 0) {
82
- return;
83
- }
84
- enqueueUtteranceSubmission({
85
- pcm16: utterance,
86
- sampleRate: detector.requiredSampleRate,
87
- format: buildVoicePcmFormat(detector.requiredSampleRate),
88
- startedAt,
89
- endedAt,
90
- });
91
- }
92
- detector.on("speech_started", () => {
93
- void runSerial(handleSpeechStarted);
94
- });
95
- detector.on("speech_stopped", () => {
96
- void runSerial(handleSpeechStopped);
97
- });
98
- detector.on("error", fail);
99
- return {
100
- async start() {
101
- await detector.connect();
102
- state = { status: "listening", rollingPrefixBytes: prefixBuffer.byteLength };
103
- },
104
- async stop() {
105
- await runSerial(async () => {
106
- detector.close();
107
- prefixBuffer.clear();
108
- utteranceChunks = [];
109
- resampler?.reset();
110
- resampler = null;
111
- state = { status: "idle" };
112
- });
113
- },
114
- async appendClientChunk(input) {
115
- await runSerial(async () => {
116
- if (state.status === "idle") {
117
- return;
118
- }
119
- const pcm16 = Buffer.from(input.audioBase64, "base64");
120
- if (pcm16.length === 0) {
121
- return;
122
- }
123
- const parsedInputRate = parsePcmRateFromFormat(input.format, detector.requiredSampleRate) ??
124
- detector.requiredSampleRate;
125
- if (parsedInputRate !== inputRate) {
126
- inputRate = parsedInputRate;
127
- resampler =
128
- inputRate === detector.requiredSampleRate
129
- ? null
130
- : new Pcm16MonoResampler({
131
- inputRate,
132
- outputRate: detector.requiredSampleRate,
133
- });
134
- }
135
- const normalized = resampler === null ? pcm16 : resampler.processChunk(pcm16);
136
- if (normalized.length === 0) {
137
- return;
138
- }
139
- prefixBuffer.append(normalized);
140
- if (state.status === "listening") {
141
- state = {
142
- status: "listening",
143
- rollingPrefixBytes: prefixBuffer.byteLength,
144
- };
145
- }
146
- else if (state.status === "capturing") {
147
- utteranceChunks.push(normalized);
148
- state = {
149
- ...state,
150
- rollingPrefixBytes: prefixBuffer.byteLength,
151
- utteranceBytes: state.utteranceBytes + normalized.length,
152
- };
153
- }
154
- detector.appendPcm16(normalized);
155
- });
156
- },
157
- };
158
- }
159
- //# sourceMappingURL=voice-turn-controller.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"voice-turn-controller.js","sourceRoot":"","sources":["../../../../src/server/voice/voice-turn-controller.ts"],"names":[],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- const VOICE_PROMPT_BLOCK_START = "<paseo_voice_mode>";
2
- const VOICE_PROMPT_BLOCK_END = "</paseo_voice_mode>";
3
- const VOICE_AGENT_SYSTEM_INSTRUCTION = [
4
- "Paseo voice mode is now on.",
5
- "You are the Paseo voice assistant.",
6
- "The user cannot see your chat messages or tool calls.",
7
- "Always use the speak tool for all user-facing communication.",
8
- "Before calling any non-speak tool, first call speak with a short acknowledgement of what you heard and what you will do next.",
9
- "For long-running work, use speak to provide progress updates before and during execution.",
10
- "Treat the user input as transcribed speech.",
11
- "If the user intent is clear, proceed without extra confirmation.",
12
- "If the transcription seems incomplete, cut off, ambiguous, or may contain a non-obvious mistake or misspelling, ask a clarifying question via speak before taking action.",
13
- "Use concise plain language suitable for speech output.",
14
- ].join(" ");
15
- const VOICE_AGENT_DISABLED_INSTRUCTION = [
16
- "Paseo voice mode is now off.",
17
- "Ignore any earlier Paseo voice mode instructions in this thread.",
18
- ].join(" ");
19
- function escapeRegExp(value) {
20
- return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
21
- }
22
- function makeVoicePromptBlockRegex() {
23
- return new RegExp(`${escapeRegExp(VOICE_PROMPT_BLOCK_START)}[\\s\\S]*?${escapeRegExp(VOICE_PROMPT_BLOCK_END)}`, "g");
24
- }
25
- export function stripVoiceModeSystemPrompt(existing) {
26
- const trimmed = existing?.trim();
27
- if (!trimmed) {
28
- return undefined;
29
- }
30
- const stripped = trimmed.replace(makeVoicePromptBlockRegex(), "").trim();
31
- return stripped.length > 0 ? stripped : undefined;
32
- }
33
- export function buildVoiceModeSystemPrompt(existing, enabled) {
34
- const basePrompt = stripVoiceModeSystemPrompt(existing);
35
- const voiceInstruction = enabled
36
- ? VOICE_AGENT_SYSTEM_INSTRUCTION
37
- : VOICE_AGENT_DISABLED_INSTRUCTION;
38
- const voiceBlock = [VOICE_PROMPT_BLOCK_START, voiceInstruction, VOICE_PROMPT_BLOCK_END].join("\n");
39
- return [basePrompt, voiceBlock]
40
- .filter((entry) => typeof entry === "string" && entry.length > 0)
41
- .join("\n\n");
42
- }
43
- export function buildVoiceAgentMcpServerConfig(params) {
44
- return {
45
- type: "stdio",
46
- command: params.command,
47
- args: [...params.baseArgs, "--socket", params.socketPath],
48
- ...(params.env ? { env: params.env } : {}),
49
- };
50
- }
51
- //# sourceMappingURL=voice-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"voice-config.js","sourceRoot":"","sources":["../../../src/server/voice-config.ts"],"names":[],"mappings":"AAAA,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AACtD,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAErD,MAAM,8BAA8B,GAAG;IACrC,6BAA6B;IAC7B,oCAAoC;IACpC,uDAAuD;IACvD,8DAA8D;IAC9D,+HAA+H;IAC/H,2FAA2F;IAC3F,6CAA6C;IAC7C,kEAAkE;IAClE,2KAA2K;IAC3K,wDAAwD;CACzD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,MAAM,gCAAgC,GAAG;IACvC,8BAA8B;IAC9B,kEAAkE;CACnE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,yBAAyB;IAChC,OAAO,IAAI,MAAM,CACf,GAAG,YAAY,CAAC,wBAAwB,CAAC,aAAa,YAAY,CAAC,sBAAsB,CAAC,EAAE,EAC5F,GAAG,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAAiB;IAC1D,MAAM,OAAO,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzE,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAA4B,EAAE,OAAgB;IACvF,MAAM,UAAU,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,OAAO;QAC9B,CAAC,CAAC,8BAA8B;QAChC,CAAC,CAAC,gCAAgC,CAAC;IACrC,MAAM,UAAU,GAAG,CAAC,wBAAwB,EAAE,gBAAgB,EAAE,sBAAsB,CAAC,CAAC,IAAI,CAC1F,IAAI,CACL,CAAC;IAEF,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;SACjF,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAK9C;IAMC,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;QACzD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3C,CAAC;AACJ,CAAC"}
@@ -1,31 +0,0 @@
1
- import { existsSync } from "node:fs";
2
- import { fileURLToPath } from "node:url";
3
- const DEFAULT_BRIDGE_SCRIPT_RELATIVE_URL = "../../scripts/mcp-stdio-socket-bridge-cli.mjs";
4
- export function resolveVoiceMcpBridgeScriptPath(params) {
5
- const explicitScriptPath = params.explicitScriptPath?.trim();
6
- if (explicitScriptPath) {
7
- if (!existsSync(explicitScriptPath)) {
8
- throw new Error(`MCP stdio-socket bridge script not found at configured path: ${explicitScriptPath}`);
9
- }
10
- return explicitScriptPath;
11
- }
12
- const scriptPath = fileURLToPath(new URL(DEFAULT_BRIDGE_SCRIPT_RELATIVE_URL, params.bootstrapModuleUrl));
13
- if (!existsSync(scriptPath)) {
14
- throw new Error(`MCP stdio-socket bridge script not found: ${scriptPath}`);
15
- }
16
- return scriptPath;
17
- }
18
- export function resolveVoiceMcpBridgeFromRuntime(params) {
19
- const scriptPath = resolveVoiceMcpBridgeScriptPath({
20
- bootstrapModuleUrl: params.bootstrapModuleUrl,
21
- explicitScriptPath: params.explicitScriptPath,
22
- });
23
- return {
24
- source: params.explicitScriptPath?.trim() ? "explicit-js-script" : "default-js-script",
25
- resolved: {
26
- command: params.execPath,
27
- baseArgs: [scriptPath],
28
- },
29
- };
30
- }
31
- //# sourceMappingURL=voice-mcp-bridge-command.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"voice-mcp-bridge-command.js","sourceRoot":"","sources":["../../../src/server/voice-mcp-bridge-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,MAAM,kCAAkC,GAAG,+CAA+C,CAAC;AAE3F,MAAM,UAAU,+BAA+B,CAAC,MAG/C;IACC,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IAC7D,IAAI,kBAAkB,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,gEAAgE,kBAAkB,EAAE,CACrF,CAAC;QACJ,CAAC;QACD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAC9B,IAAI,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC,kBAAkB,CAAC,CACvE,CAAC;IACF,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,6CAA6C,UAAU,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,MAIhD;IAIC,MAAM,UAAU,GAAG,+BAA+B,CAAC;QACjD,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;QAC7C,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;KAC9C,CAAC,CAAC;IACH,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB;QACtF,QAAQ,EAAE;YACR,OAAO,EAAE,MAAM,CAAC,QAAQ;YACxB,QAAQ,EAAE,CAAC,UAAU,CAAC;SACvB;KACF,CAAC;AACJ,CAAC"}