@junctionpanel/server 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/.env.example +10 -0
  2. package/LICENSE +671 -0
  3. package/README.md +118 -0
  4. package/agent-prompt.md +339 -0
  5. package/dist/scripts/daemon-runner.js +141 -0
  6. package/dist/scripts/daemon-runner.js.map +1 -0
  7. package/dist/scripts/dev-runner.js +17 -0
  8. package/dist/scripts/dev-runner.js.map +1 -0
  9. package/dist/scripts/mcp-stdio-socket-bridge-cli.mjs +62 -0
  10. package/dist/scripts/supervisor.js +122 -0
  11. package/dist/scripts/supervisor.js.map +1 -0
  12. package/dist/server/client/daemon-client-relay-e2ee-transport.d.ts +8 -0
  13. package/dist/server/client/daemon-client-relay-e2ee-transport.d.ts.map +1 -0
  14. package/dist/server/client/daemon-client-relay-e2ee-transport.js +161 -0
  15. package/dist/server/client/daemon-client-relay-e2ee-transport.js.map +1 -0
  16. package/dist/server/client/daemon-client-terminal-stream-manager.d.ts +43 -0
  17. package/dist/server/client/daemon-client-terminal-stream-manager.d.ts.map +1 -0
  18. package/dist/server/client/daemon-client-terminal-stream-manager.js +134 -0
  19. package/dist/server/client/daemon-client-terminal-stream-manager.js.map +1 -0
  20. package/dist/server/client/daemon-client-transport-types.d.ts +34 -0
  21. package/dist/server/client/daemon-client-transport-types.d.ts.map +1 -0
  22. package/dist/server/client/daemon-client-transport-types.js +2 -0
  23. package/dist/server/client/daemon-client-transport-types.js.map +1 -0
  24. package/dist/server/client/daemon-client-transport-utils.d.ts +9 -0
  25. package/dist/server/client/daemon-client-transport-utils.d.ts.map +1 -0
  26. package/dist/server/client/daemon-client-transport-utils.js +121 -0
  27. package/dist/server/client/daemon-client-transport-utils.js.map +1 -0
  28. package/dist/server/client/daemon-client-transport.d.ts +5 -0
  29. package/dist/server/client/daemon-client-transport.d.ts.map +1 -0
  30. package/dist/server/client/daemon-client-transport.js +4 -0
  31. package/dist/server/client/daemon-client-transport.js.map +1 -0
  32. package/dist/server/client/daemon-client-websocket-transport.d.ts +7 -0
  33. package/dist/server/client/daemon-client-websocket-transport.d.ts.map +1 -0
  34. package/dist/server/client/daemon-client-websocket-transport.js +64 -0
  35. package/dist/server/client/daemon-client-websocket-transport.js.map +1 -0
  36. package/dist/server/client/daemon-client.d.ts +443 -0
  37. package/dist/server/client/daemon-client.d.ts.map +1 -0
  38. package/dist/server/client/daemon-client.js +2223 -0
  39. package/dist/server/client/daemon-client.js.map +1 -0
  40. package/dist/server/server/agent/activity-curator.d.ts +8 -0
  41. package/dist/server/server/agent/activity-curator.d.ts.map +1 -0
  42. package/dist/server/server/agent/activity-curator.js +228 -0
  43. package/dist/server/server/agent/activity-curator.js.map +1 -0
  44. package/dist/server/server/agent/agent-management-mcp.d.ts +36 -0
  45. package/dist/server/server/agent/agent-management-mcp.d.ts.map +1 -0
  46. package/dist/server/server/agent/agent-management-mcp.js +644 -0
  47. package/dist/server/server/agent/agent-management-mcp.js.map +1 -0
  48. package/dist/server/server/agent/agent-manager.d.ts +252 -0
  49. package/dist/server/server/agent/agent-manager.d.ts.map +1 -0
  50. package/dist/server/server/agent/agent-manager.js +1651 -0
  51. package/dist/server/server/agent/agent-manager.js.map +1 -0
  52. package/dist/server/server/agent/agent-metadata-generator.d.ts +29 -0
  53. package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -0
  54. package/dist/server/server/agent/agent-metadata-generator.js +163 -0
  55. package/dist/server/server/agent/agent-metadata-generator.js.map +1 -0
  56. package/dist/server/server/agent/agent-projections.d.ts +17 -0
  57. package/dist/server/server/agent/agent-projections.d.ts.map +1 -0
  58. package/dist/server/server/agent/agent-projections.js +270 -0
  59. package/dist/server/server/agent/agent-projections.js.map +1 -0
  60. package/dist/server/server/agent/agent-response-loop.d.ts +60 -0
  61. package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -0
  62. package/dist/server/server/agent/agent-response-loop.js +304 -0
  63. package/dist/server/server/agent/agent-response-loop.js.map +1 -0
  64. package/dist/server/server/agent/agent-sdk-types.d.ts +377 -0
  65. package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -0
  66. package/dist/server/server/agent/agent-sdk-types.js +12 -0
  67. package/dist/server/server/agent/agent-sdk-types.js.map +1 -0
  68. package/dist/server/server/agent/agent-storage.d.ts +230 -0
  69. package/dist/server/server/agent/agent-storage.d.ts.map +1 -0
  70. package/dist/server/server/agent/agent-storage.js +346 -0
  71. package/dist/server/server/agent/agent-storage.js.map +1 -0
  72. package/dist/server/server/agent/agent-title-limits.d.ts +3 -0
  73. package/dist/server/server/agent/agent-title-limits.d.ts.map +1 -0
  74. package/dist/server/server/agent/agent-title-limits.js +3 -0
  75. package/dist/server/server/agent/agent-title-limits.js.map +1 -0
  76. package/dist/server/server/agent/mcp-server.d.ts +19 -0
  77. package/dist/server/server/agent/mcp-server.d.ts.map +1 -0
  78. package/dist/server/server/agent/mcp-server.js +742 -0
  79. package/dist/server/server/agent/mcp-server.js.map +1 -0
  80. package/dist/server/server/agent/model-resolver.d.ts +11 -0
  81. package/dist/server/server/agent/model-resolver.d.ts.map +1 -0
  82. package/dist/server/server/agent/model-resolver.js +21 -0
  83. package/dist/server/server/agent/model-resolver.js.map +1 -0
  84. package/dist/server/server/agent/orchestrator-instructions.d.ts +7 -0
  85. package/dist/server/server/agent/orchestrator-instructions.d.ts.map +1 -0
  86. package/dist/server/server/agent/orchestrator-instructions.js +51 -0
  87. package/dist/server/server/agent/orchestrator-instructions.js.map +1 -0
  88. package/dist/server/server/agent/orchestrator.d.ts +12 -0
  89. package/dist/server/server/agent/orchestrator.d.ts.map +1 -0
  90. package/dist/server/server/agent/orchestrator.js +12 -0
  91. package/dist/server/server/agent/orchestrator.js.map +1 -0
  92. package/dist/server/server/agent/pcm16-resampler.d.ts +14 -0
  93. package/dist/server/server/agent/pcm16-resampler.d.ts.map +1 -0
  94. package/dist/server/server/agent/pcm16-resampler.js +63 -0
  95. package/dist/server/server/agent/pcm16-resampler.js.map +1 -0
  96. package/dist/server/server/agent/provider-launch-config.d.ts +139 -0
  97. package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -0
  98. package/dist/server/server/agent/provider-launch-config.js +83 -0
  99. package/dist/server/server/agent/provider-launch-config.js.map +1 -0
  100. package/dist/server/server/agent/provider-manifest.d.ts +15 -0
  101. package/dist/server/server/agent/provider-manifest.d.ts.map +1 -0
  102. package/dist/server/server/agent/provider-manifest.js +83 -0
  103. package/dist/server/server/agent/provider-manifest.js.map +1 -0
  104. package/dist/server/server/agent/provider-registry.d.ts +18 -0
  105. package/dist/server/server/agent/provider-registry.d.ts.map +1 -0
  106. package/dist/server/server/agent/provider-registry.js +45 -0
  107. package/dist/server/server/agent/provider-registry.js.map +1 -0
  108. package/dist/server/server/agent/providers/claude/model-catalog.d.ts +29 -0
  109. package/dist/server/server/agent/providers/claude/model-catalog.d.ts.map +1 -0
  110. package/dist/server/server/agent/providers/claude/model-catalog.js +64 -0
  111. package/dist/server/server/agent/providers/claude/model-catalog.js.map +1 -0
  112. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +44 -0
  113. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts.map +1 -0
  114. package/dist/server/server/agent/providers/claude/task-notification-tool-call.js +250 -0
  115. package/dist/server/server/agent/providers/claude/task-notification-tool-call.js.map +1 -0
  116. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts +3 -0
  117. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts.map +1 -0
  118. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +109 -0
  119. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js.map +1 -0
  120. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts +16 -0
  121. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts.map +1 -0
  122. package/dist/server/server/agent/providers/claude/tool-call-mapper.js +238 -0
  123. package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -0
  124. package/dist/server/server/agent/providers/claude-agent.d.ts +49 -0
  125. package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -0
  126. package/dist/server/server/agent/providers/claude-agent.js +3701 -0
  127. package/dist/server/server/agent/providers/claude-agent.js.map +1 -0
  128. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +12 -0
  129. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts.map +1 -0
  130. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.js +104 -0
  131. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.js.map +1 -0
  132. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +15 -0
  133. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts.map +1 -0
  134. package/dist/server/server/agent/providers/codex/tool-call-mapper.js +720 -0
  135. package/dist/server/server/agent/providers/codex/tool-call-mapper.js.map +1 -0
  136. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +34 -0
  137. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -0
  138. package/dist/server/server/agent/providers/codex-app-server-agent.js +2660 -0
  139. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -0
  140. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts +9 -0
  141. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts.map +1 -0
  142. package/dist/server/server/agent/providers/codex-rollout-timeline.js +487 -0
  143. package/dist/server/server/agent/providers/codex-rollout-timeline.js.map +1 -0
  144. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +3 -0
  145. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts.map +1 -0
  146. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +39 -0
  147. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js.map +1 -0
  148. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +13 -0
  149. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts.map +1 -0
  150. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +151 -0
  151. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js.map +1 -0
  152. package/dist/server/server/agent/providers/opencode-agent.d.ts +37 -0
  153. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -0
  154. package/dist/server/server/agent/providers/opencode-agent.js +874 -0
  155. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -0
  156. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +1460 -0
  157. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -0
  158. package/dist/server/server/agent/providers/tool-call-detail-primitives.js +552 -0
  159. package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -0
  160. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +17 -0
  161. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts.map +1 -0
  162. package/dist/server/server/agent/providers/tool-call-mapper-utils.js +109 -0
  163. package/dist/server/server/agent/providers/tool-call-mapper-utils.js.map +1 -0
  164. package/dist/server/server/agent/system-prompt.d.ts +3 -0
  165. package/dist/server/server/agent/system-prompt.d.ts.map +1 -0
  166. package/dist/server/server/agent/system-prompt.js +19 -0
  167. package/dist/server/server/agent/system-prompt.js.map +1 -0
  168. package/dist/server/server/agent/timeline-append.d.ts +10 -0
  169. package/dist/server/server/agent/timeline-append.d.ts.map +1 -0
  170. package/dist/server/server/agent/timeline-append.js +27 -0
  171. package/dist/server/server/agent/timeline-append.js.map +1 -0
  172. package/dist/server/server/agent/timeline-projection.d.ts +39 -0
  173. package/dist/server/server/agent/timeline-projection.d.ts.map +1 -0
  174. package/dist/server/server/agent/timeline-projection.js +215 -0
  175. package/dist/server/server/agent/timeline-projection.js.map +1 -0
  176. package/dist/server/server/agent/tool-name-normalization.d.ts +7 -0
  177. package/dist/server/server/agent/tool-name-normalization.d.ts.map +1 -0
  178. package/dist/server/server/agent/tool-name-normalization.js +45 -0
  179. package/dist/server/server/agent/tool-name-normalization.js.map +1 -0
  180. package/dist/server/server/agent/wait-for-agent-tracker.d.ts +15 -0
  181. package/dist/server/server/agent/wait-for-agent-tracker.d.ts.map +1 -0
  182. package/dist/server/server/agent/wait-for-agent-tracker.js +53 -0
  183. package/dist/server/server/agent/wait-for-agent-tracker.js.map +1 -0
  184. package/dist/server/server/agent-attention-policy.d.ts +20 -0
  185. package/dist/server/server/agent-attention-policy.d.ts.map +1 -0
  186. package/dist/server/server/agent-attention-policy.js +40 -0
  187. package/dist/server/server/agent-attention-policy.js.map +1 -0
  188. package/dist/server/server/allowed-hosts.d.ts +13 -0
  189. package/dist/server/server/allowed-hosts.d.ts.map +1 -0
  190. package/dist/server/server/allowed-hosts.js +94 -0
  191. package/dist/server/server/allowed-hosts.js.map +1 -0
  192. package/dist/server/server/bootstrap.d.ts +49 -0
  193. package/dist/server/server/bootstrap.d.ts.map +1 -0
  194. package/dist/server/server/bootstrap.js +422 -0
  195. package/dist/server/server/bootstrap.js.map +1 -0
  196. package/dist/server/server/client-message-id.d.ts +3 -0
  197. package/dist/server/server/client-message-id.d.ts.map +1 -0
  198. package/dist/server/server/client-message-id.js +12 -0
  199. package/dist/server/server/client-message-id.js.map +1 -0
  200. package/dist/server/server/config.d.ts +13 -0
  201. package/dist/server/server/config.d.ts.map +1 -0
  202. package/dist/server/server/config.js +58 -0
  203. package/dist/server/server/config.js.map +1 -0
  204. package/dist/server/server/connection-offer.d.ts +19 -0
  205. package/dist/server/server/connection-offer.d.ts.map +1 -0
  206. package/dist/server/server/connection-offer.js +60 -0
  207. package/dist/server/server/connection-offer.js.map +1 -0
  208. package/dist/server/server/daemon-keypair.d.ts +8 -0
  209. package/dist/server/server/daemon-keypair.d.ts.map +1 -0
  210. package/dist/server/server/daemon-keypair.js +40 -0
  211. package/dist/server/server/daemon-keypair.js.map +1 -0
  212. package/dist/server/server/daemon-version.d.ts +5 -0
  213. package/dist/server/server/daemon-version.d.ts.map +1 -0
  214. package/dist/server/server/daemon-version.js +22 -0
  215. package/dist/server/server/daemon-version.js.map +1 -0
  216. package/dist/server/server/exports.d.ts +16 -0
  217. package/dist/server/server/exports.d.ts.map +1 -0
  218. package/dist/server/server/exports.js +16 -0
  219. package/dist/server/server/exports.js.map +1 -0
  220. package/dist/server/server/file-download/token-store.d.ts +25 -0
  221. package/dist/server/server/file-download/token-store.d.ts.map +1 -0
  222. package/dist/server/server/file-download/token-store.js +40 -0
  223. package/dist/server/server/file-download/token-store.js.map +1 -0
  224. package/dist/server/server/file-explorer/service.d.ts +41 -0
  225. package/dist/server/server/file-explorer/service.d.ts.map +1 -0
  226. package/dist/server/server/file-explorer/service.js +226 -0
  227. package/dist/server/server/file-explorer/service.js.map +1 -0
  228. package/dist/server/server/index.d.ts +2 -0
  229. package/dist/server/server/index.d.ts.map +1 -0
  230. package/dist/server/server/index.js +141 -0
  231. package/dist/server/server/index.js.map +1 -0
  232. package/dist/server/server/json-utils.d.ts +11 -0
  233. package/dist/server/server/json-utils.d.ts.map +1 -0
  234. package/dist/server/server/json-utils.js +45 -0
  235. package/dist/server/server/json-utils.js.map +1 -0
  236. package/dist/server/server/junction-home.d.ts +2 -0
  237. package/dist/server/server/junction-home.d.ts.map +1 -0
  238. package/dist/server/server/junction-home.js +19 -0
  239. package/dist/server/server/junction-home.js.map +1 -0
  240. package/dist/server/server/logger.d.ts +12 -0
  241. package/dist/server/server/logger.d.ts.map +1 -0
  242. package/dist/server/server/logger.js +29 -0
  243. package/dist/server/server/logger.js.map +1 -0
  244. package/dist/server/server/messages.d.ts +9 -0
  245. package/dist/server/server/messages.d.ts.map +1 -0
  246. package/dist/server/server/messages.js +29 -0
  247. package/dist/server/server/messages.js.map +1 -0
  248. package/dist/server/server/package-version.d.ts +13 -0
  249. package/dist/server/server/package-version.d.ts.map +1 -0
  250. package/dist/server/server/package-version.js +47 -0
  251. package/dist/server/server/package-version.js.map +1 -0
  252. package/dist/server/server/path-utils.d.ts +3 -0
  253. package/dist/server/server/path-utils.d.ts.map +1 -0
  254. package/dist/server/server/path-utils.js +20 -0
  255. package/dist/server/server/path-utils.js.map +1 -0
  256. package/dist/server/server/persisted-config.d.ts +270 -0
  257. package/dist/server/server/persisted-config.d.ts.map +1 -0
  258. package/dist/server/server/persisted-config.js +152 -0
  259. package/dist/server/server/persisted-config.js.map +1 -0
  260. package/dist/server/server/persistence-hooks.d.ts +30 -0
  261. package/dist/server/server/persistence-hooks.d.ts.map +1 -0
  262. package/dist/server/server/persistence-hooks.js +68 -0
  263. package/dist/server/server/persistence-hooks.js.map +1 -0
  264. package/dist/server/server/pid-lock.d.ts +26 -0
  265. package/dist/server/server/pid-lock.d.ts.map +1 -0
  266. package/dist/server/server/pid-lock.js +280 -0
  267. package/dist/server/server/pid-lock.js.map +1 -0
  268. package/dist/server/server/relay-transport.d.ts +23 -0
  269. package/dist/server/server/relay-transport.d.ts.map +1 -0
  270. package/dist/server/server/relay-transport.js +457 -0
  271. package/dist/server/server/relay-transport.js.map +1 -0
  272. package/dist/server/server/server-id.d.ts +17 -0
  273. package/dist/server/server/server-id.d.ts.map +1 -0
  274. package/dist/server/server/server-id.js +63 -0
  275. package/dist/server/server/server-id.js.map +1 -0
  276. package/dist/server/server/session.d.ts +280 -0
  277. package/dist/server/server/session.d.ts.map +1 -0
  278. package/dist/server/server/session.js +4395 -0
  279. package/dist/server/server/session.js.map +1 -0
  280. package/dist/server/server/terminal-mcp/index.d.ts +4 -0
  281. package/dist/server/server/terminal-mcp/index.d.ts.map +1 -0
  282. package/dist/server/server/terminal-mcp/index.js +3 -0
  283. package/dist/server/server/terminal-mcp/index.js.map +1 -0
  284. package/dist/server/server/terminal-mcp/server.d.ts +10 -0
  285. package/dist/server/server/terminal-mcp/server.d.ts.map +1 -0
  286. package/dist/server/server/terminal-mcp/server.js +217 -0
  287. package/dist/server/server/terminal-mcp/server.js.map +1 -0
  288. package/dist/server/server/terminal-mcp/terminal-manager.d.ts +123 -0
  289. package/dist/server/server/terminal-mcp/terminal-manager.d.ts.map +1 -0
  290. package/dist/server/server/terminal-mcp/terminal-manager.js +351 -0
  291. package/dist/server/server/terminal-mcp/terminal-manager.js.map +1 -0
  292. package/dist/server/server/terminal-mcp/tmux.d.ts +207 -0
  293. package/dist/server/server/terminal-mcp/tmux.d.ts.map +1 -0
  294. package/dist/server/server/terminal-mcp/tmux.js +924 -0
  295. package/dist/server/server/terminal-mcp/tmux.js.map +1 -0
  296. package/dist/server/server/types.d.ts +5 -0
  297. package/dist/server/server/types.d.ts.map +1 -0
  298. package/dist/server/server/types.js +3 -0
  299. package/dist/server/server/types.js.map +1 -0
  300. package/dist/server/server/utils/diff-highlighter.d.ts +52 -0
  301. package/dist/server/server/utils/diff-highlighter.d.ts.map +1 -0
  302. package/dist/server/server/utils/diff-highlighter.js +244 -0
  303. package/dist/server/server/utils/diff-highlighter.js.map +1 -0
  304. package/dist/server/server/utils/syntax-highlighter.d.ts +10 -0
  305. package/dist/server/server/utils/syntax-highlighter.d.ts.map +1 -0
  306. package/dist/server/server/utils/syntax-highlighter.js +145 -0
  307. package/dist/server/server/utils/syntax-highlighter.js.map +1 -0
  308. package/dist/server/server/websocket-server.d.ts +79 -0
  309. package/dist/server/server/websocket-server.d.ts.map +1 -0
  310. package/dist/server/server/websocket-server.js +742 -0
  311. package/dist/server/server/websocket-server.js.map +1 -0
  312. package/dist/server/server/worktree-bootstrap.d.ts +29 -0
  313. package/dist/server/server/worktree-bootstrap.d.ts.map +1 -0
  314. package/dist/server/server/worktree-bootstrap.js +454 -0
  315. package/dist/server/server/worktree-bootstrap.js.map +1 -0
  316. package/dist/server/shared/agent-attention-notification.d.ts +40 -0
  317. package/dist/server/shared/agent-attention-notification.d.ts.map +1 -0
  318. package/dist/server/shared/agent-attention-notification.js +130 -0
  319. package/dist/server/shared/agent-attention-notification.js.map +1 -0
  320. package/dist/server/shared/agent-lifecycle.d.ts +3 -0
  321. package/dist/server/shared/agent-lifecycle.d.ts.map +1 -0
  322. package/dist/server/shared/agent-lifecycle.js +8 -0
  323. package/dist/server/shared/agent-lifecycle.js.map +1 -0
  324. package/dist/server/shared/binary-mux.d.ts +31 -0
  325. package/dist/server/shared/binary-mux.d.ts.map +1 -0
  326. package/dist/server/shared/binary-mux.js +114 -0
  327. package/dist/server/shared/binary-mux.js.map +1 -0
  328. package/dist/server/shared/connection-offer.d.ts +62 -0
  329. package/dist/server/shared/connection-offer.d.ts.map +1 -0
  330. package/dist/server/shared/connection-offer.js +17 -0
  331. package/dist/server/shared/connection-offer.js.map +1 -0
  332. package/dist/server/shared/daemon-endpoints.d.ts +27 -0
  333. package/dist/server/shared/daemon-endpoints.d.ts.map +1 -0
  334. package/dist/server/shared/daemon-endpoints.js +113 -0
  335. package/dist/server/shared/daemon-endpoints.js.map +1 -0
  336. package/dist/server/shared/messages.d.ts +36982 -0
  337. package/dist/server/shared/messages.d.ts.map +1 -0
  338. package/dist/server/shared/messages.js +1793 -0
  339. package/dist/server/shared/messages.js.map +1 -0
  340. package/dist/server/shared/path-utils.d.ts +2 -0
  341. package/dist/server/shared/path-utils.d.ts.map +1 -0
  342. package/dist/server/shared/path-utils.js +16 -0
  343. package/dist/server/shared/path-utils.js.map +1 -0
  344. package/dist/server/shared/terminal-key-input.d.ts +9 -0
  345. package/dist/server/shared/terminal-key-input.d.ts.map +1 -0
  346. package/dist/server/shared/terminal-key-input.js +132 -0
  347. package/dist/server/shared/terminal-key-input.js.map +1 -0
  348. package/dist/server/shared/tool-call-display.d.ts +11 -0
  349. package/dist/server/shared/tool-call-display.d.ts.map +1 -0
  350. package/dist/server/shared/tool-call-display.js +102 -0
  351. package/dist/server/shared/tool-call-display.js.map +1 -0
  352. package/dist/server/shared/tool-call-interpretation.d.ts +14 -0
  353. package/dist/server/shared/tool-call-interpretation.d.ts.map +1 -0
  354. package/dist/server/shared/tool-call-interpretation.js +76 -0
  355. package/dist/server/shared/tool-call-interpretation.js.map +1 -0
  356. package/dist/server/terminal/terminal-manager.d.ts +30 -0
  357. package/dist/server/terminal/terminal-manager.d.ts.map +1 -0
  358. package/dist/server/terminal/terminal-manager.js +148 -0
  359. package/dist/server/terminal/terminal-manager.js.map +1 -0
  360. package/dist/server/terminal/terminal.d.ts +93 -0
  361. package/dist/server/terminal/terminal.d.ts.map +1 -0
  362. package/dist/server/terminal/terminal.js +386 -0
  363. package/dist/server/terminal/terminal.js.map +1 -0
  364. package/dist/server/utils/checkout-git.d.ts +150 -0
  365. package/dist/server/utils/checkout-git.d.ts.map +1 -0
  366. package/dist/server/utils/checkout-git.js +1427 -0
  367. package/dist/server/utils/checkout-git.js.map +1 -0
  368. package/dist/server/utils/city-names.d.ts +17 -0
  369. package/dist/server/utils/city-names.d.ts.map +1 -0
  370. package/dist/server/utils/city-names.js +122 -0
  371. package/dist/server/utils/city-names.js.map +1 -0
  372. package/dist/server/utils/directory-suggestions.d.ts +31 -0
  373. package/dist/server/utils/directory-suggestions.d.ts.map +1 -0
  374. package/dist/server/utils/directory-suggestions.js +678 -0
  375. package/dist/server/utils/directory-suggestions.js.map +1 -0
  376. package/dist/server/utils/git-clone.d.ts +10 -0
  377. package/dist/server/utils/git-clone.d.ts.map +1 -0
  378. package/dist/server/utils/git-clone.js +45 -0
  379. package/dist/server/utils/git-clone.js.map +1 -0
  380. package/dist/server/utils/git-init.d.ts +9 -0
  381. package/dist/server/utils/git-init.d.ts.map +1 -0
  382. package/dist/server/utils/git-init.js +91 -0
  383. package/dist/server/utils/git-init.js.map +1 -0
  384. package/dist/server/utils/path.d.ts +5 -0
  385. package/dist/server/utils/path.d.ts.map +1 -0
  386. package/dist/server/utils/path.js +15 -0
  387. package/dist/server/utils/path.js.map +1 -0
  388. package/dist/server/utils/project-icon.d.ts +39 -0
  389. package/dist/server/utils/project-icon.d.ts.map +1 -0
  390. package/dist/server/utils/project-icon.js +391 -0
  391. package/dist/server/utils/project-icon.js.map +1 -0
  392. package/dist/server/utils/worktree-metadata.d.ts +47 -0
  393. package/dist/server/utils/worktree-metadata.d.ts.map +1 -0
  394. package/dist/server/utils/worktree-metadata.js +116 -0
  395. package/dist/server/utils/worktree-metadata.js.map +1 -0
  396. package/dist/server/utils/worktree.d.ts +175 -0
  397. package/dist/server/utils/worktree.d.ts.map +1 -0
  398. package/dist/server/utils/worktree.js +858 -0
  399. package/dist/server/utils/worktree.js.map +1 -0
  400. package/package.json +107 -0
package/README.md ADDED
@@ -0,0 +1,118 @@
1
+ # Voice Assistant
2
+
3
+ A voice-controlled terminal assistant that runs as a single local service.
4
+
5
+ ## Junction Daemon npm Distribution
6
+
7
+ For end users who only need to run the Junction daemon (while using hosted relay + hosted web app), use:
8
+
9
+ ```bash
10
+ npm install -g @junctionpanel/junction-daemon
11
+ junction start
12
+ ```
13
+
14
+ Use the rest of this README only for repository/package development workflows.
15
+
16
+ ## Quick Start
17
+
18
+ ```bash
19
+ # Install dependencies
20
+ npm install
21
+
22
+ # Copy environment variables
23
+ cp .env.example .env
24
+ # Edit .env and add your API keys (OpenAI, Deepgram)
25
+
26
+ # Run development servers
27
+ npm run dev
28
+
29
+ # Open browser to http://localhost:5173
30
+ ```
31
+
32
+ ## Architecture
33
+
34
+ - **Express Server** (port 3000) - Serves API and built UI in production
35
+ - **Vite Dev Server** (port 5173) - Hot-reload React UI in development
36
+ - **WebSocket** (`/ws`) - Real-time bidirectional communication
37
+ - **Agent** - STT → LLM → TTS pipeline with terminal control
38
+ - **Daemon** - tmux-based terminal management (in-process)
39
+
40
+ ## Development
41
+
42
+ ```bash
43
+ # Run both servers (recommended)
44
+ npm run dev
45
+
46
+ # Or run separately:
47
+ npm run dev:server # Express on port 3000
48
+ npm run dev:ui # Vite on port 5173
49
+
50
+ # Type checking
51
+ npm run typecheck
52
+
53
+ # Build for production
54
+ npm run build
55
+
56
+ # Start production server
57
+ npm start
58
+ ```
59
+
60
+ ## Project Status
61
+
62
+ **✅ Completed** (Phases 1-2):
63
+ - Package setup and configuration
64
+ - Express server with WebSocket
65
+ - React UI with Vite
66
+ - WebSocket client with ping/pong testing
67
+
68
+ **⏳ In Progress** (Phase 3):
69
+ - Terminal control (tmux integration)
70
+
71
+ **📋 Planned** (Phases 4-9):
72
+ - LLM integration (OpenAI GPT-4)
73
+ - Agent orchestrator
74
+ - Speech-to-Text (Deepgram)
75
+ - Text-to-Speech (OpenAI)
76
+ - Audio streaming
77
+ - UI polish
78
+
79
+ See [IMPLEMENTATION_PLAN.md](./IMPLEMENTATION_PLAN.md) for complete details.
80
+
81
+ ## Environment Variables
82
+
83
+ ```bash
84
+ OPENAI_API_KEY=your-openai-key-here # GPT-4 and TTS
85
+ DEEPGRAM_API_KEY=your-deepgram-key-here # Streaming STT
86
+ STT_MODEL=whisper-1 # Optional: override to gpt-4o-transcribe, etc.
87
+ STT_CONFIDENCE_THRESHOLD=-3.0 # Optional: reject low-confidence clips
88
+ STT_DEBUG_AUDIO_DIR=.stt-debug # Optional: persist raw dictation audio for debugging
89
+ JUNCTION_HOME=~/.junction # Runtime state directory (agents/, etc.)
90
+ JUNCTION_LISTEN=127.0.0.1:6767 # Listen address (host:port or /path/to/socket)
91
+ ```
92
+
93
+ `JUNCTION_HOME` defaults to `~/.junction` and isolates runtime artifacts like `agents/`. `JUNCTION_LISTEN` controls the daemon listen address. For blue/green testing you can run a parallel server without touching production state:
94
+
95
+ ```bash
96
+ JUNCTION_HOME=~/.junction-blue JUNCTION_LISTEN=127.0.0.1:7777 npm run dev
97
+ ```
98
+
99
+ ## Tech Stack
100
+
101
+ - **Server**: Express, TypeScript, ws (WebSocket)
102
+ - **Client**: React 18, Vite, TypeScript
103
+ - **Terminal**: tmux (via child_process)
104
+ - **AI**: OpenAI (LLM + TTS), Deepgram (STT)
105
+
106
+ ## Testing
107
+
108
+ Currently manual testing via:
109
+ 1. Start servers: `npm run dev`
110
+ 2. Open http://localhost:5173
111
+ 3. Test WebSocket connection (green status indicator)
112
+ 4. Click "Send Ping" button to test communication
113
+
114
+ More testing guidance as features are implemented.
115
+
116
+ ## License
117
+
118
+ 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 junction”), acknowledge and create immediately; otherwise, ask.
164
+
165
+ ```javascript
166
+ // Claude Code with planning
167
+ create_agent({
168
+ cwd: "~/dev/junction",
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/junction",
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
+ **junction**
301
+ - Location: `~/dev/junction`
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,141 @@
1
+ import { fileURLToPath, pathToFileURL } from "url";
2
+ import { existsSync } from "node:fs";
3
+ import { runSupervisor } from "./supervisor.js";
4
+ function parseConfig(argv) {
5
+ let devMode = false;
6
+ const workerArgs = [];
7
+ for (const arg of argv) {
8
+ if (arg === "--dev") {
9
+ devMode = true;
10
+ continue;
11
+ }
12
+ workerArgs.push(arg);
13
+ }
14
+ return { devMode, workerArgs };
15
+ }
16
+ function resolveWorkerEntry() {
17
+ const candidates = [
18
+ fileURLToPath(new URL("../server/server/index.js", import.meta.url)),
19
+ fileURLToPath(new URL("../dist/server/server/index.js", import.meta.url)),
20
+ fileURLToPath(new URL("../src/server/index.ts", import.meta.url)),
21
+ fileURLToPath(new URL("../../src/server/index.ts", import.meta.url)),
22
+ ];
23
+ for (const candidate of candidates) {
24
+ if (existsSync(candidate)) {
25
+ return candidate;
26
+ }
27
+ }
28
+ return candidates[0];
29
+ }
30
+ function resolveDevWorkerEntry() {
31
+ const candidate = fileURLToPath(new URL("../src/server/index.ts", import.meta.url));
32
+ if (!existsSync(candidate)) {
33
+ throw new Error(`Dev worker entry not found: ${candidate}`);
34
+ }
35
+ return candidate;
36
+ }
37
+ function resolveWorkerExecArgv(workerEntry) {
38
+ return workerEntry.endsWith(".ts") ? ["--import", "tsx"] : [];
39
+ }
40
+ function assertServerRuntimeExports(candidate, value) {
41
+ if (typeof value !== "object" || value === null) {
42
+ throw new Error(`Invalid server runtime exports at ${candidate}: module is not an object`);
43
+ }
44
+ const mod = value;
45
+ if (typeof mod.loadConfig !== "function") {
46
+ throw new Error(`Invalid server runtime exports at ${candidate}: missing loadConfig`);
47
+ }
48
+ if (typeof mod.acquirePidLock !== "function") {
49
+ throw new Error(`Invalid server runtime exports at ${candidate}: missing acquirePidLock`);
50
+ }
51
+ if (typeof mod.releasePidLock !== "function") {
52
+ throw new Error(`Invalid server runtime exports at ${candidate}: missing releasePidLock`);
53
+ }
54
+ if (typeof mod.resolveJunctionHome !== "function") {
55
+ throw new Error(`Invalid server runtime exports at ${candidate}: missing resolveJunctionHome`);
56
+ }
57
+ if (typeof mod.PidLockError !== "function") {
58
+ throw new Error(`Invalid server runtime exports at ${candidate}: missing PidLockError`);
59
+ }
60
+ return {
61
+ loadConfig: mod.loadConfig,
62
+ acquirePidLock: mod.acquirePidLock,
63
+ releasePidLock: mod.releasePidLock,
64
+ resolveJunctionHome: mod.resolveJunctionHome,
65
+ PidLockError: mod.PidLockError,
66
+ };
67
+ }
68
+ async function loadServerRuntimeExports(devMode) {
69
+ const candidates = devMode
70
+ ? [
71
+ fileURLToPath(new URL("../src/server/exports.ts", import.meta.url)),
72
+ fileURLToPath(new URL("../../src/server/exports.ts", import.meta.url)),
73
+ fileURLToPath(new URL("../server/server/exports.js", import.meta.url)),
74
+ ]
75
+ : [
76
+ fileURLToPath(new URL("../server/server/exports.js", import.meta.url)),
77
+ fileURLToPath(new URL("../dist/server/server/exports.js", import.meta.url)),
78
+ fileURLToPath(new URL("../src/server/exports.ts", import.meta.url)),
79
+ ];
80
+ for (const candidate of candidates) {
81
+ if (!existsSync(candidate)) {
82
+ continue;
83
+ }
84
+ const loaded = await import(pathToFileURL(candidate).href);
85
+ return assertServerRuntimeExports(candidate, loaded);
86
+ }
87
+ throw new Error("Unable to resolve server runtime exports for daemon runner");
88
+ }
89
+ async function main() {
90
+ const config = parseConfig(process.argv.slice(2));
91
+ const runtime = await loadServerRuntimeExports(config.devMode);
92
+ const workerEntry = config.devMode ? resolveDevWorkerEntry() : resolveWorkerEntry();
93
+ const workerEnv = {
94
+ ...process.env,
95
+ JUNCTION_PID_LOCK_MODE: "external",
96
+ };
97
+ const junctionHome = runtime.resolveJunctionHome(workerEnv);
98
+ const daemonConfig = runtime.loadConfig(junctionHome, { env: workerEnv });
99
+ try {
100
+ await runtime.acquirePidLock(junctionHome, daemonConfig.listen, {
101
+ ownerPid: process.pid,
102
+ });
103
+ }
104
+ catch (error) {
105
+ if (error instanceof runtime.PidLockError) {
106
+ process.stderr.write(`${error.message}\n`);
107
+ process.exit(1);
108
+ return;
109
+ }
110
+ throw error;
111
+ }
112
+ let lockReleased = false;
113
+ const listenAddress = daemonConfig.listen;
114
+ const releaseLock = async () => {
115
+ if (lockReleased) {
116
+ return;
117
+ }
118
+ lockReleased = true;
119
+ await runtime.releasePidLock(junctionHome, listenAddress, {
120
+ ownerPid: process.pid,
121
+ });
122
+ };
123
+ runSupervisor({
124
+ name: "DaemonRunner",
125
+ startupMessage: config.devMode
126
+ ? "Starting daemon worker (dev mode, crash restarts enabled)"
127
+ : "Starting daemon worker (IPC restart enabled)",
128
+ resolveWorkerEntry: () => workerEntry,
129
+ workerArgs: config.workerArgs,
130
+ workerEnv,
131
+ workerExecArgv: resolveWorkerExecArgv(workerEntry),
132
+ restartOnCrash: config.devMode,
133
+ onSupervisorExit: releaseLock,
134
+ });
135
+ }
136
+ void main().catch((error) => {
137
+ const message = error instanceof Error ? error.stack ?? error.message : String(error);
138
+ process.stderr.write(`${message}\n`);
139
+ process.exit(1);
140
+ });
141
+ //# sourceMappingURL=daemon-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-runner.js","sourceRoot":"","sources":["../../scripts/daemon-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { fileURLToPath } from "url";
3
+ import dotenv from "dotenv";
4
+ dotenv.config({
5
+ path: fileURLToPath(new URL("../.env", import.meta.url)),
6
+ quiet: true,
7
+ });
8
+ const daemonRunnerEntry = fileURLToPath(new URL("./daemon-runner.ts", import.meta.url));
9
+ const result = spawnSync(process.execPath, [...process.execArgv, daemonRunnerEntry, "--dev", ...process.argv.slice(2)], {
10
+ stdio: "inherit",
11
+ env: process.env,
12
+ });
13
+ if (result.error) {
14
+ throw result.error;
15
+ }
16
+ process.exit(result.status ?? 1);
17
+ //# 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,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,CAAC;IACZ,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxD,KAAK,EAAE,IAAI;CACZ,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxF,MAAM,MAAM,GAAG,SAAS,CACtB,OAAO,CAAC,QAAQ,EAChB,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC3E;IACE,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,OAAO,CAAC,GAAG;CACjB,CACF,CAAC;AAEF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,MAAM,MAAM,CAAC,KAAK,CAAC;AACrB,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,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
+ });