purplemux 0.2.2 → 0.2.4

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 (669) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +99 -94
  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 +91 -7
  6. package/.next/standalone/.next/server/chunks/[root-of-the-server]__014kwh_._.js +3 -0
  7. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0t1c-6w._.js → [root-of-the-server]__016s4a9._.js} +2 -2
  8. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02v.lnb._.js +3 -0
  9. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05ij_ys._.js +2 -2
  10. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0cjfc~l._.js → [root-of-the-server]__06h3gzy._.js} +2 -2
  11. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08tdlcm._.js +3 -0
  12. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ar~lbk._.js +3 -0
  13. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0auutl5._.js +2 -2
  14. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0bo-su1._.js +3 -0
  15. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0bocpgx._.js +30 -0
  16. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0c-bb5d._.js +3 -0
  17. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0dt2efu._.js +3 -0
  18. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0i-jyh3._.js +3 -0
  19. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0i1m1v9._.js +3 -0
  20. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ihlt6s._.js +3 -0
  21. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0kd7wei._.js +3 -0
  22. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l~_wd0._.js +1 -1
  23. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__04o.cbq._.js → [root-of-the-server]__0m99ffd._.js} +2 -2
  24. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0mky_tj._.js +35 -2
  25. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0oiiu_o._.js +3 -0
  26. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0oqgn2h._.js +3 -0
  27. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0hzysmw._.js → [root-of-the-server]__0q8lffz._.js} +1 -1
  28. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0rhb4gk._.js +3 -0
  29. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0vjtjtc._.js +3 -0
  30. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0w0wz~a._.js +3 -0
  31. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0x_e0yw._.js +3 -0
  32. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0t7wqt6._.js → [root-of-the-server]__10h2vlr._.js} +2 -2
  33. package/.next/standalone/.next/server/chunks/[root-of-the-server]__11iyaqz._.js +3 -0
  34. package/.next/standalone/.next/server/chunks/[root-of-the-server]__11xw16l._.js +3 -0
  35. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__00yjayf._.js → [root-of-the-server]__121-6-e._.js} +2 -2
  36. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12ksl6n._.js +2 -2
  37. package/.next/standalone/.next/server/chunks/{_0out7wm._.js → _0-mgr1c._.js} +1 -1
  38. package/.next/standalone/.next/server/chunks/_0.5a4bu._.js +3 -0
  39. package/.next/standalone/.next/server/chunks/{_134uyu_._.js → _03-duro._.js} +1 -1
  40. package/.next/standalone/.next/server/chunks/_05-8rnc._.js +3 -0
  41. package/.next/standalone/.next/server/chunks/{_0ap4fy.._.js → _07097f~._.js} +1 -1
  42. package/.next/standalone/.next/server/chunks/{_0st-_d~._.js → _0jzxge9._.js} +1 -1
  43. package/.next/standalone/.next/server/chunks/{_0uo_gs5._.js → _0ll-5~7._.js} +1 -1
  44. package/.next/standalone/.next/server/chunks/_0mhomq~._.js +3 -0
  45. package/.next/standalone/.next/server/chunks/{_0.hbe-v._.js → _0pk0hms._.js} +1 -1
  46. package/.next/standalone/.next/server/chunks/_0qm27ix._.js +3 -0
  47. package/.next/standalone/.next/server/chunks/{_0su2osz._.js → _0v81st0._.js} +1 -1
  48. package/.next/standalone/.next/server/chunks/_0vgpyhz._.js +3 -0
  49. package/.next/standalone/.next/server/chunks/{_1368r9s._.js → _0w0qjyh._.js} +1 -1
  50. package/.next/standalone/.next/server/chunks/_0wok5xu._.js +3 -0
  51. package/.next/standalone/.next/server/chunks/{_0tumyht._.js → _0wu6uxd._.js} +1 -1
  52. package/.next/standalone/.next/server/chunks/{_04dq3gt._.js → _0z7d6.z._.js} +1 -1
  53. package/.next/standalone/.next/server/chunks/{_0c63jma._.js → _0zf5mig._.js} +1 -1
  54. package/.next/standalone/.next/server/chunks/{_0mnwbyo._.js → _0~~9-pj._.js} +1 -1
  55. package/.next/standalone/.next/server/chunks/{src_lib_0vs5asg._.js → src_lib_0p.xsqi._.js} +1 -1
  56. package/.next/standalone/.next/server/chunks/src_lib_layout-store_ts_0fanx7c._.js +1 -1
  57. package/.next/standalone/.next/server/chunks/src_lib_workspace-store_ts_0vqt073._.js +2 -2
  58. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ap_bxo._.js +3 -0
  59. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0hwcydd._.js → [root-of-the-server]__0grkevn._.js} +1 -1
  60. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0t9ru13._.js +3 -0
  61. package/.next/standalone/.next/server/chunks/ssr/_0-9ezhb._.js +3 -0
  62. package/.next/standalone/.next/server/chunks/ssr/_003~2_g._.js +3 -0
  63. package/.next/standalone/.next/server/chunks/ssr/_00zsk6a._.js +3 -0
  64. package/.next/standalone/.next/server/chunks/ssr/{_00rrt71._.js → _016o9_-._.js} +1 -1
  65. package/.next/standalone/.next/server/chunks/ssr/_01eupc5._.js +3 -0
  66. package/.next/standalone/.next/server/chunks/ssr/{_0y5jzd3._.js → _020f2r.._.js} +1 -1
  67. package/.next/standalone/.next/server/chunks/ssr/{_0_c~3id._.js → _02jzd5g._.js} +2 -2
  68. package/.next/standalone/.next/server/chunks/ssr/{_08h9ynz._.js → _058y~nz._.js} +2 -2
  69. package/.next/standalone/.next/server/chunks/ssr/_05bq96_._.js +1 -1
  70. package/.next/standalone/.next/server/chunks/ssr/_0_sz4y0._.js +3 -0
  71. package/.next/standalone/.next/server/chunks/ssr/_0a64og5._.js +3 -0
  72. package/.next/standalone/.next/server/chunks/ssr/{_00ehnd~._.js → _0c1yivm._.js} +2 -2
  73. package/.next/standalone/.next/server/chunks/ssr/_0ccg0_z._.js +18 -0
  74. package/.next/standalone/.next/server/chunks/ssr/_0egedv6._.js +3 -0
  75. package/.next/standalone/.next/server/chunks/ssr/_0fnzfs-._.js +3 -0
  76. package/.next/standalone/.next/server/chunks/ssr/_0fota2a._.js +3 -0
  77. package/.next/standalone/.next/server/chunks/ssr/{_0rxhzwm._.js → _0ftinmo._.js} +2 -2
  78. package/.next/standalone/.next/server/chunks/ssr/_0h4kenr._.js +1 -1
  79. package/.next/standalone/.next/server/chunks/ssr/_0hat6~g._.js +3 -0
  80. package/.next/standalone/.next/server/chunks/ssr/_0hp8_ck._.js +3 -0
  81. package/.next/standalone/.next/server/chunks/ssr/_0hq29bt._.js +3 -0
  82. package/.next/standalone/.next/server/chunks/ssr/_0ihbr8k._.js +1 -1
  83. package/.next/standalone/.next/server/chunks/ssr/_0mltzed._.js +3 -0
  84. package/.next/standalone/.next/server/chunks/ssr/_0nbe6mv._.js +3 -0
  85. package/.next/standalone/.next/server/chunks/ssr/_0nvs1~o._.js +3 -0
  86. package/.next/standalone/.next/server/chunks/ssr/_0o8h1fd._.js +18 -0
  87. package/.next/standalone/.next/server/chunks/ssr/_0pg-q18._.js +3 -0
  88. package/.next/standalone/.next/server/chunks/ssr/_0w.1ts8._.js +3 -0
  89. package/.next/standalone/.next/server/chunks/ssr/_0w1phzp._.js +3 -0
  90. package/.next/standalone/.next/server/chunks/ssr/_0w6jc9p._.js +3 -0
  91. package/.next/standalone/.next/server/chunks/ssr/{_0lnui2f._.js → _0~hz1fq._.js} +2 -2
  92. package/.next/standalone/.next/server/chunks/ssr/_11v_6.6._.js +3 -0
  93. package/.next/standalone/.next/server/chunks/ssr/_1289s74._.js +3 -0
  94. package/.next/standalone/.next/server/chunks/ssr/{messages_046iw4z._.js → messages_02eoowy._.js} +1 -1
  95. package/.next/standalone/.next/server/chunks/ssr/{messages_0zr0cc7._.js → messages_0hmq5dp._.js} +1 -1
  96. package/.next/standalone/.next/server/chunks/ssr/messages_de_diff_json_[json]_cjs_0w6blyy._.js +1 -1
  97. package/.next/standalone/.next/server/chunks/ssr/messages_de_settings_json_[json]_cjs_0ksu4_w._.js +1 -1
  98. package/.next/standalone/.next/server/chunks/ssr/messages_de_sidebar_json_[json]_cjs_0loc-1-._.js +1 -1
  99. package/.next/standalone/.next/server/chunks/ssr/messages_de_webBrowser_json_[json]_cjs_0wfz-ul._.js +1 -1
  100. package/.next/standalone/.next/server/chunks/ssr/messages_de_workspace_json_[json]_cjs_0g7nkdq._.js +1 -1
  101. package/.next/standalone/.next/server/chunks/ssr/messages_en_diff_json_[json]_cjs_0z34_dc._.js +1 -1
  102. package/.next/standalone/.next/server/chunks/ssr/messages_en_settings_json_[json]_cjs_0qwl-zt._.js +1 -1
  103. package/.next/standalone/.next/server/chunks/ssr/messages_en_sidebar_json_[json]_cjs_0un0e3f._.js +1 -1
  104. package/.next/standalone/.next/server/chunks/ssr/messages_en_webBrowser_json_[json]_cjs_0oirdko._.js +1 -1
  105. package/.next/standalone/.next/server/chunks/ssr/messages_en_workspace_json_[json]_cjs_0m9rzyy._.js +1 -1
  106. package/.next/standalone/.next/server/chunks/ssr/messages_es_diff_json_[json]_cjs_0kheix4._.js +1 -1
  107. package/.next/standalone/.next/server/chunks/ssr/messages_es_settings_json_[json]_cjs_0ce_kv6._.js +1 -1
  108. package/.next/standalone/.next/server/chunks/ssr/messages_es_sidebar_json_[json]_cjs_080u46~._.js +1 -1
  109. package/.next/standalone/.next/server/chunks/ssr/messages_es_webBrowser_json_[json]_cjs_0w_no_c._.js +1 -1
  110. package/.next/standalone/.next/server/chunks/ssr/messages_es_workspace_json_[json]_cjs_0xf0_50._.js +1 -1
  111. package/.next/standalone/.next/server/chunks/ssr/messages_fr_diff_json_[json]_cjs_11vxoy5._.js +1 -1
  112. package/.next/standalone/.next/server/chunks/ssr/messages_fr_settings_json_[json]_cjs_0h_6lba._.js +1 -1
  113. package/.next/standalone/.next/server/chunks/ssr/messages_fr_sidebar_json_[json]_cjs_05y8v8h._.js +1 -1
  114. package/.next/standalone/.next/server/chunks/ssr/messages_fr_webBrowser_json_[json]_cjs_00tbjsf._.js +1 -1
  115. package/.next/standalone/.next/server/chunks/ssr/messages_fr_workspace_json_[json]_cjs_0h88f-g._.js +1 -1
  116. package/.next/standalone/.next/server/chunks/ssr/messages_ja_diff_json_[json]_cjs_0t~9dro._.js +1 -1
  117. package/.next/standalone/.next/server/chunks/ssr/messages_ja_settings_json_[json]_cjs_0pg~fls._.js +1 -1
  118. package/.next/standalone/.next/server/chunks/ssr/messages_ja_sidebar_json_[json]_cjs_0i0x8w9._.js +1 -1
  119. package/.next/standalone/.next/server/chunks/ssr/messages_ja_webBrowser_json_[json]_cjs_0tp7~.s._.js +1 -1
  120. package/.next/standalone/.next/server/chunks/ssr/messages_ja_workspace_json_[json]_cjs_03dlzmi._.js +1 -1
  121. package/.next/standalone/.next/server/chunks/ssr/messages_ko_diff_json_[json]_cjs_0cw7xj1._.js +1 -1
  122. package/.next/standalone/.next/server/chunks/ssr/messages_ko_settings_json_[json]_cjs_07xpfc8._.js +1 -1
  123. package/.next/standalone/.next/server/chunks/ssr/messages_ko_sidebar_json_[json]_cjs_0mql5dv._.js +1 -1
  124. package/.next/standalone/.next/server/chunks/ssr/messages_ko_webBrowser_json_[json]_cjs_0ibtysu._.js +1 -1
  125. package/.next/standalone/.next/server/chunks/ssr/messages_ko_workspace_json_[json]_cjs_0frxg.r._.js +1 -1
  126. package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_diff_json_[json]_cjs_0vc-p7n._.js +1 -1
  127. package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_settings_json_[json]_cjs_0frspzp._.js +1 -1
  128. package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_sidebar_json_[json]_cjs_07h4b1q._.js +1 -1
  129. package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_webBrowser_json_[json]_cjs_0eu9fbw._.js +1 -1
  130. package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_workspace_json_[json]_cjs_0lahru2._.js +1 -1
  131. package/.next/standalone/.next/server/chunks/ssr/messages_ru_diff_json_[json]_cjs_07na~n8._.js +1 -1
  132. package/.next/standalone/.next/server/chunks/ssr/messages_ru_settings_json_[json]_cjs_08ex00.._.js +1 -1
  133. package/.next/standalone/.next/server/chunks/ssr/messages_ru_sidebar_json_[json]_cjs_0aksrjo._.js +1 -1
  134. package/.next/standalone/.next/server/chunks/ssr/messages_ru_webBrowser_json_[json]_cjs_113-x8n._.js +1 -1
  135. package/.next/standalone/.next/server/chunks/ssr/messages_ru_workspace_json_[json]_cjs_0wm5nhc._.js +1 -1
  136. package/.next/standalone/.next/server/chunks/ssr/messages_tr_diff_json_[json]_cjs_0a00gr_._.js +1 -1
  137. package/.next/standalone/.next/server/chunks/ssr/messages_tr_settings_json_[json]_cjs_0piu0da._.js +1 -1
  138. package/.next/standalone/.next/server/chunks/ssr/messages_tr_sidebar_json_[json]_cjs_0yj47nu._.js +1 -1
  139. package/.next/standalone/.next/server/chunks/ssr/messages_tr_webBrowser_json_[json]_cjs_12ziott._.js +1 -1
  140. package/.next/standalone/.next/server/chunks/ssr/messages_tr_workspace_json_[json]_cjs_0wygfyf._.js +1 -1
  141. package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_diff_json_[json]_cjs_0b01x_1._.js +1 -1
  142. package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_settings_json_[json]_cjs_0uazwgy._.js +1 -1
  143. package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_sidebar_json_[json]_cjs_0yzmolg._.js +1 -1
  144. package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_webBrowser_json_[json]_cjs_0e5lp-q._.js +1 -1
  145. package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_workspace_json_[json]_cjs_0h3v0-e._.js +1 -1
  146. package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_diff_json_[json]_cjs_088r89k._.js +1 -1
  147. package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_settings_json_[json]_cjs_09u0c5l._.js +1 -1
  148. package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_sidebar_json_[json]_cjs_0pnu~0h._.js +1 -1
  149. package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_webBrowser_json_[json]_cjs_0u_cpuv._.js +1 -1
  150. package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_workspace_json_[json]_cjs_0ymw5wz._.js +1 -1
  151. package/.next/standalone/.next/server/chunks/ssr/node_modules_02oar3h._.js +3 -0
  152. package/.next/standalone/.next/server/chunks/ssr/node_modules_0_2gaq0._.js +1 -1
  153. package/.next/standalone/.next/server/chunks/ssr/node_modules_0bbmd88._.js +3 -0
  154. package/.next/standalone/.next/server/chunks/ssr/node_modules_0ydhwnx._.js +1 -1
  155. package/.next/standalone/.next/server/chunks/ssr/node_modules_1294wzs._.js +1 -1
  156. package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_030gj7p._.js +3 -0
  157. package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_04tdvwp._.js +3 -0
  158. package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_0bdox2f._.js +3 -0
  159. package/.next/standalone/.next/server/chunks/ssr/{src_components_0rs9yzr._.js → src_components_0_aiven._.js} +1 -1
  160. package/.next/standalone/.next/server/chunks/ssr/{src_components_0cflin8._.js → src_components_0geizrr._.js} +1 -1
  161. package/.next/standalone/.next/server/chunks/ssr/{src_components_0g.s~e7._.js → src_components_11_1i~k._.js} +1 -1
  162. package/.next/standalone/.next/server/chunks/ssr/{src_components_0jrj_vu._.js → src_components_12mrirb._.js} +1 -1
  163. package/.next/standalone/.next/server/chunks/ssr/src_components_features_mobile_mobile-terminal-page_tsx_02chzch._.js +1 -1
  164. package/.next/standalone/.next/server/chunks/ssr/src_components_features_workspace_terminal-page_tsx_0wuq-jl._.js +1 -1
  165. package/.next/standalone/.next/server/chunks/ssr/src_components_ui_input_tsx_0pgha5u._.js +3 -0
  166. package/.next/standalone/.next/server/chunks/ssr/src_hooks_use-browser-title_ts_0bw6.cb._.js +1 -1
  167. package/.next/standalone/.next/server/chunks/ssr/src_hooks_use-workspace-store_ts_0h40e5c._.js +1 -1
  168. package/.next/standalone/.next/server/chunks/ssr/src_lib_workspace-store_ts_00x-rec._.js +1 -1
  169. package/.next/standalone/.next/server/middleware-build-manifest.js +99 -94
  170. package/.next/standalone/.next/server/pages/_app/build-manifest.json +7 -6
  171. package/.next/standalone/.next/server/pages/_app/client-build-manifest.json +1 -1
  172. package/.next/standalone/.next/server/pages/_app.js +4 -4
  173. package/.next/standalone/.next/server/pages/_app.js.nft.json +1 -1
  174. package/.next/standalone/.next/server/pages/_document.js +3 -3
  175. package/.next/standalone/.next/server/pages/_document.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/pages/_error.js +4 -4
  177. package/.next/standalone/.next/server/pages/_error.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/pages/api/auth/preflight.js +1 -1
  179. package/.next/standalone/.next/server/pages/api/auth/preflight.js.nft.json +1 -1
  180. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/console/pages-manifest.json +3 -0
  181. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/console.js +8 -0
  182. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/console.js.map +5 -0
  183. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/console.js.nft.json +1 -0
  184. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/eval/pages-manifest.json +3 -0
  185. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/eval.js +8 -0
  186. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/eval.js.map +5 -0
  187. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/eval.js.nft.json +1 -0
  188. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/network/pages-manifest.json +3 -0
  189. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/network.js +8 -0
  190. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/network.js.map +5 -0
  191. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/network.js.nft.json +1 -0
  192. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/screenshot/pages-manifest.json +3 -0
  193. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/screenshot.js +8 -0
  194. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/screenshot.js.map +5 -0
  195. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/screenshot.js.nft.json +1 -0
  196. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/url/pages-manifest.json +3 -0
  197. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/url.js +8 -0
  198. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/url.js.map +5 -0
  199. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/url.js.nft.json +1 -0
  200. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/result.js +3 -3
  201. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/result.js.nft.json +1 -1
  202. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/send.js +3 -3
  203. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/send.js.nft.json +1 -1
  204. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/status.js +3 -3
  205. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/status.js.nft.json +1 -1
  206. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId].js +3 -3
  207. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId].js.nft.json +1 -1
  208. package/.next/standalone/.next/server/pages/api/cli/tabs.js +3 -3
  209. package/.next/standalone/.next/server/pages/api/cli/tabs.js.nft.json +1 -1
  210. package/.next/standalone/.next/server/pages/api/cli/workspaces.js +1 -1
  211. package/.next/standalone/.next/server/pages/api/cli/workspaces.js.nft.json +1 -1
  212. package/.next/standalone/.next/server/pages/api/git/sync/pages-manifest.json +3 -0
  213. package/.next/standalone/.next/server/pages/api/git/sync.js +5 -0
  214. package/.next/standalone/.next/server/pages/api/git/sync.js.map +5 -0
  215. package/.next/standalone/.next/server/pages/api/git/sync.js.nft.json +1 -0
  216. package/.next/standalone/.next/server/pages/api/layout/commit-diff/pages-manifest.json +3 -0
  217. package/.next/standalone/.next/server/pages/api/layout/commit-diff.js +5 -0
  218. package/.next/standalone/.next/server/pages/api/layout/commit-diff.js.map +5 -0
  219. package/.next/standalone/.next/server/pages/api/layout/commit-diff.js.nft.json +1 -0
  220. package/.next/standalone/.next/server/pages/api/layout/file-content/pages-manifest.json +3 -0
  221. package/.next/standalone/.next/server/pages/api/layout/file-content.js +5 -0
  222. package/.next/standalone/.next/server/pages/api/layout/file-content.js.map +5 -0
  223. package/.next/standalone/.next/server/pages/api/layout/file-content.js.nft.json +1 -0
  224. package/.next/standalone/.next/server/pages/api/layout/git-log/pages-manifest.json +3 -0
  225. package/.next/standalone/.next/server/pages/api/layout/git-log.js +5 -0
  226. package/.next/standalone/.next/server/pages/api/layout/git-log.js.map +5 -0
  227. package/.next/standalone/.next/server/pages/api/layout/git-log.js.nft.json +1 -0
  228. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId]/move.js +2 -2
  229. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId]/move.js.nft.json +1 -1
  230. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId].js +3 -3
  231. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId].js.nft.json +1 -1
  232. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/order.js +2 -2
  233. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/order.js.nft.json +1 -1
  234. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs.js +3 -3
  235. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs.js.nft.json +1 -1
  236. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId].js +2 -2
  237. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId].js.nft.json +1 -1
  238. package/.next/standalone/.next/server/pages/api/layout/pane.js +2 -2
  239. package/.next/standalone/.next/server/pages/api/layout/pane.js.nft.json +1 -1
  240. package/.next/standalone/.next/server/pages/api/layout.js +2 -2
  241. package/.next/standalone/.next/server/pages/api/layout.js.nft.json +1 -1
  242. package/.next/standalone/.next/server/pages/api/message-history.js +1 -1
  243. package/.next/standalone/.next/server/pages/api/message-history.js.nft.json +1 -1
  244. package/.next/standalone/.next/server/pages/api/push/vapid-key.js +1 -1
  245. package/.next/standalone/.next/server/pages/api/push/vapid-key.js.nft.json +1 -1
  246. package/.next/standalone/.next/server/pages/api/stats/daily-report/cache.js +1 -1
  247. package/.next/standalone/.next/server/pages/api/stats/daily-report/cache.js.nft.json +1 -1
  248. package/.next/standalone/.next/server/pages/api/stats/daily-report/generate.js +1 -1
  249. package/.next/standalone/.next/server/pages/api/stats/daily-report/generate.js.nft.json +1 -1
  250. package/.next/standalone/.next/server/pages/api/stats/daily-report/list.js +2 -2
  251. package/.next/standalone/.next/server/pages/api/stats/daily-report/list.js.nft.json +1 -1
  252. package/.next/standalone/.next/server/pages/api/stats/projects.js +2 -2
  253. package/.next/standalone/.next/server/pages/api/stats/projects.js.nft.json +1 -1
  254. package/.next/standalone/.next/server/pages/api/stats/sessions.js +2 -2
  255. package/.next/standalone/.next/server/pages/api/stats/sessions.js.nft.json +1 -1
  256. package/.next/standalone/.next/server/pages/api/stats/uptime.js +2 -2
  257. package/.next/standalone/.next/server/pages/api/stats/uptime.js.nft.json +1 -1
  258. package/.next/standalone/.next/server/pages/api/status/hook.js +3 -3
  259. package/.next/standalone/.next/server/pages/api/status/hook.js.nft.json +1 -1
  260. package/.next/standalone/.next/server/pages/api/status/statusline.js +5 -5
  261. package/.next/standalone/.next/server/pages/api/status/statusline.js.nft.json +1 -1
  262. package/.next/standalone/.next/server/pages/api/tmux/permission-options.js +1 -1
  263. package/.next/standalone/.next/server/pages/api/tmux/permission-options.js.nft.json +1 -1
  264. package/.next/standalone/.next/server/pages/api/tmux/recover-unknown.js +5 -5
  265. package/.next/standalone/.next/server/pages/api/tmux/recover-unknown.js.nft.json +1 -1
  266. package/.next/standalone/.next/server/pages/api/tmux/reset.js +3 -3
  267. package/.next/standalone/.next/server/pages/api/tmux/reset.js.nft.json +1 -1
  268. package/.next/standalone/.next/server/pages/api/workspace/[workspaceId].js +2 -2
  269. package/.next/standalone/.next/server/pages/api/workspace/[workspaceId].js.nft.json +1 -1
  270. package/.next/standalone/.next/server/pages/api/workspace/active.js +2 -2
  271. package/.next/standalone/.next/server/pages/api/workspace/active.js.nft.json +1 -1
  272. package/.next/standalone/.next/server/pages/api/workspace/group/[groupId]/pages-manifest.json +3 -0
  273. package/.next/standalone/.next/server/pages/api/workspace/group/[groupId].js +8 -0
  274. package/.next/standalone/.next/server/pages/api/workspace/group/[groupId].js.map +5 -0
  275. package/.next/standalone/.next/server/pages/api/workspace/group/[groupId].js.nft.json +1 -0
  276. package/.next/standalone/.next/server/pages/api/workspace/group/pages-manifest.json +3 -0
  277. package/.next/standalone/.next/server/pages/api/workspace/group/reorder/pages-manifest.json +3 -0
  278. package/.next/standalone/.next/server/pages/api/workspace/group/reorder.js +8 -0
  279. package/.next/standalone/.next/server/pages/api/workspace/group/reorder.js.map +5 -0
  280. package/.next/standalone/.next/server/pages/api/workspace/group/reorder.js.nft.json +1 -0
  281. package/.next/standalone/.next/server/pages/api/workspace/group.js +8 -0
  282. package/.next/standalone/.next/server/pages/api/workspace/group.js.map +5 -0
  283. package/.next/standalone/.next/server/pages/api/workspace/group.js.nft.json +1 -0
  284. package/.next/standalone/.next/server/pages/api/workspace/reorder.js +2 -2
  285. package/.next/standalone/.next/server/pages/api/workspace/reorder.js.nft.json +1 -1
  286. package/.next/standalone/.next/server/pages/api/workspace/validate.js +2 -2
  287. package/.next/standalone/.next/server/pages/api/workspace/validate.js.nft.json +1 -1
  288. package/.next/standalone/.next/server/pages/api/workspace.js +4 -4
  289. package/.next/standalone/.next/server/pages/api/workspace.js.nft.json +1 -1
  290. package/.next/standalone/.next/server/pages/de/404.html +1 -1
  291. package/.next/standalone/.next/server/pages/de/500.html +1 -1
  292. package/.next/standalone/.next/server/pages/en/404.html +1 -1
  293. package/.next/standalone/.next/server/pages/en/500.html +1 -1
  294. package/.next/standalone/.next/server/pages/es/404.html +1 -1
  295. package/.next/standalone/.next/server/pages/es/500.html +1 -1
  296. package/.next/standalone/.next/server/pages/fr/404.html +1 -1
  297. package/.next/standalone/.next/server/pages/fr/500.html +1 -1
  298. package/.next/standalone/.next/server/pages/index/build-manifest.json +17 -16
  299. package/.next/standalone/.next/server/pages/index/client-build-manifest.json +1 -1
  300. package/.next/standalone/.next/server/pages/index/react-loadable-manifest.json +7 -7
  301. package/.next/standalone/.next/server/pages/index.js +20 -19
  302. package/.next/standalone/.next/server/pages/index.js.nft.json +1 -1
  303. package/.next/standalone/.next/server/pages/ja/404.html +1 -1
  304. package/.next/standalone/.next/server/pages/ja/500.html +1 -1
  305. package/.next/standalone/.next/server/pages/ko/404.html +1 -1
  306. package/.next/standalone/.next/server/pages/ko/500.html +1 -1
  307. package/.next/standalone/.next/server/pages/login/build-manifest.json +11 -11
  308. package/.next/standalone/.next/server/pages/login/client-build-manifest.json +1 -1
  309. package/.next/standalone/.next/server/pages/login.js +12 -11
  310. package/.next/standalone/.next/server/pages/login.js.nft.json +1 -1
  311. package/.next/standalone/.next/server/pages/pt-BR/404.html +1 -1
  312. package/.next/standalone/.next/server/pages/pt-BR/500.html +1 -1
  313. package/.next/standalone/.next/server/pages/reports/build-manifest.json +19 -18
  314. package/.next/standalone/.next/server/pages/reports/client-build-manifest.json +1 -1
  315. package/.next/standalone/.next/server/pages/reports/react-loadable-manifest.json +1 -1
  316. package/.next/standalone/.next/server/pages/reports.js +18 -17
  317. package/.next/standalone/.next/server/pages/reports.js.nft.json +1 -1
  318. package/.next/standalone/.next/server/pages/reset.js +5 -5
  319. package/.next/standalone/.next/server/pages/reset.js.nft.json +1 -1
  320. package/.next/standalone/.next/server/pages/ru/404.html +1 -1
  321. package/.next/standalone/.next/server/pages/ru/500.html +1 -1
  322. package/.next/standalone/.next/server/pages/stats/build-manifest.json +17 -16
  323. package/.next/standalone/.next/server/pages/stats/client-build-manifest.json +1 -1
  324. package/.next/standalone/.next/server/pages/stats/react-loadable-manifest.json +1 -1
  325. package/.next/standalone/.next/server/pages/stats.js +19 -18
  326. package/.next/standalone/.next/server/pages/stats.js.nft.json +1 -1
  327. package/.next/standalone/.next/server/pages/tools-required/build-manifest.json +7 -7
  328. package/.next/standalone/.next/server/pages/tools-required/client-build-manifest.json +1 -1
  329. package/.next/standalone/.next/server/pages/tools-required.js +8 -7
  330. package/.next/standalone/.next/server/pages/tools-required.js.nft.json +1 -1
  331. package/.next/standalone/.next/server/pages/tr/404.html +1 -1
  332. package/.next/standalone/.next/server/pages/tr/500.html +1 -1
  333. package/.next/standalone/.next/server/pages/webview/build-manifest.json +18 -17
  334. package/.next/standalone/.next/server/pages/webview/client-build-manifest.json +1 -1
  335. package/.next/standalone/.next/server/pages/webview/react-loadable-manifest.json +1 -1
  336. package/.next/standalone/.next/server/pages/webview.js +19 -18
  337. package/.next/standalone/.next/server/pages/webview.js.nft.json +1 -1
  338. package/.next/standalone/.next/server/pages/zh-CN/404.html +1 -1
  339. package/.next/standalone/.next/server/pages/zh-CN/500.html +1 -1
  340. package/.next/standalone/.next/server/pages/zh-TW/404.html +1 -1
  341. package/.next/standalone/.next/server/pages/zh-TW/500.html +1 -1
  342. package/.next/standalone/.next/server/pages-manifest.json +12 -0
  343. package/.next/standalone/.next/static/{5mb_D_gy6E3wsT_BhuXDS → CjJlqsAWYyyu76AJtHaqt}/_buildManifest.js +18 -6
  344. package/.next/standalone/.next/static/chunks/{0w1ldes9u.mhe.js → 0-8v00lvs9_s0.js} +1 -1
  345. package/.next/standalone/.next/static/chunks/{0oy5nvsojxb2i.js → 0-rskn1p_p.qb.js} +1 -1
  346. package/.next/standalone/.next/static/chunks/{0h7n~i8gk~-a2.js → 0.4j~sc70rsrv.js} +1 -1
  347. package/.next/standalone/.next/static/chunks/0._2l5v1hwkfn.js +24 -0
  348. package/.next/standalone/.next/static/chunks/{0g0xm7shj062y.js → 001_h.~thz3j3.js} +1 -1
  349. package/.next/standalone/.next/static/chunks/00ljvc.i_9p~6.js +1 -0
  350. package/.next/standalone/.next/static/chunks/00s78xqkxglkv.js +1 -0
  351. package/.next/standalone/.next/static/chunks/01raz3nv-e~~d.js +1 -0
  352. package/.next/standalone/.next/static/chunks/024gkwka6p59k.js +1 -0
  353. package/.next/standalone/.next/static/chunks/02ncyh-v8g~cs.css +1 -0
  354. package/.next/standalone/.next/static/chunks/{0312riii_sl_1.js → 02o84r01jsc.z.js} +1 -1
  355. package/.next/standalone/.next/static/chunks/{0.ecwkadp7-hq.js → 034_utxy1sujb.js} +1 -1
  356. package/.next/standalone/.next/static/chunks/038h8wl_~fi3u.js +1 -0
  357. package/.next/standalone/.next/static/chunks/038s7u_er9zkt.js +1 -0
  358. package/.next/standalone/.next/static/chunks/039-4cgt.dvjg.js +1 -0
  359. package/.next/standalone/.next/static/chunks/03ljx9csfmrpn.js +1 -0
  360. package/.next/standalone/.next/static/chunks/03sj62c3p8g11.js +1 -0
  361. package/.next/standalone/.next/static/chunks/03t01d94eyxh2.js +1 -0
  362. package/.next/standalone/.next/static/chunks/{17l496oycdhjx.js → 03vck__37a5cl.js} +1 -1
  363. package/.next/standalone/.next/static/chunks/04hn532e1vcts.js +1 -0
  364. package/.next/standalone/.next/static/chunks/{0w_03xk_xkc5a.js → 05kyduw8swd_h.js} +1 -1
  365. package/.next/standalone/.next/static/chunks/05o56eq7.f3q2.js +1 -0
  366. package/.next/standalone/.next/static/chunks/06vobum5720oa.js +1 -0
  367. package/.next/standalone/.next/static/chunks/071hdd91oy~.7.js +1 -0
  368. package/.next/standalone/.next/static/chunks/07yop4v9xcwb9.js +1 -0
  369. package/.next/standalone/.next/static/chunks/08.6.1cg_x8r-.js +16 -0
  370. package/.next/standalone/.next/static/chunks/08d4u-qlylmde.js +1 -0
  371. package/.next/standalone/.next/static/chunks/08e5.t4gotxaw.js +1 -0
  372. package/.next/standalone/.next/static/chunks/08ojbbzi2ergt.js +16 -0
  373. package/.next/standalone/.next/static/chunks/{0v6__.cfcitpl.js → 08qhrobub25u0.js} +1 -1
  374. package/.next/standalone/.next/static/chunks/08ttt2~ok56v6.js +1 -0
  375. package/.next/standalone/.next/static/chunks/{11wdicoufd516.js → 094_-.5.ue3p4.js} +1 -1
  376. package/.next/standalone/.next/static/chunks/09lb6md956bhb.js +16 -0
  377. package/.next/standalone/.next/static/chunks/09qd4fo1rz3it.js +1 -0
  378. package/.next/standalone/.next/static/chunks/{0d5b6a8r1tk95.js → 09s7ub8rgh~u-.js} +1 -1
  379. package/.next/standalone/.next/static/chunks/09sf~1tyznv2b.js +1 -0
  380. package/.next/standalone/.next/static/chunks/09x4be2pfe6z0.js +1 -0
  381. package/.next/standalone/.next/static/chunks/{02su2lz3i24nj.js → 09zxrli-btome.js} +1 -1
  382. package/.next/standalone/.next/static/chunks/0_7~rgbkmfo_p.js +1 -0
  383. package/.next/standalone/.next/static/chunks/0a7eicps6hbl6.js +1 -0
  384. package/.next/standalone/.next/static/chunks/{13u3mwvwu3kc..js → 0apqp49tgoz~z.js} +1 -1
  385. package/.next/standalone/.next/static/chunks/{02mfn213kze9c.js → 0b.a4_8picceu.js} +7 -7
  386. package/.next/standalone/.next/static/chunks/0batq-3sj.qi1.js +25 -0
  387. package/.next/standalone/.next/static/chunks/{0_67ozmvnvz16.js → 0bx27stclo8g5.js} +1 -1
  388. package/.next/standalone/.next/static/chunks/{0i2uqmry6cyl_.js → 0c2_tqkbyti3h.js} +1 -1
  389. package/.next/standalone/.next/static/chunks/0cmg_jvd.7c43.js +1 -0
  390. package/.next/standalone/.next/static/chunks/0ddh4qmi2awdq.js +1 -0
  391. package/.next/standalone/.next/static/chunks/0di4o-khzv2gt.js +1 -0
  392. package/.next/standalone/.next/static/chunks/0dwxj97xm70gv.js +1 -0
  393. package/.next/standalone/.next/static/chunks/0e20ujygcf3hc.js +1 -0
  394. package/.next/standalone/.next/static/chunks/0e5t3kx~_brfk.js +1 -0
  395. package/.next/standalone/.next/static/chunks/0evu-825nnqef.js +1 -0
  396. package/.next/standalone/.next/static/chunks/0f.5lthmbt~yc.js +1 -0
  397. package/.next/standalone/.next/static/chunks/{0fotmrplo6yc7.js → 0f_7vuqno92ye.js} +1 -1
  398. package/.next/standalone/.next/static/chunks/0g-71jn3elu8f.js +1 -0
  399. package/.next/standalone/.next/static/chunks/0gr4lznv-6qml.js +1 -0
  400. package/.next/standalone/.next/static/chunks/0hl3ccityypgx.js +1 -0
  401. package/.next/standalone/.next/static/chunks/0hv4~cszgs3im.js +1 -0
  402. package/.next/standalone/.next/static/chunks/0hzis~e79cnwi.js +1 -0
  403. package/.next/standalone/.next/static/chunks/0jkvb4hgqlgxk.js +1 -0
  404. package/.next/standalone/.next/static/chunks/0k2_zze3o98ow.js +1 -0
  405. package/.next/standalone/.next/static/chunks/0kqxfunh4731g.js +1 -0
  406. package/.next/standalone/.next/static/chunks/{0fn24h74ta78c.js → 0k~crb4s4z7gy.js} +1 -1
  407. package/.next/standalone/.next/static/chunks/0lrjdru2bjp.x.js +1 -0
  408. package/.next/standalone/.next/static/chunks/0mvvym~9uf429.js +1 -0
  409. package/.next/standalone/.next/static/chunks/0mwkajcworx_-.js +1 -0
  410. package/.next/standalone/.next/static/chunks/0nqofghl.17w_.js +1 -0
  411. package/.next/standalone/.next/static/chunks/0o1lsz827g-q_.js +1 -0
  412. package/.next/standalone/.next/static/chunks/{0pb15t~lqcp4y.js → 0oh5xnzizgxt1.js} +1 -1
  413. package/.next/standalone/.next/static/chunks/0po8l-8pns0vb.js +1 -0
  414. package/.next/standalone/.next/static/chunks/{0qr~rkd5sq-yp.js → 0p~_~afvrxx99.js} +7 -6
  415. package/.next/standalone/.next/static/chunks/0q9nn4yuva4jl.js +1 -0
  416. package/.next/standalone/.next/static/chunks/0q9y8zysz~put.js +24 -0
  417. package/.next/standalone/.next/static/chunks/{0_htal_j04mkg.js → 0r3lm4_qr3y.a.js} +1 -1
  418. package/.next/standalone/.next/static/chunks/0r69~xx12-zsq.js +1 -0
  419. package/.next/standalone/.next/static/chunks/0reai1zdu.khx.js +1 -0
  420. package/.next/standalone/.next/static/chunks/0s7sv9xe3e1c9.js +1 -0
  421. package/.next/standalone/.next/static/chunks/0szl_dovu0hgw.js +1 -0
  422. package/.next/standalone/.next/static/chunks/{0axhnd2vw3m5e.js → 0t-o-jwf0~-b5.js} +1 -1
  423. package/.next/standalone/.next/static/chunks/{0ml5~2ty-rbv_.js → 0t5w4x7owhfbe.js} +1 -1
  424. package/.next/standalone/.next/static/chunks/0thg_6bh34-xa.js +1 -0
  425. package/.next/standalone/.next/static/chunks/0uhkmh73bi.8w.js +1 -0
  426. package/.next/standalone/.next/static/chunks/0v6zafwjb5kk6.js +1 -0
  427. package/.next/standalone/.next/static/chunks/0vvqh.pfm9jum.js +1 -0
  428. package/.next/standalone/.next/static/chunks/{128d.rbx4e4rt.js → 0w0qmu364g~xt.js} +1 -1
  429. package/.next/standalone/.next/static/chunks/0w6_q_4rzxy6l.js +1 -0
  430. package/.next/standalone/.next/static/chunks/0wjrfyntnywn5.js +1 -0
  431. package/.next/standalone/.next/static/chunks/0xa1.t1vj1mw0.js +1 -0
  432. package/.next/standalone/.next/static/chunks/0xvbx6ob2wnco.js +1 -0
  433. package/.next/standalone/.next/static/chunks/0y441gn709g7u.js +1 -0
  434. package/.next/standalone/.next/static/chunks/0yd3l8p2m9-c_.js +1 -0
  435. package/.next/standalone/.next/static/chunks/{0uzs3jw4-93ly.js → 0zih6-g65txpb.js} +1 -1
  436. package/.next/standalone/.next/static/chunks/0zmym5gg0bnkg.js +1 -0
  437. package/.next/standalone/.next/static/chunks/105sb_yg7fcpu.js +1 -0
  438. package/.next/standalone/.next/static/chunks/109f1pvy3e_vd.js +1 -0
  439. package/.next/standalone/.next/static/chunks/10em078j6cul4.js +1 -0
  440. package/.next/standalone/.next/static/chunks/{0a9t5laucshuf.js → 10todxw2604hk.js} +1 -1
  441. package/.next/standalone/.next/static/chunks/{0a0wcelktujjt.js → 119t_hwpxj_ko.js} +1 -1
  442. package/.next/standalone/.next/static/chunks/13i76gpwz2k5a.js +1 -0
  443. package/.next/standalone/.next/static/chunks/13j5zp717ie6d.js +24 -0
  444. package/.next/standalone/.next/static/chunks/13~.y-z7wud.h.js +1 -0
  445. package/.next/standalone/.next/static/chunks/140j4evqxtxmn.js +1 -0
  446. package/.next/standalone/.next/static/chunks/142km8a40ar5o.js +1 -0
  447. package/.next/standalone/.next/static/chunks/149sb_-h03mxq.js +1 -0
  448. package/.next/standalone/.next/static/chunks/{017n78o_7xb4_.js → 15hd85wggjanq.js} +1 -1
  449. package/.next/standalone/.next/static/chunks/15sblmrroyskk.js +1 -0
  450. package/.next/standalone/.next/static/chunks/16.twr9cx.kle.js +1 -0
  451. package/.next/standalone/.next/static/chunks/169ui~u~dpalg.js +1 -0
  452. package/.next/standalone/.next/static/chunks/171_ek.xwzobw.js +1 -0
  453. package/.next/standalone/.next/static/chunks/179zldqdb4pm2.js +1 -0
  454. package/.next/standalone/.next/static/chunks/{turbopack-0hwi_g-tegs_u.js → turbopack-0-ooli-pimh-6.js} +1 -1
  455. package/.next/standalone/.next/static/chunks/turbopack-06o7eaf8n1nth.js +1 -0
  456. package/.next/standalone/.next/static/chunks/turbopack-0duv.5cir9jm5.js +1 -0
  457. package/.next/standalone/.next/static/chunks/turbopack-0f2cool0ub~vp.js +1 -0
  458. package/.next/standalone/.next/static/chunks/turbopack-0q6z-bk-atg2w.js +1 -0
  459. package/.next/standalone/.next/static/chunks/{turbopack-066o21-32lo7n.js → turbopack-0sa282u154fdk.js} +1 -1
  460. package/.next/standalone/.next/static/chunks/{turbopack-0np.oib7-.1fp.js → turbopack-0vv2_r1br0hyc.js} +1 -1
  461. package/.next/standalone/messages/de/diff.json +26 -1
  462. package/.next/standalone/messages/de/settings.json +3 -1
  463. package/.next/standalone/messages/de/sidebar.json +10 -1
  464. package/.next/standalone/messages/de/webBrowser.json +5 -1
  465. package/.next/standalone/messages/de/workspace.json +2 -0
  466. package/.next/standalone/messages/en/diff.json +26 -1
  467. package/.next/standalone/messages/en/settings.json +3 -1
  468. package/.next/standalone/messages/en/sidebar.json +10 -1
  469. package/.next/standalone/messages/en/webBrowser.json +5 -1
  470. package/.next/standalone/messages/en/workspace.json +2 -0
  471. package/.next/standalone/messages/es/diff.json +26 -1
  472. package/.next/standalone/messages/es/settings.json +3 -1
  473. package/.next/standalone/messages/es/sidebar.json +10 -1
  474. package/.next/standalone/messages/es/webBrowser.json +5 -1
  475. package/.next/standalone/messages/es/workspace.json +2 -0
  476. package/.next/standalone/messages/fr/diff.json +26 -1
  477. package/.next/standalone/messages/fr/settings.json +3 -1
  478. package/.next/standalone/messages/fr/sidebar.json +10 -1
  479. package/.next/standalone/messages/fr/webBrowser.json +5 -1
  480. package/.next/standalone/messages/fr/workspace.json +2 -0
  481. package/.next/standalone/messages/ja/diff.json +26 -1
  482. package/.next/standalone/messages/ja/settings.json +3 -1
  483. package/.next/standalone/messages/ja/sidebar.json +10 -1
  484. package/.next/standalone/messages/ja/webBrowser.json +5 -1
  485. package/.next/standalone/messages/ja/workspace.json +2 -0
  486. package/.next/standalone/messages/ko/diff.json +26 -1
  487. package/.next/standalone/messages/ko/settings.json +3 -1
  488. package/.next/standalone/messages/ko/sidebar.json +10 -1
  489. package/.next/standalone/messages/ko/webBrowser.json +5 -1
  490. package/.next/standalone/messages/ko/workspace.json +2 -0
  491. package/.next/standalone/messages/pt-BR/diff.json +26 -1
  492. package/.next/standalone/messages/pt-BR/settings.json +3 -1
  493. package/.next/standalone/messages/pt-BR/sidebar.json +10 -1
  494. package/.next/standalone/messages/pt-BR/webBrowser.json +5 -1
  495. package/.next/standalone/messages/pt-BR/workspace.json +2 -0
  496. package/.next/standalone/messages/ru/diff.json +26 -1
  497. package/.next/standalone/messages/ru/settings.json +3 -1
  498. package/.next/standalone/messages/ru/sidebar.json +10 -1
  499. package/.next/standalone/messages/ru/webBrowser.json +5 -1
  500. package/.next/standalone/messages/ru/workspace.json +2 -0
  501. package/.next/standalone/messages/tr/diff.json +26 -1
  502. package/.next/standalone/messages/tr/settings.json +3 -1
  503. package/.next/standalone/messages/tr/sidebar.json +10 -1
  504. package/.next/standalone/messages/tr/webBrowser.json +5 -1
  505. package/.next/standalone/messages/tr/workspace.json +2 -0
  506. package/.next/standalone/messages/zh-CN/diff.json +26 -1
  507. package/.next/standalone/messages/zh-CN/settings.json +3 -1
  508. package/.next/standalone/messages/zh-CN/sidebar.json +10 -1
  509. package/.next/standalone/messages/zh-CN/webBrowser.json +5 -1
  510. package/.next/standalone/messages/zh-CN/workspace.json +2 -0
  511. package/.next/standalone/messages/zh-TW/diff.json +26 -1
  512. package/.next/standalone/messages/zh-TW/settings.json +3 -1
  513. package/.next/standalone/messages/zh-TW/sidebar.json +10 -1
  514. package/.next/standalone/messages/zh-TW/webBrowser.json +5 -1
  515. package/.next/standalone/messages/zh-TW/workspace.json +2 -0
  516. package/.next/standalone/package.json +5 -2
  517. package/.next/standalone/server.js +1 -1
  518. package/.next/standalone/src/pages/api/layout/commit-diff.ts +94 -0
  519. package/.next/standalone/src/pages/api/layout/cwd.ts +38 -0
  520. package/.next/standalone/src/pages/api/layout/diff.ts +196 -0
  521. package/.next/standalone/src/pages/api/layout/file-content.ts +130 -0
  522. package/.next/standalone/src/pages/api/layout/git-log.ts +55 -0
  523. package/.next/standalone/src/pages/api/layout/index.ts +38 -0
  524. package/.next/standalone/src/pages/api/layout/pane/[paneId]/index.ts +38 -0
  525. package/.next/standalone/src/pages/api/layout/pane/[paneId]/tabs/[tabId]/index.ts +94 -0
  526. package/.next/standalone/src/pages/api/layout/pane/[paneId]/tabs/[tabId]/move.ts +31 -0
  527. package/.next/standalone/src/pages/api/layout/pane/[paneId]/tabs/index.ts +66 -0
  528. package/.next/standalone/src/pages/api/layout/pane/[paneId]/tabs/order.ts +30 -0
  529. package/.next/standalone/src/pages/api/layout/pane/index.ts +38 -0
  530. package/README.de.md +4 -3
  531. package/README.es.md +4 -3
  532. package/README.fr.md +4 -3
  533. package/README.ja.md +4 -3
  534. package/README.ko.md +4 -3
  535. package/README.md +4 -3
  536. package/README.pt-BR.md +4 -3
  537. package/README.ru.md +4 -3
  538. package/README.tr.md +4 -3
  539. package/README.zh-CN.md +4 -3
  540. package/README.zh-TW.md +4 -3
  541. package/bin/cli.js +95 -0
  542. package/dist/server.js +63 -8
  543. package/package.json +5 -2
  544. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02.9a5j._.js +0 -3
  545. package/.next/standalone/.next/server/chunks/[root-of-the-server]__045g9-a._.js +0 -3
  546. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ef59mr._.js +0 -3
  547. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0n61.a8._.js +0 -30
  548. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0pv48rv._.js +0 -3
  549. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qda0wx._.js +0 -3
  550. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zjping._.js +0 -3
  551. package/.next/standalone/.next/server/chunks/_04pfden._.js +0 -3
  552. package/.next/standalone/.next/server/chunks/_09vws3v._.js +0 -3
  553. package/.next/standalone/.next/server/chunks/_0e8e4zn._.js +0 -3
  554. package/.next/standalone/.next/server/chunks/_0isokfh._.js +0 -3
  555. package/.next/standalone/.next/server/chunks/_0j2u-od._.js +0 -3
  556. package/.next/standalone/.next/server/chunks/_0t8j4qd._.js +0 -3
  557. package/.next/standalone/.next/server/chunks/_0xd1ivw._.js +0 -3
  558. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0c0bz7t._.js +0 -3
  559. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0nkl4wz._.js +0 -3
  560. package/.next/standalone/.next/server/chunks/ssr/_0-67bvb._.js +0 -3
  561. package/.next/standalone/.next/server/chunks/ssr/_02nf4d7._.js +0 -3
  562. package/.next/standalone/.next/server/chunks/ssr/_05dcjwi._.js +0 -3
  563. package/.next/standalone/.next/server/chunks/ssr/_06yggfn._.js +0 -3
  564. package/.next/standalone/.next/server/chunks/ssr/_0_soefg._.js +0 -3
  565. package/.next/standalone/.next/server/chunks/ssr/_0al4.z9._.js +0 -3
  566. package/.next/standalone/.next/server/chunks/ssr/_0dg4_bi._.js +0 -3
  567. package/.next/standalone/.next/server/chunks/ssr/_0f8k39w._.js +0 -14
  568. package/.next/standalone/.next/server/chunks/ssr/_0gp1meg._.js +0 -3
  569. package/.next/standalone/.next/server/chunks/ssr/_0hqzsa8._.js +0 -3
  570. package/.next/standalone/.next/server/chunks/ssr/_0kno-5w._.js +0 -3
  571. package/.next/standalone/.next/server/chunks/ssr/_0nkeoiw._.js +0 -3
  572. package/.next/standalone/.next/server/chunks/ssr/_0ob2rr-._.js +0 -3
  573. package/.next/standalone/.next/server/chunks/ssr/_0sfctwm._.js +0 -3
  574. package/.next/standalone/.next/server/chunks/ssr/_0sm8slq._.js +0 -3
  575. package/.next/standalone/.next/server/chunks/ssr/_0svke5s._.js +0 -3
  576. package/.next/standalone/.next/server/chunks/ssr/_0ulmx3c._.js +0 -3
  577. package/.next/standalone/.next/server/chunks/ssr/_0wlh.pc._.js +0 -3
  578. package/.next/standalone/.next/server/chunks/ssr/_0y31tie._.js +0 -14
  579. package/.next/standalone/.next/server/chunks/ssr/_0~.theb._.js +0 -3
  580. package/.next/standalone/.next/server/chunks/ssr/_10s2f96._.js +0 -3
  581. package/.next/standalone/.next/server/chunks/ssr/_11rnj4l._.js +0 -3
  582. package/.next/standalone/.next/server/chunks/ssr/_124p60s._.js +0 -3
  583. package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_react_esm_03v8q-a._.js +0 -3
  584. package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_react_esm_0wddb~n._.js +0 -3
  585. package/.next/standalone/.next/static/chunks/0-8-cf3vuob~..js +0 -1
  586. package/.next/standalone/.next/static/chunks/0-97ruc25d2lz.js +0 -1
  587. package/.next/standalone/.next/static/chunks/0-ku865ak6iur.js +0 -1
  588. package/.next/standalone/.next/static/chunks/00g7isu_5s43..js +0 -1
  589. package/.next/standalone/.next/static/chunks/00nx1s6rpu537.js +0 -1
  590. package/.next/standalone/.next/static/chunks/00s-0sui~_24w.js +0 -1
  591. package/.next/standalone/.next/static/chunks/01-fb9rb-21.a.js +0 -1
  592. package/.next/standalone/.next/static/chunks/02dumv8n.ewiw.js +0 -1
  593. package/.next/standalone/.next/static/chunks/02r-a1_lz7fuk.js +0 -1
  594. package/.next/standalone/.next/static/chunks/03eaekq6omt65.js +0 -1
  595. package/.next/standalone/.next/static/chunks/04~p~.qz9diil.js +0 -1
  596. package/.next/standalone/.next/static/chunks/05_e09pgcymkh.js +0 -1
  597. package/.next/standalone/.next/static/chunks/05y90.zbqijkv.js +0 -1
  598. package/.next/standalone/.next/static/chunks/07-xm--o034du.js +0 -1
  599. package/.next/standalone/.next/static/chunks/072ccw0gkueqq.js +0 -1
  600. package/.next/standalone/.next/static/chunks/07i6~xrmgspp8.js +0 -1
  601. package/.next/standalone/.next/static/chunks/07rq~qv9ldwo~.js +0 -1
  602. package/.next/standalone/.next/static/chunks/08vvx8xtxwt5o.js +0 -1
  603. package/.next/standalone/.next/static/chunks/08zfbuugw_i52.js +0 -23
  604. package/.next/standalone/.next/static/chunks/09agwg~-xbxbs.js +0 -1
  605. package/.next/standalone/.next/static/chunks/0a1hi9y0lwv3j.js +0 -1
  606. package/.next/standalone/.next/static/chunks/0af.3khnmptnl.js +0 -1
  607. package/.next/standalone/.next/static/chunks/0afll97o4hu39.js +0 -1
  608. package/.next/standalone/.next/static/chunks/0ajkjqq1xc_.a.js +0 -1
  609. package/.next/standalone/.next/static/chunks/0chjvj73yfmoj.js +0 -1
  610. package/.next/standalone/.next/static/chunks/0d4vi6-ju6lha.js +0 -1
  611. package/.next/standalone/.next/static/chunks/0daflfjkvkh-d.js +0 -1
  612. package/.next/standalone/.next/static/chunks/0dh2cf_c4gz65.js +0 -1
  613. package/.next/standalone/.next/static/chunks/0dp178b-0_ltl.js +0 -1
  614. package/.next/standalone/.next/static/chunks/0dqb3atw-kpb2.js +0 -1
  615. package/.next/standalone/.next/static/chunks/0efkrks2gm27v.js +0 -1
  616. package/.next/standalone/.next/static/chunks/0fuay9akccsr9.js +0 -1
  617. package/.next/standalone/.next/static/chunks/0fwnzw~qq_abm.js +0 -1
  618. package/.next/standalone/.next/static/chunks/0gjtphww9wtey.js +0 -12
  619. package/.next/standalone/.next/static/chunks/0h-7ntqpip4oi.js +0 -1
  620. package/.next/standalone/.next/static/chunks/0idah_uu8ylro.js +0 -1
  621. package/.next/standalone/.next/static/chunks/0iw7xjsfo1v-u.js +0 -16
  622. package/.next/standalone/.next/static/chunks/0jj7ska-q4zmb.js +0 -1
  623. package/.next/standalone/.next/static/chunks/0k50-hp08.xtp.js +0 -1
  624. package/.next/standalone/.next/static/chunks/0n1xl_9xb64~a.js +0 -1
  625. package/.next/standalone/.next/static/chunks/0nh~2y4pr-6b-.js +0 -1
  626. package/.next/standalone/.next/static/chunks/0nyar-7g9rya6.js +0 -1
  627. package/.next/standalone/.next/static/chunks/0o_yi7-4-ckig.js +0 -1
  628. package/.next/standalone/.next/static/chunks/0om8~g_7-c-x5.js +0 -12
  629. package/.next/standalone/.next/static/chunks/0otoymu09sgml.js +0 -1
  630. package/.next/standalone/.next/static/chunks/0oxlivdn8c89b.js +0 -1
  631. package/.next/standalone/.next/static/chunks/0qwvk-uq944-d.js +0 -23
  632. package/.next/standalone/.next/static/chunks/0r7uk81oh650e.js +0 -1
  633. package/.next/standalone/.next/static/chunks/0r_ynb..7ongv.js +0 -23
  634. package/.next/standalone/.next/static/chunks/0ro78lxc~ndn_.js +0 -1
  635. package/.next/standalone/.next/static/chunks/0ryghnq7iy47v.js +0 -24
  636. package/.next/standalone/.next/static/chunks/0se1ra8f1bor~.js +0 -1
  637. package/.next/standalone/.next/static/chunks/0t_38o03_pjwq.js +0 -1
  638. package/.next/standalone/.next/static/chunks/0u9yrtrs1bktp.js +0 -1
  639. package/.next/standalone/.next/static/chunks/0u9~wuf2zbs5z.js +0 -1
  640. package/.next/standalone/.next/static/chunks/0vmc7tq7ze-wk.js +0 -1
  641. package/.next/standalone/.next/static/chunks/0wlz6--vu7adu.js +0 -1
  642. package/.next/standalone/.next/static/chunks/0wp13r5su.j3e.js +0 -1
  643. package/.next/standalone/.next/static/chunks/0wx.aq674yk~q.js +0 -1
  644. package/.next/standalone/.next/static/chunks/0x7cvsf..ezd..js +0 -1
  645. package/.next/standalone/.next/static/chunks/0xas4ca5n6mzi.js +0 -1
  646. package/.next/standalone/.next/static/chunks/0xmalbon9eqvg.js +0 -1
  647. package/.next/standalone/.next/static/chunks/0y1_gk64rkp0g.js +0 -1
  648. package/.next/standalone/.next/static/chunks/0zz.9uk42mbks.js +0 -1
  649. package/.next/standalone/.next/static/chunks/0~lnp45fxxtgz.js +0 -1
  650. package/.next/standalone/.next/static/chunks/0~nlz9.lltzrz.js +0 -1
  651. package/.next/standalone/.next/static/chunks/10bvbbw1062os.js +0 -1
  652. package/.next/standalone/.next/static/chunks/11gch78bg_qsn.js +0 -1
  653. package/.next/standalone/.next/static/chunks/11nk1lwom62oe.js +0 -1
  654. package/.next/standalone/.next/static/chunks/131tx--pi8.tm.js +0 -1
  655. package/.next/standalone/.next/static/chunks/132lgf3mld2ax.js +0 -1
  656. package/.next/standalone/.next/static/chunks/13nitezuv6q6x.js +0 -1
  657. package/.next/standalone/.next/static/chunks/13~7v30_nnqks.js +0 -1
  658. package/.next/standalone/.next/static/chunks/14xlpbx6dj_4i.js +0 -1
  659. package/.next/standalone/.next/static/chunks/16dbi-ty-ptnr.js +0 -1
  660. package/.next/standalone/.next/static/chunks/17jcucuef_33-.js +0 -1
  661. package/.next/standalone/.next/static/chunks/184~yri~m3wao.css +0 -1
  662. package/.next/standalone/.next/static/chunks/186b1th1fl440.js +0 -1
  663. package/.next/standalone/.next/static/chunks/18d9u7jni2vco.js +0 -1
  664. package/.next/standalone/.next/static/chunks/turbopack-0abq2d._xmt7y.js +0 -1
  665. package/.next/standalone/.next/static/chunks/turbopack-0sisjg~-koq5w.js +0 -1
  666. package/.next/standalone/.next/static/chunks/turbopack-11tk4snp~dxd4.js +0 -1
  667. package/.next/standalone/.next/static/chunks/turbopack-17.piokhhz77b.js +0 -1
  668. /package/.next/standalone/.next/static/{5mb_D_gy6E3wsT_BhuXDS → CjJlqsAWYyyu76AJtHaqt}/_clientMiddlewareManifest.js +0 -0
  669. /package/.next/standalone/.next/static/{5mb_D_gy6E3wsT_BhuXDS → CjJlqsAWYyyu76AJtHaqt}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- module.exports=[270406,(e,t,a)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,a)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,a)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,a)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,a)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},224361,(e,t,a)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,a)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,a)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,a=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(a)),e.s(["PRISTINE_ENV",0,a],965898);let r=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=>r.has(e)||i.some(t=>e.startsWith(t)),n={TERM:"xterm-256color",COLORTERM:"truecolor"},l=()=>{let e={};for(let[t,r]of Object.entries(a))void 0!==r&&s(t)&&(e[t]=r);return{...e,...n}},o=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>a.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)},25146,e=>{"use strict";var t=e.i(130146),a=e.i(814747),r=e.i(446786);let i=a.default.join(r.default.homedir(),".purplemux","logs"),s=process.env.LOG_LEVEL||"info",n=(e=>{if(!e)return{};let t={};for(let a of e.split(",")){let[e,r]=a.split("=").map(e=>e.trim());e&&r&&(t[e]=r)}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:a.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}])},44014,e=>{"use strict";let t,a;var r=e.i(666680);e.s(["nanoid",0,function(e=21){var i;i=e|=0,!t||t.length<i?(t=Buffer.allocUnsafe(128*i),r.webcrypto.getRandomValues(t),a=0):a+i>t.length&&(r.webcrypto.getRandomValues(t),a=0),a+=i;let s="";for(let r=a-e;r<a;r++)s+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[r]];return s}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),a=e.i(924868),r=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 c=(0,o.createLogger)("terminal"),p=(0,r.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"),w=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,a,r)=>{let i=(0,l.buildShellLaunchCommand)();await p("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(a),i],{timeout:5e3,cwd:r||n.PRISTINE_ENV.HOME||"/"}),await _(),c.debug(`tmux session created: ${e} (cols: ${t}, rows: ${a})`)},y=e=>new Promise(t=>setTimeout(t,e)),h=async e=>{if(!await g(e))return;c.debug(`killSession start: ${e}`);let t=await L(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 g(e))return void c.debug(`killSession done (SIGTERM): ${e}`);await y(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 g(e))return void c.debug(`killSession done (SIGKILL): ${e}`);await y(200)}c.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await p("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},k=async()=>{},x=async()=>{await k();let e=await w();e.length>0&&e.forEach(e=>{c.debug(`existing tmux session found: ${e}`)})},b=async e=>{if(u)try{return await a.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await p("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),a=t.split("\n").find(e=>e.startsWith("n/"));return a?a.slice(1):null}catch{return null}},S=async e=>{let t=await L(e);if(t){let e=await b(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}},L=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),a=parseInt(t.trim(),10);return Number.isNaN(a)?null:a}catch{return null}},_=async()=>{try{await p("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},I=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}},v=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 a of e.trim().split("\n")){if(!a)continue;let[e,r,i,s,n]=a.split(" ");if(e&&r){let a=parseInt(s,10),l=parseInt(n,10);t.set(e,{command:r,path:i||"",pid:Number.isNaN(a)?0:a,windowActivity:Number.isNaN(l)?0:l})}}return t}catch{return new Map}},N=new Set(["bash","zsh","fish","sh","dash"]),$=async e=>{let t=await I(e);return t?{isSafe:N.has(t),processName:t}:{isSafe:!1,processName:"unknown"}},P=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}},E=async e=>{await p("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},T=async(e,t)=>{await E(e),await p("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},W=async(e,t)=>{await E(e),await p("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},C=async(e,t)=>{await E(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})},A=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}),[a,r,i,s,n,l]=t.trim().split(" ");return{cwd:a||null,command:r||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}}},O=new Set(["node","python","python3","ruby","perl","deno","bun"]),D=async()=>{try{await p("tmux",["-L",d,"kill-server"],{timeout:5e3}),c.debug("tmux server killed")}catch{}},F=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},j=async(e,t)=>{try{let{stdout:a}=await p("tmux",["-L",d,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return a}catch{return null}},M=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let r of(await a.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(r,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[]}},R=async e=>{let t=[],a=[e];for(;a.length>0;){let e=await M(a);if(0===e.length)break;t.push(...e),a=e}return t},q=async e=>{try{let t=new Set(e),{stdout:a}=await p("ss",["-tlnp"],{timeout:5e3}),r=new Set;for(let e of a.split("\n")){let a=e.match(/pid=(\d+)/g);if(!a||!a.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let i=e.match(/:(\d+)\s/);i&&r.add(parseInt(i[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},H=async e=>{let t=await R(e);if(0===t.length)return[];if(u)return q(t);try{let{stdout:e}=await p("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),a=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&a.add(parseInt(e[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},U=async e=>{let t=await L(e);if(!t)return null;try{let{stdout:e}=await p("pgrep",["-n","-P",String(t)],{timeout:5e3}),a=e.trim();if(!a)return null;let{stdout:r}=await p("ps",["-o","args=","-p",a],{timeout:5e3}),s=r.trim();if(!s)return null;let n=s.split(/\s+/);if(0===n.length)return s;if(n[0]=i.default.basename(n[0]),O.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,N,"applyConfig",0,_,"capturePaneContent",0,F,"capturePaneContentWithHistory",0,j,"checkTerminalProcess",0,$,"createSession",0,f,"defaultSessionName",0,()=>`pt-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}`,"exitCopyMode",0,E,"getAllPanesInfo",0,v,"getLastCommand",0,U,"getListeningPorts",0,H,"getPaneCurrentCommand",0,I,"getPaneDetailInfo",0,A,"getPaneTitle",0,P,"getSessionCwd",0,S,"getSessionPanePid",0,L,"hasSession",0,g,"killServer",0,D,"killSession",0,h,"listSessions",0,w,"scanSessions",0,x,"sendBracketedPaste",0,C,"sendKeys",0,T,"sendRawKeys",0,W,"workspaceSessionName",0,(e,t,a)=>`pt-${e}-${t}-${a}`],459015)},688947,(e,t,a)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,a)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,a)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,a)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,a)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,a)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,a)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,a)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,a)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,a)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let a=globalThis;a.__ptSyncClients||(a.__ptSyncClients=new Set);let r=a.__ptSyncClients;e.s(["broadcastSync",0,e=>{let a=JSON.stringify(e);for(let e of r)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(a)}])},322429,160874,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(446786),i=e.i(44014),s=e.i(459015),n=e.i(25146),l=e.i(666126),o=e.i(825265),u=e.i(804767);(0,n.createLogger)("claude-prompt");let c=e=>a.default.join((0,o.resolveLayoutDir)(e),"claude-prompt.md"),p=async e=>{let r=c(e.id);await t.default.mkdir(a.default.dirname(r),{recursive:!0});let i=`# purplemux context
1
+ module.exports=[270406,(e,t,a)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,a)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,a)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,a)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,a)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},224361,(e,t,a)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,a)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,a)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,a=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(a)),e.s(["PRISTINE_ENV",0,a],965898);let r=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=>r.has(e)||i.some(t=>e.startsWith(t)),n={TERM:"xterm-256color",COLORTERM:"truecolor"},o=()=>{let e={};for(let[t,r]of Object.entries(a))void 0!==r&&s(t)&&(e[t]=r);return{...e,...n}},l=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>a.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)},25146,e=>{"use strict";var t=e.i(130146),a=e.i(814747),r=e.i(446786);let i=a.default.join(r.default.homedir(),".purplemux","logs"),s=process.env.LOG_LEVEL||"info",n=(e=>{if(!e)return{};let t={};for(let a of e.split(",")){let[e,r]=a.split("=").map(e=>e.trim());e&&r&&(t[e]=r)}return t})(process.env.LOG_LEVELS),o=["trace","debug","info","warn","error","fatal"],l=globalThis;if(!l.__ptRootLogger){let e=[s,...Object.values(n)].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:a.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=l.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=n[e]??s,t}])},44014,e=>{"use strict";let t,a;var r=e.i(666680);e.s(["nanoid",0,function(e=21){var i;i=e|=0,!t||t.length<i?(t=Buffer.allocUnsafe(128*i),r.webcrypto.getRandomValues(t),a=0):a+i>t.length&&(r.webcrypto.getRandomValues(t),a=0),a+=i;let s="";for(let r=a-e;r<a;r++)s+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[r]];return s}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),a=e.i(924868),r=e.i(224361),i=e.i(814747),s=e.i(44014),n=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 c=(0,l.createLogger)("terminal"),p=(0,r.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"),w=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,a,r)=>{let i=(0,o.buildShellLaunchCommand)();await p("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(a),i],{timeout:5e3,cwd:r||n.PRISTINE_ENV.HOME||"/"}),await I(),c.debug(`tmux session created: ${e} (cols: ${t}, rows: ${a})`)},y=e=>new Promise(t=>setTimeout(t,e)),h=async e=>{if(!await g(e))return;c.debug(`killSession start: ${e}`);let t=await L(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 g(e))return void c.debug(`killSession done (SIGTERM): ${e}`);await y(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 g(e))return void c.debug(`killSession done (SIGKILL): ${e}`);await y(200)}c.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await p("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},k=async()=>{},x=async()=>{await k();let e=await w();e.length>0&&e.forEach(e=>{c.debug(`existing tmux session found: ${e}`)})},b=async e=>{if(u)try{return await a.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await p("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),a=t.split("\n").find(e=>e.startsWith("n/"));return a?a.slice(1):null}catch{return null}},S=async e=>{let t=await L(e);if(t){let e=await b(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}},L=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),a=parseInt(t.trim(),10);return Number.isNaN(a)?null:a}catch{return null}},I=async()=>{try{await p("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},_=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}},v=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 a of e.trim().split("\n")){if(!a)continue;let[e,r,i,s,n]=a.split(" ");if(e&&r){let a=parseInt(s,10),o=parseInt(n,10);t.set(e,{command:r,path:i||"",pid:Number.isNaN(a)?0:a,windowActivity:Number.isNaN(o)?0:o})}}return t}catch{return new Map}},$=new Set(["bash","zsh","fish","sh","dash"]),N=async e=>{let t=await _(e);return t?{isSafe:$.has(t),processName:t}:{isSafe:!1,processName:"unknown"}},P=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}},T=async e=>{await p("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},W=async(e,t)=>{await T(e),await p("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},E=async(e,t)=>{await T(e),await p("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},C=async(e,t)=>{await T(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})},A=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}),[a,r,i,s,n,o]=t.trim().split(" ");return{cwd:a||null,command:r||null,pid:i&&parseInt(i,10)||null,width:s&&parseInt(s,10)||null,height:n&&parseInt(n,10)||null,sessionCreated:o&&parseInt(o,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},O=new Set(["node","python","python3","ruby","perl","deno","bun"]),D=async()=>{try{await p("tmux",["-L",d,"kill-server"],{timeout:5e3}),c.debug("tmux server killed")}catch{}},F=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},M=async(e,t)=>{try{let{stdout:a}=await p("tmux",["-L",d,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return a}catch{return null}},j=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let r of(await a.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(r,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[]}},R=async e=>{let t=[],a=[e];for(;a.length>0;){let e=await j(a);if(0===e.length)break;t.push(...e),a=e}return t},G=async e=>{try{let t=new Set(e),{stdout:a}=await p("ss",["-tlnp"],{timeout:5e3}),r=new Set;for(let e of a.split("\n")){let a=e.match(/pid=(\d+)/g);if(!a||!a.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let i=e.match(/:(\d+)\s/);i&&r.add(parseInt(i[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},q=async e=>{let t=await R(e);if(0===t.length)return[];if(u)return G(t);try{let{stdout:e}=await p("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),a=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&a.add(parseInt(e[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},H=async e=>{let t=await L(e);if(!t)return null;try{let{stdout:e}=await p("pgrep",["-n","-P",String(t)],{timeout:5e3}),a=e.trim();if(!a)return null;let{stdout:r}=await p("ps",["-o","args=","-p",a],{timeout:5e3}),s=r.trim();if(!s)return null;let n=s.split(/\s+/);if(0===n.length)return s;if(n[0]=i.default.basename(n[0]),O.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,$,"applyConfig",0,I,"capturePaneContent",0,F,"capturePaneContentWithHistory",0,M,"checkTerminalProcess",0,N,"createSession",0,f,"defaultSessionName",0,()=>`pt-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}`,"exitCopyMode",0,T,"getAllPanesInfo",0,v,"getLastCommand",0,H,"getListeningPorts",0,q,"getPaneCurrentCommand",0,_,"getPaneDetailInfo",0,A,"getPaneTitle",0,P,"getSessionCwd",0,S,"getSessionPanePid",0,L,"hasSession",0,g,"killServer",0,D,"killSession",0,h,"listSessions",0,w,"scanSessions",0,x,"sendBracketedPaste",0,C,"sendKeys",0,W,"sendRawKeys",0,E,"workspaceSessionName",0,(e,t,a)=>`pt-${e}-${t}-${a}`],459015)},688947,(e,t,a)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,a)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,a)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,a)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,a)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,a)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,a)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,a)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,a)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,a)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let a=globalThis;a.__ptSyncClients||(a.__ptSyncClients=new Set);let r=a.__ptSyncClients;e.s(["broadcastSync",0,e=>{let a=JSON.stringify(e);for(let e of r)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(a)}])},322429,160874,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(446786),i=e.i(44014),s=e.i(459015),n=e.i(25146),o=e.i(666126),l=e.i(825265),u=e.i(804767);(0,n.createLogger)("claude-prompt");let c=e=>a.default.join((0,l.resolveLayoutDir)(e),"claude-prompt.md"),p=async e=>{let r=c(e.id);await t.default.mkdir(a.default.dirname(r),{recursive:!0});let i=`# purplemux context
2
2
 
3
3
  You are running inside a purplemux workspace tab.
4
4
 
@@ -37,6 +37,6 @@ purplemux api-guide
37
37
  (long-running builds, different project context, parallel exploration).
38
38
  - Poll \`status\` and read \`result\` to verify delegated work.
39
39
  - Prefer small, scoped tabs over cramming everything into one session.
40
- `;try{if(await t.default.readFile(r,"utf-8")===i)return r}catch{}return await t.default.writeFile(r,i,"utf-8"),r};e.s(["getClaudePromptPath",0,c,"writeClaudePromptFile",0,p],160874);let d=(0,n.createLogger)("workspace"),m="Workspace ",w=a.default.join(r.default.homedir(),".purplemux"),f=a.default.join(w,"workspaces.json"),y=a.default.join(w,"layout.json"),h=a.default.join(w,"tabs.json"),g=globalThis;g.__purplemuxWorkspaceLock||(g.__purplemuxWorkspaceLock=Promise.resolve());let k=async e=>{let t,a=new Promise(e=>{t=e}),r=g.__purplemuxWorkspaceLock;g.__purplemuxWorkspaceLock=a,await r;try{return await e()}finally{t()}},x=()=>({workspaces:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),b=async()=>{let e;try{e=await t.default.readFile(f,"utf-8")}catch{return null}try{let t=JSON.parse(e);for(let e of t.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory);return t}catch{d.warn("Failed to parse workspaces.json, starting empty");try{await t.default.copyFile(f,f.replace(/\.json$/,".json.bak"))}catch{}return null}},S=async e=>{let{workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s}=e,n=JSON.stringify({workspaces:a,activeWorkspaceId:r,sidebarCollapsed:i,sidebarWidth:s});if(g.__purplemuxWorkspacesContentCache===n)return;e.updatedAt=new Date().toISOString();let o=f+".tmp";try{await t.default.writeFile(o,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(o,f)}catch(e){throw await t.default.unlink(o).catch(()=>{}),e}g.__purplemuxWorkspacesContentCache=n,(0,l.broadcastSync)({type:"workspace"})},L=async()=>{let e=await (0,o.readLayoutFile)(y);if(!e)return null;let a="ws-default";await t.default.mkdir((0,o.resolveLayoutDir)(a),{recursive:!0}),await (0,o.writeLayoutFile)(e,(0,o.resolveLayoutFile)(a));let i={workspaces:[{id:a,name:"default",directories:[r.default.homedir()],order:0}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await S(i),d.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},_=async()=>{try{let e=await t.default.readFile(h,"utf-8"),a=JSON.parse(e);if(!Array.isArray(a.tabs)||0===a.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,s={root:{type:"pane",id:r,tabs:a.tabs,activeTabId:a.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},n=y+".tmp";try{await t.default.writeFile(n,JSON.stringify(s,null,2),{mode:384}),await t.default.rename(n,y)}catch(e){throw await t.default.unlink(n).catch(()=>{}),e}return d.info("tabs.json → layout.json migration complete"),await L()}catch{return null}},I=async()=>{await t.default.mkdir(a.default.join(w,"workspaces"),{recursive:!0});let e=await b();if(!e&&(await t.default.access(y).then(()=>!0).catch(()=>!1)?e=await L():await t.default.access(h).then(()=>!0).catch(()=>!1)&&(e=await _())),!e){let t=x();await S(t),e=t,d.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,s.listSessions)();for(let t of e.workspaces){let e=(0,o.resolveLayoutFile)(t.id),a=await (0,o.readLayoutFile)(e);if(!a){d.warn(`Workspace '${t.name}': layout.json corrupted, reset to default pane`),a=await (0,o.createDefaultLayout)(t.id,t.directories[0]),await (0,o.writeLayoutFile)(a,e);continue}let i=(0,u.collectAllTabs)(a.root).map(e=>e.sessionName),s=`pt-${t.id}-`,n=r.filter(e=>i.includes(e)||e.startsWith(s));try{await (0,o.crossCheckLayout)(a,n,t.id,t.directories[0])&&await (0,o.writeLayoutFile)(a,e)}catch(e){d.error(`Workspace '${t.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},v=async()=>{let e=await b();return e?{workspaces:e.workspaces,activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],sidebarCollapsed:!1,sidebarWidth:220}},N=async()=>{let e=await b();return e?.activeWorkspaceId&&e.workspaces.some(t=>t.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},$=async e=>{let t=await b();return t?.workspaces.find(t=>t.id===e)},P=async(e,a,r)=>k(async()=>{let s;try{s=await t.default.stat(e)}catch{throw Error("Directory does not exist")}if(!s.isDirectory())throw Error("Please enter a directory path, not a file");let n=await b()??x(),l=`ws-${(0,i.nanoid)(6)}`,u=a?.trim()||(e=>{let t=0;for(let a of e)if(a.name.startsWith(m)){let e=parseInt(a.name.slice(m.length),10);e>t&&(t=e)}return`${m}${t+1}`})(n.workspaces),c=n.workspaces.length,w=await (0,o.createDefaultLayout)(l,e,r);await t.default.mkdir((0,o.resolveLayoutDir)(l),{recursive:!0}),await (0,o.writeLayoutFile)(w,(0,o.resolveLayoutFile)(l));let f={id:l,name:u,directories:[e],order:c};return n.workspaces.push(f),await S(n),await p(f),d.debug(`Created: ${l} (${u}, ${e})`),f}),E=async e=>k(async()=>{let t=await b()??x(),a=t.workspaces.findIndex(t=>t.id===e);if(-1===a)return!1;let r=t.workspaces[a],i=await (0,o.readLayoutFile)((0,o.resolveLayoutFile)(e));if(i)for(let e of(0,u.collectAllTabs)(i.root))try{await (0,s.killSession)(e.sessionName)}catch{}try{await (0,o.removeLayoutFile)(e)}catch{}return t.workspaces.splice(a,1),t.workspaces.forEach((e,t)=>{e.order=t}),await S(t),d.info(`Deleted: ${e} (${r.name})`),!0}),T=async(e,t)=>k(async()=>{let a=await b();if(!a)return null;let r=a.workspaces.find(t=>t.id===e);return r?(r.name=t,await S(a),await p(r),d.debug(`Renamed: ${e} → "${t}"`),{...r}):null}),W=async e=>k(async()=>{let t=await b()??x();void 0!==e.activeWorkspaceId&&(t.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(t.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(t.sidebarWidth=e.sidebarWidth),await S(t)}),C=async(e,t)=>k(async()=>{let a=await b();if(!a)return;let r=a.workspaces.find(t=>t.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(t)&&(r.directories=t,await S(a),await p(r))}),A=async e=>k(async()=>{let t=await b()??x(),a=new Map(t.workspaces.map(e=>[e.id,e])),r=[];for(let t of e){let e=a.get(t);if(!e)return!1;r.push(e)}return r.length===t.workspaces.length&&(r.forEach((e,t)=>{e.order=t}),t.workspaces=r,await S(t),!0)}),O=async e=>{try{if(!(await t.default.stat(e)).isDirectory())return{valid:!1,error:"Please enter a directory path, not a file"}}catch{return{valid:!1,error:"Directory does not exist"}}return{valid:!0,suggestedName:a.default.basename(e)}};e.s(["createWorkspace",0,P,"deleteWorkspace",0,E,"getActiveWorkspaceId",0,N,"getWorkspaceById",0,$,"getWorkspaces",0,v,"initWorkspaceStore",0,I,"renameWorkspace",0,T,"reorderWorkspaces",0,A,"updateActive",0,W,"updateWorkspaceDirectories",0,C,"validateDirectory",0,O],322429)}];
40
+ `;try{if(await t.default.readFile(r,"utf-8")===i)return r}catch{}return await t.default.writeFile(r,i,"utf-8"),r};e.s(["getClaudePromptPath",0,c,"writeClaudePromptFile",0,p],160874);let d=(0,n.createLogger)("workspace"),m="Workspace ",w=a.default.join(r.default.homedir(),".purplemux"),f=a.default.join(w,"workspaces.json"),y=a.default.join(w,"layout.json"),h=a.default.join(w,"tabs.json"),g=globalThis;g.__purplemuxWorkspaceLock||(g.__purplemuxWorkspaceLock=Promise.resolve());let k=async e=>{let t,a=new Promise(e=>{t=e}),r=g.__purplemuxWorkspaceLock;g.__purplemuxWorkspaceLock=a,await r;try{return await e()}finally{t()}},x=()=>({workspaces:[],groups:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),b=e=>(e.groups||(e.groups=[]),e.groups),S=async()=>{let e;try{e=await t.default.readFile(f,"utf-8")}catch{return null}try{let t=JSON.parse(e);for(let e of t.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory),delete e.order;for(let e of(Array.isArray(t.groups)||(t.groups=[]),t.groups))delete e.order;let a=new Set(t.groups.map(e=>e.id));for(let e of t.workspaces)e.groupId&&!a.has(e.groupId)&&(e.groupId=null);return t}catch{d.warn("Failed to parse workspaces.json, starting empty");try{await t.default.copyFile(f,f.replace(/\.json$/,".json.bak"))}catch{}return null}},L=async e=>{let a;a=b(e),e.workspaces=((e,t)=>{let a=new Set(t.map(e=>e.id)),r=new Map,i=[];for(let t of e){let e=t.groupId??null;if(e&&a.has(e)){let a=r.get(e)??[];a.push(t),r.set(e,a)}else i.push(t)}let s=[];for(let e of t){let t=r.get(e.id);t&&s.push(...t)}return s.push(...i),s})(e.workspaces,a);let{workspaces:r,groups:i,activeWorkspaceId:s,sidebarCollapsed:n,sidebarWidth:l}=e,u=JSON.stringify({workspaces:r,groups:i??[],activeWorkspaceId:s,sidebarCollapsed:n,sidebarWidth:l});if(g.__purplemuxWorkspacesContentCache===u)return;e.updatedAt=new Date().toISOString();let c=f+".tmp";try{await t.default.writeFile(c,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(c,f)}catch(e){throw await t.default.unlink(c).catch(()=>{}),e}g.__purplemuxWorkspacesContentCache=u,(0,o.broadcastSync)({type:"workspace"})},I=async()=>{let e=await (0,l.readLayoutFile)(y);if(!e)return null;let a="ws-default";await t.default.mkdir((0,l.resolveLayoutDir)(a),{recursive:!0}),await (0,l.writeLayoutFile)(e,(0,l.resolveLayoutFile)(a));let i={workspaces:[{id:a,name:"default",directories:[r.default.homedir()]}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await L(i),d.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},_=async()=>{try{let e=await t.default.readFile(h,"utf-8"),a=JSON.parse(e);if(!Array.isArray(a.tabs)||0===a.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,s={root:{type:"pane",id:r,tabs:a.tabs,activeTabId:a.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},n=y+".tmp";try{await t.default.writeFile(n,JSON.stringify(s,null,2),{mode:384}),await t.default.rename(n,y)}catch(e){throw await t.default.unlink(n).catch(()=>{}),e}return d.info("tabs.json → layout.json migration complete"),await I()}catch{return null}},v=async()=>{await t.default.mkdir(a.default.join(w,"workspaces"),{recursive:!0});let e=await S();if(!e&&(await t.default.access(y).then(()=>!0).catch(()=>!1)?e=await I():await t.default.access(h).then(()=>!0).catch(()=>!1)&&(e=await _())),!e){let t=x();await L(t),e=t,d.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,s.listSessions)();for(let t of e.workspaces){let e=(0,l.resolveLayoutFile)(t.id),a=await (0,l.readLayoutFile)(e);if(!a){d.warn(`Workspace '${t.name}': layout.json corrupted, reset to default pane`),a=await (0,l.createDefaultLayout)(t.id,t.directories[0]),await (0,l.writeLayoutFile)(a,e);continue}let i=(0,u.collectAllTabs)(a.root).map(e=>e.sessionName),s=`pt-${t.id}-`,n=r.filter(e=>i.includes(e)||e.startsWith(s));try{await (0,l.crossCheckLayout)(a,n,t.id,t.directories[0])&&await (0,l.writeLayoutFile)(a,e)}catch(e){d.error(`Workspace '${t.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},$=async()=>{let e=await S();return e?{workspaces:e.workspaces,groups:e.groups??[],activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],groups:[],sidebarCollapsed:!1,sidebarWidth:220}},N=async()=>{let e=await S();return e?.activeWorkspaceId&&e.workspaces.some(t=>t.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},P=async e=>{let t=await S();return t?.workspaces.find(t=>t.id===e)},T=async(e,a,r)=>k(async()=>{let s;try{s=await t.default.stat(e)}catch{throw Error("Directory does not exist")}if(!s.isDirectory())throw Error("Please enter a directory path, not a file");let n=await S()??x(),o=`ws-${(0,i.nanoid)(6)}`,u=a?.trim()||(e=>{let t=0;for(let a of e)if(a.name.startsWith(m)){let e=parseInt(a.name.slice(m.length),10);e>t&&(t=e)}return`${m}${t+1}`})(n.workspaces),c=await (0,l.createDefaultLayout)(o,e,r);await t.default.mkdir((0,l.resolveLayoutDir)(o),{recursive:!0}),await (0,l.writeLayoutFile)(c,(0,l.resolveLayoutFile)(o));let w={id:o,name:u,directories:[e]};return n.workspaces.push(w),await L(n),await p(w),d.debug(`Created: ${o} (${u}, ${e})`),w}),W=async e=>k(async()=>{let t=await S()??x(),a=t.workspaces.findIndex(t=>t.id===e);if(-1===a)return!1;let r=t.workspaces[a],i=await (0,l.readLayoutFile)((0,l.resolveLayoutFile)(e));if(i)for(let e of(0,u.collectAllTabs)(i.root))try{await (0,s.killSession)(e.sessionName)}catch{}try{await (0,l.removeLayoutFile)(e)}catch{}return t.workspaces.splice(a,1),await L(t),d.info(`Deleted: ${e} (${r.name})`),!0}),E=async(e,t)=>k(async()=>{let a=await S();if(!a)return null;let r=a.workspaces.find(t=>t.id===e);return r?(r.name=t,await L(a),await p(r),d.debug(`Renamed: ${e} → "${t}"`),{...r}):null}),C=async e=>k(async()=>{let t=await S()??x();void 0!==e.activeWorkspaceId&&(t.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(t.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(t.sidebarWidth=e.sidebarWidth),await L(t)}),A=async(e,t)=>k(async()=>{let a=await S();if(!a)return;let r=a.workspaces.find(t=>t.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(t)&&(r.directories=t,await L(a),await p(r))}),O=async e=>k(async()=>{let t=await S()??x(),a=new Map(t.workspaces.map(e=>[e.id,e])),r=new Set((t.groups??[]).map(e=>e.id)),i=[];for(let t of e){let e=a.get(t.id);if(!e)return!1;void 0!==t.groupId&&(e.groupId=t.groupId&&r.has(t.groupId)?t.groupId:null),i.push(e)}return i.length===t.workspaces.length&&(t.workspaces=i,await L(t),!0)}),D=async e=>k(async()=>{let t=await S()??x(),a=b(t),r=e.trim()||`Group ${a.length+1}`,s={id:`grp-${(0,i.nanoid)(6)}`,name:r,collapsed:!1};return a.push(s),await L(t),d.debug(`Group created: ${s.id} (${s.name})`),s}),F=async(e,t)=>k(async()=>{let a=await S();if(!a)return null;let r=(a.groups??[]).find(t=>t.id===e);if(!r)return null;let i=t.trim();return i?(r.name=i,await L(a),{...r}):r}),M=async(e,t)=>k(async()=>{let a=await S();if(!a)return!1;let r=(a.groups??[]).find(t=>t.id===e);return!!r&&(r.collapsed===t||(r.collapsed=t,await L(a),!0))}),j=async e=>k(async()=>{let t=await S();if(!t)return!1;let a=b(t),r=a.findIndex(t=>t.id===e);if(-1===r)return!1;for(let a of t.workspaces)a.groupId===e&&(a.groupId=null);return a.splice(r,1),await L(t),d.info(`Group ungrouped: ${e}`),!0}),R=async e=>k(async()=>{let t=await S();if(!t)return!1;let a=b(t),r=new Map(a.map(e=>[e.id,e])),i=[];for(let t of e){let e=r.get(t);if(!e)return!1;i.push(e)}return i.length===a.length&&(t.groups=i,await L(t),!0)}),G=async(e,t)=>k(async()=>{let a=await S();if(!a)return!1;let r=a.workspaces.find(t=>t.id===e);if(!r)return!1;let i=new Set((a.groups??[]).map(e=>e.id)),s=t&&i.has(t)?t:null;return(r.groupId??null)===s||(r.groupId=s,await L(a),!0)}),q=async e=>{try{if(!(await t.default.stat(e)).isDirectory())return{valid:!1,error:"Please enter a directory path, not a file"}}catch{return{valid:!1,error:"Directory does not exist"}}return{valid:!0,suggestedName:a.default.basename(e)}};e.s(["createGroup",0,D,"createWorkspace",0,T,"deleteWorkspace",0,W,"getActiveWorkspaceId",0,N,"getWorkspaceById",0,P,"getWorkspaces",0,$,"initWorkspaceStore",0,v,"renameGroup",0,F,"renameWorkspace",0,E,"reorderGroups",0,R,"reorderWorkspaces",0,O,"setGroupCollapsed",0,M,"setWorkspaceGroup",0,G,"ungroupGroup",0,j,"updateActive",0,C,"updateWorkspaceDirectories",0,A,"validateDirectory",0,q],322429)}];
41
41
 
42
42
  //# sourceMappingURL=%5Broot-of-the-server%5D__05ij_ys._.js.map
@@ -1,3 +1,3 @@
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"))},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"]),s=["LC_"],i=e=>a.has(e)||s.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&&i(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)},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),a=e.i(446786);let s=r.default.join(a.default.homedir(),".purplemux","logs"),i=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=[i,...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(s,"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]??i,t}])},44014,e=>{"use strict";let t,r;var a=e.i(666680);e.s(["nanoid",0,function(e=21){var s;s=e|=0,!t||t.length<s?(t=Buffer.allocUnsafe(128*s),a.webcrypto.getRandomValues(t),r=0):r+s>t.length&&(a.webcrypto.getRandomValues(t),r=0),r+=s;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),s=e.i(814747),i=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 c=(0,o.createLogger)("terminal"),p=(0,a.promisify)(t.execFile),d="purple",m=s.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),y=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[]}},h=async(e,t,r,a)=>{let s=(0,l.buildShellLaunchCommand)();await p("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),s],{timeout:5e3,cwd:a||n.PRISTINE_ENV.HOME||"/"}),await E(),c.debug(`tmux session created: ${e} (cols: ${t}, rows: ${r})`)},f=e=>new Promise(t=>setTimeout(t,e)),w=async e=>{if(!await g(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 g(e))return void c.debug(`killSession done (SIGTERM): ${e}`);await f(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 g(e))return void c.debug(`killSession done (SIGKILL): ${e}`);await f(200)}c.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await p("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},_=async()=>{},x=async()=>{await _();let e=await y();e.length>0&&e.forEach(e=>{c.debug(`existing tmux session found: ${e}`)})},S=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 S(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}},P=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,s,i,n]=r.split(" ");if(e&&a){let r=parseInt(i,10),l=parseInt(n,10);t.set(e,{command:a,path:s||"",pid:Number.isNaN(r)?0:r,windowActivity:Number.isNaN(l)?0:l})}}return t}catch{return new Map}},I=new Set(["bash","zsh","fish","sh","dash"]),N=async e=>{let t=await b(e);return t?{isSafe:I.has(t),processName:t}:{isSafe:!1,processName:"unknown"}},T=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}},M=async e=>{await p("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},R=async(e,t)=>{await M(e),await p("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},$=async(e,t)=>{await M(e),await p("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},k=async(e,t)=>{await M(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})},q=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,s,i,n,l]=t.trim().split(" ");return{cwd:r||null,command:a||null,pid:s&&parseInt(s,10)||null,width:i&&parseInt(i,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}}},j=new Set(["node","python","python3","ruby","perl","deno","bun"]),A=async()=>{try{await p("tmux",["-L",d,"kill-server"],{timeout:5e3}),c.debug("tmux server killed")}catch{}},O=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},C=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}},H=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 H(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 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 s=e.match(/:(\d+)\s/);s&&a.add(parseInt(s[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 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[]}},F=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}),i=a.trim();if(!i)return null;let n=i.split(/\s+/);if(0===n.length)return i;if(n[0]=s.default.basename(n[0]),j.has(n[0])&&n.length>1){let e=s.default.basename(n[1]).replace(/\.(c|m)?js$/,"");n.splice(0,2,e)}return n.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,I,"applyConfig",0,E,"capturePaneContent",0,O,"capturePaneContentWithHistory",0,C,"checkTerminalProcess",0,N,"createSession",0,h,"defaultSessionName",0,()=>`pt-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}`,"exitCopyMode",0,M,"getAllPanesInfo",0,P,"getLastCommand",0,F,"getListeningPorts",0,G,"getPaneCurrentCommand",0,b,"getPaneDetailInfo",0,q,"getPaneTitle",0,T,"getSessionCwd",0,L,"getSessionPanePid",0,v,"hasSession",0,g,"killServer",0,A,"killSession",0,w,"listSessions",0,y,"scanSessions",0,x,"sendBracketedPaste",0,k,"sendKeys",0,R,"sendRawKeys",0,$,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},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"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let r=globalThis;r.__ptSyncClients||(r.__ptSyncClients=new Set);let a=r.__ptSyncClients;e.s(["broadcastSync",0,e=>{let r=JSON.stringify(e);for(let e of a)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(r)}])},902067,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),s=e.i(262950),i=e.i(924868),n=e.i(814747),l=e.i(44014),o=e.i(825265),u=e.i(25146);let c=(0,u.createLogger)("message-history"),p=globalThis;p.__ptMessageHistoryLocks||(p.__ptMessageHistoryLocks=new Map);let d=async(e,t)=>{let r,a=new Promise(e=>{r=e}),s=p.__ptMessageHistoryLocks.get(e)??Promise.resolve();p.__ptMessageHistoryLocks.set(e,a),await s;try{return await t()}finally{r(),p.__ptMessageHistoryLocks.get(e)===a&&p.__ptMessageHistoryLocks.delete(e)}},m=e=>n.default.join((0,o.resolveLayoutDir)(e),"message-history.json"),y=async e=>{try{let t=await i.default.readFile(e,"utf-8"),r=JSON.parse(t);return Array.isArray(r.entries)?r.entries:[]}catch(e){return"ENOENT"!==e.code&&c.warn({err:e},"failed to read"),[]}},h=async(e,t)=>{let r=n.default.dirname(e);await i.default.mkdir(r,{recursive:!0});let a=e+".tmp";try{await i.default.writeFile(a,JSON.stringify(t,null,2),{mode:384}),await i.default.rename(a,e)}catch(e){throw await i.default.unlink(a).catch(()=>{}),e}},f=async e=>y(m(e)),w=async(e,t)=>d(e,async()=>{let r=m(e),a=await y(r),s=a.findIndex(e=>e.message===t);-1!==s&&a.splice(s,1);let i={id:(0,l.nanoid)(),message:t,sentAt:new Date().toISOString()};return a.unshift(i),a.length>500&&(a.length=500),await h(r,{entries:a}),i}),g=async(e,t)=>d(e,async()=>{let r=m(e),a=(await y(r)).filter(e=>e.id!==t);return await h(r,{entries:a}),!0}),_=(0,u.createLogger)("message-history"),x=async(e,t)=>{if("GET"===e.method){let r=e.query.wsId;if(!r)return t.status(400).json({error:"wsId is required"});let a=await f(r);return t.status(200).json({entries:a})}if("POST"===e.method){let{wsId:r,message:a}=e.body;if(!r)return t.status(400).json({error:"wsId is required"});if(!a?.trim())return t.status(400).json({error:"message is required"});try{let e=await w(r,a);return t.status(201).json({entry:e})}catch(e){return _.error({err:e},"write failed"),t.status(500).json({error:"Failed to save"})}}if("DELETE"===e.method){let{wsId:r,id:a}=e.body;if(!r)return t.status(400).json({error:"wsId is required"});if(!a)return t.status(400).json({error:"id is required"});try{let e=await g(r,a);return t.status(200).json({success:e})}catch(e){return _.error({err:e},"delete failed"),t.status(500).json({error:"Failed to save"})}}return t.setHeader("Allow","GET, POST, DELETE"),t.status(405).json({error:"Method not allowed"})};e.s(["default",0,x],217026);var S=e.i(217026),L=e.i(7031),v=e.i(181927),E=e.i(846432);let b=(0,s.hoist)(S,"default"),P=(0,s.hoist)(S,"config"),I=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/message-history",pathname:"/api/message-history",bundlePath:"",filename:""},userland:S,distDir:".next",relativeProjectDir:""});async function N(e,r,a){a.requestMeta&&(0,E.setRequestMeta)(e,a.requestMeta),I.isDev&&(0,E.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/message-history";s=s.replace(/\/index$/,"")||"/";let i=await I.prepare(e,r,{srcPage:s});if(!i){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}=i;try{let t,a=e.method||"GET",i=(0,L.getTracer)(),c=i.getActiveScopeSpan(),p=!!(null==u?void 0:u.isWrappedByNextServer),d=I.instrumentationOnRequestError.bind(I),m=async c=>I.render(e,r,{query:{...n,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:I.isDev,page:"/api/message-history",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=i.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==v.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}`;c.setAttributes({"next.route":n,"http.route":n,"next.span_name":e}),c.updateName(e),t&&t!==c&&(t.setAttribute("http.route",n),t.updateName(e))}else c.updateName(`${a} ${s}`)});p&&c?await m(c):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(v.BaseServerSpan.handleRequest,{spanName:`${a} ${s}`,kind:L.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},m),void 0,!p))}catch(e){if(I.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,P,"default",0,b,"handler",0,N],902067)},981532,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_workspace-store_ts_0vqt073._.js"].map(t=>e.l(t))).then(()=>t(322429)))},322522,e=>{e.v(e=>Promise.resolve().then(()=>e(459015)))},245061,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_tab-title_ts_0onatvs._.js"].map(t=>e.l(t))).then(()=>t(785128)))}];
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"))},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"))},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),a=e.i(446786);let s=r.default.join(a.default.homedir(),".purplemux","logs"),i=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=[i,...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(s,"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]??i,t}])},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"]),s=["LC_"],i=e=>a.has(e)||s.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&&i(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 s;s=e|=0,!t||t.length<s?(t=Buffer.allocUnsafe(128*s),a.webcrypto.getRandomValues(t),r=0):r+s>t.length&&(a.webcrypto.getRandomValues(t),r=0),r+=s;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),s=e.i(814747),i=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 c=(0,o.createLogger)("terminal"),p=(0,a.promisify)(t.execFile),d="purple",m=s.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),y=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[]}},h=async(e,t,r,a)=>{let s=(0,l.buildShellLaunchCommand)();await p("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),s],{timeout:5e3,cwd:a||n.PRISTINE_ENV.HOME||"/"}),await E(),c.debug(`tmux session created: ${e} (cols: ${t}, rows: ${r})`)},f=e=>new Promise(t=>setTimeout(t,e)),w=async e=>{if(!await g(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 g(e))return void c.debug(`killSession done (SIGTERM): ${e}`);await f(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 g(e))return void c.debug(`killSession done (SIGKILL): ${e}`);await f(200)}c.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await p("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},_=async()=>{},x=async()=>{await _();let e=await y();e.length>0&&e.forEach(e=>{c.debug(`existing tmux session found: ${e}`)})},S=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 S(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}},P=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,s,i,n]=r.split(" ");if(e&&a){let r=parseInt(i,10),l=parseInt(n,10);t.set(e,{command:a,path:s||"",pid:Number.isNaN(r)?0:r,windowActivity:Number.isNaN(l)?0:l})}}return t}catch{return new Map}},I=new Set(["bash","zsh","fish","sh","dash"]),N=async e=>{let t=await b(e);return t?{isSafe:I.has(t),processName:t}:{isSafe:!1,processName:"unknown"}},T=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}},M=async e=>{await p("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},R=async(e,t)=>{await M(e),await p("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},$=async(e,t)=>{await M(e),await p("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},k=async(e,t)=>{await M(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})},q=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,s,i,n,l]=t.trim().split(" ");return{cwd:r||null,command:a||null,pid:s&&parseInt(s,10)||null,width:i&&parseInt(i,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}}},j=new Set(["node","python","python3","ruby","perl","deno","bun"]),A=async()=>{try{await p("tmux",["-L",d,"kill-server"],{timeout:5e3}),c.debug("tmux server killed")}catch{}},O=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},C=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}},H=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 H(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 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 s=e.match(/:(\d+)\s/);s&&a.add(parseInt(s[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 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[]}},F=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}),i=a.trim();if(!i)return null;let n=i.split(/\s+/);if(0===n.length)return i;if(n[0]=s.default.basename(n[0]),j.has(n[0])&&n.length>1){let e=s.default.basename(n[1]).replace(/\.(c|m)?js$/,"");n.splice(0,2,e)}return n.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,I,"applyConfig",0,E,"capturePaneContent",0,O,"capturePaneContentWithHistory",0,C,"checkTerminalProcess",0,N,"createSession",0,h,"defaultSessionName",0,()=>`pt-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}`,"exitCopyMode",0,M,"getAllPanesInfo",0,P,"getLastCommand",0,F,"getListeningPorts",0,G,"getPaneCurrentCommand",0,b,"getPaneDetailInfo",0,q,"getPaneTitle",0,T,"getSessionCwd",0,L,"getSessionPanePid",0,v,"hasSession",0,g,"killServer",0,A,"killSession",0,w,"listSessions",0,y,"scanSessions",0,x,"sendBracketedPaste",0,k,"sendKeys",0,R,"sendRawKeys",0,$,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},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"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let r=globalThis;r.__ptSyncClients||(r.__ptSyncClients=new Set);let a=r.__ptSyncClients;e.s(["broadcastSync",0,e=>{let r=JSON.stringify(e);for(let e of a)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(r)}])},902067,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),s=e.i(262950),i=e.i(924868),n=e.i(814747),l=e.i(44014),o=e.i(825265),u=e.i(25146);let c=(0,u.createLogger)("message-history"),p=globalThis;p.__ptMessageHistoryLocks||(p.__ptMessageHistoryLocks=new Map);let d=async(e,t)=>{let r,a=new Promise(e=>{r=e}),s=p.__ptMessageHistoryLocks.get(e)??Promise.resolve();p.__ptMessageHistoryLocks.set(e,a),await s;try{return await t()}finally{r(),p.__ptMessageHistoryLocks.get(e)===a&&p.__ptMessageHistoryLocks.delete(e)}},m=e=>n.default.join((0,o.resolveLayoutDir)(e),"message-history.json"),y=async e=>{try{let t=await i.default.readFile(e,"utf-8"),r=JSON.parse(t);return Array.isArray(r.entries)?r.entries:[]}catch(e){return"ENOENT"!==e.code&&c.warn({err:e},"failed to read"),[]}},h=async(e,t)=>{let r=n.default.dirname(e);await i.default.mkdir(r,{recursive:!0});let a=e+".tmp";try{await i.default.writeFile(a,JSON.stringify(t,null,2),{mode:384}),await i.default.rename(a,e)}catch(e){throw await i.default.unlink(a).catch(()=>{}),e}},f=async e=>y(m(e)),w=async(e,t)=>d(e,async()=>{let r=m(e),a=await y(r),s=a.findIndex(e=>e.message===t);-1!==s&&a.splice(s,1);let i={id:(0,l.nanoid)(),message:t,sentAt:new Date().toISOString()};return a.unshift(i),a.length>500&&(a.length=500),await h(r,{entries:a}),i}),g=async(e,t)=>d(e,async()=>{let r=m(e),a=(await y(r)).filter(e=>e.id!==t);return await h(r,{entries:a}),!0}),_=(0,u.createLogger)("message-history"),x=async(e,t)=>{if("GET"===e.method){let r=e.query.wsId;if(!r)return t.status(400).json({error:"wsId is required"});let a=await f(r);return t.status(200).json({entries:a})}if("POST"===e.method){let{wsId:r,message:a}=e.body;if(!r)return t.status(400).json({error:"wsId is required"});if(!a?.trim())return t.status(400).json({error:"message is required"});try{let e=await w(r,a);return t.status(201).json({entry:e})}catch(e){return _.error({err:e},"write failed"),t.status(500).json({error:"Failed to save"})}}if("DELETE"===e.method){let{wsId:r,id:a}=e.body;if(!r)return t.status(400).json({error:"wsId is required"});if(!a)return t.status(400).json({error:"id is required"});try{let e=await g(r,a);return t.status(200).json({success:e})}catch(e){return _.error({err:e},"delete failed"),t.status(500).json({error:"Failed to save"})}}return t.setHeader("Allow","GET, POST, DELETE"),t.status(405).json({error:"Method not allowed"})};e.s(["default",0,x],217026);var S=e.i(217026),L=e.i(7031),v=e.i(181927),E=e.i(846432);let b=(0,s.hoist)(S,"default"),P=(0,s.hoist)(S,"config"),I=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/message-history",pathname:"/api/message-history",bundlePath:"",filename:""},userland:S,distDir:".next",relativeProjectDir:""});async function N(e,r,a){a.requestMeta&&(0,E.setRequestMeta)(e,a.requestMeta),I.isDev&&(0,E.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/message-history";s=s.replace(/\/index$/,"")||"/";let i=await I.prepare(e,r,{srcPage:s});if(!i){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}=i;try{let t,a=e.method||"GET",i=(0,L.getTracer)(),c=i.getActiveScopeSpan(),p=!!(null==u?void 0:u.isWrappedByNextServer),d=I.instrumentationOnRequestError.bind(I),m=async c=>I.render(e,r,{query:{...n,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:I.isDev,page:"/api/message-history",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=i.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==v.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}`;c.setAttributes({"next.route":n,"http.route":n,"next.span_name":e}),c.updateName(e),t&&t!==c&&(t.setAttribute("http.route",n),t.updateName(e))}else c.updateName(`${a} ${s}`)});p&&c?await m(c):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(v.BaseServerSpan.handleRequest,{spanName:`${a} ${s}`,kind:L.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},m),void 0,!p))}catch(e){if(I.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,P,"default",0,b,"handler",0,N],902067)},981532,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_workspace-store_ts_0vqt073._.js"].map(t=>e.l(t))).then(()=>t(322429)))},322522,e=>{e.v(e=>Promise.resolve().then(()=>e(459015)))},245061,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_tab-title_ts_0onatvs._.js"].map(t=>e.l(t))).then(()=>t(785128)))}];
2
2
 
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0cjfc~l._.js.map
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__06h3gzy._.js.map
@@ -0,0 +1,3 @@
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"))},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)},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}])},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 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"),f=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[]}},h=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||n.PRISTINE_ENV.HOME||"/"}),await E(),c.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;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 g(e))return void c.debug(`killSession done (SIGTERM): ${e}`);await y(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 g(e))return void c.debug(`killSession done (SIGKILL): ${e}`);await y(200)}c.warn(`tmux session still alive after kill: ${e}`)},g=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 f();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{}},I=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}},P=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,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}},N=new Set(["bash","zsh","fish","sh","dash"]),b=async e=>{let t=await I(e);return t?{isSafe:N.has(t),processName:t}:{isSafe:!1,processName:"unknown"}},$=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}},R=async e=>{await p("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},T=async(e,t)=>{await R(e),await p("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},M=async(e,t)=>{await R(e),await p("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},C=async(e,t)=>{await R(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})},k=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,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}}},A=new Set(["node","python","python3","ruby","perl","deno","bun"]),j=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}},H=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[]}},U=async e=>{let t=[],r=[e];for(;r.length>0;){let e=await H(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 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[]}},G=async e=>{let t=await U(e);if(0===t.length)return[];if(u)return D(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[]}},F=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}),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]),A.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,N,"applyConfig",0,E,"capturePaneContent",0,q,"capturePaneContentWithHistory",0,O,"checkTerminalProcess",0,b,"createSession",0,h,"defaultSessionName",0,()=>`pt-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}`,"exitCopyMode",0,R,"getAllPanesInfo",0,P,"getLastCommand",0,F,"getListeningPorts",0,G,"getPaneCurrentCommand",0,I,"getPaneDetailInfo",0,k,"getPaneTitle",0,$,"getSessionCwd",0,L,"getSessionPanePid",0,v,"hasSession",0,g,"killServer",0,j,"killSession",0,w,"listSessions",0,f,"scanSessions",0,S,"sendBracketedPaste",0,C,"sendKeys",0,T,"sendRawKeys",0,M,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},255811,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(224361),l=e.i(459015),o=e.i(25146);let u=(0,n.promisify)(s.execFile),c=(0,o.createLogger)("commit-diff"),p=/^[0-9a-f]{4,40}$/i,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.session,a=e.query.hash;if(!r||!a)return t.status(400).json({error:"session and hash parameters required"});if(!p.test(a))return t.status(400).json({error:"Invalid hash format"});if(!await (0,l.hasSession)(r))return t.status(404).json({error:"Session not found"});let i=await (0,l.getSessionCwd)(r);if(!i)return t.status(500).json({error:"Failed to get CWD"});try{let{stdout:e}=await u("git",["-C",i,"log","-1","--format=%H\x1f%P\x1f%an\x1f%ae\x1f%at\x1f%s\x1f%b",a],{timeout:1e4}),r=e.replace(/\n$/,"").split("\x1f");if(r.length<7)return t.status(404).json({error:"Commit not found"});let[s,n,l,o,c,p,...d]=r,m=n.trim()?n.trim().split(/\s+/):[],f={hash:s,shortHash:s.slice(0,7),subject:p,body:d.join("\x1f").trim(),author:l,email:o,timestamp:1e3*parseInt(c,10),parents:m},h=0===m.length?["-C",i,"show","--format=",s]:["-C",i,"diff",`${s}^..${s}`],{stdout:y}=await u("git",h,{timeout:1e4,maxBuffer:0xa00000});return t.status(200).json({commit:f,diff:y})}catch(e){return c.error(`commit-diff failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to get commit diff"})}};e.s(["default",0,d],960498);var m=e.i(960498),f=e.i(7031),h=e.i(181927),y=e.i(846432);let w=(0,i.hoist)(m,"default"),g=(0,i.hoist)(m,"config"),x=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/layout/commit-diff",pathname:"/api/layout/commit-diff",bundlePath:"",filename:""},userland:m,distDir:".next",relativeProjectDir:""});async function S(e,r,a){a.requestMeta&&(0,y.setRequestMeta)(e,a.requestMeta),x.isDev&&(0,y.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/layout/commit-diff";i=i.replace(/\/index$/,"")||"/";let s=await x.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,f.getTracer)(),c=s.getActiveScopeSpan(),p=!!(null==u?void 0:u.isWrappedByNextServer),d=x.instrumentationOnRequestError.bind(x),m=async c=>x.render(e,r,{query:{...n,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:x.isDev,page:"/api/layout/commit-diff",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=s.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 n=e.get("next.route");if(n){let e=`${a} ${n}`;c.setAttributes({"next.route":n,"http.route":n,"next.span_name":e}),c.updateName(e),t&&t!==c&&(t.setAttribute("http.route",n),t.updateName(e))}else c.updateName(`${a} ${i}`)});p&&c?await m(c):(t=s.getActiveScopeSpan(),await s.withPropagatedContext(e.headers,()=>s.trace(h.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:f.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,g,"default",0,w,"handler",0,S],255811)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__08tdlcm._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},871911,e=>{"use strict";var t=e.i(254799),r=e.i(522734),a=e.i(814747),i=e.i(446786);let s=a.default.join(i.default.homedir(),".purplemux","cli-token"),n=globalThis;e.s(["verifyCliToken",0,e=>{let i=e.headers["x-pmux-token"];var o="string"==typeof i?i:void 0;if(!o)return!1;let l=(()=>{if(n.__ptCliToken)return n.__ptCliToken;let e=(()=>{try{return r.default.readFileSync(s,"utf-8").trim()||null}catch{return null}})();if(e)return n.__ptCliToken=e,e;let i=(0,t.randomBytes)(32).toString("hex");n.__ptCliToken=i;try{r.default.mkdirSync(a.default.dirname(s),{recursive:!0}),r.default.writeFileSync(s,i,{mode:384})}catch{}return i})();return o.length===l.length&&(0,t.timingSafeEqual)(Buffer.from(o),Buffer.from(l))}])},200523,e=>{"use strict";var t=e.i(825265),r=e.i(804767),a=e.i(322429),i=e.i(871911);let s=async(e,i)=>{if(!await (0,a.getWorkspaceById)(e))return null;let s=await (0,t.getLayout)(e);for(let t of(0,r.collectPanes)(s.root)){let r=t.tabs.find(e=>e.id===i);if(r)return{workspaceId:e,paneId:t.id,tab:r}}return null},n=async e=>{let a=await (0,t.getLayout)(e);return(0,r.getFirstPaneId)(a.root)||null},o=async(e,t,r,a)=>{if(e.method!==r){t.setHeader("Allow",r),t.status(405).json({error:"Method not allowed"});return}if(!(0,i.verifyCliToken)(e))return void t.status(403).json({error:"Forbidden"});let n=e.query.tabId,o="string"==typeof e.query.workspaceId?e.query.workspaceId:void 0;if(!o)return void t.status(400).json({error:"workspaceId is required"});let l=await s(o,n);if(!l)return void t.status(404).json({error:"Tab not found"});if("web-browser"!==l.tab.panelType)return void t.status(400).json({error:"Tab is not a web-browser panel"});let u=globalThis.__ptBrowserBridge??null;u?await a({tabId:n,bridge:u}):t.status(503).json({error:"Browser bridge unavailable (Electron-only feature)"})};e.s(["findTab",0,s,"resolveFirstPaneId",0,n,"withBrowserTab",0,o],200523)},605226,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),i=e.i(262950),s=e.i(200523);let n=async(e,t)=>{await (0,s.withBrowserTab)(e,t,"POST",async({tabId:r,bridge:a})=>{let{expression:i}=e.body??{};if(!i||"string"!=typeof i)return void t.status(400).json({error:"expression is required"});try{let e=await a.evaluate(r,i);t.status(200).json({tabId:r,value:e})}catch(r){let e=r instanceof Error?r.message:"evaluation failed";t.status(409).json({error:e})}})};e.s(["default",0,n],184050);var o=e.i(184050),l=e.i(7031),u=e.i(181927),d=e.i(846432);let p=(0,i.hoist)(o,"default"),c=(0,i.hoist)(o,"config"),f=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/cli/tabs/[tabId]/browser/eval",pathname:"/api/cli/tabs/[tabId]/browser/eval",bundlePath:"",filename:""},userland:o,distDir:".next",relativeProjectDir:""});async function v(e,r,a){a.requestMeta&&(0,d.setRequestMeta)(e,a.requestMeta),f.isDev&&(0,d.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/cli/tabs/[tabId]/browser/eval";i=i.replace(/\/index$/,"")||"/";let s=await f.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:o,prerenderManifest:p,routerServerContext:c}=s;try{let t,a=e.method||"GET",s=(0,l.getTracer)(),d=s.getActiveScopeSpan(),v=!!(null==c?void 0:c.isWrappedByNextServer),b=f.instrumentationOnRequestError.bind(f),w=async l=>f.render(e,r,{query:{...n,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:p.preview,propagateError:!1,dev:f.isDev,page:"/api/cli/tabs/[tabId]/browser/eval",internalRevalidate:null==c?void 0:c.revalidate,onError:(...t)=>b(e,...t)}).finally(()=>{if(!l)return;l.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=s.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==u.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}`;l.setAttributes({"next.route":n,"http.route":n,"next.span_name":e}),l.updateName(e),t&&t!==l&&(t.setAttribute("http.route",n),t.updateName(e))}else l.updateName(`${a} ${i}`)});v&&d?await w(d):(t=s.getActiveScopeSpan(),await s.withPropagatedContext(e.headers,()=>s.trace(u.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:l.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},w),void 0,!v))}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,c,"default",0,p,"handler",0,v],605226)},981532,e=>{e.v(e=>Promise.resolve().then(()=>e(322429)))},322522,e=>{e.v(e=>Promise.resolve().then(()=>e(459015)))},245061,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_tab-title_ts_0onatvs._.js"].map(t=>e.l(t))).then(()=>t(785128)))}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0ar~lbk._.js.map
@@ -1,5 +1,5 @@
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"))},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)},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}])},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}},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,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=>{let t=await P(e);return t?{isSafe:b.has(t),processName:t}:{isSafe:!1,processName:"unknown"}},$=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(()=>{})},T=async(e,t)=>{await R(e),await c("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},M=async(e,t)=>{await R(e),await c("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},A=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,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}}},C=new Set(["node","python","python3","ruby","perl","deno","bun"]),j=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}},H=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},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 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 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[]}},F=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]),C.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,q,"capturePaneContentWithHistory",0,H,"checkTerminalProcess",0,N,"createSession",0,h,"defaultSessionName",0,()=>`pt-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}`,"exitCopyMode",0,R,"getAllPanesInfo",0,I,"getLastCommand",0,F,"getListeningPorts",0,U,"getPaneCurrentCommand",0,P,"getPaneDetailInfo",0,k,"getPaneTitle",0,$,"getSessionCwd",0,L,"getSessionPanePid",0,v,"hasSession",0,g,"killServer",0,j,"killSession",0,w,"listSessions",0,f,"scanSessions",0,x,"sendBracketedPaste",0,A,"sendKeys",0,T,"sendRawKeys",0,M,"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=>{try{let{stdout:t}=await p("git",["rev-list","--left-right","--count","HEAD...@{upstream}"],{cwd:e,timeout:1e4}),r=t.trim().split(/\s+/);return{ahead:parseInt(r[0],10)||0,behind:parseInt(r[1],10)||0}}catch{return{ahead:0,behind:0}}},m=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()}
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"))},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)},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}])},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)),g=async e=>{if(!await w(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 w(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 w(e))return void p.debug(`killSession done (SIGKILL): ${e}`);await y(200)}p.warn(`tmux session still alive after kill: ${e}`)},w=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}`)})},v=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}},_=async e=>{let t=await L(e);if(t){let e=await v(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}},E=async()=>{try{await c("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},b=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}},P=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}},I=new Set(["bash","zsh","fish","sh","dash"]),N=async e=>{let t=await b(e);return t?{isSafe:I.has(t),processName:t}:{isSafe:!1,processName:"unknown"}},$=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(()=>{})},T=async(e,t)=>{await R(e),await c("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},M=async(e,t)=>{await R(e),await c("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},A=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,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}}},C=new Set(["node","python","python3","ruby","perl","deno","bun"]),D=async()=>{try{await c("tmux",["-L",d,"kill-server"],{timeout:5e3}),p.debug("tmux server killed")}catch{}},H=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[]}},O=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 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 O(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[]}},F=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 n=s.split(/\s+/);if(0===n.length)return s;if(n[0]=i.default.basename(n[0]),C.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,I,"applyConfig",0,E,"capturePaneContent",0,H,"capturePaneContentWithHistory",0,q,"checkTerminalProcess",0,N,"createSession",0,h,"defaultSessionName",0,()=>`pt-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}`,"exitCopyMode",0,R,"getAllPanesInfo",0,P,"getLastCommand",0,F,"getListeningPorts",0,U,"getPaneCurrentCommand",0,b,"getPaneDetailInfo",0,k,"getPaneTitle",0,$,"getSessionCwd",0,_,"getSessionPanePid",0,L,"hasSession",0,w,"killServer",0,D,"killSession",0,g,"listSessions",0,f,"scanSessions",0,S,"sendBracketedPaste",0,A,"sendKeys",0,T,"sendRawKeys",0,M,"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=>{try{let{stdout:t}=await p("git",["rev-list","--left-right","--count","HEAD...@{upstream}"],{cwd:e,timeout:1e4}),r=t.trim().split(/\s+/);return{ahead:parseInt(r[0],10)||0,behind:parseInt(r[1],10)||0}}catch{return{ahead:0,behind:0}}},m=async e=>{let[t,r,a,i]=await Promise.allSettled([p("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:e,timeout:1e4}),p("git",["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"],{cwd:e,timeout:1e4}),p("git",["stash","list"],{cwd:e,timeout:1e4}),p("git",["log","-1","--format=%H\x1f%s\x1f%an\x1f%at"],{cwd:e,timeout:1e4})]),s="fulfilled"===t.status?t.value.stdout.trim():"",n="fulfilled"===r.status?r.value.stdout.trim():null,l="fulfilled"===a.status?a.value.stdout.trim():"",o=l?l.split("\n").length:0,u=null;if("fulfilled"===i.status){let e=i.value.stdout.trim().split("\x1f");if(e.length>=4){let[t,r,a,i]=e;u={hash:t,shortHash:t.slice(0,7),subject:r,author:a,timestamp:1e3*parseInt(i,10)}}}return{branch:s,upstream:n,isDetached:"HEAD"===s,stash:o,headCommit:u}},f=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
2
  ${r}
3
- ${a}`).digest("hex").slice(0,16)},f=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 m(i);return t.status(200).json({isGitRepo:!0,hash:e})}let[{stdout:e},{stdout:r},s,n]=await Promise.all([p("git",["diff","HEAD"],{cwd:i,timeout:1e4,maxBuffer:5242880}),p("git",["status","--porcelain","-uall"],{cwd:i,timeout:1e4}),m(i),d(i)]),l=r.split("\n").filter(e=>e.startsWith("??")).map(e=>e.slice(3).trim()),o=e;for(let e of l)try{let{stdout:t}=await p("git",["diff","--no-index","/dev/null",e],{cwd:i,timeout:1e4});o+=t}catch(e){e&&"object"==typeof e&&"stdout"in e&&(o+=e.stdout)}return t.status(200).json({isGitRepo:!0,diff:o,hash:s,ahead:n.ahead,behind:n.behind})}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,f],607240);var h=e.i(607240),y=e.i(7031),w=e.i(181927),g=e.i(846432);let S=(0,i.hoist)(h,"default"),x=(0,i.hoist)(h,"config"),_=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/layout/diff",pathname:"/api/layout/diff",bundlePath:"",filename:""},userland:h,distDir:".next",relativeProjectDir:""});async function L(e,r,a){a.requestMeta&&(0,g.setRequestMeta)(e,a.requestMeta),_.isDev&&(0,g.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/layout/diff";i=i.replace(/\/index$/,"")||"/";let s=await _.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,y.getTracer)(),p=s.getActiveScopeSpan(),c=!!(null==u?void 0:u.isWrappedByNextServer),d=_.instrumentationOnRequestError.bind(_),m=async p=>_.render(e,r,{query:{...n,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:_.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")!==w.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(w.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:y.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},m),void 0,!c))}catch(e){if(_.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,S,"handler",0,L],942080)}];
3
+ ${a}`).digest("hex").slice(0,16)},h=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,i="true"===e.query.fetch;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 s=await (0,o.getSessionCwd)(r);if(!s)return t.status(500).json({error:"Failed to get CWD"});try{await p("git",["rev-parse","--is-inside-work-tree"],{cwd:s,timeout:1e4})}catch{return t.status(200).json({isGitRepo:!1,diff:"",hash:""})}let n=!1;if(i)try{await p("git",["fetch","--prune"],{cwd:s,timeout:2e4}),n=!0}catch(e){c.warn(`silent fetch failed: ${e instanceof Error?e.message:e}`)}try{if(a){let[e,r]=await Promise.all([f(s),d(s)]);return t.status(200).json({isGitRepo:!0,hash:e,ahead:r.ahead,behind:r.behind,fetched:n})}let[{stdout:e},{stdout:r},i,l,o]=await Promise.all([p("git",["diff","HEAD"],{cwd:s,timeout:1e4,maxBuffer:5242880}),p("git",["status","--porcelain","-uall"],{cwd:s,timeout:1e4}),f(s),d(s),m(s)]),u=r.split("\n").filter(e=>e.startsWith("??")).map(e=>e.slice(3).trim()),c=e;for(let e of u)try{let{stdout:t}=await p("git",["diff","--no-index","/dev/null",e],{cwd:s,timeout:1e4});c+=t}catch(e){e&&"object"==typeof e&&"stdout"in e&&(c+=e.stdout)}return t.status(200).json({isGitRepo:!0,diff:c,hash:i,ahead:l.ahead,behind:l.behind,branch:o.branch,upstream:o.upstream,isDetached:o.isDetached,stash:o.stash,headCommit:o.headCommit,fetched:n})}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,h],607240);var y=e.i(607240),g=e.i(7031),w=e.i(181927),x=e.i(846432);let S=(0,i.hoist)(y,"default"),v=(0,i.hoist)(y,"config"),_=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/layout/diff",pathname:"/api/layout/diff",bundlePath:"",filename:""},userland:y,distDir:".next",relativeProjectDir:""});async function L(e,r,a){a.requestMeta&&(0,x.setRequestMeta)(e,a.requestMeta),_.isDev&&(0,x.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/layout/diff";i=i.replace(/\/index$/,"")||"/";let s=await _.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,g.getTracer)(),p=s.getActiveScopeSpan(),c=!!(null==u?void 0:u.isWrappedByNextServer),d=_.instrumentationOnRequestError.bind(_),m=async p=>_.render(e,r,{query:{...n,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:_.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")!==w.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(w.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:g.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},m),void 0,!c))}catch(e){if(_.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,v,"default",0,S,"handler",0,L],942080)}];
4
4
 
5
5
  //# sourceMappingURL=%5Broot-of-the-server%5D__0auutl5._.js.map
@@ -0,0 +1,3 @@
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"))},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)},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}])},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),m="purple",d=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 c("tmux",["-L",m,"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 c("tmux",["-u","-L",m,"-f",d,"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})`)},g=e=>new Promise(t=>setTimeout(t,e)),y=async e=>{if(!await w(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",m,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await w(e))return void p.debug(`killSession done (SIGTERM): ${e}`);await g(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",m,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await w(e))return void p.debug(`killSession done (SIGKILL): ${e}`);await g(200)}p.warn(`tmux session still alive after kill: ${e}`)},w=async e=>{try{return await c("tmux",["-L",m,"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}},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",m,"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",m,"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",m,"source-file",d],{timeout:5e3})}catch{}},I=async e=>{try{let{stdout:t}=await c("tmux",["-L",m,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},P=async()=>{try{let{stdout:e}=await c("tmux",["-L",m,"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=>{let t=await I(e);return t?{isSafe:b.has(t),processName:t}:{isSafe:!1,processName:"unknown"}},$=async e=>{try{let{stdout:t}=await c("tmux",["-L",m,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},R=async e=>{await c("tmux",["-L",m,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},M=async(e,t)=>{await R(e),await c("tmux",["-L",m,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},T=async(e,t)=>{await R(e),await c("tmux",["-L",m,"send-keys","-t",e,t],{timeout:5e3})},k=async(e,t)=>{await R(e),await c("tmux",["-L",m,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await c("tmux",["-L",m,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await c("tmux",["-L",m,"send-keys","-t",e,"Enter"],{timeout:5e3})},C=async e=>{try{let{stdout:t}=await c("tmux",["-L",m,"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}}},A=new Set(["node","python","python3","ruby","perl","deno","bun"]),j=async()=>{try{await c("tmux",["-L",m,"kill-server"],{timeout:5e3}),p.debug("tmux server killed")}catch{}},q=async e=>{try{let{stdout:t}=await c("tmux",["-L",m,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},H=async(e,t)=>{try{let{stdout:r}=await c("tmux",["-L",m,"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},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 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 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[]}},F=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 n=s.split(/\s+/);if(0===n.length)return s;if(n[0]=i.default.basename(n[0]),A.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,q,"capturePaneContentWithHistory",0,H,"checkTerminalProcess",0,N,"createSession",0,f,"defaultSessionName",0,()=>`pt-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}`,"exitCopyMode",0,R,"getAllPanesInfo",0,P,"getLastCommand",0,F,"getListeningPorts",0,U,"getPaneCurrentCommand",0,I,"getPaneDetailInfo",0,C,"getPaneTitle",0,$,"getSessionCwd",0,v,"getSessionPanePid",0,L,"hasSession",0,w,"killServer",0,j,"killSession",0,y,"listSessions",0,h,"scanSessions",0,S,"sendBracketedPaste",0,k,"sendKeys",0,M,"sendRawKeys",0,T,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},240760,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(224361),l=e.i(459015);let o=(0,n.promisify)(s.execFile),u=e=>e.split("\x1e").map(e=>e.trim()).filter(Boolean).map(e=>{let[t,r,a,i,s,...n]=e.split("\x1f"),l=r.trim()?r.trim().split(/\s+/):[];return{hash:t,shortHash:t.slice(0,7),parents:l,author:a,email:i,timestamp:1e3*parseInt(s,10),subject:n.join("\x1f"),isMerge:l.length>1}}),p=async(e,t=50,r=0)=>{let a=["-C",e,"log",`-${t}`];r>0&&a.push(`--skip=${r}`),a.push("--format=%H\x1f%P\x1f%an\x1f%ae\x1f%at\x1f%s\x1e");let i=o("git",a,{timeout:5e3,maxBuffer:2097152});if(r>0){let{stdout:e}=await i;return{head:"",branch:"",upstreamHash:null,commits:u(e)}}let[s,n,l,p]=await Promise.all([i,o("git",["-C",e,"rev-parse","HEAD"],{timeout:5e3}).then(e=>e.stdout.trim()).catch(()=>""),o("git",["-C",e,"rev-parse","--abbrev-ref","HEAD"],{timeout:5e3}).then(e=>e.stdout.trim()).catch(()=>""),o("git",["-C",e,"rev-parse","@{upstream}"],{timeout:5e3}).then(e=>e.stdout.trim()).catch(()=>null)]);return{head:n,branch:l,upstreamHash:p,commits:u(s.stdout)}};var c=e.i(25146);let m=(0,n.promisify)(s.execFile),d=(0,c.createLogger)("git-log"),h=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=parseInt(e.query.limit,10),i=Math.min(Number.isFinite(a)&&a>0?a:50,500),s=parseInt(e.query.skip,10),n=Number.isFinite(s)&&s>0?s:0;if(!r)return t.status(400).json({error:"session parameter required"});if(!await (0,l.hasSession)(r))return t.status(404).json({error:"Session not found"});let o=await (0,l.getSessionCwd)(r);if(!o)return t.status(500).json({error:"Failed to get CWD"});try{await m("git",["-C",o,"rev-parse","--is-inside-work-tree"],{timeout:5e3})}catch{return t.status(200).json({isGitRepo:!1,commits:[]})}try{let e=await p(o,i,n);return t.status(200).json({isGitRepo:!0,...e})}catch(e){return d.error(`git log failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to get commit log"})}};e.s(["default",0,h],819069);var f=e.i(819069),g=e.i(7031),y=e.i(181927),w=e.i(846432);let x=(0,i.hoist)(f,"default"),S=(0,i.hoist)(f,"config"),_=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/layout/git-log",pathname:"/api/layout/git-log",bundlePath:"",filename:""},userland:f,distDir:".next",relativeProjectDir:""});async function v(e,r,a){a.requestMeta&&(0,w.setRequestMeta)(e,a.requestMeta),_.isDev&&(0,w.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/layout/git-log";i=i.replace(/\/index$/,"")||"/";let s=await _.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,g.getTracer)(),p=s.getActiveScopeSpan(),c=!!(null==u?void 0:u.isWrappedByNextServer),m=_.instrumentationOnRequestError.bind(_),d=async p=>_.render(e,r,{query:{...n,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:_.isDev,page:"/api/layout/git-log",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>m(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 d(p):(t=s.getActiveScopeSpan(),await s.withPropagatedContext(e.headers,()=>s.trace(y.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:g.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},d),void 0,!c))}catch(e){if(_.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,S,"default",0,x,"handler",0,v],240760)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0bo-su1._.js.map
@@ -0,0 +1,30 @@
1
+ module.exports=[522734,(e,t,a)=>{t.exports=e.x("fs",()=>require("fs"))},319668,(e,t,a)=>{t.exports=e.x("readline",()=>require("readline"))},713915,e=>{"use strict";var t=e.i(233405),a=e.i(924868),n=e.i(446786),s=e.i(814747),i=e.i(224361),r=e.i(597789),l=e.i(965898);let o=(0,i.promisify)(t.execFile),u=null,c=null,d=async()=>{let e=n.default.userInfo().shell||(0,r.defaultShell)();try{let{stdout:t}=await o(e,["-ilc",'echo -n "$PATH"'],{timeout:5e3,env:{...(0,r.buildShellEnv)(),SHELL:e,DISABLE_AUTO_UPDATE:"true",ZSH_TMUX_AUTOSTARTED:"true"}});return t.toString().trim()}catch{return l.PRISTINE_ENV.PATH||""}},m=async()=>u||(c||(c=d().then(e=>(u=e,c=null,e))),c),f=async(e,t,a)=>{try{let n=await m(),{stdout:s}=await o(e,t,{timeout:5e3,env:{...process.env,PATH:n}});return{installed:!0,version:a(s)}}catch{return{installed:!1,version:null}}},h=e=>e.trim().match(/(\d+\.\d+[\d.]*)/)?.[1]??null,p=[s.default.join(n.default.homedir(),".local","bin")],g=async()=>{for(let e of p)try{return await (0,a.access)(s.default.join(e,"claude")),e}catch{}return null},y=e=>e.installed&&null!==e.version&&parseFloat(e.version)>=2.9,C=async()=>{u=await d();let[e,t,i]=await Promise.all([f("tmux",["-V"],h),f("git",["--version"],h),f("claude",["--version"],h)]),r=(y(e)&&t.installed&&i.installed,i.installed?null:await g()),l=!1;if(i.installed||r)try{await (0,a.access)(s.default.join(n.default.homedir(),".claude")),l=!0}catch{}return{tmux:{...e,compatible:y(e)},git:t,claude:{...i,binaryPath:r,loggedIn:l}}},w=null,S=null,T=null,k=null,D=async()=>T&&Date.now()-T.checkedAt<1e3?T.result:k||(k=C().then(e=>(T={result:e,checkedAt:Date.now()},k=null,e)).catch(e=>{throw k=null,e})),A=async()=>{u=await d();let[e,t,a]=await Promise.all([f("tmux",["-V"],h),f("git",["--version"],h),f("claude",["--version"],h)]);return{tmux:{...e,compatible:y(e)},git:t,claude:a}},b=async()=>w&&Date.now()-w.checkedAt<3e4?w.result:S||(S=A().then(e=>(w={result:e,checkedAt:Date.now()},S=null,e)).catch(e=>{throw S=null,e}));e.s(["getCachedPreflightStatus",0,D,"getCachedRuntimePreflight",0,b,"getShellPath",0,m,"invalidateRuntimeCache",0,()=>{w=null,S=null}])},177579,e=>{"use strict";var t=e.i(924868),a=e.i(522734),n=e.i(814747),s=e.i(446786),i=e.i(319668),r=e.i(990294);let l=n.default.join(s.default.homedir(),".purplemux","stats"),o=n.default.join(l,"cache.json"),u=n.default.join(s.default.homedir(),".claude","projects"),c=()=>({input:0,output:0,cacheRead:0,cacheCreation:0,cacheCreation5m:0,cacheCreation1h:0}),d=async()=>{let e=[];try{for(let a of(await t.default.readdir(u))){let s=n.default.join(u,a),i=await t.default.stat(s).catch(()=>null);if(i?.isDirectory())for(let a of(await t.default.readdir(s).catch(()=>[])))a.endsWith(".jsonl")&&!/^agent-/.test(a)&&e.push(n.default.join(s,a))}}catch{}return e},m=async(e,t)=>{let n=new Map,s=new Map;try{let r=(0,a.createReadStream)(e,{encoding:"utf-8"});for await(let e of i.default.createInterface({input:r,crlfDelay:1/0}))if(e.trim())try{let a=JSON.parse(e),i=String(a.timestamp??"");if(!i)continue;let r=i.slice(0,10);if(!t.has(r))continue;let l=String(a.type??"");if("user"!==l&&"assistant"!==l)continue;let o=String(a.sessionId??""),u=String(new Date(i).getHours()),d=n.get(r);d||(d={messageCount:0,sessionCount:0,toolCallCount:0,hourCounts:{},modelTokens:{},sessions:[]},n.set(r,d),s.set(r,new Map));let m=s.get(r);if("user"===l&&(d.messageCount++,d.hourCounts[u]=(d.hourCounts[u]??0)+1,o)){let e=m.get(o);e?(e.messages++,i>e.end&&(e.end=i),i<e.start&&(e.start=i)):m.set(o,{start:i,end:i,messages:1})}if("assistant"===l){let e=a.message;if(!e)continue;let t=e.content;if(Array.isArray(t)){let e=t.filter(e=>"object"==typeof e&&null!==e&&"tool_use"===e.type).length;d.toolCallCount+=e}let n=String(e.model??""),s=e.usage;if(n&&!n.startsWith("<")&&s){d.modelTokens[n]||(d.modelTokens[n]=c());let e=d.modelTokens[n],t=Number(s.cache_creation_input_tokens??0),a=s.cache_creation,i=Number(a?.ephemeral_1h_input_tokens??0),r=a?.ephemeral_5m_input_tokens!=null?Number(a.ephemeral_5m_input_tokens):Math.max(0,t-i);e.input+=Number(s.input_tokens??0),e.output+=Number(s.output_tokens??0),e.cacheRead+=Number(s.cache_read_input_tokens??0),e.cacheCreation+=t,e.cacheCreation5m+=r,e.cacheCreation1h+=i}if(o){let e=m.get(o);e?(i>e.end&&(e.end=i),i<e.start&&(e.start=i)):m.set(o,{start:i,end:i,messages:0})}}}catch{}}catch{}for(let[e,t]of s){let a=n.get(e);a&&(a.sessionCount=t.size,a.sessions=Array.from(t.entries()).map(([e,t])=>({id:e,start:t.start,end:t.end,messages:t.messages})))}return n},f=async(e,t)=>{let a=[],n=0,s=async()=>{for(;n<e.length;){let t=n++;a[t]=await e[t]()}},i=Array.from({length:Math.min(t,e.length)},()=>s());return await Promise.all(i),a},h=(e,t)=>{for(let[a,n]of(e.messageCount+=t.messageCount,e.toolCallCount+=t.toolCallCount,Object.entries(t.hourCounts)))e.hourCounts[a]=(e.hourCounts[a]??0)+n;for(let[a,n]of Object.entries(t.modelTokens)){e.modelTokens[a]||(e.modelTokens[a]=c());let t=e.modelTokens[a];t.input+=n.input,t.output+=n.output,t.cacheRead+=n.cacheRead,t.cacheCreation+=n.cacheCreation,t.cacheCreation5m+=n.cacheCreation5m,t.cacheCreation1h+=n.cacheCreation1h}let a=new Set(e.sessions.map(e=>e.id));for(let n of t.sessions)if(a.has(n.id)){let t=e.sessions.find(e=>e.id===n.id);t.messages+=n.messages,n.start<t.start&&(t.start=n.start),n.end>t.end&&(t.end=n.end)}else e.sessions.push(n);e.sessionCount=e.sessions.length},p=async()=>{try{let e=await t.default.readFile(o,"utf-8"),a=JSON.parse(e);if(2!==a.version)return null;return a}catch{return null}},g=async e=>{await t.default.mkdir(l,{recursive:!0}),await t.default.writeFile(o,JSON.stringify(e),"utf-8")},y=null,C=async e=>{try{let t=(0,a.createReadStream)(e,{encoding:"utf-8"});for await(let e of i.default.createInterface({input:t,crlfDelay:1/0}))if(e.trim())try{let t=JSON.parse(e),a=String(t.timestamp??"");if(a)return a.slice(0,10)}catch{}}catch{}return null},w=async()=>{let e=await d();if(0===e.length)return null;let t=e.map(e=>()=>C(e)),a=(await f(t,10)).filter(e=>null!==e);return 0===a.length?null:(a.sort(),a[0])},S=async e=>{if(0===e.size)return new Map;let t=(await d()).map(t=>()=>m(t,e)),a=await f(t,10),n=new Map;for(let e of a)for(let[t,a]of e){let e=n.get(t);e?h(e,a):n.set(t,a)}return n},T=async()=>{if(y&&Date.now()<y.expiresAt)return y.data;let e=(0,r.default)().subtract(1,"day").format("YYYY-MM-DD"),t=(0,r.default)().format("YYYY-MM-DD"),a=await p(),n=new Set;if(n.add(t),a){if(a.lastComputedDate<e){let t=(0,r.default)(a.lastComputedDate).add(1,"day"),s=(0,r.default)(e);for(;t.isBefore(s)||t.isSame(s);){let e=t.format("YYYY-MM-DD");a.days[e]||n.add(e),t=t.add(1,"day")}}}else{a={version:2,lastComputedDate:"",days:{}};let s=await w();if(!s)return k(a,t);let i=(0,r.default)(s),l=(0,r.default)(e);for(;i.isBefore(l)||i.isSame(l);)n.add(i.format("YYYY-MM-DD")),i=i.add(1,"day")}let s=await S(n);for(let[e,n]of s)e!==t&&(a.days[e]=n);a.lastComputedDate=e,await g(a);let i=s.get(t)??null,l=k(a,t,i);return y={data:l,expiresAt:Date.now()+3e5},l},k=(e,t,a)=>{let n=[],s=[],i={},r={},l={},o=0,u=0,c="",d={sessionId:"",duration:0,messageCount:0,timestamp:""},m=Object.entries(e.days);for(let[e,f]of(a&&m.push([t,a]),m.sort((e,t)=>e[0].localeCompare(t[0])),m)){!c&&f.messageCount>0&&(c=e),n.push({date:e,messageCount:f.messageCount,sessionCount:f.sessionCount,toolCallCount:f.toolCallCount});let t={};for(let[e,a]of Object.entries(f.modelTokens)){t[e]={input:a.input,output:a.output,cacheRead:a.cacheRead,cacheCreation:a.cacheCreation,cacheCreation5m:a.cacheCreation5m,cacheCreation1h:a.cacheCreation1h},i[e]||(i[e]={inputTokens:0,outputTokens:0,cacheReadInputTokens:0,cacheCreationInputTokens:0,cacheCreation5mInputTokens:0,cacheCreation1hInputTokens:0,webSearchRequests:0,costUSD:0,contextWindow:0,maxOutputTokens:0});let n=i[e];n.inputTokens+=a.input,n.outputTokens+=a.output,n.cacheReadInputTokens+=a.cacheRead,n.cacheCreationInputTokens+=a.cacheCreation,n.cacheCreation5mInputTokens+=a.cacheCreation5m,n.cacheCreation1hInputTokens+=a.cacheCreation1h}s.push({date:e,tokensByModel:t});let a=new Date(e).getDay();for(let[e,t]of Object.entries(f.hourCounts)){r[e]=(r[e]??0)+t;let n=`${a}-${e}`;l[n]=(l[n]??0)+t}for(let e of(o+=f.sessionCount,u+=f.messageCount,f.sessions)){let t=new Date(e.end).getTime()-new Date(e.start).getTime();t>d.duration&&(d={sessionId:e.id,duration:t,messageCount:e.messages,timestamp:e.start})}}return{version:2,lastComputedDate:t,dailyActivity:n,dailyModelTokens:s,modelUsage:i,totalSessions:o,totalMessages:u,longestSession:d,firstSessionDate:c,hourCounts:r,dayHourCounts:l,totalSpeculationTimeSavedMs:0}};e.s(["collectJsonlFiles",0,d,"getStatsCache",0,T])},7991,e=>{"use strict";var t=e.i(924868),a=e.i(814747),n=e.i(446786),s=e.i(522734),i=e.i(319668),r=e.i(233405),l=e.i(713915),o=e.i(177579);let u=a.default.join(n.default.homedir(),".purplemux","stats","daily-reports"),c=async()=>{let e={};try{for(let n of(await t.default.readdir(u)))if(n.endsWith(".json"))try{let s=await t.default.readFile(a.default.join(u,n),"utf-8"),i=JSON.parse(s);i.date&&i.brief&&(e[i.date]=i)}catch{}}catch{}return e},d=async e=>{await t.default.mkdir(u,{recursive:!0}),await t.default.writeFile(a.default.join(u,`${e.date}.json`),JSON.stringify(e,null,2),"utf-8")},m=e=>{let t=n.default.homedir();return(e.startsWith(t)?e.slice(t.length+1):e).replace(/^Workspace\/github\.com\//g,"").replace(/^Workspace\/gitlab\.kolonfnc\.com\//g,"gitlab/").replace(/^Documents\//g,"docs/").replace(/^Downloads/g,"Downloads")},f=async e=>{let t=await (0,o.collectJsonlFiles)(),n=[];for(let r of t){let t=[],l=[],o=0,u="";try{let a=(0,s.createReadStream)(r,{encoding:"utf-8"});for await(let n of i.default.createInterface({input:a,crlfDelay:1/0}))if(n.trim())try{let a=JSON.parse(n),s=String(a.timestamp??"");if(!s.startsWith(e))continue;l.push(s);let i=String(a.type??"");if(u||"string"!=typeof a.cwd||(u=a.cwd),"user"===i){let e=a.message;if(!e)continue;let n=e.content,i="";if("string"==typeof n)i=n.slice(0,300);else if(Array.isArray(n)){let e=[];for(let t of n)"object"==typeof t&&null!==t&&"text"===t.type&&e.push(String(t.text??"").slice(0,300));i=e.join(" | ")}if(i.includes("<command-message>")){let e=i.match(/<command-name>\/([^<]+)<\/command-name>/);i=`[Command: ${e?e[1]:"unknown"}]`}if(i.includes("<local-command-caveat>")||i.includes("<task-notification>"))continue;i.trim()&&t.push({time:s.slice(11,16),text:i.slice(0,200)})}if("assistant"===i){let e=a.message;if(!e)continue;let t=e.content;Array.isArray(t)&&(o+=t.filter(e=>"object"==typeof e&&null!==e&&"tool_use"===e.type).length)}}catch{}}catch{}if(l.length>0&&t.length>0){let e=u?m(u):a.default.basename(a.default.dirname(r));n.push({project:e,start:Math.min(...l.map(e=>new Date(e).getTime())).toString(),msgCount:t.length,toolCount:o,firstMessage:t[0].text})}}return n.sort((e,t)=>Number(e.start)-Number(t.start)),n},h=async(e,t)=>{let a=await (0,l.getShellPath)();return new Promise((n,s)=>{let i=(0,r.execFile)("claude",["-p"],{timeout:12e4,maxBuffer:1048576,env:{...process.env,PATH:a}},(e,t)=>{e?s(Error(`claude -p failed: ${e.message}`)):n(t.trim())});i.stdin?.write(`${t}
2
+
3
+ ${e}`),i.stdin?.end()})},p={en:"English",ko:"Korean (한국어)",ja:"Japanese (日本語)","zh-CN":"Simplified Chinese (简体中文)","zh-TW":"Traditional Chinese (繁體中文)",de:"German (Deutsch)",es:"Spanish (Español)",fr:"French (Français)","pt-BR":"Brazilian Portuguese (Português do Brasil)",ru:"Russian (Русский)",tr:"Turkish (Türkçe)"},g=async(e,t=!1,a="en")=>{var n,s;let i,r,l;if(!t){let t=await y(e);if(t&&t.locale===a)return t}let o=await f(e);if(0===o.length){let t={date:e,brief:"No activity recorded.",detail:"",generatedAt:new Date().toISOString(),locale:a};return await d(t),t}let u=o.map(e=>{let t=new Date(Number(e.start)).toTimeString().slice(0,5);return`[${t}] [${e.project}] msgs=${e.msgCount}, tools=${e.toolCount} | ${e.firstMessage}`}).join("\n"),{brief:c,detail:m}=(r=(s=await h(u,(n=e,i=p[a]??p.en,`Summarize the Claude session history for ${n}.
4
+
5
+ Output format (use exactly this structure):
6
+
7
+ [BRIEF]
8
+ A 2-3 line summary of the entire day. Use terse noun-form phrases. Plain text only. No markdown headings (#) or separators (---).
9
+
10
+ [DETAIL]
11
+ ## Project Name
12
+ ### Major Feature / Area
13
+ - One-line task summary
14
+ - One-line task summary
15
+ ### Another Feature / Area
16
+ - One-line task summary
17
+
18
+ Rules:
19
+ - The [BRIEF] and [DETAIL] tags must each appear exactly once, at the start of a line.
20
+ - Do not insert meta text outside the tags (separators, numbering, explanations).
21
+ - Always include the "## Project Name" heading, even when there is only one project.
22
+ - Each item is a single line — no filenames, no code snippets.
23
+ - Use terse noun-form phrases (e.g. "Fix login logic", "Improve mobile layout"). Avoid finished-sentence / past-tense forms.
24
+ - Focus on WHAT, not HOW.
25
+ - Skip trivial chatter (greetings, one-off questions, commit commands).
26
+ - IMPORTANT: Write ALL brief and detail content in ${i}. Keep the [BRIEF] / [DETAIL] tags and markdown syntax (##, ###, -) as-is in English.
27
+
28
+ Data:`))).match(/\[BRIEF\]\s*\n([\s\S]*?)(?=\[DETAIL\])/),l=s.match(/\[DETAIL\]\s*\n([\s\S]*?)$/),{brief:r?r[1].replace(/[\s#\-]*$/,"").trim():s.slice(0,500),detail:l?l[1].trim():""}),g={date:e,brief:c,detail:m,generatedAt:new Date().toISOString(),locale:a};return await d(g),g},y=async e=>{try{let n=await t.default.readFile(a.default.join(u,`${e}.json`),"utf-8"),s=JSON.parse(n);return s.date&&s.brief?s:null}catch{return null}};e.s(["generateDailyReport",0,g,"readAllCachedReports",0,c,"shortenCwd",0,m])}];
29
+
30
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0bocpgx._.js.map
@@ -0,0 +1,3 @@
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"))},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"]),a=["LC_"],i=e=>s.has(e)||a.some(t=>e.startsWith(t)),n={TERM:"xterm-256color",COLORTERM:"truecolor"},l=()=>{let e={};for(let[t,s]of Object.entries(r))void 0!==s&&i(t)&&(e[t]=s);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)},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),s=e.i(446786);let a=r.default.join(s.default.homedir(),".purplemux","logs"),i=process.env.LOG_LEVEL||"info",n=(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),l=["trace","debug","info","warn","error","fatal"],o=globalThis;if(!o.__ptRootLogger){let e=[i,...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(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=o.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=n[e]??i,t}])},44014,e=>{"use strict";let t,r;var s=e.i(666680);e.s(["nanoid",0,function(e=21){var a;a=e|=0,!t||t.length<a?(t=Buffer.allocUnsafe(128*a),s.webcrypto.getRandomValues(t),r=0):r+a>t.length&&(s.webcrypto.getRandomValues(t),r=0),r+=a;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),a=e.i(814747),i=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 d=(0,o.createLogger)("terminal"),p=(0,s.promisify)(t.execFile),c="purple",m=a.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",c,"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,s)=>{let a=(0,l.buildShellLaunchCommand)();await p("tmux",["-u","-L",c,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),a],{timeout:5e3,cwd:s||n.PRISTINE_ENV.HOME||"/"}),await k(),d.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;d.debug(`killSession start: ${e}`);let t=await L(e);if(t)try{d.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await p("tmux",["-L",c,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await g(e))return void d.debug(`killSession done (SIGTERM): ${e}`);await w(200)}if(d.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{d.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await p("tmux",["-L",c,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await g(e))return void d.debug(`killSession done (SIGKILL): ${e}`);await w(200)}d.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await p("tmux",["-L",c,"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=>{d.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}},v=async e=>{let t=await L(e);if(t){let e=await _(t);if(e)return e}try{let{stdout:t}=await p("tmux",["-L",c,"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 p("tmux",["-L",c,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),r=parseInt(t.trim(),10);return Number.isNaN(r)?null:r}catch{return null}},k=async()=>{try{await p("tmux",["-L",c,"source-file",m],{timeout:5e3})}catch{}},b=async e=>{try{let{stdout:t}=await p("tmux",["-L",c,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},E=async()=>{try{let{stdout:e}=await p("tmux",["-L",c,"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,a,i,n]=r.split(" ");if(e&&s){let r=parseInt(i,10),l=parseInt(n,10);t.set(e,{command:s,path:a||"",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"]),I=async e=>{let t=await b(e);return t?{isSafe:P.has(t),processName:t}:{isSafe:!1,processName:"unknown"}},N=async e=>{try{let{stdout:t}=await p("tmux",["-L",c,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},$=async e=>{await p("tmux",["-L",c,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},R=async(e,t)=>{await $(e),await p("tmux",["-L",c,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},T=async(e,t)=>{await $(e),await p("tmux",["-L",c,"send-keys","-t",e,t],{timeout:5e3})},M=async(e,t)=>{await $(e),await p("tmux",["-L",c,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await p("tmux",["-L",c,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await p("tmux",["-L",c,"send-keys","-t",e,"Enter"],{timeout:5e3})},j=async e=>{try{let{stdout:t}=await p("tmux",["-L",c,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[r,s,a,i,n,l]=t.trim().split(" ");return{cwd:r||null,command:s||null,pid:a&&parseInt(a,10)||null,width:i&&parseInt(i,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}}},A=new Set(["node","python","python3","ruby","perl","deno","bun"]),C=async()=>{try{await p("tmux",["-L",c,"kill-server"],{timeout:5e3}),d.debug("tmux server killed")}catch{}},O=async e=>{try{let{stdout:t}=await p("tmux",["-L",c,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},q=async(e,t)=>{try{let{stdout:r}=await p("tmux",["-L",c,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return r}catch{return null}},D=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 p("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 D(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 p("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 a=e.match(/:(\d+)\s/);a&&s.add(parseInt(a[1],10))}return[...s].sort((e,t)=>e-t)}catch{return[]}},G=async e=>{let t=await H(e);if(0===t.length)return[];if(u)return U(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[]}},K=async e=>{let t=await L(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:s}=await p("ps",["-o","args=","-p",r],{timeout:5e3}),i=s.trim();if(!i)return null;let n=i.split(/\s+/);if(0===n.length)return i;if(n[0]=a.default.basename(n[0]),A.has(n[0])&&n.length>1){let e=a.default.basename(n[1]).replace(/\.(c|m)?js$/,"");n.splice(0,2,e)}return n.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,P,"applyConfig",0,k,"capturePaneContent",0,O,"capturePaneContentWithHistory",0,q,"checkTerminalProcess",0,I,"createSession",0,f,"defaultSessionName",0,()=>`pt-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}`,"exitCopyMode",0,$,"getAllPanesInfo",0,E,"getLastCommand",0,K,"getListeningPorts",0,G,"getPaneCurrentCommand",0,b,"getPaneDetailInfo",0,j,"getPaneTitle",0,N,"getSessionCwd",0,v,"getSessionPanePid",0,L,"hasSession",0,g,"killServer",0,C,"killSession",0,y,"listSessions",0,h,"scanSessions",0,x,"sendBracketedPaste",0,M,"sendKeys",0,R,"sendRawKeys",0,T,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},426427,e=>{"use strict";var t=e.i(926747),r=e.i(190406),s=e.i(244898),a=e.i(262950),i=e.i(233405),n=e.i(224361),l=e.i(459015),o=e.i(25146);let u=(0,n.promisify)(i.execFile),d=(0,o.createLogger)("git-sync"),p=async(e,t)=>{try{let{stdout:r,stderr:s}=await u("git",["-C",e,...t],{timeout:3e4,maxBuffer:2097152});return{ok:!0,stdout:r,stderr:s,killed:!1}}catch(e){return{ok:!1,stdout:e.stdout??"",stderr:e.stderr??e.message??"",killed:!!e.killed}}},c=e=>{if(e.killed)return"timeout";let t=(e.stderr+"\n"+e.stdout).toLowerCase();return t.includes("no upstream")||t.includes("no tracking information")?"no-upstream":t.includes("authentication failed")||t.includes("permission denied")||t.includes("could not read from remote")||t.includes("invalid credentials")?"auth":t.includes("would be overwritten by merge")||t.includes("would be overwritten by checkout")||t.includes("commit your changes or stash them")?"local-changes":t.includes("divergent")||t.includes("not possible to fast-forward")||t.includes("non-fast-forward")?e.stderr.toLowerCase().includes("push")?"rejected":"diverged":t.includes("rejected")||t.includes("updates were rejected")?"rejected":"unknown"},m=async e=>{let t=await p(e,["rev-list","--left-right","--count","HEAD...@{upstream}"]);if(!t.ok)return{ahead:0,behind:0};let r=t.stdout.trim().split(/\s+/);return{ahead:parseInt(r[0],10)||0,behind:parseInt(r[1],10)||0}},h=e=>({name:e,ok:!1,skipped:!0,stdout:"",stderr:""}),f=async(e,t)=>{if("POST"!==e.method)return t.setHeader("Allow","POST"),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,l.hasSession)(r))return t.status(404).json({error:"Session not found"});let s=await (0,l.getSessionCwd)(r);if(!s)return t.status(500).json({error:"Failed to get CWD"});if(!(await p(s,["rev-parse","--is-inside-work-tree"])).ok)return t.status(400).json({error:"Not a git repository"});let a=await p(s,["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"]),i=a.ok?a.stdout.trim():null;if(!i){let e=await p(s,["rev-parse","--abbrev-ref","HEAD"]),r=e.ok?e.stdout.trim():"HEAD";return t.status(200).json({ok:!1,steps:[],summary:{pulled:0,pushed:0},upstream:null,branch:r,errorKind:"no-upstream"})}let n=[],o=await p(s,["fetch","--prune"]);if(n.push({name:"fetch",ok:o.ok,skipped:!1,stdout:o.stdout,stderr:o.stderr}),!o.ok)return d.warn(`fetch failed: ${o.stderr}`),n.push(h("pull")),n.push(h("push")),t.status(200).json({ok:!1,steps:n,summary:{pulled:0,pushed:0},upstream:i,errorKind:c(o)});let{behind:u}=await m(s),f=0;if(u>0){let e=await p(s,["pull","--ff-only"]);if(n.push({name:"pull",ok:e.ok,skipped:!1,stdout:e.stdout,stderr:e.stderr}),!e.ok)return d.warn(`pull failed: ${e.stderr}`),n.push(h("push")),t.status(200).json({ok:!1,steps:n,summary:{pulled:0,pushed:0},upstream:i,errorKind:c(e)});f=u}else n.push(h("pull"));let{ahead:w}=await m(s),y=0;if(w>0){let e=await p(s,["push"]);if(n.push({name:"push",ok:e.ok,skipped:!1,stdout:e.stdout,stderr:e.stderr}),!e.ok)return d.warn(`push failed: ${e.stderr}`),t.status(200).json({ok:!1,steps:n,summary:{pulled:f,pushed:0},upstream:i,errorKind:c(e)});y=w}else n.push(h("push"));return t.status(200).json({ok:!0,steps:n,summary:{pulled:f,pushed:y},upstream:i})};e.s(["default",0,f],362781);var w=e.i(362781),y=e.i(7031),g=e.i(181927),S=e.i(846432);let x=(0,a.hoist)(w,"default"),_=(0,a.hoist)(w,"config"),v=new s.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/git/sync",pathname:"/api/git/sync",bundlePath:"",filename:""},userland:w,distDir:".next",relativeProjectDir:""});async function L(e,r,s){s.requestMeta&&(0,S.setRequestMeta)(e,s.requestMeta),v.isDev&&(0,S.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let a="/api/git/sync";a=a.replace(/\/index$/,"")||"/";let i=await v.prepare(e,r,{srcPage:a});if(!i){r.statusCode=400,r.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve());return}let{query:n,params:l,prerenderManifest:o,routerServerContext:u}=i;try{let t,s=e.method||"GET",i=(0,y.getTracer)(),d=i.getActiveScopeSpan(),p=!!(null==u?void 0:u.isWrappedByNextServer),c=v.instrumentationOnRequestError.bind(v),m=async d=>v.render(e,r,{query:{...n,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:v.isDev,page:"/api/git/sync",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=i.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==g.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=`${s} ${n}`;d.setAttributes({"next.route":n,"http.route":n,"next.span_name":e}),d.updateName(e),t&&t!==d&&(t.setAttribute("http.route",n),t.updateName(e))}else d.updateName(`${s} ${a}`)});p&&d?await m(d):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(g.BaseServerSpan.handleRequest,{spanName:`${s} ${a}`,kind:y.SpanKind.SERVER,attributes:{"http.method":s,"http.target":e.url}},m),void 0,!p))}catch(e){if(v.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,_,"default",0,x,"handler",0,L],426427)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0c-bb5d._.js.map