@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
@@ -0,0 +1,391 @@
1
+ import { readdir, readFile, stat } from "fs/promises";
2
+ import { extname, join } from "path";
3
+ /**
4
+ * Icon file patterns to search for, in priority order.
5
+ * Patterns starting with '*' are glob patterns (e.g., icon-*.png).
6
+ */
7
+ export const ICON_PATTERNS = [
8
+ "favicon.ico",
9
+ "favicon.png",
10
+ "favicon.svg",
11
+ "favico.ico",
12
+ "favico.png",
13
+ "favico.svg",
14
+ "icon.png",
15
+ "icon.svg",
16
+ "app-icon.png",
17
+ "app-icon.svg",
18
+ "apple-touch-icon.png",
19
+ "icon-*.png",
20
+ "logo.png",
21
+ "logo.svg",
22
+ ];
23
+ /**
24
+ * Directories to search first (in priority order).
25
+ */
26
+ export const PRIORITY_DIRS = ["public", "static", "assets", "images", "img"];
27
+ /**
28
+ * Monorepo package directory patterns to scan (e.g., packages/app, apps/web).
29
+ */
30
+ export const MONOREPO_PACKAGE_DIRS = ["packages", "apps"];
31
+ /**
32
+ * Directories to ignore during search.
33
+ */
34
+ export const IGNORED_DIRS = [
35
+ ".git",
36
+ "node_modules",
37
+ "dist",
38
+ "build",
39
+ ".next",
40
+ ".nuxt",
41
+ ".output",
42
+ "coverage",
43
+ ".cache",
44
+ "vendor",
45
+ "src",
46
+ "lib",
47
+ "test",
48
+ "tests",
49
+ "__tests__",
50
+ ];
51
+ const MAX_ICON_SIZE = 32 * 1024; // 32KB max
52
+ function getPngDimensions(buffer) {
53
+ // PNG header: 89 50 4E 47 0D 0A 1A 0A
54
+ if (buffer.length < 24)
55
+ return null;
56
+ if (buffer[0] !== 0x89 || buffer[1] !== 0x50 || buffer[2] !== 0x4e || buffer[3] !== 0x47) {
57
+ return null;
58
+ }
59
+ // Width and height are at bytes 16-19 and 20-23 (big endian)
60
+ const width = buffer.readUInt32BE(16);
61
+ const height = buffer.readUInt32BE(20);
62
+ return { width, height };
63
+ }
64
+ function getJpegDimensions(buffer) {
65
+ // JPEG starts with FF D8 FF
66
+ if (buffer.length < 4)
67
+ return null;
68
+ if (buffer[0] !== 0xff || buffer[1] !== 0xd8)
69
+ return null;
70
+ let offset = 2;
71
+ while (offset < buffer.length - 8) {
72
+ if (buffer[offset] !== 0xff) {
73
+ offset++;
74
+ continue;
75
+ }
76
+ const marker = buffer[offset + 1];
77
+ // SOF0-SOF2 markers contain dimensions
78
+ if (marker >= 0xc0 && marker <= 0xc2) {
79
+ const height = buffer.readUInt16BE(offset + 5);
80
+ const width = buffer.readUInt16BE(offset + 7);
81
+ return { width, height };
82
+ }
83
+ // Skip to next marker
84
+ const length = buffer.readUInt16BE(offset + 2);
85
+ offset += 2 + length;
86
+ }
87
+ return null;
88
+ }
89
+ function getGifDimensions(buffer) {
90
+ // GIF header: GIF87a or GIF89a
91
+ if (buffer.length < 10)
92
+ return null;
93
+ if (buffer[0] !== 0x47 || buffer[1] !== 0x49 || buffer[2] !== 0x46)
94
+ return null;
95
+ // Width and height at bytes 6-7 and 8-9 (little endian)
96
+ const width = buffer.readUInt16LE(6);
97
+ const height = buffer.readUInt16LE(8);
98
+ return { width, height };
99
+ }
100
+ function getWebpDimensions(buffer) {
101
+ // WEBP: RIFF....WEBP
102
+ if (buffer.length < 30)
103
+ return null;
104
+ if (buffer.toString("ascii", 0, 4) !== "RIFF")
105
+ return null;
106
+ if (buffer.toString("ascii", 8, 12) !== "WEBP")
107
+ return null;
108
+ const chunkType = buffer.toString("ascii", 12, 16);
109
+ if (chunkType === "VP8 ") {
110
+ // Lossy format - dimensions at offset 26-27 and 28-29
111
+ const width = buffer.readUInt16LE(26) & 0x3fff;
112
+ const height = buffer.readUInt16LE(28) & 0x3fff;
113
+ return { width, height };
114
+ }
115
+ else if (chunkType === "VP8L") {
116
+ // Lossless format
117
+ const bits = buffer.readUInt32LE(21);
118
+ const width = (bits & 0x3fff) + 1;
119
+ const height = ((bits >> 14) & 0x3fff) + 1;
120
+ return { width, height };
121
+ }
122
+ return null;
123
+ }
124
+ function getImageDimensions(buffer, mimeType) {
125
+ switch (mimeType) {
126
+ case "image/png":
127
+ return getPngDimensions(buffer);
128
+ case "image/jpeg":
129
+ return getJpegDimensions(buffer);
130
+ case "image/gif":
131
+ return getGifDimensions(buffer);
132
+ case "image/webp":
133
+ return getWebpDimensions(buffer);
134
+ case "image/x-icon":
135
+ // ICO files are typically square, trust them
136
+ return { width: 1, height: 1 };
137
+ case "image/svg+xml":
138
+ // SVG can be any aspect ratio but icons are typically square, trust them
139
+ return { width: 1, height: 1 };
140
+ default:
141
+ return null;
142
+ }
143
+ }
144
+ function isSquareImage(buffer, mimeType) {
145
+ const dimensions = getImageDimensions(buffer, mimeType);
146
+ if (!dimensions)
147
+ return false;
148
+ return dimensions.width === dimensions.height;
149
+ }
150
+ function getMimeType(filename) {
151
+ const ext = extname(filename).toLowerCase();
152
+ switch (ext) {
153
+ case ".ico":
154
+ return "image/x-icon";
155
+ case ".png":
156
+ return "image/png";
157
+ case ".svg":
158
+ return "image/svg+xml";
159
+ case ".jpg":
160
+ case ".jpeg":
161
+ return "image/jpeg";
162
+ case ".gif":
163
+ return "image/gif";
164
+ case ".webp":
165
+ return "image/webp";
166
+ default:
167
+ return "application/octet-stream";
168
+ }
169
+ }
170
+ function matchesPattern(filename, pattern) {
171
+ if (pattern.includes("*")) {
172
+ // Convert glob pattern to regex
173
+ const regexPattern = pattern
174
+ .replace(/\./g, "\\.")
175
+ .replace(/\*/g, ".*");
176
+ return new RegExp(`^${regexPattern}$`).test(filename);
177
+ }
178
+ return filename === pattern;
179
+ }
180
+ async function findIconInDir(dir, patterns) {
181
+ let entries;
182
+ try {
183
+ entries = await readdir(dir);
184
+ }
185
+ catch {
186
+ return null;
187
+ }
188
+ // Check each pattern in order of priority
189
+ for (const pattern of patterns) {
190
+ for (const entry of entries) {
191
+ if (matchesPattern(entry, pattern)) {
192
+ const fullPath = join(dir, entry);
193
+ try {
194
+ const stats = await stat(fullPath);
195
+ if (stats.isFile()) {
196
+ return fullPath;
197
+ }
198
+ }
199
+ catch {
200
+ // File may have been deleted, continue
201
+ }
202
+ }
203
+ }
204
+ }
205
+ return null;
206
+ }
207
+ async function searchDirRecursively(dir, patterns, ignoredDirs, maxDepth, currentDepth = 0) {
208
+ if (currentDepth > maxDepth) {
209
+ return null;
210
+ }
211
+ // First check this directory for icons
212
+ const found = await findIconInDir(dir, patterns);
213
+ if (found) {
214
+ return found;
215
+ }
216
+ // Then recurse into subdirectories
217
+ let entries;
218
+ try {
219
+ entries = await readdir(dir);
220
+ }
221
+ catch {
222
+ return null;
223
+ }
224
+ for (const entry of entries) {
225
+ if (ignoredDirs.has(entry)) {
226
+ continue;
227
+ }
228
+ const fullPath = join(dir, entry);
229
+ try {
230
+ const stats = await stat(fullPath);
231
+ if (stats.isDirectory()) {
232
+ const result = await searchDirRecursively(fullPath, patterns, ignoredDirs, maxDepth, currentDepth + 1);
233
+ if (result) {
234
+ return result;
235
+ }
236
+ }
237
+ }
238
+ catch {
239
+ // Directory may be inaccessible, continue
240
+ }
241
+ }
242
+ return null;
243
+ }
244
+ /**
245
+ * Find a project icon/favicon in the given directory.
246
+ * Searches priority directories first, then falls back to scanning the root.
247
+ *
248
+ * @param projectDir - The root directory of the project to search
249
+ * @param maxDepth - Maximum depth to search (default: 3)
250
+ * @returns The absolute path to the found icon, or null if not found
251
+ */
252
+ export async function findProjectIcon(projectDir, maxDepth = 3) {
253
+ const ignoredDirsSet = new Set(IGNORED_DIRS);
254
+ // First search priority directories
255
+ for (const priorityDir of PRIORITY_DIRS) {
256
+ const priorityPath = join(projectDir, priorityDir);
257
+ try {
258
+ const stats = await stat(priorityPath);
259
+ if (stats.isDirectory()) {
260
+ const result = await searchDirRecursively(priorityPath, ICON_PATTERNS, ignoredDirsSet, maxDepth - 1);
261
+ if (result) {
262
+ return result;
263
+ }
264
+ }
265
+ }
266
+ catch {
267
+ // Directory doesn't exist, continue
268
+ }
269
+ }
270
+ // Then search monorepo package directories (packages/*, apps/*)
271
+ for (const monoDir of MONOREPO_PACKAGE_DIRS) {
272
+ const monoPath = join(projectDir, monoDir);
273
+ let packageEntries;
274
+ try {
275
+ packageEntries = await readdir(monoPath);
276
+ }
277
+ catch {
278
+ continue;
279
+ }
280
+ for (const packageName of packageEntries) {
281
+ const packagePath = join(monoPath, packageName);
282
+ try {
283
+ const packageStats = await stat(packagePath);
284
+ if (!packageStats.isDirectory())
285
+ continue;
286
+ }
287
+ catch {
288
+ continue;
289
+ }
290
+ // Search priority dirs within the package
291
+ for (const priorityDir of PRIORITY_DIRS) {
292
+ const priorityPath = join(packagePath, priorityDir);
293
+ try {
294
+ const priorityStats = await stat(priorityPath);
295
+ if (priorityStats.isDirectory()) {
296
+ const result = await searchDirRecursively(priorityPath, ICON_PATTERNS, ignoredDirsSet, maxDepth - 1);
297
+ if (result) {
298
+ return result;
299
+ }
300
+ }
301
+ }
302
+ catch {
303
+ // Directory doesn't exist, continue
304
+ }
305
+ }
306
+ // Search package root
307
+ const found = await findIconInDir(packagePath, ICON_PATTERNS);
308
+ if (found) {
309
+ return found;
310
+ }
311
+ }
312
+ }
313
+ // Then search root and any other non-priority directories
314
+ const found = await findDirRecursively(projectDir);
315
+ if (found) {
316
+ return found;
317
+ }
318
+ return null;
319
+ }
320
+ async function findDirRecursively(dir, maxDepth = 2, currentDepth = 0) {
321
+ const ignoredDirsSet = new Set(IGNORED_DIRS);
322
+ const priorityDirsSet = new Set(PRIORITY_DIRS);
323
+ if (currentDepth > maxDepth) {
324
+ return null;
325
+ }
326
+ // Check root for icons
327
+ const found = await findIconInDir(dir, ICON_PATTERNS);
328
+ if (found) {
329
+ return found;
330
+ }
331
+ // Don't recurse further from root - we already searched priority dirs
332
+ if (currentDepth > 0) {
333
+ let entries;
334
+ try {
335
+ entries = await readdir(dir);
336
+ }
337
+ catch {
338
+ return null;
339
+ }
340
+ for (const entry of entries) {
341
+ if (ignoredDirsSet.has(entry) || priorityDirsSet.has(entry)) {
342
+ continue;
343
+ }
344
+ const fullPath = join(dir, entry);
345
+ try {
346
+ const stats = await stat(fullPath);
347
+ if (stats.isDirectory()) {
348
+ const result = await findDirRecursively(fullPath, maxDepth, currentDepth + 1);
349
+ if (result) {
350
+ return result;
351
+ }
352
+ }
353
+ }
354
+ catch {
355
+ // Continue
356
+ }
357
+ }
358
+ }
359
+ return null;
360
+ }
361
+ /**
362
+ * Find and read a project icon/favicon, returning it as base64.
363
+ * Only returns square icons smaller than MAX_ICON_SIZE (32KB).
364
+ *
365
+ * @param projectDir - The root directory of the project to search
366
+ * @returns The icon data with mime type, or null if not found
367
+ */
368
+ export async function getProjectIcon(projectDir) {
369
+ const iconPath = await findProjectIcon(projectDir);
370
+ if (!iconPath) {
371
+ return null;
372
+ }
373
+ try {
374
+ const stats = await stat(iconPath);
375
+ if (stats.size > MAX_ICON_SIZE) {
376
+ return null;
377
+ }
378
+ const buffer = await readFile(iconPath);
379
+ const mimeType = getMimeType(iconPath);
380
+ // Only return square images
381
+ if (!isSquareImage(buffer, mimeType)) {
382
+ return null;
383
+ }
384
+ const data = buffer.toString("base64");
385
+ return { data, mimeType };
386
+ }
387
+ catch {
388
+ return null;
389
+ }
390
+ }
391
+ //# sourceMappingURL=project-icon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-icon.js","sourceRoot":"","sources":["../../../src/utils/project-icon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { z } from "zod";
2
+ declare const JunctionWorktreeMetadataSchema: z.ZodUnion<[z.ZodObject<{
3
+ version: z.ZodLiteral<1>;
4
+ baseRefName: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ version: 1;
7
+ baseRefName: string;
8
+ }, {
9
+ version: 1;
10
+ baseRefName: string;
11
+ }>, z.ZodObject<{
12
+ version: z.ZodLiteral<2>;
13
+ baseRefName: z.ZodString;
14
+ runtime: z.ZodOptional<z.ZodObject<{
15
+ worktreePort: z.ZodNumber;
16
+ }, "strip", z.ZodTypeAny, {
17
+ worktreePort: number;
18
+ }, {
19
+ worktreePort: number;
20
+ }>>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ version: 2;
23
+ baseRefName: string;
24
+ runtime?: {
25
+ worktreePort: number;
26
+ } | undefined;
27
+ }, {
28
+ version: 2;
29
+ baseRefName: string;
30
+ runtime?: {
31
+ worktreePort: number;
32
+ } | undefined;
33
+ }>]>;
34
+ export type JunctionWorktreeMetadata = z.infer<typeof JunctionWorktreeMetadataSchema>;
35
+ export declare function getJunctionWorktreeMetadataPath(worktreeRoot: string): string;
36
+ export declare function normalizeBaseRefName(input: string): string;
37
+ export declare function writeJunctionWorktreeMetadata(worktreeRoot: string, options: {
38
+ baseRefName: string;
39
+ }): void;
40
+ export declare function writeJunctionWorktreeRuntimeMetadata(worktreeRoot: string, options: {
41
+ worktreePort: number;
42
+ }): void;
43
+ export declare function readJunctionWorktreeMetadata(worktreeRoot: string): JunctionWorktreeMetadata | null;
44
+ export declare function requireJunctionWorktreeBaseRefName(worktreeRoot: string): string;
45
+ export declare function readJunctionWorktreeRuntimePort(worktreeRoot: string): number | null;
46
+ export {};
47
+ //# sourceMappingURL=worktree-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-metadata.d.ts","sourceRoot":"","sources":["../../../src/utils/worktree-metadata.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,QAAA,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAGlC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAwBtF,wBAAgB,+BAA+B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAG5E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAS1D;AAED,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GAC/B,IAAI,CAgBN;AAED,wBAAgB,oCAAoC,CAClD,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAChC,IAAI,CAoBN;AAED,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAOlG;AAED,wBAAgB,kCAAkC,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAO/E;AAED,wBAAgB,+BAA+B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASnF"}
@@ -0,0 +1,116 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
2
+ import { isAbsolute, join, resolve } from "path";
3
+ import { z } from "zod";
4
+ const JunctionWorktreeMetadataV1Schema = z.object({
5
+ version: z.literal(1),
6
+ baseRefName: z.string().min(1),
7
+ });
8
+ const JunctionWorktreeMetadataV2Schema = z.object({
9
+ version: z.literal(2),
10
+ baseRefName: z.string().min(1),
11
+ runtime: z
12
+ .object({
13
+ worktreePort: z.number().int().positive(),
14
+ })
15
+ .optional(),
16
+ });
17
+ const JunctionWorktreeMetadataSchema = z.union([
18
+ JunctionWorktreeMetadataV1Schema,
19
+ JunctionWorktreeMetadataV2Schema,
20
+ ]);
21
+ function getGitDirForWorktreeRoot(worktreeRoot) {
22
+ const gitPath = join(worktreeRoot, ".git");
23
+ if (!existsSync(gitPath)) {
24
+ throw new Error(`Not a git repository: ${worktreeRoot}`);
25
+ }
26
+ // In a worktree checkout, `.git` is a file containing `gitdir: <path>`.
27
+ // In a normal checkout, `.git` is a directory.
28
+ try {
29
+ const gitFileContent = readFileSync(gitPath, "utf8");
30
+ const match = gitFileContent.match(/gitdir:\s*(.+)/);
31
+ if (match?.[1]) {
32
+ const raw = match[1].trim();
33
+ return isAbsolute(raw) ? raw : resolve(worktreeRoot, raw);
34
+ }
35
+ }
36
+ catch {
37
+ // If `.git` is a directory, readFileSync will throw; fall through.
38
+ }
39
+ return gitPath;
40
+ }
41
+ export function getJunctionWorktreeMetadataPath(worktreeRoot) {
42
+ const gitDir = getGitDirForWorktreeRoot(worktreeRoot);
43
+ return join(gitDir, "junction", "worktree.json");
44
+ }
45
+ export function normalizeBaseRefName(input) {
46
+ const trimmed = input.trim();
47
+ if (!trimmed) {
48
+ throw new Error("Base branch is required");
49
+ }
50
+ if (trimmed.startsWith("origin/")) {
51
+ return trimmed.slice("origin/".length);
52
+ }
53
+ return trimmed;
54
+ }
55
+ export function writeJunctionWorktreeMetadata(worktreeRoot, options) {
56
+ const baseRefName = normalizeBaseRefName(options.baseRefName);
57
+ if (baseRefName === "HEAD") {
58
+ throw new Error("Base branch cannot be HEAD");
59
+ }
60
+ if (baseRefName.includes("..") || baseRefName.includes("@{")) {
61
+ throw new Error(`Invalid base branch: ${baseRefName}`);
62
+ }
63
+ if (!/^[0-9A-Za-z._/-]+$/.test(baseRefName)) {
64
+ throw new Error(`Invalid base branch: ${baseRefName}`);
65
+ }
66
+ const metadataPath = getJunctionWorktreeMetadataPath(worktreeRoot);
67
+ mkdirSync(join(getGitDirForWorktreeRoot(worktreeRoot), "junction"), { recursive: true });
68
+ const metadata = { version: 1, baseRefName };
69
+ writeFileSync(metadataPath, `${JSON.stringify(metadata, null, 2)}\n`, "utf8");
70
+ }
71
+ export function writeJunctionWorktreeRuntimeMetadata(worktreeRoot, options) {
72
+ if (!Number.isInteger(options.worktreePort) || options.worktreePort <= 0) {
73
+ throw new Error(`Invalid worktree runtime port: ${options.worktreePort}`);
74
+ }
75
+ const current = readJunctionWorktreeMetadata(worktreeRoot);
76
+ if (!current) {
77
+ throw new Error("Cannot persist worktree runtime metadata: missing base metadata");
78
+ }
79
+ const metadataPath = getJunctionWorktreeMetadataPath(worktreeRoot);
80
+ mkdirSync(join(getGitDirForWorktreeRoot(worktreeRoot), "junction"), { recursive: true });
81
+ const next = {
82
+ version: 2,
83
+ baseRefName: current.baseRefName,
84
+ runtime: {
85
+ worktreePort: options.worktreePort,
86
+ },
87
+ };
88
+ writeFileSync(metadataPath, `${JSON.stringify(next, null, 2)}\n`, "utf8");
89
+ }
90
+ export function readJunctionWorktreeMetadata(worktreeRoot) {
91
+ const metadataPath = getJunctionWorktreeMetadataPath(worktreeRoot);
92
+ if (!existsSync(metadataPath)) {
93
+ return null;
94
+ }
95
+ const parsed = JSON.parse(readFileSync(metadataPath, "utf8"));
96
+ return JunctionWorktreeMetadataSchema.parse(parsed);
97
+ }
98
+ export function requireJunctionWorktreeBaseRefName(worktreeRoot) {
99
+ const metadataPath = getJunctionWorktreeMetadataPath(worktreeRoot);
100
+ const metadata = readJunctionWorktreeMetadata(worktreeRoot);
101
+ if (!metadata) {
102
+ throw new Error(`Missing Junction worktree base metadata: ${metadataPath}`);
103
+ }
104
+ return metadata.baseRefName;
105
+ }
106
+ export function readJunctionWorktreeRuntimePort(worktreeRoot) {
107
+ const metadata = readJunctionWorktreeMetadata(worktreeRoot);
108
+ if (!metadata) {
109
+ return null;
110
+ }
111
+ if (metadata.version === 2 && metadata.runtime?.worktreePort) {
112
+ return metadata.runtime.worktreePort;
113
+ }
114
+ return null;
115
+ }
116
+ //# sourceMappingURL=worktree-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-metadata.js","sourceRoot":"","sources":["../../../src/utils/worktree-metadata.ts"],"names":[],"mappings":"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"}