purplemux 0.1.21 → 0.2.0

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 (428) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +77 -77
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/required-server-files.json +1 -1
  5. package/.next/standalone/.next/routes-manifest.json +13 -7
  6. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00glsnv._.js +3 -0
  7. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__05bsxq0._.js → [root-of-the-server]__00yjayf._.js} +2 -2
  8. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01.~37j._.js +3 -0
  9. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03l15.f._.js +3 -0
  10. package/.next/standalone/.next/server/chunks/[root-of-the-server]__045vzzi._.js +1 -1
  11. package/.next/standalone/.next/server/chunks/[root-of-the-server]__04cr_m8._.js +3 -0
  12. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0ff8o47._.js → [root-of-the-server]__04o.cbq._.js} +2 -2
  13. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05ij_ys._.js +42 -0
  14. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07gfnob._.js +3 -0
  15. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07xijrd._.js +3 -0
  16. package/.next/standalone/.next/server/chunks/[root-of-the-server]__09gkm_6._.js +3 -0
  17. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_.po82._.js +3 -0
  18. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0auutl5._.js +5 -0
  19. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cjfc~l._.js +3 -0
  20. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l~_wd0._.js +1 -1
  21. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0m4quth._.js → [root-of-the-server]__0n61.a8._.js} +2 -2
  22. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ovn6yp._.js +3 -0
  23. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qvunc5._.js +3 -0
  24. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t1c-6w._.js +3 -0
  25. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__09w77m2._.js → [root-of-the-server]__0t7wqt6._.js} +2 -2
  26. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0vi8p6v._.js +3 -0
  27. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0w3m-oz._.js +3 -0
  28. package/.next/standalone/.next/server/chunks/[root-of-the-server]__11j9~6h._.js +1 -1
  29. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0xn_0ft._.js → [root-of-the-server]__12ksl6n._.js} +3 -3
  30. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12nr~pb._.js +3 -0
  31. package/.next/standalone/.next/server/chunks/_0e8e4zn._.js +1 -1
  32. package/.next/standalone/.next/server/chunks/_0isokfh._.js +1 -1
  33. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_pages-api_00-t8sq.js +3 -0
  34. package/.next/standalone/.next/server/chunks/src_lib_136edwc._.js +3 -0
  35. package/.next/standalone/.next/server/chunks/src_lib_layout-store_ts_0fanx7c._.js +1 -1
  36. package/.next/standalone/.next/server/chunks/src_lib_session-parser_ts_0~rhicw._.js +1 -1
  37. package/.next/standalone/.next/server/chunks/src_lib_status-manager_ts_003hlhy._.js +13 -1
  38. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0au.ssp._.js +3 -0
  39. package/.next/standalone/.next/server/chunks/ssr/{_0_mc3i2._.js → _00ehnd~._.js} +2 -2
  40. package/.next/standalone/.next/server/chunks/ssr/{_0qejycp._.js → _00rrt71._.js} +1 -1
  41. package/.next/standalone/.next/server/chunks/ssr/_06yggfn._.js +1 -1
  42. package/.next/standalone/.next/server/chunks/ssr/{_0kjoxb9._.js → _08h9ynz._.js} +2 -2
  43. package/.next/standalone/.next/server/chunks/ssr/_08ytq3p._.js +1 -1
  44. package/.next/standalone/.next/server/chunks/ssr/{_0h~fc23._.js → _0_c~3id._.js} +2 -2
  45. package/.next/standalone/.next/server/chunks/ssr/{_0-xx2s1._.js → _0_owbnq._.js} +2 -2
  46. package/.next/standalone/.next/server/chunks/ssr/_0al4.z9._.js +1 -1
  47. package/.next/standalone/.next/server/chunks/ssr/_0b~zgl1._.js +1 -1
  48. package/.next/standalone/.next/server/chunks/ssr/{_0quk21n._.js → _0dg4_bi._.js} +2 -2
  49. package/.next/standalone/.next/server/chunks/ssr/{_0qy269j._.js → _0gp1meg._.js} +2 -2
  50. package/.next/standalone/.next/server/chunks/ssr/_0iy5a-w._.js +1 -1
  51. package/.next/standalone/.next/server/chunks/ssr/_0js4l3t._.js +1 -1
  52. package/.next/standalone/.next/server/chunks/ssr/{_0fuovbm._.js → _0lnui2f._.js} +2 -2
  53. package/.next/standalone/.next/server/chunks/ssr/_0nkeoiw._.js +1 -1
  54. package/.next/standalone/.next/server/chunks/ssr/_0qbbxeq._.js +1 -1
  55. package/.next/standalone/.next/server/chunks/ssr/{_06.nllk._.js → _0rxhzwm._.js} +2 -2
  56. package/.next/standalone/.next/server/chunks/ssr/{_0g258pg._.js → _0sfctwm._.js} +2 -2
  57. package/.next/standalone/.next/server/chunks/ssr/{_0c0hpua._.js → _0ulmx3c._.js} +2 -2
  58. package/.next/standalone/.next/server/chunks/ssr/{_0k9ybcl._.js → _0wlh.pc._.js} +2 -2
  59. package/.next/standalone/.next/server/chunks/ssr/{_11wj.a4._.js → _0y5jzd3._.js} +1 -1
  60. package/.next/standalone/.next/server/chunks/ssr/_0z61aq-._.js +3 -0
  61. package/.next/standalone/.next/server/chunks/ssr/{_0lhf6qf._.js → _0~.theb._.js} +2 -2
  62. package/.next/standalone/.next/server/chunks/ssr/{_0si9.17._.js → _11rnj4l._.js} +2 -2
  63. package/.next/standalone/.next/server/chunks/ssr/{messages_127a4ox._.js → messages_046iw4z._.js} +1 -1
  64. package/.next/standalone/.next/server/chunks/ssr/{messages_005j2ko._.js → messages_0zr0cc7._.js} +1 -1
  65. package/.next/standalone/.next/server/chunks/ssr/messages_de_notification_json_[json]_cjs_02k70lx._.js +1 -1
  66. package/.next/standalone/.next/server/chunks/ssr/messages_de_session_json_[json]_cjs_0b-1vpl._.js +1 -1
  67. package/.next/standalone/.next/server/chunks/ssr/messages_de_settings_json_[json]_cjs_0ksu4_w._.js +1 -1
  68. package/.next/standalone/.next/server/chunks/ssr/messages_en_notification_json_[json]_cjs_0jqq879._.js +1 -1
  69. package/.next/standalone/.next/server/chunks/ssr/messages_en_session_json_[json]_cjs_0jaymfk._.js +1 -1
  70. package/.next/standalone/.next/server/chunks/ssr/messages_en_settings_json_[json]_cjs_0qwl-zt._.js +1 -1
  71. package/.next/standalone/.next/server/chunks/ssr/messages_es_notification_json_[json]_cjs_0q.i2xj._.js +1 -1
  72. package/.next/standalone/.next/server/chunks/ssr/messages_es_session_json_[json]_cjs_0jy1144._.js +1 -1
  73. package/.next/standalone/.next/server/chunks/ssr/messages_es_settings_json_[json]_cjs_0ce_kv6._.js +1 -1
  74. package/.next/standalone/.next/server/chunks/ssr/messages_fr_notification_json_[json]_cjs_0muj65q._.js +1 -1
  75. package/.next/standalone/.next/server/chunks/ssr/messages_fr_session_json_[json]_cjs_0rz0g.c._.js +1 -1
  76. package/.next/standalone/.next/server/chunks/ssr/messages_fr_settings_json_[json]_cjs_0h_6lba._.js +1 -1
  77. package/.next/standalone/.next/server/chunks/ssr/messages_ja_notification_json_[json]_cjs_03v~p7j._.js +1 -1
  78. package/.next/standalone/.next/server/chunks/ssr/messages_ja_session_json_[json]_cjs_0cos-uy._.js +1 -1
  79. package/.next/standalone/.next/server/chunks/ssr/messages_ja_settings_json_[json]_cjs_0pg~fls._.js +1 -1
  80. package/.next/standalone/.next/server/chunks/ssr/messages_ko_notification_json_[json]_cjs_0gx~jkl._.js +1 -1
  81. package/.next/standalone/.next/server/chunks/ssr/messages_ko_session_json_[json]_cjs_0x4saic._.js +1 -1
  82. package/.next/standalone/.next/server/chunks/ssr/messages_ko_settings_json_[json]_cjs_07xpfc8._.js +1 -1
  83. package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_notification_json_[json]_cjs_02mo05m._.js +1 -1
  84. package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_session_json_[json]_cjs_0-x8ftl._.js +1 -1
  85. package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_settings_json_[json]_cjs_0frspzp._.js +1 -1
  86. package/.next/standalone/.next/server/chunks/ssr/messages_ru_notification_json_[json]_cjs_03crije._.js +1 -1
  87. package/.next/standalone/.next/server/chunks/ssr/messages_ru_session_json_[json]_cjs_0~2-kve._.js +1 -1
  88. package/.next/standalone/.next/server/chunks/ssr/messages_ru_settings_json_[json]_cjs_08ex00.._.js +1 -1
  89. package/.next/standalone/.next/server/chunks/ssr/messages_tr_notification_json_[json]_cjs_0g.576s._.js +1 -1
  90. package/.next/standalone/.next/server/chunks/ssr/messages_tr_session_json_[json]_cjs_0zsvt_4._.js +1 -1
  91. package/.next/standalone/.next/server/chunks/ssr/messages_tr_settings_json_[json]_cjs_0piu0da._.js +1 -1
  92. package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_notification_json_[json]_cjs_07v9on4._.js +1 -1
  93. package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_session_json_[json]_cjs_134xza~._.js +1 -1
  94. package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_settings_json_[json]_cjs_0uazwgy._.js +1 -1
  95. package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_notification_json_[json]_cjs_0.ktzjy._.js +1 -1
  96. package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_session_json_[json]_cjs_0mv_~-8._.js +1 -1
  97. package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_settings_json_[json]_cjs_09u0c5l._.js +1 -1
  98. package/.next/standalone/.next/server/chunks/ssr/{node_modules_0cndrls._.js → node_modules_0kc8lix._.js} +2 -2
  99. package/.next/standalone/.next/server/chunks/ssr/src_05g_qd3._.js +1 -1
  100. package/.next/standalone/.next/server/chunks/ssr/{src_components_10v_9d0._.js → src_components_0cflin8._.js} +1 -1
  101. package/.next/standalone/.next/server/chunks/ssr/{src_components_04vn0dm._.js → src_components_0g.s~e7._.js} +1 -1
  102. package/.next/standalone/.next/server/chunks/ssr/{src_components_0gsv3ly._.js → src_components_0jrj_vu._.js} +1 -1
  103. package/.next/standalone/.next/server/chunks/ssr/{src_components_0iq~ool._.js → src_components_0rs9yzr._.js} +1 -1
  104. package/.next/standalone/.next/server/chunks/ssr/src_components_features_mobile_mobile-terminal-page_tsx_02chzch._.js +1 -1
  105. package/.next/standalone/.next/server/chunks/ssr/src_components_features_workspace_terminal-page_tsx_0wuq-jl._.js +1 -1
  106. package/.next/standalone/.next/server/chunks/ssr/src_hooks_use-browser-title_ts_0bw6.cb._.js +1 -1
  107. package/.next/standalone/.next/server/chunks/ssr/src_hooks_use-workspace-store_ts_0h40e5c._.js +1 -1
  108. package/.next/standalone/.next/server/chunks/ssr/src_lib_message-namespaces_ts_0wjpvu5._.js +3 -0
  109. package/.next/standalone/.next/server/middleware-build-manifest.js +77 -77
  110. package/.next/standalone/.next/server/pages/_app/build-manifest.json +7 -7
  111. package/.next/standalone/.next/server/pages/_app/client-build-manifest.json +1 -1
  112. package/.next/standalone/.next/server/pages/_app.js +4 -4
  113. package/.next/standalone/.next/server/pages/_app.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/pages/_error/build-manifest.json +2 -2
  115. package/.next/standalone/.next/server/pages/_error/client-build-manifest.json +1 -1
  116. package/.next/standalone/.next/server/pages/_error.js +2 -2
  117. package/.next/standalone/.next/server/pages/_error.js.nft.json +1 -1
  118. package/.next/standalone/.next/server/pages/api/check-claude.js +1 -1
  119. package/.next/standalone/.next/server/pages/api/check-claude.js.nft.json +1 -1
  120. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/result.js +1 -1
  121. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/result.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/send.js +1 -1
  123. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/send.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/status.js +1 -1
  125. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/status.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId].js +1 -1
  127. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId].js.nft.json +1 -1
  128. package/.next/standalone/.next/server/pages/api/cli/tabs.js +1 -1
  129. package/.next/standalone/.next/server/pages/api/cli/tabs.js.nft.json +1 -1
  130. package/.next/standalone/.next/server/pages/api/cli/workspaces.js +1 -1
  131. package/.next/standalone/.next/server/pages/api/cli/workspaces.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/pages/api/git/branch.js +1 -1
  133. package/.next/standalone/.next/server/pages/api/git/branch.js.nft.json +1 -1
  134. package/.next/standalone/.next/server/pages/api/git/status.js +1 -1
  135. package/.next/standalone/.next/server/pages/api/git/status.js.nft.json +1 -1
  136. package/.next/standalone/.next/server/pages/api/layout/cwd.js +1 -1
  137. package/.next/standalone/.next/server/pages/api/layout/cwd.js.nft.json +1 -1
  138. package/.next/standalone/.next/server/pages/api/layout/diff.js +1 -1
  139. package/.next/standalone/.next/server/pages/api/layout/diff.js.nft.json +1 -1
  140. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId]/move.js +1 -1
  141. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId]/move.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId].js +2 -2
  143. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId].js.nft.json +1 -1
  144. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/order.js +1 -1
  145. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/order.js.nft.json +1 -1
  146. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs.js +4 -4
  147. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs.js.nft.json +1 -1
  148. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId].js +1 -1
  149. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId].js.nft.json +1 -1
  150. package/.next/standalone/.next/server/pages/api/layout/pane.js +1 -1
  151. package/.next/standalone/.next/server/pages/api/layout/pane.js.nft.json +1 -1
  152. package/.next/standalone/.next/server/pages/api/layout.js +1 -1
  153. package/.next/standalone/.next/server/pages/api/layout.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/pages/api/message-history.js +1 -1
  155. package/.next/standalone/.next/server/pages/api/message-history.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/pages/api/push/vapid-key.js +1 -1
  157. package/.next/standalone/.next/server/pages/api/push/vapid-key.js.nft.json +1 -1
  158. package/.next/standalone/.next/server/pages/api/stats/daily-report/cache.js +1 -1
  159. package/.next/standalone/.next/server/pages/api/stats/daily-report/cache.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/pages/api/stats/daily-report/generate.js +1 -1
  161. package/.next/standalone/.next/server/pages/api/stats/daily-report/generate.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/pages/api/stats/daily-report/list.js +1 -1
  163. package/.next/standalone/.next/server/pages/api/stats/daily-report/list.js.nft.json +1 -1
  164. package/.next/standalone/.next/server/pages/api/stats/projects.js +1 -1
  165. package/.next/standalone/.next/server/pages/api/stats/projects.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/pages/api/stats/sessions.js +1 -1
  167. package/.next/standalone/.next/server/pages/api/stats/sessions.js.nft.json +1 -1
  168. package/.next/standalone/.next/server/pages/api/stats/uptime.js +1 -1
  169. package/.next/standalone/.next/server/pages/api/stats/uptime.js.nft.json +1 -1
  170. package/.next/standalone/.next/server/pages/api/status/hook.js +4 -4
  171. package/.next/standalone/.next/server/pages/api/status/hook.js.nft.json +1 -1
  172. package/.next/standalone/.next/server/pages/api/status/statusline.js +9 -1
  173. package/.next/standalone/.next/server/pages/api/status/statusline.js.nft.json +1 -1
  174. package/.next/standalone/.next/server/pages/api/system/tmux-sessions.js +1 -1
  175. package/.next/standalone/.next/server/pages/api/system/tmux-sessions.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/pages/api/timeline/entries.js +1 -1
  177. package/.next/standalone/.next/server/pages/api/timeline/entries.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/pages/api/timeline/message-counts/pages-manifest.json +3 -0
  179. package/.next/standalone/.next/server/pages/api/timeline/message-counts.js +5 -0
  180. package/.next/standalone/.next/server/pages/api/timeline/message-counts.js.map +5 -0
  181. package/.next/standalone/.next/server/pages/api/timeline/message-counts.js.nft.json +1 -0
  182. package/.next/standalone/.next/server/pages/api/timeline/sessions.js +1 -1
  183. package/.next/standalone/.next/server/pages/api/timeline/sessions.js.nft.json +1 -1
  184. package/.next/standalone/.next/server/pages/api/tmux/capture.js +1 -1
  185. package/.next/standalone/.next/server/pages/api/tmux/capture.js.nft.json +1 -1
  186. package/.next/standalone/.next/server/pages/api/tmux/info.js +1 -1
  187. package/.next/standalone/.next/server/pages/api/tmux/info.js.nft.json +1 -1
  188. package/.next/standalone/.next/server/pages/api/tmux/permission-options.js +1 -1
  189. package/.next/standalone/.next/server/pages/api/tmux/permission-options.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/pages/api/tmux/plan-options.js +1 -1
  191. package/.next/standalone/.next/server/pages/api/tmux/plan-options.js.nft.json +1 -1
  192. package/.next/standalone/.next/server/pages/api/tmux/recover-unknown.js +5 -5
  193. package/.next/standalone/.next/server/pages/api/tmux/recover-unknown.js.nft.json +1 -1
  194. package/.next/standalone/.next/server/pages/api/tmux/reset.js +3 -3
  195. package/.next/standalone/.next/server/pages/api/tmux/reset.js.nft.json +1 -1
  196. package/.next/standalone/.next/server/pages/api/tmux/send-input.js +1 -1
  197. package/.next/standalone/.next/server/pages/api/tmux/send-input.js.nft.json +1 -1
  198. package/.next/standalone/.next/server/pages/api/workspace/[workspaceId].js +1 -1
  199. package/.next/standalone/.next/server/pages/api/workspace/[workspaceId].js.nft.json +1 -1
  200. package/.next/standalone/.next/server/pages/api/workspace/active.js +1 -1
  201. package/.next/standalone/.next/server/pages/api/workspace/active.js.nft.json +1 -1
  202. package/.next/standalone/.next/server/pages/api/workspace/reorder.js +1 -1
  203. package/.next/standalone/.next/server/pages/api/workspace/reorder.js.nft.json +1 -1
  204. package/.next/standalone/.next/server/pages/api/workspace/validate.js +1 -1
  205. package/.next/standalone/.next/server/pages/api/workspace/validate.js.nft.json +1 -1
  206. package/.next/standalone/.next/server/pages/api/workspace.js +4 -4
  207. package/.next/standalone/.next/server/pages/api/workspace.js.nft.json +1 -1
  208. package/.next/standalone/.next/server/pages/de/404.html +1 -1
  209. package/.next/standalone/.next/server/pages/de/500.html +1 -1
  210. package/.next/standalone/.next/server/pages/en/404.html +1 -1
  211. package/.next/standalone/.next/server/pages/en/500.html +1 -1
  212. package/.next/standalone/.next/server/pages/es/404.html +1 -1
  213. package/.next/standalone/.next/server/pages/es/500.html +1 -1
  214. package/.next/standalone/.next/server/pages/fr/404.html +1 -1
  215. package/.next/standalone/.next/server/pages/fr/500.html +1 -1
  216. package/.next/standalone/.next/server/pages/index/build-manifest.json +12 -12
  217. package/.next/standalone/.next/server/pages/index/client-build-manifest.json +1 -1
  218. package/.next/standalone/.next/server/pages/index/react-loadable-manifest.json +6 -6
  219. package/.next/standalone/.next/server/pages/index.js +13 -13
  220. package/.next/standalone/.next/server/pages/index.js.nft.json +1 -1
  221. package/.next/standalone/.next/server/pages/ja/404.html +1 -1
  222. package/.next/standalone/.next/server/pages/ja/500.html +1 -1
  223. package/.next/standalone/.next/server/pages/ko/404.html +1 -1
  224. package/.next/standalone/.next/server/pages/ko/500.html +1 -1
  225. package/.next/standalone/.next/server/pages/login/build-manifest.json +10 -10
  226. package/.next/standalone/.next/server/pages/login/client-build-manifest.json +1 -1
  227. package/.next/standalone/.next/server/pages/login.js +2 -2
  228. package/.next/standalone/.next/server/pages/login.js.nft.json +1 -1
  229. package/.next/standalone/.next/server/pages/pt-BR/404.html +1 -1
  230. package/.next/standalone/.next/server/pages/pt-BR/500.html +1 -1
  231. package/.next/standalone/.next/server/pages/reports/build-manifest.json +16 -16
  232. package/.next/standalone/.next/server/pages/reports/client-build-manifest.json +1 -1
  233. package/.next/standalone/.next/server/pages/reports.js +9 -9
  234. package/.next/standalone/.next/server/pages/reports.js.nft.json +1 -1
  235. package/.next/standalone/.next/server/pages/reset/build-manifest.json +2 -2
  236. package/.next/standalone/.next/server/pages/reset/client-build-manifest.json +1 -1
  237. package/.next/standalone/.next/server/pages/reset.js +3 -3
  238. package/.next/standalone/.next/server/pages/reset.js.nft.json +1 -1
  239. package/.next/standalone/.next/server/pages/ru/404.html +1 -1
  240. package/.next/standalone/.next/server/pages/ru/500.html +1 -1
  241. package/.next/standalone/.next/server/pages/stats/build-manifest.json +13 -13
  242. package/.next/standalone/.next/server/pages/stats/client-build-manifest.json +1 -1
  243. package/.next/standalone/.next/server/pages/stats/react-loadable-manifest.json +1 -1
  244. package/.next/standalone/.next/server/pages/stats.js +6 -6
  245. package/.next/standalone/.next/server/pages/stats.js.nft.json +1 -1
  246. package/.next/standalone/.next/server/pages/tools-required/build-manifest.json +2 -2
  247. package/.next/standalone/.next/server/pages/tools-required/client-build-manifest.json +1 -1
  248. package/.next/standalone/.next/server/pages/tools-required.js +3 -3
  249. package/.next/standalone/.next/server/pages/tools-required.js.nft.json +1 -1
  250. package/.next/standalone/.next/server/pages/tr/404.html +1 -1
  251. package/.next/standalone/.next/server/pages/tr/500.html +1 -1
  252. package/.next/standalone/.next/server/pages/webview/build-manifest.json +10 -10
  253. package/.next/standalone/.next/server/pages/webview/client-build-manifest.json +1 -1
  254. package/.next/standalone/.next/server/pages/webview.js +10 -10
  255. package/.next/standalone/.next/server/pages/webview.js.nft.json +1 -1
  256. package/.next/standalone/.next/server/pages/zh-CN/404.html +1 -1
  257. package/.next/standalone/.next/server/pages/zh-CN/500.html +1 -1
  258. package/.next/standalone/.next/server/pages/zh-TW/404.html +1 -1
  259. package/.next/standalone/.next/server/pages/zh-TW/500.html +1 -1
  260. package/.next/standalone/.next/server/pages-manifest.json +1 -0
  261. package/.next/standalone/.next/static/{dcByQy16pcz2rzj9snwtK → WXAyTQ0PHZnxXXCwEZpit}/_buildManifest.js +9 -8
  262. package/.next/standalone/.next/static/chunks/0-97ruc25d2lz.js +1 -0
  263. package/.next/standalone/.next/static/chunks/{17e9_m-u1zvfx.js → 0-xrsiia9hc.c.js} +1 -1
  264. package/.next/standalone/.next/static/chunks/{135rnnu.-sh80.js → 0.ecwkadp7-hq.js} +1 -1
  265. package/.next/standalone/.next/static/chunks/00nx1s6rpu537.js +1 -0
  266. package/.next/standalone/.next/static/chunks/{0nin7ftvq8x5c.js → 00ziyk306y55s.js} +1 -1
  267. package/.next/standalone/.next/static/chunks/{0kebzqtn4norb.js → 01-fb9rb-21.a.js} +1 -1
  268. package/.next/standalone/.next/static/chunks/{0dthloew7zc8k.js → 010m3dplwy4n6.js} +16 -16
  269. package/.next/standalone/.next/static/chunks/{0_7qn_xpf-6l~.js → 02mfn213kze9c.js} +2 -2
  270. package/.next/standalone/.next/static/chunks/02r-a1_lz7fuk.js +1 -0
  271. package/.next/standalone/.next/static/chunks/04bbxzycy0y90.js +1 -0
  272. package/.next/standalone/.next/static/chunks/{0y--b123-dayk.js → 04cl8pvql07vz.js} +1 -1
  273. package/.next/standalone/.next/static/chunks/{15wkoi26~8omr.js → 04f25y8yc8j00.js} +1 -1
  274. package/.next/standalone/.next/static/chunks/{02.xbkqbezb~v.js → 04uzwc8c9u49~.js} +1 -1
  275. package/.next/standalone/.next/static/chunks/05oh32ya2uzfq.js +1 -0
  276. package/.next/standalone/.next/static/chunks/06e51nokt~dtt.js +1 -0
  277. package/.next/standalone/.next/static/chunks/06ypydsl._u~2.js +5 -0
  278. package/.next/standalone/.next/static/chunks/07-xm--o034du.js +1 -0
  279. package/.next/standalone/.next/static/chunks/071neb1eikeoh.js +1 -0
  280. package/.next/standalone/.next/static/chunks/07i6~xrmgspp8.js +1 -0
  281. package/.next/standalone/.next/static/chunks/{0i7zwsw_~llk0.js → 07v3udp2qhc02.js} +1 -1
  282. package/.next/standalone/.next/static/chunks/{0kox55ju9c.e4.js → 088o~nd5em_1d.js} +1 -1
  283. package/.next/standalone/.next/static/chunks/{10_1w.i.mluxp.js → 08xz_z9u4ex9t.js} +1 -1
  284. package/.next/standalone/.next/static/chunks/{02119z8xemosp.js → 08yjqhf82rx~h.js} +1 -1
  285. package/.next/standalone/.next/static/chunks/095e2xf3z6x3g.js +23 -0
  286. package/.next/standalone/.next/static/chunks/{040hwmh16ihpj.js → 09agwg~-xbxbs.js} +1 -1
  287. package/.next/standalone/.next/static/chunks/09tinkgkd8br_.js +1 -0
  288. package/.next/standalone/.next/static/chunks/09vjzvj4~rwbf.js +1 -0
  289. package/.next/standalone/.next/static/chunks/{0puhant9cy0xw.js → 0__ve3txz-02p.js} +1 -1
  290. package/.next/standalone/.next/static/chunks/0a1hi9y0lwv3j.js +1 -0
  291. package/.next/standalone/.next/static/chunks/{0fzb0m-2k2x14.js → 0bzbaprexb9od.js} +1 -1
  292. package/.next/standalone/.next/static/chunks/{0ggsfsmm~hj5t.js → 0cfpdp0_-.4aj.js} +1 -1
  293. package/.next/standalone/.next/static/chunks/0chjvj73yfmoj.js +1 -0
  294. package/.next/standalone/.next/static/chunks/{0yi.kp2rt4-nc.js → 0ea-k_kbq5gi1.js} +1 -1
  295. package/.next/standalone/.next/static/chunks/{082eokcz_e-4q.js → 0f81tdf_8utww.js} +1 -1
  296. package/.next/standalone/.next/static/chunks/{14ajlpt1s6ueh.js → 0ff6a07hvp4pu.js} +2 -2
  297. package/.next/standalone/.next/static/chunks/{105.cpxealiud.js → 0fotmrplo6yc7.js} +1 -1
  298. package/.next/standalone/.next/static/chunks/{0h_vfy~qxk1_6.js → 0h-7ntqpip4oi.js} +1 -1
  299. package/.next/standalone/.next/static/chunks/{0wvyw8fxpnmre.js → 0h~_fdj60t_~l.js} +1 -1
  300. package/.next/standalone/.next/static/chunks/{04_s.sj1oagqr.js → 0i2uqmry6cyl_.js} +1 -1
  301. package/.next/standalone/.next/static/chunks/0if5fmp94~nc2.js +12 -0
  302. package/.next/standalone/.next/static/chunks/{1235zq5em7nh2.js → 0iw7xjsfo1v-u.js} +10 -10
  303. package/.next/standalone/.next/static/chunks/0jxk8j~j30thp.js +1 -0
  304. package/.next/standalone/.next/static/chunks/{0_eof.53ko6d_.js → 0lz-p_awksh5e.js} +1 -1
  305. package/.next/standalone/.next/static/chunks/0m_amua611xl0.js +5 -0
  306. package/.next/standalone/.next/static/chunks/0nyar-7g9rya6.js +1 -0
  307. package/.next/standalone/.next/static/chunks/0o6esya.vhm1..js +1 -0
  308. package/.next/standalone/.next/static/chunks/0oxlivdn8c89b.js +1 -0
  309. package/.next/standalone/.next/static/chunks/{0iiahbpxxksju.js → 0p1vmcv-mlsg5.js} +1 -1
  310. package/.next/standalone/.next/static/chunks/{14067kbmixmm6.js → 0pw-284q1gfk3.js} +1 -1
  311. package/.next/standalone/.next/static/chunks/{0turlr93lvkg8.js → 0t0-4sn-nqqld.js} +1 -1
  312. package/.next/standalone/.next/static/chunks/{09jl7_l-yth-3.js → 0t76mt4_ijxw7.js} +1 -1
  313. package/.next/standalone/.next/static/chunks/{0_nr91n2-npr6.js → 0u-1zto-umjh9.js} +1 -1
  314. package/.next/standalone/.next/static/chunks/{0x4khblf0c7-p.js → 0u9~wuf2zbs5z.js} +1 -1
  315. package/.next/standalone/.next/static/chunks/{0krb2wvo2_ipb.js → 0unvbz84l4g9h.js} +1 -1
  316. package/.next/standalone/.next/static/chunks/{12up4kbv36k4r.js → 0w52yh2srwcs0.js} +2 -2
  317. package/.next/standalone/.next/static/chunks/{0ml0ppx6kwe2_.js → 0w9~wt6~_cxhf.js} +1 -1
  318. package/.next/standalone/.next/static/chunks/0wp13r5su.j3e.js +1 -0
  319. package/.next/standalone/.next/static/chunks/{0e~.6y_x93o06.js → 0y3fmkya..f_6.js} +13 -13
  320. package/.next/standalone/.next/static/chunks/0~ei.a78nuwqe.js +1 -0
  321. package/.next/standalone/.next/static/chunks/{0hqhf5soi_25r.js → 0~lnp45fxxtgz.js} +1 -1
  322. package/.next/standalone/.next/static/chunks/0~nlz9.lltzrz.js +1 -0
  323. package/.next/standalone/.next/static/chunks/10bvbbw1062os.js +1 -0
  324. package/.next/standalone/.next/static/chunks/{01sxhicgu6p69.js → 11ess6mn2988z.js} +10 -10
  325. package/.next/standalone/.next/static/chunks/11gch78bg_qsn.js +1 -0
  326. package/.next/standalone/.next/static/chunks/{0zzlz_qu90xvc.js → 11nk1lwom62oe.js} +1 -1
  327. package/.next/standalone/.next/static/chunks/{0sj1hijbxwqzi.js → 131tx--pi8.tm.js} +1 -1
  328. package/.next/standalone/.next/static/chunks/13zzmkwag6vsm.css +1 -0
  329. package/.next/standalone/.next/static/chunks/13~7v30_nnqks.js +1 -0
  330. package/.next/standalone/.next/static/chunks/{0arxgyek93av0.js → 17deooyefr~9o.js} +1 -1
  331. package/.next/standalone/.next/static/chunks/{0jhs9_arn872p.js → 17e2iymrk7eoa.js} +1 -1
  332. package/.next/standalone/.next/static/chunks/{0kima6zc7cl2p.js → 17et6y09q052u.js} +1 -1
  333. package/.next/standalone/.next/static/chunks/17jcucuef_33-.js +1 -0
  334. package/.next/standalone/.next/static/chunks/{turbopack-11cbtg95iwob2.js → turbopack-0-itu0o9y_vq8.js} +1 -1
  335. package/.next/standalone/.next/static/chunks/{turbopack-0t_pmdbcbax~k.js → turbopack-0.28.d-q12n3p.js} +1 -1
  336. package/.next/standalone/.next/static/chunks/{turbopack-0tl7oxj3760qz.js → turbopack-0.4ipr_kch~.s.js} +1 -1
  337. package/.next/standalone/.next/static/chunks/{turbopack-02re16zyko_-d.js → turbopack-0g80nrinbfgtk.js} +1 -1
  338. package/.next/standalone/.next/static/chunks/{turbopack-03ch5ephon-wk.js → turbopack-0h0~tr4tgq3aa.js} +1 -1
  339. package/.next/standalone/.next/static/chunks/{turbopack-0k.5aa0_xv2hq.js → turbopack-0hwi_g-tegs_u.js} +1 -1
  340. package/.next/standalone/.next/static/chunks/{turbopack-0au9jjcv_8-gl.js → turbopack-0np.oib7-.1fp.js} +1 -1
  341. package/.next/standalone/.next/static/chunks/{turbopack-02yx2w1m.5ub9.js → turbopack-0qmx66h203l93.js} +1 -1
  342. package/.next/standalone/.next/static/chunks/{turbopack-0vqdj~g~ggw3x.js → turbopack-11utvoktq4lmr.js} +1 -1
  343. package/.next/standalone/messages/de/notification.json +3 -1
  344. package/.next/standalone/messages/de/session.json +5 -2
  345. package/.next/standalone/messages/de/settings.json +22 -1
  346. package/.next/standalone/messages/en/notification.json +3 -1
  347. package/.next/standalone/messages/en/session.json +5 -2
  348. package/.next/standalone/messages/en/settings.json +20 -1
  349. package/.next/standalone/messages/es/notification.json +3 -1
  350. package/.next/standalone/messages/es/session.json +5 -2
  351. package/.next/standalone/messages/es/settings.json +22 -1
  352. package/.next/standalone/messages/fr/notification.json +3 -1
  353. package/.next/standalone/messages/fr/session.json +5 -2
  354. package/.next/standalone/messages/fr/settings.json +22 -1
  355. package/.next/standalone/messages/ja/notification.json +3 -1
  356. package/.next/standalone/messages/ja/session.json +5 -2
  357. package/.next/standalone/messages/ja/settings.json +22 -1
  358. package/.next/standalone/messages/ko/notification.json +3 -1
  359. package/.next/standalone/messages/ko/session.json +5 -2
  360. package/.next/standalone/messages/ko/settings.json +20 -1
  361. package/.next/standalone/messages/pt-BR/notification.json +3 -1
  362. package/.next/standalone/messages/pt-BR/session.json +5 -2
  363. package/.next/standalone/messages/pt-BR/settings.json +22 -1
  364. package/.next/standalone/messages/ru/notification.json +3 -1
  365. package/.next/standalone/messages/ru/session.json +5 -2
  366. package/.next/standalone/messages/ru/settings.json +22 -1
  367. package/.next/standalone/messages/tr/notification.json +3 -1
  368. package/.next/standalone/messages/tr/session.json +5 -2
  369. package/.next/standalone/messages/tr/settings.json +22 -1
  370. package/.next/standalone/messages/zh-CN/notification.json +3 -1
  371. package/.next/standalone/messages/zh-CN/session.json +5 -2
  372. package/.next/standalone/messages/zh-CN/settings.json +22 -1
  373. package/.next/standalone/messages/zh-TW/notification.json +3 -1
  374. package/.next/standalone/messages/zh-TW/session.json +5 -2
  375. package/.next/standalone/messages/zh-TW/settings.json +22 -1
  376. package/.next/standalone/package.json +4 -5
  377. package/.next/standalone/server.js +1 -1
  378. package/dist/server.js +219 -244
  379. package/package.json +4 -5
  380. package/.next/standalone/.next/server/chunks/[root-of-the-server]__019s3sg._.js +0 -15
  381. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02d5mfa._.js +0 -3
  382. package/.next/standalone/.next/server/chunks/[root-of-the-server]__050uepg._.js +0 -3
  383. package/.next/standalone/.next/server/chunks/[root-of-the-server]__093j355._.js +0 -3
  384. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cy9s8s._.js +0 -3
  385. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0dn3vc8._.js +0 -5
  386. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g99747._.js +0 -3
  387. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ge7g~x._.js +0 -3
  388. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0iqf2xr._.js +0 -15
  389. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ky2xd.._.js +0 -3
  390. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l806ne._.js +0 -3
  391. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0mm5n3z._.js +0 -15
  392. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0psi612._.js +0 -3
  393. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qtw~r6._.js +0 -3
  394. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ysyw3z._.js +0 -3
  395. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~7f-os._.js +0 -3
  396. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10b7n-k._.js +0 -3
  397. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-e2yqy._.js +0 -3
  398. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vwkkwh._.js +0 -3
  399. package/.next/standalone/.next/server/chunks/ssr/_0mu2snc._.js +0 -3
  400. package/.next/standalone/.next/static/chunks/0.me5n9dvrgga.js +0 -1
  401. package/.next/standalone/.next/static/chunks/04u8dbn0ogxqm.js +0 -5
  402. package/.next/standalone/.next/static/chunks/0617badw.sq7c.js +0 -1
  403. package/.next/standalone/.next/static/chunks/06ik0y0xz_pxd.js +0 -5
  404. package/.next/standalone/.next/static/chunks/06~0v3h-9qr-b.js +0 -1
  405. package/.next/standalone/.next/static/chunks/0_iwf7xd96dhg.js +0 -1
  406. package/.next/standalone/.next/static/chunks/0b.80wy8lilvw.js +0 -1
  407. package/.next/standalone/.next/static/chunks/0c9nugbfmzaq4.js +0 -23
  408. package/.next/standalone/.next/static/chunks/0da0otp~vxk80.js +0 -1
  409. package/.next/standalone/.next/static/chunks/0diujbo1qkcle.css +0 -1
  410. package/.next/standalone/.next/static/chunks/0ep6reedai0y6.js +0 -1
  411. package/.next/standalone/.next/static/chunks/0f6dlhth6ll0c.js +0 -12
  412. package/.next/standalone/.next/static/chunks/0j.bb896cs98k.js +0 -1
  413. package/.next/standalone/.next/static/chunks/0j630d8~~4rbz.js +0 -1
  414. package/.next/standalone/.next/static/chunks/0k7kp5g9etss9.js +0 -1
  415. package/.next/standalone/.next/static/chunks/0ng68zj-fjm.w.js +0 -1
  416. package/.next/standalone/.next/static/chunks/0nsq-sayv38ks.js +0 -1
  417. package/.next/standalone/.next/static/chunks/0nvalz7iwy6qc.js +0 -1
  418. package/.next/standalone/.next/static/chunks/0rr7vbxqscvhw.js +0 -1
  419. package/.next/standalone/.next/static/chunks/0s66~z6yys6zz.js +0 -1
  420. package/.next/standalone/.next/static/chunks/0s8imclb5deef.js +0 -1
  421. package/.next/standalone/.next/static/chunks/0u7flh--27u75.js +0 -1
  422. package/.next/standalone/.next/static/chunks/0vrlsk_eqnj7q.js +0 -1
  423. package/.next/standalone/.next/static/chunks/0vw93vbkgsb1a.js +0 -1
  424. package/.next/standalone/.next/static/chunks/12i5z~h-3ys7k.js +0 -1
  425. package/.next/standalone/.next/static/chunks/171khl108g-m8.js +0 -1
  426. package/.next/standalone/.next/static/chunks/17fzeqm4m_x67.js +0 -1
  427. /package/.next/standalone/.next/static/{dcByQy16pcz2rzj9snwtK → WXAyTQ0PHZnxXXCwEZpit}/_clientMiddlewareManifest.js +0 -0
  428. /package/.next/standalone/.next/static/{dcByQy16pcz2rzj9snwtK → WXAyTQ0PHZnxXXCwEZpit}/_ssgManifest.js +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "purplemux",
3
- "version": "0.1.21",
3
+ "version": "0.2.0",
4
4
  "description": "Manage multiple Claude Code sessions from your browser",
5
5
  "license": "MIT",
6
6
  "author": "subicura",
@@ -57,7 +57,6 @@
57
57
  "@dnd-kit/sortable": "^10.0.0",
58
58
  "@dnd-kit/utilities": "^3.2.2",
59
59
  "@tailwindcss/typography": "^0.5.19",
60
- "@tanstack/react-virtual": "^3.13.23",
61
60
  "@xterm/addon-clipboard": "^0.2.0",
62
61
  "@xterm/addon-fit": "^0.11.0",
63
62
  "@xterm/addon-unicode11": "^0.9.0",
@@ -67,7 +66,7 @@
67
66
  "clsx": "^2.1.1",
68
67
  "cmdk": "^1.1.1",
69
68
  "dayjs": "^1.11.20",
70
- "diff": "^8.0.4",
69
+ "diff": "^9.0.0",
71
70
  "diff2html": "^3.4.56",
72
71
  "electron-updater": "^6.8.3",
73
72
  "highlight.js": "^11.11.1",
@@ -75,7 +74,7 @@
75
74
  "lucide-react": "^1.7.0",
76
75
  "motion": "^12.38.0",
77
76
  "nanoid": "^5.1.7",
78
- "next": "16.2.3",
77
+ "next": "16.2.4",
79
78
  "next-intl": "^4.9.1",
80
79
  "next-themes": "^0.4.6",
81
80
  "node-pty": "1.2.0-beta.12",
@@ -87,7 +86,7 @@
87
86
  "react-hotkeys-hook": "^5.2.4",
88
87
  "react-icons": "^5.6.0",
89
88
  "react-markdown": "^10.1.0",
90
- "react-resizable-panels": "^4.8.0",
89
+ "react-resizable-panels": "^4.10.0",
91
90
  "recharts": "^3.8.0",
92
91
  "rehype-highlight": "^7.0.2",
93
92
  "rehype-raw": "^7.0.0",
@@ -1,15 +0,0 @@
1
- module.exports=[522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),i=e.i(446786);let a=r.default.join(i.default.homedir(),".purplemux","logs"),n=process.env.LOG_LEVEL||"info",s=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,i]=r.split("=").map(e=>e.trim());e&&i&&(t[e]=i)}return t})(process.env.LOG_LEVELS),o=["trace","debug","info","warn","error","fatal"],l=globalThis;if(!l.__ptRootLogger){let e=[n,...Object.values(s)].reduce((e,t)=>o.indexOf(t)<o.indexOf(e)?t:e,"fatal");l.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(a,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=l.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=s[e]??n,t}])},871911,e=>{"use strict";var t=e.i(254799),r=e.i(522734),i=e.i(814747),a=e.i(446786);let n=i.default.join(a.default.homedir(),".purplemux","cli-token"),s=globalThis;e.s(["verifyCliToken",0,e=>{let a=e.headers["x-pmux-token"];var o="string"==typeof a?a:void 0;if(!o)return!1;let l=(()=>{if(s.__ptCliToken)return s.__ptCliToken;let e=(()=>{try{return r.default.readFileSync(n,"utf-8").trim()||null}catch{return null}})();if(e)return s.__ptCliToken=e,e;let a=(0,t.randomBytes)(32).toString("hex");s.__ptCliToken=a;try{r.default.mkdirSync(i.default.dirname(n),{recursive:!0}),r.default.writeFileSync(n,a,{mode:384})}catch{}return a})();return o.length===l.length&&(0,t.timingSafeEqual)(Buffer.from(o),Buffer.from(l))}])},796902,e=>{"use strict";var t=e.i(814747),r=e.i(446786);let i=t.default.join(r.default.homedir(),".purplemux"),a=t.default.join(i,"statusline.sh"),n=t.default.join(i,"rate-limits.json"),s=`#!/bin/sh
2
- PORT_FILE="$HOME/.purplemux/port"
3
- TOKEN_FILE="$HOME/.purplemux/cli-token"
4
- [ -f "$PORT_FILE" ] || exit 0
5
- [ -f "$TOKEN_FILE" ] || exit 0
6
- PORT=$(cat "$PORT_FILE")
7
- TOKEN=$(cat "$TOKEN_FILE")
8
- curl -sf --max-time 2 -X POST \\
9
- -H 'Content-Type: application/json' \\
10
- -H "x-pmux-token: \${TOKEN}" \\
11
- --data-binary @- \\
12
- "http://localhost:\${PORT}/api/status/statusline" 2>/dev/null || exit 0
13
- `;e.s(["RATE_LIMITS_FILE",0,n,"STATUSLINE_SCRIPT_CONTENT",0,s,"STATUSLINE_SCRIPT_PATH",0,a])},135992,e=>{"use strict";var t=e.i(926747),r=e.i(190406),i=e.i(244898),a=e.i(262950),n=e.i(924868),s=e.i(814747),o=e.i(446786),l=e.i(233405),u=e.i(871911),d=e.i(796902);let p=(0,e.i(25146).createLogger)("statusline"),c=async e=>{let t=e.workspace?.project_dir,r=[];for(let e of(t&&(r.push(s.default.join(t,".claude","settings.local.json")),r.push(s.default.join(t,".claude","settings.json"))),r.push(s.default.join(o.default.homedir(),".claude","settings.json")),r))try{let t=await n.default.readFile(e,"utf-8"),r=JSON.parse(t),i=r?.statusLine?.command;if("string"==typeof i&&i.trim())return i}catch{}return null},f=async e=>{let t=e.rate_limits?.five_hour??null,r=e.rate_limits?.seven_day??null;if(!t&&!r)return;let i=e.context_window,a={ts:Date.now()/1e3,model:e.model?.display_name??null,five_hour:t,seven_day:r,context:i?{used_pct:i.used_percentage,remaining_pct:i.remaining_percentage,input_tokens:i.total_input_tokens,output_tokens:i.total_output_tokens,window_size:i.context_window_size}:null,cost:e.cost??null};try{await n.default.writeFile(d.RATE_LIMITS_FILE,JSON.stringify(a))}catch(e){p.debug({err:e},"failed to write rate-limits.json")}},m=async(e,t)=>{if("POST"!==e.method)return t.setHeader("Allow","POST"),t.status(405).json({error:"Method not allowed"});if(!(0,u.verifyCliToken)(e))return t.status(403).json({error:"Forbidden"});let r=e.body??{};await f(r),t.setHeader("Content-Type","text/plain; charset=utf-8");try{let e=await c(r);if(e){let i,a=await (i=JSON.stringify(r),new Promise((t,r)=>{let a=(0,l.spawn)("sh",["-c",e],{stdio:["pipe","pipe","pipe"]}),n="",s="";a.stdout.on("data",e=>{n+=e.toString()}),a.stderr.on("data",e=>{s+=e.toString()}),a.on("error",r),a.on("close",e=>{0!==e&&s&&p.debug({code:e,stderr:s},"user statusLine exited non-zero"),t(n)}),a.stdin.write(i),a.stdin.end()}));return t.status(200).send(a)}}catch(e){p.debug({err:e},"user statusLine failed")}return t.status(204).end()};e.s(["default",0,m],826327);var _=e.i(826327),g=e.i(7031),h=e.i(181927),x=e.i(846432);let y=(0,a.hoist)(_,"default"),v=(0,a.hoist)(_,"config"),T=new i.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/status/statusline",pathname:"/api/status/statusline",bundlePath:"",filename:""},userland:_,distDir:".next",relativeProjectDir:""});async function w(e,r,i){i.requestMeta&&(0,x.setRequestMeta)(e,i.requestMeta),T.isDev&&(0,x.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let a="/api/status/statusline";a=a.replace(/\/index$/,"")||"/";let n=await T.prepare(e,r,{srcPage:a});if(!n){r.statusCode=400,r.end("Bad Request"),null==i.waitUntil||i.waitUntil.call(i,Promise.resolve());return}let{query:s,params:o,prerenderManifest:l,routerServerContext:u}=n;try{let t,i=e.method||"GET",n=(0,g.getTracer)(),d=n.getActiveScopeSpan(),p=!!(null==u?void 0:u.isWrappedByNextServer),c=T.instrumentationOnRequestError.bind(T),f=async d=>T.render(e,r,{query:{...s,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:l.preview,propagateError:!1,dev:T.isDev,page:"/api/status/statusline",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>c(e,...t)}).finally(()=>{if(!d)return;d.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=n.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==h.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=e.get("next.route");if(s){let e=`${i} ${s}`;d.setAttributes({"next.route":s,"http.route":s,"next.span_name":e}),d.updateName(e),t&&t!==d&&(t.setAttribute("http.route",s),t.updateName(e))}else d.updateName(`${i} ${a}`)});p&&d?await f(d):(t=n.getActiveScopeSpan(),await n.withPropagatedContext(e.headers,()=>n.trace(h.BaseServerSpan.handleRequest,{spanName:`${i} ${a}`,kind:g.SpanKind.SERVER,attributes:{"http.method":i,"http.target":e.url}},f),void 0,!p))}catch(e){if(T.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==i.waitUntil||i.waitUntil.call(i,Promise.resolve())}}e.s(["config",0,v,"default",0,y,"handler",0,w],135992)}];
14
-
15
- //# sourceMappingURL=%5Broot-of-the-server%5D__019s3sg._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),a=e.i(446786);let n=r.default.join(a.default.homedir(),".purplemux","logs"),i=process.env.LOG_LEVEL||"info",s=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,a]=r.split("=").map(e=>e.trim());e&&a&&(t[e]=a)}return t})(process.env.LOG_LEVELS),l=["trace","debug","info","warn","error","fatal"],o=globalThis;if(!o.__ptRootLogger){let e=[i,...Object.values(s)].reduce((e,t)=>l.indexOf(t)<l.indexOf(e)?t:e,"fatal");o.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(n,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=o.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=s[e]??i,t}])},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,r=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(r)),e.s(["PRISTINE_ENV",0,r],965898);let a=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),n=["LC_"],i=e=>a.has(e)||n.some(t=>e.startsWith(t)),s={TERM:"xterm-256color",COLORTERM:"truecolor"},l=()=>{let e={};for(let[t,a]of Object.entries(r))void 0!==a&&i(t)&&(e[t]=a);return{...e,...s}},o=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>r.SHELL||"/bin/bash";e.s(["buildShellEnv",0,()=>l(),"buildShellLaunchCommand",0,()=>{let e=Object.entries(l()).map(([e,t])=>`${e}=${o(t)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${e} ${o(u())} -l`},"defaultShell",0,u],597789)},44014,e=>{"use strict";let t,r;var a=e.i(666680);e.s(["nanoid",0,function(e=21){var n;n=e|=0,!t||t.length<n?(t=Buffer.allocUnsafe(128*n),a.webcrypto.getRandomValues(t),r=0):r+n>t.length&&(a.webcrypto.getRandomValues(t),r=0),r+=n;let i="";for(let a=r-e;a<r;a++)i+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[a]];return i}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),r=e.i(924868),a=e.i(224361),n=e.i(814747),i=e.i(44014),s=e.i(965898),l=e.i(597789),o=e.i(25146);process.platform;let u="linux"===process.platform;e.s(["isLinux",0,u],544538);let p=(0,o.createLogger)("terminal"),c=(0,a.promisify)(t.execFile),d="purple",m=n.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),h=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},f=async(e,t,r,a)=>{let n=(0,l.buildShellLaunchCommand)();await c("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),n],{timeout:5e3,cwd:a||s.PRISTINE_ENV.HOME||"/"}),await E(),p.debug(`tmux session created: ${e} (cols: ${t}, rows: ${r})`)},y=e=>new Promise(t=>setTimeout(t,e)),w=async e=>{if(!await g(e))return;p.debug(`killSession start: ${e}`);let t=await v(e);if(t)try{p.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await g(e))return void p.debug(`killSession done (SIGTERM): ${e}`);await y(200)}if(p.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{p.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await g(e))return void p.debug(`killSession done (SIGKILL): ${e}`);await y(200)}p.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await c("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},x=async()=>{},S=async()=>{await x();let e=await h();e.length>0&&e.forEach(e=>{p.debug(`existing tmux session found: ${e}`)})},_=async e=>{if(u)try{return await r.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await c("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),r=t.split("\n").find(e=>e.startsWith("n/"));return r?r.slice(1):null}catch{return null}},L=async e=>{let t=await v(e);if(t){let e=await _(t);if(e)return e}try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},v=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),r=parseInt(t.trim(),10);return Number.isNaN(r)?null:r}catch{return null}},E=async()=>{try{await c("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},P=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},I=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let r of e.trim().split("\n")){if(!r)continue;let[e,a,n,i,s]=r.split(" ");if(e&&a){let r=parseInt(i,10),l=parseInt(s,10);t.set(e,{command:a,path:n||"",pid:Number.isNaN(r)?0:r,windowActivity:Number.isNaN(l)?0:l})}}return t}catch{return new Map}},N=new Set(["bash","zsh","fish","sh","dash"]),b=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},$=async e=>{await c("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},R=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},T=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},M=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3})},A=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[r,a,n,i,s,l]=t.trim().split(" ");return{cwd:r||null,command:a||null,pid:n&&parseInt(n,10)||null,width:i&&parseInt(i,10)||null,height:s&&parseInt(s,10)||null,sessionCreated:l&&parseInt(l,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},k=new Set(["node","python","python3","ruby","perl","deno","bun"]),C=async()=>{try{await c("tmux",["-L",d,"kill-server"],{timeout:5e3}),p.debug("tmux server killed")}catch{}},q=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},O=async(e,t)=>{try{let{stdout:r}=await c("tmux",["-L",d,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return r}catch{return null}},j=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let a of(await r.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(a,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await c("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},U=async e=>{let t=[],r=[e];for(;r.length>0;){let e=await j(r);if(0===e.length)break;t.push(...e),r=e}return t},G=async e=>{try{let t=new Set(e),{stdout:r}=await c("ss",["-tlnp"],{timeout:5e3}),a=new Set;for(let e of r.split("\n")){let r=e.match(/pid=(\d+)/g);if(!r||!r.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let n=e.match(/:(\d+)\s/);n&&a.add(parseInt(n[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},H=async e=>{let t=await U(e);if(0===t.length)return[];if(u)return G(t);try{let{stdout:e}=await c("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),r=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&r.add(parseInt(e[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},D=async e=>{let t=await v(e);if(!t)return null;try{let{stdout:e}=await c("pgrep",["-n","-P",String(t)],{timeout:5e3}),r=e.trim();if(!r)return null;let{stdout:a}=await c("ps",["-o","args=","-p",r],{timeout:5e3}),i=a.trim();if(!i)return null;let s=i.split(/\s+/);if(0===s.length)return i;if(s[0]=n.default.basename(s[0]),k.has(s[0])&&s.length>1){let e=n.default.basename(s[1]).replace(/\.(c|m)?js$/,"");s.splice(0,2,e)}return s.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,N,"applyConfig",0,E,"capturePaneContent",0,q,"capturePaneContentWithHistory",0,O,"createSession",0,f,"defaultSessionName",0,()=>`pt-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}`,"exitCopyMode",0,$,"getAllPanesInfo",0,I,"getLastCommand",0,D,"getListeningPorts",0,H,"getPaneCurrentCommand",0,P,"getPaneDetailInfo",0,A,"getPaneTitle",0,b,"getSessionCwd",0,L,"getSessionPanePid",0,v,"hasSession",0,g,"killServer",0,C,"killSession",0,w,"listSessions",0,h,"scanSessions",0,S,"sendBracketedPaste",0,M,"sendKeys",0,R,"sendRawKeys",0,T,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},295055,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),n=e.i(262950),i=e.i(459015);let s=(0,e.i(25146).createLogger)("tmux"),l=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let r=e.query.session;if(!r)return t.status(400).json({error:"session parameter required"});if(!await (0,i.hasSession)(r))return t.status(404).json({error:"Session not found"});try{let e=await (0,i.capturePaneContent)(r);return t.status(200).json({content:e??""})}catch(e){return s.error(`capture failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to capture pane"})}};e.s(["default",0,l],798167);var o=e.i(798167),u=e.i(7031),p=e.i(181927),c=e.i(846432);let d=(0,n.hoist)(o,"default"),m=(0,n.hoist)(o,"config"),h=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/tmux/capture",pathname:"/api/tmux/capture",bundlePath:"",filename:""},userland:o,distDir:".next",relativeProjectDir:""});async function f(e,r,a){a.requestMeta&&(0,c.setRequestMeta)(e,a.requestMeta),h.isDev&&(0,c.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let n="/api/tmux/capture";n=n.replace(/\/index$/,"")||"/";let i=await h.prepare(e,r,{srcPage:n});if(!i){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:s,params:l,prerenderManifest:o,routerServerContext:d}=i;try{let t,a=e.method||"GET",i=(0,u.getTracer)(),c=i.getActiveScopeSpan(),m=!!(null==d?void 0:d.isWrappedByNextServer),f=h.instrumentationOnRequestError.bind(h),y=async u=>h.render(e,r,{query:{...s,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:h.isDev,page:"/api/tmux/capture",internalRevalidate:null==d?void 0:d.revalidate,onError:(...t)=>f(e,...t)}).finally(()=>{if(!u)return;u.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=i.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=e.get("next.route");if(s){let e=`${a} ${s}`;u.setAttributes({"next.route":s,"http.route":s,"next.span_name":e}),u.updateName(e),t&&t!==u&&(t.setAttribute("http.route",s),t.updateName(e))}else u.updateName(`${a} ${n}`)});m&&c?await y(c):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(p.BaseServerSpan.handleRequest,{spanName:`${a} ${n}`,kind:u.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},y),void 0,!m))}catch(e){if(h.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,m,"default",0,d,"handler",0,f],295055)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__02d5mfa._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),a=e.i(446786);let i=r.default.join(a.default.homedir(),".purplemux","logs"),n=process.env.LOG_LEVEL||"info",s=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,a]=r.split("=").map(e=>e.trim());e&&a&&(t[e]=a)}return t})(process.env.LOG_LEVELS),l=["trace","debug","info","warn","error","fatal"],o=globalThis;if(!o.__ptRootLogger){let e=[n,...Object.values(s)].reduce((e,t)=>l.indexOf(t)<l.indexOf(e)?t:e,"fatal");o.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(i,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=o.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=s[e]??n,t}])},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,r=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(r)),e.s(["PRISTINE_ENV",0,r],965898);let a=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),i=["LC_"],n=e=>a.has(e)||i.some(t=>e.startsWith(t)),s={TERM:"xterm-256color",COLORTERM:"truecolor"},l=()=>{let e={};for(let[t,a]of Object.entries(r))void 0!==a&&n(t)&&(e[t]=a);return{...e,...s}},o=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>r.SHELL||"/bin/bash";e.s(["buildShellEnv",0,()=>l(),"buildShellLaunchCommand",0,()=>{let e=Object.entries(l()).map(([e,t])=>`${e}=${o(t)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${e} ${o(u())} -l`},"defaultShell",0,u],597789)},44014,e=>{"use strict";let t,r;var a=e.i(666680);e.s(["nanoid",0,function(e=21){var i;i=e|=0,!t||t.length<i?(t=Buffer.allocUnsafe(128*i),a.webcrypto.getRandomValues(t),r=0):r+i>t.length&&(a.webcrypto.getRandomValues(t),r=0),r+=i;let n="";for(let a=r-e;a<r;a++)n+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[a]];return n}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),r=e.i(924868),a=e.i(224361),i=e.i(814747),n=e.i(44014),s=e.i(965898),l=e.i(597789),o=e.i(25146);process.platform;let u="linux"===process.platform;e.s(["isLinux",0,u],544538);let p=(0,o.createLogger)("terminal"),c=(0,a.promisify)(t.execFile),d="purple",m=i.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),f=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},h=async(e,t,r,a)=>{let i=(0,l.buildShellLaunchCommand)();await c("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),i],{timeout:5e3,cwd:a||s.PRISTINE_ENV.HOME||"/"}),await E(),p.debug(`tmux session created: ${e} (cols: ${t}, rows: ${r})`)},y=e=>new Promise(t=>setTimeout(t,e)),w=async e=>{if(!await g(e))return;p.debug(`killSession start: ${e}`);let t=await v(e);if(t)try{p.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await g(e))return void p.debug(`killSession done (SIGTERM): ${e}`);await y(200)}if(p.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{p.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await g(e))return void p.debug(`killSession done (SIGKILL): ${e}`);await y(200)}p.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await c("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},S=async()=>{},x=async()=>{await S();let e=await f();e.length>0&&e.forEach(e=>{p.debug(`existing tmux session found: ${e}`)})},_=async e=>{if(u)try{return await r.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await c("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),r=t.split("\n").find(e=>e.startsWith("n/"));return r?r.slice(1):null}catch{return null}},L=async e=>{let t=await v(e);if(t){let e=await _(t);if(e)return e}try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},v=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),r=parseInt(t.trim(),10);return Number.isNaN(r)?null:r}catch{return null}},E=async()=>{try{await c("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},P=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},I=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let r of e.trim().split("\n")){if(!r)continue;let[e,a,i,n,s]=r.split(" ");if(e&&a){let r=parseInt(n,10),l=parseInt(s,10);t.set(e,{command:a,path:i||"",pid:Number.isNaN(r)?0:r,windowActivity:Number.isNaN(l)?0:l})}}return t}catch{return new Map}},N=new Set(["bash","zsh","fish","sh","dash"]),b=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},$=async e=>{await c("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},R=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},T=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},M=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3})},C=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[r,a,i,n,s,l]=t.trim().split(" ");return{cwd:r||null,command:a||null,pid:i&&parseInt(i,10)||null,width:n&&parseInt(n,10)||null,height:s&&parseInt(s,10)||null,sessionCreated:l&&parseInt(l,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},A=new Set(["node","python","python3","ruby","perl","deno","bun"]),k=async()=>{try{await c("tmux",["-L",d,"kill-server"],{timeout:5e3}),p.debug("tmux server killed")}catch{}},q=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},j=async(e,t)=>{try{let{stdout:r}=await c("tmux",["-L",d,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return r}catch{return null}},O=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let a of(await r.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(a,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await c("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},D=async e=>{let t=[],r=[e];for(;r.length>0;){let e=await O(r);if(0===e.length)break;t.push(...e),r=e}return t},U=async e=>{try{let t=new Set(e),{stdout:r}=await c("ss",["-tlnp"],{timeout:5e3}),a=new Set;for(let e of r.split("\n")){let r=e.match(/pid=(\d+)/g);if(!r||!r.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let i=e.match(/:(\d+)\s/);i&&a.add(parseInt(i[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},G=async e=>{let t=await D(e);if(0===t.length)return[];if(u)return U(t);try{let{stdout:e}=await c("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),r=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&r.add(parseInt(e[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},H=async e=>{let t=await v(e);if(!t)return null;try{let{stdout:e}=await c("pgrep",["-n","-P",String(t)],{timeout:5e3}),r=e.trim();if(!r)return null;let{stdout:a}=await c("ps",["-o","args=","-p",r],{timeout:5e3}),n=a.trim();if(!n)return null;let s=n.split(/\s+/);if(0===s.length)return n;if(s[0]=i.default.basename(s[0]),A.has(s[0])&&s.length>1){let e=i.default.basename(s[1]).replace(/\.(c|m)?js$/,"");s.splice(0,2,e)}return s.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,N,"applyConfig",0,E,"capturePaneContent",0,q,"capturePaneContentWithHistory",0,j,"createSession",0,h,"defaultSessionName",0,()=>`pt-${(0,n.nanoid)(6)}-${(0,n.nanoid)(6)}-${(0,n.nanoid)(6)}`,"exitCopyMode",0,$,"getAllPanesInfo",0,I,"getLastCommand",0,H,"getListeningPorts",0,G,"getPaneCurrentCommand",0,P,"getPaneDetailInfo",0,C,"getPaneTitle",0,b,"getSessionCwd",0,L,"getSessionPanePid",0,v,"hasSession",0,g,"killServer",0,k,"killSession",0,w,"listSessions",0,f,"scanSessions",0,x,"sendBracketedPaste",0,M,"sendKeys",0,R,"sendRawKeys",0,T,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},891870,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),i=e.i(262950),n=e.i(459015);let s=(0,e.i(25146).createLogger)("layout"),l=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let r=e.query.session;if(!r)return t.status(400).json({error:"session parameter required"});if(!await (0,n.hasSession)(r))return t.status(404).json({error:"Session not found"});try{let[e,a]=await Promise.all([(0,n.getSessionCwd)(r),(0,n.getLastCommand)(r)]);if(!e)return t.status(500).json({error:"Failed to get CWD"});return t.status(200).json({cwd:e,lastCommand:a})}catch(e){return s.error(`cwd query failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to get CWD"})}};e.s(["default",0,l],18541);var o=e.i(18541),u=e.i(7031),p=e.i(181927),c=e.i(846432);let d=(0,i.hoist)(o,"default"),m=(0,i.hoist)(o,"config"),f=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/layout/cwd",pathname:"/api/layout/cwd",bundlePath:"",filename:""},userland:o,distDir:".next",relativeProjectDir:""});async function h(e,r,a){a.requestMeta&&(0,c.setRequestMeta)(e,a.requestMeta),f.isDev&&(0,c.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/layout/cwd";i=i.replace(/\/index$/,"")||"/";let n=await f.prepare(e,r,{srcPage:i});if(!n){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:s,params:l,prerenderManifest:o,routerServerContext:d}=n;try{let t,a=e.method||"GET",n=(0,u.getTracer)(),c=n.getActiveScopeSpan(),m=!!(null==d?void 0:d.isWrappedByNextServer),h=f.instrumentationOnRequestError.bind(f),y=async u=>f.render(e,r,{query:{...s,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:f.isDev,page:"/api/layout/cwd",internalRevalidate:null==d?void 0:d.revalidate,onError:(...t)=>h(e,...t)}).finally(()=>{if(!u)return;u.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=n.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=e.get("next.route");if(s){let e=`${a} ${s}`;u.setAttributes({"next.route":s,"http.route":s,"next.span_name":e}),u.updateName(e),t&&t!==u&&(t.setAttribute("http.route",s),t.updateName(e))}else u.updateName(`${a} ${i}`)});m&&c?await y(c):(t=n.getActiveScopeSpan(),await n.withPropagatedContext(e.headers,()=>n.trace(p.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:u.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},y),void 0,!m))}catch(e){if(f.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,m,"default",0,d,"handler",0,h],891870)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__050uepg._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,r)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,r)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,r)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,r)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,r)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,r)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),a=e.i(446786);let n=r.default.join(a.default.homedir(),".purplemux","logs"),s=process.env.LOG_LEVEL||"info",i=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,a]=r.split("=").map(e=>e.trim());e&&a&&(t[e]=a)}return t})(process.env.LOG_LEVELS),l=["trace","debug","info","warn","error","fatal"],o=globalThis;if(!o.__ptRootLogger){let e=[s,...Object.values(i)].reduce((e,t)=>l.indexOf(t)<l.indexOf(e)?t:e,"fatal");o.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(n,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=o.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=i[e]??s,t}])},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,r=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(r)),e.s(["PRISTINE_ENV",0,r],965898);let a=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),n=["LC_"],s=e=>a.has(e)||n.some(t=>e.startsWith(t)),i={TERM:"xterm-256color",COLORTERM:"truecolor"},l=()=>{let e={};for(let[t,a]of Object.entries(r))void 0!==a&&s(t)&&(e[t]=a);return{...e,...i}},o=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>r.SHELL||"/bin/bash";e.s(["buildShellEnv",0,()=>l(),"buildShellLaunchCommand",0,()=>{let e=Object.entries(l()).map(([e,t])=>`${e}=${o(t)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${e} ${o(u())} -l`},"defaultShell",0,u],597789)},44014,e=>{"use strict";let t,r;var a=e.i(666680);e.s(["nanoid",0,function(e=21){var n;n=e|=0,!t||t.length<n?(t=Buffer.allocUnsafe(128*n),a.webcrypto.getRandomValues(t),r=0):r+n>t.length&&(a.webcrypto.getRandomValues(t),r=0),r+=n;let s="";for(let a=r-e;a<r;a++)s+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[a]];return s}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),r=e.i(924868),a=e.i(224361),n=e.i(814747),s=e.i(44014),i=e.i(965898),l=e.i(597789),o=e.i(25146);process.platform;let u="linux"===process.platform;e.s(["isLinux",0,u],544538);let p=(0,o.createLogger)("terminal"),c=(0,a.promisify)(t.execFile),d="purple",m=n.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),f=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},h=async(e,t,r,a)=>{let n=(0,l.buildShellLaunchCommand)();await c("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),n],{timeout:5e3,cwd:a||i.PRISTINE_ENV.HOME||"/"}),await P(),p.debug(`tmux session created: ${e} (cols: ${t}, rows: ${r})`)},w=e=>new Promise(t=>setTimeout(t,e)),y=async e=>{if(!await x(e))return;p.debug(`killSession start: ${e}`);let t=await L(e);if(t)try{p.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await x(e))return void p.debug(`killSession done (SIGTERM): ${e}`);await w(200)}if(p.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{p.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await x(e))return void p.debug(`killSession done (SIGKILL): ${e}`);await w(200)}p.warn(`tmux session still alive after kill: ${e}`)},x=async e=>{try{return await c("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},g=async()=>{},S=async()=>{await g();let e=await f();e.length>0&&e.forEach(e=>{p.debug(`existing tmux session found: ${e}`)})},_=async e=>{if(u)try{return await r.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await c("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),r=t.split("\n").find(e=>e.startsWith("n/"));return r?r.slice(1):null}catch{return null}},v=async e=>{let t=await L(e);if(t){let e=await _(t);if(e)return e}try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},L=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),r=parseInt(t.trim(),10);return Number.isNaN(r)?null:r}catch{return null}},P=async()=>{try{await c("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},E=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},b=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let r of e.trim().split("\n")){if(!r)continue;let[e,a,n,s,i]=r.split(" ");if(e&&a){let r=parseInt(s,10),l=parseInt(i,10);t.set(e,{command:a,path:n||"",pid:Number.isNaN(r)?0:r,windowActivity:Number.isNaN(l)?0:l})}}return t}catch{return new Map}},N=new Set(["bash","zsh","fish","sh","dash"]),I=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},T=async e=>{await c("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},R=async(e,t)=>{await T(e),await c("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},$=async(e,t)=>{await T(e),await c("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},M=async(e,t)=>{await T(e),await c("tmux",["-L",d,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3})},q=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[r,a,n,s,i,l]=t.trim().split(" ");return{cwd:r||null,command:a||null,pid:n&&parseInt(n,10)||null,width:s&&parseInt(s,10)||null,height:i&&parseInt(i,10)||null,sessionCreated:l&&parseInt(l,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},C=new Set(["node","python","python3","ruby","perl","deno","bun"]),A=async()=>{try{await c("tmux",["-L",d,"kill-server"],{timeout:5e3}),p.debug("tmux server killed")}catch{}},k=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},j=async(e,t)=>{try{let{stdout:r}=await c("tmux",["-L",d,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return r}catch{return null}},O=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let a of(await r.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(a,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await c("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},D=async e=>{let t=[],r=[e];for(;r.length>0;){let e=await O(r);if(0===e.length)break;t.push(...e),r=e}return t},H=async e=>{try{let t=new Set(e),{stdout:r}=await c("ss",["-tlnp"],{timeout:5e3}),a=new Set;for(let e of r.split("\n")){let r=e.match(/pid=(\d+)/g);if(!r||!r.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let n=e.match(/:(\d+)\s/);n&&a.add(parseInt(n[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},U=async e=>{let t=await D(e);if(0===t.length)return[];if(u)return H(t);try{let{stdout:e}=await c("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),r=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&r.add(parseInt(e[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},G=async e=>{let t=await L(e);if(!t)return null;try{let{stdout:e}=await c("pgrep",["-n","-P",String(t)],{timeout:5e3}),r=e.trim();if(!r)return null;let{stdout:a}=await c("ps",["-o","args=","-p",r],{timeout:5e3}),s=a.trim();if(!s)return null;let i=s.split(/\s+/);if(0===i.length)return s;if(i[0]=n.default.basename(i[0]),C.has(i[0])&&i.length>1){let e=n.default.basename(i[1]).replace(/\.(c|m)?js$/,"");i.splice(0,2,e)}return i.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,N,"applyConfig",0,P,"capturePaneContent",0,k,"capturePaneContentWithHistory",0,j,"createSession",0,h,"defaultSessionName",0,()=>`pt-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}`,"exitCopyMode",0,T,"getAllPanesInfo",0,b,"getLastCommand",0,G,"getListeningPorts",0,U,"getPaneCurrentCommand",0,E,"getPaneDetailInfo",0,q,"getPaneTitle",0,I,"getSessionCwd",0,v,"getSessionPanePid",0,L,"hasSession",0,x,"killServer",0,A,"killSession",0,y,"listSessions",0,f,"scanSessions",0,S,"sendBracketedPaste",0,M,"sendKeys",0,R,"sendRawKeys",0,$,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},175609,(e,t,r)=>{t.exports=e.x("node-pty-592e8dc6192cfd06",()=>require("node-pty-592e8dc6192cfd06"))},971780,e=>{"use strict";var t=e.i(459015);e.i(478319),e.i(220951),e.i(175609),e.i(597789),e.i(965898),new TextEncoder,new TextDecoder,(0,e.i(25146).createLogger)("terminal"),new TextDecoder;let r=globalThis,a=r.__purplemux_terminal_connections??=new Map;r.__purplemux_terminal_output_ts??=new Map;let n=(e,t,r)=>{for(let n of a.values())if(n.sessionName===e&&!n.cleaned)return void n.pty.resize(t,r)},s=e=>new Promise(t=>setTimeout(t,e)),i=async(e,r,i)=>{let l=(e=>{for(let t of a.values())if(t.sessionName===e&&!t.cleaned)return{cols:t.currentCols,rows:t.currentRows};return null})(e);if(l&&l.cols>50)return(0,t.capturePaneContentWithHistory)(e,50);let o=(e=>{for(let t of a.values())if(t.sessionName===e&&!t.cleaned){if(t.capturePaused)return null;return t.capturePaused=!0,{cols:t.currentCols,rows:t.currentRows}}return null})(e);if(!o)return(0,t.capturePaneContent)(e);try{n(e,r,i),await s(300);let a=await (0,t.capturePaneContent)(e);return n(e,o.cols,o.rows),await s(300),a}finally{(e=>{for(let t of a.values())if(t.sessionName===e&&!t.cleaned){if(!t.capturePaused)return;t.capturePaused=!1;return}})(e)}};e.s(["capturePaneAtWidth",0,i],971780)},8372,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),n=e.i(262950),s=e.i(459015),i=e.i(971780);let l=(0,e.i(25146).createLogger)("tmux"),o=/^\s*(?:[❯›>]\s+)?(?:\d+\.\s+)?(.+)$/,u=["Yes,","Yes ","No,","No ","Tell Claude"],p=e=>/^\s+\S/.test(e)||/^\s*[❯›>]/.test(e),c=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let r=e.query.session;if(!r)return t.status(400).json({error:"session parameter required"});if(!await (0,s.hasSession)(r))return t.status(404).json({error:"Session not found"});try{let e=await (0,i.capturePaneAtWidth)(r,120,50);if(!e)return t.status(200).json({options:[]});let a=(e=>{let t=e.split("\n"),r=[],a=!1;for(let e of t){if(!e.trim()||!p(e)){if(a)break;continue}let t=e.match(o);if(!t)continue;let n=t[1].trim();if(a)if(u.some(e=>n.startsWith(e)))r.push(n);else break;else u.some(e=>n.startsWith(e))&&(r.push(n),a=!0)}return r})(e);return t.status(200).json({options:a})}catch(e){return l.error(`plan-options query failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Terminal capture failed"})}};e.s(["default",0,c],875757);var d=e.i(875757),m=e.i(7031),f=e.i(181927),h=e.i(846432);let w=(0,n.hoist)(d,"default"),y=(0,n.hoist)(d,"config"),x=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/tmux/plan-options",pathname:"/api/tmux/plan-options",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function g(e,r,a){a.requestMeta&&(0,h.setRequestMeta)(e,a.requestMeta),x.isDev&&(0,h.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let n="/api/tmux/plan-options";n=n.replace(/\/index$/,"")||"/";let s=await x.prepare(e,r,{srcPage:n});if(!s){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:i,params:l,prerenderManifest:o,routerServerContext:u}=s;try{let t,a=e.method||"GET",s=(0,m.getTracer)(),p=s.getActiveScopeSpan(),c=!!(null==u?void 0:u.isWrappedByNextServer),d=x.instrumentationOnRequestError.bind(x),h=async p=>x.render(e,r,{query:{...i,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:x.isDev,page:"/api/tmux/plan-options",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>d(e,...t)}).finally(()=>{if(!p)return;p.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=s.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==f.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let i=e.get("next.route");if(i){let e=`${a} ${i}`;p.setAttributes({"next.route":i,"http.route":i,"next.span_name":e}),p.updateName(e),t&&t!==p&&(t.setAttribute("http.route",i),t.updateName(e))}else p.updateName(`${a} ${n}`)});c&&p?await h(p):(t=s.getActiveScopeSpan(),await s.withPropagatedContext(e.headers,()=>s.trace(f.BaseServerSpan.handleRequest,{spanName:`${a} ${n}`,kind:m.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},h),void 0,!c))}catch(e){if(x.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,y,"default",0,w,"handler",0,g],8372)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__093j355._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),a=e.i(446786);let i=r.default.join(a.default.homedir(),".purplemux","logs"),n=process.env.LOG_LEVEL||"info",s=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,a]=r.split("=").map(e=>e.trim());e&&a&&(t[e]=a)}return t})(process.env.LOG_LEVELS),l=["trace","debug","info","warn","error","fatal"],o=globalThis;if(!o.__ptRootLogger){let e=[n,...Object.values(s)].reduce((e,t)=>l.indexOf(t)<l.indexOf(e)?t:e,"fatal");o.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(i,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=o.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=s[e]??n,t}])},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,r=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(r)),e.s(["PRISTINE_ENV",0,r],965898);let a=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),i=["LC_"],n=e=>a.has(e)||i.some(t=>e.startsWith(t)),s={TERM:"xterm-256color",COLORTERM:"truecolor"},l=()=>{let e={};for(let[t,a]of Object.entries(r))void 0!==a&&n(t)&&(e[t]=a);return{...e,...s}},o=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>r.SHELL||"/bin/bash";e.s(["buildShellEnv",0,()=>l(),"buildShellLaunchCommand",0,()=>{let e=Object.entries(l()).map(([e,t])=>`${e}=${o(t)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${e} ${o(u())} -l`},"defaultShell",0,u],597789)},44014,e=>{"use strict";let t,r;var a=e.i(666680);e.s(["nanoid",0,function(e=21){var i;i=e|=0,!t||t.length<i?(t=Buffer.allocUnsafe(128*i),a.webcrypto.getRandomValues(t),r=0):r+i>t.length&&(a.webcrypto.getRandomValues(t),r=0),r+=i;let n="";for(let a=r-e;a<r;a++)n+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[a]];return n}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),r=e.i(924868),a=e.i(224361),i=e.i(814747),n=e.i(44014),s=e.i(965898),l=e.i(597789),o=e.i(25146);process.platform;let u="linux"===process.platform;e.s(["isLinux",0,u],544538);let p=(0,o.createLogger)("terminal"),c=(0,a.promisify)(t.execFile),d="purple",m=i.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),f=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},h=async(e,t,r,a)=>{let i=(0,l.buildShellLaunchCommand)();await c("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),i],{timeout:5e3,cwd:a||s.PRISTINE_ENV.HOME||"/"}),await E(),p.debug(`tmux session created: ${e} (cols: ${t}, rows: ${r})`)},y=e=>new Promise(t=>setTimeout(t,e)),w=async e=>{if(!await g(e))return;p.debug(`killSession start: ${e}`);let t=await v(e);if(t)try{p.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await g(e))return void p.debug(`killSession done (SIGTERM): ${e}`);await y(200)}if(p.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{p.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await g(e))return void p.debug(`killSession done (SIGKILL): ${e}`);await y(200)}p.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await c("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},x=async()=>{},S=async()=>{await x();let e=await f();e.length>0&&e.forEach(e=>{p.debug(`existing tmux session found: ${e}`)})},_=async e=>{if(u)try{return await r.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await c("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),r=t.split("\n").find(e=>e.startsWith("n/"));return r?r.slice(1):null}catch{return null}},L=async e=>{let t=await v(e);if(t){let e=await _(t);if(e)return e}try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},v=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),r=parseInt(t.trim(),10);return Number.isNaN(r)?null:r}catch{return null}},E=async()=>{try{await c("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},P=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},I=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let r of e.trim().split("\n")){if(!r)continue;let[e,a,i,n,s]=r.split(" ");if(e&&a){let r=parseInt(n,10),l=parseInt(s,10);t.set(e,{command:a,path:i||"",pid:Number.isNaN(r)?0:r,windowActivity:Number.isNaN(l)?0:l})}}return t}catch{return new Map}},N=new Set(["bash","zsh","fish","sh","dash"]),b=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},$=async e=>{await c("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},R=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},T=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},M=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3})},A=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[r,a,i,n,s,l]=t.trim().split(" ");return{cwd:r||null,command:a||null,pid:i&&parseInt(i,10)||null,width:n&&parseInt(n,10)||null,height:s&&parseInt(s,10)||null,sessionCreated:l&&parseInt(l,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},k=new Set(["node","python","python3","ruby","perl","deno","bun"]),C=async()=>{try{await c("tmux",["-L",d,"kill-server"],{timeout:5e3}),p.debug("tmux server killed")}catch{}},q=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},O=async(e,t)=>{try{let{stdout:r}=await c("tmux",["-L",d,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return r}catch{return null}},j=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let a of(await r.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(a,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await c("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},U=async e=>{let t=[],r=[e];for(;r.length>0;){let e=await j(r);if(0===e.length)break;t.push(...e),r=e}return t},D=async e=>{try{let t=new Set(e),{stdout:r}=await c("ss",["-tlnp"],{timeout:5e3}),a=new Set;for(let e of r.split("\n")){let r=e.match(/pid=(\d+)/g);if(!r||!r.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let i=e.match(/:(\d+)\s/);i&&a.add(parseInt(i[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},G=async e=>{let t=await U(e);if(0===t.length)return[];if(u)return D(t);try{let{stdout:e}=await c("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),r=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&r.add(parseInt(e[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},H=async e=>{let t=await v(e);if(!t)return null;try{let{stdout:e}=await c("pgrep",["-n","-P",String(t)],{timeout:5e3}),r=e.trim();if(!r)return null;let{stdout:a}=await c("ps",["-o","args=","-p",r],{timeout:5e3}),n=a.trim();if(!n)return null;let s=n.split(/\s+/);if(0===s.length)return n;if(s[0]=i.default.basename(s[0]),k.has(s[0])&&s.length>1){let e=i.default.basename(s[1]).replace(/\.(c|m)?js$/,"");s.splice(0,2,e)}return s.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,N,"applyConfig",0,E,"capturePaneContent",0,q,"capturePaneContentWithHistory",0,O,"createSession",0,h,"defaultSessionName",0,()=>`pt-${(0,n.nanoid)(6)}-${(0,n.nanoid)(6)}-${(0,n.nanoid)(6)}`,"exitCopyMode",0,$,"getAllPanesInfo",0,I,"getLastCommand",0,H,"getListeningPorts",0,G,"getPaneCurrentCommand",0,P,"getPaneDetailInfo",0,A,"getPaneTitle",0,b,"getSessionCwd",0,L,"getSessionPanePid",0,v,"hasSession",0,g,"killServer",0,C,"killSession",0,w,"listSessions",0,f,"scanSessions",0,S,"sendBracketedPaste",0,M,"sendKeys",0,R,"sendRawKeys",0,T,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},820158,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),i=e.i(262950),n=e.i(459015);let s=(0,e.i(25146).createLogger)("tmux"),l=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let r=e.query.session;if(!r)return t.status(400).json({error:"session parameter required"});if(!await (0,n.hasSession)(r))return t.status(404).json({error:"Session not found"});try{let[e,a]=await Promise.all([(0,n.getPaneDetailInfo)(r),(0,n.getLastCommand)(r)]);return t.status(200).json({...e,lastCommand:a,sessionName:r})}catch(e){return s.error(`info query failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to get tmux info"})}};e.s(["default",0,l],831539);var o=e.i(831539),u=e.i(7031),p=e.i(181927),c=e.i(846432);let d=(0,i.hoist)(o,"default"),m=(0,i.hoist)(o,"config"),f=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/tmux/info",pathname:"/api/tmux/info",bundlePath:"",filename:""},userland:o,distDir:".next",relativeProjectDir:""});async function h(e,r,a){a.requestMeta&&(0,c.setRequestMeta)(e,a.requestMeta),f.isDev&&(0,c.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/tmux/info";i=i.replace(/\/index$/,"")||"/";let n=await f.prepare(e,r,{srcPage:i});if(!n){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:s,params:l,prerenderManifest:o,routerServerContext:d}=n;try{let t,a=e.method||"GET",n=(0,u.getTracer)(),c=n.getActiveScopeSpan(),m=!!(null==d?void 0:d.isWrappedByNextServer),h=f.instrumentationOnRequestError.bind(f),y=async u=>f.render(e,r,{query:{...s,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:f.isDev,page:"/api/tmux/info",internalRevalidate:null==d?void 0:d.revalidate,onError:(...t)=>h(e,...t)}).finally(()=>{if(!u)return;u.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=n.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=e.get("next.route");if(s){let e=`${a} ${s}`;u.setAttributes({"next.route":s,"http.route":s,"next.span_name":e}),u.updateName(e),t&&t!==u&&(t.setAttribute("http.route",s),t.updateName(e))}else u.updateName(`${a} ${i}`)});m&&c?await y(c):(t=n.getActiveScopeSpan(),await n.withPropagatedContext(e.headers,()=>n.trace(p.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:u.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},y),void 0,!m))}catch(e){if(f.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,m,"default",0,d,"handler",0,h],820158)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0cy9s8s._.js.map
@@ -1,5 +0,0 @@
1
- module.exports=[254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),a=e.i(446786);let i=r.default.join(a.default.homedir(),".purplemux","logs"),s=process.env.LOG_LEVEL||"info",n=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,a]=r.split("=").map(e=>e.trim());e&&a&&(t[e]=a)}return t})(process.env.LOG_LEVELS),l=["trace","debug","info","warn","error","fatal"],o=globalThis;if(!o.__ptRootLogger){let e=[s,...Object.values(n)].reduce((e,t)=>l.indexOf(t)<l.indexOf(e)?t:e,"fatal");o.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(i,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=o.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=n[e]??s,t}])},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,r=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(r)),e.s(["PRISTINE_ENV",0,r],965898);let a=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),i=["LC_"],s=e=>a.has(e)||i.some(t=>e.startsWith(t)),n={TERM:"xterm-256color",COLORTERM:"truecolor"},l=()=>{let e={};for(let[t,a]of Object.entries(r))void 0!==a&&s(t)&&(e[t]=a);return{...e,...n}},o=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>r.SHELL||"/bin/bash";e.s(["buildShellEnv",0,()=>l(),"buildShellLaunchCommand",0,()=>{let e=Object.entries(l()).map(([e,t])=>`${e}=${o(t)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${e} ${o(u())} -l`},"defaultShell",0,u],597789)},44014,e=>{"use strict";let t,r;var a=e.i(666680);e.s(["nanoid",0,function(e=21){var i;i=e|=0,!t||t.length<i?(t=Buffer.allocUnsafe(128*i),a.webcrypto.getRandomValues(t),r=0):r+i>t.length&&(a.webcrypto.getRandomValues(t),r=0),r+=i;let s="";for(let a=r-e;a<r;a++)s+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[a]];return s}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),r=e.i(924868),a=e.i(224361),i=e.i(814747),s=e.i(44014),n=e.i(965898),l=e.i(597789),o=e.i(25146);process.platform;let u="linux"===process.platform;e.s(["isLinux",0,u],544538);let p=(0,o.createLogger)("terminal"),c=(0,a.promisify)(t.execFile),d="purple",m=i.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),f=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},h=async(e,t,r,a)=>{let i=(0,l.buildShellLaunchCommand)();await c("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),i],{timeout:5e3,cwd:a||n.PRISTINE_ENV.HOME||"/"}),await E(),p.debug(`tmux session created: ${e} (cols: ${t}, rows: ${r})`)},y=e=>new Promise(t=>setTimeout(t,e)),w=async e=>{if(!await g(e))return;p.debug(`killSession start: ${e}`);let t=await v(e);if(t)try{p.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await g(e))return void p.debug(`killSession done (SIGTERM): ${e}`);await y(200)}if(p.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{p.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await g(e))return void p.debug(`killSession done (SIGKILL): ${e}`);await y(200)}p.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await c("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},x=async()=>{},S=async()=>{await x();let e=await f();e.length>0&&e.forEach(e=>{p.debug(`existing tmux session found: ${e}`)})},_=async e=>{if(u)try{return await r.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await c("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),r=t.split("\n").find(e=>e.startsWith("n/"));return r?r.slice(1):null}catch{return null}},L=async e=>{let t=await v(e);if(t){let e=await _(t);if(e)return e}try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},v=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),r=parseInt(t.trim(),10);return Number.isNaN(r)?null:r}catch{return null}},E=async()=>{try{await c("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},P=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},I=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let r of e.trim().split("\n")){if(!r)continue;let[e,a,i,s,n]=r.split(" ");if(e&&a){let r=parseInt(s,10),l=parseInt(n,10);t.set(e,{command:a,path:i||"",pid:Number.isNaN(r)?0:r,windowActivity:Number.isNaN(l)?0:l})}}return t}catch{return new Map}},b=new Set(["bash","zsh","fish","sh","dash"]),N=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},$=async e=>{await c("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},R=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},T=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},M=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3})},A=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[r,a,i,s,n,l]=t.trim().split(" ");return{cwd:r||null,command:a||null,pid:i&&parseInt(i,10)||null,width:s&&parseInt(s,10)||null,height:n&&parseInt(n,10)||null,sessionCreated:l&&parseInt(l,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},k=new Set(["node","python","python3","ruby","perl","deno","bun"]),C=async()=>{try{await c("tmux",["-L",d,"kill-server"],{timeout:5e3}),p.debug("tmux server killed")}catch{}},j=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},q=async(e,t)=>{try{let{stdout:r}=await c("tmux",["-L",d,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return r}catch{return null}},O=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let a of(await r.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(a,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await c("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},H=async e=>{let t=[],r=[e];for(;r.length>0;){let e=await O(r);if(0===e.length)break;t.push(...e),r=e}return t},D=async e=>{try{let t=new Set(e),{stdout:r}=await c("ss",["-tlnp"],{timeout:5e3}),a=new Set;for(let e of r.split("\n")){let r=e.match(/pid=(\d+)/g);if(!r||!r.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let i=e.match(/:(\d+)\s/);i&&a.add(parseInt(i[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},G=async e=>{let t=await H(e);if(0===t.length)return[];if(u)return D(t);try{let{stdout:e}=await c("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),r=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&r.add(parseInt(e[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},U=async e=>{let t=await v(e);if(!t)return null;try{let{stdout:e}=await c("pgrep",["-n","-P",String(t)],{timeout:5e3}),r=e.trim();if(!r)return null;let{stdout:a}=await c("ps",["-o","args=","-p",r],{timeout:5e3}),s=a.trim();if(!s)return null;let n=s.split(/\s+/);if(0===n.length)return s;if(n[0]=i.default.basename(n[0]),k.has(n[0])&&n.length>1){let e=i.default.basename(n[1]).replace(/\.(c|m)?js$/,"");n.splice(0,2,e)}return n.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,b,"applyConfig",0,E,"capturePaneContent",0,j,"capturePaneContentWithHistory",0,q,"createSession",0,h,"defaultSessionName",0,()=>`pt-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}`,"exitCopyMode",0,$,"getAllPanesInfo",0,I,"getLastCommand",0,U,"getListeningPorts",0,G,"getPaneCurrentCommand",0,P,"getPaneDetailInfo",0,A,"getPaneTitle",0,N,"getSessionCwd",0,L,"getSessionPanePid",0,v,"hasSession",0,g,"killServer",0,C,"killSession",0,w,"listSessions",0,f,"scanSessions",0,S,"sendBracketedPaste",0,M,"sendKeys",0,R,"sendRawKeys",0,T,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},942080,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),i=e.i(262950),s=e.i(233405),n=e.i(254799),l=e.i(224361),o=e.i(459015),u=e.i(25146);let p=(0,l.promisify)(s.execFile),c=(0,u.createLogger)("diff"),d=async e=>{let[{stdout:t},{stdout:r},{stdout:a}]=await Promise.all([p("git",["rev-parse","HEAD"],{cwd:e,timeout:1e4}),p("git",["status","--porcelain","-uall"],{cwd:e,timeout:1e4}),p("git",["diff","HEAD","--shortstat"],{cwd:e,timeout:1e4})]);return(0,n.createHash)("sha1").update(`${t.trim()}
2
- ${r}
3
- ${a}`).digest("hex").slice(0,16)},m=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let r=e.query.session,a="true"===e.query.hashOnly;if(!r)return t.status(400).json({error:"session parameter required"});if(!await (0,o.hasSession)(r))return t.status(404).json({error:"Session not found"});let i=await (0,o.getSessionCwd)(r);if(!i)return t.status(500).json({error:"Failed to get CWD"});try{await p("git",["rev-parse","--is-inside-work-tree"],{cwd:i,timeout:1e4})}catch{return t.status(200).json({isGitRepo:!1,diff:"",hash:""})}try{if(a){let e=await d(i);return t.status(200).json({isGitRepo:!0,hash:e})}let[{stdout:e},{stdout:r},s]=await Promise.all([p("git",["diff","HEAD"],{cwd:i,timeout:1e4,maxBuffer:5242880}),p("git",["status","--porcelain","-uall"],{cwd:i,timeout:1e4}),d(i)]),n=r.split("\n").filter(e=>e.startsWith("??")).map(e=>e.slice(3).trim()),l=e;for(let e of n)try{let{stdout:t}=await p("git",["diff","--no-index","/dev/null",e],{cwd:i,timeout:1e4});l+=t}catch(e){e&&"object"==typeof e&&"stdout"in e&&(l+=e.stdout)}return t.status(200).json({isGitRepo:!0,diff:l,hash:s})}catch(e){return c.error(`git diff failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to get diff"})}};e.s(["default",0,m],607240);var f=e.i(607240),h=e.i(7031),y=e.i(181927),w=e.i(846432);let g=(0,i.hoist)(f,"default"),x=(0,i.hoist)(f,"config"),S=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/layout/diff",pathname:"/api/layout/diff",bundlePath:"",filename:""},userland:f,distDir:".next",relativeProjectDir:""});async function _(e,r,a){a.requestMeta&&(0,w.setRequestMeta)(e,a.requestMeta),S.isDev&&(0,w.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/layout/diff";i=i.replace(/\/index$/,"")||"/";let s=await S.prepare(e,r,{srcPage:i});if(!s){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:n,params:l,prerenderManifest:o,routerServerContext:u}=s;try{let t,a=e.method||"GET",s=(0,h.getTracer)(),p=s.getActiveScopeSpan(),c=!!(null==u?void 0:u.isWrappedByNextServer),d=S.instrumentationOnRequestError.bind(S),m=async p=>S.render(e,r,{query:{...n,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:S.isDev,page:"/api/layout/diff",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>d(e,...t)}).finally(()=>{if(!p)return;p.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=s.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==y.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=e.get("next.route");if(n){let e=`${a} ${n}`;p.setAttributes({"next.route":n,"http.route":n,"next.span_name":e}),p.updateName(e),t&&t!==p&&(t.setAttribute("http.route",n),t.updateName(e))}else p.updateName(`${a} ${i}`)});c&&p?await m(p):(t=s.getActiveScopeSpan(),await s.withPropagatedContext(e.headers,()=>s.trace(y.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:h.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},m),void 0,!c))}catch(e){if(S.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,x,"default",0,g,"handler",0,_],942080)}];
4
-
5
- //# sourceMappingURL=%5Broot-of-the-server%5D__0dn3vc8._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,r)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,r)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,r)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,r)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,r)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,r)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),s=e.i(446786);let n=r.default.join(s.default.homedir(),".purplemux","logs"),i=process.env.LOG_LEVEL||"info",a=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,s]=r.split("=").map(e=>e.trim());e&&s&&(t[e]=s)}return t})(process.env.LOG_LEVELS),o=["trace","debug","info","warn","error","fatal"],l=globalThis;if(!l.__ptRootLogger){let e=[i,...Object.values(a)].reduce((e,t)=>o.indexOf(t)<o.indexOf(e)?t:e,"fatal");l.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(n,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=l.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=a[e]??i,t}])},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,r=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(r)),e.s(["PRISTINE_ENV",0,r],965898);let s=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),n=["LC_"],i=e=>s.has(e)||n.some(t=>e.startsWith(t)),a={TERM:"xterm-256color",COLORTERM:"truecolor"},o=()=>{let e={};for(let[t,s]of Object.entries(r))void 0!==s&&i(t)&&(e[t]=s);return{...e,...a}},l=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>r.SHELL||"/bin/bash";e.s(["buildShellEnv",0,()=>o(),"buildShellLaunchCommand",0,()=>{let e=Object.entries(o()).map(([e,t])=>`${e}=${l(t)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${e} ${l(u())} -l`},"defaultShell",0,u],597789)},44014,e=>{"use strict";let t,r;var s=e.i(666680);e.s(["nanoid",0,function(e=21){var n;n=e|=0,!t||t.length<n?(t=Buffer.allocUnsafe(128*n),s.webcrypto.getRandomValues(t),r=0):r+n>t.length&&(s.webcrypto.getRandomValues(t),r=0),r+=n;let i="";for(let s=r-e;s<r;s++)i+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[s]];return i}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),r=e.i(924868),s=e.i(224361),n=e.i(814747),i=e.i(44014),a=e.i(965898),o=e.i(597789),l=e.i(25146);process.platform;let u="linux"===process.platform;e.s(["isLinux",0,u],544538);let p=(0,l.createLogger)("terminal"),c=(0,s.promisify)(t.execFile),d="purple",m=n.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),f=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},h=async(e,t,r,s)=>{let n=(0,o.buildShellLaunchCommand)();await c("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),n],{timeout:5e3,cwd:s||a.PRISTINE_ENV.HOME||"/"}),await P(),p.debug(`tmux session created: ${e} (cols: ${t}, rows: ${r})`)},w=e=>new Promise(t=>setTimeout(t,e)),y=async e=>{if(!await g(e))return;p.debug(`killSession start: ${e}`);let t=await L(e);if(t)try{p.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await g(e))return void p.debug(`killSession done (SIGTERM): ${e}`);await w(200)}if(p.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{p.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await g(e))return void p.debug(`killSession done (SIGKILL): ${e}`);await w(200)}p.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await c("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},x=async()=>{},S=async()=>{await x();let e=await f();e.length>0&&e.forEach(e=>{p.debug(`existing tmux session found: ${e}`)})},_=async e=>{if(u)try{return await r.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await c("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),r=t.split("\n").find(e=>e.startsWith("n/"));return r?r.slice(1):null}catch{return null}},v=async e=>{let t=await L(e);if(t){let e=await _(t);if(e)return e}try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},L=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),r=parseInt(t.trim(),10);return Number.isNaN(r)?null:r}catch{return null}},P=async()=>{try{await c("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},E=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},N=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let r of e.trim().split("\n")){if(!r)continue;let[e,s,n,i,a]=r.split(" ");if(e&&s){let r=parseInt(i,10),o=parseInt(a,10);t.set(e,{command:s,path:n||"",pid:Number.isNaN(r)?0:r,windowActivity:Number.isNaN(o)?0:o})}}return t}catch{return new Map}},b=new Set(["bash","zsh","fish","sh","dash"]),I=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},$=async e=>{await c("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},R=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},T=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},M=async(e,t)=>{await $(e),await c("tmux",["-L",d,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3})},q=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[r,s,n,i,a,o]=t.trim().split(" ");return{cwd:r||null,command:s||null,pid:n&&parseInt(n,10)||null,width:i&&parseInt(i,10)||null,height:a&&parseInt(a,10)||null,sessionCreated:o&&parseInt(o,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},C=new Set(["node","python","python3","ruby","perl","deno","bun"]),A=async()=>{try{await c("tmux",["-L",d,"kill-server"],{timeout:5e3}),p.debug("tmux server killed")}catch{}},k=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},O=async(e,t)=>{try{let{stdout:r}=await c("tmux",["-L",d,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return r}catch{return null}},j=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let s of(await r.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(s,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await c("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},D=async e=>{let t=[],r=[e];for(;r.length>0;){let e=await j(r);if(0===e.length)break;t.push(...e),r=e}return t},U=async e=>{try{let t=new Set(e),{stdout:r}=await c("ss",["-tlnp"],{timeout:5e3}),s=new Set;for(let e of r.split("\n")){let r=e.match(/pid=(\d+)/g);if(!r||!r.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let n=e.match(/:(\d+)\s/);n&&s.add(parseInt(n[1],10))}return[...s].sort((e,t)=>e-t)}catch{return[]}},H=async e=>{let t=await D(e);if(0===t.length)return[];if(u)return U(t);try{let{stdout:e}=await c("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),r=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&r.add(parseInt(e[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},G=async e=>{let t=await L(e);if(!t)return null;try{let{stdout:e}=await c("pgrep",["-n","-P",String(t)],{timeout:5e3}),r=e.trim();if(!r)return null;let{stdout:s}=await c("ps",["-o","args=","-p",r],{timeout:5e3}),i=s.trim();if(!i)return null;let a=i.split(/\s+/);if(0===a.length)return i;if(a[0]=n.default.basename(a[0]),C.has(a[0])&&a.length>1){let e=n.default.basename(a[1]).replace(/\.(c|m)?js$/,"");a.splice(0,2,e)}return a.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,b,"applyConfig",0,P,"capturePaneContent",0,k,"capturePaneContentWithHistory",0,O,"createSession",0,h,"defaultSessionName",0,()=>`pt-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}`,"exitCopyMode",0,$,"getAllPanesInfo",0,N,"getLastCommand",0,G,"getListeningPorts",0,H,"getPaneCurrentCommand",0,E,"getPaneDetailInfo",0,q,"getPaneTitle",0,I,"getSessionCwd",0,v,"getSessionPanePid",0,L,"hasSession",0,g,"killServer",0,A,"killSession",0,y,"listSessions",0,f,"scanSessions",0,S,"sendBracketedPaste",0,M,"sendKeys",0,R,"sendRawKeys",0,T,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},175609,(e,t,r)=>{t.exports=e.x("node-pty-592e8dc6192cfd06",()=>require("node-pty-592e8dc6192cfd06"))},971780,e=>{"use strict";var t=e.i(459015);e.i(478319),e.i(220951),e.i(175609),e.i(597789),e.i(965898),new TextEncoder,new TextDecoder,(0,e.i(25146).createLogger)("terminal"),new TextDecoder;let r=globalThis,s=r.__purplemux_terminal_connections??=new Map;r.__purplemux_terminal_output_ts??=new Map;let n=(e,t,r)=>{for(let n of s.values())if(n.sessionName===e&&!n.cleaned)return void n.pty.resize(t,r)},i=e=>new Promise(t=>setTimeout(t,e)),a=async(e,r,a)=>{let o=(e=>{for(let t of s.values())if(t.sessionName===e&&!t.cleaned)return{cols:t.currentCols,rows:t.currentRows};return null})(e);if(o&&o.cols>50)return(0,t.capturePaneContentWithHistory)(e,50);let l=(e=>{for(let t of s.values())if(t.sessionName===e&&!t.cleaned){if(t.capturePaused)return null;return t.capturePaused=!0,{cols:t.currentCols,rows:t.currentRows}}return null})(e);if(!l)return(0,t.capturePaneContent)(e);try{n(e,r,a),await i(300);let s=await (0,t.capturePaneContent)(e);return n(e,l.cols,l.rows),await i(300),s}finally{(e=>{for(let t of s.values())if(t.sessionName===e&&!t.cleaned){if(!t.capturePaused)return;t.capturePaused=!1;return}})(e)}};e.s(["capturePaneAtWidth",0,a],971780)},443571,e=>{"use strict";let t=["Yes","Yes,","No","Accept","Decline","Open System Settings","Try again","Use this","Continue without","Resume from summary","Resume full session","Continue this conversation","Send message as","Don't ask me again"],r=/^\s*(?:[❯›>]\s+)?(.+)$/,s=/^\s*[❯›>]\s+/,n=/^\d+\.\s+/,i=/^\s*([❯›>])?\s*(\d+)\.?\s*(\S.*)$/,a=e=>e.replace(n,""),o=(e,t)=>e.some(e=>a(e).startsWith(t)),l=e=>e.match(/^\s*/)?.[0].length??0,u=/^(Yes,\s*and\s+don[\u2019']?t\s+ask)\s*:\s*(.+)$/,p=e=>!(e.length<2)&&(o(e,"Yes")&&o(e,"No")||o(e,"Accept")&&o(e,"Decline")||o(e,"Open System Settings")||o(e,"Use this")&&o(e,"Continue without")||o(e,"Resume from summary")&&o(e,"Resume full session")||o(e,"Continue this conversation")&&o(e,"Send message as"));e.s(["parsePermissionOptions",0,e=>{let n=e.split("\n"),o=(e=>{let t=[],r=[],s=0,n=1,a=0,o=()=>{r.length>=2&&t.push({rawOptions:r.slice(),focusedIndex:s}),r=[],s=0,n=1,a=0};for(let t of e){if(!t.trim())continue;let e=t.match(i);if(e){let i=e[1],u=Number(e[2]),p=e[3].trim();if(p.length>0){if(1===u){o(),r.push(p),i&&(s=0),a=l(t),n=2;continue}if(u===n){i&&(s=r.length),r.push(p),a=l(t),n+=1;continue}}}if(r.length>0){if(l(t)>a){r[r.length-1]+=t.trimStart();continue}if(/^\s+\S/.test(t))continue;o()}}o();let p=t[t.length-1];return p?{options:p.rawOptions.map((e,t)=>{let r;return`${t+1}. ${(r=e.match(u))?`${r[1]} again for: ${r[2].trim()}`:/^Yes(?![,\s]|$)/.test(e)?"Yes":/^No(?![,\s]|$)/.test(e)?"No":e}`}),focusedIndex:p.focusedIndex}:{options:[],focusedIndex:0}})(n);if(o.options.length>=2&&p(o.options))return o;let c=(e=>{let n=[],i=0,o=!1;for(let l of e){if(!l.trim()){if(o)break;continue}let e=s.test(l),u=/^\s+\S/.test(l);if(!e&&!u){if(o)break;continue}let p=l.match(r);if(!p)continue;let c=p[1].trim(),d=a(c);t.some(e=>d.startsWith(e))&&(e&&(i=n.length),n.push(c),o=!0)}return{options:n,focusedIndex:i}})(n);return p(c.options)?c:{options:[],focusedIndex:0}}])},454549,e=>{"use strict";var t=e.i(926747),r=e.i(190406),s=e.i(244898),n=e.i(262950),i=e.i(459015),a=e.i(971780),o=e.i(25146),l=e.i(443571);let u=(0,o.createLogger)("tmux"),p=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let r=e.query.session;if(!r)return t.status(400).json({error:"session parameter required"});if(!await (0,i.hasSession)(r))return t.status(404).json({error:"Session not found"});try{let e=await (0,a.capturePaneAtWidth)(r,120,50);if(!e)return t.status(200).json({options:[]});let{options:s}=(0,l.parsePermissionOptions)(e),n=e.includes("Bypass Permissions");return t.status(200).json({options:s,...n&&{isBypassPrompt:!0}})}catch(e){return u.error(`permission-options query failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Terminal capture failed"})}};e.s(["default",0,p],96110);var c=e.i(96110),d=e.i(7031),m=e.i(181927),f=e.i(846432);let h=(0,n.hoist)(c,"default"),w=(0,n.hoist)(c,"config"),y=new s.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/tmux/permission-options",pathname:"/api/tmux/permission-options",bundlePath:"",filename:""},userland:c,distDir:".next",relativeProjectDir:""});async function g(e,r,s){s.requestMeta&&(0,f.setRequestMeta)(e,s.requestMeta),y.isDev&&(0,f.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let n="/api/tmux/permission-options";n=n.replace(/\/index$/,"")||"/";let i=await y.prepare(e,r,{srcPage:n});if(!i){r.statusCode=400,r.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve());return}let{query:a,params:o,prerenderManifest:l,routerServerContext:u}=i;try{let t,s=e.method||"GET",i=(0,d.getTracer)(),p=i.getActiveScopeSpan(),c=!!(null==u?void 0:u.isWrappedByNextServer),f=y.instrumentationOnRequestError.bind(y),h=async p=>y.render(e,r,{query:{...a,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:l.preview,propagateError:!1,dev:y.isDev,page:"/api/tmux/permission-options",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>f(e,...t)}).finally(()=>{if(!p)return;p.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=i.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=e.get("next.route");if(a){let e=`${s} ${a}`;p.setAttributes({"next.route":a,"http.route":a,"next.span_name":e}),p.updateName(e),t&&t!==p&&(t.setAttribute("http.route",a),t.updateName(e))}else p.updateName(`${s} ${n}`)});c&&p?await h(p):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(m.BaseServerSpan.handleRequest,{spanName:`${s} ${n}`,kind:d.SpanKind.SERVER,attributes:{"http.method":s,"http.target":e.url}},h),void 0,!c))}catch(e){if(y.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==s.waitUntil||s.waitUntil.call(s,Promise.resolve())}}e.s(["config",0,w,"default",0,h,"handler",0,g],454549)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0g99747._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),a=e.i(446786);let n=r.default.join(a.default.homedir(),".purplemux","logs"),i=process.env.LOG_LEVEL||"info",s=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,a]=r.split("=").map(e=>e.trim());e&&a&&(t[e]=a)}return t})(process.env.LOG_LEVELS),l=["trace","debug","info","warn","error","fatal"],o=globalThis;if(!o.__ptRootLogger){let e=[i,...Object.values(s)].reduce((e,t)=>l.indexOf(t)<l.indexOf(e)?t:e,"fatal");o.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(n,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=o.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=s[e]??i,t}])},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,r=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(r)),e.s(["PRISTINE_ENV",0,r],965898);let a=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),n=["LC_"],i=e=>a.has(e)||n.some(t=>e.startsWith(t)),s={TERM:"xterm-256color",COLORTERM:"truecolor"},l=()=>{let e={};for(let[t,a]of Object.entries(r))void 0!==a&&i(t)&&(e[t]=a);return{...e,...s}},o=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>r.SHELL||"/bin/bash";e.s(["buildShellEnv",0,()=>l(),"buildShellLaunchCommand",0,()=>{let e=Object.entries(l()).map(([e,t])=>`${e}=${o(t)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${e} ${o(u())} -l`},"defaultShell",0,u],597789)},44014,e=>{"use strict";let t,r;var a=e.i(666680);e.s(["nanoid",0,function(e=21){var n;n=e|=0,!t||t.length<n?(t=Buffer.allocUnsafe(128*n),a.webcrypto.getRandomValues(t),r=0):r+n>t.length&&(a.webcrypto.getRandomValues(t),r=0),r+=n;let i="";for(let a=r-e;a<r;a++)i+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[a]];return i}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),r=e.i(924868),a=e.i(224361),n=e.i(814747),i=e.i(44014),s=e.i(965898),l=e.i(597789),o=e.i(25146);process.platform;let u="linux"===process.platform;e.s(["isLinux",0,u],544538);let p=(0,o.createLogger)("terminal"),c=(0,a.promisify)(t.execFile),d="purple",m=n.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),h=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},f=async(e,t,r,a)=>{let n=(0,l.buildShellLaunchCommand)();await c("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),n],{timeout:5e3,cwd:a||s.PRISTINE_ENV.HOME||"/"}),await E(),p.debug(`tmux session created: ${e} (cols: ${t}, rows: ${r})`)},y=e=>new Promise(t=>setTimeout(t,e)),w=async e=>{if(!await g(e))return;p.debug(`killSession start: ${e}`);let t=await v(e);if(t)try{p.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await g(e))return void p.debug(`killSession done (SIGTERM): ${e}`);await y(200)}if(p.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{p.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await g(e))return void p.debug(`killSession done (SIGKILL): ${e}`);await y(200)}p.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await c("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},S=async()=>{},x=async()=>{await S();let e=await h();e.length>0&&e.forEach(e=>{p.debug(`existing tmux session found: ${e}`)})},_=async e=>{if(u)try{return await r.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await c("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),r=t.split("\n").find(e=>e.startsWith("n/"));return r?r.slice(1):null}catch{return null}},L=async e=>{let t=await v(e);if(t){let e=await _(t);if(e)return e}try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},v=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),r=parseInt(t.trim(),10);return Number.isNaN(r)?null:r}catch{return null}},E=async()=>{try{await c("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},P=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},I=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let r of e.trim().split("\n")){if(!r)continue;let[e,a,n,i,s]=r.split(" ");if(e&&a){let r=parseInt(i,10),l=parseInt(s,10);t.set(e,{command:a,path:n||"",pid:Number.isNaN(r)?0:r,windowActivity:Number.isNaN(l)?0:l})}}return t}catch{return new Map}},b=new Set(["bash","zsh","fish","sh","dash"]),N=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},R=async e=>{await c("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},$=async(e,t)=>{await R(e),await c("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},T=async(e,t)=>{await R(e),await c("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},M=async(e,t)=>{await R(e),await c("tmux",["-L",d,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3})},k=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[r,a,n,i,s,l]=t.trim().split(" ");return{cwd:r||null,command:a||null,pid:n&&parseInt(n,10)||null,width:i&&parseInt(i,10)||null,height:s&&parseInt(s,10)||null,sessionCreated:l&&parseInt(l,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},A=new Set(["node","python","python3","ruby","perl","deno","bun"]),C=async()=>{try{await c("tmux",["-L",d,"kill-server"],{timeout:5e3}),p.debug("tmux server killed")}catch{}},O=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},q=async(e,t)=>{try{let{stdout:r}=await c("tmux",["-L",d,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return r}catch{return null}},j=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let a of(await r.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(a,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await c("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},U=async e=>{let t=[],r=[e];for(;r.length>0;){let e=await j(r);if(0===e.length)break;t.push(...e),r=e}return t},H=async e=>{try{let t=new Set(e),{stdout:r}=await c("ss",["-tlnp"],{timeout:5e3}),a=new Set;for(let e of r.split("\n")){let r=e.match(/pid=(\d+)/g);if(!r||!r.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let n=e.match(/:(\d+)\s/);n&&a.add(parseInt(n[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},D=async e=>{let t=await U(e);if(0===t.length)return[];if(u)return H(t);try{let{stdout:e}=await c("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),r=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&r.add(parseInt(e[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},G=async e=>{let t=await v(e);if(!t)return null;try{let{stdout:e}=await c("pgrep",["-n","-P",String(t)],{timeout:5e3}),r=e.trim();if(!r)return null;let{stdout:a}=await c("ps",["-o","args=","-p",r],{timeout:5e3}),i=a.trim();if(!i)return null;let s=i.split(/\s+/);if(0===s.length)return i;if(s[0]=n.default.basename(s[0]),A.has(s[0])&&s.length>1){let e=n.default.basename(s[1]).replace(/\.(c|m)?js$/,"");s.splice(0,2,e)}return s.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,b,"applyConfig",0,E,"capturePaneContent",0,O,"capturePaneContentWithHistory",0,q,"createSession",0,f,"defaultSessionName",0,()=>`pt-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}`,"exitCopyMode",0,R,"getAllPanesInfo",0,I,"getLastCommand",0,G,"getListeningPorts",0,D,"getPaneCurrentCommand",0,P,"getPaneDetailInfo",0,k,"getPaneTitle",0,N,"getSessionCwd",0,L,"getSessionPanePid",0,v,"hasSession",0,g,"killServer",0,C,"killSession",0,w,"listSessions",0,h,"scanSessions",0,x,"sendBracketedPaste",0,M,"sendKeys",0,$,"sendRawKeys",0,T,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},360190,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),n=e.i(262950),i=e.i(459015);let s=(0,e.i(25146).createLogger)("tmux"),l=async(e,t)=>{if("POST"!==e.method)return t.setHeader("Allow","POST"),t.status(405).json({error:"Method not allowed"});let{session:r,input:a}=e.body;if(!r||!a)return t.status(400).json({error:"session and input parameters required"});if(!await (0,i.hasSession)(r))return t.status(404).json({error:"Session not found"});try{return await (0,i.sendRawKeys)(r,a),t.status(200).json({ok:!0})}catch(e){return s.error(`send-input failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to send input"})}};e.s(["default",0,l],943074);var o=e.i(943074),u=e.i(7031),p=e.i(181927),c=e.i(846432);let d=(0,n.hoist)(o,"default"),m=(0,n.hoist)(o,"config"),h=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/tmux/send-input",pathname:"/api/tmux/send-input",bundlePath:"",filename:""},userland:o,distDir:".next",relativeProjectDir:""});async function f(e,r,a){a.requestMeta&&(0,c.setRequestMeta)(e,a.requestMeta),h.isDev&&(0,c.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let n="/api/tmux/send-input";n=n.replace(/\/index$/,"")||"/";let i=await h.prepare(e,r,{srcPage:n});if(!i){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:s,params:l,prerenderManifest:o,routerServerContext:d}=i;try{let t,a=e.method||"GET",i=(0,u.getTracer)(),c=i.getActiveScopeSpan(),m=!!(null==d?void 0:d.isWrappedByNextServer),f=h.instrumentationOnRequestError.bind(h),y=async u=>h.render(e,r,{query:{...s,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:h.isDev,page:"/api/tmux/send-input",internalRevalidate:null==d?void 0:d.revalidate,onError:(...t)=>f(e,...t)}).finally(()=>{if(!u)return;u.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=i.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=e.get("next.route");if(s){let e=`${a} ${s}`;u.setAttributes({"next.route":s,"http.route":s,"next.span_name":e}),u.updateName(e),t&&t!==u&&(t.setAttribute("http.route",s),t.updateName(e))}else u.updateName(`${a} ${n}`)});m&&c?await y(c):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(p.BaseServerSpan.handleRequest,{spanName:`${a} ${n}`,kind:u.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},y),void 0,!m))}catch(e){if(h.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,m,"default",0,d,"handler",0,f],360190)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0ge7g~x._.js.map
@@ -1,15 +0,0 @@
1
- module.exports=[75874,e=>{"use strict";var t=e.i(924868),n=e.i(814747),i=e.i(446786);let a=n.default.join(i.default.homedir(),".purplemux"),s=n.default.join(a,"push-subscriptions.json"),l=globalThis;l.__ptPushLock||(l.__ptPushLock=Promise.resolve());let r=async e=>{let t,n=new Promise(e=>{t=e}),i=l.__ptPushLock;l.__ptPushLock=n,await i;try{return await e()}finally{t()}},u=async()=>{try{let e=await t.default.readFile(s,"utf-8");return JSON.parse(e)}catch{return[]}},o=async e=>{await t.default.mkdir(a,{recursive:!0});let n=s+".tmp";try{await t.default.writeFile(n,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(n,s)}catch(e){throw await t.default.unlink(n).catch(()=>{}),e}},c=async()=>u(),d=async e=>r(async()=>{let t=await u(),n=t.findIndex(t=>t.endpoint===e.endpoint);n>=0?t[n]=e:t.push(e),await o(t)}),f=async e=>r(async()=>{let t=await u(),n=t.filter(t=>t.endpoint!==e);n.length!==t.length&&await o(n)}),h=globalThis;h.__ptVisibleDevices||(h.__ptVisibleDevices=new Map);let p=h.__ptVisibleDevices,m=globalThis;m.__ptSessionPushTarget||(m.__ptSessionPushTarget=new Map);let w=m.__ptSessionPushTarget;e.s(["addSubscription",0,d,"clearSessionPushTarget",0,e=>{w.delete(e)},"getSubscriptions",0,c,"isAnyDeviceVisible",0,()=>{let e=Date.now();for(let[t,n]of p)if(!(e-n>6e4))return!0;else p.delete(t);return!1},"markDeviceHidden",0,e=>{p.delete(e)},"markDeviceVisible",0,e=>{p.set(e,Date.now())},"removeSubscription",0,f,"setSessionPushTarget",0,(e,t)=>{w.set(e,t)}])},713915,e=>{"use strict";var t=e.i(233405),n=e.i(924868),i=e.i(446786),a=e.i(814747),s=e.i(224361),l=e.i(597789),r=e.i(965898);let u=(0,s.promisify)(t.execFile),o=null,c=null,d=async()=>{let e=i.default.userInfo().shell||(0,l.defaultShell)();try{let{stdout:t}=await u(e,["-ilc",'echo -n "$PATH"'],{timeout:5e3,env:{...(0,l.buildShellEnv)(),SHELL:e,DISABLE_AUTO_UPDATE:"true",ZSH_TMUX_AUTOSTARTED:"true"}});return t.toString().trim()}catch{return r.PRISTINE_ENV.PATH||""}},f=async()=>o||(c||(c=d().then(e=>(o=e,c=null,e))),c),h=async(e,t,n)=>{try{let i=await f(),{stdout:a}=await u(e,t,{timeout:5e3,env:{...process.env,PATH:i}});return{installed:!0,version:n(a)}}catch{return{installed:!1,version:null}}},p=e=>e.trim().match(/(\d+\.\d+[\d.]*)/)?.[1]??null,m=[a.default.join(i.default.homedir(),".local","bin")],w=async()=>{for(let e of m)try{return await (0,n.access)(a.default.join(e,"claude")),e}catch{}return null},y=e=>e.installed&&null!==e.version&&parseFloat(e.version)>=2.9,g=async()=>{o=await d();let[e,t,s]=await Promise.all([h("tmux",["-V"],p),h("git",["--version"],p),h("claude",["--version"],p)]),l=(y(e)&&t.installed&&s.installed,s.installed?null:await w()),r=!1;if(s.installed||l)try{await (0,n.access)(a.default.join(i.default.homedir(),".claude")),r=!0}catch{}return{tmux:{...e,compatible:y(e)},git:t,claude:{...s,binaryPath:l,loggedIn:r}}},S=null,P=null,T=null,v=null,_=async()=>T&&Date.now()-T.checkedAt<1e3?T.result:v||(v=g().then(e=>(T={result:e,checkedAt:Date.now()},v=null,e)).catch(e=>{throw v=null,e})),A=async()=>{o=await d();let[e,t,n]=await Promise.all([h("tmux",["-V"],p),h("git",["--version"],p),h("claude",["--version"],p)]);return{tmux:{...e,compatible:y(e)},git:t,claude:n}},I=async()=>S&&Date.now()-S.checkedAt<3e4?S.result:P||(P=A().then(e=>(S={result:e,checkedAt:Date.now()},P=null,e)).catch(e=>{throw P=null,e}));e.s(["getCachedPreflightStatus",0,_,"getCachedRuntimePreflight",0,I,"getShellPath",0,f,"invalidateRuntimeCache",0,()=>{S=null,P=null}])},522734,(e,t,n)=>{t.exports=e.x("fs",()=>require("fs"))},319668,(e,t,n)=>{t.exports=e.x("readline",()=>require("readline"))},143511,e=>{"use strict";var t=e.i(924868);e.i(522734);var n=e.i(814747),i=e.i(446786),a=e.i(233405),s=e.i(224361),l=e.i(713915),r=e.i(544538);let u=(0,s.promisify)(a.execFile),o=n.default.join(i.default.homedir(),".claude"),c=n.default.join(o,"sessions"),d=n.default.join(o,"projects"),f=[n.default.join(i.default.homedir(),".local","bin","claude")],h=e=>{let t=e.replace(/[^a-zA-Z0-9]/g,"-");if(t.length<=200)return t;let n=p(e);return`${t.slice(0,200)}-${n}`},p=e=>{let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return Math.abs(t).toString(36)},m=async e=>{try{let{stdout:t}=await u("pgrep",["-P",String(e)]);return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},w=async e=>{if(r.isLinux)try{return await t.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await u("lsof",["-a","-p",String(e),"-d","cwd","-Fn"]),n=t.split("\n").find(e=>e.startsWith("n/"));return n?n.slice(1):null}catch{return null}},y=async e=>{for(let t of e)try{let{stdout:e}=await u("ps",["-p",String(t),"-o","args="]),n=e.trim().match(/claude\s+--resume\s+([0-9a-f-]{36})/);if(n){let e=await w(t);return{pid:t,sessionId:n[1],cwd:e}}}catch{continue}return null},g=async e=>{try{let n=await t.default.readFile(e,"utf-8"),i=JSON.parse(n);if(!i.pid||!i.sessionId)return null;return i}catch{return null}},S=async(e,i)=>{let a=n.default.join(e,`${i}.jsonl`);try{return await t.default.access(a),a}catch{return null}},P=async()=>{try{return await u("claude",["--version"],{timeout:5e3,env:{...process.env,PATH:await (0,l.getShellPath)()}}),!0}catch{for(let e of f)try{return await t.default.access(e),!0}catch{}return!1}},T=async(e,t)=>{for(let n of t??await m(e))try{let{stdout:e}=await u("ps",["-p",String(n),"-o","args="]);if(e.trim().includes("claude"))return!0}catch{continue}return!1},v=async(e,i)=>{try{await t.default.access(o)}catch{return{status:await P()?"not-initialized":"not-installed",sessionId:null,jsonlPath:null,pid:null,startedAt:null,cwd:null}}let a=i??await m(e);if(0===a.length)return{status:"not-running",sessionId:null,jsonlPath:null,pid:null,startedAt:null,cwd:null};let s=(await Promise.all(a.map(m))).flat(),l=[...a,...s],r=new Set(l);try{for(let e of(await t.default.readdir(c)).filter(e=>e.endsWith(".json"))){let i=await g(n.default.join(c,e));if(!i||!r.has(i.pid))continue;let a="";try{let{stdout:e}=await u("ps",["-p",String(i.pid),"-o","args="]);a=e.trim()}catch{try{await t.default.unlink(n.default.join(c,e))}catch{}continue}if(!a.includes("claude")){try{await t.default.unlink(n.default.join(c,e))}catch{}continue}let s=h(i.cwd),l=n.default.join(d,s),o=await S(l,i.sessionId),f=i.sessionId;if(!o){let e=a.match(/--resume\s+([0-9a-f-]{36})/);if(e){let t=e[1],n=await S(l,t);n&&(o=n,f=t)}}return{status:"running",sessionId:f,jsonlPath:o,pid:i.pid,startedAt:i.startedAt,cwd:i.cwd}}}catch{}let f=await y(l);if(f){let e=f.cwd;if(e){let t=h(e),i=n.default.join(d,t),a=await S(i,f.sessionId);return{status:"running",sessionId:f.sessionId,jsonlPath:a,pid:f.pid,startedAt:null,cwd:e}}}return{status:"not-running",sessionId:null,jsonlPath:null,pid:null,startedAt:null,cwd:null}};e.s(["detectActiveSession",0,v,"getChildPids",0,m,"isClaudeRunning",0,T,"toClaudeProjectName",0,h])},746514,e=>{"use strict";let t;var n=e.i(924868),i=e.i(522734),a=e.i(814747),s=e.i(319668),l=e.i(143511),r=e.i(459015);let u=(0,e.i(25146).createLogger)("session-list"),o=a.default.join(process.env.HOME||process.env.USERPROFILE||"/",".claude","projects"),c=(t=new Map,{get:e=>{let n=t.get(e);if(n)return Date.now()-n.cachedAt>3e4?void t.delete(e):n.meta},set:(e,n,i)=>{t.set(e,{meta:n,mtime:i,cachedAt:Date.now()})},isStale:(e,n)=>{let i=t.get(e);return!i||(Date.now()-i.cachedAt>3e4?(t.delete(e),!0):i.mtime!==n)},clear:()=>{t.clear()}}),d=e=>{let t=(0,l.toClaudeProjectName)(e);return a.default.join(o,t)},f=async(e,t)=>{let n=Array(e.length),i=0,a=async()=>{for(;i<e.length;){let t=i++;try{let i=await e[t]();n[t]={status:"fulfilled",value:i}}catch(e){n[t]={status:"rejected",reason:e}}}},s=Array.from({length:Math.min(t,e.length)},()=>a());return await Promise.all(s),n},h=e=>e.length<=200?e:e.slice(0,200)+"…",p=async e=>{let t=(0,i.createReadStream)(e,{encoding:"utf-8"}),n=s.default.createInterface({input:t,crlfDelay:1/0}),a=null,l="",r=0,u=!0;try{for await(let e of n){if(u&&(u=!1,e.trim()))try{let t=JSON.parse(e);t.timestamp&&(a=new Date(t.timestamp).toISOString())}catch{}if((e.includes('"type":"human"')||e.includes('"type": "human"')||e.includes('"type":"user"')||e.includes('"type": "user"'))&&!e.includes('"isMeta":true')&&!e.includes('"isMeta": true')&&(r++,!l))try{let t=JSON.parse(e);if(("human"===t.type||"user"===t.type)&&!t.isMeta){let e=t.message;if(e)if("string"==typeof e)l=h(e);else if(Array.isArray(e.content)){let t=e.content.find(e=>"text"===e.type&&e.text);t&&(l=h(t.text))}else"string"==typeof e.content&&(l=h(e.content))}}catch{}}}finally{n.close(),t.destroy()}return{startedAt:a,firstMessage:l,turnCount:r}},m=async e=>{try{let t=await n.default.stat(e),i=a.default.basename(e,".jsonl"),s=c.get(i);if(s&&!c.isStale(i,t.mtimeMs))return s;let{startedAt:l,firstMessage:r,turnCount:u}=await p(e),o=l||t.birthtime.toISOString(),d=t.mtime.toISOString(),f={sessionId:i,startedAt:o,lastActivityAt:d,firstMessage:r,turnCount:u};return c.set(i,f,t.mtimeMs),f}catch(t){return u.warn({err:t},`failed to parse session meta: ${e}`),null}},w=async(e,t)=>{let i,s=t||await (0,r.getSessionCwd)(e);if(!s)throw Error("cwd-lookup-failed");let l=d(s);try{i=(await n.default.readdir(l)).filter(e=>e.endsWith(".jsonl"))}catch{return[]}let u=i.map(e=>()=>m(a.default.join(l,e))),o=await f(u,10),c=[];for(let e of o)"fulfilled"===e.status&&e.value&&c.push(e.value);return c.sort((e,t)=>new Date(t.lastActivityAt).getTime()-new Date(e.lastActivityAt).getTime()),c};e.s(["cwdToProjectPath",0,d,"listSessions",0,w],746514)},175609,(e,t,n)=>{t.exports=e.x("node-pty-592e8dc6192cfd06",()=>require("node-pty-592e8dc6192cfd06"))},971780,e=>{"use strict";var t=e.i(459015);e.i(478319),e.i(220951),e.i(175609),e.i(597789),e.i(965898),new TextEncoder,new TextDecoder,(0,e.i(25146).createLogger)("terminal"),new TextDecoder;let n=globalThis,i=n.__purplemux_terminal_connections??=new Map;n.__purplemux_terminal_output_ts??=new Map;let a=(e,t,n)=>{for(let a of i.values())if(a.sessionName===e&&!a.cleaned)return void a.pty.resize(t,n)},s=e=>new Promise(t=>setTimeout(t,e)),l=async(e,n,l)=>{let r=(e=>{for(let t of i.values())if(t.sessionName===e&&!t.cleaned)return{cols:t.currentCols,rows:t.currentRows};return null})(e);if(r&&r.cols>50)return(0,t.capturePaneContentWithHistory)(e,50);let u=(e=>{for(let t of i.values())if(t.sessionName===e&&!t.cleaned){if(t.capturePaused)return null;return t.capturePaused=!0,{cols:t.currentCols,rows:t.currentRows}}return null})(e);if(!u)return(0,t.capturePaneContent)(e);try{a(e,n,l),await s(300);let i=await (0,t.capturePaneContent)(e);return a(e,u.cols,u.rows),await s(300),i}finally{(e=>{for(let t of i.values())if(t.sessionName===e&&!t.cleaned){if(!t.capturePaused)return;t.capturePaused=!1;return}})(e)}};e.s(["capturePaneAtWidth",0,l],971780)},443571,e=>{"use strict";let t=["Yes","Yes,","No","Accept","Decline","Open System Settings","Try again","Use this","Continue without","Resume from summary","Resume full session","Continue this conversation","Send message as","Don't ask me again"],n=/^\s*(?:[❯›>]\s+)?(.+)$/,i=/^\s*[❯›>]\s+/,a=/^\d+\.\s+/,s=/^\s*([❯›>])?\s*(\d+)\.?\s*(\S.*)$/,l=e=>e.replace(a,""),r=(e,t)=>e.some(e=>l(e).startsWith(t)),u=e=>e.match(/^\s*/)?.[0].length??0,o=/^(Yes,\s*and\s+don[\u2019']?t\s+ask)\s*:\s*(.+)$/,c=e=>!(e.length<2)&&(r(e,"Yes")&&r(e,"No")||r(e,"Accept")&&r(e,"Decline")||r(e,"Open System Settings")||r(e,"Use this")&&r(e,"Continue without")||r(e,"Resume from summary")&&r(e,"Resume full session")||r(e,"Continue this conversation")&&r(e,"Send message as"));e.s(["parsePermissionOptions",0,e=>{let a=e.split("\n"),r=(e=>{let t=[],n=[],i=0,a=1,l=0,r=()=>{n.length>=2&&t.push({rawOptions:n.slice(),focusedIndex:i}),n=[],i=0,a=1,l=0};for(let t of e){if(!t.trim())continue;let e=t.match(s);if(e){let s=e[1],o=Number(e[2]),c=e[3].trim();if(c.length>0){if(1===o){r(),n.push(c),s&&(i=0),l=u(t),a=2;continue}if(o===a){s&&(i=n.length),n.push(c),l=u(t),a+=1;continue}}}if(n.length>0){if(u(t)>l){n[n.length-1]+=t.trimStart();continue}if(/^\s+\S/.test(t))continue;r()}}r();let c=t[t.length-1];return c?{options:c.rawOptions.map((e,t)=>{let n;return`${t+1}. ${(n=e.match(o))?`${n[1]} again for: ${n[2].trim()}`:/^Yes(?![,\s]|$)/.test(e)?"Yes":/^No(?![,\s]|$)/.test(e)?"No":e}`}),focusedIndex:c.focusedIndex}:{options:[],focusedIndex:0}})(a);if(r.options.length>=2&&c(r.options))return r;let d=(e=>{let a=[],s=0,r=!1;for(let u of e){if(!u.trim()){if(r)break;continue}let e=i.test(u),o=/^\s+\S/.test(u);if(!e&&!o){if(r)break;continue}let c=u.match(n);if(!c)continue;let d=c[1].trim(),f=l(d);t.some(e=>f.startsWith(e))&&(e&&(s=a.length),a.push(d),r=!0)}return{options:a,focusedIndex:s}})(a);return c(d.options)?d:{options:[],focusedIndex:0}}])},785128,e=>{"use strict";let t=new Set(["zsh","bash","fish","sh","-zsh","-bash","-fish","-sh"]),n=e=>{if("~"===e||"/"===e)return e;let t=e.replace(/\/$/,"").split("/");return t[t.length-1]||e};e.s(["formatTabTitle",0,e=>{let i=e.trim();if(!i)return"";let a=(e=>{let t=e.trim();if(!t)return null;let n=t.indexOf("|");return n>0?t.slice(0,n):null})(e);if(null!==a){let e=i.slice(i.indexOf("|")+1);return t.has(a)?n(e):a}let s=i.match(/@[^:]+:\s*(.*)/);if(s)return n(s[1].trim());if(i.startsWith("/")||i.startsWith("~"))return n(i);let l=i.split(/\s+/)[0];return t.has(l)?"":l||""}])},796902,e=>{"use strict";var t=e.i(814747),n=e.i(446786);let i=t.default.join(n.default.homedir(),".purplemux"),a=t.default.join(i,"statusline.sh"),s=t.default.join(i,"rate-limits.json"),l=`#!/bin/sh
2
- PORT_FILE="$HOME/.purplemux/port"
3
- TOKEN_FILE="$HOME/.purplemux/cli-token"
4
- [ -f "$PORT_FILE" ] || exit 0
5
- [ -f "$TOKEN_FILE" ] || exit 0
6
- PORT=$(cat "$PORT_FILE")
7
- TOKEN=$(cat "$TOKEN_FILE")
8
- curl -sf --max-time 2 -X POST \\
9
- -H 'Content-Type: application/json' \\
10
- -H "x-pmux-token: \${TOKEN}" \\
11
- --data-binary @- \\
12
- "http://localhost:\${PORT}/api/status/statusline" 2>/dev/null || exit 0
13
- `;e.s(["RATE_LIMITS_FILE",0,s,"STATUSLINE_SCRIPT_CONTENT",0,l,"STATUSLINE_SCRIPT_PATH",0,a])}];
14
-
15
- //# sourceMappingURL=%5Broot-of-the-server%5D__0iqf2xr._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),a=e.i(446786);let i=r.default.join(a.default.homedir(),".purplemux","logs"),n=process.env.LOG_LEVEL||"info",s=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,a]=r.split("=").map(e=>e.trim());e&&a&&(t[e]=a)}return t})(process.env.LOG_LEVELS),l=["trace","debug","info","warn","error","fatal"],o=globalThis;if(!o.__ptRootLogger){let e=[n,...Object.values(s)].reduce((e,t)=>l.indexOf(t)<l.indexOf(e)?t:e,"fatal");o.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(i,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=o.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=s[e]??n,t}])},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,r=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(r)),e.s(["PRISTINE_ENV",0,r],965898);let a=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),i=["LC_"],n=e=>a.has(e)||i.some(t=>e.startsWith(t)),s={TERM:"xterm-256color",COLORTERM:"truecolor"},l=()=>{let e={};for(let[t,a]of Object.entries(r))void 0!==a&&n(t)&&(e[t]=a);return{...e,...s}},o=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>r.SHELL||"/bin/bash";e.s(["buildShellEnv",0,()=>l(),"buildShellLaunchCommand",0,()=>{let e=Object.entries(l()).map(([e,t])=>`${e}=${o(t)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${e} ${o(u())} -l`},"defaultShell",0,u],597789)},44014,e=>{"use strict";let t,r;var a=e.i(666680);e.s(["nanoid",0,function(e=21){var i;i=e|=0,!t||t.length<i?(t=Buffer.allocUnsafe(128*i),a.webcrypto.getRandomValues(t),r=0):r+i>t.length&&(a.webcrypto.getRandomValues(t),r=0),r+=i;let n="";for(let a=r-e;a<r;a++)n+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[a]];return n}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),r=e.i(924868),a=e.i(224361),i=e.i(814747),n=e.i(44014),s=e.i(965898),l=e.i(597789),o=e.i(25146);process.platform;let u="linux"===process.platform;e.s(["isLinux",0,u],544538);let c=(0,o.createLogger)("terminal"),p=(0,a.promisify)(t.execFile),d="purple",m=i.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),h=async()=>{try{let{stdout:e}=await p("tmux",["-L",d,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},f=async(e,t,r,a)=>{let i=(0,l.buildShellLaunchCommand)();await p("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),i],{timeout:5e3,cwd:a||s.PRISTINE_ENV.HOME||"/"}),await E(),c.debug(`tmux session created: ${e} (cols: ${t}, rows: ${r})`)},w=e=>new Promise(t=>setTimeout(t,e)),g=async e=>{if(!await y(e))return;c.debug(`killSession start: ${e}`);let t=await v(e);if(t)try{c.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await p("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await y(e))return void c.debug(`killSession done (SIGTERM): ${e}`);await w(200)}if(c.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{c.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await p("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await y(e))return void c.debug(`killSession done (SIGKILL): ${e}`);await w(200)}c.warn(`tmux session still alive after kill: ${e}`)},y=async e=>{try{return await p("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},x=async()=>{},S=async()=>{await x();let e=await h();e.length>0&&e.forEach(e=>{c.debug(`existing tmux session found: ${e}`)})},_=async e=>{if(u)try{return await r.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await p("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),r=t.split("\n").find(e=>e.startsWith("n/"));return r?r.slice(1):null}catch{return null}},L=async e=>{let t=await v(e);if(t){let e=await _(t);if(e)return e}try{let{stdout:t}=await p("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},v=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),r=parseInt(t.trim(),10);return Number.isNaN(r)?null:r}catch{return null}},E=async()=>{try{await p("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},b=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},I=async()=>{try{let{stdout:e}=await p("tmux",["-L",d,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let r of e.trim().split("\n")){if(!r)continue;let[e,a,i,n,s]=r.split(" ");if(e&&a){let r=parseInt(n,10),l=parseInt(s,10);t.set(e,{command:a,path:i||"",pid:Number.isNaN(r)?0:r,windowActivity:Number.isNaN(l)?0:l})}}return t}catch{return new Map}},P=new Set(["bash","zsh","fish","sh","dash"]),N=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},$=async e=>{await p("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},R=async(e,t)=>{await $(e),await p("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},M=async(e,t)=>{await $(e),await p("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},T=async(e,t)=>{await $(e),await p("tmux",["-L",d,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await p("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await p("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3})},C=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[r,a,i,n,s,l]=t.trim().split(" ");return{cwd:r||null,command:a||null,pid:i&&parseInt(i,10)||null,width:n&&parseInt(n,10)||null,height:s&&parseInt(s,10)||null,sessionCreated:l&&parseInt(l,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},A=new Set(["node","python","python3","ruby","perl","deno","bun"]),k=async()=>{try{await p("tmux",["-L",d,"kill-server"],{timeout:5e3}),c.debug("tmux server killed")}catch{}},q=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},O=async(e,t)=>{try{let{stdout:r}=await p("tmux",["-L",d,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return r}catch{return null}},j=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let a of(await r.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(a,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await p("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},D=async e=>{let t=[],r=[e];for(;r.length>0;){let e=await j(r);if(0===e.length)break;t.push(...e),r=e}return t},H=async e=>{try{let t=new Set(e),{stdout:r}=await p("ss",["-tlnp"],{timeout:5e3}),a=new Set;for(let e of r.split("\n")){let r=e.match(/pid=(\d+)/g);if(!r||!r.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let i=e.match(/:(\d+)\s/);i&&a.add(parseInt(i[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},U=async e=>{let t=await D(e);if(0===t.length)return[];if(u)return H(t);try{let{stdout:e}=await p("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),r=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&r.add(parseInt(e[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},G=async e=>{let t=await v(e);if(!t)return null;try{let{stdout:e}=await p("pgrep",["-n","-P",String(t)],{timeout:5e3}),r=e.trim();if(!r)return null;let{stdout:a}=await p("ps",["-o","args=","-p",r],{timeout:5e3}),n=a.trim();if(!n)return null;let s=n.split(/\s+/);if(0===s.length)return n;if(s[0]=i.default.basename(s[0]),A.has(s[0])&&s.length>1){let e=i.default.basename(s[1]).replace(/\.(c|m)?js$/,"");s.splice(0,2,e)}return s.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,P,"applyConfig",0,E,"capturePaneContent",0,q,"capturePaneContentWithHistory",0,O,"createSession",0,f,"defaultSessionName",0,()=>`pt-${(0,n.nanoid)(6)}-${(0,n.nanoid)(6)}-${(0,n.nanoid)(6)}`,"exitCopyMode",0,$,"getAllPanesInfo",0,I,"getLastCommand",0,G,"getListeningPorts",0,U,"getPaneCurrentCommand",0,b,"getPaneDetailInfo",0,C,"getPaneTitle",0,N,"getSessionCwd",0,L,"getSessionPanePid",0,v,"hasSession",0,y,"killServer",0,k,"killSession",0,g,"listSessions",0,h,"scanSessions",0,S,"sendBracketedPaste",0,T,"sendKeys",0,R,"sendRawKeys",0,M,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},422392,e=>{"use strict";let t=new Map,r=6e4;e.s(["getCached",0,e=>{let r=t.get(e);return r?Date.now()>r.expiresAt?(t.delete(e),null):r.data:null},"setCached",0,(e,a,i=r)=>{t.set(e,{data:a,expiresAt:Date.now()+i})}])},740670,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),i=e.i(262950),n=e.i(233405),s=e.i(224361),l=e.i(459015),o=e.i(422392);let u=(0,s.promisify)(n.execFile),c=async e=>{let t=await (0,l.getSessionCwd)(e);if(!t)throw Error("tmux-session-not-found");let r=`git-branch:${t}`,a=(0,o.getCached)(r);if(null!==a)return a;try{let{stdout:e}=await u("git",["-C",t,"rev-parse","--abbrev-ref","HEAD"],{timeout:5e3}),a=e.trim()||null;return(0,o.setCached)(r,a,15e3),a}catch(e){if(128===e.code)return(0,o.setCached)(r,null,15e3),null;throw e}},p=(0,e.i(25146).createLogger)("git"),d=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let r=e.query.tmuxSession;if(!r)return t.status(400).json({error:"missing-param",message:"tmuxSession parameter required"});try{let e=await c(r);return t.status(200).json({branch:e})}catch(r){let e=r instanceof Error?r.message:String(r);if("tmux-session-not-found"===e)return t.status(404).json({error:"tmux-session-not-found"});return p.error(`branch query failed: ${e}`),t.status(500).json({error:"git-error"})}};e.s(["default",0,d],612542);var m=e.i(612542),h=e.i(7031),f=e.i(181927),w=e.i(846432);let g=(0,i.hoist)(m,"default"),y=(0,i.hoist)(m,"config"),x=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/git/branch",pathname:"/api/git/branch",bundlePath:"",filename:""},userland:m,distDir:".next",relativeProjectDir:""});async function S(e,r,a){a.requestMeta&&(0,w.setRequestMeta)(e,a.requestMeta),x.isDev&&(0,w.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/git/branch";i=i.replace(/\/index$/,"")||"/";let n=await x.prepare(e,r,{srcPage:i});if(!n){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:s,params:l,prerenderManifest:o,routerServerContext:u}=n;try{let t,a=e.method||"GET",n=(0,h.getTracer)(),c=n.getActiveScopeSpan(),p=!!(null==u?void 0:u.isWrappedByNextServer),d=x.instrumentationOnRequestError.bind(x),m=async c=>x.render(e,r,{query:{...s,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:x.isDev,page:"/api/git/branch",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>d(e,...t)}).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=n.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==f.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=e.get("next.route");if(s){let e=`${a} ${s}`;c.setAttributes({"next.route":s,"http.route":s,"next.span_name":e}),c.updateName(e),t&&t!==c&&(t.setAttribute("http.route",s),t.updateName(e))}else c.updateName(`${a} ${i}`)});p&&c?await m(c):(t=n.getActiveScopeSpan(),await n.withPropagatedContext(e.headers,()=>n.trace(f.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:h.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},m),void 0,!p))}catch(e){if(x.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,y,"default",0,g,"handler",0,S],740670)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0ky2xd.._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[270406,(t,e,a)=>{e.exports=t.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(t,e,a)=>{e.exports=t.x("os",()=>require("os"))},814747,(t,e,a)=>{e.exports=t.x("path",()=>require("path"))},924868,(t,e,a)=>{e.exports=t.x("fs/promises",()=>require("fs/promises"))},130146,(t,e,a)=>{e.exports=t.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},25146,t=>{"use strict";var e=t.i(130146),a=t.i(814747),n=t.i(446786);let i=a.default.join(n.default.homedir(),".purplemux","logs"),r=process.env.LOG_LEVEL||"info",s=(t=>{if(!t)return{};let e={};for(let a of t.split(",")){let[t,n]=a.split("=").map(t=>t.trim());t&&n&&(e[t]=n)}return e})(process.env.LOG_LEVELS),l=["trace","debug","info","warn","error","fatal"],u=globalThis;if(!u.__ptRootLogger){let t=[r,...Object.values(s)].reduce((t,e)=>l.indexOf(e)<l.indexOf(t)?e:t,"fatal");u.__ptRootLogger=(0,e.default)({level:t,transport:{targets:[{target:"pino-roll",level:t,options:{file:a.default.join(i,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:t,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let o=u.__ptRootLogger;t.s(["createLogger",0,t=>{let e=o.child({module:t});return e.level=s[t]??r,e}])},224361,(t,e,a)=>{e.exports=t.x("util",()=>require("util"))},233405,(t,e,a)=>{e.exports=t.x("child_process",()=>require("child_process"))},666680,(t,e,a)=>{e.exports=t.x("node:crypto",()=>require("node:crypto"))},597789,965898,t=>{"use strict";let e=process.env.__PMUX_PRISTINE_ENV,a=Object.freeze(e?JSON.parse(e):{...process.env});e||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(a)),t.s(["PRISTINE_ENV",0,a],965898);let n=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),i=["LC_"],r=t=>n.has(t)||i.some(e=>t.startsWith(e)),s={TERM:"xterm-256color",COLORTERM:"truecolor"},l=()=>{let t={};for(let[e,n]of Object.entries(a))void 0!==n&&r(e)&&(t[e]=n);return{...t,...s}},u=t=>`'${t.replace(/'/g,"'\\''")}'`,o=()=>a.SHELL||"/bin/bash";t.s(["buildShellEnv",0,()=>l(),"buildShellLaunchCommand",0,()=>{let t=Object.entries(l()).map(([t,e])=>`${t}=${u(e)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${t} ${u(o())} -l`},"defaultShell",0,o],597789)},44014,t=>{"use strict";let e,a;var n=t.i(666680);t.s(["nanoid",0,function(t=21){var i;i=t|=0,!e||e.length<i?(e=Buffer.allocUnsafe(128*i),n.webcrypto.getRandomValues(e),a=0):a+i>e.length&&(n.webcrypto.getRandomValues(e),a=0),a+=i;let r="";for(let n=a-t;n<a;n++)r+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&e[n]];return r}],44014)},459015,544538,t=>{"use strict";var e=t.i(233405),a=t.i(924868),n=t.i(224361),i=t.i(814747),r=t.i(44014),s=t.i(965898),l=t.i(597789),u=t.i(25146);process.platform;let o="linux"===process.platform;t.s(["isLinux",0,o],544538);let c=(0,u.createLogger)("terminal"),d=(0,n.promisify)(e.execFile),p="purple",m=i.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),h=async()=>{try{let{stdout:t}=await d("tmux",["-L",p,"ls","-F","#{session_name}"],{timeout:5e3});return t.trim().split("\n").map(t=>t.trim()).filter(t=>t.startsWith("pt-"))}catch{return[]}},f=async(t,e,a,n)=>{let i=(0,l.buildShellLaunchCommand)();await d("tmux",["-u","-L",p,"-f",m,"new-session","-d","-s",t,"-x",String(e),"-y",String(a),i],{timeout:5e3,cwd:n||s.PRISTINE_ENV.HOME||"/"}),await I(),c.debug(`tmux session created: ${t} (cols: ${e}, rows: ${a})`)},w=t=>new Promise(e=>setTimeout(e,t)),y=async t=>{if(!await g(t))return;c.debug(`killSession start: ${t}`);let e=await P(t);if(e)try{c.debug(`SIGTERM → process group ${e}: ${t}`),process.kill(-e,"SIGTERM")}catch{}try{await d("tmux",["-L",p,"kill-session","-t",t],{timeout:5e3})}catch{}for(let e=0;e<5;e++){if(!await g(t))return void c.debug(`killSession done (SIGTERM): ${t}`);await w(200)}if(c.warn(`session survived SIGTERM, escalating to SIGKILL: ${t}`),e)try{c.debug(`SIGKILL → process group ${e}: ${t}`),process.kill(-e,"SIGKILL")}catch{}try{await d("tmux",["-L",p,"kill-session","-t",t],{timeout:5e3})}catch{}for(let e=0;e<3;e++){if(!await g(t))return void c.debug(`killSession done (SIGKILL): ${t}`);await w(200)}c.warn(`tmux session still alive after kill: ${t}`)},g=async t=>{try{return await d("tmux",["-L",p,"has-session","-t",t],{timeout:5e3}),!0}catch{return!1}},S=async()=>{},x=async()=>{await S();let t=await h();t.length>0&&t.forEach(t=>{c.debug(`existing tmux session found: ${t}`)})},v=async t=>{if(o)try{return await a.default.readlink(`/proc/${t}/cwd`)}catch{return null}try{let{stdout:e}=await d("lsof",["-a","-p",String(t),"-d","cwd","-Fn"],{timeout:5e3}),a=e.split("\n").find(t=>t.startsWith("n/"));return a?a.slice(1):null}catch{return null}},_=async t=>{let e=await P(t);if(e){let t=await v(e);if(t)return t}try{let{stdout:e}=await d("tmux",["-L",p,"display-message","-p","-t",t,"#{pane_current_path}"],{timeout:5e3});return e.trim()||null}catch{return null}},P=async t=>{try{let{stdout:e}=await d("tmux",["-L",p,"display-message","-p","-t",t,"#{pane_pid}"],{timeout:5e3}),a=parseInt(e.trim(),10);return Number.isNaN(a)?null:a}catch{return null}},I=async()=>{try{await d("tmux",["-L",p,"source-file",m],{timeout:5e3})}catch{}},L=async t=>{try{let{stdout:e}=await d("tmux",["-L",p,"list-panes","-t",t,"-F","#{pane_current_command}"],{timeout:5e3});return e.trim()||null}catch{return null}},E=async()=>{try{let{stdout:t}=await d("tmux",["-L",p,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),e=new Map;for(let a of t.trim().split("\n")){if(!a)continue;let[t,n,i,r,s]=a.split(" ");if(t&&n){let a=parseInt(r,10),l=parseInt(s,10);e.set(t,{command:n,path:i||"",pid:Number.isNaN(a)?0:a,windowActivity:Number.isNaN(l)?0:l})}}return e}catch{return new Map}},b=new Set(["bash","zsh","fish","sh","dash"]),N=async t=>{try{let{stdout:e}=await d("tmux",["-L",p,"display-message","-p","-t",t,"#{pane_title}"],{timeout:5e3});return e.trim()||null}catch{return null}},A=async t=>{await d("tmux",["-L",p,"copy-mode","-q","-t",t],{timeout:5e3}).catch(()=>{})},T=async(t,e)=>{await A(t),await d("tmux",["-L",p,"send-keys","-t",t,e,"Enter"],{timeout:5e3})},R=async(t,e)=>{await A(t),await d("tmux",["-L",p,"send-keys","-t",t,e],{timeout:5e3})},$=async(t,e)=>{await A(t),await d("tmux",["-L",p,"send-keys","-t",t,"-l",`\x1b[200~${e}\x1b[201~`],{timeout:5e3}),await d("tmux",["-L",p,"send-keys","-t",t,"Enter"],{timeout:5e3}),await new Promise(t=>setTimeout(t,600)),await d("tmux",["-L",p,"send-keys","-t",t,"Enter"],{timeout:5e3})},j=async t=>{try{let{stdout:e}=await d("tmux",["-L",p,"display-message","-p","-t",t,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[a,n,i,r,s,l]=e.trim().split(" ");return{cwd:a||null,command:n||null,pid:i&&parseInt(i,10)||null,width:r&&parseInt(r,10)||null,height:s&&parseInt(s,10)||null,sessionCreated:l&&parseInt(l,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},M=new Set(["node","python","python3","ruby","perl","deno","bun"]),k=async()=>{try{await d("tmux",["-L",p,"kill-server"],{timeout:5e3}),c.debug("tmux server killed")}catch{}},C=async t=>{try{let{stdout:e}=await d("tmux",["-L",p,"capture-pane","-p","-t",t],{timeout:5e3});return e}catch{return null}},D=async(t,e)=>{try{let{stdout:a}=await d("tmux",["-L",p,"capture-pane","-p","-S",`-${e}`,"-t",t],{timeout:5e3});return a}catch{return null}},O=async t=>{if(o){let e=[];return await Promise.all(t.map(async t=>{try{for(let n of(await a.default.readFile(`/proc/${t}/task/${t}/children`,"utf-8")).trim().split(/\s+/)){let t=parseInt(n,10);Number.isNaN(t)||e.push(t)}}catch{}})),e}try{let{stdout:e}=await d("pgrep",["-P",t.join(",")],{timeout:5e3});return e.trim().split("\n").map(t=>parseInt(t,10)).filter(t=>!Number.isNaN(t))}catch{return[]}},q=async t=>{let e=[],a=[t];for(;a.length>0;){let t=await O(a);if(0===t.length)break;e.push(...t),a=t}return e},H=async t=>{try{let e=new Set(t),{stdout:a}=await d("ss",["-tlnp"],{timeout:5e3}),n=new Set;for(let t of a.split("\n")){let a=t.match(/pid=(\d+)/g);if(!a||!a.some(t=>e.has(parseInt(t.replace("pid=",""),10))))continue;let i=t.match(/:(\d+)\s/);i&&n.add(parseInt(i[1],10))}return[...n].sort((t,e)=>t-e)}catch{return[]}},U=async t=>{let e=await q(t);if(0===e.length)return[];if(o)return H(e);try{let{stdout:t}=await d("lsof",["-a","-p",e.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),a=new Set;for(let e of t.split("\n"))if(e.startsWith("n")){let t=e.match(/:(\d+)$/);t&&a.add(parseInt(t[1],10))}return[...a].sort((t,e)=>t-e)}catch{return[]}},G=async t=>{let e=await P(t);if(!e)return null;try{let{stdout:t}=await d("pgrep",["-n","-P",String(e)],{timeout:5e3}),a=t.trim();if(!a)return null;let{stdout:n}=await d("ps",["-o","args=","-p",a],{timeout:5e3}),r=n.trim();if(!r)return null;let s=r.split(/\s+/);if(0===s.length)return r;if(s[0]=i.default.basename(s[0]),M.has(s[0])&&s.length>1){let t=i.default.basename(s[1]).replace(/\.(c|m)?js$/,"");s.splice(0,2,t)}return s.join(" ")}catch{return null}};t.s(["SAFE_SHELLS",0,b,"applyConfig",0,I,"capturePaneContent",0,C,"capturePaneContentWithHistory",0,D,"createSession",0,f,"defaultSessionName",0,()=>`pt-${(0,r.nanoid)(6)}-${(0,r.nanoid)(6)}-${(0,r.nanoid)(6)}`,"exitCopyMode",0,A,"getAllPanesInfo",0,E,"getLastCommand",0,G,"getListeningPorts",0,U,"getPaneCurrentCommand",0,L,"getPaneDetailInfo",0,j,"getPaneTitle",0,N,"getSessionCwd",0,_,"getSessionPanePid",0,P,"hasSession",0,g,"killServer",0,k,"killSession",0,y,"listSessions",0,h,"scanSessions",0,x,"sendBracketedPaste",0,$,"sendKeys",0,T,"sendRawKeys",0,R,"workspaceSessionName",0,(t,e,a)=>`pt-${t}-${e}-${a}`],459015)},522734,(t,e,a)=>{e.exports=t.x("fs",()=>require("fs"))},713915,t=>{"use strict";var e=t.i(233405),a=t.i(924868),n=t.i(446786),i=t.i(814747),r=t.i(224361),s=t.i(597789),l=t.i(965898);let u=(0,r.promisify)(e.execFile),o=null,c=null,d=async()=>{let t=n.default.userInfo().shell||(0,s.defaultShell)();try{let{stdout:e}=await u(t,["-ilc",'echo -n "$PATH"'],{timeout:5e3,env:{...(0,s.buildShellEnv)(),SHELL:t,DISABLE_AUTO_UPDATE:"true",ZSH_TMUX_AUTOSTARTED:"true"}});return e.toString().trim()}catch{return l.PRISTINE_ENV.PATH||""}},p=async()=>o||(c||(c=d().then(t=>(o=t,c=null,t))),c),m=async(t,e,a)=>{try{let n=await p(),{stdout:i}=await u(t,e,{timeout:5e3,env:{...process.env,PATH:n}});return{installed:!0,version:a(i)}}catch{return{installed:!1,version:null}}},h=t=>t.trim().match(/(\d+\.\d+[\d.]*)/)?.[1]??null,f=[i.default.join(n.default.homedir(),".local","bin")],w=async()=>{for(let t of f)try{return await (0,a.access)(i.default.join(t,"claude")),t}catch{}return null},y=t=>t.installed&&null!==t.version&&parseFloat(t.version)>=2.9,g=async()=>{o=await d();let[t,e,r]=await Promise.all([m("tmux",["-V"],h),m("git",["--version"],h),m("claude",["--version"],h)]),s=(y(t)&&e.installed&&r.installed,r.installed?null:await w()),l=!1;if(r.installed||s)try{await (0,a.access)(i.default.join(n.default.homedir(),".claude")),l=!0}catch{}return{tmux:{...t,compatible:y(t)},git:e,claude:{...r,binaryPath:s,loggedIn:l}}},S=null,x=null,v=null,_=null,P=async()=>v&&Date.now()-v.checkedAt<1e3?v.result:_||(_=g().then(t=>(v={result:t,checkedAt:Date.now()},_=null,t)).catch(t=>{throw _=null,t})),I=async()=>{o=await d();let[t,e,a]=await Promise.all([m("tmux",["-V"],h),m("git",["--version"],h),m("claude",["--version"],h)]);return{tmux:{...t,compatible:y(t)},git:e,claude:a}},L=async()=>S&&Date.now()-S.checkedAt<3e4?S.result:x||(x=I().then(t=>(S={result:t,checkedAt:Date.now()},x=null,t)).catch(t=>{throw x=null,t}));t.s(["getCachedPreflightStatus",0,P,"getCachedRuntimePreflight",0,L,"getShellPath",0,p,"invalidateRuntimeCache",0,()=>{S=null,x=null}])},143511,t=>{"use strict";var e=t.i(924868);t.i(522734);var a=t.i(814747),n=t.i(446786),i=t.i(233405),r=t.i(224361),s=t.i(713915),l=t.i(544538);let u=(0,r.promisify)(i.execFile),o=a.default.join(n.default.homedir(),".claude"),c=a.default.join(o,"sessions"),d=a.default.join(o,"projects"),p=[a.default.join(n.default.homedir(),".local","bin","claude")],m=t=>{let e=t.replace(/[^a-zA-Z0-9]/g,"-");if(e.length<=200)return e;let a=h(t);return`${e.slice(0,200)}-${a}`},h=t=>{let e=0;for(let a=0;a<t.length;a++)e=(e<<5)-e+t.charCodeAt(a)|0;return Math.abs(e).toString(36)},f=async t=>{try{let{stdout:e}=await u("pgrep",["-P",String(t)]);return e.trim().split("\n").map(t=>parseInt(t,10)).filter(t=>!Number.isNaN(t))}catch{return[]}},w=async t=>{if(l.isLinux)try{return await e.default.readlink(`/proc/${t}/cwd`)}catch{return null}try{let{stdout:e}=await u("lsof",["-a","-p",String(t),"-d","cwd","-Fn"]),a=e.split("\n").find(t=>t.startsWith("n/"));return a?a.slice(1):null}catch{return null}},y=async t=>{for(let e of t)try{let{stdout:t}=await u("ps",["-p",String(e),"-o","args="]),a=t.trim().match(/claude\s+--resume\s+([0-9a-f-]{36})/);if(a){let t=await w(e);return{pid:e,sessionId:a[1],cwd:t}}}catch{continue}return null},g=async t=>{try{let a=await e.default.readFile(t,"utf-8"),n=JSON.parse(a);if(!n.pid||!n.sessionId)return null;return n}catch{return null}},S=async(t,n)=>{let i=a.default.join(t,`${n}.jsonl`);try{return await e.default.access(i),i}catch{return null}},x=async()=>{try{return await u("claude",["--version"],{timeout:5e3,env:{...process.env,PATH:await (0,s.getShellPath)()}}),!0}catch{for(let t of p)try{return await e.default.access(t),!0}catch{}return!1}},v=async(t,e)=>{for(let a of e??await f(t))try{let{stdout:t}=await u("ps",["-p",String(a),"-o","args="]);if(t.trim().includes("claude"))return!0}catch{continue}return!1},_=async(t,n)=>{try{await e.default.access(o)}catch{return{status:await x()?"not-initialized":"not-installed",sessionId:null,jsonlPath:null,pid:null,startedAt:null,cwd:null}}let i=n??await f(t);if(0===i.length)return{status:"not-running",sessionId:null,jsonlPath:null,pid:null,startedAt:null,cwd:null};let r=(await Promise.all(i.map(f))).flat(),s=[...i,...r],l=new Set(s);try{for(let t of(await e.default.readdir(c)).filter(t=>t.endsWith(".json"))){let n=await g(a.default.join(c,t));if(!n||!l.has(n.pid))continue;let i="";try{let{stdout:t}=await u("ps",["-p",String(n.pid),"-o","args="]);i=t.trim()}catch{try{await e.default.unlink(a.default.join(c,t))}catch{}continue}if(!i.includes("claude")){try{await e.default.unlink(a.default.join(c,t))}catch{}continue}let r=m(n.cwd),s=a.default.join(d,r),o=await S(s,n.sessionId),p=n.sessionId;if(!o){let t=i.match(/--resume\s+([0-9a-f-]{36})/);if(t){let e=t[1],a=await S(s,e);a&&(o=a,p=e)}}return{status:"running",sessionId:p,jsonlPath:o,pid:n.pid,startedAt:n.startedAt,cwd:n.cwd}}}catch{}let p=await y(s);if(p){let t=p.cwd;if(t){let e=m(t),n=a.default.join(d,e),i=await S(n,p.sessionId);return{status:"running",sessionId:p.sessionId,jsonlPath:i,pid:p.pid,startedAt:null,cwd:t}}}return{status:"not-running",sessionId:null,jsonlPath:null,pid:null,startedAt:null,cwd:null}};t.s(["detectActiveSession",0,_,"getChildPids",0,f,"isClaudeRunning",0,v,"toClaudeProjectName",0,m])},727130,t=>{"use strict";var e=t.i(926747),a=t.i(190406),n=t.i(244898),i=t.i(262950),r=t.i(459015),s=t.i(143511);let l=async(t,e)=>{if("GET"!==t.method)return e.setHeader("Allow","GET"),e.status(405).json({error:"Method not allowed"});let a=t.query.session;if(!a)return e.status(400).json({error:"session parameter required"});let n=Date.now();if(!await (0,r.hasSession)(a))return e.status(200).json({running:!1,checkedAt:n,sessionId:null});let i=await (0,r.getSessionPanePid)(a);if(!i)return e.status(200).json({running:!1,checkedAt:n,sessionId:null});let l=await (0,s.getChildPids)(i);if(!await (0,s.isClaudeRunning)(i,l))return e.status(200).json({running:!1,checkedAt:n,sessionId:null});let u=await (0,s.detectActiveSession)(i,l);return e.status(200).json({running:!0,checkedAt:n,sessionId:u.sessionId,resumable:!!u.jsonlPath})};t.s(["default",0,l],102649);var u=t.i(102649),o=t.i(7031),c=t.i(181927),d=t.i(846432);let p=(0,i.hoist)(u,"default"),m=(0,i.hoist)(u,"config"),h=new n.PagesAPIRouteModule({definition:{kind:a.RouteKind.PAGES_API,page:"/api/check-claude",pathname:"/api/check-claude",bundlePath:"",filename:""},userland:u,distDir:".next",relativeProjectDir:""});async function f(t,a,n){n.requestMeta&&(0,d.setRequestMeta)(t,n.requestMeta),h.isDev&&(0,d.addRequestMeta)(t,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/check-claude";i=i.replace(/\/index$/,"")||"/";let r=await h.prepare(t,a,{srcPage:i});if(!r){a.statusCode=400,a.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve());return}let{query:s,params:l,prerenderManifest:u,routerServerContext:p}=r;try{let e,n=t.method||"GET",r=(0,o.getTracer)(),d=r.getActiveScopeSpan(),m=!!(null==p?void 0:p.isWrappedByNextServer),f=h.instrumentationOnRequestError.bind(h),w=async o=>h.render(t,a,{query:{...s,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:u.preview,propagateError:!1,dev:h.isDev,page:"/api/check-claude",internalRevalidate:null==p?void 0:p.revalidate,onError:(...e)=>f(t,...e)}).finally(()=>{if(!o)return;o.setAttributes({"http.status_code":a.statusCode,"next.rsc":!1});let t=r.getRootSpanAttributes();if(!t)return;if(t.get("next.span_type")!==c.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${t.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=t.get("next.route");if(s){let t=`${n} ${s}`;o.setAttributes({"next.route":s,"http.route":s,"next.span_name":t}),o.updateName(t),e&&e!==o&&(e.setAttribute("http.route",s),e.updateName(t))}else o.updateName(`${n} ${i}`)});m&&d?await w(d):(e=r.getActiveScopeSpan(),await r.withPropagatedContext(t.headers,()=>r.trace(c.BaseServerSpan.handleRequest,{spanName:`${n} ${i}`,kind:o.SpanKind.SERVER,attributes:{"http.method":n,"http.target":t.url}},w),void 0,!m))}catch(t){if(h.isDev)throw t;(0,e.sendError)(a,500,"Internal Server Error")}finally{null==n.waitUntil||n.waitUntil.call(n,Promise.resolve())}}t.s(["config",0,m,"default",0,p,"handler",0,f],727130)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0l806ne._.js.map