@getpaseo/server 0.1.2

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 (475) hide show
  1. package/.env.example +20 -0
  2. package/README.md +107 -0
  3. package/agent-prompt.md +339 -0
  4. package/dist/scripts/daemon-runner.js +32 -0
  5. package/dist/scripts/daemon-runner.js.map +1 -0
  6. package/dist/scripts/dev-runner.js +19 -0
  7. package/dist/scripts/dev-runner.js.map +1 -0
  8. package/dist/scripts/mcp-stdio-socket-bridge-cli.mjs +62 -0
  9. package/dist/scripts/supervisor.js +95 -0
  10. package/dist/scripts/supervisor.js.map +1 -0
  11. package/dist/server/client/daemon-client.d.ts +383 -0
  12. package/dist/server/client/daemon-client.d.ts.map +1 -0
  13. package/dist/server/client/daemon-client.js +2443 -0
  14. package/dist/server/client/daemon-client.js.map +1 -0
  15. package/dist/server/server/agent/activity-curator.d.ts +8 -0
  16. package/dist/server/server/agent/activity-curator.d.ts.map +1 -0
  17. package/dist/server/server/agent/activity-curator.js +228 -0
  18. package/dist/server/server/agent/activity-curator.js.map +1 -0
  19. package/dist/server/server/agent/agent-management-mcp.d.ts +34 -0
  20. package/dist/server/server/agent/agent-management-mcp.d.ts.map +1 -0
  21. package/dist/server/server/agent/agent-management-mcp.js +619 -0
  22. package/dist/server/server/agent/agent-management-mcp.js.map +1 -0
  23. package/dist/server/server/agent/agent-manager.d.ts +182 -0
  24. package/dist/server/server/agent/agent-manager.d.ts.map +1 -0
  25. package/dist/server/server/agent/agent-manager.js +1066 -0
  26. package/dist/server/server/agent/agent-manager.js.map +1 -0
  27. package/dist/server/server/agent/agent-metadata-generator.d.ts +29 -0
  28. package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -0
  29. package/dist/server/server/agent/agent-metadata-generator.js +157 -0
  30. package/dist/server/server/agent/agent-metadata-generator.js.map +1 -0
  31. package/dist/server/server/agent/agent-projections.d.ts +12 -0
  32. package/dist/server/server/agent/agent-projections.d.ts.map +1 -0
  33. package/dist/server/server/agent/agent-projections.js +238 -0
  34. package/dist/server/server/agent/agent-projections.js.map +1 -0
  35. package/dist/server/server/agent/agent-response-loop.d.ts +32 -0
  36. package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -0
  37. package/dist/server/server/agent/agent-response-loop.js +224 -0
  38. package/dist/server/server/agent/agent-response-loop.js.map +1 -0
  39. package/dist/server/server/agent/agent-sdk-types.d.ts +360 -0
  40. package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -0
  41. package/dist/server/server/agent/agent-sdk-types.js +2 -0
  42. package/dist/server/server/agent/agent-sdk-types.js.map +1 -0
  43. package/dist/server/server/agent/agent-storage.d.ts +187 -0
  44. package/dist/server/server/agent/agent-storage.d.ts.map +1 -0
  45. package/dist/server/server/agent/agent-storage.js +328 -0
  46. package/dist/server/server/agent/agent-storage.js.map +1 -0
  47. package/dist/server/server/agent/audio-utils.d.ts +3 -0
  48. package/dist/server/server/agent/audio-utils.d.ts.map +1 -0
  49. package/dist/server/server/agent/audio-utils.js +19 -0
  50. package/dist/server/server/agent/audio-utils.js.map +1 -0
  51. package/dist/server/server/agent/dictation-debug.d.ts +13 -0
  52. package/dist/server/server/agent/dictation-debug.d.ts.map +1 -0
  53. package/dist/server/server/agent/dictation-debug.js +50 -0
  54. package/dist/server/server/agent/dictation-debug.js.map +1 -0
  55. package/dist/server/server/agent/llm-openai.d.ts +7 -0
  56. package/dist/server/server/agent/llm-openai.d.ts.map +1 -0
  57. package/dist/server/server/agent/llm-openai.js +8 -0
  58. package/dist/server/server/agent/llm-openai.js.map +1 -0
  59. package/dist/server/server/agent/mcp-server.d.ts +26 -0
  60. package/dist/server/server/agent/mcp-server.d.ts.map +1 -0
  61. package/dist/server/server/agent/mcp-server.js +762 -0
  62. package/dist/server/server/agent/mcp-server.js.map +1 -0
  63. package/dist/server/server/agent/model-resolver.d.ts +11 -0
  64. package/dist/server/server/agent/model-resolver.d.ts.map +1 -0
  65. package/dist/server/server/agent/model-resolver.js +21 -0
  66. package/dist/server/server/agent/model-resolver.js.map +1 -0
  67. package/dist/server/server/agent/orchestrator-instructions.d.ts +7 -0
  68. package/dist/server/server/agent/orchestrator-instructions.d.ts.map +1 -0
  69. package/dist/server/server/agent/orchestrator-instructions.js +51 -0
  70. package/dist/server/server/agent/orchestrator-instructions.js.map +1 -0
  71. package/dist/server/server/agent/orchestrator.d.ts +12 -0
  72. package/dist/server/server/agent/orchestrator.d.ts.map +1 -0
  73. package/dist/server/server/agent/orchestrator.js +12 -0
  74. package/dist/server/server/agent/orchestrator.js.map +1 -0
  75. package/dist/server/server/agent/pcm16-resampler.d.ts +14 -0
  76. package/dist/server/server/agent/pcm16-resampler.d.ts.map +1 -0
  77. package/dist/server/server/agent/pcm16-resampler.js +63 -0
  78. package/dist/server/server/agent/pcm16-resampler.js.map +1 -0
  79. package/dist/server/server/agent/provider-launch-config.d.ts +139 -0
  80. package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -0
  81. package/dist/server/server/agent/provider-launch-config.js +83 -0
  82. package/dist/server/server/agent/provider-launch-config.js.map +1 -0
  83. package/dist/server/server/agent/provider-manifest.d.ts +20 -0
  84. package/dist/server/server/agent/provider-manifest.d.ts.map +1 -0
  85. package/dist/server/server/agent/provider-manifest.js +97 -0
  86. package/dist/server/server/agent/provider-manifest.js.map +1 -0
  87. package/dist/server/server/agent/provider-registry.d.ts +18 -0
  88. package/dist/server/server/agent/provider-registry.d.ts.map +1 -0
  89. package/dist/server/server/agent/provider-registry.js +45 -0
  90. package/dist/server/server/agent/provider-registry.js.map +1 -0
  91. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts +3 -0
  92. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts.map +1 -0
  93. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +42 -0
  94. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js.map +1 -0
  95. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts +16 -0
  96. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts.map +1 -0
  97. package/dist/server/server/agent/providers/claude/tool-call-mapper.js +73 -0
  98. package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -0
  99. package/dist/server/server/agent/providers/claude-agent.d.ts +35 -0
  100. package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -0
  101. package/dist/server/server/agent/providers/claude-agent.js +2056 -0
  102. package/dist/server/server/agent/providers/claude-agent.js.map +1 -0
  103. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +13 -0
  104. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts.map +1 -0
  105. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.js +67 -0
  106. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.js.map +1 -0
  107. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +15 -0
  108. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts.map +1 -0
  109. package/dist/server/server/agent/providers/codex/tool-call-mapper.js +640 -0
  110. package/dist/server/server/agent/providers/codex/tool-call-mapper.js.map +1 -0
  111. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +34 -0
  112. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -0
  113. package/dist/server/server/agent/providers/codex-app-server-agent.js +2476 -0
  114. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -0
  115. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts +9 -0
  116. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts.map +1 -0
  117. package/dist/server/server/agent/providers/codex-rollout-timeline.js +486 -0
  118. package/dist/server/server/agent/providers/codex-rollout-timeline.js.map +1 -0
  119. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +3 -0
  120. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts.map +1 -0
  121. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +33 -0
  122. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js.map +1 -0
  123. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +13 -0
  124. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts.map +1 -0
  125. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +75 -0
  126. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js.map +1 -0
  127. package/dist/server/server/agent/providers/opencode-agent.d.ts +37 -0
  128. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -0
  129. package/dist/server/server/agent/providers/opencode-agent.js +822 -0
  130. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -0
  131. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +1363 -0
  132. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -0
  133. package/dist/server/server/agent/providers/tool-call-detail-primitives.js +534 -0
  134. package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -0
  135. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +18 -0
  136. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts.map +1 -0
  137. package/dist/server/server/agent/providers/tool-call-mapper-utils.js +119 -0
  138. package/dist/server/server/agent/providers/tool-call-mapper-utils.js.map +1 -0
  139. package/dist/server/server/agent/recordings-debug.d.ts +3 -0
  140. package/dist/server/server/agent/recordings-debug.d.ts.map +1 -0
  141. package/dist/server/server/agent/recordings-debug.js +19 -0
  142. package/dist/server/server/agent/recordings-debug.js.map +1 -0
  143. package/dist/server/server/agent/stt-debug.d.ts +10 -0
  144. package/dist/server/server/agent/stt-debug.d.ts.map +1 -0
  145. package/dist/server/server/agent/stt-debug.js +33 -0
  146. package/dist/server/server/agent/stt-debug.js.map +1 -0
  147. package/dist/server/server/agent/stt-manager.d.ts +32 -0
  148. package/dist/server/server/agent/stt-manager.d.ts.map +1 -0
  149. package/dist/server/server/agent/stt-manager.js +231 -0
  150. package/dist/server/server/agent/stt-manager.js.map +1 -0
  151. package/dist/server/server/agent/system-prompt.d.ts +3 -0
  152. package/dist/server/server/agent/system-prompt.d.ts.map +1 -0
  153. package/dist/server/server/agent/system-prompt.js +19 -0
  154. package/dist/server/server/agent/system-prompt.js.map +1 -0
  155. package/dist/server/server/agent/tool-name-normalization.d.ts +7 -0
  156. package/dist/server/server/agent/tool-name-normalization.d.ts.map +1 -0
  157. package/dist/server/server/agent/tool-name-normalization.js +45 -0
  158. package/dist/server/server/agent/tool-name-normalization.js.map +1 -0
  159. package/dist/server/server/agent/tts-debug.d.ts +8 -0
  160. package/dist/server/server/agent/tts-debug.d.ts.map +1 -0
  161. package/dist/server/server/agent/tts-debug.js +24 -0
  162. package/dist/server/server/agent/tts-debug.js.map +1 -0
  163. package/dist/server/server/agent/tts-manager.d.ts +33 -0
  164. package/dist/server/server/agent/tts-manager.d.ts.map +1 -0
  165. package/dist/server/server/agent/tts-manager.js +261 -0
  166. package/dist/server/server/agent/tts-manager.js.map +1 -0
  167. package/dist/server/server/agent/wait-for-agent-tracker.d.ts +15 -0
  168. package/dist/server/server/agent/wait-for-agent-tracker.d.ts.map +1 -0
  169. package/dist/server/server/agent/wait-for-agent-tracker.js +53 -0
  170. package/dist/server/server/agent/wait-for-agent-tracker.js.map +1 -0
  171. package/dist/server/server/allowed-hosts.d.ts +13 -0
  172. package/dist/server/server/allowed-hosts.d.ts.map +1 -0
  173. package/dist/server/server/allowed-hosts.js +94 -0
  174. package/dist/server/server/allowed-hosts.js.map +1 -0
  175. package/dist/server/server/bootstrap.d.ts +49 -0
  176. package/dist/server/server/bootstrap.d.ts.map +1 -0
  177. package/dist/server/server/bootstrap.js +483 -0
  178. package/dist/server/server/bootstrap.js.map +1 -0
  179. package/dist/server/server/config.d.ts +13 -0
  180. package/dist/server/server/config.d.ts.map +1 -0
  181. package/dist/server/server/config.js +84 -0
  182. package/dist/server/server/config.js.map +1 -0
  183. package/dist/server/server/connection-offer.d.ts +19 -0
  184. package/dist/server/server/connection-offer.d.ts.map +1 -0
  185. package/dist/server/server/connection-offer.js +60 -0
  186. package/dist/server/server/connection-offer.js.map +1 -0
  187. package/dist/server/server/daemon-keypair.d.ts +8 -0
  188. package/dist/server/server/daemon-keypair.d.ts.map +1 -0
  189. package/dist/server/server/daemon-keypair.js +40 -0
  190. package/dist/server/server/daemon-keypair.js.map +1 -0
  191. package/dist/server/server/dictation/dictation-stream-manager.d.ts +76 -0
  192. package/dist/server/server/dictation/dictation-stream-manager.d.ts.map +1 -0
  193. package/dist/server/server/dictation/dictation-stream-manager.js +481 -0
  194. package/dist/server/server/dictation/dictation-stream-manager.js.map +1 -0
  195. package/dist/server/server/exports.d.ts +11 -0
  196. package/dist/server/server/exports.d.ts.map +1 -0
  197. package/dist/server/server/exports.js +11 -0
  198. package/dist/server/server/exports.js.map +1 -0
  199. package/dist/server/server/file-download/token-store.d.ts +25 -0
  200. package/dist/server/server/file-download/token-store.d.ts.map +1 -0
  201. package/dist/server/server/file-download/token-store.js +40 -0
  202. package/dist/server/server/file-download/token-store.js.map +1 -0
  203. package/dist/server/server/file-explorer/service.d.ts +41 -0
  204. package/dist/server/server/file-explorer/service.d.ts.map +1 -0
  205. package/dist/server/server/file-explorer/service.js +163 -0
  206. package/dist/server/server/file-explorer/service.js.map +1 -0
  207. package/dist/server/server/index.d.ts +2 -0
  208. package/dist/server/server/index.d.ts.map +1 -0
  209. package/dist/server/server/index.js +90 -0
  210. package/dist/server/server/index.js.map +1 -0
  211. package/dist/server/server/json-utils.d.ts +11 -0
  212. package/dist/server/server/json-utils.d.ts.map +1 -0
  213. package/dist/server/server/json-utils.js +45 -0
  214. package/dist/server/server/json-utils.js.map +1 -0
  215. package/dist/server/server/logger.d.ts +12 -0
  216. package/dist/server/server/logger.d.ts.map +1 -0
  217. package/dist/server/server/logger.js +29 -0
  218. package/dist/server/server/logger.js.map +1 -0
  219. package/dist/server/server/messages.d.ts +9 -0
  220. package/dist/server/server/messages.d.ts.map +1 -0
  221. package/dist/server/server/messages.js +29 -0
  222. package/dist/server/server/messages.js.map +1 -0
  223. package/dist/server/server/pairing-offer.d.ts +16 -0
  224. package/dist/server/server/pairing-offer.d.ts.map +1 -0
  225. package/dist/server/server/pairing-offer.js +45 -0
  226. package/dist/server/server/pairing-offer.js.map +1 -0
  227. package/dist/server/server/pairing-qr.d.ts +7 -0
  228. package/dist/server/server/pairing-qr.d.ts.map +1 -0
  229. package/dist/server/server/pairing-qr.js +45 -0
  230. package/dist/server/server/pairing-qr.js.map +1 -0
  231. package/dist/server/server/paseo-home.d.ts +2 -0
  232. package/dist/server/server/paseo-home.d.ts.map +1 -0
  233. package/dist/server/server/paseo-home.js +19 -0
  234. package/dist/server/server/paseo-home.js.map +1 -0
  235. package/dist/server/server/path-utils.d.ts +3 -0
  236. package/dist/server/server/path-utils.d.ts.map +1 -0
  237. package/dist/server/server/path-utils.js +20 -0
  238. package/dist/server/server/path-utils.js.map +1 -0
  239. package/dist/server/server/persisted-config.d.ts +500 -0
  240. package/dist/server/server/persisted-config.d.ts.map +1 -0
  241. package/dist/server/server/persisted-config.js +212 -0
  242. package/dist/server/server/persisted-config.js.map +1 -0
  243. package/dist/server/server/persistence-hooks.d.ts +24 -0
  244. package/dist/server/server/persistence-hooks.d.ts.map +1 -0
  245. package/dist/server/server/persistence-hooks.js +60 -0
  246. package/dist/server/server/persistence-hooks.js.map +1 -0
  247. package/dist/server/server/pid-lock.d.ts +19 -0
  248. package/dist/server/server/pid-lock.d.ts.map +1 -0
  249. package/dist/server/server/pid-lock.js +115 -0
  250. package/dist/server/server/pid-lock.js.map +1 -0
  251. package/dist/server/server/push/push-service.d.ts +21 -0
  252. package/dist/server/server/push/push-service.d.ts.map +1 -0
  253. package/dist/server/server/push/push-service.js +68 -0
  254. package/dist/server/server/push/push-service.js.map +1 -0
  255. package/dist/server/server/push/token-store.d.ts +18 -0
  256. package/dist/server/server/push/token-store.d.ts.map +1 -0
  257. package/dist/server/server/push/token-store.js +70 -0
  258. package/dist/server/server/push/token-store.js.map +1 -0
  259. package/dist/server/server/relay-transport.d.ts +22 -0
  260. package/dist/server/server/relay-transport.d.ts.map +1 -0
  261. package/dist/server/server/relay-transport.js +374 -0
  262. package/dist/server/server/relay-transport.js.map +1 -0
  263. package/dist/server/server/server-id.d.ts +17 -0
  264. package/dist/server/server/server-id.d.ts.map +1 -0
  265. package/dist/server/server/server-id.js +63 -0
  266. package/dist/server/server/server-id.js.map +1 -0
  267. package/dist/server/server/session.d.ts +360 -0
  268. package/dist/server/server/session.d.ts.map +1 -0
  269. package/dist/server/server/session.js +4615 -0
  270. package/dist/server/server/session.js.map +1 -0
  271. package/dist/server/server/speech/audio.d.ts +10 -0
  272. package/dist/server/server/speech/audio.d.ts.map +1 -0
  273. package/dist/server/server/speech/audio.js +101 -0
  274. package/dist/server/server/speech/audio.js.map +1 -0
  275. package/dist/server/server/speech/providers/local/config.d.ts +26 -0
  276. package/dist/server/server/speech/providers/local/config.d.ts.map +1 -0
  277. package/dist/server/server/speech/providers/local/config.js +93 -0
  278. package/dist/server/server/speech/providers/local/config.js.map +1 -0
  279. package/dist/server/server/speech/providers/local/models.d.ts +12 -0
  280. package/dist/server/server/speech/providers/local/models.d.ts.map +1 -0
  281. package/dist/server/server/speech/providers/local/models.js +18 -0
  282. package/dist/server/server/speech/providers/local/models.js.map +1 -0
  283. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts +24 -0
  284. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts.map +1 -0
  285. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js +422 -0
  286. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +1 -0
  287. package/dist/server/server/speech/providers/local/runtime.d.ts +30 -0
  288. package/dist/server/server/speech/providers/local/runtime.d.ts.map +1 -0
  289. package/dist/server/server/speech/providers/local/runtime.js +254 -0
  290. package/dist/server/server/speech/providers/local/runtime.js.map +1 -0
  291. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +117 -0
  292. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts.map +1 -0
  293. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +166 -0
  294. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js.map +1 -0
  295. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +17 -0
  296. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts.map +1 -0
  297. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +151 -0
  298. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js.map +1 -0
  299. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts +28 -0
  300. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts.map +1 -0
  301. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js +68 -0
  302. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js.map +1 -0
  303. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.d.ts +37 -0
  304. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.d.ts.map +1 -0
  305. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.js +79 -0
  306. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.js.map +1 -0
  307. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.d.ts +7 -0
  308. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.d.ts.map +1 -0
  309. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.js +11 -0
  310. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.js.map +1 -0
  311. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts +7 -0
  312. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts.map +1 -0
  313. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +44 -0
  314. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js.map +1 -0
  315. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts +28 -0
  316. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts.map +1 -0
  317. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +131 -0
  318. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js.map +1 -0
  319. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts +21 -0
  320. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts.map +1 -0
  321. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +132 -0
  322. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js.map +1 -0
  323. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.d.ts +23 -0
  324. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.d.ts.map +1 -0
  325. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js +112 -0
  326. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +1 -0
  327. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.d.ts +23 -0
  328. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.d.ts.map +1 -0
  329. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js +140 -0
  330. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js.map +1 -0
  331. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts +21 -0
  332. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts.map +1 -0
  333. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js +95 -0
  334. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js.map +1 -0
  335. package/dist/server/server/speech/providers/openai/config.d.ts +22 -0
  336. package/dist/server/server/speech/providers/openai/config.d.ts.map +1 -0
  337. package/dist/server/server/speech/providers/openai/config.js +94 -0
  338. package/dist/server/server/speech/providers/openai/config.js.map +1 -0
  339. package/dist/server/server/speech/providers/openai/realtime-transcription-session.d.ts +42 -0
  340. package/dist/server/server/speech/providers/openai/realtime-transcription-session.d.ts.map +1 -0
  341. package/dist/server/server/speech/providers/openai/realtime-transcription-session.js +165 -0
  342. package/dist/server/server/speech/providers/openai/realtime-transcription-session.js.map +1 -0
  343. package/dist/server/server/speech/providers/openai/runtime.d.ts +27 -0
  344. package/dist/server/server/speech/providers/openai/runtime.d.ts.map +1 -0
  345. package/dist/server/server/speech/providers/openai/runtime.js +103 -0
  346. package/dist/server/server/speech/providers/openai/runtime.js.map +1 -0
  347. package/dist/server/server/speech/providers/openai/stt.d.ts +22 -0
  348. package/dist/server/server/speech/providers/openai/stt.d.ts.map +1 -0
  349. package/dist/server/server/speech/providers/openai/stt.js +208 -0
  350. package/dist/server/server/speech/providers/openai/stt.js.map +1 -0
  351. package/dist/server/server/speech/providers/openai/tts.d.ts +18 -0
  352. package/dist/server/server/speech/providers/openai/tts.d.ts.map +1 -0
  353. package/dist/server/server/speech/providers/openai/tts.js +46 -0
  354. package/dist/server/server/speech/providers/openai/tts.js.map +1 -0
  355. package/dist/server/server/speech/speech-config-resolver.d.ts +11 -0
  356. package/dist/server/server/speech/speech-config-resolver.d.ts.map +1 -0
  357. package/dist/server/server/speech/speech-config-resolver.js +64 -0
  358. package/dist/server/server/speech/speech-config-resolver.js.map +1 -0
  359. package/dist/server/server/speech/speech-provider.d.ts +59 -0
  360. package/dist/server/server/speech/speech-provider.d.ts.map +1 -0
  361. package/dist/server/server/speech/speech-provider.js +2 -0
  362. package/dist/server/server/speech/speech-provider.js.map +1 -0
  363. package/dist/server/server/speech/speech-runtime.d.ts +20 -0
  364. package/dist/server/server/speech/speech-runtime.d.ts.map +1 -0
  365. package/dist/server/server/speech/speech-runtime.js +119 -0
  366. package/dist/server/server/speech/speech-runtime.js.map +1 -0
  367. package/dist/server/server/speech/speech-types.d.ts +20 -0
  368. package/dist/server/server/speech/speech-types.d.ts.map +1 -0
  369. package/dist/server/server/speech/speech-types.js +7 -0
  370. package/dist/server/server/speech/speech-types.js.map +1 -0
  371. package/dist/server/server/terminal-mcp/index.d.ts +4 -0
  372. package/dist/server/server/terminal-mcp/index.d.ts.map +1 -0
  373. package/dist/server/server/terminal-mcp/index.js +3 -0
  374. package/dist/server/server/terminal-mcp/index.js.map +1 -0
  375. package/dist/server/server/terminal-mcp/server.d.ts +10 -0
  376. package/dist/server/server/terminal-mcp/server.d.ts.map +1 -0
  377. package/dist/server/server/terminal-mcp/server.js +217 -0
  378. package/dist/server/server/terminal-mcp/server.js.map +1 -0
  379. package/dist/server/server/terminal-mcp/terminal-manager.d.ts +123 -0
  380. package/dist/server/server/terminal-mcp/terminal-manager.d.ts.map +1 -0
  381. package/dist/server/server/terminal-mcp/terminal-manager.js +351 -0
  382. package/dist/server/server/terminal-mcp/terminal-manager.js.map +1 -0
  383. package/dist/server/server/terminal-mcp/tmux.d.ts +207 -0
  384. package/dist/server/server/terminal-mcp/tmux.d.ts.map +1 -0
  385. package/dist/server/server/terminal-mcp/tmux.js +924 -0
  386. package/dist/server/server/terminal-mcp/tmux.js.map +1 -0
  387. package/dist/server/server/types.d.ts +5 -0
  388. package/dist/server/server/types.d.ts.map +1 -0
  389. package/dist/server/server/types.js +3 -0
  390. package/dist/server/server/types.js.map +1 -0
  391. package/dist/server/server/utils/diff-highlighter.d.ts +52 -0
  392. package/dist/server/server/utils/diff-highlighter.d.ts.map +1 -0
  393. package/dist/server/server/utils/diff-highlighter.js +244 -0
  394. package/dist/server/server/utils/diff-highlighter.js.map +1 -0
  395. package/dist/server/server/utils/syntax-highlighter.d.ts +10 -0
  396. package/dist/server/server/utils/syntax-highlighter.d.ts.map +1 -0
  397. package/dist/server/server/utils/syntax-highlighter.js +141 -0
  398. package/dist/server/server/utils/syntax-highlighter.js.map +1 -0
  399. package/dist/server/server/voice-config.d.ts +14 -0
  400. package/dist/server/server/voice-config.d.ts.map +1 -0
  401. package/dist/server/server/voice-config.js +51 -0
  402. package/dist/server/server/voice-config.js.map +1 -0
  403. package/dist/server/server/voice-mcp-bridge-command.d.ts +17 -0
  404. package/dist/server/server/voice-mcp-bridge-command.d.ts.map +1 -0
  405. package/dist/server/server/voice-mcp-bridge-command.js +31 -0
  406. package/dist/server/server/voice-mcp-bridge-command.js.map +1 -0
  407. package/dist/server/server/voice-mcp-bridge.d.ts +18 -0
  408. package/dist/server/server/voice-mcp-bridge.d.ts.map +1 -0
  409. package/dist/server/server/voice-mcp-bridge.js +109 -0
  410. package/dist/server/server/voice-mcp-bridge.js.map +1 -0
  411. package/dist/server/server/voice-permission-policy.d.ts +4 -0
  412. package/dist/server/server/voice-permission-policy.d.ts.map +1 -0
  413. package/dist/server/server/voice-permission-policy.js +13 -0
  414. package/dist/server/server/voice-permission-policy.js.map +1 -0
  415. package/dist/server/server/voice-types.d.ts +17 -0
  416. package/dist/server/server/voice-types.d.ts.map +1 -0
  417. package/dist/server/server/voice-types.js +2 -0
  418. package/dist/server/server/voice-types.js.map +1 -0
  419. package/dist/server/server/websocket-server.d.ts +80 -0
  420. package/dist/server/server/websocket-server.d.ts.map +1 -0
  421. package/dist/server/server/websocket-server.js +447 -0
  422. package/dist/server/server/websocket-server.js.map +1 -0
  423. package/dist/server/shared/agent-lifecycle.d.ts +3 -0
  424. package/dist/server/shared/agent-lifecycle.d.ts.map +1 -0
  425. package/dist/server/shared/agent-lifecycle.js +8 -0
  426. package/dist/server/shared/agent-lifecycle.js.map +1 -0
  427. package/dist/server/shared/connection-offer.d.ts +62 -0
  428. package/dist/server/shared/connection-offer.d.ts.map +1 -0
  429. package/dist/server/shared/connection-offer.js +17 -0
  430. package/dist/server/shared/connection-offer.js.map +1 -0
  431. package/dist/server/shared/daemon-endpoints.d.ts +19 -0
  432. package/dist/server/shared/daemon-endpoints.d.ts.map +1 -0
  433. package/dist/server/shared/daemon-endpoints.js +98 -0
  434. package/dist/server/shared/daemon-endpoints.js.map +1 -0
  435. package/dist/server/shared/messages.d.ts +36729 -0
  436. package/dist/server/shared/messages.d.ts.map +1 -0
  437. package/dist/server/shared/messages.js +1666 -0
  438. package/dist/server/shared/messages.js.map +1 -0
  439. package/dist/server/shared/path-utils.d.ts +2 -0
  440. package/dist/server/shared/path-utils.d.ts.map +1 -0
  441. package/dist/server/shared/path-utils.js +16 -0
  442. package/dist/server/shared/path-utils.js.map +1 -0
  443. package/dist/server/shared/tool-call-display.d.ts +11 -0
  444. package/dist/server/shared/tool-call-display.d.ts.map +1 -0
  445. package/dist/server/shared/tool-call-display.js +82 -0
  446. package/dist/server/shared/tool-call-display.js.map +1 -0
  447. package/dist/server/terminal/terminal-manager.d.ts +14 -0
  448. package/dist/server/terminal/terminal-manager.d.ts.map +1 -0
  449. package/dist/server/terminal/terminal-manager.js +67 -0
  450. package/dist/server/terminal/terminal-manager.js.map +1 -0
  451. package/dist/server/terminal/terminal.d.ts +67 -0
  452. package/dist/server/terminal/terminal.d.ts.map +1 -0
  453. package/dist/server/terminal/terminal.js +190 -0
  454. package/dist/server/terminal/terminal.js.map +1 -0
  455. package/dist/server/utils/checkout-git.d.ts +138 -0
  456. package/dist/server/utils/checkout-git.d.ts.map +1 -0
  457. package/dist/server/utils/checkout-git.js +1079 -0
  458. package/dist/server/utils/checkout-git.js.map +1 -0
  459. package/dist/server/utils/path.d.ts +5 -0
  460. package/dist/server/utils/path.d.ts.map +1 -0
  461. package/dist/server/utils/path.js +15 -0
  462. package/dist/server/utils/path.js.map +1 -0
  463. package/dist/server/utils/project-icon.d.ts +39 -0
  464. package/dist/server/utils/project-icon.d.ts.map +1 -0
  465. package/dist/server/utils/project-icon.js +391 -0
  466. package/dist/server/utils/project-icon.js.map +1 -0
  467. package/dist/server/utils/worktree-metadata.d.ts +21 -0
  468. package/dist/server/utils/worktree-metadata.d.ts.map +1 -0
  469. package/dist/server/utils/worktree-metadata.js +74 -0
  470. package/dist/server/utils/worktree-metadata.js.map +1 -0
  471. package/dist/server/utils/worktree.d.ts +95 -0
  472. package/dist/server/utils/worktree.d.ts.map +1 -0
  473. package/dist/server/utils/worktree.js +568 -0
  474. package/dist/server/utils/worktree.js.map +1 -0
  475. package/package.json +108 -0
package/.env.example ADDED
@@ -0,0 +1,20 @@
1
+ # OpenAI API Key (for GPT-4, Whisper STT, and TTS)
2
+ OPENAI_API_KEY=
3
+
4
+ # TTS Configuration (optional - defaults shown)
5
+ TTS_VOICE=alloy
6
+ # Available voices: alloy, echo, fable, onyx, nova, shimmer
7
+ TTS_MODEL=tts-1
8
+ # Available models: tts-1 (faster), tts-1-hd (higher quality)
9
+
10
+ # Server Configuration
11
+ # Location for runtime state (agents.json, etc.). Defaults to ~/.paseo
12
+ PASEO_HOME=~/.paseo
13
+
14
+ # Listen address. Defaults to 127.0.0.1:6767
15
+ # Can be host:port, /path/to/socket, or unix:///path/to/socket
16
+ PASEO_LISTEN=127.0.0.1:6767
17
+
18
+ # Debug recordings (dictation + STT input + TTS output)
19
+ # When enabled, recordings are saved under `${cwd}/.debug/recordings/`
20
+ PASEO_DICTATION_DEBUG=1
package/README.md ADDED
@@ -0,0 +1,107 @@
1
+ # Voice Assistant
2
+
3
+ A voice-controlled terminal assistant that runs as a single local service.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ # Install dependencies
9
+ npm install
10
+
11
+ # Copy environment variables
12
+ cp .env.example .env
13
+ # Edit .env and add your API keys (OpenAI, Deepgram)
14
+
15
+ # Run development servers
16
+ npm run dev
17
+
18
+ # Open browser to http://localhost:5173
19
+ ```
20
+
21
+ ## Architecture
22
+
23
+ - **Express Server** (port 3000) - Serves API and built UI in production
24
+ - **Vite Dev Server** (port 5173) - Hot-reload React UI in development
25
+ - **WebSocket** (`/ws`) - Real-time bidirectional communication
26
+ - **Agent** - STT → LLM → TTS pipeline with terminal control
27
+ - **Daemon** - tmux-based terminal management (in-process)
28
+
29
+ ## Development
30
+
31
+ ```bash
32
+ # Run both servers (recommended)
33
+ npm run dev
34
+
35
+ # Or run separately:
36
+ npm run dev:server # Express on port 3000
37
+ npm run dev:ui # Vite on port 5173
38
+
39
+ # Type checking
40
+ npm run typecheck
41
+
42
+ # Build for production
43
+ npm run build
44
+
45
+ # Start production server
46
+ npm start
47
+ ```
48
+
49
+ ## Project Status
50
+
51
+ **✅ Completed** (Phases 1-2):
52
+ - Package setup and configuration
53
+ - Express server with WebSocket
54
+ - React UI with Vite
55
+ - WebSocket client with ping/pong testing
56
+
57
+ **⏳ In Progress** (Phase 3):
58
+ - Terminal control (tmux integration)
59
+
60
+ **📋 Planned** (Phases 4-9):
61
+ - LLM integration (OpenAI GPT-4)
62
+ - Agent orchestrator
63
+ - Speech-to-Text (Deepgram)
64
+ - Text-to-Speech (OpenAI)
65
+ - Audio streaming
66
+ - UI polish
67
+
68
+ See [IMPLEMENTATION_PLAN.md](./IMPLEMENTATION_PLAN.md) for complete details.
69
+
70
+ ## Environment Variables
71
+
72
+ ```bash
73
+ OPENAI_API_KEY=your-openai-key-here # GPT-4 and TTS
74
+ DEEPGRAM_API_KEY=your-deepgram-key-here # Streaming STT
75
+ STT_MODEL=whisper-1 # Optional: override to gpt-4o-transcribe, etc.
76
+ STT_CONFIDENCE_THRESHOLD=-3.0 # Optional: reject low-confidence clips
77
+ STT_DEBUG_AUDIO_DIR=.stt-debug # Optional: persist raw dictation audio for debugging
78
+ PASEO_HOME=~/.paseo # Runtime state directory (agents/, etc.)
79
+ PASEO_LISTEN=127.0.0.1:6767 # Listen address (host:port or /path/to/socket)
80
+ ```
81
+
82
+ `PASEO_HOME` defaults to `~/.paseo` and isolates runtime artifacts like `agents/`. `PASEO_LISTEN` controls the daemon listen address. For blue/green testing you can run a parallel server without touching production state:
83
+
84
+ ```bash
85
+ PASEO_HOME=~/.paseo-blue PASEO_LISTEN=127.0.0.1:7777 npm run dev
86
+ ```
87
+
88
+ ## Tech Stack
89
+
90
+ - **Server**: Express, TypeScript, ws (WebSocket)
91
+ - **Client**: React 18, Vite, TypeScript
92
+ - **Terminal**: tmux (via child_process)
93
+ - **AI**: OpenAI (LLM + TTS), Deepgram (STT)
94
+
95
+ ## Testing
96
+
97
+ Currently manual testing via:
98
+ 1. Start servers: `npm run dev`
99
+ 2. Open http://localhost:5173
100
+ 3. Test WebSocket connection (green status indicator)
101
+ 4. Click "Send Ping" button to test communication
102
+
103
+ More testing guidance as features are implemented.
104
+
105
+ ## License
106
+
107
+ MIT
@@ -0,0 +1,339 @@
1
+ # Voice Assistant System Prompt
2
+
3
+ ## 1. Core Voice Rules (NON-NEGOTIABLE)
4
+
5
+ ### Voice Context
6
+
7
+ You are a **voice-controlled** assistant. The user speaks to you via phone and hears your responses via TTS.
8
+
9
+ ### Voice Message Envelope
10
+
11
+ Some user utterances will be wrapped in an XML tag like:
12
+
13
+ `<voice-transcription focused-agent-id="...">...</voice-transcription>`
14
+
15
+ - Treat the inner text as what the user said (STT output).
16
+ - `focused-agent-id` is **context only**: it means which agent screen the user is currently looking at. It does *not* mean all actions must target that agent, but it is a strong hint for ambiguous commands like “stop it” or “cancel the agent”.
17
+
18
+ **Critical constraints:**
19
+
20
+ - User typically codes from their **phone** using voice
21
+ - **No visual feedback** - they can't see command output unless at laptop
22
+ - Input comes through **speech-to-text (STT)** which makes errors
23
+ - Output is spoken via **text-to-speech (TTS)**
24
+ - User may be mobile, away from desk, multitasking
25
+
26
+ ### Communication Rules
27
+
28
+ **1-3 sentences maximum per response. Always.**
29
+
30
+ - **Plain speech only** - NO markdown (no bullets, bold, lists, headers)
31
+ - **Progressive disclosure** - answer what's asked, let user ask for more
32
+ - **Start high-level** - give the gist, not every detail
33
+ - **Natural pauses** - leave room for user to respond or redirect
34
+
35
+ **Good example:**
36
+
37
+ ```
38
+ User: "List my agents"
39
+ You: "You have two agents. One working on authentication in the web app, another running tests in Faro."
40
+
41
+ User: "How's the auth agent doing?"
42
+ You: "It finished adding the login flow and is waiting for your approval on the database migration."
43
+ ```
44
+
45
+ **Bad example:**
46
+
47
+ ```
48
+ User: "List my agents"
49
+ You: "You have 2 agents: 1. **auth-agent** - Working on authentication 2. **test-agent** - Running tests..."
50
+ ```
51
+
52
+ ### Handling STT Errors
53
+
54
+ Speech-to-text makes mistakes. Fix them silently using context.
55
+
56
+ **Common errors:**
57
+
58
+ - Homophones: "list" → "missed", "code" → "load"
59
+ - Project names: "faro" → "pharaoh", "mcp" → "empty"
60
+ - Technical terms: "typescript" → "type script", "npm install" → "NPM in style"
61
+
62
+ **How to handle:**
63
+
64
+ 1. Use context to fix obvious mistakes silently
65
+ 2. Ask for clarification only when truly ambiguous
66
+ 3. Never lecture about the error - just handle it
67
+ 4. When clarifying, be brief: "Which project? Web, agent, or MCP?"
68
+
69
+ **Examples:**
70
+
71
+ - User: "Run empty install" → Interpret as "Run npm install"
72
+ - User: "Check the agent" → If only one agent, check that one; if multiple, ask which
73
+
74
+ ### Immediate Silence Protocol
75
+
76
+ If user says any of these, **STOP ALL OUTPUT IMMEDIATELY**:
77
+
78
+ - "I'm not talking to you"
79
+ - "Shut up" / "Be quiet" / "Stop talking"
80
+ - "Not you"
81
+
82
+ **Response: Complete silence. No acknowledgment. Wait for user to address you again.**
83
+
84
+ ## 2. Delegation Pattern
85
+
86
+ ### Core Rule: Always Work Through Coding Agents
87
+
88
+ Direct command-line tools (`execute_command`, `send_text_to_command`, `kill_command`, etc.) are disabled. Every change to files, git, builds, or tests must go through a coding agent. Your job is to decide when to reuse an existing agent versus spinning up a new one, then route follow-ups appropriately.
89
+
90
+ ### Safe Operations (Execute Immediately)
91
+
92
+ These orchestration tools only read or summarize state:
93
+
94
+ - `list_agents()` – discover who exists before delegating
95
+ - `get_agent_activity()` – pull the curated activity/readout for a specific agent
96
+ - `wait_for_agent()` – block until an agent requests permission or completes the current run
97
+
98
+ Call them without asking when context requires it. Never fabricate their output.
99
+
100
+ ### Delegated Operations (Announce + Execute)
101
+
102
+ - `create_agent()` – Ask for confirmation unless the user already issued a clear imperative (“spin up a new planner”), then acknowledge and create immediately.
103
+ - `send_agent_prompt()` – Route the user’s request to the focused agent. If the user explicitly names a different agent, switch focus first, then send the prompt.
104
+ - `set_agent_mode()`, `cancel_agent()`, `kill_agent()` – Only when the user directs you to or the agent is stuck. Confirm destructive actions.
105
+
106
+ After delegating, monitor via `wait_for_agent()` or `get_agent_activity()` and translate the relevant summary back to the user.
107
+
108
+ ### When to Ask vs Act
109
+
110
+ Ask only when the routing decision is truly ambiguous. Otherwise:
111
+
112
+ - Default to the most recently addressed agent.
113
+ - If the user mentions a new agent (“spin up planner”, “Codex, pick this up”), treat it as both a creation/selection and a focus switch.
114
+ - Use activity context to disambiguate references (“keep going on the migration” → whichever agent was migrating).
115
+
116
+ ### Tool Results Reporting
117
+
118
+ After any agent-facing tool call, verbally report the key result in one sentence: who acted, what happened, and whether more work is pending. Example: “Agent Planner says the test plan is drafted and still running validations.” Progressive disclosure still applies—offer deeper details only when asked.
119
+
120
+ ## 4. Agent Integrations
121
+
122
+ ### Your Role: Orchestrator
123
+
124
+ You orchestrate work. Agents execute.
125
+
126
+ **First action when agent work is mentioned: Call `list_agents()`**
127
+
128
+ Load the agent list before any agent interaction. Always.
129
+
130
+ #### Focus Management
131
+
132
+ - Keep a lightweight "focus" pointer to the last agent the user explicitly addressed or implicitly referenced. Route follow-up utterances there unless the user names another agent.
133
+ - Update focus whenever the user spins up a new agent (“create a planner for this”) or targets one by name. Treat that change as sticky until silence/irrelevant turns cause confidence to drop.
134
+ - When confidence is low (long gap, conflicting references), briefly confirm: “Do you want Planner or Architect on this?”
135
+ - Always narrate hand-offs: “Okay, handing that to Planner.”
136
+ - Every time you speak on behalf of an agent, prefix with `Agent <name> says …` so the user always knows who just responded and can redirect explicitly.
137
+
138
+ **Confirm before destructive agent operations:**
139
+ - Creating agents: "Create agent in [directory] for [task]?" (unless user already issued a direct imperative)
140
+ - Killing agents: "Kill agent [id] working on [task]?"
141
+
142
+ **Delegate vs execute:**
143
+ - Everything touching code, git, or shell runs through agents
144
+ - Keep lightweight questions or summaries in-orchestrator when no action is needed
145
+ - Active agent context → Send prompt to that agent (respect focus)
146
+
147
+ ### Available Agents (Source of Truth)
148
+
149
+ We only have two coding agents. Do not call tools to discover them—treat this section as canonical. When you create or configure an agent, runtime validation will reject invalid combinations.
150
+
151
+ **Claude Code (`claude`)**
152
+ - Default mode: `plan`
153
+ - Alternate mode: `bypassPermissions`
154
+ - Best for deliberative work. Start in `plan` when the user wants transparency, switch to `bypassPermissions` only with explicit approval for fast execution.
155
+
156
+ **Codex (`codex`)**
157
+ - Default mode: `auto`
158
+ - Other modes: `read-only`, `full-access`
159
+ - Use `read-only` for safe inspection, `auto` for normal edit/run loops, and escalate to `full-access` only when the user authorizes unrestricted access.
160
+
161
+ ### Creating Agents
162
+
163
+ **Confirm creation only when intent is unclear.** If the user gives a direct imperative (“spin up a new planner agent in paseo”), acknowledge and create immediately; otherwise, ask.
164
+
165
+ ```javascript
166
+ // Claude Code with planning
167
+ create_agent({
168
+ cwd: "~/dev/paseo",
169
+ agentType: "claude",
170
+ initialPrompt: "add dark mode toggle to settings page",
171
+ initialMode: "plan"
172
+ })
173
+
174
+ // Codex for quick edits
175
+ create_agent({
176
+ cwd: "~/dev/paseo",
177
+ agentType: "codex",
178
+ initialPrompt: "clean up the logging",
179
+ initialMode: "auto"
180
+ })
181
+ ```
182
+
183
+ If the user omits `initialMode`, the defaults above apply. Invalid agentType/mode pairs will throw—just surface the error.
184
+
185
+ ### Working with Agents
186
+
187
+ **Send prompts to agents:**
188
+
189
+ ```javascript
190
+ // Send task (non-blocking by default)
191
+ send_agent_prompt({
192
+ agentId: "abc123",
193
+ prompt: "explain how authentication works"
194
+ })
195
+ // Returns immediately, agent processes in background
196
+
197
+ // Send task and wait for completion
198
+ send_agent_prompt({
199
+ agentId: "abc123",
200
+ prompt: "fix the bug in auth.ts",
201
+ maxWait: 60000 // Wait up to 60 seconds
202
+ })
203
+
204
+ // Change mode and send prompt (Claude -> bypassPermissions, Codex -> full-access)
205
+ send_agent_prompt({
206
+ agentId: "abc123",
207
+ prompt: "implement user registration",
208
+ sessionMode: "bypassPermissions"
209
+ })
210
+ ```
211
+
212
+ **Check agent status:**
213
+
214
+ ```javascript
215
+ // Get current status
216
+ get_agent_status({ agentId: "abc123" })
217
+ // Returns: { status: "processing", info: {...} }
218
+
219
+ // Get agent activity (curated, human-readable)
220
+ get_agent_activity({
221
+ agentId: "abc123",
222
+ format: "curated" // Clean summary of what agent did
223
+ })
224
+
225
+ // List all agents
226
+ list_agents()
227
+ // Returns: { agents: [{id, status, createdAt, ...}, ...] }
228
+ ```
229
+
230
+ **Control agents:**
231
+
232
+ ```javascript
233
+ // Change session mode (safe, no confirmation needed)
234
+ set_agent_mode({
235
+ agentId: "abc123",
236
+ modeId: "plan"
237
+ })
238
+
239
+ // Cancel current task (safe, no confirmation needed)
240
+ cancel_agent({ agentId: "abc123" })
241
+
242
+ // Kill agent (REQUIRES confirmation first)
243
+ kill_agent({ agentId: "abc123" })
244
+ ```
245
+
246
+ ### Agent Workflow Pattern
247
+
248
+ ```javascript
249
+ // 1. Load agents first
250
+ list_agents()
251
+
252
+ // 2. If creating new agent, confirm first
253
+ // You: "Create agent in ~/dev/project for authentication?"
254
+ // User: "yes"
255
+
256
+ // 3. Create with type + mode
257
+ create_agent({
258
+ cwd: "~/dev/project",
259
+ agentType: "claude",
260
+ initialPrompt: "add authentication",
261
+ initialMode: "plan"
262
+ })
263
+
264
+ // 4. Monitor or send follow-up tasks
265
+ get_agent_activity({ agentId })
266
+ send_agent_prompt({ agentId, prompt: "add tests" })
267
+ ```
268
+
269
+ ## 5. Git & GitHub
270
+
271
+ ### Git Worktree Utilities
272
+
273
+ Custom utilities for safe worktree management:
274
+
275
+ **create-worktree:**
276
+ - Creates new git worktree with new branch
277
+ - Example: `create-worktree "feature"` creates `~/dev/repo-feature`
278
+ - Outputs WORKTREE_PATH for you to parse
279
+
280
+ **delete-worktree:**
281
+ - Preserves the branch, only deletes directory
282
+ - Safe to use - won't lose work
283
+ - Run from within worktree directory
284
+
285
+ ### GitHub CLI (gh)
286
+
287
+ Already authenticated. Use for:
288
+
289
+ - Creating PRs: `gh pr create`
290
+ - Viewing PRs: `gh pr view`
291
+ - Managing issues: `gh issue list`
292
+ - Checking CI: `gh pr checks`
293
+
294
+ ## 6. Projects & Context
295
+
296
+ ### Project Locations
297
+
298
+ All projects in `~/dev`:
299
+
300
+ **paseo**
301
+ - Location: `~/dev/paseo`
302
+ - Packages: `voice-assistant`
303
+
304
+ **Faro** (Autonomous Competitive Intelligence)
305
+ - Bare repo: `~/dev/faro`
306
+ - Main checkout: `~/dev/faro/main`
307
+
308
+ **Blank.page** (Minimal browser text editor)
309
+ - Location: `~/dev/blank.page/editor`
310
+
311
+ ### Decision Rules
312
+
313
+ **Agent work mentioned?**
314
+ 1. Call `list_agents()` first
315
+ 2. Reuse existing agent if task relates to its work
316
+ 3. Only confirm new-agent creation when the request is ambiguous. Clear imperatives (“spin up a new planner agent”) should be acknowledged and executed immediately.
317
+
318
+ **Creating/killing agents?**
319
+ - Ask: "Create agent in [dir] for [task]?" when intent isn’t explicit
320
+ - Ask: "Kill agent [id]?"
321
+ - Wait for "yes"
322
+
323
+ **Task routing:**
324
+ - All coding tasks → Delegate to an agent
325
+ - Active agent + related work → Delegate to that agent
326
+ - If the user explicitly mentions another agent, switch focus before delegating
327
+
328
+ **Context tracking:**
329
+ - Track active agents and their directories
330
+ - Use conversation context to resolve ambiguity
331
+ - Fix STT errors silently
332
+ - Maintain a recency-based focus pointer and narrate any focus change out loud
333
+
334
+ ### Core Reminders
335
+
336
+ - Call actual tools, never just describe
337
+ - 1-3 sentences max per response
338
+ - Always report agent/tool results verbally (preface with "Agent X says …" when relaying)
339
+ - Default to action when context is clear
@@ -0,0 +1,32 @@
1
+ import { fileURLToPath } from "url";
2
+ import { existsSync } from "node:fs";
3
+ import { runSupervisor } from "./supervisor.js";
4
+ function resolveWorkerEntry() {
5
+ const candidates = [
6
+ fileURLToPath(new URL("../server/server/index.js", import.meta.url)),
7
+ fileURLToPath(new URL("../dist/server/server/index.js", import.meta.url)),
8
+ fileURLToPath(new URL("../src/server/index.ts", import.meta.url)),
9
+ fileURLToPath(new URL("../../src/server/index.ts", import.meta.url)),
10
+ ];
11
+ for (const candidate of candidates) {
12
+ if (existsSync(candidate)) {
13
+ return candidate;
14
+ }
15
+ }
16
+ return candidates[0];
17
+ }
18
+ function resolveWorkerExecArgv() {
19
+ const workerEntry = resolveWorkerEntry();
20
+ return workerEntry.endsWith(".ts") ? ["--import", "tsx"] : [];
21
+ }
22
+ runSupervisor({
23
+ name: "DaemonRunner",
24
+ startupMessage: "Starting daemon worker (IPC restart enabled)",
25
+ resolveWorkerEntry,
26
+ workerArgs: process.argv.slice(2),
27
+ workerEnv: process.env,
28
+ workerExecArgv: resolveWorkerExecArgv(),
29
+ restartOnCrash: false,
30
+ shutdownReasons: ["cli_shutdown"],
31
+ });
32
+ //# sourceMappingURL=daemon-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-runner.js","sourceRoot":"","sources":["../../scripts/daemon-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,SAAS,kBAAkB;IACzB,MAAM,UAAU,GAAG;QACjB,aAAa,CAAC,IAAI,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpE,aAAa,CAAC,IAAI,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzE,aAAa,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjE,aAAa,CAAC,IAAI,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACrE,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,qBAAqB;IAC5B,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,aAAa,CAAC;IACZ,IAAI,EAAE,cAAc;IACpB,cAAc,EAAE,8CAA8C;IAC9D,kBAAkB;IAClB,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC,GAAG;IACtB,cAAc,EAAE,qBAAqB,EAAE;IACvC,cAAc,EAAE,KAAK;IACrB,eAAe,EAAE,CAAC,cAAc,CAAC;CAClC,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { fileURLToPath } from "url";
2
+ import { existsSync } from "node:fs";
3
+ import { runSupervisor } from "./supervisor.js";
4
+ const WORKER_ENTRY = fileURLToPath(new URL("../src/server/index.ts", import.meta.url));
5
+ if (!existsSync(WORKER_ENTRY)) {
6
+ throw new Error(`Dev worker entry not found: ${WORKER_ENTRY}`);
7
+ }
8
+ runSupervisor({
9
+ name: "DevRunner",
10
+ startupMessage: "Starting server worker (crash restarts enabled)",
11
+ resolveWorkerEntry: () => WORKER_ENTRY,
12
+ workerArgs: process.argv.slice(2),
13
+ workerEnv: process.env,
14
+ // Always run worker with tsx so dev server uses TypeScript sources directly.
15
+ workerExecArgv: ["--import", "tsx"],
16
+ restartOnCrash: true,
17
+ shutdownReasons: ["cli_shutdown"],
18
+ });
19
+ //# sourceMappingURL=dev-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-runner.js","sourceRoot":"","sources":["../../scripts/dev-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACvF,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9B,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,aAAa,CAAC;IACZ,IAAI,EAAE,WAAW;IACjB,cAAc,EAAE,iDAAiD;IACjE,kBAAkB,EAAE,GAAG,EAAE,CAAC,YAAY;IACtC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC,GAAG;IACtB,6EAA6E;IAC7E,cAAc,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC;IACnC,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,CAAC,cAAc,CAAC;CAClC,CAAC,CAAC"}
@@ -0,0 +1,62 @@
1
+ import net from "node:net";
2
+
3
+ function parseArgs(argv) {
4
+ let socketPath = null;
5
+
6
+ for (let index = 0; index < argv.length; index += 1) {
7
+ const arg = argv[index];
8
+ if (arg === "--socket") {
9
+ socketPath = argv[index + 1] ?? null;
10
+ index += 1;
11
+ }
12
+ }
13
+
14
+ if (!socketPath || !socketPath.trim()) {
15
+ throw new Error("Missing required --socket <path>");
16
+ }
17
+
18
+ return { socketPath: socketPath.trim() };
19
+ }
20
+
21
+ async function main() {
22
+ const { socketPath } = parseArgs(process.argv.slice(2));
23
+ const socket = net.createConnection(socketPath);
24
+
25
+ socket.on("error", (error) => {
26
+ process.stderr.write(`MCP stdio-socket bridge error: ${error.message}\n`);
27
+ process.exitCode = 1;
28
+ });
29
+
30
+ process.stdin.on("error", (error) => {
31
+ process.stderr.write(`MCP stdio-socket bridge stdin error: ${error.message}\n`);
32
+ socket.destroy();
33
+ process.exitCode = 1;
34
+ });
35
+
36
+ process.stdout.on("error", (error) => {
37
+ process.stderr.write(`MCP stdio-socket bridge stdout error: ${error.message}\n`);
38
+ socket.destroy();
39
+ process.exitCode = 1;
40
+ });
41
+
42
+ await new Promise((resolve, reject) => {
43
+ socket.once("connect", resolve);
44
+ socket.once("error", reject);
45
+ });
46
+
47
+ process.stdin.pipe(socket);
48
+ socket.pipe(process.stdout);
49
+
50
+ await new Promise((resolve) => {
51
+ socket.once("close", resolve);
52
+ process.stdin.once("end", () => {
53
+ socket.end();
54
+ resolve();
55
+ });
56
+ });
57
+ }
58
+
59
+ main().catch((error) => {
60
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
61
+ process.exit(1);
62
+ });
@@ -0,0 +1,95 @@
1
+ import { fork } from "child_process";
2
+ function describeExit(code, signal) {
3
+ return signal ?? (typeof code === "number" ? `code ${code}` : "unknown");
4
+ }
5
+ function isRestartMessage(msg) {
6
+ return (typeof msg === "object" &&
7
+ msg !== null &&
8
+ "type" in msg &&
9
+ msg.type === "paseo:restart");
10
+ }
11
+ export function runSupervisor(options) {
12
+ const shutdownReasons = new Set(options.shutdownReasons ?? ["cli_shutdown"]);
13
+ const restartOnCrash = options.restartOnCrash ?? false;
14
+ const workerArgs = options.workerArgs ?? process.argv.slice(2);
15
+ const workerEnv = options.workerEnv ?? process.env;
16
+ const workerExecArgv = options.workerExecArgv ?? ["--import", "tsx"];
17
+ let child = null;
18
+ let restarting = false;
19
+ let shuttingDown = false;
20
+ const log = (message) => {
21
+ process.stderr.write(`[${options.name}] ${message}\n`);
22
+ };
23
+ const spawnWorker = () => {
24
+ let workerEntry;
25
+ try {
26
+ // Resolve at spawn time so restarts pick up current filesystem state.
27
+ workerEntry = options.resolveWorkerEntry();
28
+ }
29
+ catch (error) {
30
+ const message = error instanceof Error ? error.message : String(error);
31
+ log(`Failed to resolve worker entry: ${message}`);
32
+ process.exit(1);
33
+ return;
34
+ }
35
+ child = fork(workerEntry, workerArgs, {
36
+ stdio: "inherit",
37
+ env: workerEnv,
38
+ execArgv: workerExecArgv,
39
+ });
40
+ child.on("message", (msg) => {
41
+ if (!isRestartMessage(msg)) {
42
+ return;
43
+ }
44
+ if (msg.reason && shutdownReasons.has(msg.reason)) {
45
+ requestShutdown(`Shutdown requested by worker (${msg.reason})`);
46
+ return;
47
+ }
48
+ requestRestart("Restart requested by worker");
49
+ });
50
+ child.on("exit", (code, signal) => {
51
+ const exitDescriptor = describeExit(code, signal);
52
+ if (shuttingDown) {
53
+ log(`Worker exited (${exitDescriptor}). Supervisor shutting down.`);
54
+ process.exit(0);
55
+ }
56
+ if (restarting || (restartOnCrash && code !== 0 && code !== null)) {
57
+ restarting = false;
58
+ log(`Worker exited (${exitDescriptor}). Restarting worker...`);
59
+ spawnWorker();
60
+ return;
61
+ }
62
+ log(`Worker exited (${exitDescriptor}). Supervisor exiting.`);
63
+ process.exit(typeof code === "number" ? code : 0);
64
+ });
65
+ };
66
+ const requestRestart = (reason) => {
67
+ if (!child || restarting || shuttingDown) {
68
+ return;
69
+ }
70
+ restarting = true;
71
+ log(`${reason}. Stopping worker for restart...`);
72
+ child.kill("SIGTERM");
73
+ };
74
+ const requestShutdown = (reason) => {
75
+ if (shuttingDown) {
76
+ return;
77
+ }
78
+ shuttingDown = true;
79
+ restarting = false;
80
+ log(`${reason}. Stopping worker...`);
81
+ if (!child) {
82
+ process.exit(0);
83
+ return;
84
+ }
85
+ child.kill("SIGTERM");
86
+ };
87
+ const forwardSignal = (signal) => {
88
+ requestShutdown(`Received ${signal}`);
89
+ };
90
+ process.on("SIGINT", () => forwardSignal("SIGINT"));
91
+ process.on("SIGTERM", () => forwardSignal("SIGTERM"));
92
+ process.stdout.write(`[${options.name}] ${options.startupMessage}\n`);
93
+ spawnWorker();
94
+ }
95
+ //# sourceMappingURL=supervisor.js.map