purplemux 0.2.3 → 0.2.5

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 (474) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +84 -79
  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 +47 -7
  6. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-qfa-x._.js +3 -0
  7. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00nrs0h._.js +3 -0
  8. package/.next/standalone/.next/server/chunks/[root-of-the-server]__014kwh_._.js +3 -0
  9. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02v.lnb._.js +3 -0
  10. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03x8rds._.js +3 -0
  11. package/.next/standalone/.next/server/chunks/[root-of-the-server]__04cr_m8._.js +1 -1
  12. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06j59n1._.js +3 -0
  13. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07gfnob._.js +1 -1
  14. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07xijrd._.js +1 -1
  15. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08tdlcm._.js +1 -1
  16. package/.next/standalone/.next/server/chunks/[root-of-the-server]__09_6_.~._.js +3 -0
  17. package/.next/standalone/.next/server/chunks/[root-of-the-server]__09gkm_6._.js +1 -1
  18. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_uldiw._.js +15 -0
  19. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0a4t.z5._.js +52 -0
  20. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ar~lbk._.js +3 -0
  21. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0bo-su1._.js +1 -1
  22. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0c-bb5d._.js +1 -1
  23. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0dvelfj._.js +52 -0
  24. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e.7isl._.js +5 -0
  25. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gcec.8._.js +3 -0
  26. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0i1m1v9._.js +3 -0
  27. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ihlt6s._.js +1 -1
  28. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0kd7wei._.js +3 -0
  29. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0mky_tj._.js +35 -2
  30. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0oiiu_o._.js +3 -0
  31. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0oqgn2h._.js +3 -0
  32. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qvunc5._.js +1 -1
  33. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0r77-u1._.js +52 -0
  34. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0rhb4gk._.js +3 -0
  35. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0vi8p6v._.js +1 -1
  36. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0w0wz~a._.js +3 -0
  37. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0w3m-oz._.js +1 -1
  38. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zh8xur._.js +3 -0
  39. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~iu3jq._.js +3 -0
  40. package/.next/standalone/.next/server/chunks/[root-of-the-server]__11xw16l._.js +3 -0
  41. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12nr~pb._.js +1 -1
  42. package/.next/standalone/.next/server/chunks/{_0v81st0._.js → _0.pa6m1._.js} +1 -1
  43. package/.next/standalone/.next/server/chunks/_05ib7yu._.js +3 -0
  44. package/.next/standalone/.next/server/chunks/{_0ll-5~7._.js → _09y8.gr._.js} +1 -1
  45. package/.next/standalone/.next/server/chunks/{_0.5a4bu._.js → _0mwq11h._.js} +1 -1
  46. package/.next/standalone/.next/server/chunks/_0y4b49w._.js +3 -0
  47. package/.next/standalone/.next/server/chunks/_0zcb2f0._.js +3 -0
  48. package/.next/standalone/.next/server/chunks/{node_modules_ws_124xx2_._.js → _106a~ya._.js} +2 -2
  49. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_pages-api_00-t8sq.js +1 -1
  50. package/.next/standalone/.next/server/chunks/src_lib_00fhuqb._.js +3 -0
  51. package/.next/standalone/.next/server/chunks/src_lib_0dvlmi4._.js +15 -0
  52. package/.next/standalone/.next/server/chunks/src_lib_0ojl2hg._.js +52 -0
  53. package/.next/standalone/.next/server/chunks/src_lib_layout-store_ts_0fanx7c._.js +1 -1
  54. package/.next/standalone/.next/server/chunks/src_lib_status-manager_ts_003hlhy._.js +1 -13
  55. package/.next/standalone/.next/server/chunks/src_lib_workspace-store_ts_0vqt073._.js +1 -40
  56. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ap_bxo._.js +3 -0
  57. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0t9ru13._.js +1 -1
  58. package/.next/standalone/.next/server/chunks/ssr/_0-9ezhb._.js +3 -0
  59. package/.next/standalone/.next/server/chunks/ssr/{_101yu0w._.js → _0-kyl7i._.js} +2 -2
  60. package/.next/standalone/.next/server/chunks/ssr/_003~2_g._.js +3 -0
  61. package/.next/standalone/.next/server/chunks/ssr/_00zsk6a._.js +3 -0
  62. package/.next/standalone/.next/server/chunks/ssr/_017c8be._.js +3 -0
  63. package/.next/standalone/.next/server/chunks/ssr/_01eupc5._.js +3 -0
  64. package/.next/standalone/.next/server/chunks/ssr/_05bq96_._.js +1 -1
  65. package/.next/standalone/.next/server/chunks/ssr/{_0c1yivm._.js → _070zc_o._.js} +2 -2
  66. package/.next/standalone/.next/server/chunks/ssr/_07jud1p._.js +1 -1
  67. package/.next/standalone/.next/server/chunks/ssr/_0_sz4y0._.js +3 -0
  68. package/.next/standalone/.next/server/chunks/ssr/_0_uqm-4._.js +3 -0
  69. package/.next/standalone/.next/server/chunks/ssr/{_0ftinmo._.js → _0ed.wmt._.js} +2 -2
  70. package/.next/standalone/.next/server/chunks/ssr/_0egedv6._.js +3 -0
  71. package/.next/standalone/.next/server/chunks/ssr/{_0-ug5tr._.js → _0fota2a._.js} +2 -2
  72. package/.next/standalone/.next/server/chunks/ssr/_0h4kenr._.js +1 -1
  73. package/.next/standalone/.next/server/chunks/ssr/_0ihbr8k._.js +1 -1
  74. package/.next/standalone/.next/server/chunks/ssr/_0lpqhot._.js +3 -0
  75. package/.next/standalone/.next/server/chunks/ssr/_0mltzed._.js +3 -0
  76. package/.next/standalone/.next/server/chunks/ssr/_0nbe6mv._.js +3 -0
  77. package/.next/standalone/.next/server/chunks/ssr/_0pg-q18._.js +1 -1
  78. package/.next/standalone/.next/server/chunks/ssr/_0pp3e5j._.js +1 -1
  79. package/.next/standalone/.next/server/chunks/ssr/_0ttiybw._.js +18 -0
  80. package/.next/standalone/.next/server/chunks/ssr/_0w.1ts8._.js +1 -1
  81. package/.next/standalone/.next/server/chunks/ssr/_0w6jc9p._.js +1 -1
  82. package/.next/standalone/.next/server/chunks/ssr/_0xp3-y6._.js +3 -0
  83. package/.next/standalone/.next/server/chunks/ssr/_0y7o.rg._.js +3 -0
  84. package/.next/standalone/.next/server/chunks/ssr/_0ytb_c0._.js +3 -0
  85. package/.next/standalone/.next/server/chunks/ssr/{_0ozy~xe._.js → _0~hz1fq._.js} +2 -2
  86. package/.next/standalone/.next/server/chunks/ssr/_1289s74._.js +3 -0
  87. package/.next/standalone/.next/server/chunks/ssr/{_02jzd5g._.js → _13gee5r._.js} +2 -2
  88. package/.next/standalone/.next/server/chunks/ssr/messages_de_terminal_json_[json]_cjs_05jirtw._.js +1 -1
  89. package/.next/standalone/.next/server/chunks/ssr/messages_de_webBrowser_json_[json]_cjs_0wfz-ul._.js +1 -1
  90. package/.next/standalone/.next/server/chunks/ssr/messages_en_terminal_json_[json]_cjs_0~ls3g-._.js +1 -1
  91. package/.next/standalone/.next/server/chunks/ssr/messages_en_webBrowser_json_[json]_cjs_0oirdko._.js +1 -1
  92. package/.next/standalone/.next/server/chunks/ssr/messages_es_terminal_json_[json]_cjs_04g2b1_._.js +1 -1
  93. package/.next/standalone/.next/server/chunks/ssr/messages_es_webBrowser_json_[json]_cjs_0w_no_c._.js +1 -1
  94. package/.next/standalone/.next/server/chunks/ssr/messages_fr_terminal_json_[json]_cjs_0uhakya._.js +1 -1
  95. package/.next/standalone/.next/server/chunks/ssr/messages_fr_webBrowser_json_[json]_cjs_00tbjsf._.js +1 -1
  96. package/.next/standalone/.next/server/chunks/ssr/messages_ja_terminal_json_[json]_cjs_0776z4f._.js +1 -1
  97. package/.next/standalone/.next/server/chunks/ssr/messages_ja_webBrowser_json_[json]_cjs_0tp7~.s._.js +1 -1
  98. package/.next/standalone/.next/server/chunks/ssr/messages_ko_terminal_json_[json]_cjs_06611.3._.js +1 -1
  99. package/.next/standalone/.next/server/chunks/ssr/messages_ko_webBrowser_json_[json]_cjs_0ibtysu._.js +1 -1
  100. package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_terminal_json_[json]_cjs_034yyg9._.js +1 -1
  101. package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_webBrowser_json_[json]_cjs_0eu9fbw._.js +1 -1
  102. package/.next/standalone/.next/server/chunks/ssr/messages_ru_terminal_json_[json]_cjs_0emk8~n._.js +1 -1
  103. package/.next/standalone/.next/server/chunks/ssr/messages_ru_webBrowser_json_[json]_cjs_113-x8n._.js +1 -1
  104. package/.next/standalone/.next/server/chunks/ssr/messages_tr_terminal_json_[json]_cjs_0xpix8g._.js +1 -1
  105. package/.next/standalone/.next/server/chunks/ssr/messages_tr_webBrowser_json_[json]_cjs_12ziott._.js +1 -1
  106. package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_terminal_json_[json]_cjs_12vwl8a._.js +1 -1
  107. package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_webBrowser_json_[json]_cjs_0e5lp-q._.js +1 -1
  108. package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_terminal_json_[json]_cjs_0spg5z5._.js +1 -1
  109. package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_webBrowser_json_[json]_cjs_0u_cpuv._.js +1 -1
  110. package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_030gj7p._.js +3 -0
  111. package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_04tdvwp._.js +3 -0
  112. package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_0bdox2f._.js +3 -0
  113. package/.next/standalone/.next/server/chunks/ssr/{src_components_12mrirb._.js → src_components_0_nzv1r._.js} +1 -1
  114. package/.next/standalone/.next/server/chunks/ssr/{src_components_0_aiven._.js → src_components_0bqqfju._.js} +1 -1
  115. package/.next/standalone/.next/server/chunks/ssr/{src_components_0geizrr._.js → src_components_0rqxlj-._.js} +1 -1
  116. package/.next/standalone/.next/server/chunks/ssr/{src_components_11_1i~k._.js → src_components_0s~.n3e._.js} +1 -1
  117. package/.next/standalone/.next/server/chunks/ssr/src_components_features_mobile_mobile-terminal-page_tsx_02chzch._.js +1 -1
  118. package/.next/standalone/.next/server/chunks/ssr/src_components_features_workspace_terminal-page_tsx_0wuq-jl._.js +1 -1
  119. package/.next/standalone/.next/server/chunks/ssr/src_lib_message-namespaces_ts_0wjpvu5._.js +3 -0
  120. package/.next/standalone/.next/server/chunks/ssr/src_lib_workspace-store_ts_00x-rec._.js +10 -0
  121. package/.next/standalone/.next/server/middleware-build-manifest.js +84 -79
  122. package/.next/standalone/.next/server/pages/_app/build-manifest.json +4 -4
  123. package/.next/standalone/.next/server/pages/_app/client-build-manifest.json +1 -1
  124. package/.next/standalone/.next/server/pages/_app.js +2 -2
  125. package/.next/standalone/.next/server/pages/_app.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/pages/api/auth/login.js +2 -2
  127. package/.next/standalone/.next/server/pages/api/auth/login.js.nft.json +1 -1
  128. package/.next/standalone/.next/server/pages/api/auth/preflight.js +2 -2
  129. package/.next/standalone/.next/server/pages/api/auth/preflight.js.nft.json +1 -1
  130. package/.next/standalone/.next/server/pages/api/auth/setup.js +2 -2
  131. package/.next/standalone/.next/server/pages/api/auth/setup.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/pages/api/check-claude.js +5 -1
  133. package/.next/standalone/.next/server/pages/api/check-claude.js.nft.json +1 -1
  134. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/console/pages-manifest.json +3 -0
  135. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/console.js +8 -0
  136. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/console.js.map +5 -0
  137. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/console.js.nft.json +1 -0
  138. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/eval/pages-manifest.json +3 -0
  139. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/eval.js +8 -0
  140. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/eval.js.map +5 -0
  141. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/eval.js.nft.json +1 -0
  142. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/network/pages-manifest.json +3 -0
  143. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/network.js +8 -0
  144. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/network.js.map +5 -0
  145. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/network.js.nft.json +1 -0
  146. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/screenshot/pages-manifest.json +3 -0
  147. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/screenshot.js +8 -0
  148. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/screenshot.js.map +5 -0
  149. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/screenshot.js.nft.json +1 -0
  150. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/url/pages-manifest.json +3 -0
  151. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/url.js +8 -0
  152. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/url.js.map +5 -0
  153. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/url.js.nft.json +1 -0
  154. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/result.js +3 -3
  155. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/result.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/send.js +3 -3
  157. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/send.js.nft.json +1 -1
  158. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/status.js +3 -3
  159. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/status.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId].js +3 -3
  161. package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId].js.nft.json +1 -1
  162. package/.next/standalone/.next/server/pages/api/cli/tabs.js +3 -3
  163. package/.next/standalone/.next/server/pages/api/cli/tabs.js.nft.json +1 -1
  164. package/.next/standalone/.next/server/pages/api/cli/workspaces.js +2 -2
  165. package/.next/standalone/.next/server/pages/api/cli/workspaces.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/pages/api/config.js +2 -2
  167. package/.next/standalone/.next/server/pages/api/config.js.nft.json +1 -1
  168. package/.next/standalone/.next/server/pages/api/layout/diff.js +1 -1
  169. package/.next/standalone/.next/server/pages/api/layout/diff.js.nft.json +1 -1
  170. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId]/move.js +2 -2
  171. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId]/move.js.nft.json +1 -1
  172. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId].js +5 -5
  173. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId].js.nft.json +1 -1
  174. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/order.js +2 -2
  175. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/order.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs.js +5 -5
  177. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId].js +2 -2
  179. package/.next/standalone/.next/server/pages/api/layout/pane/[paneId].js.nft.json +1 -1
  180. package/.next/standalone/.next/server/pages/api/layout/pane.js +2 -2
  181. package/.next/standalone/.next/server/pages/api/layout/pane.js.nft.json +1 -1
  182. package/.next/standalone/.next/server/pages/api/layout.js +2 -2
  183. package/.next/standalone/.next/server/pages/api/layout.js.nft.json +1 -1
  184. package/.next/standalone/.next/server/pages/api/message-history.js +2 -2
  185. package/.next/standalone/.next/server/pages/api/message-history.js.nft.json +1 -1
  186. package/.next/standalone/.next/server/pages/api/preflight/runtime.js.nft.json +1 -1
  187. package/.next/standalone/.next/server/pages/api/stats/daily-report/cache.js.nft.json +1 -1
  188. package/.next/standalone/.next/server/pages/api/stats/daily-report/generate.js.nft.json +1 -1
  189. package/.next/standalone/.next/server/pages/api/stats/daily-report/list.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/pages/api/stats/projects.js.nft.json +1 -1
  191. package/.next/standalone/.next/server/pages/api/stats/sessions.js.nft.json +1 -1
  192. package/.next/standalone/.next/server/pages/api/stats/uptime.js.nft.json +1 -1
  193. package/.next/standalone/.next/server/pages/api/status/hook.js +6 -6
  194. package/.next/standalone/.next/server/pages/api/status/hook.js.nft.json +1 -1
  195. package/.next/standalone/.next/server/pages/api/status/statusline.js +6 -6
  196. package/.next/standalone/.next/server/pages/api/status/statusline.js.nft.json +1 -1
  197. package/.next/standalone/.next/server/pages/api/timeline/sessions.js.nft.json +1 -1
  198. package/.next/standalone/.next/server/pages/api/tmux/permission-options.js +3 -2
  199. package/.next/standalone/.next/server/pages/api/tmux/permission-options.js.nft.json +1 -1
  200. package/.next/standalone/.next/server/pages/api/tmux/plan-options.js +3 -2
  201. package/.next/standalone/.next/server/pages/api/tmux/plan-options.js.nft.json +1 -1
  202. package/.next/standalone/.next/server/pages/api/tmux/recover-unknown.js +5 -5
  203. package/.next/standalone/.next/server/pages/api/tmux/recover-unknown.js.nft.json +1 -1
  204. package/.next/standalone/.next/server/pages/api/tmux/reset.js +5 -5
  205. package/.next/standalone/.next/server/pages/api/tmux/reset.js.nft.json +1 -1
  206. package/.next/standalone/.next/server/pages/api/workspace/[workspaceId].js +2 -2
  207. package/.next/standalone/.next/server/pages/api/workspace/[workspaceId].js.nft.json +1 -1
  208. package/.next/standalone/.next/server/pages/api/workspace/active.js +2 -2
  209. package/.next/standalone/.next/server/pages/api/workspace/active.js.nft.json +1 -1
  210. package/.next/standalone/.next/server/pages/api/workspace/group/[groupId].js +2 -2
  211. package/.next/standalone/.next/server/pages/api/workspace/group/[groupId].js.nft.json +1 -1
  212. package/.next/standalone/.next/server/pages/api/workspace/group/reorder.js +2 -2
  213. package/.next/standalone/.next/server/pages/api/workspace/group/reorder.js.nft.json +1 -1
  214. package/.next/standalone/.next/server/pages/api/workspace/group.js +2 -2
  215. package/.next/standalone/.next/server/pages/api/workspace/group.js.nft.json +1 -1
  216. package/.next/standalone/.next/server/pages/api/workspace/reorder.js +2 -2
  217. package/.next/standalone/.next/server/pages/api/workspace/reorder.js.nft.json +1 -1
  218. package/.next/standalone/.next/server/pages/api/workspace/validate.js +2 -2
  219. package/.next/standalone/.next/server/pages/api/workspace/validate.js.nft.json +1 -1
  220. package/.next/standalone/.next/server/pages/api/workspace.js +5 -5
  221. package/.next/standalone/.next/server/pages/api/workspace.js.nft.json +1 -1
  222. package/.next/standalone/.next/server/pages/de/404.html +1 -1
  223. package/.next/standalone/.next/server/pages/de/500.html +1 -1
  224. package/.next/standalone/.next/server/pages/en/404.html +1 -1
  225. package/.next/standalone/.next/server/pages/en/500.html +1 -1
  226. package/.next/standalone/.next/server/pages/es/404.html +1 -1
  227. package/.next/standalone/.next/server/pages/es/500.html +1 -1
  228. package/.next/standalone/.next/server/pages/fr/404.html +1 -1
  229. package/.next/standalone/.next/server/pages/fr/500.html +1 -1
  230. package/.next/standalone/.next/server/pages/index/build-manifest.json +16 -15
  231. package/.next/standalone/.next/server/pages/index/client-build-manifest.json +1 -1
  232. package/.next/standalone/.next/server/pages/index/react-loadable-manifest.json +9 -9
  233. package/.next/standalone/.next/server/pages/index.js +13 -12
  234. package/.next/standalone/.next/server/pages/index.js.nft.json +1 -1
  235. package/.next/standalone/.next/server/pages/ja/404.html +1 -1
  236. package/.next/standalone/.next/server/pages/ja/500.html +1 -1
  237. package/.next/standalone/.next/server/pages/ko/404.html +1 -1
  238. package/.next/standalone/.next/server/pages/ko/500.html +1 -1
  239. package/.next/standalone/.next/server/pages/login/build-manifest.json +9 -8
  240. package/.next/standalone/.next/server/pages/login/client-build-manifest.json +1 -1
  241. package/.next/standalone/.next/server/pages/login.js +8 -7
  242. package/.next/standalone/.next/server/pages/login.js.nft.json +1 -1
  243. package/.next/standalone/.next/server/pages/pt-BR/404.html +1 -1
  244. package/.next/standalone/.next/server/pages/pt-BR/500.html +1 -1
  245. package/.next/standalone/.next/server/pages/reports/build-manifest.json +14 -13
  246. package/.next/standalone/.next/server/pages/reports/client-build-manifest.json +1 -1
  247. package/.next/standalone/.next/server/pages/reports/react-loadable-manifest.json +1 -1
  248. package/.next/standalone/.next/server/pages/reports.js +15 -14
  249. package/.next/standalone/.next/server/pages/reports.js.nft.json +1 -1
  250. package/.next/standalone/.next/server/pages/reset.js.nft.json +1 -1
  251. package/.next/standalone/.next/server/pages/ru/404.html +1 -1
  252. package/.next/standalone/.next/server/pages/ru/500.html +1 -1
  253. package/.next/standalone/.next/server/pages/stats/build-manifest.json +15 -14
  254. package/.next/standalone/.next/server/pages/stats/client-build-manifest.json +1 -1
  255. package/.next/standalone/.next/server/pages/stats/react-loadable-manifest.json +1 -1
  256. package/.next/standalone/.next/server/pages/stats.js +13 -12
  257. package/.next/standalone/.next/server/pages/stats.js.nft.json +1 -1
  258. package/.next/standalone/.next/server/pages/tools-required/build-manifest.json +6 -6
  259. package/.next/standalone/.next/server/pages/tools-required/client-build-manifest.json +1 -1
  260. package/.next/standalone/.next/server/pages/tools-required.js +4 -3
  261. package/.next/standalone/.next/server/pages/tools-required.js.nft.json +1 -1
  262. package/.next/standalone/.next/server/pages/tr/404.html +1 -1
  263. package/.next/standalone/.next/server/pages/tr/500.html +1 -1
  264. package/.next/standalone/.next/server/pages/webview/build-manifest.json +17 -16
  265. package/.next/standalone/.next/server/pages/webview/client-build-manifest.json +1 -1
  266. package/.next/standalone/.next/server/pages/webview/react-loadable-manifest.json +1 -1
  267. package/.next/standalone/.next/server/pages/webview.js +13 -12
  268. package/.next/standalone/.next/server/pages/webview.js.nft.json +1 -1
  269. package/.next/standalone/.next/server/pages/zh-CN/404.html +1 -1
  270. package/.next/standalone/.next/server/pages/zh-CN/500.html +1 -1
  271. package/.next/standalone/.next/server/pages/zh-TW/404.html +1 -1
  272. package/.next/standalone/.next/server/pages/zh-TW/500.html +1 -1
  273. package/.next/standalone/.next/server/pages-manifest.json +5 -0
  274. package/.next/standalone/.next/static/chunks/{11tnyk0iystp1.js → 0--r5y9cw3.0z.js} +1 -1
  275. package/.next/standalone/.next/static/chunks/{0w1ldes9u.mhe.js → 0-8v00lvs9_s0.js} +1 -1
  276. package/.next/standalone/.next/static/chunks/{0oy5nvsojxb2i.js → 0-rskn1p_p.qb.js} +1 -1
  277. package/.next/standalone/.next/static/chunks/{0h7n~i8gk~-a2.js → 0.4j~sc70rsrv.js} +1 -1
  278. package/.next/standalone/.next/static/chunks/{0g0xm7shj062y.js → 001_h.~thz3j3.js} +1 -1
  279. package/.next/standalone/.next/static/chunks/{0ynitrrzdxcnh.js → 00gxls80r--_0.js} +9 -8
  280. package/.next/standalone/.next/static/chunks/{121i8u8byuotx.js → 01rmp.m_ls7z_.js} +1 -1
  281. package/.next/standalone/.next/static/chunks/{0312riii_sl_1.js → 02o84r01jsc.z.js} +1 -1
  282. package/.next/standalone/.next/static/chunks/039-4cgt.dvjg.js +1 -0
  283. package/.next/standalone/.next/static/chunks/03t01d94eyxh2.js +1 -0
  284. package/.next/standalone/.next/static/chunks/04hn532e1vcts.js +1 -0
  285. package/.next/standalone/.next/static/chunks/05o56eq7.f3q2.js +1 -0
  286. package/.next/standalone/.next/static/chunks/{0x.dxrfqc.ix9.js → 0628quqp4ggh9.js} +1 -1
  287. package/.next/standalone/.next/static/chunks/06ak74s111wx-.js +1 -0
  288. package/.next/standalone/.next/static/chunks/07yop4v9xcwb9.js +1 -0
  289. package/.next/standalone/.next/static/chunks/08d6vee5l~1wn.js +1 -0
  290. package/.next/standalone/.next/static/chunks/09o2m0ingey8v.js +1 -0
  291. package/.next/standalone/.next/static/chunks/{0d5b6a8r1tk95.js → 09s7ub8rgh~u-.js} +1 -1
  292. package/.next/standalone/.next/static/chunks/{02su2lz3i24nj.js → 09zxrli-btome.js} +1 -1
  293. package/.next/standalone/.next/static/chunks/0_7~rgbkmfo_p.js +1 -0
  294. package/.next/standalone/.next/static/chunks/0a1xt.enr50l5.js +1 -0
  295. package/.next/standalone/.next/static/chunks/{0-p.9vdmq-_co.js → 0am7rh7xdv5lw.js} +4 -4
  296. package/.next/standalone/.next/static/chunks/{13u3mwvwu3kc..js → 0apqp49tgoz~z.js} +1 -1
  297. package/.next/standalone/.next/static/chunks/{0_67ozmvnvz16.js → 0bx27stclo8g5.js} +1 -1
  298. package/.next/standalone/.next/static/chunks/0ddh4qmi2awdq.js +1 -0
  299. package/.next/standalone/.next/static/chunks/0dwxj97xm70gv.js +1 -0
  300. package/.next/standalone/.next/static/chunks/0f3q6qhpk.i_r.js +1 -0
  301. package/.next/standalone/.next/static/chunks/{07.5h~7~q9~1e.js → 0f_7vuqno92ye.js} +1 -1
  302. package/.next/standalone/.next/static/chunks/0fsldybjx443~.js +1 -0
  303. package/.next/standalone/.next/static/chunks/0gfhd.gsbt9qg.js +1 -0
  304. package/.next/standalone/.next/static/chunks/0hv4~cszgs3im.js +1 -0
  305. package/.next/standalone/.next/static/chunks/0ic.mcu6-9din.js +1 -0
  306. package/.next/standalone/.next/static/chunks/0k4b.~5c4nvtm.js +1 -0
  307. package/.next/standalone/.next/static/chunks/0kqxfunh4731g.js +1 -0
  308. package/.next/standalone/.next/static/chunks/{0fn24h74ta78c.js → 0k~crb4s4z7gy.js} +1 -1
  309. package/.next/standalone/.next/static/chunks/0lrjdru2bjp.x.js +1 -0
  310. package/.next/standalone/.next/static/chunks/0lujhtd04orw5.js +1 -0
  311. package/.next/standalone/.next/static/chunks/0mwkajcworx_-.js +1 -0
  312. package/.next/standalone/.next/static/chunks/0nqofghl.17w_.js +1 -0
  313. package/.next/standalone/.next/static/chunks/0o1lsz827g-q_.js +1 -0
  314. package/.next/standalone/.next/static/chunks/0qqsez8ir1.fs.js +1 -0
  315. package/.next/standalone/.next/static/chunks/{0_htal_j04mkg.js → 0r3lm4_qr3y.a.js} +1 -1
  316. package/.next/standalone/.next/static/chunks/{06vxx-4w.uvj0.js → 0rahh2v7~f4tj.js} +17 -16
  317. package/.next/standalone/.next/static/chunks/{0pxbg4s8a4y54.js → 0rb41e1r1urhx.js} +1 -1
  318. package/.next/standalone/.next/static/chunks/0uii4rziiew3_.js +1 -0
  319. package/.next/standalone/.next/static/chunks/0vtkq~yk_1~gv.js +1 -0
  320. package/.next/standalone/.next/static/chunks/0vx2hhzc46h_7.js +1 -0
  321. package/.next/standalone/.next/static/chunks/0x_.wshvak6zp.js +1 -0
  322. package/.next/standalone/.next/static/chunks/0xa1.t1vj1mw0.js +1 -0
  323. package/.next/standalone/.next/static/chunks/0xpr6vw-p8oxk.js +1 -0
  324. package/.next/standalone/.next/static/chunks/{0uzs3jw4-93ly.js → 0zih6-g65txpb.js} +1 -1
  325. package/.next/standalone/.next/static/chunks/0zn1jt__-t51p.js +1 -0
  326. package/.next/standalone/.next/static/chunks/0zrhxc96zwjuv.js +1 -0
  327. package/.next/standalone/.next/static/chunks/0z~yy1lqrvp_a.js +1 -0
  328. package/.next/standalone/.next/static/chunks/0~cgr_3dpx0vl.js +1 -0
  329. package/.next/standalone/.next/static/chunks/{0te1jnz5.rt.r.js → 0~g0t2q6o3r-7.js} +6 -6
  330. package/.next/standalone/.next/static/chunks/0~vfb0ylk_9au.js +16 -0
  331. package/.next/standalone/.next/static/chunks/109f1pvy3e_vd.js +1 -0
  332. package/.next/standalone/.next/static/chunks/10em078j6cul4.js +1 -0
  333. package/.next/standalone/.next/static/chunks/{0a9t5laucshuf.js → 10todxw2604hk.js} +1 -1
  334. package/.next/standalone/.next/static/chunks/{05zne4hn1v65k.js → 10uz6x-h~dv0..js} +14 -13
  335. package/.next/standalone/.next/static/chunks/{0~nexgc77r_hk.js → 13q-ol3bkz8ft.js} +16 -15
  336. package/.next/standalone/.next/static/chunks/14if5vtky.3sn.js +1 -0
  337. package/.next/standalone/.next/static/chunks/{017n78o_7xb4_.js → 15hd85wggjanq.js} +1 -1
  338. package/.next/standalone/.next/static/chunks/15i_n03eg5uyp.js +1 -0
  339. package/.next/standalone/.next/static/chunks/15sblmrroyskk.js +1 -0
  340. package/.next/standalone/.next/static/chunks/1756nfyulu.9h.css +1 -0
  341. package/.next/standalone/.next/static/chunks/{0j.sfmmqj2xel.js → 17rh_.7tkk2m0.js} +15 -14
  342. package/.next/standalone/.next/static/chunks/turbopack-02..gqxjw9fev.js +1 -0
  343. package/.next/standalone/.next/static/chunks/turbopack-05luogg2yney~.js +1 -0
  344. package/.next/standalone/.next/static/chunks/turbopack-092b2t67-z3ds.js +1 -0
  345. package/.next/standalone/.next/static/chunks/turbopack-0eue2xixdnbd..js +1 -0
  346. package/.next/standalone/.next/static/chunks/{turbopack-15bv~a4hbvh29.js → turbopack-0i6l53-j6t6zg.js} +1 -1
  347. package/.next/standalone/.next/static/chunks/{turbopack-0d-xk62f1t05v.js → turbopack-0ser1ty-sh2jk.js} +1 -1
  348. package/.next/standalone/.next/static/chunks/{turbopack-0zcblahe.hdqd.js → turbopack-0zouy.~ram.7g.js} +1 -1
  349. package/.next/standalone/.next/static/{X7BRO7ORR4bKFt1LXzGU8 → onsm_2jNZvyggHqM9yibn}/_buildManifest.js +11 -6
  350. package/.next/standalone/messages/de/terminal.json +4 -0
  351. package/.next/standalone/messages/de/webBrowser.json +5 -1
  352. package/.next/standalone/messages/en/terminal.json +4 -0
  353. package/.next/standalone/messages/en/webBrowser.json +5 -1
  354. package/.next/standalone/messages/es/terminal.json +4 -0
  355. package/.next/standalone/messages/es/webBrowser.json +5 -1
  356. package/.next/standalone/messages/fr/terminal.json +4 -0
  357. package/.next/standalone/messages/fr/webBrowser.json +5 -1
  358. package/.next/standalone/messages/ja/terminal.json +4 -0
  359. package/.next/standalone/messages/ja/webBrowser.json +5 -1
  360. package/.next/standalone/messages/ko/terminal.json +4 -0
  361. package/.next/standalone/messages/ko/webBrowser.json +5 -1
  362. package/.next/standalone/messages/pt-BR/terminal.json +4 -0
  363. package/.next/standalone/messages/pt-BR/webBrowser.json +5 -1
  364. package/.next/standalone/messages/ru/terminal.json +4 -0
  365. package/.next/standalone/messages/ru/webBrowser.json +5 -1
  366. package/.next/standalone/messages/tr/terminal.json +4 -0
  367. package/.next/standalone/messages/tr/webBrowser.json +5 -1
  368. package/.next/standalone/messages/zh-CN/terminal.json +4 -0
  369. package/.next/standalone/messages/zh-CN/webBrowser.json +5 -1
  370. package/.next/standalone/messages/zh-TW/terminal.json +4 -0
  371. package/.next/standalone/messages/zh-TW/webBrowser.json +5 -1
  372. package/.next/standalone/package.json +5 -2
  373. package/.next/standalone/server.js +1 -1
  374. package/.next/standalone/src/config/tmux.conf +17 -7
  375. package/.next/standalone/src/lib/providers/claude/index.ts +44 -0
  376. package/.next/standalone/src/pages/api/layout/pane/[paneId]/tabs/index.ts +13 -6
  377. package/README.de.md +5 -4
  378. package/README.es.md +5 -4
  379. package/README.fr.md +5 -4
  380. package/README.ja.md +5 -4
  381. package/README.ko.md +5 -4
  382. package/README.md +5 -4
  383. package/README.pt-BR.md +5 -4
  384. package/README.ru.md +5 -4
  385. package/README.tr.md +5 -4
  386. package/README.zh-CN.md +5 -4
  387. package/README.zh-TW.md +5 -4
  388. package/bin/cli.js +95 -0
  389. package/dist/server.js +974 -852
  390. package/package.json +5 -2
  391. package/src/config/tmux.conf +17 -7
  392. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01.~37j._.js +0 -3
  393. package/.next/standalone/.next/server/chunks/[root-of-the-server]__016s4a9._.js +0 -3
  394. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02.9a5j._.js +0 -3
  395. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03l15.f._.js +0 -3
  396. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05ij_ys._.js +0 -42
  397. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06h3gzy._.js +0 -3
  398. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_fu3k.._.js +0 -3
  399. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_imm_0._.js +0 -3
  400. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0abp0lo._.js +0 -3
  401. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0auutl5._.js +0 -5
  402. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0d-inw8._.js +0 -3
  403. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g8mjyh._.js +0 -3
  404. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0lk7ru8._.js +0 -3
  405. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l~_wd0._.js +0 -3
  406. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ovn6yp._.js +0 -3
  407. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0un_g-o._.js +0 -3
  408. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12ksl6n._.js +0 -42
  409. package/.next/standalone/.next/server/chunks/_03-duro._.js +0 -3
  410. package/.next/standalone/.next/server/chunks/_07097f~._.js +0 -3
  411. package/.next/standalone/.next/server/chunks/_0z7d6.z._.js +0 -3
  412. package/.next/standalone/.next/server/chunks/src_lib_0p.xsqi._.js +0 -3
  413. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0da5cj~._.js +0 -3
  414. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12b2-y_._.js +0 -3
  415. package/.next/standalone/.next/server/chunks/ssr/_016o9_-._.js +0 -3
  416. package/.next/standalone/.next/server/chunks/ssr/_04iqb-o._.js +0 -3
  417. package/.next/standalone/.next/server/chunks/ssr/_04q3_kj._.js +0 -3
  418. package/.next/standalone/.next/server/chunks/ssr/_0a_u5qm._.js +0 -3
  419. package/.next/standalone/.next/server/chunks/ssr/_0d58w1~._.js +0 -3
  420. package/.next/standalone/.next/server/chunks/ssr/_0nib_x8._.js +0 -3
  421. package/.next/standalone/.next/server/chunks/ssr/_0nuztht._.js +0 -18
  422. package/.next/standalone/.next/server/chunks/ssr/_0oca87b._.js +0 -3
  423. package/.next/standalone/.next/server/chunks/ssr/_0ovjjn5._.js +0 -3
  424. package/.next/standalone/.next/server/chunks/ssr/_0pk4~_0._.js +0 -3
  425. package/.next/standalone/.next/server/chunks/ssr/_0qt-m3l._.js +0 -3
  426. package/.next/standalone/.next/server/chunks/ssr/_0sm8slq._.js +0 -3
  427. package/.next/standalone/.next/server/chunks/ssr/_10s2f96._.js +0 -3
  428. package/.next/standalone/.next/server/chunks/ssr/_13c-b~p._.js +0 -3
  429. package/.next/standalone/.next/server/chunks/ssr/_13lrp9_._.js +0 -3
  430. package/.next/standalone/.next/static/chunks/0-7en.d6a3jki.js +0 -1
  431. package/.next/standalone/.next/static/chunks/0-pm5wxsyxs3e.js +0 -1
  432. package/.next/standalone/.next/static/chunks/01ul8lmr04ls3.js +0 -1
  433. package/.next/standalone/.next/static/chunks/05b7zy0n0vhms.js +0 -1
  434. package/.next/standalone/.next/static/chunks/05kshd9vdrl4o.js +0 -1
  435. package/.next/standalone/.next/static/chunks/05w~qu2zpvh2f.js +0 -1
  436. package/.next/standalone/.next/static/chunks/08f708~_7uy_i.js +0 -1
  437. package/.next/standalone/.next/static/chunks/0af.3khnmptnl.js +0 -1
  438. package/.next/standalone/.next/static/chunks/0cvx059r5hgj1.js +0 -1
  439. package/.next/standalone/.next/static/chunks/0dp178b-0_ltl.js +0 -1
  440. package/.next/standalone/.next/static/chunks/0ebjicjua7yl-.js +0 -1
  441. package/.next/standalone/.next/static/chunks/0gn-f6_m696k0.js +0 -1
  442. package/.next/standalone/.next/static/chunks/0kaufevqdhsld.js +0 -1
  443. package/.next/standalone/.next/static/chunks/0n2k1al4sr_qq.css +0 -1
  444. package/.next/standalone/.next/static/chunks/0n4fv8.loh_0x.js +0 -1
  445. package/.next/standalone/.next/static/chunks/0nn618je7_7ec.js +0 -16
  446. package/.next/standalone/.next/static/chunks/0pv9~yath4mjh.js +0 -1
  447. package/.next/standalone/.next/static/chunks/0q0yh17_ncipj.js +0 -1
  448. package/.next/standalone/.next/static/chunks/0qkrdmhiv-0d3.js +0 -1
  449. package/.next/standalone/.next/static/chunks/0r9z55-r31en8.js +0 -1
  450. package/.next/standalone/.next/static/chunks/0ra09kjja5rf..js +0 -1
  451. package/.next/standalone/.next/static/chunks/0sc7tkg1gojr..js +0 -1
  452. package/.next/standalone/.next/static/chunks/0u.snf3d~5nvq.js +0 -1
  453. package/.next/standalone/.next/static/chunks/0u9yrtrs1bktp.js +0 -1
  454. package/.next/standalone/.next/static/chunks/0v.l~.~v98c2c.js +0 -1
  455. package/.next/standalone/.next/static/chunks/0wu~4k-l8otuy.js +0 -1
  456. package/.next/standalone/.next/static/chunks/0wvu-lowt9uem.js +0 -1
  457. package/.next/standalone/.next/static/chunks/0x7cvsf..ezd..js +0 -1
  458. package/.next/standalone/.next/static/chunks/0yb~gw6ukzdmo.js +0 -1
  459. package/.next/standalone/.next/static/chunks/0yg3hj1g~k1ip.js +0 -1
  460. package/.next/standalone/.next/static/chunks/0z_~g~mb.kjs1.js +0 -1
  461. package/.next/standalone/.next/static/chunks/0~c6h8j7ut2ca.js +0 -1
  462. package/.next/standalone/.next/static/chunks/0~lnp45fxxtgz.js +0 -1
  463. package/.next/standalone/.next/static/chunks/0~ts_4hi7.u_0.js +0 -1
  464. package/.next/standalone/.next/static/chunks/13_l03e3sab-g.js +0 -1
  465. package/.next/standalone/.next/static/chunks/156~ejmpjxu8e.js +0 -1
  466. package/.next/standalone/.next/static/chunks/15m4y6otktj8z.js +0 -1
  467. package/.next/standalone/.next/static/chunks/16bag6z7n~ffw.js +0 -1
  468. package/.next/standalone/.next/static/chunks/17ebdp-_o5o30.js +0 -1
  469. package/.next/standalone/.next/static/chunks/turbopack-0nn9kx.dkgwqs.js +0 -1
  470. package/.next/standalone/.next/static/chunks/turbopack-0rb3q18bhb2hu.js +0 -1
  471. package/.next/standalone/.next/static/chunks/turbopack-0~wmco6ifn20m.js +0 -1
  472. package/.next/standalone/.next/static/chunks/turbopack-1469mxaruw82d.js +0 -1
  473. /package/.next/standalone/.next/static/{X7BRO7ORR4bKFt1LXzGU8 → onsm_2jNZvyggHqM9yibn}/_clientMiddlewareManifest.js +0 -0
  474. /package/.next/standalone/.next/static/{X7BRO7ORR4bKFt1LXzGU8 → onsm_2jNZvyggHqM9yibn}/_ssgManifest.js +0 -0
@@ -0,0 +1,52 @@
1
+ module.exports=[160874,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(25146),i=e.i(825265);(0,r.createLogger)("claude-prompt");let s=e=>a.default.join((0,i.resolveLayoutDir)(e),"claude-prompt.md"),o=async e=>{let r=s(e.id);await t.default.mkdir(a.default.dirname(r),{recursive:!0});let i=`# purplemux context
2
+
3
+ You are running inside a purplemux workspace tab.
4
+
5
+ - **Workspace ID**: \`${e.id}\`
6
+
7
+ Use \`purplemux workspaces\` if you need the workspace name or directories.
8
+
9
+ ## purplemux CLI
10
+
11
+ The \`purplemux\` CLI lets you inspect and control other tabs in this workspace.
12
+ It reads port and token from \`~/.purplemux/{port,cli-token}\` automatically,
13
+ so no environment setup is needed.
14
+
15
+ ### Commands
16
+
17
+ \`\`\`bash
18
+ purplemux workspaces # list all workspaces
19
+ purplemux tab list -w ${e.id} # list tabs in this workspace
20
+ purplemux tab create -w ${e.id} [-n NAME] [-t TYPE] # create a tab (type: terminal | claude-code | web-browser | diff)
21
+ purplemux tab send -w ${e.id} TAB_ID CONTENT... # send input to a tab
22
+ purplemux tab status -w ${e.id} TAB_ID # tab status
23
+ purplemux tab result -w ${e.id} TAB_ID # capture current pane content
24
+ purplemux tab close -w ${e.id} TAB_ID # close a tab
25
+ \`\`\`
26
+
27
+ For the full HTTP API reference (including endpoint paths and payloads),
28
+ run:
29
+
30
+ \`\`\`bash
31
+ purplemux api-guide
32
+ \`\`\`
33
+
34
+ ### When to use
35
+
36
+ - Delegate work to another tab when a task benefits from isolation
37
+ (long-running builds, different project context, parallel exploration).
38
+ - Poll \`status\` and read \`result\` to verify delegated work.
39
+ - Prefer small, scoped tabs over cramming everything into one session.
40
+
41
+ ### Tab type notes
42
+
43
+ - **\`web-browser\` tabs**: Electron webviews, not tmux. The \`alive\` field in
44
+ \`tab list\` / \`tab status\` is always \`false\` for these — that is the normal
45
+ value, not a sign the tab is dead. Do not gate actions on \`alive\`. Use the
46
+ browser-specific HTTP endpoints (\`/browser/url\`, \`/browser/screenshot\`, …;
47
+ see \`purplemux api-guide\`) directly.
48
+ - **\`terminal\` / \`claude-code\` tabs**: run inside tmux, so \`alive\` is a valid
49
+ liveness signal.
50
+ `;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,s,"writeClaudePromptFile",0,o])},322429,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(446786),i=e.i(44014),s=e.i(459015),o=e.i(25146),l=e.i(666126),n=e.i(825265),u=e.i(804767),d=e.i(160874);let c=(0,o.createLogger)("workspace"),p="Workspace ",w=a.default.join(r.default.homedir(),".purplemux"),f=a.default.join(w,"workspaces.json"),y=a.default.join(w,"layout.json"),m=a.default.join(w,"tabs.json"),k=globalThis;k.__purplemuxWorkspaceLock||(k.__purplemuxWorkspaceLock=Promise.resolve());let g=async e=>{let t,a=new Promise(e=>{t=e}),r=k.__purplemuxWorkspaceLock;k.__purplemuxWorkspaceLock=a,await r;try{return await e()}finally{t()}},h=()=>({workspaces:[],groups:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),b=e=>(e.groups||(e.groups=[]),e.groups),v=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{c.warn("Failed to parse workspaces.json, starting empty");try{await t.default.copyFile(f,f.replace(/\.json$/,".json.bak"))}catch{}return null}},I=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:o,sidebarWidth:n}=e,u=JSON.stringify({workspaces:r,groups:i??[],activeWorkspaceId:s,sidebarCollapsed:o,sidebarWidth:n});if(k.__purplemuxWorkspacesContentCache===u)return;e.updatedAt=new Date().toISOString();let d=f+".tmp";try{await t.default.writeFile(d,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(d,f)}catch(e){throw await t.default.unlink(d).catch(()=>{}),e}k.__purplemuxWorkspacesContentCache=u,(0,l.broadcastSync)({type:"workspace"})},W=async()=>{let e=await (0,n.readLayoutFile)(y);if(!e)return null;let a="ws-default";await t.default.mkdir((0,n.resolveLayoutDir)(a),{recursive:!0}),await (0,n.writeLayoutFile)(e,(0,n.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 I(i),c.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},x=async()=>{try{let e=await t.default.readFile(m,"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()},o=y+".tmp";try{await t.default.writeFile(o,JSON.stringify(s,null,2),{mode:384}),await t.default.rename(o,y)}catch(e){throw await t.default.unlink(o).catch(()=>{}),e}return c.info("tabs.json → layout.json migration complete"),await W()}catch{return null}},$=async()=>{await t.default.mkdir(a.default.join(w,"workspaces"),{recursive:!0});let e=await v();if(!e&&(await t.default.access(y).then(()=>!0).catch(()=>!1)?e=await W():await t.default.access(m).then(()=>!0).catch(()=>!1)&&(e=await x())),!e){let t=h();await I(t),e=t,c.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,n.resolveLayoutFile)(t.id),a=await (0,n.readLayoutFile)(e);if(!a){c.warn(`Workspace '${t.name}': layout.json corrupted, reset to default pane`),a=await (0,n.createDefaultLayout)(t.id,t.directories[0]),await (0,n.writeLayoutFile)(a,e);continue}let i=(0,u.collectAllTabs)(a.root).map(e=>e.sessionName),s=`pt-${t.id}-`,o=r.filter(e=>i.includes(e)||e.startsWith(s));try{await (0,n.crossCheckLayout)(a,o,t.id,t.directories[0])&&await (0,n.writeLayoutFile)(a,e)}catch(e){c.error(`Workspace '${t.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},L=async()=>{let e=await v();return e?{workspaces:e.workspaces,groups:e.groups??[],activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],groups:[],sidebarCollapsed:!1,sidebarWidth:220}},F=async()=>{let e=await v();return e?.activeWorkspaceId&&e.workspaces.some(t=>t.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},C=async e=>{let t=await v();return t?.workspaces.find(t=>t.id===e)},D=async(e,a,r)=>g(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 o=await v()??h(),l=`ws-${(0,i.nanoid)(6)}`,u=a?.trim()||(e=>{let t=0;for(let a of e)if(a.name.startsWith(p)){let e=parseInt(a.name.slice(p.length),10);e>t&&(t=e)}return`${p}${t+1}`})(o.workspaces),w=await (0,n.createDefaultLayout)(l,e,r);await t.default.mkdir((0,n.resolveLayoutDir)(l),{recursive:!0}),await (0,n.writeLayoutFile)(w,(0,n.resolveLayoutFile)(l));let f={id:l,name:u,directories:[e]};return o.workspaces.push(f),await I(o),await (0,d.writeClaudePromptFile)(f),c.debug(`Created: ${l} (${u}, ${e})`),f}),S=async e=>g(async()=>{let t=await v()??h(),a=t.workspaces.findIndex(t=>t.id===e);if(-1===a)return!1;let r=t.workspaces[a],i=await (0,n.readLayoutFile)((0,n.resolveLayoutFile)(e));if(i)for(let e of(0,u.collectAllTabs)(i.root))try{await (0,s.killSession)(e.sessionName)}catch{}try{await (0,n.removeLayoutFile)(e)}catch{}return t.workspaces.splice(a,1),await I(t),c.info(`Deleted: ${e} (${r.name})`),!0}),A=async(e,t)=>g(async()=>{let a=await v();if(!a)return null;let r=a.workspaces.find(t=>t.id===e);return r?(r.name=t,await I(a),await (0,d.writeClaudePromptFile)(r),c.debug(`Renamed: ${e} → "${t}"`),{...r}):null}),T=async e=>g(async()=>{let t=await v()??h();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 I(t)}),j=async(e,t)=>g(async()=>{let a=await v();if(!a)return;let r=a.workspaces.find(t=>t.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(t)&&(r.directories=t,await I(a),await (0,d.writeClaudePromptFile)(r))}),P=async e=>g(async()=>{let t=await v()??h(),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 I(t),!0)}),_=async e=>g(async()=>{let t=await v()??h(),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 I(t),c.debug(`Group created: ${s.id} (${s.name})`),s}),N=async(e,t)=>g(async()=>{let a=await v();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 I(a),{...r}):r}),O=async(e,t)=>g(async()=>{let a=await v();if(!a)return!1;let r=(a.groups??[]).find(t=>t.id===e);return!!r&&(r.collapsed===t||(r.collapsed=t,await I(a),!0))}),G=async e=>g(async()=>{let t=await v();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 I(t),c.info(`Group ungrouped: ${e}`),!0}),E=async e=>g(async()=>{let t=await v();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 I(t),!0)}),J=async(e,t)=>g(async()=>{let a=await v();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 I(a),!0)}),B=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,_,"createWorkspace",0,D,"deleteWorkspace",0,S,"getActiveWorkspaceId",0,F,"getWorkspaceById",0,C,"getWorkspaces",0,L,"initWorkspaceStore",0,$,"renameGroup",0,N,"renameWorkspace",0,A,"reorderGroups",0,E,"reorderWorkspaces",0,P,"setGroupCollapsed",0,O,"setWorkspaceGroup",0,J,"ungroupGroup",0,G,"updateActive",0,T,"updateWorkspaceDirectories",0,j,"validateDirectory",0,B],322429)}];
51
+
52
+ //# sourceMappingURL=src_lib_0ojl2hg._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[825265,804767,e=>{"use strict";var t=e.i(924868),a=e.i(814747),n=e.i(446786),i=e.i(44014),r=e.i(459015),l=e.i(666126),o=e.i(25146);let s=e=>"pane"===e.type?[e]:[...s(e.children[0]),...s(e.children[1])],d=e=>s(e).flatMap(e=>e.tabs),c=(e,t)=>"pane"===e.type?e.id===t?e:null:c(e.children[0],t)||c(e.children[1],t),u=e=>"pane"===e.type?e.id:u(e.children[0]),p=e=>"pane"===e.type?e.id:p(e.children[1]),w=(e,t,a)=>"pane"===e.type?e.id===t?a:e:{...e,children:[w(e.children[0],t,a),w(e.children[1],t,a)]},y=(e,t)=>{if("pane"===e.type)return null;let[a,n]=e.children;if("pane"===a.type&&a.id===t)return n;if("pane"===n.type&&n.id===t)return a;let i=y(a,t);if(i)return{...e,children:[i,n]};let r=y(n,t);return r?{...e,children:[a,r]}:null},f=(e,t)=>{if("pane"===e.type)return null;let[a,n]=e.children;return"pane"===a.type&&a.id===t?u(n):"pane"===n.type&&n.id===t?p(a):f(a,t)||f(n,t)},b=(e,t)=>{let a=f(e.root,t),n=y(e.root,t);n&&(e.root=n),e.activePaneId===t&&(e.activePaneId=a??s(e.root)[0]?.id??null)},m=(e,t,a)=>{if("split"!==e.type)return e;if(0===t.length)return{...e,ratio:a};let[n,...i]=t,r=[e.children[0],e.children[1]];return r[n]=m(e.children[n],i,a),{...e,children:r}},h=(e,t)=>"pane"===e.type||e.orientation!==t?1:h(e.children[0],t)+h(e.children[1],t),v=e=>{if("pane"===e.type)return!0;let t=h(e.children[0],e.orientation),a=h(e.children[1],e.orientation);return!(Math.abs(e.ratio-t/(t+a)*100)>1)&&v(e.children[0])&&v(e.children[1])},I=e=>{if("pane"===e.type)return e;let t=h(e.children[0],e.orientation),a=Math.round(t/(t+h(e.children[1],e.orientation))*1e4)/100;return{...e,ratio:a,children:[I(e.children[0]),I(e.children[1])]}};e.s(["collectAllTabs",0,d,"collectPanes",0,s,"equalizeNode",0,I,"findPane",0,c,"getFirstPaneId",0,u,"isEqualized",0,v,"removePaneWithFocus",0,b,"replacePane",0,w,"updateRatioAtPath",0,m],804767);let S=(0,o.createLogger)("layout"),T=a.default.join(n.default.homedir(),".purplemux"),g=globalThis;g.__ptLayoutLock||(g.__ptLayoutLock=Promise.resolve()),g.__ptLayoutContentCache||(g.__ptLayoutContentCache=new Map),void 0===g.__ptLayoutReconciler&&(g.__ptLayoutReconciler=null);let P=async e=>{let t,a=new Promise(e=>{t=e}),n=g.__ptLayoutLock;g.__ptLayoutLock=a,await n;try{return await e()}finally{t()}},L=()=>`pane-${(0,i.nanoid)(6)}`,N=()=>`tab-${(0,i.nanoid)(6)}`,_=e=>a.default.join(T,"workspaces",e),k=e=>a.default.join(_(e),"layout.json"),C=(e,t)=>{let a=L(),n=((e,t,a=0,n)=>{let i=N(),l={id:i,sessionName:(0,r.workspaceSessionName)(e,t,i),name:"",order:a};return n&&(l.cwd=n),l})(e,a,0,t);return{pane:{type:"pane",id:a,tabs:[n],activeTabId:n.id},tab:n}},A=async e=>{let a;try{a=await t.default.readFile(e,"utf-8")}catch{return null}try{return JSON.parse(a)}catch{S.warn(`${e} parse failed`);try{await t.default.copyFile(e,e.replace(/\.json$/,".json.bak"))}catch{}return null}},O=async(e,n)=>{let i,r=JSON.stringify({root:e.root,activePaneId:e.activePaneId}),o=g.__ptLayoutContentCache;if(o.get(n)===r)return;await t.default.mkdir(a.default.dirname(n),{recursive:!0});let s=n+".tmp";try{await t.default.writeFile(s,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(s,n)}catch(e){throw await t.default.unlink(s).catch(()=>{}),e}o.set(n,r);let c=(i=n.match(/workspaces\/(ws-[^/]+)\//),i?.[1]??null);if(c){let t=g.__ptLayoutReconciler;if(t){let a=d(e.root).map(e=>e.id);t.reconcileWorkspaceTabs(c,a)}(0,l.broadcastSync)({type:"layout",workspaceId:c})}},D=async e=>{await t.default.rm(_(e),{recursive:!0,force:!0}),F(e);let a=g.__ptLayoutReconciler;a&&a.removeWorkspaceTabs(e),(0,l.broadcastSync)({type:"layout",workspaceId:e})},F=e=>{let t=k(e);g.__ptLayoutContentCache.delete(t)},M=(t,a)=>{let n=[...new Set(d(a).map(e=>e.cwd).filter(e=>!!e))];n.length>0&&e.A(981532).then(({updateWorkspaceDirectories:e})=>{e(t,n).catch(()=>{})}).catch(()=>{})},R=async(e,t,a,n)=>{let i=!1,l=new Set(t),o=s(e.root),d=new Set;for(let e of o)for(let t of e.tabs)if("web-browser"!==t.panelType&&(d.add(t.sessionName),!l.has(t.sessionName)&&"claude-code"===t.panelType)){let e=t.cwd||n;S.debug(`crossCheck: Claude tab session recreated: ${t.sessionName} (cwd: ${e})`),await (0,r.createSession)(t.sessionName,80,24,e),i=!0}let c=t.filter(e=>!d.has(e));if(c.length>0){i=!0;let e=o[0];if(e){let t=e.tabs.length>0?Math.max(...e.tabs.map(e=>e.order)):-1;for(let a of c)t++,e.tabs.push({id:N(),sessionName:a,name:"",order:t});!e.activeTabId&&e.tabs.length>0&&(e.activeTabId=e.tabs[0].id)}}if(i){e.updatedAt=new Date().toISOString();let t=s(e.root);e.activePaneId&&!t.some(t=>t.id===e.activePaneId)&&(e.activePaneId=t[0]?.id??null)}return i},U=async(e,t,a)=>{let{pane:n,tab:i}=C(e,t);return a?.panelType&&(i.panelType=a.panelType),await (0,r.createSession)(i.sessionName,80,24,t),{root:n,activePaneId:n.id,updatedAt:new Date().toISOString()}},$=async(e,t)=>P(async()=>{let a=k(e),n=await A(a);if(n)return n;let{pane:i,tab:l}=C(e,t);await (0,r.createSession)(l.sessionName,80,24,t);let o={root:i,activePaneId:i.id,updatedAt:new Date().toISOString()};return await O(o,a),o}),j=async(e,t)=>{let a=L(),n=N(),i=(0,r.workspaceSessionName)(e,a,n);return await (0,r.createSession)(i,80,24,t),{paneId:a,tab:{id:n,sessionName:i,name:"",order:0,...t?{cwd:t}:{}}}},x=async(e,t=[])=>{for(let e of t)try{await (0,r.killSession)(e)}catch{}},W=async(e,t,a,n,i,l)=>P(async()=>{let o=k(e),d=await A(o);if(!d)return null;let c=s(d.root).find(e=>e.id===t);if(!c)return null;let u="web-browser"===i,p=N(),w=(0,r.workspaceSessionName)(e,t,p);!u&&(await (0,r.createSession)(w,80,24,n),l&&await (0,r.sendKeys)(w,l));let y=c.tabs.length>0?Math.max(...c.tabs.map(e=>e.order))+1:0,f={id:p,sessionName:w,name:a?.trim()||(u?"Web Browser":""),order:y,...n?{cwd:n}:{},...i?{panelType:i}:{}};return c.tabs.push(f),c.activeTabId=p,d.updatedAt=new Date().toISOString(),await O(d,o),M(e,d.root),f}),E=async(e,t,a)=>{let n=await P(async()=>{let n=k(e),i=await A(n);if(!i)return null;let r=s(i.root).find(e=>e.id===t);if(!r)return null;let l=r.tabs.find(e=>e.id===a);return l?{sessionName:l.sessionName,panelType:l.panelType}:null});return!!n&&("web-browser"!==n.panelType&&await (0,r.killSession)(n.sessionName),P(async()=>{let n=k(e),i=await A(n);if(!i)return!1;let r=s(i.root).find(e=>e.id===t);if(!r)return!1;let l=r.tabs.findIndex(e=>e.id===a);return -1!==l&&(r.tabs.splice(l,1),r.activeTabId===a&&(r.activeTabId=r.tabs[0]?.id??null),0===r.tabs.length&&s(i.root).length>1&&b(i,t),r.tabs.forEach((e,t)=>{e.order=t}),i.updatedAt=new Date().toISOString(),await O(i,n),M(e,i.root),!0)}))},q=async(e,t,a,n)=>P(async()=>{let i=k(e),l=await A(i);if(!l)return!1;let o=s(l.root).find(e=>e.id===t);if(!o)return!1;let d=o.tabs.find(e=>e.id===a);return!!d&&(!!await (0,r.hasSession)(d.sessionName)||(await (0,r.createSession)(d.sessionName,80,24,d.cwd),n&&await (0,r.sendKeys)(d.sessionName,n),!0))}),z=e=>{let t=e.match(/^pt-(ws-.*?)-(pane-.*?)-(tab-.+)$/);return t?{wsId:t[1],paneId:t[2],tabId:t[3]}:null},B=async(e,t)=>{let a=z(e);a&&await P(async()=>{let n=k(a.wsId),i=await A(n);if(!i)return;let r=d(i.root).find(t=>t.sessionName===e);r&&(r.claudeSessionId=t,i.updatedAt=new Date().toISOString(),await O(i,n))})},J=async(e,t)=>{let a=z(e);a&&await P(async()=>{let n=k(a.wsId),i=await A(n);if(!i)return;let r=d(i.root).find(t=>t.sessionName===e);r&&r.claudeSummary!==t&&(r.claudeSummary=t,i.updatedAt=new Date().toISOString(),await O(i,n))})},K=async(e,t)=>{let a=z(e);a&&await P(async()=>{let n=k(a.wsId),i=await A(n);if(!i)return;let r=d(i.root).find(t=>t.sessionName===e);r&&r.lastUserMessage!==t&&(r.lastUserMessage=t,i.updatedAt=new Date().toISOString(),await O(i,n))})},G=async(e,t,a)=>{let n=z(e);n&&await P(async()=>{let i=k(n.wsId),r=await A(i);if(!r)return;let l=d(r.root).find(t=>t.sessionName===e);l&&(l.cliState!==t||l.dismissedAt!==a)&&(l.cliState=t,l.dismissedAt=a,r.updatedAt=new Date().toISOString(),await O(r,i))})},H=async(e,t)=>P(async()=>{let a=k(e),n=await A(a);if(!n)return null;let i=t(n);return i?(i.updatedAt=new Date().toISOString(),await O(i,a),M(e,i.root),i):null}),Q=async(e,t)=>H(e,e=>{if(void 0!==t.activePaneId){if(!c(e.root,t.activePaneId))return null;e.activePaneId=t.activePaneId}return t.ratioUpdate&&(e.root=m(e.root,t.ratioUpdate.path,t.ratioUpdate.ratio)),t.equalize&&(e.root=I(e.root)),e}),V=async(e,t,a)=>H(e,e=>{let n=c(e.root,t);if(!n)return null;if(void 0!==a.activeTabId){if(!n.tabs.some(e=>e.id===a.activeTabId))return null;n.activeTabId=a.activeTabId}return e}),X=async(e,t,a,n,i)=>{let l="web-browser"===i,o=L(),s=N(),d=(0,r.workspaceSessionName)(e,o,s);l||await (0,r.createSession)(d,80,24,n);let u={id:s,sessionName:d,name:l?"Web Browser":"",order:0,...n?{cwd:n}:{}};i&&(u.panelType=i);let p={type:"pane",id:o,tabs:[u],activeTabId:s},y=await H(e,e=>{let i=c(e.root,t);if(!i)return null;let r=v(e.root);if(n){let e=i.tabs.find(e=>e.id===i.activeTabId);e&&(e.cwd=n)}let l={type:"split",orientation:a,ratio:50,children:[{...i},p]};return e.root=w(e.root,t,l),r&&(e.root=I(e.root)),e.activePaneId=o,e});return y||l||await (0,r.killSession)(d).catch(()=>{}),y},Y=async(e,t)=>{let a=[],n=await P(async()=>{let n=k(e),i=await A(n);if(!i)return null;let r=c(i.root,t);if(!r||s(i.root).length<=1)return null;a=r.tabs.filter(e=>"web-browser"!==e.panelType).map(e=>e.sessionName);let l=v(i.root);return b(i,t),l&&(i.root=I(i.root)),i.updatedAt=new Date().toISOString(),await O(i,n),M(e,i.root),i});return await Promise.all(a.map(e=>(0,r.killSession)(e).catch(()=>{}))),n},Z=async(e,t,a)=>H(e,e=>{let n=c(e.root,t);if(!n)return null;let i=new Map(n.tabs.map(e=>[e.id,e])),r=a.map((e,t)=>{let a=i.get(e);return a?{...a,order:t}:null}).filter(e=>null!==e);return r.length!==n.tabs.length?null:(n.tabs=r,e)}),ee=async(e,t,a,n,i)=>H(e,e=>{let r=c(e.root,a),l=c(e.root,n);if(!r||!l)return null;let o=r.tabs.findIndex(e=>e.id===t);if(-1===o)return null;let[d]=r.tabs.splice(o,1);return r.activeTabId===t&&(r.activeTabId=r.tabs[0]?.id??null),r.tabs.forEach((e,t)=>{e.order=t}),l.tabs.splice(i,0,d),l.tabs.forEach((e,t)=>{e.order=t}),l.activeTabId=t,0===r.tabs.length&&s(e.root).length>1&&b(e,a),e.activePaneId=n,e}),et=async(t,a,n,i)=>{let r,l;if(void 0!==i.cwd||void 0!==i.title){let o=await (async()=>{let e=k(t),i=await A(e);return i?c(i.root,a)?.tabs.find(e=>e.id===n)?.sessionName??null:null})();if(o){let{getSessionCwd:t,getPaneCurrentCommand:a}=await e.A(322522),{formatTabTitle:n}=await e.A(245061);if(void 0!==i.cwd&&(r=await t(o)),void 0!==i.title){let[e,i]=await Promise.all([a(o),void 0!==r?Promise.resolve(r):t(o)]);e&&i&&(l=n(`${e}|${i}`))}}}return H(t,e=>{let t=c(e.root,a);if(!t)return null;let o=t.tabs.find(e=>e.id===n);if(!o)return null;let s=void 0!==i.title?l??i.title:void 0;return void 0!==i.name&&(o.name=i.name),void 0!==i.panelType&&(o.panelType=i.panelType),void 0!==s&&(o.title=s),void 0!==i.cwd&&(o.cwd=r??i.cwd),void 0!==i.lastCommand&&(o.lastCommand=i.lastCommand),void 0!==i.webUrl&&(o.webUrl=i.webUrl),void 0!==i.terminalRatio&&(o.terminalRatio=i.terminalRatio),void 0!==i.terminalCollapsed&&(o.terminalCollapsed=i.terminalCollapsed),e})};e.s(["addTabToPane",0,W,"closePaneInLayout",0,Y,"createDefaultLayout",0,U,"createPane",0,j,"crossCheckLayout",0,R,"deletePane",0,x,"getLayout",0,$,"moveTabBetweenPanes",0,ee,"parseSessionName",0,z,"patchLayout",0,Q,"patchPane",0,V,"patchTab",0,et,"readLayoutFile",0,A,"removeLayoutFile",0,D,"removeTabFromPane",0,E,"reorderTabsInPane",0,Z,"resolveLayoutDir",0,_,"resolveLayoutFile",0,k,"restartTabSession",0,q,"setLayoutReconciler",0,e=>{g.__ptLayoutReconciler=e},"splitPaneInLayout",0,X,"updateTabClaudeSessionId",0,B,"updateTabClaudeSummary",0,J,"updateTabCliStatus",0,G,"updateTabLastUserMessage",0,K,"writeLayoutFile",0,O],825265)}];
1
+ module.exports=[825265,804767,e=>{"use strict";var t=e.i(924868),a=e.i(814747),n=e.i(446786),i=e.i(44014),r=e.i(459015),l=e.i(666126),o=e.i(25146);let s=e=>"pane"===e.type?[e]:[...s(e.children[0]),...s(e.children[1])],d=e=>s(e).flatMap(e=>e.tabs),c=(e,t)=>"pane"===e.type?e.id===t?e:null:c(e.children[0],t)||c(e.children[1],t),u=e=>"pane"===e.type?e.id:u(e.children[0]),p=e=>"pane"===e.type?e.id:p(e.children[1]),w=(e,t,a)=>"pane"===e.type?e.id===t?a:e:{...e,children:[w(e.children[0],t,a),w(e.children[1],t,a)]},y=(e,t)=>{if("pane"===e.type)return null;let[a,n]=e.children;if("pane"===a.type&&a.id===t)return n;if("pane"===n.type&&n.id===t)return a;let i=y(a,t);if(i)return{...e,children:[i,n]};let r=y(n,t);return r?{...e,children:[a,r]}:null},f=(e,t)=>{if("pane"===e.type)return null;let[a,n]=e.children;return"pane"===a.type&&a.id===t?u(n):"pane"===n.type&&n.id===t?p(a):f(a,t)||f(n,t)},m=(e,t)=>{let a=f(e.root,t),n=y(e.root,t);n&&(e.root=n),e.activePaneId===t&&(e.activePaneId=a??s(e.root)[0]?.id??null)},b=(e,t,a)=>{if("split"!==e.type)return e;if(0===t.length)return{...e,ratio:a};let[n,...i]=t,r=[e.children[0],e.children[1]];return r[n]=b(e.children[n],i,a),{...e,children:r}},h=(e,t)=>"pane"===e.type||e.orientation!==t?1:h(e.children[0],t)+h(e.children[1],t),v=e=>{if("pane"===e.type)return!0;let t=h(e.children[0],e.orientation),a=h(e.children[1],e.orientation);return!(Math.abs(e.ratio-t/(t+a)*100)>1)&&v(e.children[0])&&v(e.children[1])},I=e=>{if("pane"===e.type)return e;let t=h(e.children[0],e.orientation),a=Math.round(t/(t+h(e.children[1],e.orientation))*1e4)/100;return{...e,ratio:a,children:[I(e.children[0]),I(e.children[1])]}};e.s(["collectAllTabs",0,d,"collectPanes",0,s,"equalizeNode",0,I,"findPane",0,c,"getFirstPaneId",0,u,"isEqualized",0,v,"removePaneWithFocus",0,m,"replacePane",0,w,"updateRatioAtPath",0,b],804767);let S=(0,o.createLogger)("layout"),T=a.default.join(n.default.homedir(),".purplemux"),g=globalThis;g.__ptLayoutLock||(g.__ptLayoutLock=Promise.resolve()),g.__ptLayoutContentCache||(g.__ptLayoutContentCache=new Map),void 0===g.__ptLayoutReconciler&&(g.__ptLayoutReconciler=null);let P=async e=>{let t,a=new Promise(e=>{t=e}),n=g.__ptLayoutLock;g.__ptLayoutLock=a,await n;try{return await e()}finally{t()}},L=()=>`pane-${(0,i.nanoid)(6)}`,N=()=>`tab-${(0,i.nanoid)(6)}`,_=e=>a.default.join(T,"workspaces",e),k=e=>a.default.join(_(e),"layout.json"),C=(e,t)=>{let a=L(),n=((e,t,a=0,n)=>{let i=N(),l={id:i,sessionName:(0,r.workspaceSessionName)(e,t,i),name:"",order:a};return n&&(l.cwd=n),l})(e,a,0,t);return{pane:{type:"pane",id:a,tabs:[n],activeTabId:n.id},tab:n}},A=async e=>{let a;try{a=await t.default.readFile(e,"utf-8")}catch{return null}try{return JSON.parse(a)}catch{S.warn(`${e} parse failed`);try{await t.default.copyFile(e,e.replace(/\.json$/,".json.bak"))}catch{}return null}},D=async(e,n)=>{let i,r=JSON.stringify({root:e.root,activePaneId:e.activePaneId}),o=g.__ptLayoutContentCache;if(o.get(n)===r)return;await t.default.mkdir(a.default.dirname(n),{recursive:!0});let s=n+".tmp";try{await t.default.writeFile(s,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(s,n)}catch(e){throw await t.default.unlink(s).catch(()=>{}),e}o.set(n,r);let c=(i=n.match(/workspaces\/(ws-[^/]+)\//),i?.[1]??null);if(c){let t=g.__ptLayoutReconciler;if(t){let a=d(e.root).map(e=>e.id);t.reconcileWorkspaceTabs(c,a)}(0,l.broadcastSync)({type:"layout",workspaceId:c})}},$=async e=>{await t.default.rm(_(e),{recursive:!0,force:!0}),O(e);let a=g.__ptLayoutReconciler;a&&a.removeWorkspaceTabs(e),(0,l.broadcastSync)({type:"layout",workspaceId:e})},O=e=>{let t=k(e);g.__ptLayoutContentCache.delete(t)},F=(t,a)=>{let n=[...new Set(d(a).map(e=>e.cwd).filter(e=>!!e))];n.length>0&&e.A(981532).then(({updateWorkspaceDirectories:e})=>{e(t,n).catch(()=>{})}).catch(()=>{})},M=async(e,t,a,n)=>{let i=!1,l=new Set(t),o=s(e.root),d=new Set;for(let e of o)for(let t of e.tabs)if("web-browser"!==t.panelType&&(d.add(t.sessionName),!l.has(t.sessionName)&&"claude-code"===t.panelType)){let e=t.cwd||n;S.debug(`crossCheck: Claude tab session recreated: ${t.sessionName} (cwd: ${e})`),await (0,r.createSession)(t.sessionName,80,24,e),i=!0}let c=t.filter(e=>!d.has(e));if(c.length>0){i=!0;let e=o[0];if(e){let t=e.tabs.length>0?Math.max(...e.tabs.map(e=>e.order)):-1;for(let a of c)t++,e.tabs.push({id:N(),sessionName:a,name:"",order:t});!e.activeTabId&&e.tabs.length>0&&(e.activeTabId=e.tabs[0].id)}}if(i){e.updatedAt=new Date().toISOString();let t=s(e.root);e.activePaneId&&!t.some(t=>t.id===e.activePaneId)&&(e.activePaneId=t[0]?.id??null)}return i},R=async(e,t,a)=>{let{pane:n,tab:i}=C(e,t);return a?.panelType&&(i.panelType=a.panelType),await (0,r.createSession)(i.sessionName,80,24,t),{root:n,activePaneId:n.id,updatedAt:new Date().toISOString()}},U=async(e,t)=>P(async()=>{let a=k(e),n=await A(a);if(n)return n;let{pane:i,tab:l}=C(e,t);await (0,r.createSession)(l.sessionName,80,24,t);let o={root:i,activePaneId:i.id,updatedAt:new Date().toISOString()};return await D(o,a),o}),x=async(e,t)=>{let a=L(),n=N(),i=(0,r.workspaceSessionName)(e,a,n);return await (0,r.createSession)(i,80,24,t),{paneId:a,tab:{id:n,sessionName:i,name:"",order:0,...t?{cwd:t}:{}}}},j=async(e,t=[])=>{for(let e of t)try{await (0,r.killSession)(e)}catch{}},E=async(e,t,a,n,i,l)=>P(async()=>{let o=k(e),d=await A(o);if(!d)return null;let c=s(d.root).find(e=>e.id===t);if(!c)return null;let u="web-browser"===i,p=N(),w=(0,r.workspaceSessionName)(e,t,p);!u&&(await (0,r.createSession)(w,80,24,n),l&&await (0,r.sendKeys)(w,l));let y=c.tabs.length>0?Math.max(...c.tabs.map(e=>e.order))+1:0,f={id:p,sessionName:w,name:a?.trim()||(u?"Web Browser":""),order:y,...n?{cwd:n}:{},...i?{panelType:i}:{}};return c.tabs.push(f),c.activeTabId=p,d.updatedAt=new Date().toISOString(),await D(d,o),F(e,d.root),f}),W=async(e,t,a)=>{let n=await P(async()=>{let n=k(e),i=await A(n);if(!i)return null;let r=s(i.root).find(e=>e.id===t);if(!r)return null;let l=r.tabs.find(e=>e.id===a);return l?{sessionName:l.sessionName,panelType:l.panelType}:null});return!!n&&("web-browser"!==n.panelType&&await (0,r.killSession)(n.sessionName),P(async()=>{let n=k(e),i=await A(n);if(!i)return!1;let r=s(i.root).find(e=>e.id===t);if(!r)return!1;let l=r.tabs.findIndex(e=>e.id===a);return -1!==l&&(r.tabs.splice(l,1),r.activeTabId===a&&(r.activeTabId=r.tabs[0]?.id??null),0===r.tabs.length&&s(i.root).length>1&&m(i,t),r.tabs.forEach((e,t)=>{e.order=t}),i.updatedAt=new Date().toISOString(),await D(i,n),F(e,i.root),!0)}))},q=async(e,t,a,n)=>P(async()=>{let i=k(e),l=await A(i);if(!l)return!1;let o=s(l.root).find(e=>e.id===t);if(!o)return!1;let d=o.tabs.find(e=>e.id===a);if(!d)return!1;if(await (0,r.hasSession)(d.sessionName))return!0;let c=await (0,r.resolveExistingDir)(d.cwd),u=!!(d.cwd&&d.cwd!==c);return await (0,r.createSession)(d.sessionName,80,24,c),n&&!u&&await (0,r.sendKeys)(d.sessionName,n),u&&(S.warn(`tab cwd missing, falling back to ${c}: ${d.sessionName} (was ${d.cwd})`),d.cwd=c,delete d.lastCommand,l.updatedAt=new Date().toISOString(),await D(l,i)),!0}),z=async e=>P(async()=>{let t=B(e);if(!t)return;let a=k(t.wsId),n=await A(a);if(!n)return;let i=s(n.root).find(e=>e.id===t.paneId);if(!i)return;let l=i.tabs.find(e=>e.id===t.tabId);if(!l||!l.cwd)return;let o=await (0,r.resolveExistingDir)(l.cwd);o!==l.cwd&&(S.warn(`tab cwd missing, clearing: ${e} (was ${l.cwd})`),l.cwd=o,delete l.lastCommand,n.updatedAt=new Date().toISOString(),await D(n,a))}),B=e=>{let t=e.match(/^pt-(ws-.*?)-(pane-.*?)-(tab-.+)$/);return t?{wsId:t[1],paneId:t[2],tabId:t[3]}:null},J=async(e,t)=>{let a=B(e);a&&await P(async()=>{let n=k(a.wsId),i=await A(n);if(!i)return;let r=d(i.root).find(t=>t.sessionName===e);!r||t(r)&&(i.updatedAt=new Date().toISOString(),await D(i,n))})},K=async(e,t)=>P(async()=>{let a=k(e),n=await A(a);if(!n)return null;let i=t(n);return i?(i.updatedAt=new Date().toISOString(),await D(i,a),F(e,i.root),i):null}),G=async(e,t)=>K(e,e=>{if(void 0!==t.activePaneId){if(!c(e.root,t.activePaneId))return null;e.activePaneId=t.activePaneId}return t.ratioUpdate&&(e.root=b(e.root,t.ratioUpdate.path,t.ratioUpdate.ratio)),t.equalize&&(e.root=I(e.root)),e}),H=async(e,t,a)=>K(e,e=>{let n=c(e.root,t);if(!n)return null;if(void 0!==a.activeTabId){if(!n.tabs.some(e=>e.id===a.activeTabId))return null;n.activeTabId=a.activeTabId}return e}),Q=async(e,t,a,n,i)=>{let l="web-browser"===i,o=L(),s=N(),d=(0,r.workspaceSessionName)(e,o,s);l||await (0,r.createSession)(d,80,24,n);let u={id:s,sessionName:d,name:l?"Web Browser":"",order:0,...n?{cwd:n}:{}};i&&(u.panelType=i);let p={type:"pane",id:o,tabs:[u],activeTabId:s},y=await K(e,e=>{let i=c(e.root,t);if(!i)return null;let r=v(e.root);if(n){let e=i.tabs.find(e=>e.id===i.activeTabId);e&&(e.cwd=n)}let l={type:"split",orientation:a,ratio:50,children:[{...i},p]};return e.root=w(e.root,t,l),r&&(e.root=I(e.root)),e.activePaneId=o,e});return y||l||await (0,r.killSession)(d).catch(()=>{}),y},V=async(e,t)=>{let a=[],n=await P(async()=>{let n=k(e),i=await A(n);if(!i)return null;let r=c(i.root,t);if(!r||s(i.root).length<=1)return null;a=r.tabs.filter(e=>"web-browser"!==e.panelType).map(e=>e.sessionName);let l=v(i.root);return m(i,t),l&&(i.root=I(i.root)),i.updatedAt=new Date().toISOString(),await D(i,n),F(e,i.root),i});return await Promise.all(a.map(e=>(0,r.killSession)(e).catch(()=>{}))),n},X=async(e,t,a)=>K(e,e=>{let n=c(e.root,t);if(!n)return null;let i=new Map(n.tabs.map(e=>[e.id,e])),r=a.map((e,t)=>{let a=i.get(e);return a?{...a,order:t}:null}).filter(e=>null!==e);return r.length!==n.tabs.length?null:(n.tabs=r,e)}),Y=async(e,t,a,n,i)=>K(e,e=>{let r=c(e.root,a),l=c(e.root,n);if(!r||!l)return null;let o=r.tabs.findIndex(e=>e.id===t);if(-1===o)return null;let[d]=r.tabs.splice(o,1);return r.activeTabId===t&&(r.activeTabId=r.tabs[0]?.id??null),r.tabs.forEach((e,t)=>{e.order=t}),l.tabs.splice(i,0,d),l.tabs.forEach((e,t)=>{e.order=t}),l.activeTabId=t,0===r.tabs.length&&s(e.root).length>1&&m(e,a),e.activePaneId=n,e}),Z=async(t,a,n,i)=>{let r,l;if(void 0!==i.cwd||void 0!==i.title){let o=await (async()=>{let e=k(t),i=await A(e);return i?c(i.root,a)?.tabs.find(e=>e.id===n)?.sessionName??null:null})();if(o){let{getSessionCwd:t,getPaneCurrentCommand:a}=await e.A(322522),{formatTabTitle:n}=await e.A(245061);if(void 0!==i.cwd&&(r=await t(o)),void 0!==i.title){let[e,i]=await Promise.all([a(o),void 0!==r?Promise.resolve(r):t(o)]);e&&i&&(l=n(`${e}|${i}`))}}}return K(t,e=>{let t=c(e.root,a);if(!t)return null;let o=t.tabs.find(e=>e.id===n);if(!o)return null;let s=void 0!==i.title?l??i.title:void 0;return void 0!==i.name&&(o.name=i.name),void 0!==i.panelType&&(o.panelType=i.panelType),void 0!==s&&(o.title=s),void 0!==i.cwd&&(o.cwd=r??i.cwd),void 0!==i.lastCommand&&(o.lastCommand=i.lastCommand),void 0!==i.webUrl&&(o.webUrl=i.webUrl),void 0!==i.terminalRatio&&(o.terminalRatio=i.terminalRatio),void 0!==i.terminalCollapsed&&(o.terminalCollapsed=i.terminalCollapsed),e})};e.s(["addTabToPane",0,E,"closePaneInLayout",0,V,"createDefaultLayout",0,R,"createPane",0,x,"crossCheckLayout",0,M,"deletePane",0,j,"getLayout",0,U,"moveTabBetweenPanes",0,Y,"parseSessionName",0,B,"patchLayout",0,G,"patchPane",0,H,"patchTab",0,Z,"readLayoutFile",0,A,"reconcileTabCwd",0,z,"removeLayoutFile",0,$,"removeTabFromPane",0,W,"reorderTabsInPane",0,X,"resolveLayoutDir",0,_,"resolveLayoutFile",0,k,"restartTabSession",0,q,"setLayoutReconciler",0,e=>{g.__ptLayoutReconciler=e},"splitPaneInLayout",0,Q,"updateTabAgentSessionId",0,(e,t,a)=>J(e,e=>t.readSessionId(e)!==a&&(t.writeSessionId(e,a),!0)),"updateTabAgentSummary",0,(e,t,a)=>J(e,e=>t.readSummary(e)!==a&&(t.writeSummary(e,a),!0)),"updateTabClaudeSessionId",0,(e,t)=>J(e,e=>e.claudeSessionId!==t&&(e.claudeSessionId=t,!0)),"updateTabClaudeSummary",0,(e,t)=>J(e,e=>e.claudeSummary!==t&&(e.claudeSummary=t,!0)),"updateTabCliStatus",0,(e,t,a)=>J(e,e=>(e.cliState!==t||e.dismissedAt!==a)&&(e.cliState=t,e.dismissedAt=a,!0)),"updateTabLastUserMessage",0,(e,t)=>J(e,e=>e.lastUserMessage!==t&&(e.lastUserMessage=t,!0)),"writeLayoutFile",0,D],825265)}];
2
2
 
3
3
  //# sourceMappingURL=src_lib_layout-store_ts_0fanx7c._.js.map
@@ -1,15 +1,3 @@
1
- module.exports=[964759,796902,t=>{"use strict";t.i(478319);var e=t.i(220951),s=t.i(322429),a=t.i(825265),i=t.i(804767),n=t.i(459015),l=t.i(143511),r=t.i(746514),o=t.i(785128),c=t.i(840665),u=t.i(522734),d=t.i(924868),p=t.i(814747),h=t.i(25146),m=t.i(446786);let y=p.default.join(m.default.homedir(),".purplemux"),S=p.default.join(y,"statusline.sh"),f=p.default.join(y,"rate-limits.json"),g=`#!/bin/sh
2
- PORT_FILE="$HOME/.purplemux/port"
3
- TOKEN_FILE="$HOME/.purplemux/cli-token"
4
- [ -f "$PORT_FILE" ] || exit 0
5
- [ -f "$TOKEN_FILE" ] || exit 0
6
- PORT=$(cat "$PORT_FILE")
7
- TOKEN=$(cat "$TOKEN_FILE")
8
- curl -sf --max-time 2 -X POST \\
9
- -H 'Content-Type: application/json' \\
10
- -H "x-pmux-token: \${TOKEN}" \\
11
- --data-binary @- \\
12
- "http://localhost:\${PORT}/api/status/statusline" 2>/dev/null || exit 0
13
- `;t.s(["RATE_LIMITS_FILE",0,f,"STATUSLINE_SCRIPT_CONTENT",0,g,"STATUSLINE_SCRIPT_PATH",0,S],796902);let b=(0,h.createLogger)("rate-limits"),w=p.default.dirname(f),T=p.default.basename(f);var A=t.i(971780),v=t.i(443571);let P=(0,h.createLogger)("session-history"),k=p.default.join(m.default.homedir(),".purplemux"),M=p.default.join(k,"session-history.json"),I=globalThis;I.__purplemuxSessionHistoryLock||(I.__purplemuxSessionHistoryLock=Promise.resolve());let E=async t=>{let e,s=new Promise(t=>{e=t}),a=I.__purplemuxSessionHistoryLock;I.__purplemuxSessionHistoryLock=s,await a;try{return await t()}finally{e()}},j=()=>({version:1,entries:[]}),U=async()=>{let t;try{t=await d.default.readFile(M,"utf-8")}catch{return j()}try{return JSON.parse(t)}catch{P.warn("Failed to parse session-history.json, starting empty");try{await d.default.copyFile(M,M.replace(/\.json$/,".json.bak"))}catch{}return j()}},W=async t=>{let e=JSON.stringify(t.entries);if(I.__purplemuxSessionHistoryContentCache===e)return;let s=M+".tmp";try{await d.default.writeFile(s,JSON.stringify(t,null,2),{mode:384}),await d.default.rename(s,M)}catch(t){throw await d.default.unlink(s).catch(()=>{}),t}I.__purplemuxSessionHistoryContentCache=e},L=async t=>{await E(async()=>{let e=await U();e.entries.unshift(t),e.entries.length>200&&(e.entries=e.entries.slice(0,200)),await W(e)})},_=async(t,e)=>await E(async()=>{let s=await U(),a=s.entries.find(e=>e.tabId===t&&null===e.dismissedAt);return a?(a.dismissedAt=e,await W(s),a):null});var N=t.i(157469),R=t.i(75874),x=t.i(228448),C=t.i(44014);let F=(0,h.createLogger)("status"),J=(0,h.createLogger)("hooks"),O=t=>t?p.default.basename(t,".jsonl"):null,$=new Set(["permission_prompt","worker_permission_prompt"]),D=new Map,H=t=>{let e=t.name??"Tool",s=t.input??{};return{toolName:e,summary:(0,c.summarizeToolCall)(e,s)}},z=t=>{let e=!1;for(let s=t.length-1;s>=0;s--)try{let a=JSON.parse(t[s]);if(a.isSidechain)continue;if("user"===a.type){let t=a.message?.content;Array.isArray(t)&&t.some(t=>"tool_result"===t.type)||(e=!0);continue}if("assistant"!==a.type||!a.message?.content)continue;if(e)return{lastAssistantSnippet:null,currentAction:null,reset:!0};let i=a.message.content;if(!Array.isArray(i))continue;let n=null,l=null;for(let t=i.length-1;t>=0;t--){let e=i[t];if("tool_use"===e.type){l=H(e);break}if("text"===e.type&&e.text?.trim()){let t=e.text.trim();l={toolName:null,summary:t.length>200?t.slice(0,200)+"…":t};break}}for(let t=i.length-1;t>=0;t--)if("text"===i[t].type&&i[t].text?.trim()){let e=i[t].text.trim();n=e.length>200?e.slice(0,200)+"…":e;break}return{lastAssistantSnippet:n,currentAction:l,reset:!1}}catch{continue}return{lastAssistantSnippet:null,currentAction:null,reset:!1}},q=(t,e)=>{for(let s=t.length-1;s>=0;s--)try{let a=JSON.parse(t[s]);if(a.isSidechain)continue;let i=a.timestamp?new Date(a.timestamp).getTime():null;if("system"===a.type&&("stop_hook_summary"===a.subtype||"turn_duration"===a.subtype))return{matched:!0,idle:!0,stale:!1,needsStaleRecheck:!1,staleMs:0,lastEntryTs:i,interrupted:!1};if("assistant"===a.type){let t=a.message?.stop_reason;if(!t){let t=e>2e4;return{matched:!0,idle:t,stale:!0,needsStaleRecheck:!t,staleMs:2e4,lastEntryTs:i,interrupted:!1}}return{matched:!0,idle:"tool_use"!==t,stale:!1,needsStaleRecheck:!1,staleMs:0,lastEntryTs:i,interrupted:!1}}if("user"===a.type){let t=a.message?.content;if(Array.isArray(t)&&1===t.length&&"string"==typeof t[0]?.text&&t[0].text.startsWith(c.INTERRUPT_PREFIX))return{matched:!0,idle:!0,stale:!1,needsStaleRecheck:!1,staleMs:0,lastEntryTs:i,interrupted:!0};let s=e>9e4;return{matched:!0,idle:s,stale:!0,needsStaleRecheck:!s,staleMs:9e4,lastEntryTs:i,interrupted:!1}}}catch{continue}return{matched:!1,idle:e>9e4,stale:!0,needsStaleRecheck:e<=9e4,staleMs:9e4,lastEntryTs:null,interrupted:!1}},K=async t=>{try{let e=await d.default.stat(t);if(0===e.size)return{idle:!0,stale:!1,lastAssistantSnippet:null,currentAction:null,reset:!1,lastEntryTs:null,staleMs:0,interrupted:!1};let s=D.get(t);if(s&&s.mtimeMs===e.mtimeMs){if(D.delete(t),D.set(t,s),s.idle)return{idle:!0,stale:s.stale,lastAssistantSnippet:s.lastAssistantSnippet,currentAction:s.currentAction,reset:s.reset,lastEntryTs:s.lastEntryTs,staleMs:s.staleMs,interrupted:s.interrupted};if(s.needsStaleRecheck)return{idle:Date.now()-e.mtimeMs>s.staleMs,stale:!0,lastAssistantSnippet:s.lastAssistantSnippet,currentAction:s.currentAction,reset:s.reset,lastEntryTs:s.lastEntryTs,staleMs:s.staleMs,interrupted:s.interrupted};return{idle:!1,stale:!1,lastAssistantSnippet:s.lastAssistantSnippet,currentAction:s.currentAction,reset:s.reset,lastEntryTs:s.lastEntryTs,staleMs:s.staleMs,interrupted:s.interrupted}}let a=await d.default.open(t,"r");try{let s=Date.now()-e.mtimeMs,i=Math.min(e.size,8192),n=Buffer.alloc(i);await a.read(n,0,i,e.size-i);let l=n.toString("utf-8").split("\n").filter(t=>t.trim()),r=q(l,s),o=z(l);if(!r.matched&&e.size>8192){let t=Math.min(e.size,131072),i=Buffer.alloc(t);await a.read(i,0,t,e.size-t);let n=i.toString("utf-8").split("\n").filter(t=>t.trim());r=q(n,s),o.lastAssistantSnippet||o.currentAction||(o=z(n))}return D.size>=256&&D.delete(D.keys().next().value),D.set(t,{mtimeMs:e.mtimeMs,idle:r.idle,stale:r.stale,needsStaleRecheck:r.needsStaleRecheck,staleMs:r.staleMs,lastAssistantSnippet:o.lastAssistantSnippet,currentAction:o.currentAction,reset:o.reset,lastEntryTs:r.lastEntryTs,interrupted:r.interrupted}),{idle:r.idle,stale:r.stale,lastAssistantSnippet:o.lastAssistantSnippet,currentAction:o.currentAction,reset:o.reset,lastEntryTs:r.lastEntryTs,staleMs:r.staleMs,interrupted:r.interrupted}}finally{await a.close()}}catch{return{idle:!1,stale:!1,lastAssistantSnippet:null,currentAction:null,reset:!1,lastEntryTs:null,staleMs:0,interrupted:!1}}},B=async t=>{let e={toolUsage:{},touchedFiles:[],lastAssistantText:null,lastUserText:null,firstUserTs:null,lastAssistantTs:null,turnDurationMs:null};try{let s=await d.default.stat(t);if(0===s.size)return e;let a=await d.default.open(t,"r");try{let t=Math.min(s.size,131072),e=Buffer.alloc(t);await a.read(e,0,t,s.size-t);let i=e.toString("utf-8").split("\n").filter(t=>t.trim()),n={},l=new Set,r=null,o=null,c=null,u=null,d=null;for(let t=i.length-1;t>=0;t--)try{let e=JSON.parse(i[t]);if("file-history-snapshot"===e.type)break;if(e.isSidechain)continue;"system"!==e.type||"turn_duration"!==e.subtype||"number"!=typeof e.durationMs||d||(d=e.durationMs);let s=e.timestamp?new Date(e.timestamp).getTime():null;if("user"===e.type&&(s&&(u=s),!o&&Array.isArray(e.message?.content))){for(let t of e.message.content)if("text"===t.type&&t.text){o=t.text;break}}if("assistant"===e.type&&(s&&!c&&(c=s),Array.isArray(e.message?.content))){let t=null;for(let s of e.message.content)"tool_use"===s.type&&s.name&&(n[s.name]=(n[s.name]??0)+1,("Edit"===s.name||"Write"===s.name)&&s.input?.file_path&&l.add(String(s.input.file_path))),"text"===s.type&&s.text&&(t=s.text);!r&&t&&(r=t)}}catch{continue}return{toolUsage:n,touchedFiles:[...l],lastAssistantText:r,lastUserText:o,firstUserTs:u,lastAssistantTs:c,turnDurationMs:d}}finally{await a.close()}}catch{return e}},V=/^[✳⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏⠐⠈]\s+/,X=t=>t&&V.test(t)&&t.replace(V,"").trim()||null,G=globalThis;class Q{tabs=new Map;pollingTimer=null;currentInterval=0;clients=new Set;initialized=!1;rateLimitsWatcher=null;lastRateLimits=null;jsonlWatchers=new Map;compactStaleTimers=new Map;async init(){if(!this.initialized){var t;let e,s,a,i,n,l;this.initialized=!0,await this.scanAll(),this.startPolling(),this.rateLimitsWatcher=(t=t=>{this.lastRateLimits=t,this.broadcast({type:"rate-limits:update",data:t})},e=null,s=null,a=0,i=async()=>{try{let e=await d.default.readFile(f,"utf-8"),s=JSON.parse(e);s.ts&&s.ts!==a&&(a=s.ts,t(s))}catch{}},n=()=>{i();try{(e=u.default.watch(w,(t,e)=>{e===T&&(s&&clearTimeout(s),s=setTimeout(i,500))})).on("error",()=>{b.debug(`${w} watch error, retrying...`),l(),setTimeout(n,5e3)})}catch{b.debug(`${w} not available yet, retrying...`),setTimeout(n,5e3)}},{start:n,stop:l=()=>{s&&(clearTimeout(s),s=null),e&&(e.close(),e=null)}}),this.rateLimitsWatcher.start()}}async scanAll(){let{workspaces:t}=await (0,s.getWorkspaces)(),e=await (0,n.getAllPanesInfo)();for(let t of[...this.jsonlWatchers.keys()])this.stopJsonlWatch(t);for(let s of(this.tabs.clear(),t)){let t=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(t)for(let a of(0,i.collectAllTabs)(t.root)){let t=e.get(a.sessionName),i=await this.readTabMetadata(t),n=a.cliState??"idle",l="busy"===n?"unknown":n,{terminalStatus:r,listeningPorts:c}="claude-code"===a.panelType?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(t),u=t?.command,d=t?`${t.command}|${t.path}`:void 0,p="needs-input"===l?{name:"notification",at:Date.now(),seq:0}:null;this.tabs.set(a.id,{cliState:l,workspaceId:s.id,tabName:a.name||(d?(0,o.formatTabTitle)(d):""),currentProcess:u,paneTitle:d,tmuxSession:a.sessionName,panelType:a.panelType,terminalStatus:r,listeningPorts:c,claudeSummary:a.claudeSummary,lastUserMessage:a.lastUserMessage,lastAssistantMessage:i.lastAssistantSnippet,currentAction:i.currentAction,readyForReviewAt:"ready-for-review"===l?Date.now():null,busySince:null,dismissedAt:a.dismissedAt??null,claudeSessionId:O(i.jsonlPath)??a.claudeSessionId??null,jsonlPath:i.jsonlPath,lastEvent:p,eventSeq:0}),("needs-input"===l||"unknown"===l)&&i.jsonlPath&&this.startJsonlWatch(a.id,i.jsonlPath),"unknown"===l&&this.resolveUnknown(a.id).catch(t=>F.warn("resolveUnknown failed: %s",t))}}}async resolveUnknown(t){let e=this.tabs.get(t);if(!e||"unknown"!==e.cliState)return;let s=(await (0,n.getAllPanesInfo)()).get(e.tmuxSession),a=s?.pid?await (0,l.getChildPids)(s.pid):[];if(!(s?.pid&&await (0,l.isClaudeRunning)(s.pid,a))){this.applyCliState(t,e,"idle",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(t,e);return}if(e.jsonlPath){let{idle:s,stale:a,lastAssistantSnippet:i}=await K(e.jsonlPath);if(s&&!a&&i){this.applyCliState(t,e,"ready-for-review",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(t,e);return}}}async readTabMetadata(t){let e={lastAssistantSnippet:null,currentAction:null,jsonlPath:null};if(!t||!t.pid)return e;let s=await (0,l.getChildPids)(t.pid);if(!await (0,l.isClaudeRunning)(t.pid,s))return e;let a=await (0,l.detectActiveSession)(t.pid,s);if("running"!==a.status||!a.jsonlPath)return{lastAssistantSnippet:null,currentAction:null,jsonlPath:a.jsonlPath??null};let{lastAssistantSnippet:i,currentAction:n}=await K(a.jsonlPath);return{lastAssistantSnippet:i,currentAction:n,jsonlPath:a.jsonlPath}}async detectTerminalStatus(t){if(!t||!t.pid)return{terminalStatus:"idle",listeningPorts:[]};let e=await (0,n.getListeningPorts)(t.pid);return e.length>0?{terminalStatus:"server",listeningPorts:e}:{terminalStatus:n.SAFE_SHELLS.has(t.command)?"idle":"running",listeningPorts:[]}}getPollingInterval(){let t=this.tabs.size;return t>=21?6e4:t>=11?45e3:3e4}async rescan(){await this.scanAll()}startPolling(){this.stopPolling(),this.currentInterval=this.getPollingInterval(),this.pollingTimer=setInterval(()=>{this.poll().catch(t=>{F.error({err:t},"Polling error")})},this.currentInterval)}stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null,this.currentInterval=0)}async poll(){let{workspaces:t}=await (0,s.getWorkspaces)(),e=await (0,n.getAllPanesInfo)(),r=new Set,c=new Set(this.tabs.keys()),u=Date.now();for(let s of t){let t=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(t)for(let c of(0,i.collectAllTabs)(t.root)){r.add(c.id);let t=this.tabs.get(c.id),i=e.get(c.sessionName),{terminalStatus:d,listeningPorts:p}="claude-code"===c.panelType?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(i),h=i?.command,m=i?`${i.command}|${i.path}`:void 0;if(!t){let t=c.cliState??"idle",e="busy"===t?"unknown":t,a=await this.readTabMetadata(i),n="needs-input"===e?{name:"notification",at:Date.now(),seq:0}:null,l={cliState:e,workspaceId:s.id,tabName:c.name||(m?(0,o.formatTabTitle)(m):""),currentProcess:h,paneTitle:m,tmuxSession:c.sessionName,panelType:c.panelType,terminalStatus:d,listeningPorts:p,claudeSummary:c.claudeSummary,lastUserMessage:c.lastUserMessage,lastAssistantMessage:a.lastAssistantSnippet,currentAction:a.currentAction,claudeSessionId:O(a.jsonlPath)??c.claudeSessionId??null,jsonlPath:a.jsonlPath,lastEvent:n,eventSeq:0};this.tabs.set(c.id,l),this.persistToLayout(l),this.broadcastUpdate(c.id,l),"unknown"===e&&this.resolveUnknown(c.id).catch(t=>F.warn("resolveUnknown failed: %s",t));continue}let y=t.currentProcess!==h,S=t.lastUserMessage!==c.lastUserMessage,f=t.panelType!==c.panelType,g=await this.readTabMetadata(i);t.tabName=c.name||(m?(0,o.formatTabTitle)(m):""),t.currentProcess=h,t.paneTitle=m,t.workspaceId=s.id,t.panelType=c.panelType,t.claudeSessionId=O(g.jsonlPath)??c.claudeSessionId??null,t.jsonlPath=g.jsonlPath??t.jsonlPath,t.lastUserMessage=c.lastUserMessage,y&&(t.processRetries=3);let b=!y&&(t.processRetries??0)>0;b&&(t.processRetries=t.processRetries-1);let w=t.listeningPorts,T=w?.length!==p.length||p.some((t,e)=>w[e]!==t),A=t.terminalStatus!==d||T;A&&(t.terminalStatus=d,t.listeningPorts=p);let v=!1;if("busy"===t.cliState||"needs-input"===t.cliState){let e=X(await (0,n.getPaneTitle)(c.sessionName));e&&e!==t.claudeSummary&&(t.claudeSummary=e,v=!0,(0,a.updateTabClaudeSummary)(c.sessionName,e).catch(()=>{}))}else t.claudeSummary!==c.claudeSummary&&(t.claudeSummary=c.claudeSummary,v=!0);if("busy"===t.cliState&&t.lastEvent&&u-t.lastEvent.at>6e5){let e=i?.pid?await (0,l.getChildPids)(i.pid):[];if(!(i?.pid&&await (0,l.isClaudeRunning)(i.pid,e))){F.info({tabId:c.id},"busy stuck — Claude process gone, forcing idle"),this.applyCliState(c.id,t,"idle",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(c.id,t);continue}}(A||y||b||S||f||v)&&this.broadcastUpdate(c.id,t)}}for(let t of c)!r.has(t)&&this.tabs.has(t)&&(this.stopJsonlWatch(t),this.tabs.delete(t),this.broadcastRemove(t));let d=this.getPollingInterval();this.pollingTimer&&d!==this.currentInterval&&this.startPolling()}getAllForClient(){let t={};for(let[e,s]of this.tabs)t[e]={cliState:s.cliState,workspaceId:s.workspaceId,tabName:s.tabName,currentProcess:s.currentProcess,paneTitle:s.paneTitle,panelType:s.panelType,terminalStatus:s.terminalStatus,listeningPorts:s.listeningPorts,claudeSummary:s.claudeSummary,lastUserMessage:s.lastUserMessage,lastAssistantMessage:s.lastAssistantMessage,currentAction:s.currentAction,readyForReviewAt:s.readyForReviewAt,busySince:s.busySince,dismissedAt:s.dismissedAt,claudeSessionId:s.claudeSessionId,lastEvent:s.lastEvent,eventSeq:s.eventSeq};return t}applyCliState(t,e,s,a={}){if(e.cliState===s)return;let i=e.busySince;e.cliState=s,e.readyForReviewAt="ready-for-review"===s?Date.now():null,e.busySince="busy"===s?Date.now():null,"busy"===s&&(e.dismissedAt=null),"ready-for-review"===s&&e.jsonlPath&&new Promise(t=>setTimeout(t,500)).then(()=>this.saveSessionHistory(t,e,i,!1)).catch(t=>{F.warn("Failed to save session history: %s",t)}),"ready-for-review"!==s||a.silent||this.sendWebPush(t,e,"review").catch(t=>{F.warn("Web push failed: %s",t)}),"needs-input"!==s||a.silent||this.sendWebPush(t,e,"needs-input").catch(t=>{F.warn("Web push failed: %s",t)});let n=("busy"===s||"needs-input"===s)&&e.jsonlPath,l="ready-for-review"===s&&this.jsonlWatchers.has(t);n&&!this.jsonlWatchers.has(t)?this.startJsonlWatch(t,e.jsonlPath):!n&&!l&&this.jsonlWatchers.has(t)&&this.stopJsonlWatch(t)}async saveSessionHistory(t,e,a,i){if(!e.lastUserMessage)return;let n=e.jsonlPath?await B(e.jsonlPath):null,{workspaces:l}=await (0,s.getWorkspaces)(),r=l.find(t=>t.id===e.workspaceId),o=Date.now(),c=n?.firstUserTs??a??o,u=i?o:n?.lastAssistantTs??o,d=i?u-c:n?.turnDurationMs??u-c,p={id:(0,C.nanoid)(),workspaceId:e.workspaceId,workspaceName:r?.name??e.workspaceId,workspaceDir:r?.directories[0]??null,tabId:t,claudeSessionId:e.claudeSessionId??null,prompt:n?.lastUserText??e.lastUserMessage,result:n?.lastAssistantText??null,startedAt:c,completedAt:u,duration:d,dismissedAt:u,toolUsage:n?.toolUsage??{},touchedFiles:n?.touchedFiles??[],...i?{cancelled:!0}:{}};await L(p),this.broadcast({type:"session-history:update",entry:p})}dismissTab(t,e){let s=this.tabs.get(t);if(!s||"ready-for-review"!==s.cliState)return;let a=Date.now();this.applyCliState(t,s,"idle",{silent:!0}),s.dismissedAt=a,this.persistToLayout(s),this.broadcastUpdate(t,s,e),_(t,a).then(t=>{t&&this.broadcast({type:"session-history:update",entry:t})}).catch(t=>{F.warn("Failed to update session history dismissedAt: %s",t)})}ackNotificationInput(t,e){let s=this.tabs.get(t);s&&"needs-input"===s.cliState&&s.lastEvent?.name==="notification"&&s.lastEvent.seq===e&&(J.debug({tabId:t,seq:e},"ack: needs-input→busy"),this.applyCliState(t,s,"busy"),this.persistToLayout(s),this.broadcastUpdate(t,s))}async recoverUnknownIfPending(t){let e=this.tabs.get(t);if(!e)return{recovered:!1,reason:"no-entry"};if("unknown"!==e.cliState)return{recovered:!1,reason:"not-unknown"};let s=await (0,A.capturePaneAtWidth)(e.tmuxSession,120,50).catch(t=>(F.warn("recoverUnknownIfPending capture failed: %s",t),null));if(!s)return{recovered:!1,reason:"capture-failed"};let{options:a}=(0,v.parsePermissionOptions)(s);if(0===a.length)return{recovered:!1,reason:"no-options"};let i=Date.now(),n=(e.eventSeq??0)+1;return e.eventSeq=n,e.lastEvent={name:"notification",at:i,seq:n},J.debug({tabId:t,seq:n,options:a.length},"recover unknown→needs-input from pane capture"),this.applyCliState(t,e,"needs-input",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(t,e),{recovered:!0}}findTabIdBySession(t){for(let[e,s]of this.tabs)if(s.tmuxSession===t)return e}updateTabFromHook(t,e,s){let a=this.findTabIdBySession(t);if(!a)return void J.debug({tmuxSession:t,event:e,notificationType:s},"no tabId for session");let i=this.tabs.get(a);if(!i)return void J.debug({tabId:a,event:e,notificationType:s},"no entry for tab");if("pre-compact"===e||"post-compact"===e){J.debug({tabId:a,event:e},"compact hook"),this.setCompacting(a,i,"pre-compact"===e?Date.now():null);return}if("session-start"!==e&&"prompt-submit"!==e&&"notification"!==e&&"stop"!==e&&"interrupt"!==e)return void J.debug({tabId:a,event:e,notificationType:s},"unknown event, ignoring");if("notification"===e&&s&&!$.has(s))return void J.debug({tabId:a,event:e,notificationType:s},"non-input notification, skipping state transition");let n=Date.now(),l=(i.eventSeq??0)+1;i.eventSeq=l,i.lastEvent={name:e,at:n,seq:l},this.broadcast({type:"status:hook-event",tabId:a,event:i.lastEvent});let r=i.cliState,o="cancelled"===r?r:((t,e)=>{if(!t)return e;switch(t.name){case"session-start":case"interrupt":return"idle";case"prompt-submit":return"busy";case"notification":return"needs-input";case"stop":return"ready-for-review"}})(i.lastEvent,r);if(J.debug({tabId:a,event:e,notificationType:s,seq:l,prevState:r,newState:o,transition:r!==o},`processed ${e}${s?`(${s})`:""} ${r}→${o}`),r!==o&&(this.applyCliState(a,i,o),this.persistToLayout(i),this.broadcastUpdate(a,i)),"busy"!==o&&"needs-input"!==o||i.jsonlPath||this.resolveAndWatchJsonl(a,t).catch(()=>{}),"stop"===e&&i.jsonlPath){let t=()=>{K(i.jsonlPath).then(({currentAction:t,lastAssistantSnippet:e,reset:s})=>{let n=!1;s?(null!==i.currentAction&&(i.currentAction=null,n=!0),null!==i.lastAssistantMessage&&(i.lastAssistantMessage=null,n=!0)):(null!==t&&t.summary!==i.currentAction?.summary&&(i.currentAction=t,n=!0),null!==e&&i.lastAssistantMessage!==e&&(i.lastAssistantMessage=e,n=!0)),n&&this.broadcastUpdate(a,i)}).catch(()=>{})};t(),setTimeout(()=>{D.delete(i.jsonlPath),t()},500)}}setCompacting(t,e,s){let a=this.compactStaleTimers.get(t);if(a&&(clearTimeout(a),this.compactStaleTimers.delete(t)),(e.compactingSince??null)!==s&&(e.compactingSince=s,this.broadcastUpdate(t,e),null!==s)){let e=setTimeout(()=>{this.compactStaleTimers.delete(t);let e=this.tabs.get(t);e&&e.compactingSince===s&&(e.compactingSince=null,J.debug({tabId:t},"compact stale, auto-cleared"),this.broadcastUpdate(t,e))},6e4);this.compactStaleTimers.set(t,e)}}removeTab(t){let e=this.tabs.get(t);e&&("busy"===e.cliState||"needs-input"===e.cliState)&&e.lastUserMessage&&this.saveSessionHistory(t,e,e.busySince,!0).catch(t=>{F.warn("Failed to save cancelled session history: %s",t)}),this.stopJsonlWatch(t);let s=this.compactStaleTimers.get(t);s&&(clearTimeout(s),this.compactStaleTimers.delete(t)),this.tabs.delete(t),this.broadcastRemove(t)}reconcileWorkspaceTabs(t,e){let s=new Set(e);for(let[e,a]of this.tabs)a.workspaceId!==t||s.has(e)||this.removeTab(e)}removeWorkspaceTabs(t){for(let[e,s]of this.tabs)s.workspaceId===t&&this.removeTab(e)}registerTab(t,e){this.tabs.set(t,e),this.broadcastUpdate(t,e)}addClient(t){this.clients.add(t),this.lastRateLimits&&t.readyState===e.WebSocket.OPEN&&t.send(JSON.stringify({type:"rate-limits:update",data:this.lastRateLimits}))}removeClient(t){this.clients.delete(t)}persistToLayout(t){(0,a.updateTabCliStatus)(t.tmuxSession,t.cliState,t.dismissedAt).catch(()=>{})}broadcastUpdate(t,e,s){let a={type:"status:update",tabId:t,cliState:e.cliState,workspaceId:e.workspaceId,tabName:e.tabName,currentProcess:e.currentProcess,paneTitle:e.paneTitle,panelType:e.panelType,terminalStatus:e.terminalStatus,listeningPorts:e.listeningPorts,claudeSummary:e.claudeSummary,lastUserMessage:e.lastUserMessage,lastAssistantMessage:e.lastAssistantMessage,currentAction:e.currentAction,readyForReviewAt:e.readyForReviewAt,busySince:e.busySince,dismissedAt:e.dismissedAt,claudeSessionId:e.claudeSessionId,compactingSince:e.compactingSince,lastEvent:e.lastEvent,eventSeq:e.eventSeq};this.broadcast(a,s)}broadcastRemove(t){this.broadcast({type:"status:update",tabId:t,cliState:null,workspaceId:"",tabName:""})}static BACKPRESSURE_LIMIT=1048576;broadcast(t,s){let a=JSON.stringify(t);for(let t of this.clients)t!==s&&t.readyState===e.WebSocket.OPEN&&t.bufferedAmount<Q.BACKPRESSURE_LIMIT&&t.send(a)}async resolveAndWatchJsonl(t,e){let s=this.tabs.get(t);if(!s||s.jsonlPath)return;let o=null,c=(0,a.parseSessionName)(e);if(c){let l=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(c.wsId));if(l){let a=(0,i.collectAllTabs)(l.root).find(t=>t.sessionName===e);if(a?.claudeSessionId){let t=await (0,n.getSessionCwd)(e);if(t){let e=`${(0,r.cwdToProjectPath)(t)}/${a.claudeSessionId}.jsonl`;try{await d.default.access(e),o=e}catch{}}}a?.lastUserMessage&&s.lastUserMessage!==a.lastUserMessage&&(s.lastUserMessage=a.lastUserMessage,this.broadcastUpdate(t,s))}}if(!o){let t=await (0,n.getSessionPanePid)(e);t&&(o=(await (0,l.detectActiveSession)(t)).jsonlPath)}o&&(s.jsonlPath=o,s.claudeSessionId=O(o)??s.claudeSessionId,"busy"!==s.cliState&&"needs-input"!==s.cliState||this.jsonlWatchers.has(t)||this.startJsonlWatch(t,o))}startJsonlWatch(t,e){let s=this.jsonlWatchers.get(t);if(s?.jsonlPath!==e){s&&this.stopJsonlWatch(t),F.debug("startJsonlWatch tabId=%s path=%s",t,e);try{let s=(0,u.watch)(e,()=>{let s=this.jsonlWatchers.get(t);s&&(s.debounceTimer&&clearTimeout(s.debounceTimer),s.debounceTimer=setTimeout(()=>{this.onJsonlFileChange(t,e).catch(()=>{})},100))});s.on("error",()=>{this.stopJsonlWatch(t)}),this.jsonlWatchers.set(t,{watcher:s,jsonlPath:e,debounceTimer:null})}catch{}}}stopJsonlWatch(t){let e=this.jsonlWatchers.get(t);if(e){F.debug("stopJsonlWatch tabId=%s",t),e.debounceTimer&&clearTimeout(e.debounceTimer);try{e.watcher.close()}catch{}this.jsonlWatchers.delete(t)}}async onJsonlFileChange(t,e){let s=this.tabs.get(t);if(!s||"busy"!==s.cliState&&"needs-input"!==s.cliState&&"unknown"!==s.cliState&&"ready-for-review"!==s.cliState)return void this.stopJsonlWatch(t);let{currentAction:a,lastAssistantSnippet:i,reset:n,interrupted:l,lastEntryTs:r}=await K(e);l&&"busy"===s.cliState&&null!==r&&r>(s.lastInterruptTs??0)&&r>(s.lastEvent?.at??0)&&(s.lastInterruptTs=r,J.debug({tabId:t,lastEntryTs:r},"synthetic interrupt from JSONL"),this.updateTabFromHook(s.tmuxSession,"interrupt"));let o=!1;n?(null!==s.currentAction&&(s.currentAction=null,o=!0),null!==s.lastAssistantMessage&&(s.lastAssistantMessage=null,o=!0)):(null!==a&&a.summary!==s.currentAction?.summary&&(s.currentAction=a,o=!0),null!==i&&s.lastAssistantMessage!==i&&(s.lastAssistantMessage=i,o=!0)),o&&this.broadcastUpdate(t,s)}shutdown(){for(let t of(this.stopPolling(),this.rateLimitsWatcher?.stop(),[...this.jsonlWatchers.keys()]))this.stopJsonlWatch(t);for(let t of this.clients)t.readyState===e.WebSocket.OPEN&&t.close(1001,"Server shutting down");this.clients.clear()}notifyLastUserMessage(t,e){let s=(0,a.parseSessionName)(t);if(!s)return;let i=this.tabs.get(s.tabId);i&&i.lastUserMessage!==e&&(i.lastUserMessage=e,this.broadcastUpdate(s.tabId,i))}async sendWebPush(t,e,a){let i=await (0,R.getSubscriptions)();if(0===i.length)return;let n=await (0,x.getVAPIDKeys)();N.default.setVapidDetails("mailto:noreply@purplemux.app",n.publicKey,n.privateKey);let l=e.lastUserMessage?.slice(0,100)||e.tabName||t,r=(await (0,s.getWorkspaces)()).workspaces.find(t=>t.id===e.workspaceId),o=JSON.stringify({title:"needs-input"===a?"Input Required":"Task Complete",body:l,tabId:t,workspaceId:e.workspaceId,claudeSessionId:e.claudeSessionId??null,workspaceName:r?.name??"",workspaceDir:r?.directories[0]??null});if(!(0,R.isAnyDeviceVisible)())for(let t of i)try{await N.default.sendNotification(t,o)}catch(s){let e=s.statusCode;(410===e||404===e)&&await (0,R.removeSubscription)(t.endpoint),F.warn("Web push send error: %s",e)}}}t.s(["getStatusManager",0,()=>{if(!G.__ptStatusManager){let t=new Q;G.__ptStatusManager=t,(0,a.setLayoutReconciler)({reconcileWorkspaceTabs:(e,s)=>t.reconcileWorkspaceTabs(e,s),removeWorkspaceTabs:e=>t.removeWorkspaceTabs(e)})}return G.__ptStatusManager}],964759)}];
1
+ module.exports=[964759,t=>{"use strict";t.i(478319);var e=t.i(220951),s=t.i(322429),a=t.i(825265),i=t.i(804767),n=t.i(459015),l=t.i(143511),r=t.i(462180),o=t.i(282992),c=t.i(746514),u=t.i(785128),d=t.i(840665),p=t.i(522734),h=t.i(924868),m=t.i(814747),y=t.i(25146),S=t.i(796902);let g=(0,y.createLogger)("rate-limits"),f=m.default.dirname(S.RATE_LIMITS_FILE),b=m.default.basename(S.RATE_LIMITS_FILE);var w=t.i(971780),T=t.i(443571),A=t.i(446786);let v=(0,y.createLogger)("session-history"),P=m.default.join(A.default.homedir(),".purplemux"),k=m.default.join(P,"session-history.json"),M=globalThis;M.__purplemuxSessionHistoryLock||(M.__purplemuxSessionHistoryLock=Promise.resolve());let I=async t=>{let e,s=new Promise(t=>{e=t}),a=M.__purplemuxSessionHistoryLock;M.__purplemuxSessionHistoryLock=s,await a;try{return await t()}finally{e()}},U=()=>({version:1,entries:[]}),j=async()=>{let t;try{t=await h.default.readFile(k,"utf-8")}catch{return U()}try{return JSON.parse(t)}catch{v.warn("Failed to parse session-history.json, starting empty");try{await h.default.copyFile(k,k.replace(/\.json$/,".json.bak"))}catch{}return U()}},W=async t=>{let e=JSON.stringify(t.entries);if(M.__purplemuxSessionHistoryContentCache===e)return;let s=k+".tmp";try{await h.default.writeFile(s,JSON.stringify(t,null,2),{mode:384}),await h.default.rename(s,k)}catch(t){throw await h.default.unlink(s).catch(()=>{}),t}M.__purplemuxSessionHistoryContentCache=e},E=async t=>{await I(async()=>{let e=await j();e.entries.unshift(t),e.entries.length>200&&(e.entries=e.entries.slice(0,200)),await W(e)})},L=async(t,e)=>await I(async()=>{let s=await j(),a=s.entries.find(e=>e.tabId===t&&null===e.dismissedAt);return a?(a.dismissedAt=e,await W(s),a):null});var _=t.i(157469),R=t.i(75874),N=t.i(228448),x=t.i(44014);let F=(0,y.createLogger)("status"),C=(0,y.createLogger)("hooks"),J=t=>t?m.default.basename(t,".jsonl"):null,D=new Set(["permission_prompt","worker_permission_prompt"]),z=new Map,O=t=>{let e=t.name??"Tool",s=t.input??{};return{toolName:e,summary:(0,d.summarizeToolCall)(e,s)}},q=t=>{let e=!1;for(let s=t.length-1;s>=0;s--)try{let a=JSON.parse(t[s]);if(a.isSidechain)continue;if("user"===a.type){let t=a.message?.content;Array.isArray(t)&&t.some(t=>"tool_result"===t.type)||(e=!0);continue}if("assistant"!==a.type||!a.message?.content)continue;if(e)return{lastAssistantSnippet:null,currentAction:null,reset:!0};let i=a.message.content;if(!Array.isArray(i))continue;let n=null,l=null;for(let t=i.length-1;t>=0;t--){let e=i[t];if("tool_use"===e.type){l=O(e);break}if("text"===e.type&&e.text?.trim()){let t=e.text.trim();l={toolName:null,summary:t.length>200?t.slice(0,200)+"…":t};break}}for(let t=i.length-1;t>=0;t--)if("text"===i[t].type&&i[t].text?.trim()){let e=i[t].text.trim();n=e.length>200?e.slice(0,200)+"…":e;break}return{lastAssistantSnippet:n,currentAction:l,reset:!1}}catch{continue}return{lastAssistantSnippet:null,currentAction:null,reset:!1}},$=(t,e)=>{for(let s=t.length-1;s>=0;s--)try{let a=JSON.parse(t[s]);if(a.isSidechain)continue;let i=a.timestamp?new Date(a.timestamp).getTime():null;if("system"===a.type&&("stop_hook_summary"===a.subtype||"turn_duration"===a.subtype))return{matched:!0,idle:!0,stale:!1,needsStaleRecheck:!1,staleMs:0,lastEntryTs:i,interrupted:!1};if("assistant"===a.type){let t=a.message?.stop_reason;if(!t){let t=e>2e4;return{matched:!0,idle:t,stale:!0,needsStaleRecheck:!t,staleMs:2e4,lastEntryTs:i,interrupted:!1}}return{matched:!0,idle:"tool_use"!==t,stale:!1,needsStaleRecheck:!1,staleMs:0,lastEntryTs:i,interrupted:!1}}if("user"===a.type){let t=a.message?.content;if(Array.isArray(t)&&1===t.length&&"string"==typeof t[0]?.text&&t[0].text.startsWith(d.INTERRUPT_PREFIX))return{matched:!0,idle:!0,stale:!1,needsStaleRecheck:!1,staleMs:0,lastEntryTs:i,interrupted:!0};let s=e>9e4;return{matched:!0,idle:s,stale:!0,needsStaleRecheck:!s,staleMs:9e4,lastEntryTs:i,interrupted:!1}}}catch{continue}return{matched:!1,idle:e>9e4,stale:!0,needsStaleRecheck:e<=9e4,staleMs:9e4,lastEntryTs:null,interrupted:!1}},H=async t=>{try{let e=await h.default.stat(t);if(0===e.size)return{idle:!0,stale:!1,lastAssistantSnippet:null,currentAction:null,reset:!1,lastEntryTs:null,staleMs:0,interrupted:!1};let s=z.get(t);if(s&&s.mtimeMs===e.mtimeMs){if(z.delete(t),z.set(t,s),s.idle)return{idle:!0,stale:s.stale,lastAssistantSnippet:s.lastAssistantSnippet,currentAction:s.currentAction,reset:s.reset,lastEntryTs:s.lastEntryTs,staleMs:s.staleMs,interrupted:s.interrupted};if(s.needsStaleRecheck)return{idle:Date.now()-e.mtimeMs>s.staleMs,stale:!0,lastAssistantSnippet:s.lastAssistantSnippet,currentAction:s.currentAction,reset:s.reset,lastEntryTs:s.lastEntryTs,staleMs:s.staleMs,interrupted:s.interrupted};return{idle:!1,stale:!1,lastAssistantSnippet:s.lastAssistantSnippet,currentAction:s.currentAction,reset:s.reset,lastEntryTs:s.lastEntryTs,staleMs:s.staleMs,interrupted:s.interrupted}}let a=await h.default.open(t,"r");try{let s=Date.now()-e.mtimeMs,i=Math.min(e.size,8192),n=Buffer.alloc(i);await a.read(n,0,i,e.size-i);let l=n.toString("utf-8").split("\n").filter(t=>t.trim()),r=$(l,s),o=q(l);if(!r.matched&&e.size>8192){let t=Math.min(e.size,131072),i=Buffer.alloc(t);await a.read(i,0,t,e.size-t);let n=i.toString("utf-8").split("\n").filter(t=>t.trim());r=$(n,s),o.lastAssistantSnippet||o.currentAction||(o=q(n))}return z.size>=256&&z.delete(z.keys().next().value),z.set(t,{mtimeMs:e.mtimeMs,idle:r.idle,stale:r.stale,needsStaleRecheck:r.needsStaleRecheck,staleMs:r.staleMs,lastAssistantSnippet:o.lastAssistantSnippet,currentAction:o.currentAction,reset:o.reset,lastEntryTs:r.lastEntryTs,interrupted:r.interrupted}),{idle:r.idle,stale:r.stale,lastAssistantSnippet:o.lastAssistantSnippet,currentAction:o.currentAction,reset:o.reset,lastEntryTs:r.lastEntryTs,staleMs:r.staleMs,interrupted:r.interrupted}}finally{await a.close()}}catch{return{idle:!1,stale:!1,lastAssistantSnippet:null,currentAction:null,reset:!1,lastEntryTs:null,staleMs:0,interrupted:!1}}},B=async t=>{let e={toolUsage:{},touchedFiles:[],lastAssistantText:null,lastUserText:null,firstUserTs:null,lastAssistantTs:null,turnDurationMs:null};try{let s=await h.default.stat(t);if(0===s.size)return e;let a=await h.default.open(t,"r");try{let t=Math.min(s.size,131072),e=Buffer.alloc(t);await a.read(e,0,t,s.size-t);let i=e.toString("utf-8").split("\n").filter(t=>t.trim()),n={},l=new Set,r=null,o=null,c=null,u=null,d=null;for(let t=i.length-1;t>=0;t--)try{let e=JSON.parse(i[t]);if("file-history-snapshot"===e.type)break;if(e.isSidechain)continue;"system"!==e.type||"turn_duration"!==e.subtype||"number"!=typeof e.durationMs||d||(d=e.durationMs);let s=e.timestamp?new Date(e.timestamp).getTime():null;if("user"===e.type&&(s&&(u=s),!o&&Array.isArray(e.message?.content))){for(let t of e.message.content)if("text"===t.type&&t.text){o=t.text;break}}if("assistant"===e.type&&(s&&!c&&(c=s),Array.isArray(e.message?.content))){let t=null;for(let s of e.message.content)"tool_use"===s.type&&s.name&&(n[s.name]=(n[s.name]??0)+1,("Edit"===s.name||"Write"===s.name)&&s.input?.file_path&&l.add(String(s.input.file_path))),"text"===s.type&&s.text&&(t=s.text);!r&&t&&(r=t)}}catch{continue}return{toolUsage:n,touchedFiles:[...l],lastAssistantText:r,lastUserText:o,firstUserTs:u,lastAssistantTs:c,turnDurationMs:d}}finally{await a.close()}}catch{return e}},K=/^[✳⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏⠐⠈]\s+/,V=t=>t&&K.test(t)&&t.replace(K,"").trim()||null,X=globalThis;class G{tabs=new Map;pollingTimer=null;currentInterval=0;clients=new Set;initialized=!1;rateLimitsWatcher=null;lastRateLimits=null;jsonlWatchers=new Map;compactStaleTimers=new Map;async init(){if(!this.initialized){var t;let e,s,a,i,n,l;this.initialized=!0,await this.scanAll(),this.startPolling(),this.rateLimitsWatcher=(t=t=>{this.lastRateLimits=t,this.broadcast({type:"rate-limits:update",data:t})},e=null,s=null,a=0,i=async()=>{try{let e=await h.default.readFile(S.RATE_LIMITS_FILE,"utf-8"),s=JSON.parse(e);s.ts&&s.ts!==a&&(a=s.ts,t(s))}catch{}},n=()=>{i();try{(e=p.default.watch(f,(t,e)=>{e===b&&(s&&clearTimeout(s),s=setTimeout(i,500))})).on("error",()=>{g.debug(`${f} watch error, retrying...`),l(),setTimeout(n,5e3)})}catch{g.debug(`${f} not available yet, retrying...`),setTimeout(n,5e3)}},{start:n,stop:l=()=>{s&&(clearTimeout(s),s=null),e&&(e.close(),e=null)}}),this.rateLimitsWatcher.start()}}async scanAll(){let{workspaces:t}=await (0,s.getWorkspaces)(),e=await (0,n.getAllPanesInfo)();for(let t of[...this.jsonlWatchers.keys()])this.stopJsonlWatch(t);for(let s of(this.tabs.clear(),t)){let t=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(t)for(let a of(0,i.collectAllTabs)(t.root)){let t=e.get(a.sessionName),i=(0,o.getProviderByPanelType)(a.panelType),n=await this.readTabMetadata(t,i),l=a.cliState??"idle",r="busy"===l?"unknown":l,{terminalStatus:c,listeningPorts:d}=i?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(t),p=t?.command,h=t?`${t.command}|${t.path}`:void 0,m="needs-input"===r?{name:"notification",at:Date.now(),seq:0}:null;this.tabs.set(a.id,{cliState:r,workspaceId:s.id,tabName:a.name||(h?(0,u.formatTabTitle)(h):""),currentProcess:p,paneTitle:h,tmuxSession:a.sessionName,panelType:a.panelType,terminalStatus:c,listeningPorts:d,claudeSummary:a.claudeSummary,lastUserMessage:a.lastUserMessage,lastAssistantMessage:n.lastAssistantSnippet,currentAction:n.currentAction,readyForReviewAt:"ready-for-review"===r?Date.now():null,busySince:null,dismissedAt:a.dismissedAt??null,claudeSessionId:J(n.jsonlPath)??a.claudeSessionId??null,jsonlPath:n.jsonlPath,lastEvent:m,eventSeq:0}),("needs-input"===r||"unknown"===r)&&n.jsonlPath&&this.startJsonlWatch(a.id,n.jsonlPath),"unknown"===r&&this.resolveUnknown(a.id).catch(t=>F.warn("resolveUnknown failed: %s",t))}}}async resolveUnknown(t){let e=this.tabs.get(t);if(!e||"unknown"!==e.cliState)return;let s=(0,o.getProviderByPanelType)(e.panelType),a=(await (0,n.getAllPanesInfo)()).get(e.tmuxSession),i=a?.pid?await (0,l.getChildPids)(a.pid):[];if(!(a?.pid&&s&&await s.isAgentRunning(a.pid,i))){this.applyCliState(t,e,"idle",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(t,e);return}if(e.jsonlPath){let{idle:s,stale:a,lastAssistantSnippet:i}=await H(e.jsonlPath);if(s&&!a&&i){this.applyCliState(t,e,"ready-for-review",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(t,e);return}}}async readTabMetadata(t,e){let s={lastAssistantSnippet:null,currentAction:null,jsonlPath:null};if(!t||!t.pid||!e)return s;let a=await (0,l.getChildPids)(t.pid);if(!await e.isAgentRunning(t.pid,a))return s;let i=await e.detectActiveSession(t.pid,a);if("running"!==i.status||!i.jsonlPath)return{lastAssistantSnippet:null,currentAction:null,jsonlPath:i.jsonlPath??null};let{lastAssistantSnippet:n,currentAction:r}=await H(i.jsonlPath);return{lastAssistantSnippet:n,currentAction:r,jsonlPath:i.jsonlPath}}async detectTerminalStatus(t){if(!t||!t.pid)return{terminalStatus:"idle",listeningPorts:[]};let e=await (0,n.getListeningPorts)(t.pid);return e.length>0?{terminalStatus:"server",listeningPorts:e}:{terminalStatus:n.SAFE_SHELLS.has(t.command)?"idle":"running",listeningPorts:[]}}getPollingInterval(){let t=this.tabs.size;return t>=21?6e4:t>=11?45e3:3e4}async rescan(){await this.scanAll()}startPolling(){this.stopPolling(),this.currentInterval=this.getPollingInterval(),this.pollingTimer=setInterval(()=>{this.poll().catch(t=>{F.error({err:t},"Polling error")})},this.currentInterval)}stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null,this.currentInterval=0)}async poll(){let{workspaces:t}=await (0,s.getWorkspaces)(),e=await (0,n.getAllPanesInfo)(),r=new Set,c=new Set(this.tabs.keys()),d=Date.now();for(let s of t){let t=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(t)for(let c of(0,i.collectAllTabs)(t.root)){r.add(c.id);let t=this.tabs.get(c.id),i=e.get(c.sessionName),p=(0,o.getProviderByPanelType)(c.panelType),{terminalStatus:h,listeningPorts:m}=p?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(i),y=i?.command,S=i?`${i.command}|${i.path}`:void 0;if(!t){let t=c.cliState??"idle",e="busy"===t?"unknown":t,a=await this.readTabMetadata(i,p),n="needs-input"===e?{name:"notification",at:Date.now(),seq:0}:null,l={cliState:e,workspaceId:s.id,tabName:c.name||(S?(0,u.formatTabTitle)(S):""),currentProcess:y,paneTitle:S,tmuxSession:c.sessionName,panelType:c.panelType,terminalStatus:h,listeningPorts:m,claudeSummary:c.claudeSummary,lastUserMessage:c.lastUserMessage,lastAssistantMessage:a.lastAssistantSnippet,currentAction:a.currentAction,claudeSessionId:J(a.jsonlPath)??c.claudeSessionId??null,jsonlPath:a.jsonlPath,lastEvent:n,eventSeq:0};this.tabs.set(c.id,l),this.persistToLayout(l),this.broadcastUpdate(c.id,l),"unknown"===e&&this.resolveUnknown(c.id).catch(t=>F.warn("resolveUnknown failed: %s",t));continue}let g=t.currentProcess!==y,f=t.lastUserMessage!==c.lastUserMessage,b=t.panelType!==c.panelType,w=await this.readTabMetadata(i,p);t.tabName=c.name||(S?(0,u.formatTabTitle)(S):""),t.currentProcess=y,t.paneTitle=S,t.workspaceId=s.id,t.panelType=c.panelType,t.claudeSessionId=J(w.jsonlPath)??c.claudeSessionId??null,t.jsonlPath=w.jsonlPath??t.jsonlPath,t.lastUserMessage=c.lastUserMessage,g&&(t.processRetries=3);let T=!g&&(t.processRetries??0)>0;T&&(t.processRetries=t.processRetries-1);let A=t.listeningPorts,v=A?.length!==m.length||m.some((t,e)=>A[e]!==t),P=t.terminalStatus!==h||v;P&&(t.terminalStatus=h,t.listeningPorts=m);let k=!1;if("busy"===t.cliState||"needs-input"===t.cliState){let e=V(await (0,n.getPaneTitle)(c.sessionName));e&&e!==t.claudeSummary&&(t.claudeSummary=e,k=!0,(0,a.updateTabClaudeSummary)(c.sessionName,e).catch(()=>{}))}else t.claudeSummary!==c.claudeSummary&&(t.claudeSummary=c.claudeSummary,k=!0);if("busy"===t.cliState&&t.lastEvent&&d-t.lastEvent.at>6e5){let e=i?.pid?await (0,l.getChildPids)(i.pid):[];if(!(i?.pid&&p&&await p.isAgentRunning(i.pid,e))){F.info({tabId:c.id},"busy stuck — agent process gone, forcing idle"),this.applyCliState(c.id,t,"idle",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(c.id,t);continue}}(P||g||T||f||b||k)&&this.broadcastUpdate(c.id,t)}}for(let t of c)!r.has(t)&&this.tabs.has(t)&&(this.stopJsonlWatch(t),this.tabs.delete(t),this.broadcastRemove(t));let p=this.getPollingInterval();this.pollingTimer&&p!==this.currentInterval&&this.startPolling()}getAllForClient(){let t={};for(let[e,s]of this.tabs)t[e]={cliState:s.cliState,workspaceId:s.workspaceId,tabName:s.tabName,currentProcess:s.currentProcess,paneTitle:s.paneTitle,panelType:s.panelType,terminalStatus:s.terminalStatus,listeningPorts:s.listeningPorts,claudeSummary:s.claudeSummary,lastUserMessage:s.lastUserMessage,lastAssistantMessage:s.lastAssistantMessage,currentAction:s.currentAction,readyForReviewAt:s.readyForReviewAt,busySince:s.busySince,dismissedAt:s.dismissedAt,claudeSessionId:s.claudeSessionId,lastEvent:s.lastEvent,eventSeq:s.eventSeq};return t}applyCliState(t,e,s,a={}){if(e.cliState===s)return;let i=e.busySince;e.cliState=s,e.readyForReviewAt="ready-for-review"===s?Date.now():null,e.busySince="busy"===s?Date.now():null,"busy"===s&&(e.dismissedAt=null),"ready-for-review"===s&&e.jsonlPath&&new Promise(t=>setTimeout(t,500)).then(()=>this.saveSessionHistory(t,e,i,!1)).catch(t=>{F.warn("Failed to save session history: %s",t)}),"ready-for-review"!==s||a.silent||this.sendWebPush(t,e,"review").catch(t=>{F.warn("Web push failed: %s",t)}),"needs-input"!==s||a.silent||this.sendWebPush(t,e,"needs-input").catch(t=>{F.warn("Web push failed: %s",t)});let n=("busy"===s||"needs-input"===s)&&e.jsonlPath,l="ready-for-review"===s&&this.jsonlWatchers.has(t);n&&!this.jsonlWatchers.has(t)?this.startJsonlWatch(t,e.jsonlPath):!n&&!l&&this.jsonlWatchers.has(t)&&this.stopJsonlWatch(t)}async saveSessionHistory(t,e,a,i){if(!e.lastUserMessage)return;let n=e.jsonlPath?await B(e.jsonlPath):null,{workspaces:l}=await (0,s.getWorkspaces)(),r=l.find(t=>t.id===e.workspaceId),o=Date.now(),c=n?.firstUserTs??a??o,u=i?o:n?.lastAssistantTs??o,d=i?u-c:n?.turnDurationMs??u-c,p={id:(0,x.nanoid)(),workspaceId:e.workspaceId,workspaceName:r?.name??e.workspaceId,workspaceDir:r?.directories[0]??null,tabId:t,claudeSessionId:e.claudeSessionId??null,prompt:n?.lastUserText??e.lastUserMessage,result:n?.lastAssistantText??null,startedAt:c,completedAt:u,duration:d,dismissedAt:u,toolUsage:n?.toolUsage??{},touchedFiles:n?.touchedFiles??[],...i?{cancelled:!0}:{}};await E(p),this.broadcast({type:"session-history:update",entry:p})}dismissTab(t,e){let s=this.tabs.get(t);if(!s||"ready-for-review"!==s.cliState)return;let a=Date.now();this.applyCliState(t,s,"idle",{silent:!0}),s.dismissedAt=a,this.persistToLayout(s),this.broadcastUpdate(t,s,e),L(t,a).then(t=>{t&&this.broadcast({type:"session-history:update",entry:t})}).catch(t=>{F.warn("Failed to update session history dismissedAt: %s",t)})}ackNotificationInput(t,e){let s=this.tabs.get(t);s&&"needs-input"===s.cliState&&s.lastEvent?.name==="notification"&&s.lastEvent.seq===e&&(C.debug({tabId:t,seq:e},"ack: needs-input→busy"),this.applyCliState(t,s,"busy"),this.persistToLayout(s),this.broadcastUpdate(t,s))}async recoverUnknownIfPending(t){let e=this.tabs.get(t);if(!e)return{recovered:!1,reason:"no-entry"};if("unknown"!==e.cliState)return{recovered:!1,reason:"not-unknown"};let s=await (0,w.capturePaneAtWidth)(e.tmuxSession,120,50).catch(t=>(F.warn("recoverUnknownIfPending capture failed: %s",t),null));if(!s)return{recovered:!1,reason:"capture-failed"};let{options:a}=(0,T.parsePermissionOptions)(s);if(0===a.length)return{recovered:!1,reason:"no-options"};let i=Date.now(),n=(e.eventSeq??0)+1;return e.eventSeq=n,e.lastEvent={name:"notification",at:i,seq:n},C.debug({tabId:t,seq:n,options:a.length},"recover unknown→needs-input from pane capture"),this.applyCliState(t,e,"needs-input",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(t,e),{recovered:!0}}findTabIdBySession(t){for(let[e,s]of this.tabs)if(s.tmuxSession===t)return e}updateTabFromHook(t,e,s){let a=this.findTabIdBySession(t);if(!a)return void C.debug({tmuxSession:t,event:e,notificationType:s},"no tabId for session");let i=this.tabs.get(a);if(!i)return void C.debug({tabId:a,event:e,notificationType:s},"no entry for tab");if("pre-compact"===e||"post-compact"===e){C.debug({tabId:a,event:e},"compact hook"),this.setCompacting(a,i,"pre-compact"===e?Date.now():null);return}if("session-start"!==e&&"prompt-submit"!==e&&"notification"!==e&&"stop"!==e&&"interrupt"!==e)return void C.debug({tabId:a,event:e,notificationType:s},"unknown event, ignoring");if("notification"===e&&s&&!D.has(s))return void C.debug({tabId:a,event:e,notificationType:s},"non-input notification, skipping state transition");let n=Date.now(),l=(i.eventSeq??0)+1;i.eventSeq=l,i.lastEvent={name:e,at:n,seq:l},this.broadcast({type:"status:hook-event",tabId:a,event:i.lastEvent});let r=i.cliState,o="cancelled"===r?r:((t,e)=>{if(!t)return e;switch(t.name){case"session-start":case"interrupt":return"idle";case"prompt-submit":return"busy";case"notification":return"needs-input";case"stop":return"ready-for-review"}})(i.lastEvent,r);if(C.debug({tabId:a,event:e,notificationType:s,seq:l,prevState:r,newState:o,transition:r!==o},`processed ${e}${s?`(${s})`:""} ${r}→${o}`),r!==o&&(this.applyCliState(a,i,o),this.persistToLayout(i),this.broadcastUpdate(a,i)),"busy"!==o&&"needs-input"!==o||i.jsonlPath||this.resolveAndWatchJsonl(a,t).catch(()=>{}),"stop"===e&&i.jsonlPath){let t=()=>{H(i.jsonlPath).then(({currentAction:t,lastAssistantSnippet:e,reset:s})=>{let n=!1;s?(null!==i.currentAction&&(i.currentAction=null,n=!0),null!==i.lastAssistantMessage&&(i.lastAssistantMessage=null,n=!0)):(null!==t&&t.summary!==i.currentAction?.summary&&(i.currentAction=t,n=!0),null!==e&&i.lastAssistantMessage!==e&&(i.lastAssistantMessage=e,n=!0)),n&&this.broadcastUpdate(a,i)}).catch(()=>{})};t(),setTimeout(()=>{z.delete(i.jsonlPath),t()},500)}}setCompacting(t,e,s){let a=this.compactStaleTimers.get(t);if(a&&(clearTimeout(a),this.compactStaleTimers.delete(t)),(e.compactingSince??null)!==s&&(e.compactingSince=s,this.broadcastUpdate(t,e),null!==s)){let e=setTimeout(()=>{this.compactStaleTimers.delete(t);let e=this.tabs.get(t);e&&e.compactingSince===s&&(e.compactingSince=null,C.debug({tabId:t},"compact stale, auto-cleared"),this.broadcastUpdate(t,e))},6e4);this.compactStaleTimers.set(t,e)}}removeTab(t){let e=this.tabs.get(t);e&&("busy"===e.cliState||"needs-input"===e.cliState)&&e.lastUserMessage&&this.saveSessionHistory(t,e,e.busySince,!0).catch(t=>{F.warn("Failed to save cancelled session history: %s",t)}),this.stopJsonlWatch(t);let s=this.compactStaleTimers.get(t);s&&(clearTimeout(s),this.compactStaleTimers.delete(t)),this.tabs.delete(t),this.broadcastRemove(t)}reconcileWorkspaceTabs(t,e){let s=new Set(e);for(let[e,a]of this.tabs)a.workspaceId!==t||s.has(e)||this.removeTab(e)}removeWorkspaceTabs(t){for(let[e,s]of this.tabs)s.workspaceId===t&&this.removeTab(e)}registerTab(t,e){this.tabs.set(t,e),this.broadcastUpdate(t,e)}addClient(t){this.clients.add(t),this.lastRateLimits&&t.readyState===e.WebSocket.OPEN&&t.send(JSON.stringify({type:"rate-limits:update",data:this.lastRateLimits}))}removeClient(t){this.clients.delete(t)}persistToLayout(t){(0,a.updateTabCliStatus)(t.tmuxSession,t.cliState,t.dismissedAt).catch(()=>{})}broadcastUpdate(t,e,s){let a={type:"status:update",tabId:t,cliState:e.cliState,workspaceId:e.workspaceId,tabName:e.tabName,currentProcess:e.currentProcess,paneTitle:e.paneTitle,panelType:e.panelType,terminalStatus:e.terminalStatus,listeningPorts:e.listeningPorts,claudeSummary:e.claudeSummary,lastUserMessage:e.lastUserMessage,lastAssistantMessage:e.lastAssistantMessage,currentAction:e.currentAction,readyForReviewAt:e.readyForReviewAt,busySince:e.busySince,dismissedAt:e.dismissedAt,claudeSessionId:e.claudeSessionId,compactingSince:e.compactingSince,lastEvent:e.lastEvent,eventSeq:e.eventSeq};this.broadcast(a,s)}broadcastRemove(t){this.broadcast({type:"status:update",tabId:t,cliState:null,workspaceId:"",tabName:""})}static BACKPRESSURE_LIMIT=1048576;broadcast(t,s){let a=JSON.stringify(t);for(let t of this.clients)t!==s&&t.readyState===e.WebSocket.OPEN&&t.bufferedAmount<G.BACKPRESSURE_LIMIT&&t.send(a)}async resolveAndWatchJsonl(t,e){let s=this.tabs.get(t);if(!s||s.jsonlPath)return;let l=null,o=(0,a.parseSessionName)(e);if(o){let r=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(o.wsId));if(r){let a=(0,i.collectAllTabs)(r.root).find(t=>t.sessionName===e);if(a?.claudeSessionId){let t=await (0,n.getSessionCwd)(e);if(t){let e=`${(0,c.cwdToProjectPath)(t)}/${a.claudeSessionId}.jsonl`;try{await h.default.access(e),l=e}catch{}}}a?.lastUserMessage&&s.lastUserMessage!==a.lastUserMessage&&(s.lastUserMessage=a.lastUserMessage,this.broadcastUpdate(t,s))}}if(!l){let t=await (0,n.getSessionPanePid)(e);if(t){let{info:e}=await (0,r.detectAnyActiveSession)(t);l=e.jsonlPath}}l&&(s.jsonlPath=l,s.claudeSessionId=J(l)??s.claudeSessionId,"busy"!==s.cliState&&"needs-input"!==s.cliState||this.jsonlWatchers.has(t)||this.startJsonlWatch(t,l))}startJsonlWatch(t,e){let s=this.jsonlWatchers.get(t);if(s?.jsonlPath!==e){s&&this.stopJsonlWatch(t),F.debug("startJsonlWatch tabId=%s path=%s",t,e);try{let s=(0,p.watch)(e,()=>{let s=this.jsonlWatchers.get(t);s&&(s.debounceTimer&&clearTimeout(s.debounceTimer),s.debounceTimer=setTimeout(()=>{this.onJsonlFileChange(t,e).catch(()=>{})},100))});s.on("error",()=>{this.stopJsonlWatch(t)}),this.jsonlWatchers.set(t,{watcher:s,jsonlPath:e,debounceTimer:null})}catch{}}}stopJsonlWatch(t){let e=this.jsonlWatchers.get(t);if(e){F.debug("stopJsonlWatch tabId=%s",t),e.debounceTimer&&clearTimeout(e.debounceTimer);try{e.watcher.close()}catch{}this.jsonlWatchers.delete(t)}}async onJsonlFileChange(t,e){let s=this.tabs.get(t);if(!s||"busy"!==s.cliState&&"needs-input"!==s.cliState&&"unknown"!==s.cliState&&"ready-for-review"!==s.cliState)return void this.stopJsonlWatch(t);let{currentAction:a,lastAssistantSnippet:i,reset:n,interrupted:l,lastEntryTs:r}=await H(e);l&&"busy"===s.cliState&&null!==r&&r>(s.lastInterruptTs??0)&&r>(s.lastEvent?.at??0)&&(s.lastInterruptTs=r,C.debug({tabId:t,lastEntryTs:r},"synthetic interrupt from JSONL"),this.updateTabFromHook(s.tmuxSession,"interrupt"));let o=!1;n?(null!==s.currentAction&&(s.currentAction=null,o=!0),null!==s.lastAssistantMessage&&(s.lastAssistantMessage=null,o=!0)):(null!==a&&a.summary!==s.currentAction?.summary&&(s.currentAction=a,o=!0),null!==i&&s.lastAssistantMessage!==i&&(s.lastAssistantMessage=i,o=!0)),o&&this.broadcastUpdate(t,s)}shutdown(){for(let t of(this.stopPolling(),this.rateLimitsWatcher?.stop(),[...this.jsonlWatchers.keys()]))this.stopJsonlWatch(t);for(let t of this.clients)t.readyState===e.WebSocket.OPEN&&t.close(1001,"Server shutting down");this.clients.clear()}notifyLastUserMessage(t,e){let s=(0,a.parseSessionName)(t);if(!s)return;let i=this.tabs.get(s.tabId);i&&i.lastUserMessage!==e&&(i.lastUserMessage=e,this.broadcastUpdate(s.tabId,i))}async sendWebPush(t,e,a){let i=await (0,R.getSubscriptions)();if(0===i.length)return;let n=await (0,N.getVAPIDKeys)();_.default.setVapidDetails("mailto:noreply@purplemux.app",n.publicKey,n.privateKey);let l=e.lastUserMessage?.slice(0,100)||e.tabName||t,r=(await (0,s.getWorkspaces)()).workspaces.find(t=>t.id===e.workspaceId),o=JSON.stringify({title:"needs-input"===a?"Input Required":"Task Complete",body:l,tabId:t,workspaceId:e.workspaceId,claudeSessionId:e.claudeSessionId??null,workspaceName:r?.name??"",workspaceDir:r?.directories[0]??null});if(!(0,R.isAnyDeviceVisible)())for(let t of i)try{await _.default.sendNotification(t,o)}catch(s){let e=s.statusCode;(410===e||404===e)&&await (0,R.removeSubscription)(t.endpoint),F.warn("Web push send error: %s",e)}}}t.s(["getStatusManager",0,()=>{if(!X.__ptStatusManager){let t=new G;X.__ptStatusManager=t,(0,a.setLayoutReconciler)({reconcileWorkspaceTabs:(e,s)=>t.reconcileWorkspaceTabs(e,s),removeWorkspaceTabs:e=>t.removeWorkspaceTabs(e)})}return X.__ptStatusManager}],964759)}];
14
2
 
15
3
  //# sourceMappingURL=src_lib_status-manager_ts_003hlhy._.js.map
@@ -1,42 +1,3 @@
1
- module.exports=[322429,160874,e=>{"use strict";var a=e.i(924868),t=e.i(814747),r=e.i(446786),i=e.i(44014),s=e.i(459015),o=e.i(25146),l=e.i(666126),n=e.i(825265),u=e.i(804767);(0,o.createLogger)("claude-prompt");let d=e=>t.default.join((0,n.resolveLayoutDir)(e),"claude-prompt.md"),c=async e=>{let r=d(e.id);await a.default.mkdir(t.default.dirname(r),{recursive:!0});let i=`# purplemux context
2
-
3
- You are running inside a purplemux workspace tab.
4
-
5
- - **Workspace ID**: \`${e.id}\`
6
-
7
- Use \`purplemux workspaces\` if you need the workspace name or directories.
8
-
9
- ## purplemux CLI
10
-
11
- The \`purplemux\` CLI lets you inspect and control other tabs in this workspace.
12
- It reads port and token from \`~/.purplemux/{port,cli-token}\` automatically,
13
- so no environment setup is needed.
14
-
15
- ### Commands
16
-
17
- \`\`\`bash
18
- purplemux workspaces # list all workspaces
19
- purplemux tab list -w ${e.id} # list tabs in this workspace
20
- purplemux tab create -w ${e.id} [-n NAME] [-t TYPE] # create a tab (type: terminal | claude-code | web-browser | diff)
21
- purplemux tab send -w ${e.id} TAB_ID CONTENT... # send input to a tab
22
- purplemux tab status -w ${e.id} TAB_ID # tab status
23
- purplemux tab result -w ${e.id} TAB_ID # capture current pane content
24
- purplemux tab close -w ${e.id} TAB_ID # close a tab
25
- \`\`\`
26
-
27
- For the full HTTP API reference (including endpoint paths and payloads),
28
- run:
29
-
30
- \`\`\`bash
31
- purplemux api-guide
32
- \`\`\`
33
-
34
- ### When to use
35
-
36
- - Delegate work to another tab when a task benefits from isolation
37
- (long-running builds, different project context, parallel exploration).
38
- - Poll \`status\` and read \`result\` to verify delegated work.
39
- - Prefer small, scoped tabs over cramming everything into one session.
40
- `;try{if(await a.default.readFile(r,"utf-8")===i)return r}catch{}return await a.default.writeFile(r,i,"utf-8"),r};e.s(["getClaudePromptPath",0,d,"writeClaudePromptFile",0,c],160874);let p=(0,o.createLogger)("workspace"),w="Workspace ",f=t.default.join(r.default.homedir(),".purplemux"),y=t.default.join(f,"workspaces.json"),m=t.default.join(f,"layout.json"),k=t.default.join(f,"tabs.json"),g=globalThis;g.__purplemuxWorkspaceLock||(g.__purplemuxWorkspaceLock=Promise.resolve());let h=async e=>{let a,t=new Promise(e=>{a=e}),r=g.__purplemuxWorkspaceLock;g.__purplemuxWorkspaceLock=t,await r;try{return await e()}finally{a()}},b=()=>({workspaces:[],groups:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),I=e=>(e.groups||(e.groups=[]),e.groups),W=async()=>{let e;try{e=await a.default.readFile(y,"utf-8")}catch{return null}try{let a=JSON.parse(e);for(let e of a.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory),delete e.order;for(let e of(Array.isArray(a.groups)||(a.groups=[]),a.groups))delete e.order;let t=new Set(a.groups.map(e=>e.id));for(let e of a.workspaces)e.groupId&&!t.has(e.groupId)&&(e.groupId=null);return a}catch{p.warn("Failed to parse workspaces.json, starting empty");try{await a.default.copyFile(y,y.replace(/\.json$/,".json.bak"))}catch{}return null}},v=async e=>{let t;t=I(e),e.workspaces=((e,a)=>{let t=new Set(a.map(e=>e.id)),r=new Map,i=[];for(let a of e){let e=a.groupId??null;if(e&&t.has(e)){let t=r.get(e)??[];t.push(a),r.set(e,t)}else i.push(a)}let s=[];for(let e of a){let a=r.get(e.id);a&&s.push(...a)}return s.push(...i),s})(e.workspaces,t);let{workspaces:r,groups:i,activeWorkspaceId:s,sidebarCollapsed:o,sidebarWidth:n}=e,u=JSON.stringify({workspaces:r,groups:i??[],activeWorkspaceId:s,sidebarCollapsed:o,sidebarWidth:n});if(g.__purplemuxWorkspacesContentCache===u)return;e.updatedAt=new Date().toISOString();let d=y+".tmp";try{await a.default.writeFile(d,JSON.stringify(e,null,2),{mode:384}),await a.default.rename(d,y)}catch(e){throw await a.default.unlink(d).catch(()=>{}),e}g.__purplemuxWorkspacesContentCache=u,(0,l.broadcastSync)({type:"workspace"})},x=async()=>{let e=await (0,n.readLayoutFile)(m);if(!e)return null;let t="ws-default";await a.default.mkdir((0,n.resolveLayoutDir)(t),{recursive:!0}),await (0,n.writeLayoutFile)(e,(0,n.resolveLayoutFile)(t));let i={workspaces:[{id:t,name:"default",directories:[r.default.homedir()]}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await v(i),p.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},$=async()=>{try{let e=await a.default.readFile(k,"utf-8"),t=JSON.parse(e);if(!Array.isArray(t.tabs)||0===t.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,s={root:{type:"pane",id:r,tabs:t.tabs,activeTabId:t.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},o=m+".tmp";try{await a.default.writeFile(o,JSON.stringify(s,null,2),{mode:384}),await a.default.rename(o,m)}catch(e){throw await a.default.unlink(o).catch(()=>{}),e}return p.info("tabs.json → layout.json migration complete"),await x()}catch{return null}},L=async()=>{await a.default.mkdir(t.default.join(f,"workspaces"),{recursive:!0});let e=await W();if(!e&&(await a.default.access(m).then(()=>!0).catch(()=>!1)?e=await x():await a.default.access(k).then(()=>!0).catch(()=>!1)&&(e=await $())),!e){let a=b();await v(a),e=a,p.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,s.listSessions)();for(let a of e.workspaces){let e=(0,n.resolveLayoutFile)(a.id),t=await (0,n.readLayoutFile)(e);if(!t){p.warn(`Workspace '${a.name}': layout.json corrupted, reset to default pane`),t=await (0,n.createDefaultLayout)(a.id,a.directories[0]),await (0,n.writeLayoutFile)(t,e);continue}let i=(0,u.collectAllTabs)(t.root).map(e=>e.sessionName),s=`pt-${a.id}-`,o=r.filter(e=>i.includes(e)||e.startsWith(s));try{await (0,n.crossCheckLayout)(t,o,a.id,a.directories[0])&&await (0,n.writeLayoutFile)(t,e)}catch(e){p.error(`Workspace '${a.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},S=async()=>{let e=await W();return e?{workspaces:e.workspaces,groups:e.groups??[],activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],groups:[],sidebarCollapsed:!1,sidebarWidth:220}},D=async()=>{let e=await W();return e?.activeWorkspaceId&&e.workspaces.some(a=>a.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},F=async e=>{let a=await W();return a?.workspaces.find(a=>a.id===e)},C=async(e,t,r)=>h(async()=>{let s;try{s=await a.default.stat(e)}catch{throw Error("Directory does not exist")}if(!s.isDirectory())throw Error("Please enter a directory path, not a file");let o=await W()??b(),l=`ws-${(0,i.nanoid)(6)}`,u=t?.trim()||(e=>{let a=0;for(let t of e)if(t.name.startsWith(w)){let e=parseInt(t.name.slice(w.length),10);e>a&&(a=e)}return`${w}${a+1}`})(o.workspaces),d=await (0,n.createDefaultLayout)(l,e,r);await a.default.mkdir((0,n.resolveLayoutDir)(l),{recursive:!0}),await (0,n.writeLayoutFile)(d,(0,n.resolveLayoutFile)(l));let f={id:l,name:u,directories:[e]};return o.workspaces.push(f),await v(o),await c(f),p.debug(`Created: ${l} (${u}, ${e})`),f}),A=async e=>h(async()=>{let a=await W()??b(),t=a.workspaces.findIndex(a=>a.id===e);if(-1===t)return!1;let r=a.workspaces[t],i=await (0,n.readLayoutFile)((0,n.resolveLayoutFile)(e));if(i)for(let e of(0,u.collectAllTabs)(i.root))try{await (0,s.killSession)(e.sessionName)}catch{}try{await (0,n.removeLayoutFile)(e)}catch{}return a.workspaces.splice(t,1),await v(a),p.info(`Deleted: ${e} (${r.name})`),!0}),j=async(e,a)=>h(async()=>{let t=await W();if(!t)return null;let r=t.workspaces.find(a=>a.id===e);return r?(r.name=a,await v(t),await c(r),p.debug(`Renamed: ${e} → "${a}"`),{...r}):null}),_=async e=>h(async()=>{let a=await W()??b();void 0!==e.activeWorkspaceId&&(a.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(a.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(a.sidebarWidth=e.sidebarWidth),await v(a)}),T=async(e,a)=>h(async()=>{let t=await W();if(!t)return;let r=t.workspaces.find(a=>a.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(a)&&(r.directories=a,await v(t),await c(r))}),P=async e=>h(async()=>{let a=await W()??b(),t=new Map(a.workspaces.map(e=>[e.id,e])),r=new Set((a.groups??[]).map(e=>e.id)),i=[];for(let a of e){let e=t.get(a.id);if(!e)return!1;void 0!==a.groupId&&(e.groupId=a.groupId&&r.has(a.groupId)?a.groupId:null),i.push(e)}return i.length===a.workspaces.length&&(a.workspaces=i,await v(a),!0)}),N=async e=>h(async()=>{let a=await W()??b(),t=I(a),r=e.trim()||`Group ${t.length+1}`,s={id:`grp-${(0,i.nanoid)(6)}`,name:r,collapsed:!1};return t.push(s),await v(a),p.debug(`Group created: ${s.id} (${s.name})`),s}),O=async(e,a)=>h(async()=>{let t=await W();if(!t)return null;let r=(t.groups??[]).find(a=>a.id===e);if(!r)return null;let i=a.trim();return i?(r.name=i,await v(t),{...r}):r}),G=async(e,a)=>h(async()=>{let t=await W();if(!t)return!1;let r=(t.groups??[]).find(a=>a.id===e);return!!r&&(r.collapsed===a||(r.collapsed=a,await v(t),!0))}),J=async e=>h(async()=>{let a=await W();if(!a)return!1;let t=I(a),r=t.findIndex(a=>a.id===e);if(-1===r)return!1;for(let t of a.workspaces)t.groupId===e&&(t.groupId=null);return t.splice(r,1),await v(a),p.info(`Group ungrouped: ${e}`),!0}),E=async e=>h(async()=>{let a=await W();if(!a)return!1;let t=I(a),r=new Map(t.map(e=>[e.id,e])),i=[];for(let a of e){let e=r.get(a);if(!e)return!1;i.push(e)}return i.length===t.length&&(a.groups=i,await v(a),!0)}),B=async(e,a)=>h(async()=>{let t=await W();if(!t)return!1;let r=t.workspaces.find(a=>a.id===e);if(!r)return!1;let i=new Set((t.groups??[]).map(e=>e.id)),s=a&&i.has(a)?a:null;return(r.groupId??null)===s||(r.groupId=s,await v(t),!0)}),M=async e=>{try{if(!(await a.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:t.default.basename(e)}};e.s(["createGroup",0,N,"createWorkspace",0,C,"deleteWorkspace",0,A,"getActiveWorkspaceId",0,D,"getWorkspaceById",0,F,"getWorkspaces",0,S,"initWorkspaceStore",0,L,"renameGroup",0,O,"renameWorkspace",0,j,"reorderGroups",0,E,"reorderWorkspaces",0,P,"setGroupCollapsed",0,G,"setWorkspaceGroup",0,B,"ungroupGroup",0,J,"updateActive",0,_,"updateWorkspaceDirectories",0,T,"validateDirectory",0,M],322429)}];
1
+ module.exports=[322429,e=>{"use strict";var a=e.i(924868),t=e.i(814747),r=e.i(446786),i=e.i(44014),s=e.i(459015),o=e.i(25146),l=e.i(666126),n=e.i(825265),d=e.i(804767),u=e.i(160874);let c=(0,o.createLogger)("workspace"),p="Workspace ",w=t.default.join(r.default.homedir(),".purplemux"),f=t.default.join(w,"workspaces.json"),y=t.default.join(w,"layout.json"),k=t.default.join(w,"tabs.json"),g=globalThis;g.__purplemuxWorkspaceLock||(g.__purplemuxWorkspaceLock=Promise.resolve());let h=async e=>{let a,t=new Promise(e=>{a=e}),r=g.__purplemuxWorkspaceLock;g.__purplemuxWorkspaceLock=t,await r;try{return await e()}finally{a()}},m=()=>({workspaces:[],groups:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),W=e=>(e.groups||(e.groups=[]),e.groups),I=async()=>{let e;try{e=await a.default.readFile(f,"utf-8")}catch{return null}try{let a=JSON.parse(e);for(let e of a.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory),delete e.order;for(let e of(Array.isArray(a.groups)||(a.groups=[]),a.groups))delete e.order;let t=new Set(a.groups.map(e=>e.id));for(let e of a.workspaces)e.groupId&&!t.has(e.groupId)&&(e.groupId=null);return a}catch{c.warn("Failed to parse workspaces.json, starting empty");try{await a.default.copyFile(f,f.replace(/\.json$/,".json.bak"))}catch{}return null}},b=async e=>{let t;t=W(e),e.workspaces=((e,a)=>{let t=new Set(a.map(e=>e.id)),r=new Map,i=[];for(let a of e){let e=a.groupId??null;if(e&&t.has(e)){let t=r.get(e)??[];t.push(a),r.set(e,t)}else i.push(a)}let s=[];for(let e of a){let a=r.get(e.id);a&&s.push(...a)}return s.push(...i),s})(e.workspaces,t);let{workspaces:r,groups:i,activeWorkspaceId:s,sidebarCollapsed:o,sidebarWidth:n}=e,d=JSON.stringify({workspaces:r,groups:i??[],activeWorkspaceId:s,sidebarCollapsed:o,sidebarWidth:n});if(g.__purplemuxWorkspacesContentCache===d)return;e.updatedAt=new Date().toISOString();let u=f+".tmp";try{await a.default.writeFile(u,JSON.stringify(e,null,2),{mode:384}),await a.default.rename(u,f)}catch(e){throw await a.default.unlink(u).catch(()=>{}),e}g.__purplemuxWorkspacesContentCache=d,(0,l.broadcastSync)({type:"workspace"})},v=async()=>{let e=await (0,n.readLayoutFile)(y);if(!e)return null;let t="ws-default";await a.default.mkdir((0,n.resolveLayoutDir)(t),{recursive:!0}),await (0,n.writeLayoutFile)(e,(0,n.resolveLayoutFile)(t));let i={workspaces:[{id:t,name:"default",directories:[r.default.homedir()]}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await b(i),c.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},S=async()=>{try{let e=await a.default.readFile(k,"utf-8"),t=JSON.parse(e);if(!Array.isArray(t.tabs)||0===t.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,s={root:{type:"pane",id:r,tabs:t.tabs,activeTabId:t.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},o=y+".tmp";try{await a.default.writeFile(o,JSON.stringify(s,null,2),{mode:384}),await a.default.rename(o,y)}catch(e){throw await a.default.unlink(o).catch(()=>{}),e}return c.info("tabs.json → layout.json migration complete"),await v()}catch{return null}},L=async()=>{await a.default.mkdir(t.default.join(w,"workspaces"),{recursive:!0});let e=await I();if(!e&&(await a.default.access(y).then(()=>!0).catch(()=>!1)?e=await v():await a.default.access(k).then(()=>!0).catch(()=>!1)&&(e=await S())),!e){let a=m();await b(a),e=a,c.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,s.listSessions)();for(let a of e.workspaces){let e=(0,n.resolveLayoutFile)(a.id),t=await (0,n.readLayoutFile)(e);if(!t){c.warn(`Workspace '${a.name}': layout.json corrupted, reset to default pane`),t=await (0,n.createDefaultLayout)(a.id,a.directories[0]),await (0,n.writeLayoutFile)(t,e);continue}let i=(0,d.collectAllTabs)(t.root).map(e=>e.sessionName),s=`pt-${a.id}-`,o=r.filter(e=>i.includes(e)||e.startsWith(s));try{await (0,n.crossCheckLayout)(t,o,a.id,a.directories[0])&&await (0,n.writeLayoutFile)(t,e)}catch(e){c.error(`Workspace '${a.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},F=async()=>{let e=await I();return e?{workspaces:e.workspaces,groups:e.groups??[],activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],groups:[],sidebarCollapsed:!1,sidebarWidth:220}},$=async()=>{let e=await I();return e?.activeWorkspaceId&&e.workspaces.some(a=>a.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},C=async e=>{let a=await I();return a?.workspaces.find(a=>a.id===e)},j=async(e,t,r)=>h(async()=>{let s;try{s=await a.default.stat(e)}catch{throw Error("Directory does not exist")}if(!s.isDirectory())throw Error("Please enter a directory path, not a file");let o=await I()??m(),l=`ws-${(0,i.nanoid)(6)}`,d=t?.trim()||(e=>{let a=0;for(let t of e)if(t.name.startsWith(p)){let e=parseInt(t.name.slice(p.length),10);e>a&&(a=e)}return`${p}${a+1}`})(o.workspaces),w=await (0,n.createDefaultLayout)(l,e,r);await a.default.mkdir((0,n.resolveLayoutDir)(l),{recursive:!0}),await (0,n.writeLayoutFile)(w,(0,n.resolveLayoutFile)(l));let f={id:l,name:d,directories:[e]};return o.workspaces.push(f),await b(o),await (0,u.writeClaudePromptFile)(f),c.debug(`Created: ${l} (${d}, ${e})`),f}),D=async e=>h(async()=>{let a=await I()??m(),t=a.workspaces.findIndex(a=>a.id===e);if(-1===t)return!1;let r=a.workspaces[t],i=await (0,n.readLayoutFile)((0,n.resolveLayoutFile)(e));if(i)for(let e of(0,d.collectAllTabs)(i.root))try{await (0,s.killSession)(e.sessionName)}catch{}try{await (0,n.removeLayoutFile)(e)}catch{}return a.workspaces.splice(t,1),await b(a),c.info(`Deleted: ${e} (${r.name})`),!0}),x=async(e,a)=>h(async()=>{let t=await I();if(!t)return null;let r=t.workspaces.find(a=>a.id===e);return r?(r.name=a,await b(t),await (0,u.writeClaudePromptFile)(r),c.debug(`Renamed: ${e} → "${a}"`),{...r}):null}),A=async e=>h(async()=>{let a=await I()??m();void 0!==e.activeWorkspaceId&&(a.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(a.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(a.sidebarWidth=e.sidebarWidth),await b(a)}),_=async(e,a)=>h(async()=>{let t=await I();if(!t)return;let r=t.workspaces.find(a=>a.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(a)&&(r.directories=a,await b(t),await (0,u.writeClaudePromptFile)(r))}),O=async e=>h(async()=>{let a=await I()??m(),t=new Map(a.workspaces.map(e=>[e.id,e])),r=new Set((a.groups??[]).map(e=>e.id)),i=[];for(let a of e){let e=t.get(a.id);if(!e)return!1;void 0!==a.groupId&&(e.groupId=a.groupId&&r.has(a.groupId)?a.groupId:null),i.push(e)}return i.length===a.workspaces.length&&(a.workspaces=i,await b(a),!0)}),N=async e=>h(async()=>{let a=await I()??m(),t=W(a),r=e.trim()||`Group ${t.length+1}`,s={id:`grp-${(0,i.nanoid)(6)}`,name:r,collapsed:!1};return t.push(s),await b(a),c.debug(`Group created: ${s.id} (${s.name})`),s}),G=async(e,a)=>h(async()=>{let t=await I();if(!t)return null;let r=(t.groups??[]).find(a=>a.id===e);if(!r)return null;let i=a.trim();return i?(r.name=i,await b(t),{...r}):r}),P=async(e,a)=>h(async()=>{let t=await I();if(!t)return!1;let r=(t.groups??[]).find(a=>a.id===e);return!!r&&(r.collapsed===a||(r.collapsed=a,await b(t),!0))}),J=async e=>h(async()=>{let a=await I();if(!a)return!1;let t=W(a),r=t.findIndex(a=>a.id===e);if(-1===r)return!1;for(let t of a.workspaces)t.groupId===e&&(t.groupId=null);return t.splice(r,1),await b(a),c.info(`Group ungrouped: ${e}`),!0}),T=async e=>h(async()=>{let a=await I();if(!a)return!1;let t=W(a),r=new Map(t.map(e=>[e.id,e])),i=[];for(let a of e){let e=r.get(a);if(!e)return!1;i.push(e)}return i.length===t.length&&(a.groups=i,await b(a),!0)}),E=async(e,a)=>h(async()=>{let t=await I();if(!t)return!1;let r=t.workspaces.find(a=>a.id===e);if(!r)return!1;let i=new Set((t.groups??[]).map(e=>e.id)),s=a&&i.has(a)?a:null;return(r.groupId??null)===s||(r.groupId=s,await b(t),!0)}),M=async e=>{try{if(!(await a.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:t.default.basename(e)}};e.s(["createGroup",0,N,"createWorkspace",0,j,"deleteWorkspace",0,D,"getActiveWorkspaceId",0,$,"getWorkspaceById",0,C,"getWorkspaces",0,F,"initWorkspaceStore",0,L,"renameGroup",0,G,"renameWorkspace",0,x,"reorderGroups",0,T,"reorderWorkspaces",0,O,"setGroupCollapsed",0,P,"setWorkspaceGroup",0,E,"ungroupGroup",0,J,"updateActive",0,A,"updateWorkspaceDirectories",0,_,"validateDirectory",0,M],322429)}];
41
2
 
42
3
  //# sourceMappingURL=src_lib_workspace-store_ts_0vqt073._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[666680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},688947,(a,b,c)=>{b.exports=a.x("stream",()=>require("stream"))},406461,(a,b,c)=>{b.exports=a.x("zlib",()=>require("zlib"))},522734,(a,b,c)=>{b.exports=a.x("fs",()=>require("fs"))},508171,(a,b,c)=>{b.exports=a.x("react/jsx-runtime",()=>require("react/jsx-runtime"))},127669,(a,b,c)=>{b.exports=a.x("react",()=>require("react"))},456195,(a,b,c)=>{b.exports=a.x("react-dom",()=>require("react-dom"))},398544,(a,b,c)=>{a.e,b.exports=function(){"use strict";var a="millisecond",b="second",c="minute",d="hour",e="week",f="month",g="quarter",h="year",i="date",j="Invalid Date",k=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,l=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m=function(a,b,c){var d=String(a);return!d||d.length>=b?a:""+Array(b+1-d.length).join(c)+a},n="en",o={};o[n]={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(a){var b=["th","st","nd","rd"],c=a%100;return"["+a+(b[(c-20)%10]||b[c]||b[0])+"]"}};var p="$isDayjsObject",q=function(a){return a instanceof u||!(!a||!a[p])},r=function a(b,c,d){var e;if(!b)return n;if("string"==typeof b){var f=b.toLowerCase();o[f]&&(e=f),c&&(o[f]=c,e=f);var g=b.split("-");if(!e&&g.length>1)return a(g[0])}else{var h=b.name;o[h]=b,e=h}return!d&&e&&(n=e),e||!d&&n},s=function(a,b){if(q(a))return a.clone();var c="object"==typeof b?b:{};return c.date=a,c.args=arguments,new u(c)},t={s:m,z:function(a){var b=-a.utcOffset(),c=Math.abs(b);return(b<=0?"+":"-")+m(Math.floor(c/60),2,"0")+":"+m(c%60,2,"0")},m:function a(b,c){if(b.date()<c.date())return-a(c,b);var d=12*(c.year()-b.year())+(c.month()-b.month()),e=b.clone().add(d,f),g=c-e<0,h=b.clone().add(d+(g?-1:1),f);return+(-(d+(c-e)/(g?e-h:h-e))||0)},a:function(a){return a<0?Math.ceil(a)||0:Math.floor(a)},p:function(j){return({M:f,y:h,w:e,d:"day",D:i,h:d,m:c,s:b,ms:a,Q:g})[j]||String(j||"").toLowerCase().replace(/s$/,"")},u:function(a){return void 0===a}};t.l=r,t.i=q,t.w=function(a,b){return s(a,{locale:b.$L,utc:b.$u,x:b.$x,$offset:b.$offset})};var u=function(){function m(a){this.$L=r(a.locale,null,!0),this.parse(a),this.$x=this.$x||a.x||{},this[p]=!0}var n=m.prototype;return n.parse=function(a){this.$d=function(a){var b=a.date,c=a.utc;if(null===b)return new Date(NaN);if(t.u(b))return new Date;if(b instanceof Date)return new Date(b);if("string"==typeof b&&!/Z$/i.test(b)){var d=b.match(k);if(d){var e=d[2]-1||0,f=(d[7]||"0").substring(0,3);return c?new Date(Date.UTC(d[1],e,d[3]||1,d[4]||0,d[5]||0,d[6]||0,f)):new Date(d[1],e,d[3]||1,d[4]||0,d[5]||0,d[6]||0,f)}}return new Date(b)}(a),this.init()},n.init=function(){var a=this.$d;this.$y=a.getFullYear(),this.$M=a.getMonth(),this.$D=a.getDate(),this.$W=a.getDay(),this.$H=a.getHours(),this.$m=a.getMinutes(),this.$s=a.getSeconds(),this.$ms=a.getMilliseconds()},n.$utils=function(){return t},n.isValid=function(){return this.$d.toString()!==j},n.isSame=function(a,b){var c=s(a);return this.startOf(b)<=c&&c<=this.endOf(b)},n.isAfter=function(a,b){return s(a)<this.startOf(b)},n.isBefore=function(a,b){return this.endOf(b)<s(a)},n.$g=function(a,b,c){return t.u(a)?this[b]:this.set(c,a)},n.unix=function(){return Math.floor(this.valueOf()/1e3)},n.valueOf=function(){return this.$d.getTime()},n.startOf=function(a,g){var j=this,k=!!t.u(g)||g,l=t.p(a),m=function(a,b){var c=t.w(j.$u?Date.UTC(j.$y,b,a):new Date(j.$y,b,a),j);return k?c:c.endOf("day")},n=function(a,b){return t.w(j.toDate()[a].apply(j.toDate("s"),(k?[0,0,0,0]:[23,59,59,999]).slice(b)),j)},o=this.$W,p=this.$M,q=this.$D,r="set"+(this.$u?"UTC":"");switch(l){case h:return k?m(1,0):m(31,11);case f:return k?m(1,p):m(0,p+1);case e:var s=this.$locale().weekStart||0,u=(o<s?o+7:o)-s;return m(k?q-u:q+(6-u),p);case"day":case i:return n(r+"Hours",0);case d:return n(r+"Minutes",1);case c:return n(r+"Seconds",2);case b:return n(r+"Milliseconds",3);default:return this.clone()}},n.endOf=function(a){return this.startOf(a,!1)},n.$set=function(e,g){var j,k=t.p(e),l="set"+(this.$u?"UTC":""),m=((j={}).day=l+"Date",j[i]=l+"Date",j[f]=l+"Month",j[h]=l+"FullYear",j[d]=l+"Hours",j[c]=l+"Minutes",j[b]=l+"Seconds",j[a]=l+"Milliseconds",j)[k],n="day"===k?this.$D+(g-this.$W):g;if(k===f||k===h){var o=this.clone().set(i,1);o.$d[m](n),o.init(),this.$d=o.set(i,Math.min(this.$D,o.daysInMonth())).$d}else m&&this.$d[m](n);return this.init(),this},n.set=function(a,b){return this.clone().$set(a,b)},n.get=function(a){return this[t.p(a)]()},n.add=function(a,g){var i,j=this;a=Number(a);var k=t.p(g),l=function(b){var c=s(j);return t.w(c.date(c.date()+Math.round(b*a)),j)};if(k===f)return this.set(f,this.$M+a);if(k===h)return this.set(h,this.$y+a);if("day"===k)return l(1);if(k===e)return l(7);var m=((i={})[c]=6e4,i[d]=36e5,i[b]=1e3,i)[k]||1,n=this.$d.getTime()+a*m;return t.w(n,this)},n.subtract=function(a,b){return this.add(-1*a,b)},n.format=function(a){var b=this,c=this.$locale();if(!this.isValid())return c.invalidDate||j;var d=a||"YYYY-MM-DDTHH:mm:ssZ",e=t.z(this),f=this.$H,g=this.$m,h=this.$M,i=c.weekdays,k=c.months,m=c.meridiem,n=function(a,c,e,f){return a&&(a[c]||a(b,d))||e[c].slice(0,f)},o=function(a){return t.s(f%12||12,a,"0")},p=m||function(a,b,c){var d=a<12?"AM":"PM";return c?d.toLowerCase():d};return d.replace(l,function(a,d){return d||function(a){switch(a){case"YY":return String(b.$y).slice(-2);case"YYYY":return t.s(b.$y,4,"0");case"M":return h+1;case"MM":return t.s(h+1,2,"0");case"MMM":return n(c.monthsShort,h,k,3);case"MMMM":return n(k,h);case"D":return b.$D;case"DD":return t.s(b.$D,2,"0");case"d":return String(b.$W);case"dd":return n(c.weekdaysMin,b.$W,i,2);case"ddd":return n(c.weekdaysShort,b.$W,i,3);case"dddd":return i[b.$W];case"H":return String(f);case"HH":return t.s(f,2,"0");case"h":return o(1);case"hh":return o(2);case"a":return p(f,g,!0);case"A":return p(f,g,!1);case"m":return String(g);case"mm":return t.s(g,2,"0");case"s":return String(b.$s);case"ss":return t.s(b.$s,2,"0");case"SSS":return t.s(b.$ms,3,"0");case"Z":return e}return null}(a)||e.replace(":","")})},n.utcOffset=function(){return-(15*Math.round(this.$d.getTimezoneOffset()/15))},n.diff=function(a,i,j){var k,l=this,m=t.p(i),n=s(a),o=(n.utcOffset()-this.utcOffset())*6e4,p=this-n,q=function(){return t.m(l,n)};switch(m){case h:k=q()/12;break;case f:k=q();break;case g:k=q()/3;break;case e:k=(p-o)/6048e5;break;case"day":k=(p-o)/864e5;break;case d:k=p/36e5;break;case c:k=p/6e4;break;case b:k=p/1e3;break;default:k=p}return j?k:t.a(k)},n.daysInMonth=function(){return this.endOf(f).$D},n.$locale=function(){return o[this.$L]},n.locale=function(a,b){if(!a)return this.$L;var c=this.clone(),d=r(a,b,!0);return d&&(c.$L=d),c},n.clone=function(){return t.w(this.$d,this)},n.toDate=function(){return new Date(this.valueOf())},n.toJSON=function(){return this.isValid()?this.toISOString():null},n.toISOString=function(){return this.$d.toISOString()},n.toString=function(){return this.$d.toUTCString()},m}(),v=u.prototype;return s.prototype=v,[["$ms",a],["$s",b],["$m",c],["$H",d],["$W","day"],["$M",f],["$y",h],["$D",i]].forEach(function(a){v[a[1]]=function(b){return this.$g(b,a[0],a[1])}}),s.extend=function(a,b){return a.$i||(a(b,u,s),a.$i=!0),s},s.locale=r,s.isDayjs=q,s.unix=function(a){return s(1e3*a)},s.en=o[n],s.Ls=o,s.p={},s}()},908597,a=>{"use strict";a.s(["getVisuallyOrderedWorkspaces",0,(a,b)=>{let c=new Set(b.map(a=>a.id)),d=new Map,e=[];for(let b of a){let a=b.groupId??null;if(a&&c.has(a)){let c=d.get(a)??[];c.push(b),d.set(a,c)}else e.push(b)}let f=[];for(let a of b){let b=d.get(a.id);b&&f.push(...b)}return f.push(...e),f}])},986013,a=>{"use strict";let b,c;var d=a.i(666680);a.s(["nanoid",0,function(a=21){var e;e=a|=0,!b||b.length<e?(b=Buffer.allocUnsafe(128*e),d.webcrypto.getRandomValues(b),c=0):c+e>b.length&&(d.webcrypto.getRandomValues(b),c=0),c+=e;let f="";for(let d=c-a;d<c;d++)f+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&b[d]];return f}],986013)},144784,a=>{"use strict";let b=a=>"pane"===a.type?[a]:[...b(a.children[0]),...b(a.children[1])],c=(a,b)=>"pane"===a.type?a.id===b?a:null:c(a.children[0],b)||c(a.children[1],b),d=a=>"pane"===a.type?a.id:d(a.children[0]),e=a=>"pane"===a.type?a.id:e(a.children[1]),f=(a,b,c)=>"pane"===a.type?a.id===b?c:a:{...a,children:[f(a.children[0],b,c),f(a.children[1],b,c)]},g=(a,b)=>{if("pane"===a.type)return null;let[c,d]=a.children;if("pane"===c.type&&c.id===b)return d;if("pane"===d.type&&d.id===b)return c;let e=g(c,b);if(e)return{...a,children:[e,d]};let f=g(d,b);return f?{...a,children:[c,f]}:null},h=(a,b)=>{if("pane"===a.type)return null;let[c,f]=a.children;return"pane"===c.type&&c.id===b?d(f):"pane"===f.type&&f.id===b?e(c):h(c,b)||h(f,b)},i=(a,b,c)=>{if("split"!==a.type)return a;if(0===b.length)return{...a,ratio:c};let[d,...e]=b,f=[a.children[0],a.children[1]];return f[d]=i(a.children[d],e,c),{...a,children:f}},j=(a,b)=>"pane"===a.type||a.orientation!==b?1:j(a.children[0],b)+j(a.children[1],b),k=a=>{if("pane"===a.type)return!0;let b=j(a.children[0],a.orientation),c=j(a.children[1],a.orientation);return!(Math.abs(a.ratio-b/(b+c)*100)>1)&&k(a.children[0])&&k(a.children[1])},l=a=>{if("pane"===a.type)return a;let b=j(a.children[0],a.orientation),c=Math.round(b/(b+j(a.children[1],a.orientation))*1e4)/100;return{...a,ratio:c,children:[l(a.children[0]),l(a.children[1])]}},m=(a,b,c)=>{if("pane"===a.type)return a.id===b?c(a):a;let d=m(a.children[0],b,c);if(d!==a.children[0])return{...a,children:[d,a.children[1]]};let e=m(a.children[1],b,c);return e!==a.children[1]?{...a,children:[a.children[0],e]}:a};a.s(["collectAllTabs",0,a=>b(a).flatMap(a=>a.tabs),"collectPanes",0,b,"equalizeNode",0,l,"findAdjacentPaneInDirection",0,(a,b,c)=>{let f=[],g=a=>{if("pane"===a.type)return a.id===b;for(let b=0;b<2;b++){if(f.push({node:a,childIndex:b}),g(a.children[b]))return!0;f.pop()}return!1};if(!g(a))return null;let h="left"===c||"right"===c?"horizontal":"vertical",i=+("left"===c||"up"===c);for(let a=f.length-1;a>=0;a--){let{node:b,childIndex:g}=f[a];if("split"===b.type&&b.orientation===h&&g===i){let a=b.children[1-i];return"left"===c||"up"===c?e(a):d(a)}}return null},"findPane",0,c,"findResizeTarget",0,(a,b,c)=>{let d=[],e=a=>{if("pane"===a.type)return a.id===b;for(let b=0;b<2;b++){if(d.push({node:a,childIndex:b}),e(a.children[b]))return!0;d.pop()}return!1};if(!e(a))return null;let f="left"===c||"right"===c?"horizontal":"vertical",g=+("right"!==c&&"down"!==c),h="right"===c||"down"===c;for(let a=d.length-1;a>=0;a--){let{node:b,childIndex:c}=d[a];if("split"===b.type&&b.orientation===f&&c===g)return{path:d.slice(0,a).map(a=>a.childIndex),currentRatio:b.ratio,increase:h}}return null},"getFirstPaneId",0,d,"isEqualized",0,k,"removePaneWithFocus",0,(a,c)=>{let d=h(a.root,c),e=g(a.root,c);e&&(a.root=e),a.activePaneId===c&&(a.activePaneId=d??b(a.root)[0]?.id??null)},"replacePane",0,f,"updatePaneInTree",0,m,"updateRatioAtPath",0,i])},206456,a=>{"use strict";let b=new Set(["zsh","bash","fish","sh","-zsh","-bash","-fish","-sh"]),c=a=>{if("~"===a||"/"===a)return a;let b=a.replace(/\/$/,"").split("/");return b[b.length-1]||a},d=a=>{let b=a.trim();if(!b)return null;let c=b.indexOf("|");return c>0?b.slice(0,c):null};a.s(["formatTabTitle",0,a=>{let e=a.trim();if(!e)return"";let f=d(a);if(null!==f){let a=e.slice(e.indexOf("|")+1);return b.has(f)?c(a):f}let g=e.match(/@[^:]+:\s*(.*)/);if(g)return c(g[1].trim());if(e.startsWith("/")||e.startsWith("~"))return c(e);let h=e.split(/\s+/)[0];return b.has(h)?"":h||""},"isShellProcess",0,a=>{let c=d(a);return null!==c&&b.has(c)},"parseCurrentCommand",0,d])},4873,a=>{"use strict";var b=a.i(127669);let c=a=>{let b,c=new Set,d=(a,d)=>{let e="function"==typeof a?a(b):a;if(!Object.is(e,b)){let a=b;b=(null!=d?d:"object"!=typeof e||null===e)?e:Object.assign({},b,e),c.forEach(c=>c(b,a))}},e=()=>b,f={setState:d,getState:e,getInitialState:()=>g,subscribe:a=>(c.add(a),()=>c.delete(a))},g=b=a(d,e,f);return f},d=a=>{let d=a?c(a):c,e=a=>(function(a,c=a=>a){let d=b.default.useSyncExternalStore(a.subscribe,b.default.useCallback(()=>c(a.getState()),[a,c]),b.default.useCallback(()=>c(a.getInitialState()),[a,c]));return b.default.useDebugValue(d),d})(d,a);return Object.assign(e,d),e};a.s(["create",0,a=>a?d(a):d],4873)},721043,a=>{"use strict";a.s(["default",0,!1])},740398,83041,480824,a=>{"use strict";var b=a.i(127669),c=(a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}},d=["light","dark"],e="(prefers-color-scheme: dark)",f=b.createContext(void 0),g={setTheme:a=>{},themes:[]},h=()=>{var a;return null!=(a=b.useContext(f))?a:g},i=["light","dark"],j=({forcedTheme:a,disableTransitionOnChange:c=!1,enableSystem:g=!0,enableColorScheme:h=!0,storageKey:j="theme",themes:o=i,defaultTheme:p=g?"system":"light",attribute:q="data-theme",value:r,children:s,nonce:t,scriptProps:u})=>{let[v,w]=b.useState(()=>l(j,p)),[x,y]=b.useState(()=>"system"===v?n():v),z=r?Object.values(r):o,A=b.useCallback(a=>{let b=a;if(!b)return;"system"===a&&g&&(b=n());let e=r?r[b]:b,f=c?m(t):null,i=document.documentElement,j=a=>{"class"===a?(i.classList.remove(...z),e&&i.classList.add(e)):a.startsWith("data-")&&(e?i.setAttribute(a,e):i.removeAttribute(a))};if(Array.isArray(q)?q.forEach(j):j(q),h){let a=d.includes(p)?p:null,c=d.includes(b)?b:a;i.style.colorScheme=c}null==f||f()},[t]),B=b.useCallback(a=>{let b="function"==typeof a?a(v):a;w(b);try{localStorage.setItem(j,b)}catch(a){}},[v]),C=b.useCallback(b=>{y(n(b)),"system"===v&&g&&!a&&A("system")},[v,a]);b.useEffect(()=>{let a=window.matchMedia(e);return a.addListener(C),C(a),()=>a.removeListener(C)},[C]),b.useEffect(()=>{let a=a=>{a.key===j&&(a.newValue?w(a.newValue):B(p))};return window.addEventListener("storage",a),()=>window.removeEventListener("storage",a)},[B]),b.useEffect(()=>{A(null!=a?a:v)},[a,v]);let D=b.useMemo(()=>({theme:v,setTheme:B,forcedTheme:a,resolvedTheme:"system"===v?x:v,themes:g?[...o,"system"]:o,systemTheme:g?x:void 0}),[v,B,a,x,g,o]);return b.createElement(f.Provider,{value:D},b.createElement(k,{forcedTheme:a,storageKey:j,attribute:q,enableSystem:g,enableColorScheme:h,defaultTheme:p,value:r,themes:o,nonce:t,scriptProps:u}),s)},k=b.memo(({forcedTheme:a,storageKey:d,attribute:e,enableSystem:f,enableColorScheme:g,defaultTheme:h,value:i,themes:j,nonce:k,scriptProps:l})=>{let m=JSON.stringify([e,d,h,a,j,i,f,g]).slice(1,-1);return b.createElement("script",{...l,suppressHydrationWarning:!0,nonce:k,dangerouslySetInnerHTML:{__html:`(${c.toString()})(${m})`}})}),l=(a,b)=>{},m=a=>{let b=document.createElement("style");return a&&b.setAttribute("nonce",a),b.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(b),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(b)},1)}},n=a=>(a||(a=window.matchMedia(e)),a.matches?"dark":"light");a.s(["ThemeProvider",0,a=>b.useContext(f)?b.createElement(b.Fragment,null,a.children):b.createElement(j,{...a}),"useTheme",0,h],740398);var o=a.i(4873);let p=[{id:"snazzy",name:"Snazzy",variant:"dark",colors:{background:"#1e1f29",foreground:"#ebece6",cursor:"#e4e4e4",cursorAccent:"#1e1f29",selectionBackground:"#81aec6",selectionForeground:"#000000",black:"#000000",red:"#fc4346",green:"#50fb7c",yellow:"#f0fb8c",blue:"#49baff",magenta:"#fc4cb4",cyan:"#8be9fe",white:"#ededec",brightBlack:"#555555",brightRed:"#fc4346",brightGreen:"#50fb7c",brightYellow:"#f0fb8c",brightBlue:"#49baff",brightMagenta:"#fc4cb4",brightCyan:"#8be9fe",brightWhite:"#ededec"}},{id:"dracula",name:"Dracula",variant:"dark",colors:{background:"#282a36",foreground:"#f8f8f2",cursor:"#f8f8f2",cursorAccent:"#282a36",selectionBackground:"#44475a",selectionForeground:"#f8f8f2",black:"#21222c",red:"#ff5555",green:"#50fa7b",yellow:"#f1fa8c",blue:"#bd93f9",magenta:"#ff79c6",cyan:"#8be9fd",white:"#f8f8f2",brightBlack:"#6272a4",brightRed:"#ff6e6e",brightGreen:"#69ff94",brightYellow:"#ffffa5",brightBlue:"#d6acff",brightMagenta:"#ff92df",brightCyan:"#a4ffff",brightWhite:"#ffffff"}},{id:"one-dark",name:"One Dark",variant:"dark",colors:{background:"#282c34",foreground:"#abb2bf",cursor:"#528bff",cursorAccent:"#282c34",selectionBackground:"#3e4451",selectionForeground:"#abb2bf",black:"#282c34",red:"#e06c75",green:"#98c379",yellow:"#e5c07b",blue:"#61afef",magenta:"#c678dd",cyan:"#56b6c2",white:"#abb2bf",brightBlack:"#5c6370",brightRed:"#e06c75",brightGreen:"#98c379",brightYellow:"#e5c07b",brightBlue:"#61afef",brightMagenta:"#c678dd",brightCyan:"#56b6c2",brightWhite:"#ffffff"}},{id:"tokyo-night",name:"Tokyo Night",variant:"dark",colors:{background:"#1a1b26",foreground:"#a9b1d6",cursor:"#c0caf5",cursorAccent:"#1a1b26",selectionBackground:"#33467c",selectionForeground:"#a9b1d6",black:"#15161e",red:"#f7768e",green:"#9ece6a",yellow:"#e0af68",blue:"#7aa2f7",magenta:"#bb9af7",cyan:"#7dcfff",white:"#a9b1d6",brightBlack:"#414868",brightRed:"#f7768e",brightGreen:"#9ece6a",brightYellow:"#e0af68",brightBlue:"#7aa2f7",brightMagenta:"#bb9af7",brightCyan:"#7dcfff",brightWhite:"#c0caf5"}},{id:"nord",name:"Nord",variant:"dark",colors:{background:"#2e3440",foreground:"#d8dee9",cursor:"#d8dee9",cursorAccent:"#2e3440",selectionBackground:"#434c5e",selectionForeground:"#d8dee9",black:"#3b4252",red:"#bf616a",green:"#a3be8c",yellow:"#ebcb8b",blue:"#81a1c1",magenta:"#b48ead",cyan:"#88c0d0",white:"#e5e9f0",brightBlack:"#4c566a",brightRed:"#bf616a",brightGreen:"#a3be8c",brightYellow:"#ebcb8b",brightBlue:"#81a1c1",brightMagenta:"#b48ead",brightCyan:"#8fbcbb",brightWhite:"#eceff4"}},{id:"catppuccin-mocha",name:"Catppuccin Mocha",variant:"dark",colors:{background:"#1e1e2e",foreground:"#cdd6f4",cursor:"#f5e0dc",cursorAccent:"#1e1e2e",selectionBackground:"#585b70",selectionForeground:"#cdd6f4",black:"#45475a",red:"#f38ba8",green:"#a6e3a1",yellow:"#f9e2af",blue:"#89b4fa",magenta:"#f5c2e7",cyan:"#94e2d5",white:"#bac2de",brightBlack:"#585b70",brightRed:"#f38ba8",brightGreen:"#a6e3a1",brightYellow:"#f9e2af",brightBlue:"#89b4fa",brightMagenta:"#f5c2e7",brightCyan:"#94e2d5",brightWhite:"#a6adc8"}},{id:"catppuccin-latte",name:"Catppuccin Latte",variant:"light",colors:{background:"#eff1f5",foreground:"#4c4f69",cursor:"#dc8a78",cursorAccent:"#eff1f5",selectionBackground:"#acb0be",selectionForeground:"#4c4f69",black:"#5c5f77",red:"#d20f39",green:"#40a02b",yellow:"#df8e1d",blue:"#1e66f5",magenta:"#ea76cb",cyan:"#179299",white:"#acb0be",brightBlack:"#6c6f85",brightRed:"#d20f39",brightGreen:"#40a02b",brightYellow:"#df8e1d",brightBlue:"#1e66f5",brightMagenta:"#ea76cb",brightCyan:"#179299",brightWhite:"#bcc0cc"}},{id:"github-light",name:"GitHub Light",variant:"light",colors:{background:"#f6f8fa",foreground:"#24292f",cursor:"#044289",cursorAccent:"#f6f8fa",selectionBackground:"#b6d7ff",selectionForeground:"#24292f",black:"#24292f",red:"#cf222e",green:"#116329",yellow:"#9a6700",blue:"#0969da",magenta:"#8250df",cyan:"#1b7c83",white:"#6e7781",brightBlack:"#57606a",brightRed:"#a40e26",brightGreen:"#1a7f37",brightYellow:"#bf8700",brightBlue:"#218bff",brightMagenta:"#a475f9",brightCyan:"#3192aa",brightWhite:"#8c959f"}},{id:"one-light",name:"One Light",variant:"light",colors:{background:"#fafafa",foreground:"#383a42",cursor:"#526eff",cursorAccent:"#fafafa",selectionBackground:"#e5e5e6",selectionForeground:"#383a42",black:"#383a42",red:"#e45649",green:"#50a14f",yellow:"#c18401",blue:"#4078f2",magenta:"#a626a4",cyan:"#0184bc",white:"#a0a1a7",brightBlack:"#696c77",brightRed:"#e45649",brightGreen:"#50a14f",brightYellow:"#c18401",brightBlue:"#4078f2",brightMagenta:"#a626a4",brightCyan:"#0184bc",brightWhite:"#d4d4d4"}},{id:"solarized-light",name:"Solarized Light",variant:"light",colors:{background:"#fdf6e3",foreground:"#657b83",cursor:"#657b83",cursorAccent:"#fdf6e3",selectionBackground:"#eee8d5",selectionForeground:"#657b83",black:"#073642",red:"#dc322f",green:"#859900",yellow:"#b58900",blue:"#268bd2",magenta:"#d33682",cyan:"#2aa198",white:"#eee8d5",brightBlack:"#002b36",brightRed:"#cb4b16",brightGreen:"#586e75",brightYellow:"#657b83",brightBlue:"#839496",brightMagenta:"#6c71c4",brightCyan:"#93a1a1",brightWhite:"#fdf6e3"}},{id:"tokyo-night-light",name:"Tokyo Night Light",variant:"light",colors:{background:"#e1e2e7",foreground:"#3760bf",cursor:"#3760bf",cursorAccent:"#e1e2e7",selectionBackground:"#b6bfe2",selectionForeground:"#3760bf",black:"#e9e9ed",red:"#f52a65",green:"#587539",yellow:"#8c6c3e",blue:"#2e7de9",magenta:"#9854f1",cyan:"#007197",white:"#6172b0",brightBlack:"#a1a6c5",brightRed:"#f52a65",brightGreen:"#587539",brightYellow:"#8c6c3e",brightBlue:"#2e7de9",brightMagenta:"#9854f1",brightCyan:"#007197",brightWhite:"#3760bf"}},{id:"nord-light",name:"Nord Light",variant:"light",colors:{background:"#eceff4",foreground:"#2e3440",cursor:"#2e3440",cursorAccent:"#eceff4",selectionBackground:"#d8dee9",selectionForeground:"#2e3440",black:"#2e3440",red:"#bf616a",green:"#a3be8c",yellow:"#ebcb8b",blue:"#81a1c1",magenta:"#b48ead",cyan:"#88c0d0",white:"#d8dee9",brightBlack:"#4c566a",brightRed:"#bf616a",brightGreen:"#a3be8c",brightYellow:"#ebcb8b",brightBlue:"#81a1c1",brightMagenta:"#b48ead",brightCyan:"#8fbcbb",brightWhite:"#eceff4"}}],q={light:"catppuccin-latte",dark:"snazzy"},r=a=>p.find(b=>b.id===a)??p[0];a.s(["DEFAULT_THEME_IDS",0,q,"TERMINAL_THEMES",0,p,"getTerminalTheme",0,r],83041);let s=(0,o.create)(a=>({themeIds:{...q},setTheme:(b,c)=>{a(a=>{let d={...a.themeIds,[b]:c};return fetch("/api/config",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({terminalTheme:d})}).catch(()=>{}),{themeIds:d}})},hydrate:b=>{a({themeIds:{...q,...b}})}}));a.s(["default",0,()=>{let{resolvedTheme:a}=h(),b="light"===a?"light":"dark",{themeIds:c,setTheme:d}=s(),e=r(c[b]);return{mode:b,themeIds:c,theme:e,setTerminalTheme:d,themes:p}},"initTerminalTheme",0,a=>{a&&s.getState().hydrate(a)}],480824)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0ap_bxo._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[508171,(a,b,c)=>{b.exports=a.x("react/jsx-runtime",()=>require("react/jsx-runtime"))},127669,(a,b,c)=>{b.exports=a.x("react",()=>require("react"))},908597,a=>{"use strict";a.s(["getVisuallyOrderedWorkspaces",0,(a,b)=>{let c=new Set(b.map(a=>a.id)),d=new Map,e=[];for(let b of a){let a=b.groupId??null;if(a&&c.has(a)){let c=d.get(a)??[];c.push(b),d.set(a,c)}else e.push(b)}let f=[];for(let a of b){let b=d.get(a.id);b&&f.push(...b)}return f.push(...e),f}])},986013,a=>{"use strict";let b,c;var d=a.i(666680);a.s(["nanoid",0,function(a=21){var e;e=a|=0,!b||b.length<e?(b=Buffer.allocUnsafe(128*e),d.webcrypto.getRandomValues(b),c=0):c+e>b.length&&(d.webcrypto.getRandomValues(b),c=0),c+=e;let f="";for(let d=c-a;d<c;d++)f+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&b[d]];return f}],986013)},144784,a=>{"use strict";let b=a=>"pane"===a.type?[a]:[...b(a.children[0]),...b(a.children[1])],c=(a,b)=>"pane"===a.type?a.id===b?a:null:c(a.children[0],b)||c(a.children[1],b),d=a=>"pane"===a.type?a.id:d(a.children[0]),e=a=>"pane"===a.type?a.id:e(a.children[1]),f=(a,b,c)=>"pane"===a.type?a.id===b?c:a:{...a,children:[f(a.children[0],b,c),f(a.children[1],b,c)]},g=(a,b)=>{if("pane"===a.type)return null;let[c,d]=a.children;if("pane"===c.type&&c.id===b)return d;if("pane"===d.type&&d.id===b)return c;let e=g(c,b);if(e)return{...a,children:[e,d]};let f=g(d,b);return f?{...a,children:[c,f]}:null},h=(a,b)=>{if("pane"===a.type)return null;let[c,f]=a.children;return"pane"===c.type&&c.id===b?d(f):"pane"===f.type&&f.id===b?e(c):h(c,b)||h(f,b)},i=(a,b,c)=>{if("split"!==a.type)return a;if(0===b.length)return{...a,ratio:c};let[d,...e]=b,f=[a.children[0],a.children[1]];return f[d]=i(a.children[d],e,c),{...a,children:f}},j=(a,b)=>"pane"===a.type||a.orientation!==b?1:j(a.children[0],b)+j(a.children[1],b),k=a=>{if("pane"===a.type)return!0;let b=j(a.children[0],a.orientation),c=j(a.children[1],a.orientation);return!(Math.abs(a.ratio-b/(b+c)*100)>1)&&k(a.children[0])&&k(a.children[1])},l=a=>{if("pane"===a.type)return a;let b=j(a.children[0],a.orientation),c=Math.round(b/(b+j(a.children[1],a.orientation))*1e4)/100;return{...a,ratio:c,children:[l(a.children[0]),l(a.children[1])]}},m=(a,b,c)=>{if("pane"===a.type)return a.id===b?c(a):a;let d=m(a.children[0],b,c);if(d!==a.children[0])return{...a,children:[d,a.children[1]]};let e=m(a.children[1],b,c);return e!==a.children[1]?{...a,children:[a.children[0],e]}:a};a.s(["collectAllTabs",0,a=>b(a).flatMap(a=>a.tabs),"collectPanes",0,b,"equalizeNode",0,l,"findAdjacentPaneInDirection",0,(a,b,c)=>{let f=[],g=a=>{if("pane"===a.type)return a.id===b;for(let b=0;b<2;b++){if(f.push({node:a,childIndex:b}),g(a.children[b]))return!0;f.pop()}return!1};if(!g(a))return null;let h="left"===c||"right"===c?"horizontal":"vertical",i=+("left"===c||"up"===c);for(let a=f.length-1;a>=0;a--){let{node:b,childIndex:g}=f[a];if("split"===b.type&&b.orientation===h&&g===i){let a=b.children[1-i];return"left"===c||"up"===c?e(a):d(a)}}return null},"findPane",0,c,"findResizeTarget",0,(a,b,c)=>{let d=[],e=a=>{if("pane"===a.type)return a.id===b;for(let b=0;b<2;b++){if(d.push({node:a,childIndex:b}),e(a.children[b]))return!0;d.pop()}return!1};if(!e(a))return null;let f="left"===c||"right"===c?"horizontal":"vertical",g=+("right"!==c&&"down"!==c),h="right"===c||"down"===c;for(let a=d.length-1;a>=0;a--){let{node:b,childIndex:c}=d[a];if("split"===b.type&&b.orientation===f&&c===g)return{path:d.slice(0,a).map(a=>a.childIndex),currentRatio:b.ratio,increase:h}}return null},"getFirstPaneId",0,d,"isEqualized",0,k,"removePaneWithFocus",0,(a,c)=>{let d=h(a.root,c),e=g(a.root,c);e&&(a.root=e),a.activePaneId===c&&(a.activePaneId=d??b(a.root)[0]?.id??null)},"replacePane",0,f,"updatePaneInTree",0,m,"updateRatioAtPath",0,i])},926026,a=>{"use strict";var b=a.i(130146),c=a.i(814747),d=a.i(446786);let e=c.default.join(d.default.homedir(),".purplemux","logs"),f=process.env.LOG_LEVEL||"info",g=(a=>{if(!a)return{};let b={};for(let c of a.split(",")){let[a,d]=c.split("=").map(a=>a.trim());a&&d&&(b[a]=d)}return b})(process.env.LOG_LEVELS),h=["trace","debug","info","warn","error","fatal"],i=globalThis;if(!i.__ptRootLogger){let a=[f,...Object.values(g)].reduce((a,b)=>h.indexOf(b)<h.indexOf(a)?b:a,"fatal");i.__ptRootLogger=(0,b.default)({level:a,transport:{targets:[{target:"pino-roll",level:a,options:{file:c.default.join(e,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:a,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let j=i.__ptRootLogger;a.s(["createLogger",0,a=>{let b=j.child({module:a});return b.level=g[a]??f,b}])},861504,357570,a=>{"use strict";let b=process.env.__PMUX_PRISTINE_ENV,c=Object.freeze(b?JSON.parse(b):{...process.env});b||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(c)),a.s(["PRISTINE_ENV",0,c],357570);let d=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"]),e=["LC_"],f=a=>d.has(a)||e.some(b=>a.startsWith(b)),g={TERM:"xterm-256color",COLORTERM:"truecolor"},h=()=>{let a={};for(let[b,d]of Object.entries(c))void 0!==d&&f(b)&&(a[b]=d);return{...a,...g}},i=a=>`'${a.replace(/'/g,"'\\''")}'`,j=()=>c.SHELL||"/bin/bash";a.s(["buildShellEnv",0,()=>h(),"buildShellLaunchCommand",0,()=>{let a=Object.entries(h()).map(([a,b])=>`${a}=${i(b)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${a} ${i(j())} -l`},"defaultShell",0,j],861504)},859379,a=>{"use strict";var b=a.i(233405),c=a.i(924868),d=a.i(224361),e=a.i(814747);a.i(986013);var f=a.i(357570),g=a.i(861504),h=a.i(926026);process.platform;let i="linux"===process.platform,j=(0,h.createLogger)("terminal"),k=(0,d.promisify)(b.execFile),l="purple",m=e.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),n=async()=>{try{let{stdout:a}=await k("tmux",["-L",l,"ls","-F","#{session_name}"],{timeout:5e3});return a.trim().split("\n").map(a=>a.trim()).filter(a=>a.startsWith("pt-"))}catch{return[]}},o=async(a,b,c,d)=>{let e=(0,g.buildShellLaunchCommand)();await k("tmux",["-u","-L",l,"-f",m,"new-session","-d","-s",a,"-x",String(b),"-y",String(c),e],{timeout:5e3,cwd:d||f.PRISTINE_ENV.HOME||"/"}),await v(),j.debug(`tmux session created: ${a} (cols: ${b}, rows: ${c})`)},p=a=>new Promise(b=>setTimeout(b,a)),q=async a=>{if(!await r(a))return;j.debug(`killSession start: ${a}`);let b=await u(a);if(b)try{j.debug(`SIGTERM → process group ${b}: ${a}`),process.kill(-b,"SIGTERM")}catch{}try{await k("tmux",["-L",l,"kill-session","-t",a],{timeout:5e3})}catch{}for(let b=0;b<5;b++){if(!await r(a))return void j.debug(`killSession done (SIGTERM): ${a}`);await p(200)}if(j.warn(`session survived SIGTERM, escalating to SIGKILL: ${a}`),b)try{j.debug(`SIGKILL → process group ${b}: ${a}`),process.kill(-b,"SIGKILL")}catch{}try{await k("tmux",["-L",l,"kill-session","-t",a],{timeout:5e3})}catch{}for(let b=0;b<3;b++){if(!await r(a))return void j.debug(`killSession done (SIGKILL): ${a}`);await p(200)}j.warn(`tmux session still alive after kill: ${a}`)},r=async a=>{try{return await k("tmux",["-L",l,"has-session","-t",a],{timeout:5e3}),!0}catch{return!1}},s=async a=>{if(i)try{return await c.default.readlink(`/proc/${a}/cwd`)}catch{return null}try{let{stdout:b}=await k("lsof",["-a","-p",String(a),"-d","cwd","-Fn"],{timeout:5e3}),c=b.split("\n").find(a=>a.startsWith("n/"));return c?c.slice(1):null}catch{return null}},t=async a=>{let b=await u(a);if(b){let a=await s(b);if(a)return a}try{let{stdout:b}=await k("tmux",["-L",l,"display-message","-p","-t",a,"#{pane_current_path}"],{timeout:5e3});return b.trim()||null}catch{return null}},u=async a=>{try{let{stdout:b}=await k("tmux",["-L",l,"display-message","-p","-t",a,"#{pane_pid}"],{timeout:5e3}),c=parseInt(b.trim(),10);return Number.isNaN(c)?null:c}catch{return null}},v=async()=>{try{await k("tmux",["-L",l,"source-file",m],{timeout:5e3})}catch{}},w=async a=>{try{let{stdout:b}=await k("tmux",["-L",l,"list-panes","-t",a,"-F","#{pane_current_command}"],{timeout:5e3});return b.trim()||null}catch{return null}},x=async a=>{await k("tmux",["-L",l,"copy-mode","-q","-t",a],{timeout:5e3}).catch(()=>{})},y=async(a,b)=>{await x(a),await k("tmux",["-L",l,"send-keys","-t",a,b,"Enter"],{timeout:5e3})};a.s(["createSession",0,o,"getPaneCurrentCommand",0,w,"getSessionCwd",0,t,"hasSession",0,r,"killSession",0,q,"listSessions",0,n,"sendKeys",0,y,"workspaceSessionName",0,(a,b,c)=>`pt-${a}-${b}-${c}`],859379)}];
1
+ module.exports=[508171,(a,b,c)=>{b.exports=a.x("react/jsx-runtime",()=>require("react/jsx-runtime"))},127669,(a,b,c)=>{b.exports=a.x("react",()=>require("react"))},908597,a=>{"use strict";a.s(["getVisuallyOrderedWorkspaces",0,(a,b)=>{let c=new Set(b.map(a=>a.id)),d=new Map,e=[];for(let b of a){let a=b.groupId??null;if(a&&c.has(a)){let c=d.get(a)??[];c.push(b),d.set(a,c)}else e.push(b)}let f=[];for(let a of b){let b=d.get(a.id);b&&f.push(...b)}return f.push(...e),f}])},986013,a=>{"use strict";let b,c;var d=a.i(666680);a.s(["nanoid",0,function(a=21){var e;e=a|=0,!b||b.length<e?(b=Buffer.allocUnsafe(128*e),d.webcrypto.getRandomValues(b),c=0):c+e>b.length&&(d.webcrypto.getRandomValues(b),c=0),c+=e;let f="";for(let d=c-a;d<c;d++)f+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&b[d]];return f}],986013)},144784,a=>{"use strict";let b=a=>"pane"===a.type?[a]:[...b(a.children[0]),...b(a.children[1])],c=(a,b)=>"pane"===a.type?a.id===b?a:null:c(a.children[0],b)||c(a.children[1],b),d=a=>"pane"===a.type?a.id:d(a.children[0]),e=a=>"pane"===a.type?a.id:e(a.children[1]),f=(a,b,c)=>"pane"===a.type?a.id===b?c:a:{...a,children:[f(a.children[0],b,c),f(a.children[1],b,c)]},g=(a,b)=>{if("pane"===a.type)return null;let[c,d]=a.children;if("pane"===c.type&&c.id===b)return d;if("pane"===d.type&&d.id===b)return c;let e=g(c,b);if(e)return{...a,children:[e,d]};let f=g(d,b);return f?{...a,children:[c,f]}:null},h=(a,b)=>{if("pane"===a.type)return null;let[c,f]=a.children;return"pane"===c.type&&c.id===b?d(f):"pane"===f.type&&f.id===b?e(c):h(c,b)||h(f,b)},i=(a,b,c)=>{if("split"!==a.type)return a;if(0===b.length)return{...a,ratio:c};let[d,...e]=b,f=[a.children[0],a.children[1]];return f[d]=i(a.children[d],e,c),{...a,children:f}},j=(a,b)=>"pane"===a.type||a.orientation!==b?1:j(a.children[0],b)+j(a.children[1],b),k=a=>{if("pane"===a.type)return!0;let b=j(a.children[0],a.orientation),c=j(a.children[1],a.orientation);return!(Math.abs(a.ratio-b/(b+c)*100)>1)&&k(a.children[0])&&k(a.children[1])},l=a=>{if("pane"===a.type)return a;let b=j(a.children[0],a.orientation),c=Math.round(b/(b+j(a.children[1],a.orientation))*1e4)/100;return{...a,ratio:c,children:[l(a.children[0]),l(a.children[1])]}},m=(a,b,c)=>{if("pane"===a.type)return a.id===b?c(a):a;let d=m(a.children[0],b,c);if(d!==a.children[0])return{...a,children:[d,a.children[1]]};let e=m(a.children[1],b,c);return e!==a.children[1]?{...a,children:[a.children[0],e]}:a};a.s(["collectAllTabs",0,a=>b(a).flatMap(a=>a.tabs),"collectPanes",0,b,"equalizeNode",0,l,"findAdjacentPaneInDirection",0,(a,b,c)=>{let f=[],g=a=>{if("pane"===a.type)return a.id===b;for(let b=0;b<2;b++){if(f.push({node:a,childIndex:b}),g(a.children[b]))return!0;f.pop()}return!1};if(!g(a))return null;let h="left"===c||"right"===c?"horizontal":"vertical",i=+("left"===c||"up"===c);for(let a=f.length-1;a>=0;a--){let{node:b,childIndex:g}=f[a];if("split"===b.type&&b.orientation===h&&g===i){let a=b.children[1-i];return"left"===c||"up"===c?e(a):d(a)}}return null},"findPane",0,c,"findResizeTarget",0,(a,b,c)=>{let d=[],e=a=>{if("pane"===a.type)return a.id===b;for(let b=0;b<2;b++){if(d.push({node:a,childIndex:b}),e(a.children[b]))return!0;d.pop()}return!1};if(!e(a))return null;let f="left"===c||"right"===c?"horizontal":"vertical",g=+("right"!==c&&"down"!==c),h="right"===c||"down"===c;for(let a=d.length-1;a>=0;a--){let{node:b,childIndex:c}=d[a];if("split"===b.type&&b.orientation===f&&c===g)return{path:d.slice(0,a).map(a=>a.childIndex),currentRatio:b.ratio,increase:h}}return null},"getFirstPaneId",0,d,"isEqualized",0,k,"removePaneWithFocus",0,(a,c)=>{let d=h(a.root,c),e=g(a.root,c);e&&(a.root=e),a.activePaneId===c&&(a.activePaneId=d??b(a.root)[0]?.id??null)},"replacePane",0,f,"updatePaneInTree",0,m,"updateRatioAtPath",0,i])},926026,a=>{"use strict";var b=a.i(130146),c=a.i(814747),d=a.i(446786);let e=c.default.join(d.default.homedir(),".purplemux","logs"),f=process.env.LOG_LEVEL||"info",g=(a=>{if(!a)return{};let b={};for(let c of a.split(",")){let[a,d]=c.split("=").map(a=>a.trim());a&&d&&(b[a]=d)}return b})(process.env.LOG_LEVELS),h=["trace","debug","info","warn","error","fatal"],i=globalThis;if(!i.__ptRootLogger){let a=[f,...Object.values(g)].reduce((a,b)=>h.indexOf(b)<h.indexOf(a)?b:a,"fatal");i.__ptRootLogger=(0,b.default)({level:a,transport:{targets:[{target:"pino-roll",level:a,options:{file:c.default.join(e,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:a,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let j=i.__ptRootLogger;a.s(["createLogger",0,a=>{let b=j.child({module:a});return b.level=g[a]??f,b}])},861504,357570,a=>{"use strict";let b=process.env.__PMUX_PRISTINE_ENV,c=Object.freeze(b?JSON.parse(b):{...process.env});b||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(c)),a.s(["PRISTINE_ENV",0,c],357570);let d=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"]),e=["LC_"],f=a=>d.has(a)||e.some(b=>a.startsWith(b)),g={TERM:"xterm-256color",COLORTERM:"truecolor"},h=()=>{let a={};for(let[b,d]of Object.entries(c))void 0!==d&&f(b)&&(a[b]=d);return{...a,...g}},i=a=>`'${a.replace(/'/g,"'\\''")}'`,j=()=>c.SHELL||"/bin/bash";a.s(["buildShellEnv",0,()=>h(),"buildShellLaunchCommand",0,()=>{let a=Object.entries(h()).map(([a,b])=>`${a}=${i(b)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${a} ${i(j())} -l`},"defaultShell",0,j],861504)},859379,a=>{"use strict";var b=a.i(233405),c=a.i(924868),d=a.i(224361),e=a.i(814747);a.i(986013);var f=a.i(357570),g=a.i(861504),h=a.i(926026);process.platform;let i="linux"===process.platform,j=(0,h.createLogger)("terminal"),k=(0,d.promisify)(b.execFile),l="purple",m=e.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),n=async()=>{try{let{stdout:a}=await k("tmux",["-L",l,"ls","-F","#{session_name}"],{timeout:5e3});return a.trim().split("\n").map(a=>a.trim()).filter(a=>a.startsWith("pt-"))}catch{return[]}},o=async(a,b,c,d)=>{let e=(0,g.buildShellLaunchCommand)();await k("tmux",["-u","-L",l,"-f",m,"new-session","-d","-s",a,"-x",String(b),"-y",String(c),e],{timeout:5e3,cwd:d||f.PRISTINE_ENV.HOME||"/"}),await w(),j.debug(`tmux session created: ${a} (cols: ${b}, rows: ${c})`)},p=a=>new Promise(b=>setTimeout(b,a)),q=async a=>{if(!await s(a))return;j.debug(`killSession start: ${a}`);let b=await v(a);if(b)try{j.debug(`SIGTERM → process group ${b}: ${a}`),process.kill(-b,"SIGTERM")}catch{}try{await k("tmux",["-L",l,"kill-session","-t",a],{timeout:5e3})}catch{}for(let b=0;b<5;b++){if(!await s(a))return void j.debug(`killSession done (SIGTERM): ${a}`);await p(200)}if(j.warn(`session survived SIGTERM, escalating to SIGKILL: ${a}`),b)try{j.debug(`SIGKILL → process group ${b}: ${a}`),process.kill(-b,"SIGKILL")}catch{}try{await k("tmux",["-L",l,"kill-session","-t",a],{timeout:5e3})}catch{}for(let b=0;b<3;b++){if(!await s(a))return void j.debug(`killSession done (SIGKILL): ${a}`);await p(200)}j.warn(`tmux session still alive after kill: ${a}`)},r=async a=>{let b=f.PRISTINE_ENV.HOME||"/";if(!a)return b;let d=a;for(;;){try{if((await c.default.stat(d)).isDirectory())return d}catch{}let a=e.default.dirname(d);if(a===d)return b;d=a}},s=async a=>{try{return await k("tmux",["-L",l,"has-session","-t",a],{timeout:5e3}),!0}catch{return!1}},t=async a=>{if(i)try{return await c.default.readlink(`/proc/${a}/cwd`)}catch{return null}try{let{stdout:b}=await k("lsof",["-a","-p",String(a),"-d","cwd","-Fn"],{timeout:5e3}),c=b.split("\n").find(a=>a.startsWith("n/"));return c?c.slice(1):null}catch{return null}},u=async a=>{let b=await v(a);if(b){let a=await t(b);if(a)return a}try{let{stdout:b}=await k("tmux",["-L",l,"display-message","-p","-t",a,"#{pane_current_path}"],{timeout:5e3});return b.trim()||null}catch{return null}},v=async a=>{try{let{stdout:b}=await k("tmux",["-L",l,"display-message","-p","-t",a,"#{pane_pid}"],{timeout:5e3}),c=parseInt(b.trim(),10);return Number.isNaN(c)?null:c}catch{return null}},w=async()=>{try{await k("tmux",["-L",l,"source-file",m],{timeout:5e3})}catch{}},x=async a=>{try{let{stdout:b}=await k("tmux",["-L",l,"list-panes","-t",a,"-F","#{pane_current_command}"],{timeout:5e3});return b.trim()||null}catch{return null}},y=async a=>{await k("tmux",["-L",l,"copy-mode","-q","-t",a],{timeout:5e3}).catch(()=>{})},z=async(a,b)=>{await y(a),await k("tmux",["-L",l,"send-keys","-t",a,b,"Enter"],{timeout:5e3})};a.s(["createSession",0,o,"getPaneCurrentCommand",0,x,"getSessionCwd",0,u,"hasSession",0,s,"killSession",0,q,"listSessions",0,n,"resolveExistingDir",0,r,"sendKeys",0,z,"workspaceSessionName",0,(a,b,c)=>`pt-${a}-${b}-${c}`],859379)}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__0t9ru13._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[353723,a=>{"use strict";var b=a.i(127669),c=a.i(241196),d=a.i(404694),e=a.i(286255);a.s(["useAnchoredPopupScrollLock",0,function(a,f,g,h){let[i,j]=b.useState(!1);(0,e.useIsoLayoutEffect)(()=>{if(!a||!f||null==g)return void j(!1);let b=(0,c.ownerDocument)(g).documentElement.clientWidth,d=g.offsetWidth;j(b>0&&d>0&&d>=b-20)},[a,f,g]),(0,d.useScrollLock)(a&&(!f||i),h)}])},856626,a=>{"use strict";var b=a.i(179256),c=a.i(127669);let d=c.createContext(void 0);a.s(["useToolbarRootContext",0,function(a){let e=c.useContext(d);if(void 0===e&&!a)throw Error((0,b.default)(69));return e}])},98456,a=>{"use strict";let b=(0,a.i(564375).default)("globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);a.s(["Globe",0,b],98456)},915150,a=>{"use strict";let b=(0,a.i(564375).default)("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);a.s(["Monitor",0,b],915150)},874193,228561,781528,770280,393230,353076,884892,746248,951762,a=>{"use strict";a.s([],874193);var b=a.i(127669),c=a.i(1415),d=a.i(195433),e=a.i(832668),f=a.i(92856),g=a.i(395344),h=a.i(463880),i=a.i(179256);let j=b.createContext(void 0);function k(a){let c=b.useContext(j);if(void 0===c&&!a)throw Error((0,i.default)(47));return c}a.s(["PopoverRootContext",0,j,"usePopoverRootContext",0,k],228561);var l=a.i(456195),m=a.i(691387),n=a.i(790206),o=a.i(214739),p=a.i(963973),q=a.i(727482),r=a.i(791666),s=a.i(934051),t=a.i(953554),u=a.i(560783);let v={...s.popupStoreSelectors,disabled:(0,n.createSelector)(a=>a.disabled),instantType:(0,n.createSelector)(a=>a.instantType),openMethod:(0,n.createSelector)(a=>a.openMethod),openChangeReason:(0,n.createSelector)(a=>a.openChangeReason),modal:(0,n.createSelector)(a=>a.modal),focusManagerModal:(0,n.createSelector)(a=>a.focusManagerModal),stickIfOpen:(0,n.createSelector)(a=>a.stickIfOpen),titleElementId:(0,n.createSelector)(a=>a.titleElementId),descriptionElementId:(0,n.createSelector)(a=>a.descriptionElementId),openOnHover:(0,n.createSelector)(a=>a.openOnHover),closeDelay:(0,n.createSelector)(a=>a.closeDelay),hasViewport:(0,n.createSelector)(a=>a.hasViewport)};class w extends m.ReactStore{constructor(a){const c={...(0,s.createInitialPopupStoreState)(),disabled:!1,modal:!1,focusManagerModal:!1,instantType:void 0,openMethod:null,openChangeReason:null,titleElementId:void 0,descriptionElementId:void 0,stickIfOpen:!0,nested:!1,openOnHover:!1,closeDelay:0,hasViewport:!1,...a};c.open&&a?.mounted===void 0&&(c.mounted=!0),super(c,{popupRef:b.createRef(),backdropRef:b.createRef(),internalBackdropRef:b.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerFocusTargetRef:b.createRef(),beforeContentFocusGuardRef:b.createRef(),stickIfOpenTimeout:new o.Timeout,triggerElements:new t.PopupTriggerMap},v)}setOpen=(a,b)=>{let c=b.reason===r.REASONS.triggerHover,d=b.reason===r.REASONS.triggerPress&&0===b.event.detail,e=!a&&(b.reason===r.REASONS.escapeKey||null==b.reason);if(b.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},this.context.onOpenChange?.(a,b),b.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(a,b);let f=()=>{let c={open:a,openChangeReason:b.reason},d=b.trigger?.id??null;(d||a)&&(c.activeTriggerId=d,c.activeTriggerElement=b.trigger??null),this.update(c)};c?(this.set("stickIfOpen",!0),this.context.stickIfOpenTimeout.start(u.PATIENT_CLICK_THRESHOLD,()=>{this.set("stickIfOpen",!1)}),l.flushSync(f)):f(),d||e?this.set("instantType",d?"click":"dismiss"):b.reason===r.REASONS.focusOut?this.set("instantType","focus"):this.set("instantType",void 0)};static useStore(a,b){let c=(0,p.useRefWithInit)(()=>new w(b)).current,d=a??c;return(0,q.useOnMount)(c.disposeEffect),d}disposeEffect=()=>this.context.stickIfOpenTimeout.disposeEffect()}a.s(["PopoverStore",0,w],781528);var x=a.i(149137),y=a.i(153651),z=a.i(33559),A=a.i(508171);function B({props:a}){let{children:i,open:k,defaultOpen:l=!1,onOpenChange:m,onOpenChangeComplete:n,modal:o=!1,handle:p,triggerId:q,defaultTriggerId:s=null}=a,t=w.useStore(p?.store,{modal:o,open:l,openProp:k,activeTriggerId:s,triggerIdProp:q});(0,c.useOnFirstRender)(()=>{void 0===k&&!1===t.state.open&&!0===l&&t.update({open:!0,activeTriggerId:s})}),t.useControlledProp("openProp",k),t.useControlledProp("triggerIdProp",q);let u=t.useState("open"),v=t.useState("payload");t.useContextCallback("onOpenChange",m),t.useContextCallback("onOpenChangeComplete",n);let{openMethod:C,triggerProps:D}=(0,z.useOpenInteractionType)(u);(0,y.useImplicitActiveTrigger)(t);let{forceUnmount:E}=(0,y.useOpenStateTransitions)(u,t,()=>{t.update({stickIfOpen:!0,openChangeReason:null})});b.useEffect(()=>{u||t.context.stickIfOpenTimeout.clear()},[t,u]);let F=b.useCallback(a=>{let b=(0,x.createChangeEventDetails)(a);return b.preventUnmountOnClose=()=>{t.set("preventUnmountingOnClose",!0)},b},[t]),G=b.useCallback(()=>{t.setOpen(!1,F(r.REASONS.imperativeAction))},[t,F]);b.useImperativeHandle(a.actionsRef,()=>({unmount:E,close:G}),[E,G]);let H=(0,h.useSyncedFloatingRootContext)({popupStore:t,onOpenChange:t.setOpen}),I=(0,d.useDismiss)(H,{outsidePressEvent:{mouse:"trap-focus"===o?"sloppy":"intentional",touch:"sloppy"}}),J=(0,f.useRole)(H),{getReferenceProps:K,getFloatingProps:L,getTriggerProps:M}=(0,e.useInteractions)([I,J]),N=b.useMemo(()=>K(D),[K,D]),O=b.useMemo(()=>M(D),[M,D]),P=b.useMemo(()=>L(),[L]);t.useSyncedValues({modal:o,openMethod:C,activeTriggerProps:N,inactiveTriggerProps:O,popupProps:P,floatingRootContext:H,nested:null!=(0,g.useFloatingParentNodeId)()});let Q=b.useMemo(()=>({store:t}),[t]);return(0,A.jsx)(j.Provider,{value:Q,children:"function"==typeof i?i({payload:v}):i})}a.s(["PopoverRoot",0,function(a){return k(!0)?(0,A.jsx)(B,{props:a}):(0,A.jsx)(g.FloatingTree,{children:(0,A.jsx)(B,{props:a})})}],770280);var C=a.i(20700),D=a.i(567962),E=a.i(716334),F=a.i(910055),G=a.i(57387),H=a.i(709829),I=a.i(743514),J=a.i(592343),K=a.i(611599),L=a.i(281921),M=a.i(407973);function N(a,c){let d=b.useRef(null),e=(0,K.useStableCallback)(b=>{l.flushSync(()=>{a.setOpen(!1,(0,x.createChangeEventDetails)(r.REASONS.focusOut,b.nativeEvent,b.currentTarget))});let c=(0,M.getTabbableBeforeElement)(d.current);c?.focus()});return{preFocusGuardRef:d,handlePreFocusGuardFocus:e,handleFocusTargetFocus:(0,K.useStableCallback)(b=>{let d=a.select("positionerElement");if(d&&(0,M.isOutsideEvent)(b,d))a.context.beforeContentFocusGuardRef.current?.focus();else{l.flushSync(()=>{a.setOpen(!1,(0,x.createChangeEventDetails)(r.REASONS.focusOut,b.nativeEvent,b.currentTarget))});let e=(0,M.getTabbableAfterElement)(a.context.triggerFocusTargetRef.current||c.current);for(;null!==e&&(0,L.contains)(d,e);){let a=e;if((e=(0,M.getNextTabbable)(e))===a)break}e?.focus()}})}}a.s(["useTriggerFocusGuards",0,N],393230);let O=b.forwardRef(function(a,c){let{render:d,className:f,disabled:g=!1,nativeButton:h=!0,handle:j,payload:l,openOnHover:m=!1,delay:n=300,closeDelay:o=0,id:p,style:q,...s}=a,t=k(!0),v=j?.store??t?.store;if(!v)throw Error((0,i.default)(74));let w=(0,I.useBaseUiId)(p),x=v.useState("isTriggerActive",w),z=v.useState("floatingRootContext"),B=v.useState("isOpenedByTrigger",w),K=b.useRef(null),{registerTrigger:L,isMountedByThisTrigger:M}=(0,y.useTriggerDataForwarding)(w,K,v,{payload:l,disabled:g,openOnHover:m,closeDelay:o}),O=v.useState("openChangeReason"),P=v.useState("stickIfOpen"),Q=v.useState("openMethod"),R=v.useState("focusManagerModal"),S=(0,H.useHoverReferenceInteraction)(z,{enabled:null!=z&&m&&("touch"!==Q||O!==r.REASONS.triggerPress),mouseOnly:!0,move:!1,handleClose:(0,F.safePolygon)(),restMs:n,delay:{close:o},triggerElementRef:K,isActiveTrigger:x,isClosing:()=>"ending"===v.select("transitionStatus")}),T=(0,G.useClick)(z,{enabled:null!=z,stickIfOpen:P}),U=(0,e.useInteractions)([T]),V=v.useState("triggerProps",M),{getButtonProps:W,buttonRef:X}=(0,C.useButton)({disabled:g,native:h}),Y=b.useMemo(()=>({open:a=>a&&O===r.REASONS.triggerPress?D.pressableTriggerOpenStateMapping.open(a):D.triggerOpenStateMapping.open(a)}),[O]),Z=(0,E.useRenderElement)("button",a,{state:{disabled:g,open:B},ref:[X,c,L,K],props:[U.getReferenceProps(),S,V,{[u.CLICK_TRIGGER_IDENTIFIER]:"",id:w},s,W],stateAttributesMapping:Y}),{preFocusGuardRef:$,handlePreFocusGuardFocus:_,handleFocusTargetFocus:aa}=N(v,K);return x&&!R?(0,A.jsxs)(b.Fragment,{children:[(0,A.jsx)(J.FocusGuard,{ref:$,onFocus:_}),(0,A.jsx)(b.Fragment,{children:Z},w),(0,A.jsx)(J.FocusGuard,{ref:v.context.triggerFocusTargetRef,onFocus:aa})]}):(0,A.jsx)(b.Fragment,{children:Z},w)});a.s(["PopoverTrigger",0,O],353076);var P=a.i(606359);let Q=b.createContext(void 0);a.s(["PopoverPortalContext",0,Q,"usePopoverPortalContext",0,function(){let a=b.useContext(Q);if(void 0===a)throw Error((0,i.default)(45));return a}],884892);let R=b.forwardRef(function(a,b){let{keepMounted:c=!1,...d}=a,{store:e}=k();return e.useState("mounted")||c?(0,A.jsx)(Q.Provider,{value:c,children:(0,A.jsx)(P.FloatingPortal,{ref:b,...d})}):null});a.s(["PopoverPortal",0,R],746248);let S=b.createContext(void 0);a.s(["PopoverPositionerContext",0,S,"usePopoverPositionerContext",0,function(){let a=b.useContext(S);if(!a)throw Error((0,i.default)(46));return a}],951762)},182659,a=>{"use strict";var b=a.i(127669),c=a.i(7461),d=a.i(286255),e=a.i(395344),f=a.i(228561),g=a.i(951762),h=a.i(847105),i=a.i(884892),j=a.i(623268),k=a.i(791666),l=a.i(560783),m=a.i(897605),n=a.i(511134),o=a.i(980726),p=a.i(353723),q=a.i(508171);let r=b.forwardRef(function(a,r){let{render:s,className:t,anchor:u,positionMethod:v="absolute",side:w="bottom",align:x="center",sideOffset:y=0,alignOffset:z=0,collisionBoundary:A="clipping-ancestors",collisionPadding:B=5,arrowPadding:C=5,sticky:D=!1,disableAnchorTracking:E=!1,collisionAvoidance:F=l.POPUP_COLLISION_AVOIDANCE,style:G,...H}=a,{store:I}=(0,f.usePopoverRootContext)(),J=(0,i.usePopoverPortalContext)(),K=(0,e.useFloatingNodeId)(),L=I.useState("floatingRootContext"),M=I.useState("mounted"),N=I.useState("open"),O=I.useState("openChangeReason"),P=I.useState("activeTriggerElement"),Q=I.useState("modal"),R=I.useState("openMethod"),S=I.useState("positionerElement"),T=I.useState("instantType"),U=I.useState("transitionStatus"),V=I.useState("hasViewport"),W=b.useRef(null),X=(0,m.useAnimationsFinished)(S,!1,!1),Y=(0,h.useAnchorPositioning)({anchor:u,floatingRootContext:L,positionMethod:v,mounted:M,side:w,sideOffset:y,align:x,alignOffset:z,arrowPadding:C,collisionBoundary:A,collisionPadding:B,sticky:D,disableAnchorTracking:E,keepMounted:J,nodeId:K,collisionAvoidance:F,adaptiveOrigin:V?n.adaptiveOrigin:void 0}),Z=L.useState("domReferenceElement");(0,d.useIsoLayoutEffect)(()=>{let a=W.current;if(Z&&(W.current=Z),a&&Z&&Z!==a){I.set("instantType",void 0);let a=new AbortController;return X(()=>{I.set("instantType","trigger-change")},a.signal),()=>{a.abort()}}},[Z,X,I]);let $={open:N,side:Y.side,align:Y.align,anchorHidden:Y.anchorHidden,instant:T};(0,p.useAnchoredPopupScrollLock)(N&&!0===Q&&O!==k.REASONS.triggerHover,"touch"===R,S,P);let _=b.useCallback(a=>{I.set("positionerElement",a)},[I]),aa=(0,o.usePositioner)(a,$,{styles:Y.positionerStyles,transitionStatus:U,props:H,refs:[r,_],hidden:!M,inert:!N});return(0,q.jsxs)(g.PopoverPositionerContext.Provider,{value:Y,children:[M&&!0===Q&&O!==k.REASONS.triggerHover&&(0,q.jsx)(j.InternalBackdrop,{ref:I.context.internalBackdropRef,inert:(0,c.inertValue)(!N),cutout:P}),(0,q.jsx)(e.FloatingNode,{id:K,children:aa})]})});a.s(["PopoverPositioner",0,r])},158799,a=>{"use strict";var b,c=a.i(508171);a.i(874193);var d=a.i(770280),e=a.i(353076),f=a.i(746248),g=a.i(182659),h=a.i(127669),i=a.i(128107),j=a.i(647591),k=a.i(298294),l=a.i(228561),m=a.i(951762),n=a.i(567962),o=a.i(771353),p=a.i(804795),q=a.i(716334),r=a.i(791666),s=a.i(158334),t=a.i(856626),u=a.i(935080),v=a.i(286255),w=a.i(611599);let x=h.createContext(void 0);function y(a){let{value:b,children:d}=a;return(0,c.jsx)(x.Provider,{value:b,children:d})}let z={...n.popupStateMapping,...o.transitionStatusMapping},A=h.forwardRef(function(a,b){let{className:d,render:e,initialFocus:f,finalFocus:g,style:n,...o}=a,{store:v}=(0,l.usePopoverRootContext)(),x=(0,m.usePopoverPositionerContext)(),A=null!=(0,t.useToolbarRootContext)(!0),{context:B,hasClosePart:C}=function(){let[a,b]=h.useState(0),c=(0,w.useStableCallback)(()=>(b(a=>a+1),()=>{b(a=>Math.max(0,a-1))}));return{context:h.useMemo(()=>({register:c}),[c]),hasClosePart:a>0}}(),D=v.useState("open"),E=v.useState("openMethod"),F=v.useState("instantType"),G=v.useState("transitionStatus"),H=v.useState("popupProps"),I=v.useState("titleElementId"),J=v.useState("descriptionElementId"),K=v.useState("modal"),L=v.useState("mounted"),M=v.useState("openChangeReason"),N=v.useState("activeTriggerElement"),O=v.useState("floatingRootContext");(0,p.useOpenChangeComplete)({open:D,ref:v.context.popupRef,onComplete(){D&&v.context.onOpenChangeComplete?.(!0)}});let P=v.useState("disabled"),Q=v.useState("openOnHover"),R=v.useState("closeDelay");(0,k.useHoverFloatingInteraction)(O,{enabled:Q&&!P,closeDelay:R});let S=void 0===f?function(a){return"touch"!==a||v.context.popupRef.current}:f,T={open:D,side:x.side,align:x.align,instant:F,transitionStatus:G},U=!1!==K&&C;v.useSyncedValue("focusManagerModal",U);let V=h.useCallback(a=>{v.set("popupElement",a)},[v]),W=(0,q.useRenderElement)("div",a,{state:T,ref:[b,v.context.popupRef,V],props:[H,{"aria-labelledby":I,"aria-describedby":J,onKeyDown(a){A&&s.COMPOSITE_KEYS.has(a.key)&&a.stopPropagation()}},(0,u.getDisabledMountTransitionStyles)(G),o],stateAttributesMapping:z});return(0,c.jsx)(j.FloatingFocusManager,{context:O,openInteractionType:E,modal:U,disabled:!L||M===r.REASONS.triggerHover,initialFocus:S,returnFocus:g,restoreFocus:"popup",previousFocusableElement:(0,i.isHTMLElement)(N)?N:void 0,nextFocusableElement:v.context.triggerFocusTargetRef,beforeContentFocusGuardRef:v.context.beforeContentFocusGuardRef,children:(0,c.jsx)(y,{value:B,children:W})})}),B=h.forwardRef(function(a,b){let{className:c,render:d,style:e,...f}=a,{store:g}=(0,l.usePopoverRootContext)(),h=g.useState("open"),{arrowRef:i,side:j,align:k,arrowUncentered:o,arrowStyles:p}=(0,m.usePopoverPositionerContext)();return(0,q.useRenderElement)("div",a,{state:{open:h,side:j,align:k,uncentered:o},ref:[b,i],props:[{style:p,"aria-hidden":!0},f],stateAttributesMapping:n.popupStateMapping})}),C={...n.popupStateMapping,...o.transitionStatusMapping},D=h.forwardRef(function(a,b){let{className:c,render:d,style:e,...f}=a,{store:g}=(0,l.usePopoverRootContext)(),h=g.useState("open"),i=g.useState("mounted"),j=g.useState("transitionStatus"),k=g.useState("openChangeReason");return(0,q.useRenderElement)("div",a,{state:{open:h,transitionStatus:j},ref:[g.context.backdropRef,b],props:[{role:"presentation",hidden:!i,style:{pointerEvents:k===r.REASONS.triggerHover?"none":void 0,userSelect:"none",WebkitUserSelect:"none"}},f],stateAttributesMapping:C})});var E=a.i(743514);let F=h.forwardRef(function(a,b){let{render:c,className:d,style:e,...f}=a,{store:g}=(0,l.usePopoverRootContext)(),h=(0,E.useBaseUiId)(f.id);return(0,v.useIsoLayoutEffect)(()=>(g.set("titleElementId",h),()=>{g.set("titleElementId",void 0)}),[g,h]),(0,q.useRenderElement)("h2",a,{ref:b,props:[{id:h},f]})}),G=h.forwardRef(function(a,b){let{render:c,className:d,style:e,...f}=a,{store:g}=(0,l.usePopoverRootContext)(),h=(0,E.useBaseUiId)(f.id);return(0,v.useIsoLayoutEffect)(()=>(g.set("descriptionElementId",h),()=>{g.set("descriptionElementId",void 0)}),[g,h]),(0,q.useRenderElement)("p",a,{ref:b,props:[{id:h},f]})});var H=a.i(20700),I=a.i(149137);let J=h.forwardRef(function(a,b){let c,{render:d,className:e,disabled:f=!1,nativeButton:g=!0,style:i,...j}=a,{buttonRef:k,getButtonProps:m}=(0,H.useButton)({disabled:f,focusableWhenDisabled:!1,native:g}),{store:n}=(0,l.usePopoverRootContext)();return c=h.useContext(x),(0,v.useIsoLayoutEffect)(()=>c?.register(),[c]),(0,q.useRenderElement)("button",a,{ref:[b,k],props:[{onClick(a){n.setOpen(!1,(0,I.createChangeEventDetails)(r.REASONS.closePress,a.nativeEvent,a.currentTarget))}},j,m]})}),K=((b={}).popupWidth="--popup-width",b.popupHeight="--popup-height",b);var L=a.i(358932);let M={activationDirection:a=>a?{"data-activation-direction":a}:null},N=h.forwardRef(function(a,b){let{render:c,className:d,style:e,children:f,...g}=a,{store:h}=(0,l.usePopoverRootContext)(),{side:i}=(0,m.usePopoverPositionerContext)(),j=h.useState("instantType"),{children:k,state:n}=(0,L.usePopupViewport)({store:h,side:i,cssVars:K,children:f}),o={activationDirection:n.activationDirection,transitioning:n.transitioning,instant:j};return(0,q.useRenderElement)("div",a,{state:o,ref:b,props:[g,{children:k}],stateAttributesMapping:M})});var O=a.i(179256),P=a.i(781528);class Q{constructor(){this.store=new P.PopoverStore}open(a){let b=a?this.store.context.triggerElements.getById(a)??void 0:void 0;if(a&&!b)throw Error((0,O.default)(80,a));this.store.setOpen(!0,(0,I.createChangeEventDetails)(r.REASONS.imperativeAction,void 0,b))}close(){this.store.setOpen(!1,(0,I.createChangeEventDetails)(r.REASONS.imperativeAction,void 0,void 0))}get isOpen(){return this.store.state.open}}a.s(["Arrow",0,B,"Backdrop",0,D,"Close",0,J,"Description",0,G,"Handle",0,Q,"Popup",0,A,"Portal",()=>f.PopoverPortal,"Positioner",()=>g.PopoverPositioner,"Root",()=>d.PopoverRoot,"Title",0,F,"Trigger",()=>e.PopoverTrigger,"Viewport",0,N,"createHandle",0,function(){return new Q}],248351);var R=a.i(248351),R=R,S=a.i(799856);a.s(["Popover",0,function({...a}){return(0,c.jsx)(R.Root,{"data-slot":"popover",...a})},"PopoverContent",0,function({className:a,align:b="center",alignOffset:d=0,side:e="bottom",sideOffset:f=4,...g}){return(0,c.jsx)(R.Portal,{children:(0,c.jsx)(R.Positioner,{align:b,alignOffset:d,side:e,sideOffset:f,className:"isolate z-50",children:(0,c.jsx)(R.Popup,{"data-slot":"popover-content",className:(0,S.cn)("z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",a),...g})})})},"PopoverTrigger",0,function({...a}){return(0,c.jsx)(R.Trigger,{"data-slot":"popover-trigger",...a})}],158799)}];
2
+
3
+ //# sourceMappingURL=_0-9ezhb._.js.map