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.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +84 -79
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/required-server-files.json +1 -1
- package/.next/standalone/.next/routes-manifest.json +47 -7
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-qfa-x._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00nrs0h._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__014kwh_._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__02v.lnb._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__03x8rds._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__04cr_m8._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__06j59n1._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07gfnob._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07xijrd._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__08tdlcm._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__09_6_.~._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__09gkm_6._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_uldiw._.js +15 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0a4t.z5._.js +52 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ar~lbk._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0bo-su1._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0c-bb5d._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0dvelfj._.js +52 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e.7isl._.js +5 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gcec.8._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0i1m1v9._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ihlt6s._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0kd7wei._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0mky_tj._.js +35 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0oiiu_o._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0oqgn2h._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qvunc5._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0r77-u1._.js +52 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0rhb4gk._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0vi8p6v._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0w0wz~a._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0w3m-oz._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zh8xur._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~iu3jq._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__11xw16l._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__12nr~pb._.js +1 -1
- package/.next/standalone/.next/server/chunks/{_0v81st0._.js → _0.pa6m1._.js} +1 -1
- package/.next/standalone/.next/server/chunks/_05ib7yu._.js +3 -0
- package/.next/standalone/.next/server/chunks/{_0ll-5~7._.js → _09y8.gr._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{_0.5a4bu._.js → _0mwq11h._.js} +1 -1
- package/.next/standalone/.next/server/chunks/_0y4b49w._.js +3 -0
- package/.next/standalone/.next/server/chunks/_0zcb2f0._.js +3 -0
- package/.next/standalone/.next/server/chunks/{node_modules_ws_124xx2_._.js → _106a~ya._.js} +2 -2
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_pages-api_00-t8sq.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_00fhuqb._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_lib_0dvlmi4._.js +15 -0
- package/.next/standalone/.next/server/chunks/src_lib_0ojl2hg._.js +52 -0
- package/.next/standalone/.next/server/chunks/src_lib_layout-store_ts_0fanx7c._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_status-manager_ts_003hlhy._.js +1 -13
- package/.next/standalone/.next/server/chunks/src_lib_workspace-store_ts_0vqt073._.js +1 -40
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ap_bxo._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0t9ru13._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0-9ezhb._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_101yu0w._.js → _0-kyl7i._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_003~2_g._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_00zsk6a._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_017c8be._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_01eupc5._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_05bq96_._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0c1yivm._.js → _070zc_o._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_07jud1p._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0_sz4y0._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0_uqm-4._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0ftinmo._.js → _0ed.wmt._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0egedv6._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0-ug5tr._.js → _0fota2a._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0h4kenr._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0ihbr8k._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0lpqhot._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0mltzed._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0nbe6mv._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0pg-q18._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0pp3e5j._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0ttiybw._.js +18 -0
- package/.next/standalone/.next/server/chunks/ssr/_0w.1ts8._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0w6jc9p._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0xp3-y6._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0y7o.rg._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0ytb_c0._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0ozy~xe._.js → _0~hz1fq._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1289s74._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_02jzd5g._.js → _13gee5r._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/messages_de_terminal_json_[json]_cjs_05jirtw._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_de_webBrowser_json_[json]_cjs_0wfz-ul._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_en_terminal_json_[json]_cjs_0~ls3g-._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_en_webBrowser_json_[json]_cjs_0oirdko._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_es_terminal_json_[json]_cjs_04g2b1_._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_es_webBrowser_json_[json]_cjs_0w_no_c._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_fr_terminal_json_[json]_cjs_0uhakya._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_fr_webBrowser_json_[json]_cjs_00tbjsf._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ja_terminal_json_[json]_cjs_0776z4f._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ja_webBrowser_json_[json]_cjs_0tp7~.s._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ko_terminal_json_[json]_cjs_06611.3._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ko_webBrowser_json_[json]_cjs_0ibtysu._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_terminal_json_[json]_cjs_034yyg9._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_webBrowser_json_[json]_cjs_0eu9fbw._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ru_terminal_json_[json]_cjs_0emk8~n._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ru_webBrowser_json_[json]_cjs_113-x8n._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_tr_terminal_json_[json]_cjs_0xpix8g._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_tr_webBrowser_json_[json]_cjs_12ziott._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_terminal_json_[json]_cjs_12vwl8a._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_webBrowser_json_[json]_cjs_0e5lp-q._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_terminal_json_[json]_cjs_0spg5z5._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_webBrowser_json_[json]_cjs_0u_cpuv._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_030gj7p._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_04tdvwp._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_0bdox2f._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{src_components_12mrirb._.js → src_components_0_nzv1r._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_components_0_aiven._.js → src_components_0bqqfju._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_components_0geizrr._.js → src_components_0rqxlj-._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_components_11_1i~k._.js → src_components_0s~.n3e._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_components_features_mobile_mobile-terminal-page_tsx_02chzch._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_components_features_workspace_terminal-page_tsx_0wuq-jl._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_lib_message-namespaces_ts_0wjpvu5._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_workspace-store_ts_00x-rec._.js +10 -0
- package/.next/standalone/.next/server/middleware-build-manifest.js +84 -79
- package/.next/standalone/.next/server/pages/_app/build-manifest.json +4 -4
- package/.next/standalone/.next/server/pages/_app/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/_app.js +2 -2
- package/.next/standalone/.next/server/pages/_app.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/auth/login.js +2 -2
- package/.next/standalone/.next/server/pages/api/auth/login.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/auth/preflight.js +2 -2
- package/.next/standalone/.next/server/pages/api/auth/preflight.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/auth/setup.js +2 -2
- package/.next/standalone/.next/server/pages/api/auth/setup.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/check-claude.js +5 -1
- package/.next/standalone/.next/server/pages/api/check-claude.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/console/pages-manifest.json +3 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/console.js +8 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/console.js.map +5 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/console.js.nft.json +1 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/eval/pages-manifest.json +3 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/eval.js +8 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/eval.js.map +5 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/eval.js.nft.json +1 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/network/pages-manifest.json +3 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/network.js +8 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/network.js.map +5 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/network.js.nft.json +1 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/screenshot/pages-manifest.json +3 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/screenshot.js +8 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/screenshot.js.map +5 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/screenshot.js.nft.json +1 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/url/pages-manifest.json +3 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/url.js +8 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/url.js.map +5 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/url.js.nft.json +1 -0
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/result.js +3 -3
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/result.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/send.js +3 -3
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/send.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/status.js +3 -3
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/status.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId].js +3 -3
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId].js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/cli/tabs.js +3 -3
- package/.next/standalone/.next/server/pages/api/cli/tabs.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/cli/workspaces.js +2 -2
- package/.next/standalone/.next/server/pages/api/cli/workspaces.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/config.js +2 -2
- package/.next/standalone/.next/server/pages/api/config.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout/diff.js +1 -1
- package/.next/standalone/.next/server/pages/api/layout/diff.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId]/move.js +2 -2
- package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId]/move.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId].js +5 -5
- package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId].js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/order.js +2 -2
- package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/order.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs.js +5 -5
- package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout/pane/[paneId].js +2 -2
- package/.next/standalone/.next/server/pages/api/layout/pane/[paneId].js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout/pane.js +2 -2
- package/.next/standalone/.next/server/pages/api/layout/pane.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout.js +2 -2
- package/.next/standalone/.next/server/pages/api/layout.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/message-history.js +2 -2
- package/.next/standalone/.next/server/pages/api/message-history.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/preflight/runtime.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/daily-report/cache.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/daily-report/generate.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/daily-report/list.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/projects.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/sessions.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/uptime.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/status/hook.js +6 -6
- package/.next/standalone/.next/server/pages/api/status/hook.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/status/statusline.js +6 -6
- package/.next/standalone/.next/server/pages/api/status/statusline.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/timeline/sessions.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/tmux/permission-options.js +3 -2
- package/.next/standalone/.next/server/pages/api/tmux/permission-options.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/tmux/plan-options.js +3 -2
- package/.next/standalone/.next/server/pages/api/tmux/plan-options.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/tmux/recover-unknown.js +5 -5
- package/.next/standalone/.next/server/pages/api/tmux/recover-unknown.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/tmux/reset.js +5 -5
- package/.next/standalone/.next/server/pages/api/tmux/reset.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/workspace/[workspaceId].js +2 -2
- package/.next/standalone/.next/server/pages/api/workspace/[workspaceId].js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/workspace/active.js +2 -2
- package/.next/standalone/.next/server/pages/api/workspace/active.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/workspace/group/[groupId].js +2 -2
- package/.next/standalone/.next/server/pages/api/workspace/group/[groupId].js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/workspace/group/reorder.js +2 -2
- package/.next/standalone/.next/server/pages/api/workspace/group/reorder.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/workspace/group.js +2 -2
- package/.next/standalone/.next/server/pages/api/workspace/group.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/workspace/reorder.js +2 -2
- package/.next/standalone/.next/server/pages/api/workspace/reorder.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/workspace/validate.js +2 -2
- package/.next/standalone/.next/server/pages/api/workspace/validate.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/workspace.js +5 -5
- package/.next/standalone/.next/server/pages/api/workspace.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/de/404.html +1 -1
- package/.next/standalone/.next/server/pages/de/500.html +1 -1
- package/.next/standalone/.next/server/pages/en/404.html +1 -1
- package/.next/standalone/.next/server/pages/en/500.html +1 -1
- package/.next/standalone/.next/server/pages/es/404.html +1 -1
- package/.next/standalone/.next/server/pages/es/500.html +1 -1
- package/.next/standalone/.next/server/pages/fr/404.html +1 -1
- package/.next/standalone/.next/server/pages/fr/500.html +1 -1
- package/.next/standalone/.next/server/pages/index/build-manifest.json +16 -15
- package/.next/standalone/.next/server/pages/index/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/index/react-loadable-manifest.json +9 -9
- package/.next/standalone/.next/server/pages/index.js +13 -12
- package/.next/standalone/.next/server/pages/index.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/ja/404.html +1 -1
- package/.next/standalone/.next/server/pages/ja/500.html +1 -1
- package/.next/standalone/.next/server/pages/ko/404.html +1 -1
- package/.next/standalone/.next/server/pages/ko/500.html +1 -1
- package/.next/standalone/.next/server/pages/login/build-manifest.json +9 -8
- package/.next/standalone/.next/server/pages/login/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/login.js +8 -7
- package/.next/standalone/.next/server/pages/login.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/pt-BR/404.html +1 -1
- package/.next/standalone/.next/server/pages/pt-BR/500.html +1 -1
- package/.next/standalone/.next/server/pages/reports/build-manifest.json +14 -13
- package/.next/standalone/.next/server/pages/reports/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/reports/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/reports.js +15 -14
- package/.next/standalone/.next/server/pages/reports.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/reset.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/ru/404.html +1 -1
- package/.next/standalone/.next/server/pages/ru/500.html +1 -1
- package/.next/standalone/.next/server/pages/stats/build-manifest.json +15 -14
- package/.next/standalone/.next/server/pages/stats/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/stats/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/stats.js +13 -12
- package/.next/standalone/.next/server/pages/stats.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/tools-required/build-manifest.json +6 -6
- package/.next/standalone/.next/server/pages/tools-required/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/tools-required.js +4 -3
- package/.next/standalone/.next/server/pages/tools-required.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/tr/404.html +1 -1
- package/.next/standalone/.next/server/pages/tr/500.html +1 -1
- package/.next/standalone/.next/server/pages/webview/build-manifest.json +17 -16
- package/.next/standalone/.next/server/pages/webview/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/webview/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/webview.js +13 -12
- package/.next/standalone/.next/server/pages/webview.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/zh-CN/404.html +1 -1
- package/.next/standalone/.next/server/pages/zh-CN/500.html +1 -1
- package/.next/standalone/.next/server/pages/zh-TW/404.html +1 -1
- package/.next/standalone/.next/server/pages/zh-TW/500.html +1 -1
- package/.next/standalone/.next/server/pages-manifest.json +5 -0
- package/.next/standalone/.next/static/chunks/{11tnyk0iystp1.js → 0--r5y9cw3.0z.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0w1ldes9u.mhe.js → 0-8v00lvs9_s0.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0oy5nvsojxb2i.js → 0-rskn1p_p.qb.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0h7n~i8gk~-a2.js → 0.4j~sc70rsrv.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0g0xm7shj062y.js → 001_h.~thz3j3.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0ynitrrzdxcnh.js → 00gxls80r--_0.js} +9 -8
- package/.next/standalone/.next/static/chunks/{121i8u8byuotx.js → 01rmp.m_ls7z_.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0312riii_sl_1.js → 02o84r01jsc.z.js} +1 -1
- package/.next/standalone/.next/static/chunks/039-4cgt.dvjg.js +1 -0
- package/.next/standalone/.next/static/chunks/03t01d94eyxh2.js +1 -0
- package/.next/standalone/.next/static/chunks/04hn532e1vcts.js +1 -0
- package/.next/standalone/.next/static/chunks/05o56eq7.f3q2.js +1 -0
- package/.next/standalone/.next/static/chunks/{0x.dxrfqc.ix9.js → 0628quqp4ggh9.js} +1 -1
- package/.next/standalone/.next/static/chunks/06ak74s111wx-.js +1 -0
- package/.next/standalone/.next/static/chunks/07yop4v9xcwb9.js +1 -0
- package/.next/standalone/.next/static/chunks/08d6vee5l~1wn.js +1 -0
- package/.next/standalone/.next/static/chunks/09o2m0ingey8v.js +1 -0
- package/.next/standalone/.next/static/chunks/{0d5b6a8r1tk95.js → 09s7ub8rgh~u-.js} +1 -1
- package/.next/standalone/.next/static/chunks/{02su2lz3i24nj.js → 09zxrli-btome.js} +1 -1
- package/.next/standalone/.next/static/chunks/0_7~rgbkmfo_p.js +1 -0
- package/.next/standalone/.next/static/chunks/0a1xt.enr50l5.js +1 -0
- package/.next/standalone/.next/static/chunks/{0-p.9vdmq-_co.js → 0am7rh7xdv5lw.js} +4 -4
- package/.next/standalone/.next/static/chunks/{13u3mwvwu3kc..js → 0apqp49tgoz~z.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0_67ozmvnvz16.js → 0bx27stclo8g5.js} +1 -1
- package/.next/standalone/.next/static/chunks/0ddh4qmi2awdq.js +1 -0
- package/.next/standalone/.next/static/chunks/0dwxj97xm70gv.js +1 -0
- package/.next/standalone/.next/static/chunks/0f3q6qhpk.i_r.js +1 -0
- package/.next/standalone/.next/static/chunks/{07.5h~7~q9~1e.js → 0f_7vuqno92ye.js} +1 -1
- package/.next/standalone/.next/static/chunks/0fsldybjx443~.js +1 -0
- package/.next/standalone/.next/static/chunks/0gfhd.gsbt9qg.js +1 -0
- package/.next/standalone/.next/static/chunks/0hv4~cszgs3im.js +1 -0
- package/.next/standalone/.next/static/chunks/0ic.mcu6-9din.js +1 -0
- package/.next/standalone/.next/static/chunks/0k4b.~5c4nvtm.js +1 -0
- package/.next/standalone/.next/static/chunks/0kqxfunh4731g.js +1 -0
- package/.next/standalone/.next/static/chunks/{0fn24h74ta78c.js → 0k~crb4s4z7gy.js} +1 -1
- package/.next/standalone/.next/static/chunks/0lrjdru2bjp.x.js +1 -0
- package/.next/standalone/.next/static/chunks/0lujhtd04orw5.js +1 -0
- package/.next/standalone/.next/static/chunks/0mwkajcworx_-.js +1 -0
- package/.next/standalone/.next/static/chunks/0nqofghl.17w_.js +1 -0
- package/.next/standalone/.next/static/chunks/0o1lsz827g-q_.js +1 -0
- package/.next/standalone/.next/static/chunks/0qqsez8ir1.fs.js +1 -0
- package/.next/standalone/.next/static/chunks/{0_htal_j04mkg.js → 0r3lm4_qr3y.a.js} +1 -1
- package/.next/standalone/.next/static/chunks/{06vxx-4w.uvj0.js → 0rahh2v7~f4tj.js} +17 -16
- package/.next/standalone/.next/static/chunks/{0pxbg4s8a4y54.js → 0rb41e1r1urhx.js} +1 -1
- package/.next/standalone/.next/static/chunks/0uii4rziiew3_.js +1 -0
- package/.next/standalone/.next/static/chunks/0vtkq~yk_1~gv.js +1 -0
- package/.next/standalone/.next/static/chunks/0vx2hhzc46h_7.js +1 -0
- package/.next/standalone/.next/static/chunks/0x_.wshvak6zp.js +1 -0
- package/.next/standalone/.next/static/chunks/0xa1.t1vj1mw0.js +1 -0
- package/.next/standalone/.next/static/chunks/0xpr6vw-p8oxk.js +1 -0
- package/.next/standalone/.next/static/chunks/{0uzs3jw4-93ly.js → 0zih6-g65txpb.js} +1 -1
- package/.next/standalone/.next/static/chunks/0zn1jt__-t51p.js +1 -0
- package/.next/standalone/.next/static/chunks/0zrhxc96zwjuv.js +1 -0
- package/.next/standalone/.next/static/chunks/0z~yy1lqrvp_a.js +1 -0
- package/.next/standalone/.next/static/chunks/0~cgr_3dpx0vl.js +1 -0
- package/.next/standalone/.next/static/chunks/{0te1jnz5.rt.r.js → 0~g0t2q6o3r-7.js} +6 -6
- package/.next/standalone/.next/static/chunks/0~vfb0ylk_9au.js +16 -0
- package/.next/standalone/.next/static/chunks/109f1pvy3e_vd.js +1 -0
- package/.next/standalone/.next/static/chunks/10em078j6cul4.js +1 -0
- package/.next/standalone/.next/static/chunks/{0a9t5laucshuf.js → 10todxw2604hk.js} +1 -1
- package/.next/standalone/.next/static/chunks/{05zne4hn1v65k.js → 10uz6x-h~dv0..js} +14 -13
- package/.next/standalone/.next/static/chunks/{0~nexgc77r_hk.js → 13q-ol3bkz8ft.js} +16 -15
- package/.next/standalone/.next/static/chunks/14if5vtky.3sn.js +1 -0
- package/.next/standalone/.next/static/chunks/{017n78o_7xb4_.js → 15hd85wggjanq.js} +1 -1
- package/.next/standalone/.next/static/chunks/15i_n03eg5uyp.js +1 -0
- package/.next/standalone/.next/static/chunks/15sblmrroyskk.js +1 -0
- package/.next/standalone/.next/static/chunks/1756nfyulu.9h.css +1 -0
- package/.next/standalone/.next/static/chunks/{0j.sfmmqj2xel.js → 17rh_.7tkk2m0.js} +15 -14
- package/.next/standalone/.next/static/chunks/turbopack-02..gqxjw9fev.js +1 -0
- package/.next/standalone/.next/static/chunks/turbopack-05luogg2yney~.js +1 -0
- package/.next/standalone/.next/static/chunks/turbopack-092b2t67-z3ds.js +1 -0
- package/.next/standalone/.next/static/chunks/turbopack-0eue2xixdnbd..js +1 -0
- package/.next/standalone/.next/static/chunks/{turbopack-15bv~a4hbvh29.js → turbopack-0i6l53-j6t6zg.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0d-xk62f1t05v.js → turbopack-0ser1ty-sh2jk.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0zcblahe.hdqd.js → turbopack-0zouy.~ram.7g.js} +1 -1
- package/.next/standalone/.next/static/{X7BRO7ORR4bKFt1LXzGU8 → onsm_2jNZvyggHqM9yibn}/_buildManifest.js +11 -6
- package/.next/standalone/messages/de/terminal.json +4 -0
- package/.next/standalone/messages/de/webBrowser.json +5 -1
- package/.next/standalone/messages/en/terminal.json +4 -0
- package/.next/standalone/messages/en/webBrowser.json +5 -1
- package/.next/standalone/messages/es/terminal.json +4 -0
- package/.next/standalone/messages/es/webBrowser.json +5 -1
- package/.next/standalone/messages/fr/terminal.json +4 -0
- package/.next/standalone/messages/fr/webBrowser.json +5 -1
- package/.next/standalone/messages/ja/terminal.json +4 -0
- package/.next/standalone/messages/ja/webBrowser.json +5 -1
- package/.next/standalone/messages/ko/terminal.json +4 -0
- package/.next/standalone/messages/ko/webBrowser.json +5 -1
- package/.next/standalone/messages/pt-BR/terminal.json +4 -0
- package/.next/standalone/messages/pt-BR/webBrowser.json +5 -1
- package/.next/standalone/messages/ru/terminal.json +4 -0
- package/.next/standalone/messages/ru/webBrowser.json +5 -1
- package/.next/standalone/messages/tr/terminal.json +4 -0
- package/.next/standalone/messages/tr/webBrowser.json +5 -1
- package/.next/standalone/messages/zh-CN/terminal.json +4 -0
- package/.next/standalone/messages/zh-CN/webBrowser.json +5 -1
- package/.next/standalone/messages/zh-TW/terminal.json +4 -0
- package/.next/standalone/messages/zh-TW/webBrowser.json +5 -1
- package/.next/standalone/package.json +5 -2
- package/.next/standalone/server.js +1 -1
- package/.next/standalone/src/config/tmux.conf +17 -7
- package/.next/standalone/src/lib/providers/claude/index.ts +44 -0
- package/.next/standalone/src/pages/api/layout/pane/[paneId]/tabs/index.ts +13 -6
- package/README.de.md +5 -4
- package/README.es.md +5 -4
- package/README.fr.md +5 -4
- package/README.ja.md +5 -4
- package/README.ko.md +5 -4
- package/README.md +5 -4
- package/README.pt-BR.md +5 -4
- package/README.ru.md +5 -4
- package/README.tr.md +5 -4
- package/README.zh-CN.md +5 -4
- package/README.zh-TW.md +5 -4
- package/bin/cli.js +95 -0
- package/dist/server.js +974 -852
- package/package.json +5 -2
- package/src/config/tmux.conf +17 -7
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__01.~37j._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__016s4a9._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__02.9a5j._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__03l15.f._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05ij_ys._.js +0 -42
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__06h3gzy._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_fu3k.._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_imm_0._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0abp0lo._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0auutl5._.js +0 -5
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0d-inw8._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g8mjyh._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0lk7ru8._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l~_wd0._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ovn6yp._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0un_g-o._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__12ksl6n._.js +0 -42
- package/.next/standalone/.next/server/chunks/_03-duro._.js +0 -3
- package/.next/standalone/.next/server/chunks/_07097f~._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0z7d6.z._.js +0 -3
- package/.next/standalone/.next/server/chunks/src_lib_0p.xsqi._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0da5cj~._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12b2-y_._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_016o9_-._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_04iqb-o._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_04q3_kj._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0a_u5qm._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0d58w1~._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0nib_x8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0nuztht._.js +0 -18
- package/.next/standalone/.next/server/chunks/ssr/_0oca87b._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0ovjjn5._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0pk4~_0._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0qt-m3l._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0sm8slq._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_10s2f96._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_13c-b~p._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_13lrp9_._.js +0 -3
- package/.next/standalone/.next/static/chunks/0-7en.d6a3jki.js +0 -1
- package/.next/standalone/.next/static/chunks/0-pm5wxsyxs3e.js +0 -1
- package/.next/standalone/.next/static/chunks/01ul8lmr04ls3.js +0 -1
- package/.next/standalone/.next/static/chunks/05b7zy0n0vhms.js +0 -1
- package/.next/standalone/.next/static/chunks/05kshd9vdrl4o.js +0 -1
- package/.next/standalone/.next/static/chunks/05w~qu2zpvh2f.js +0 -1
- package/.next/standalone/.next/static/chunks/08f708~_7uy_i.js +0 -1
- package/.next/standalone/.next/static/chunks/0af.3khnmptnl.js +0 -1
- package/.next/standalone/.next/static/chunks/0cvx059r5hgj1.js +0 -1
- package/.next/standalone/.next/static/chunks/0dp178b-0_ltl.js +0 -1
- package/.next/standalone/.next/static/chunks/0ebjicjua7yl-.js +0 -1
- package/.next/standalone/.next/static/chunks/0gn-f6_m696k0.js +0 -1
- package/.next/standalone/.next/static/chunks/0kaufevqdhsld.js +0 -1
- package/.next/standalone/.next/static/chunks/0n2k1al4sr_qq.css +0 -1
- package/.next/standalone/.next/static/chunks/0n4fv8.loh_0x.js +0 -1
- package/.next/standalone/.next/static/chunks/0nn618je7_7ec.js +0 -16
- package/.next/standalone/.next/static/chunks/0pv9~yath4mjh.js +0 -1
- package/.next/standalone/.next/static/chunks/0q0yh17_ncipj.js +0 -1
- package/.next/standalone/.next/static/chunks/0qkrdmhiv-0d3.js +0 -1
- package/.next/standalone/.next/static/chunks/0r9z55-r31en8.js +0 -1
- package/.next/standalone/.next/static/chunks/0ra09kjja5rf..js +0 -1
- package/.next/standalone/.next/static/chunks/0sc7tkg1gojr..js +0 -1
- package/.next/standalone/.next/static/chunks/0u.snf3d~5nvq.js +0 -1
- package/.next/standalone/.next/static/chunks/0u9yrtrs1bktp.js +0 -1
- package/.next/standalone/.next/static/chunks/0v.l~.~v98c2c.js +0 -1
- package/.next/standalone/.next/static/chunks/0wu~4k-l8otuy.js +0 -1
- package/.next/standalone/.next/static/chunks/0wvu-lowt9uem.js +0 -1
- package/.next/standalone/.next/static/chunks/0x7cvsf..ezd..js +0 -1
- package/.next/standalone/.next/static/chunks/0yb~gw6ukzdmo.js +0 -1
- package/.next/standalone/.next/static/chunks/0yg3hj1g~k1ip.js +0 -1
- package/.next/standalone/.next/static/chunks/0z_~g~mb.kjs1.js +0 -1
- package/.next/standalone/.next/static/chunks/0~c6h8j7ut2ca.js +0 -1
- package/.next/standalone/.next/static/chunks/0~lnp45fxxtgz.js +0 -1
- package/.next/standalone/.next/static/chunks/0~ts_4hi7.u_0.js +0 -1
- package/.next/standalone/.next/static/chunks/13_l03e3sab-g.js +0 -1
- package/.next/standalone/.next/static/chunks/156~ejmpjxu8e.js +0 -1
- package/.next/standalone/.next/static/chunks/15m4y6otktj8z.js +0 -1
- package/.next/standalone/.next/static/chunks/16bag6z7n~ffw.js +0 -1
- package/.next/standalone/.next/static/chunks/17ebdp-_o5o30.js +0 -1
- package/.next/standalone/.next/static/chunks/turbopack-0nn9kx.dkgwqs.js +0 -1
- package/.next/standalone/.next/static/chunks/turbopack-0rb3q18bhb2hu.js +0 -1
- package/.next/standalone/.next/static/chunks/turbopack-0~wmco6ifn20m.js +0 -1
- package/.next/standalone/.next/static/chunks/turbopack-1469mxaruw82d.js +0 -1
- /package/.next/standalone/.next/static/{X7BRO7ORR4bKFt1LXzGU8 → onsm_2jNZvyggHqM9yibn}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{X7BRO7ORR4bKFt1LXzGU8 → onsm_2jNZvyggHqM9yibn}/_ssgManifest.js +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "purplemux",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"description": "Manage multiple Claude Code sessions from your browser",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "subicura",
|
|
@@ -37,6 +37,8 @@
|
|
|
37
37
|
"scripts": {
|
|
38
38
|
"dev": "tsx watch server.ts",
|
|
39
39
|
"build": "next build && node scripts/post-build.js && tsup",
|
|
40
|
+
"build:landing": "eleventy",
|
|
41
|
+
"dev:landing": "eleventy --serve",
|
|
40
42
|
"build:server": "tsup",
|
|
41
43
|
"build:electron:main": "tsup --config electron/tsup.config.ts",
|
|
42
44
|
"build:electron": "next build && node scripts/post-build.js --electron && tsup && pnpm build:electron:main",
|
|
@@ -105,6 +107,7 @@
|
|
|
105
107
|
"zustand": "^5.0.12"
|
|
106
108
|
},
|
|
107
109
|
"devDependencies": {
|
|
110
|
+
"@11ty/eleventy": "^3.1.5",
|
|
108
111
|
"@electron/rebuild": "^4.0.3",
|
|
109
112
|
"@tailwindcss/postcss": "^4",
|
|
110
113
|
"@types/node": "^24.12.0",
|
|
@@ -133,7 +136,7 @@
|
|
|
133
136
|
"hono": ">=4.12.14",
|
|
134
137
|
"@hono/node-server": ">=1.19.13",
|
|
135
138
|
"lodash": ">=4.18.0",
|
|
136
|
-
"@xmldom/xmldom": "^0.8.
|
|
139
|
+
"@xmldom/xmldom": "^0.8.13",
|
|
137
140
|
"picomatch@>=2.0.0 <3.0.0": ">=2.3.2",
|
|
138
141
|
"picomatch@>=4.0.0 <5.0.0": ">=4.0.4"
|
|
139
142
|
}
|
package/src/config/tmux.conf
CHANGED
|
@@ -7,7 +7,7 @@ set -g aggressive-resize on
|
|
|
7
7
|
|
|
8
8
|
# prefix key 비활성 (모든 키 입력이 쉘에 전달)
|
|
9
9
|
set -g prefix None
|
|
10
|
-
unbind-key -
|
|
10
|
+
unbind-key -aq
|
|
11
11
|
|
|
12
12
|
# 스크롤백 버퍼 (xterm.js scrollback과 동일)
|
|
13
13
|
set -g history-limit 5000
|
|
@@ -27,7 +27,7 @@ set -g mouse on
|
|
|
27
27
|
# OSC 52로 선택 영역을 브라우저 클립보드에 전달 (xterm.js ClipboardAddon이 수신)
|
|
28
28
|
set -s set-clipboard on
|
|
29
29
|
|
|
30
|
-
# unbind-key -
|
|
30
|
+
# unbind-key -aq로 삭제된 마우스 기본 바인딩을 재정의
|
|
31
31
|
# 포그라운드 앱이 mouse reporting을 켰으면 send -M으로 위임하고,
|
|
32
32
|
# 그렇지 않으면 tmux가 copy-mode로 처리한다.
|
|
33
33
|
bind -T root MouseDrag1Pane \
|
|
@@ -40,11 +40,21 @@ bind -T root WheelUpPane \
|
|
|
40
40
|
"copy-mode -e"
|
|
41
41
|
bind -T root WheelDownPane send-keys -M
|
|
42
42
|
|
|
43
|
-
# copy-mode 내부:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
# copy-mode 내부:
|
|
44
|
+
# - 드래그: 선택 시작, 드래그 끝 → OSC 52 방출(copy-mode 유지, 선택 영역 유지)
|
|
45
|
+
# - 단순 클릭: 선택만 해제 (스크롤 위치 유지)
|
|
46
|
+
# - 휠로 바닥까지 내려오면 tmux가 자동으로 copy-mode 종료 → 라이브 뷰 복귀
|
|
47
|
+
# mode-keys가 $EDITOR/$VISUAL에 따라 vi로 자동 잡히는 환경이 있어 두 테이블 모두 바인딩
|
|
48
|
+
bind -T copy-mode MouseDrag1Pane send-keys -X begin-selection
|
|
49
|
+
bind -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-no-clear
|
|
50
|
+
bind -T copy-mode MouseDown1Pane send-keys -X clear-selection
|
|
51
|
+
bind -T copy-mode WheelUpPane send-keys -X -N 3 scroll-up
|
|
52
|
+
bind -T copy-mode WheelDownPane send-keys -X -N 3 scroll-down
|
|
53
|
+
bind -T copy-mode-vi MouseDrag1Pane send-keys -X begin-selection
|
|
54
|
+
bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-no-clear
|
|
55
|
+
bind -T copy-mode-vi MouseDown1Pane send-keys -X clear-selection
|
|
56
|
+
bind -T copy-mode-vi WheelUpPane send-keys -X -N 3 scroll-up
|
|
57
|
+
bind -T copy-mode-vi WheelDownPane send-keys -X -N 3 scroll-down
|
|
48
58
|
|
|
49
59
|
# 새 클라이언트 attach 시 SSH agent 등 환경변수 갱신 (브라우저 새 탭에서 재접속 시 stale 방지)
|
|
50
60
|
set -g update-environment "SSH_AUTH_SOCK SSH_CONNECTION SSH_TTY DISPLAY WAYLAND_DISPLAY"
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[75874,e=>{"use strict";var t=e.i(924868),n=e.i(814747),a=e.i(446786);let i=n.default.join(a.default.homedir(),".purplemux"),l=n.default.join(i,"push-subscriptions.json"),s=globalThis;s.__ptPushLock||(s.__ptPushLock=Promise.resolve());let r=async e=>{let t,n=new Promise(e=>{t=e}),a=s.__ptPushLock;s.__ptPushLock=n,await a;try{return await e()}finally{t()}},u=async()=>{try{let e=await t.default.readFile(l,"utf-8");return JSON.parse(e)}catch{return[]}},c=async e=>{await t.default.mkdir(i,{recursive:!0});let n=l+".tmp";try{await t.default.writeFile(n,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(n,l)}catch(e){throw await t.default.unlink(n).catch(()=>{}),e}},o=async()=>u(),d=async e=>r(async()=>{let t=await u(),n=t.findIndex(t=>t.endpoint===e.endpoint);n>=0?t[n]=e:t.push(e),await c(t)}),f=async e=>r(async()=>{let t=await u(),n=t.filter(t=>t.endpoint!==e);n.length!==t.length&&await c(n)}),h=globalThis;h.__ptVisibleDevices||(h.__ptVisibleDevices=new Map);let p=h.__ptVisibleDevices,m=globalThis;m.__ptSessionPushTarget||(m.__ptSessionPushTarget=new Map);let w=m.__ptSessionPushTarget;e.s(["addSubscription",0,d,"clearSessionPushTarget",0,e=>{w.delete(e)},"getSubscriptions",0,o,"isAnyDeviceVisible",0,()=>{let e=Date.now();for(let[t,n]of p)if(!(e-n>6e4))return!0;else p.delete(t);return!1},"markDeviceHidden",0,e=>{p.delete(e)},"markDeviceVisible",0,e=>{p.set(e,Date.now())},"removeSubscription",0,f,"setSessionPushTarget",0,(e,t)=>{w.set(e,t)}])},522734,(e,t,n)=>{t.exports=e.x("fs",()=>require("fs"))},319668,(e,t,n)=>{t.exports=e.x("readline",()=>require("readline"))},713915,e=>{"use strict";var t=e.i(233405),n=e.i(924868),a=e.i(446786),i=e.i(814747),l=e.i(224361),s=e.i(597789),r=e.i(965898);let u=(0,l.promisify)(t.execFile),c=null,o=null,d=async()=>{let e=a.default.userInfo().shell||(0,s.defaultShell)();try{let{stdout:t}=await u(e,["-ilc",'echo -n "$PATH"'],{timeout:5e3,env:{...(0,s.buildShellEnv)(),SHELL:e,DISABLE_AUTO_UPDATE:"true",ZSH_TMUX_AUTOSTARTED:"true"}});return t.toString().trim()}catch{return r.PRISTINE_ENV.PATH||""}},f=async()=>c||(o||(o=d().then(e=>(c=e,o=null,e))),o),h=async(e,t,n)=>{try{let a=await f(),{stdout:i}=await u(e,t,{timeout:5e3,env:{...process.env,PATH:a}});return{installed:!0,version:n(i)}}catch{return{installed:!1,version:null}}},p=e=>e.trim().match(/(\d+\.\d+[\d.]*)/)?.[1]??null,m=[i.default.join(a.default.homedir(),".local","bin")],w=async()=>{for(let e of m)try{return await (0,n.access)(i.default.join(e,"claude")),e}catch{}return null},y=e=>e.installed&&null!==e.version&&parseFloat(e.version)>=2.9,g=async()=>{c=await d();let[e,t,l]=await Promise.all([h("tmux",["-V"],p),h("git",["--version"],p),h("claude",["--version"],p)]),s=(y(e)&&t.installed&&l.installed,l.installed?null:await w()),r=!1;if(l.installed||s)try{await (0,n.access)(i.default.join(a.default.homedir(),".claude")),r=!0}catch{}return{tmux:{...e,compatible:y(e)},git:t,claude:{...l,binaryPath:s,loggedIn:r}}},S=null,v=null,P=null,A=null,_=async()=>P&&Date.now()-P.checkedAt<1e3?P.result:A||(A=g().then(e=>(P={result:e,checkedAt:Date.now()},A=null,e)).catch(e=>{throw A=null,e})),I=async()=>{c=await d();let[e,t,n]=await Promise.all([h("tmux",["-V"],p),h("git",["--version"],p),h("claude",["--version"],p)]);return{tmux:{...e,compatible:y(e)},git:t,claude:n}},T=async()=>S&&Date.now()-S.checkedAt<3e4?S.result:v||(v=I().then(e=>(S={result:e,checkedAt:Date.now()},v=null,e)).catch(e=>{throw v=null,e}));e.s(["getCachedPreflightStatus",0,_,"getCachedRuntimePreflight",0,T,"getShellPath",0,f,"invalidateRuntimeCache",0,()=>{S=null,v=null}])},143511,e=>{"use strict";var t=e.i(924868),n=e.i(522734),a=e.i(814747),i=e.i(446786),l=e.i(233405),s=e.i(224361),r=e.i(713915),u=e.i(544538);let c=(0,s.promisify)(l.execFile),o=a.default.join(i.default.homedir(),".claude"),d=a.default.join(o,"sessions"),f=a.default.join(o,"projects"),h=[a.default.join(i.default.homedir(),".local","bin","claude")],p=e=>{let t=e.replace(/[^a-zA-Z0-9]/g,"-");if(t.length<=200)return t;let n=m(e);return`${t.slice(0,200)}-${n}`},m=e=>{let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return Math.abs(t).toString(36)},w=async e=>{try{let{stdout:t}=await c("pgrep",["-P",String(e)]);return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},y=async e=>{if(u.isLinux)try{return await t.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await c("lsof",["-a","-p",String(e),"-d","cwd","-Fn"]),n=t.split("\n").find(e=>e.startsWith("n/"));return n?n.slice(1):null}catch{return null}},g=async e=>{for(let t of e)try{let{stdout:e}=await c("ps",["-p",String(t),"-o","args="]),n=e.trim().match(/claude\s+--resume\s+([0-9a-f-]{36})/);if(n){let e=await y(t);return{pid:t,sessionId:n[1],cwd:e}}}catch{continue}return null},S=async e=>{try{let n=await t.default.readFile(e,"utf-8"),a=JSON.parse(n);if(!a.pid||!a.sessionId)return null;return a}catch{return null}},v=async(e,n)=>{let i=a.default.join(e,`${n}.jsonl`);try{return await t.default.access(i),i}catch{return null}},P=async()=>{try{return await c("claude",["--version"],{timeout:5e3,env:{...process.env,PATH:await (0,r.getShellPath)()}}),!0}catch{for(let e of h)try{return await t.default.access(e),!0}catch{}return!1}},A=async(e,t)=>{for(let n of t??await w(e))try{let{stdout:e}=await c("ps",["-p",String(n),"-o","args="]);if(e.trim().includes("claude"))return!0}catch{continue}return!1},_=async(e,n)=>{try{await t.default.access(o)}catch{return{status:await P()?"not-initialized":"not-installed",sessionId:null,jsonlPath:null,pid:null,startedAt:null,cwd:null}}let i=n??await w(e);if(0===i.length)return{status:"not-running",sessionId:null,jsonlPath:null,pid:null,startedAt:null,cwd:null};let l=(await Promise.all(i.map(w))).flat(),s=[...i,...l],r=new Set(s);try{for(let e of(await t.default.readdir(d)).filter(e=>e.endsWith(".json"))){let n=await S(a.default.join(d,e));if(!n||!r.has(n.pid))continue;let i="";try{let{stdout:e}=await c("ps",["-p",String(n.pid),"-o","args="]);i=e.trim()}catch{try{await t.default.unlink(a.default.join(d,e))}catch{}continue}if(!i.includes("claude")){try{await t.default.unlink(a.default.join(d,e))}catch{}continue}let l=p(n.cwd),s=a.default.join(f,l),u=await v(s,n.sessionId),o=n.sessionId;if(!u){let e=i.match(/--resume\s+([0-9a-f-]{36})/);if(e){let t=e[1],n=await v(s,t);n&&(u=n,o=t)}}return{status:"running",sessionId:o,jsonlPath:u,pid:n.pid,startedAt:n.startedAt,cwd:n.cwd}}}catch{}let u=await g(s);if(u){let e=u.cwd;if(e){let t=p(e),n=a.default.join(f,t),i=await v(n,u.sessionId);return{status:"running",sessionId:u.sessionId,jsonlPath:i,pid:u.pid,startedAt:null,cwd:e}}}return{status:"not-running",sessionId:null,jsonlPath:null,pid:null,startedAt:null,cwd:null}};e.s(["detectActiveSession",0,_,"getChildPids",0,w,"isClaudeRunning",0,A,"toClaudeProjectName",0,p,"watchSessionsDir",0,(e,a,i)=>{let s=null,r=null,u=null,c=null,o=null,f=!1,h=async()=>{let t;!f&&o&&(await (t=o,new Promise(e=>{(0,l.execFile)("ps",["-p",String(t)],t=>{e(!t)})}))||f||(o=null,a(await _(e))))},p=()=>{f||(u&&clearTimeout(u),u=setTimeout(async()=>{if(f)return;let t=await _(e);t.pid&&(o=t.pid),a(t)},200))},m=()=>{if(!f)try{(s=(0,n.watch)(d,p)).on("error",()=>{}),c&&(clearInterval(c),c=null)}catch{c||(c=setInterval(async()=>{if(!f)try{await t.default.access(d),m();let n=await _(e);n.pid&&(o=n.pid),a(n)}catch{}},6e4))}};return m(),r=setInterval(h,1e4),i?.skipInitial||_(e).then(e=>{f||(e.pid&&(o=e.pid),a(e))}),{stop:()=>{f=!0,s&&s.close(),r&&clearInterval(r),u&&clearTimeout(u),c&&clearInterval(c)}}}])},746514,e=>{"use strict";let t;var n=e.i(924868),a=e.i(522734),i=e.i(814747),l=e.i(319668),s=e.i(143511),r=e.i(459015);let u=(0,e.i(25146).createLogger)("session-list"),c=i.default.join(process.env.HOME||process.env.USERPROFILE||"/",".claude","projects"),o=(t=new Map,{get:e=>{let n=t.get(e);if(n)return Date.now()-n.cachedAt>3e4?void t.delete(e):n.meta},set:(e,n,a)=>{t.set(e,{meta:n,mtime:a,cachedAt:Date.now()})},isStale:(e,n)=>{let a=t.get(e);return!a||(Date.now()-a.cachedAt>3e4?(t.delete(e),!0):a.mtime!==n)},clear:()=>{t.clear()}}),d=e=>{let t=(0,s.toClaudeProjectName)(e);return i.default.join(c,t)},f=async(e,t)=>{let n=Array(e.length),a=0,i=async()=>{for(;a<e.length;){let t=a++;try{let a=await e[t]();n[t]={status:"fulfilled",value:a}}catch(e){n[t]={status:"rejected",reason:e}}}},l=Array.from({length:Math.min(t,e.length)},()=>i());return await Promise.all(l),n},h=e=>e.length<=200?e:e.slice(0,200)+"…",p=async e=>{let t=(0,a.createReadStream)(e,{encoding:"utf-8"}),n=l.default.createInterface({input:t,crlfDelay:1/0}),i=null,s="",r=0,u=!0;try{for await(let e of n){if(u&&(u=!1,e.trim()))try{let t=JSON.parse(e);t.timestamp&&(i=new Date(t.timestamp).toISOString())}catch{}if((e.includes('"type":"human"')||e.includes('"type": "human"')||e.includes('"type":"user"')||e.includes('"type": "user"'))&&!e.includes('"isMeta":true')&&!e.includes('"isMeta": true')&&(r++,!s))try{let t=JSON.parse(e);if(("human"===t.type||"user"===t.type)&&!t.isMeta){let e=t.message;if(e)if("string"==typeof e)s=h(e);else if(Array.isArray(e.content)){let t=e.content.find(e=>"text"===e.type&&e.text);t&&(s=h(t.text))}else"string"==typeof e.content&&(s=h(e.content))}}catch{}}}finally{n.close(),t.destroy()}return{startedAt:i,firstMessage:s,turnCount:r}},m=async e=>{try{let t=await n.default.stat(e),a=i.default.basename(e,".jsonl"),l=o.get(a);if(l&&!o.isStale(a,t.mtimeMs))return l;let{startedAt:s,firstMessage:r,turnCount:u}=await p(e),c=s||t.birthtime.toISOString(),d=t.mtime.toISOString(),f={sessionId:a,startedAt:c,lastActivityAt:d,firstMessage:r,turnCount:u};return o.set(a,f,t.mtimeMs),f}catch(t){return u.warn({err:t},`failed to parse session meta: ${e}`),null}},w=async(e,t)=>{let a,l=t||await (0,r.getSessionCwd)(e);if(!l)throw Error("cwd-lookup-failed");let s=d(l);try{a=(await n.default.readdir(s)).filter(e=>e.endsWith(".jsonl"))}catch{return[]}let u=a.map(e=>()=>m(i.default.join(s,e))),c=await f(u,10),o=[];for(let e of c)"fulfilled"===e.status&&e.value&&o.push(e.value);return o.sort((e,t)=>new Date(t.lastActivityAt).getTime()-new Date(e.lastActivityAt).getTime()),o};e.s(["cwdToProjectPath",0,d,"listSessions",0,w],746514)},785128,e=>{"use strict";let t=new Set(["zsh","bash","fish","sh","-zsh","-bash","-fish","-sh"]),n=e=>{if("~"===e||"/"===e)return e;let t=e.replace(/\/$/,"").split("/");return t[t.length-1]||e};e.s(["formatTabTitle",0,e=>{let a=e.trim();if(!a)return"";let i=(e=>{let t=e.trim();if(!t)return null;let n=t.indexOf("|");return n>0?t.slice(0,n):null})(e);if(null!==i){let e=a.slice(a.indexOf("|")+1);return t.has(i)?n(e):i}let l=a.match(/@[^:]+:\s*(.*)/);if(l)return n(l[1].trim());if(a.startsWith("/")||a.startsWith("~"))return n(a);let s=a.split(/\s+/)[0];return t.has(s)?"":s||""}])},175609,(e,t,n)=>{t.exports=e.x("node-pty-592e8dc6192cfd06",()=>require("node-pty-592e8dc6192cfd06"))},971780,e=>{"use strict";var t=e.i(459015);e.i(478319),e.i(220951),e.i(175609),e.i(597789),e.i(965898),new TextEncoder,new TextDecoder,(0,e.i(25146).createLogger)("terminal"),new TextDecoder;let n=globalThis,a=n.__purplemux_terminal_connections??=new Map;n.__purplemux_terminal_output_ts??=new Map;let i=(e,t,n)=>{for(let i of a.values())if(i.sessionName===e&&!i.cleaned)return void i.pty.resize(t,n)},l=e=>new Promise(t=>setTimeout(t,e)),s=async(e,n,s)=>{let r=(e=>{for(let t of a.values())if(t.sessionName===e&&!t.cleaned)return{cols:t.currentCols,rows:t.currentRows};return null})(e);if(r&&r.cols>50)return(0,t.capturePaneContentWithHistory)(e,50);let u=(e=>{for(let t of a.values())if(t.sessionName===e&&!t.cleaned){if(t.capturePaused)return null;return t.capturePaused=!0,{cols:t.currentCols,rows:t.currentRows}}return null})(e);if(!u)return(0,t.capturePaneContent)(e);try{i(e,n,s),await l(300);let a=await (0,t.capturePaneContent)(e);return i(e,u.cols,u.rows),await l(300),a}finally{(e=>{for(let t of a.values())if(t.sessionName===e&&!t.cleaned){if(!t.capturePaused)return;t.capturePaused=!1;return}})(e)}};e.s(["capturePaneAtWidth",0,s],971780)},443571,e=>{"use strict";let t=["Yes","Yes,","No","Accept","Decline","Open System Settings","Try again","Use this","Continue without","Resume from summary","Resume full session","Continue this conversation","Send message as","Don't ask me again"],n=/^\s*(?:[❯›>]\s+)?(.+)$/,a=/^\s*[❯›>]\s+/,i=/^\d+\.\s+/,l=/^\s*([❯›>])?\s*(\d+)\.?\s*(\S.*)$/,s=e=>e.replace(i,""),r=(e,t)=>e.some(e=>s(e).startsWith(t)),u=e=>e.match(/^\s*/)?.[0].length??0,c=/^(Yes,\s*and\s+don[\u2019']?t\s+ask)\s*:\s*(.+)$/,o=e=>!(e.length<2)&&(r(e,"Yes")&&r(e,"No")||r(e,"Accept")&&r(e,"Decline")||r(e,"Open System Settings")||r(e,"Use this")&&r(e,"Continue without")||r(e,"Resume from summary")&&r(e,"Resume full session")||r(e,"Continue this conversation")&&r(e,"Send message as"));e.s(["parsePermissionOptions",0,e=>{let i=e.split("\n"),r=(e=>{let t=[],n=[],a=0,i=1,s=0,r=()=>{n.length>=2&&t.push({rawOptions:n.slice(),focusedIndex:a}),n=[],a=0,i=1,s=0};for(let t of e){if(!t.trim())continue;let e=t.match(l);if(e){let l=e[1],c=Number(e[2]),o=e[3].trim();if(o.length>0){if(1===c){r(),n.push(o),l&&(a=0),s=u(t),i=2;continue}if(c===i){l&&(a=n.length),n.push(o),s=u(t),i+=1;continue}}}if(n.length>0){if(u(t)>s){n[n.length-1]+=t.trimStart();continue}if(/^\s+\S/.test(t))continue;r()}}r();let o=t[t.length-1];return o?{options:o.rawOptions.map((e,t)=>{let n;return`${t+1}. ${(n=e.match(c))?`${n[1]} again for: ${n[2].trim()}`:/^Yes(?![,\s]|$)/.test(e)?"Yes":/^No(?![,\s]|$)/.test(e)?"No":e}`}),focusedIndex:o.focusedIndex}:{options:[],focusedIndex:0}})(i);if(r.options.length>=2&&o(r.options))return r;let d=(e=>{let i=[],l=0,r=!1;for(let u of e){if(!u.trim()){if(r)break;continue}let e=a.test(u),c=/^\s+\S/.test(u);if(!e&&!c){if(r)break;continue}let o=u.match(n);if(!o)continue;let d=o[1].trim(),f=s(d);t.some(e=>f.startsWith(e))&&(e&&(l=i.length),i.push(d),r=!0)}return{options:i,focusedIndex:l}})(i);return o(d.options)?d:{options:[],focusedIndex:0}}])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__01.~37j._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,r)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,r)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,r)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,r)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,r)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,r)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,r=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(r)),e.s(["PRISTINE_ENV",0,r],965898);let s=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),n=["LC_"],i=e=>s.has(e)||n.some(t=>e.startsWith(t)),a={TERM:"xterm-256color",COLORTERM:"truecolor"},o=()=>{let e={};for(let[t,s]of Object.entries(r))void 0!==s&&i(t)&&(e[t]=s);return{...e,...a}},l=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>r.SHELL||"/bin/bash";e.s(["buildShellEnv",0,()=>o(),"buildShellLaunchCommand",0,()=>{let e=Object.entries(o()).map(([e,t])=>`${e}=${l(t)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${e} ${l(u())} -l`},"defaultShell",0,u],597789)},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),s=e.i(446786);let n=r.default.join(s.default.homedir(),".purplemux","logs"),i=process.env.LOG_LEVEL||"info",a=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,s]=r.split("=").map(e=>e.trim());e&&s&&(t[e]=s)}return t})(process.env.LOG_LEVELS),o=["trace","debug","info","warn","error","fatal"],l=globalThis;if(!l.__ptRootLogger){let e=[i,...Object.values(a)].reduce((e,t)=>o.indexOf(t)<o.indexOf(e)?t:e,"fatal");l.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(n,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=l.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=a[e]??i,t}])},44014,e=>{"use strict";let t,r;var s=e.i(666680);e.s(["nanoid",0,function(e=21){var n;n=e|=0,!t||t.length<n?(t=Buffer.allocUnsafe(128*n),s.webcrypto.getRandomValues(t),r=0):r+n>t.length&&(s.webcrypto.getRandomValues(t),r=0),r+=n;let i="";for(let s=r-e;s<r;s++)i+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[s]];return i}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),r=e.i(924868),s=e.i(224361),n=e.i(814747),i=e.i(44014),a=e.i(965898),o=e.i(597789),l=e.i(25146);process.platform;let u="linux"===process.platform;e.s(["isLinux",0,u],544538);let p=(0,l.createLogger)("terminal"),c=(0,s.promisify)(t.execFile),m="purple",d=n.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),f=async()=>{try{let{stdout:e}=await c("tmux",["-L",m,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},h=async(e,t,r,s)=>{let n=(0,o.buildShellLaunchCommand)();await c("tmux",["-u","-L",m,"-f",d,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),n],{timeout:5e3,cwd:s||a.PRISTINE_ENV.HOME||"/"}),await P(),p.debug(`tmux session created: ${e} (cols: ${t}, rows: ${r})`)},w=e=>new Promise(t=>setTimeout(t,e)),y=async e=>{if(!await g(e))return;p.debug(`killSession start: ${e}`);let t=await L(e);if(t)try{p.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await c("tmux",["-L",m,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await g(e))return void p.debug(`killSession done (SIGTERM): ${e}`);await w(200)}if(p.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{p.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await c("tmux",["-L",m,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await g(e))return void p.debug(`killSession done (SIGKILL): ${e}`);await w(200)}p.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await c("tmux",["-L",m,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},x=async()=>{},S=async()=>{await x();let e=await f();e.length>0&&e.forEach(e=>{p.debug(`existing tmux session found: ${e}`)})},_=async e=>{if(u)try{return await r.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await c("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),r=t.split("\n").find(e=>e.startsWith("n/"));return r?r.slice(1):null}catch{return null}},v=async e=>{let t=await L(e);if(t){let e=await _(t);if(e)return e}try{let{stdout:t}=await c("tmux",["-L",m,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},L=async e=>{try{let{stdout:t}=await c("tmux",["-L",m,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),r=parseInt(t.trim(),10);return Number.isNaN(r)?null:r}catch{return null}},P=async()=>{try{await c("tmux",["-L",m,"source-file",d],{timeout:5e3})}catch{}},N=async e=>{try{let{stdout:t}=await c("tmux",["-L",m,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},E=async()=>{try{let{stdout:e}=await c("tmux",["-L",m,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let r of e.trim().split("\n")){if(!r)continue;let[e,s,n,i,a]=r.split(" ");if(e&&s){let r=parseInt(i,10),o=parseInt(a,10);t.set(e,{command:s,path:n||"",pid:Number.isNaN(r)?0:r,windowActivity:Number.isNaN(o)?0:o})}}return t}catch{return new Map}},b=new Set(["bash","zsh","fish","sh","dash"]),I=async e=>{let t=await N(e);return t?{isSafe:b.has(t),processName:t}:{isSafe:!1,processName:"unknown"}},$=async e=>{try{let{stdout:t}=await c("tmux",["-L",m,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},R=async e=>{await c("tmux",["-L",m,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},T=async(e,t)=>{await R(e),await c("tmux",["-L",m,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},M=async(e,t)=>{await R(e),await c("tmux",["-L",m,"send-keys","-t",e,t],{timeout:5e3})},q=async(e,t)=>{await R(e),await c("tmux",["-L",m,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await c("tmux",["-L",m,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await c("tmux",["-L",m,"send-keys","-t",e,"Enter"],{timeout:5e3})},C=async e=>{try{let{stdout:t}=await c("tmux",["-L",m,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[r,s,n,i,a,o]=t.trim().split(" ");return{cwd:r||null,command:s||null,pid:n&&parseInt(n,10)||null,width:i&&parseInt(i,10)||null,height:a&&parseInt(a,10)||null,sessionCreated:o&&parseInt(o,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},k=new Set(["node","python","python3","ruby","perl","deno","bun"]),A=async()=>{try{await c("tmux",["-L",m,"kill-server"],{timeout:5e3}),p.debug("tmux server killed")}catch{}},O=async e=>{try{let{stdout:t}=await c("tmux",["-L",m,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},j=async(e,t)=>{try{let{stdout:r}=await c("tmux",["-L",m,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return r}catch{return null}},D=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let s of(await r.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(s,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await c("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},U=async e=>{let t=[],r=[e];for(;r.length>0;){let e=await D(r);if(0===e.length)break;t.push(...e),r=e}return t},H=async e=>{try{let t=new Set(e),{stdout:r}=await c("ss",["-tlnp"],{timeout:5e3}),s=new Set;for(let e of r.split("\n")){let r=e.match(/pid=(\d+)/g);if(!r||!r.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let n=e.match(/:(\d+)\s/);n&&s.add(parseInt(n[1],10))}return[...s].sort((e,t)=>e-t)}catch{return[]}},G=async e=>{let t=await U(e);if(0===t.length)return[];if(u)return H(t);try{let{stdout:e}=await c("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),r=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&r.add(parseInt(e[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},W=async e=>{let t=await L(e);if(!t)return null;try{let{stdout:e}=await c("pgrep",["-n","-P",String(t)],{timeout:5e3}),r=e.trim();if(!r)return null;let{stdout:s}=await c("ps",["-o","args=","-p",r],{timeout:5e3}),i=s.trim();if(!i)return null;let a=i.split(/\s+/);if(0===a.length)return i;if(a[0]=n.default.basename(a[0]),k.has(a[0])&&a.length>1){let e=n.default.basename(a[1]).replace(/\.(c|m)?js$/,"");a.splice(0,2,e)}return a.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,b,"applyConfig",0,P,"capturePaneContent",0,O,"capturePaneContentWithHistory",0,j,"checkTerminalProcess",0,I,"createSession",0,h,"defaultSessionName",0,()=>`pt-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}`,"exitCopyMode",0,R,"getAllPanesInfo",0,E,"getLastCommand",0,W,"getListeningPorts",0,G,"getPaneCurrentCommand",0,N,"getPaneDetailInfo",0,C,"getPaneTitle",0,$,"getSessionCwd",0,v,"getSessionPanePid",0,L,"hasSession",0,g,"killServer",0,A,"killSession",0,y,"listSessions",0,f,"scanSessions",0,S,"sendBracketedPaste",0,q,"sendKeys",0,T,"sendRawKeys",0,M,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},175609,(e,t,r)=>{t.exports=e.x("node-pty-592e8dc6192cfd06",()=>require("node-pty-592e8dc6192cfd06"))},971780,e=>{"use strict";var t=e.i(459015);e.i(478319),e.i(220951),e.i(175609),e.i(597789),e.i(965898),new TextEncoder,new TextDecoder,(0,e.i(25146).createLogger)("terminal"),new TextDecoder;let r=globalThis,s=r.__purplemux_terminal_connections??=new Map;r.__purplemux_terminal_output_ts??=new Map;let n=(e,t,r)=>{for(let n of s.values())if(n.sessionName===e&&!n.cleaned)return void n.pty.resize(t,r)},i=e=>new Promise(t=>setTimeout(t,e)),a=async(e,r,a)=>{let o=(e=>{for(let t of s.values())if(t.sessionName===e&&!t.cleaned)return{cols:t.currentCols,rows:t.currentRows};return null})(e);if(o&&o.cols>50)return(0,t.capturePaneContentWithHistory)(e,50);let l=(e=>{for(let t of s.values())if(t.sessionName===e&&!t.cleaned){if(t.capturePaused)return null;return t.capturePaused=!0,{cols:t.currentCols,rows:t.currentRows}}return null})(e);if(!l)return(0,t.capturePaneContent)(e);try{n(e,r,a),await i(300);let s=await (0,t.capturePaneContent)(e);return n(e,l.cols,l.rows),await i(300),s}finally{(e=>{for(let t of s.values())if(t.sessionName===e&&!t.cleaned){if(!t.capturePaused)return;t.capturePaused=!1;return}})(e)}};e.s(["capturePaneAtWidth",0,a],971780)},443571,e=>{"use strict";let t=["Yes","Yes,","No","Accept","Decline","Open System Settings","Try again","Use this","Continue without","Resume from summary","Resume full session","Continue this conversation","Send message as","Don't ask me again"],r=/^\s*(?:[❯›>]\s+)?(.+)$/,s=/^\s*[❯›>]\s+/,n=/^\d+\.\s+/,i=/^\s*([❯›>])?\s*(\d+)\.?\s*(\S.*)$/,a=e=>e.replace(n,""),o=(e,t)=>e.some(e=>a(e).startsWith(t)),l=e=>e.match(/^\s*/)?.[0].length??0,u=/^(Yes,\s*and\s+don[\u2019']?t\s+ask)\s*:\s*(.+)$/,p=e=>!(e.length<2)&&(o(e,"Yes")&&o(e,"No")||o(e,"Accept")&&o(e,"Decline")||o(e,"Open System Settings")||o(e,"Use this")&&o(e,"Continue without")||o(e,"Resume from summary")&&o(e,"Resume full session")||o(e,"Continue this conversation")&&o(e,"Send message as"));e.s(["parsePermissionOptions",0,e=>{let n=e.split("\n"),o=(e=>{let t=[],r=[],s=0,n=1,a=0,o=()=>{r.length>=2&&t.push({rawOptions:r.slice(),focusedIndex:s}),r=[],s=0,n=1,a=0};for(let t of e){if(!t.trim())continue;let e=t.match(i);if(e){let i=e[1],u=Number(e[2]),p=e[3].trim();if(p.length>0){if(1===u){o(),r.push(p),i&&(s=0),a=l(t),n=2;continue}if(u===n){i&&(s=r.length),r.push(p),a=l(t),n+=1;continue}}}if(r.length>0){if(l(t)>a){r[r.length-1]+=t.trimStart();continue}if(/^\s+\S/.test(t))continue;o()}}o();let p=t[t.length-1];return p?{options:p.rawOptions.map((e,t)=>{let r;return`${t+1}. ${(r=e.match(u))?`${r[1]} again for: ${r[2].trim()}`:/^Yes(?![,\s]|$)/.test(e)?"Yes":/^No(?![,\s]|$)/.test(e)?"No":e}`}),focusedIndex:p.focusedIndex}:{options:[],focusedIndex:0}})(n);if(o.options.length>=2&&p(o.options))return o;let c=(e=>{let n=[],i=0,o=!1;for(let l of e){if(!l.trim()){if(o)break;continue}let e=s.test(l),u=/^\s+\S/.test(l);if(!e&&!u){if(o)break;continue}let p=l.match(r);if(!p)continue;let c=p[1].trim(),m=a(c);t.some(e=>m.startsWith(e))&&(e&&(i=n.length),n.push(c),o=!0)}return{options:n,focusedIndex:i}})(n);return p(c.options)?c:{options:[],focusedIndex:0}}])},454549,e=>{"use strict";var t=e.i(926747),r=e.i(190406),s=e.i(244898),n=e.i(262950),i=e.i(459015),a=e.i(971780),o=e.i(25146),l=e.i(443571);let u=(0,o.createLogger)("tmux"),p=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let r=e.query.session;if(!r)return t.status(400).json({error:"session parameter required"});if(!await (0,i.hasSession)(r))return t.status(404).json({error:"Session not found"});try{let e=await (0,a.capturePaneAtWidth)(r,120,50);if(!e)return t.status(200).json({options:[]});let{options:s}=(0,l.parsePermissionOptions)(e),n=e.includes("Bypass Permissions");return t.status(200).json({options:s,...n&&{isBypassPrompt:!0}})}catch(e){return u.error(`permission-options query failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Terminal capture failed"})}};e.s(["default",0,p],96110);var c=e.i(96110),m=e.i(7031),d=e.i(181927),f=e.i(846432);let h=(0,n.hoist)(c,"default"),w=(0,n.hoist)(c,"config"),y=new s.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/tmux/permission-options",pathname:"/api/tmux/permission-options",bundlePath:"",filename:""},userland:c,distDir:".next",relativeProjectDir:""});async function g(e,r,s){s.requestMeta&&(0,f.setRequestMeta)(e,s.requestMeta),y.isDev&&(0,f.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let n="/api/tmux/permission-options";n=n.replace(/\/index$/,"")||"/";let i=await y.prepare(e,r,{srcPage:n});if(!i){r.statusCode=400,r.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve());return}let{query:a,params:o,prerenderManifest:l,routerServerContext:u}=i;try{let t,s=e.method||"GET",i=(0,m.getTracer)(),p=i.getActiveScopeSpan(),c=!!(null==u?void 0:u.isWrappedByNextServer),f=y.instrumentationOnRequestError.bind(y),h=async p=>y.render(e,r,{query:{...a,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:l.preview,propagateError:!1,dev:y.isDev,page:"/api/tmux/permission-options",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>f(e,...t)}).finally(()=>{if(!p)return;p.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=i.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=e.get("next.route");if(a){let e=`${s} ${a}`;p.setAttributes({"next.route":a,"http.route":a,"next.span_name":e}),p.updateName(e),t&&t!==p&&(t.setAttribute("http.route",a),t.updateName(e))}else p.updateName(`${s} ${n}`)});c&&p?await h(p):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(d.BaseServerSpan.handleRequest,{spanName:`${s} ${n}`,kind:m.SpanKind.SERVER,attributes:{"http.method":s,"http.target":e.url}},h),void 0,!c))}catch(e){if(y.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==s.waitUntil||s.waitUntil.call(s,Promise.resolve())}}e.s(["config",0,w,"default",0,h,"handler",0,g],454549)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__016s4a9._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,r=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(r)),e.s(["PRISTINE_ENV",0,r],965898);let i=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),a=["LC_"],n=e=>i.has(e)||a.some(t=>e.startsWith(t)),l={TERM:"xterm-256color",COLORTERM:"truecolor"},s=()=>{let e={};for(let[t,i]of Object.entries(r))void 0!==i&&n(t)&&(e[t]=i);return{...e,...l}},o=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>r.SHELL||"/bin/bash";e.s(["buildShellEnv",0,()=>s(),"buildShellLaunchCommand",0,()=>{let e=Object.entries(s()).map(([e,t])=>`${e}=${o(t)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${e} ${o(u())} -l`},"defaultShell",0,u],597789)},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),i=e.i(446786);let a=r.default.join(i.default.homedir(),".purplemux","logs"),n=process.env.LOG_LEVEL||"info",l=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,i]=r.split("=").map(e=>e.trim());e&&i&&(t[e]=i)}return t})(process.env.LOG_LEVELS),s=["trace","debug","info","warn","error","fatal"],o=globalThis;if(!o.__ptRootLogger){let e=[n,...Object.values(l)].reduce((e,t)=>s.indexOf(t)<s.indexOf(e)?t:e,"fatal");o.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(a,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=o.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=l[e]??n,t}])},688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,r)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,r)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,r)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,r)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,r)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,r)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let r=globalThis;r.__ptSyncClients||(r.__ptSyncClients=new Set);let i=r.__ptSyncClients;e.s(["broadcastSync",0,e=>{let r=JSON.stringify(e);for(let e of i)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(r)}])},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},713915,e=>{"use strict";var t=e.i(233405),r=e.i(924868),i=e.i(446786),a=e.i(814747),n=e.i(224361),l=e.i(597789),s=e.i(965898);let o=(0,n.promisify)(t.execFile),u=null,d=null,c=async()=>{let e=i.default.userInfo().shell||(0,l.defaultShell)();try{let{stdout:t}=await o(e,["-ilc",'echo -n "$PATH"'],{timeout:5e3,env:{...(0,l.buildShellEnv)(),SHELL:e,DISABLE_AUTO_UPDATE:"true",ZSH_TMUX_AUTOSTARTED:"true"}});return t.toString().trim()}catch{return s.PRISTINE_ENV.PATH||""}},p=async()=>u||(d||(d=c().then(e=>(u=e,d=null,e))),d),f=async(e,t,r)=>{try{let i=await p(),{stdout:a}=await o(e,t,{timeout:5e3,env:{...process.env,PATH:i}});return{installed:!0,version:r(a)}}catch{return{installed:!1,version:null}}},h=e=>e.trim().match(/(\d+\.\d+[\d.]*)/)?.[1]??null,g=[a.default.join(i.default.homedir(),".local","bin")],m=async()=>{for(let e of g)try{return await (0,r.access)(a.default.join(e,"claude")),e}catch{}return null},y=e=>e.installed&&null!==e.version&&parseFloat(e.version)>=2.9,S=async()=>{u=await c();let[e,t,n]=await Promise.all([f("tmux",["-V"],h),f("git",["--version"],h),f("claude",["--version"],h)]),l=(y(e)&&t.installed&&n.installed,n.installed?null:await m()),s=!1;if(n.installed||l)try{await (0,r.access)(a.default.join(i.default.homedir(),".claude")),s=!0}catch{}return{tmux:{...e,compatible:y(e)},git:t,claude:{...n,binaryPath:l,loggedIn:s}}},x=null,v=null,_=null,w=null,E=async()=>_&&Date.now()-_.checkedAt<1e3?_.result:w||(w=S().then(e=>(_={result:e,checkedAt:Date.now()},w=null,e)).catch(e=>{throw w=null,e})),T=async()=>{u=await c();let[e,t,r]=await Promise.all([f("tmux",["-V"],h),f("git",["--version"],h),f("claude",["--version"],h)]);return{tmux:{...e,compatible:y(e)},git:t,claude:r}},P=async()=>x&&Date.now()-x.checkedAt<3e4?x.result:v||(v=T().then(e=>(x={result:e,checkedAt:Date.now()},v=null,e)).catch(e=>{throw v=null,e}));e.s(["getCachedPreflightStatus",0,E,"getCachedRuntimePreflight",0,P,"getShellPath",0,p,"invalidateRuntimeCache",0,()=>{x=null,v=null}])},871911,e=>{"use strict";var t=e.i(254799),r=e.i(522734),i=e.i(814747),a=e.i(446786);let n=i.default.join(a.default.homedir(),".purplemux","cli-token"),l=globalThis;e.s(["verifyCliToken",0,e=>{let a=e.headers["x-pmux-token"];var s="string"==typeof a?a:void 0;if(!s)return!1;let o=(()=>{if(l.__ptCliToken)return l.__ptCliToken;let e=(()=>{try{return r.default.readFileSync(n,"utf-8").trim()||null}catch{return null}})();if(e)return l.__ptCliToken=e,e;let a=(0,t.randomBytes)(32).toString("hex");l.__ptCliToken=a;try{r.default.mkdirSync(i.default.dirname(n),{recursive:!0}),r.default.writeFileSync(n,a,{mode:384})}catch{}return a})();return s.length===o.length&&(0,t.timingSafeEqual)(Buffer.from(s),Buffer.from(o))}])},845994,e=>{"use strict";var t=e.i(924868),r=e.i(814747),i=e.i(446786),a=e.i(254799),n=e.i(666126);(0,e.i(25146).createLogger)("config");let l=r.default.join(i.default.homedir(),".purplemux"),s=r.default.join(l,"config.json"),o=globalThis;o.__ptConfigLock||(o.__ptConfigLock=Promise.resolve());let u=async e=>{let t,r=new Promise(e=>{t=e}),i=o.__ptConfigLock;o.__ptConfigLock=r,await i;try{return await e()}finally{t()}},d=()=>({updatedAt:new Date().toISOString()}),c=async()=>{try{let e=await t.default.readFile(s,"utf-8");return JSON.parse(e)}catch{return null}},p=async e=>{let{updatedAt:r,...i}=e,a=JSON.stringify(i);if(o.__ptConfigContentCache===a)return;e.updatedAt=new Date().toISOString();let l=s+".tmp";try{await t.default.writeFile(l,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(l,s)}catch(e){throw await t.default.unlink(l).catch(()=>{}),e}o.__ptConfigContentCache=a,(0,n.broadcastSync)({type:"config"})},f="scrypt:",h=e=>"string"==typeof e&&e.startsWith(f),g=async e=>{let t=a.default.randomBytes(16),r=await new Promise((r,i)=>{a.default.scrypt(e,t,64,(e,t)=>{e?i(e):r(t)})});return`${f}${t.toString("hex")}:${r.toString("hex")}`},m=async(e,t)=>{if(!h(t))return!1;let[,r,i]=t.split(":"),n=Buffer.from(r,"hex"),l=Buffer.from(i,"hex"),s=await new Promise((t,r)=>{a.default.scrypt(e,n,l.length,(e,i)=>{e?r(e):t(i)})});return a.default.timingSafeEqual(s,l)},y=async()=>await c()??d(),S=async e=>u(async()=>{let t=await c()??d();Object.assign(t,e),await p(t)}),x=async()=>{let e=await c();return!h(e?.authPassword)},v=async()=>{let e=await c();return e?.dangerouslySkipPermissions??!1};e.s(["generateSecret",0,()=>a.default.randomBytes(32).toString("hex"),"getConfig",0,y,"getDangerouslySkipPermissions",0,v,"hashPassword",0,g,"needsSetup",0,x,"updateConfig",0,S,"verifyPassword",0,m])},284345,e=>{"use strict";var t=e.i(926747),r=e.i(190406),i=e.i(244898),a=e.i(262950),n=e.i(713915),l=e.i(845994),s=e.i(772601),o=e.i(871911);let u=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});if(!await (0,l.needsSetup)()&&!((0,o.verifyCliToken)(e)||await (0,s.verifyRequestSession)(e.headers.cookie)))return t.status(401).json({error:"Unauthorized"});let r=await (0,n.getCachedPreflightStatus)();return t.status(200).json(r)};e.s(["default",0,u],16083);var d=e.i(16083),c=e.i(7031),p=e.i(181927),f=e.i(846432);let h=(0,a.hoist)(d,"default"),g=(0,a.hoist)(d,"config"),m=new i.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/auth/preflight",pathname:"/api/auth/preflight",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function y(e,r,i){i.requestMeta&&(0,f.setRequestMeta)(e,i.requestMeta),m.isDev&&(0,f.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let a="/api/auth/preflight";a=a.replace(/\/index$/,"")||"/";let n=await m.prepare(e,r,{srcPage:a});if(!n){r.statusCode=400,r.end("Bad Request"),null==i.waitUntil||i.waitUntil.call(i,Promise.resolve());return}let{query:l,params:s,prerenderManifest:o,routerServerContext:u}=n;try{let t,i=e.method||"GET",n=(0,c.getTracer)(),d=n.getActiveScopeSpan(),f=!!(null==u?void 0:u.isWrappedByNextServer),h=m.instrumentationOnRequestError.bind(m),g=async d=>m.render(e,r,{query:{...l,...s},params:s,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:m.isDev,page:"/api/auth/preflight",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>h(e,...t)}).finally(()=>{if(!d)return;d.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=n.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let l=e.get("next.route");if(l){let e=`${i} ${l}`;d.setAttributes({"next.route":l,"http.route":l,"next.span_name":e}),d.updateName(e),t&&t!==d&&(t.setAttribute("http.route",l),t.updateName(e))}else d.updateName(`${i} ${a}`)});f&&d?await g(d):(t=n.getActiveScopeSpan(),await n.withPropagatedContext(e.headers,()=>n.trace(p.BaseServerSpan.handleRequest,{spanName:`${i} ${a}`,kind:c.SpanKind.SERVER,attributes:{"http.method":i,"http.target":e.url}},g),void 0,!f))}catch(e){if(m.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==i.waitUntil||i.waitUntil.call(i,Promise.resolve())}}e.s(["config",0,g,"default",0,h,"handler",0,y],284345)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__02.9a5j._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,r)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,r)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,r)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,r)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,r)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,r)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,r=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(r)),e.s(["PRISTINE_ENV",0,r],965898);let a=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),s=["LC_"],n=e=>a.has(e)||s.some(t=>e.startsWith(t)),i={TERM:"xterm-256color",COLORTERM:"truecolor"},l=()=>{let e={};for(let[t,a]of Object.entries(r))void 0!==a&&n(t)&&(e[t]=a);return{...e,...i}},o=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>r.SHELL||"/bin/bash";e.s(["buildShellEnv",0,()=>l(),"buildShellLaunchCommand",0,()=>{let e=Object.entries(l()).map(([e,t])=>`${e}=${o(t)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${e} ${o(u())} -l`},"defaultShell",0,u],597789)},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),a=e.i(446786);let s=r.default.join(a.default.homedir(),".purplemux","logs"),n=process.env.LOG_LEVEL||"info",i=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,a]=r.split("=").map(e=>e.trim());e&&a&&(t[e]=a)}return t})(process.env.LOG_LEVELS),l=["trace","debug","info","warn","error","fatal"],o=globalThis;if(!o.__ptRootLogger){let e=[n,...Object.values(i)].reduce((e,t)=>l.indexOf(t)<l.indexOf(e)?t:e,"fatal");o.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(s,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=o.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=i[e]??n,t}])},44014,e=>{"use strict";let t,r;var a=e.i(666680);e.s(["nanoid",0,function(e=21){var s;s=e|=0,!t||t.length<s?(t=Buffer.allocUnsafe(128*s),a.webcrypto.getRandomValues(t),r=0):r+s>t.length&&(a.webcrypto.getRandomValues(t),r=0),r+=s;let n="";for(let a=r-e;a<r;a++)n+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[a]];return n}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),r=e.i(924868),a=e.i(224361),s=e.i(814747),n=e.i(44014),i=e.i(965898),l=e.i(597789),o=e.i(25146);process.platform;let u="linux"===process.platform;e.s(["isLinux",0,u],544538);let p=(0,o.createLogger)("terminal"),c=(0,a.promisify)(t.execFile),d="purple",m=s.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),f=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},h=async(e,t,r,a)=>{let s=(0,l.buildShellLaunchCommand)();await c("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),s],{timeout:5e3,cwd:a||i.PRISTINE_ENV.HOME||"/"}),await P(),p.debug(`tmux session created: ${e} (cols: ${t}, rows: ${r})`)},w=e=>new Promise(t=>setTimeout(t,e)),y=async e=>{if(!await x(e))return;p.debug(`killSession start: ${e}`);let t=await L(e);if(t)try{p.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await x(e))return void p.debug(`killSession done (SIGTERM): ${e}`);await w(200)}if(p.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{p.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await x(e))return void p.debug(`killSession done (SIGKILL): ${e}`);await w(200)}p.warn(`tmux session still alive after kill: ${e}`)},x=async e=>{try{return await c("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},g=async()=>{},S=async()=>{await g();let e=await f();e.length>0&&e.forEach(e=>{p.debug(`existing tmux session found: ${e}`)})},_=async e=>{if(u)try{return await r.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await c("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),r=t.split("\n").find(e=>e.startsWith("n/"));return r?r.slice(1):null}catch{return null}},v=async e=>{let t=await L(e);if(t){let e=await _(t);if(e)return e}try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},L=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),r=parseInt(t.trim(),10);return Number.isNaN(r)?null:r}catch{return null}},P=async()=>{try{await c("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},E=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},N=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let r of e.trim().split("\n")){if(!r)continue;let[e,a,s,n,i]=r.split(" ");if(e&&a){let r=parseInt(n,10),l=parseInt(i,10);t.set(e,{command:a,path:s||"",pid:Number.isNaN(r)?0:r,windowActivity:Number.isNaN(l)?0:l})}}return t}catch{return new Map}},b=new Set(["bash","zsh","fish","sh","dash"]),I=async e=>{let t=await E(e);return t?{isSafe:b.has(t),processName:t}:{isSafe:!1,processName:"unknown"}},T=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},R=async e=>{await c("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},$=async(e,t)=>{await R(e),await c("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},M=async(e,t)=>{await R(e),await c("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},q=async(e,t)=>{await R(e),await c("tmux",["-L",d,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3})},k=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[r,a,s,n,i,l]=t.trim().split(" ");return{cwd:r||null,command:a||null,pid:s&&parseInt(s,10)||null,width:n&&parseInt(n,10)||null,height:i&&parseInt(i,10)||null,sessionCreated:l&&parseInt(l,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},C=new Set(["node","python","python3","ruby","perl","deno","bun"]),A=async()=>{try{await c("tmux",["-L",d,"kill-server"],{timeout:5e3}),p.debug("tmux server killed")}catch{}},j=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},O=async(e,t)=>{try{let{stdout:r}=await c("tmux",["-L",d,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return r}catch{return null}},D=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let a of(await r.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(a,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await c("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},H=async e=>{let t=[],r=[e];for(;r.length>0;){let e=await D(r);if(0===e.length)break;t.push(...e),r=e}return t},U=async e=>{try{let t=new Set(e),{stdout:r}=await c("ss",["-tlnp"],{timeout:5e3}),a=new Set;for(let e of r.split("\n")){let r=e.match(/pid=(\d+)/g);if(!r||!r.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let s=e.match(/:(\d+)\s/);s&&a.add(parseInt(s[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},G=async e=>{let t=await H(e);if(0===t.length)return[];if(u)return U(t);try{let{stdout:e}=await c("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),r=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&r.add(parseInt(e[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},W=async e=>{let t=await L(e);if(!t)return null;try{let{stdout:e}=await c("pgrep",["-n","-P",String(t)],{timeout:5e3}),r=e.trim();if(!r)return null;let{stdout:a}=await c("ps",["-o","args=","-p",r],{timeout:5e3}),n=a.trim();if(!n)return null;let i=n.split(/\s+/);if(0===i.length)return n;if(i[0]=s.default.basename(i[0]),C.has(i[0])&&i.length>1){let e=s.default.basename(i[1]).replace(/\.(c|m)?js$/,"");i.splice(0,2,e)}return i.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,b,"applyConfig",0,P,"capturePaneContent",0,j,"capturePaneContentWithHistory",0,O,"checkTerminalProcess",0,I,"createSession",0,h,"defaultSessionName",0,()=>`pt-${(0,n.nanoid)(6)}-${(0,n.nanoid)(6)}-${(0,n.nanoid)(6)}`,"exitCopyMode",0,R,"getAllPanesInfo",0,N,"getLastCommand",0,W,"getListeningPorts",0,G,"getPaneCurrentCommand",0,E,"getPaneDetailInfo",0,k,"getPaneTitle",0,T,"getSessionCwd",0,v,"getSessionPanePid",0,L,"hasSession",0,x,"killServer",0,A,"killSession",0,y,"listSessions",0,f,"scanSessions",0,S,"sendBracketedPaste",0,q,"sendKeys",0,$,"sendRawKeys",0,M,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},175609,(e,t,r)=>{t.exports=e.x("node-pty-592e8dc6192cfd06",()=>require("node-pty-592e8dc6192cfd06"))},971780,e=>{"use strict";var t=e.i(459015);e.i(478319),e.i(220951),e.i(175609),e.i(597789),e.i(965898),new TextEncoder,new TextDecoder,(0,e.i(25146).createLogger)("terminal"),new TextDecoder;let r=globalThis,a=r.__purplemux_terminal_connections??=new Map;r.__purplemux_terminal_output_ts??=new Map;let s=(e,t,r)=>{for(let s of a.values())if(s.sessionName===e&&!s.cleaned)return void s.pty.resize(t,r)},n=e=>new Promise(t=>setTimeout(t,e)),i=async(e,r,i)=>{let l=(e=>{for(let t of a.values())if(t.sessionName===e&&!t.cleaned)return{cols:t.currentCols,rows:t.currentRows};return null})(e);if(l&&l.cols>50)return(0,t.capturePaneContentWithHistory)(e,50);let o=(e=>{for(let t of a.values())if(t.sessionName===e&&!t.cleaned){if(t.capturePaused)return null;return t.capturePaused=!0,{cols:t.currentCols,rows:t.currentRows}}return null})(e);if(!o)return(0,t.capturePaneContent)(e);try{s(e,r,i),await n(300);let a=await (0,t.capturePaneContent)(e);return s(e,o.cols,o.rows),await n(300),a}finally{(e=>{for(let t of a.values())if(t.sessionName===e&&!t.cleaned){if(!t.capturePaused)return;t.capturePaused=!1;return}})(e)}};e.s(["capturePaneAtWidth",0,i],971780)},8372,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),s=e.i(262950),n=e.i(459015),i=e.i(971780);let l=(0,e.i(25146).createLogger)("tmux"),o=/^\s*(?:[❯›>]\s+)?(?:\d+\.\s+)?(.+)$/,u=["Yes,","Yes ","No,","No ","Tell Claude"],p=e=>/^\s+\S/.test(e)||/^\s*[❯›>]/.test(e),c=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let r=e.query.session;if(!r)return t.status(400).json({error:"session parameter required"});if(!await (0,n.hasSession)(r))return t.status(404).json({error:"Session not found"});try{let e=await (0,i.capturePaneAtWidth)(r,120,50);if(!e)return t.status(200).json({options:[]});let a=(e=>{let t=e.split("\n"),r=[],a=!1;for(let e of t){if(!e.trim()||!p(e)){if(a)break;continue}let t=e.match(o);if(!t)continue;let s=t[1].trim();if(a)if(u.some(e=>s.startsWith(e)))r.push(s);else break;else u.some(e=>s.startsWith(e))&&(r.push(s),a=!0)}return r})(e);return t.status(200).json({options:a})}catch(e){return l.error(`plan-options query failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Terminal capture failed"})}};e.s(["default",0,c],875757);var d=e.i(875757),m=e.i(7031),f=e.i(181927),h=e.i(846432);let w=(0,s.hoist)(d,"default"),y=(0,s.hoist)(d,"config"),x=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/tmux/plan-options",pathname:"/api/tmux/plan-options",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function g(e,r,a){a.requestMeta&&(0,h.setRequestMeta)(e,a.requestMeta),x.isDev&&(0,h.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/tmux/plan-options";s=s.replace(/\/index$/,"")||"/";let n=await x.prepare(e,r,{srcPage:s});if(!n){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:i,params:l,prerenderManifest:o,routerServerContext:u}=n;try{let t,a=e.method||"GET",n=(0,m.getTracer)(),p=n.getActiveScopeSpan(),c=!!(null==u?void 0:u.isWrappedByNextServer),d=x.instrumentationOnRequestError.bind(x),h=async p=>x.render(e,r,{query:{...i,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:x.isDev,page:"/api/tmux/plan-options",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>d(e,...t)}).finally(()=>{if(!p)return;p.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=n.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==f.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let i=e.get("next.route");if(i){let e=`${a} ${i}`;p.setAttributes({"next.route":i,"http.route":i,"next.span_name":e}),p.updateName(e),t&&t!==p&&(t.setAttribute("http.route",i),t.updateName(e))}else p.updateName(`${a} ${s}`)});c&&p?await h(p):(t=n.getActiveScopeSpan(),await n.withPropagatedContext(e.headers,()=>n.trace(f.BaseServerSpan.handleRequest,{spanName:`${a} ${s}`,kind:m.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},h),void 0,!c))}catch(e){if(x.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,y,"default",0,w,"handler",0,g],8372)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__03l15.f._.js.map
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
module.exports=[270406,(e,t,a)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,a)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,a)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,a)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,a)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},224361,(e,t,a)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,a)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,a)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,a=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(a)),e.s(["PRISTINE_ENV",0,a],965898);let r=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),i=["LC_"],s=e=>r.has(e)||i.some(t=>e.startsWith(t)),n={TERM:"xterm-256color",COLORTERM:"truecolor"},o=()=>{let e={};for(let[t,r]of Object.entries(a))void 0!==r&&s(t)&&(e[t]=r);return{...e,...n}},l=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>a.SHELL||"/bin/bash";e.s(["buildShellEnv",0,()=>o(),"buildShellLaunchCommand",0,()=>{let e=Object.entries(o()).map(([e,t])=>`${e}=${l(t)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${e} ${l(u())} -l`},"defaultShell",0,u],597789)},25146,e=>{"use strict";var t=e.i(130146),a=e.i(814747),r=e.i(446786);let i=a.default.join(r.default.homedir(),".purplemux","logs"),s=process.env.LOG_LEVEL||"info",n=(e=>{if(!e)return{};let t={};for(let a of e.split(",")){let[e,r]=a.split("=").map(e=>e.trim());e&&r&&(t[e]=r)}return t})(process.env.LOG_LEVELS),o=["trace","debug","info","warn","error","fatal"],l=globalThis;if(!l.__ptRootLogger){let e=[s,...Object.values(n)].reduce((e,t)=>o.indexOf(t)<o.indexOf(e)?t:e,"fatal");l.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:a.default.join(i,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=l.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=n[e]??s,t}])},44014,e=>{"use strict";let t,a;var r=e.i(666680);e.s(["nanoid",0,function(e=21){var i;i=e|=0,!t||t.length<i?(t=Buffer.allocUnsafe(128*i),r.webcrypto.getRandomValues(t),a=0):a+i>t.length&&(r.webcrypto.getRandomValues(t),a=0),a+=i;let s="";for(let r=a-e;r<a;r++)s+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[r]];return s}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),a=e.i(924868),r=e.i(224361),i=e.i(814747),s=e.i(44014),n=e.i(965898),o=e.i(597789),l=e.i(25146);process.platform;let u="linux"===process.platform;e.s(["isLinux",0,u],544538);let c=(0,l.createLogger)("terminal"),p=(0,r.promisify)(t.execFile),d="purple",m=i.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),w=async()=>{try{let{stdout:e}=await p("tmux",["-L",d,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},f=async(e,t,a,r)=>{let i=(0,o.buildShellLaunchCommand)();await p("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(a),i],{timeout:5e3,cwd:r||n.PRISTINE_ENV.HOME||"/"}),await I(),c.debug(`tmux session created: ${e} (cols: ${t}, rows: ${a})`)},y=e=>new Promise(t=>setTimeout(t,e)),h=async e=>{if(!await g(e))return;c.debug(`killSession start: ${e}`);let t=await L(e);if(t)try{c.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await p("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await g(e))return void c.debug(`killSession done (SIGTERM): ${e}`);await y(200)}if(c.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{c.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await p("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await g(e))return void c.debug(`killSession done (SIGKILL): ${e}`);await y(200)}c.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await p("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},k=async()=>{},x=async()=>{await k();let e=await w();e.length>0&&e.forEach(e=>{c.debug(`existing tmux session found: ${e}`)})},b=async e=>{if(u)try{return await a.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await p("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),a=t.split("\n").find(e=>e.startsWith("n/"));return a?a.slice(1):null}catch{return null}},S=async e=>{let t=await L(e);if(t){let e=await b(t);if(e)return e}try{let{stdout:t}=await p("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},L=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),a=parseInt(t.trim(),10);return Number.isNaN(a)?null:a}catch{return null}},I=async()=>{try{await p("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},_=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},v=async()=>{try{let{stdout:e}=await p("tmux",["-L",d,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let a of e.trim().split("\n")){if(!a)continue;let[e,r,i,s,n]=a.split(" ");if(e&&r){let a=parseInt(s,10),o=parseInt(n,10);t.set(e,{command:r,path:i||"",pid:Number.isNaN(a)?0:a,windowActivity:Number.isNaN(o)?0:o})}}return t}catch{return new Map}},$=new Set(["bash","zsh","fish","sh","dash"]),N=async e=>{let t=await _(e);return t?{isSafe:$.has(t),processName:t}:{isSafe:!1,processName:"unknown"}},P=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},T=async e=>{await p("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},W=async(e,t)=>{await T(e),await p("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},E=async(e,t)=>{await T(e),await p("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},C=async(e,t)=>{await T(e),await p("tmux",["-L",d,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await p("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await p("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3})},A=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[a,r,i,s,n,o]=t.trim().split(" ");return{cwd:a||null,command:r||null,pid:i&&parseInt(i,10)||null,width:s&&parseInt(s,10)||null,height:n&&parseInt(n,10)||null,sessionCreated:o&&parseInt(o,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},O=new Set(["node","python","python3","ruby","perl","deno","bun"]),D=async()=>{try{await p("tmux",["-L",d,"kill-server"],{timeout:5e3}),c.debug("tmux server killed")}catch{}},F=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},M=async(e,t)=>{try{let{stdout:a}=await p("tmux",["-L",d,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return a}catch{return null}},j=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let r of(await a.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(r,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await p("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},R=async e=>{let t=[],a=[e];for(;a.length>0;){let e=await j(a);if(0===e.length)break;t.push(...e),a=e}return t},G=async e=>{try{let t=new Set(e),{stdout:a}=await p("ss",["-tlnp"],{timeout:5e3}),r=new Set;for(let e of a.split("\n")){let a=e.match(/pid=(\d+)/g);if(!a||!a.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let i=e.match(/:(\d+)\s/);i&&r.add(parseInt(i[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},q=async e=>{let t=await R(e);if(0===t.length)return[];if(u)return G(t);try{let{stdout:e}=await p("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),a=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&a.add(parseInt(e[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},H=async e=>{let t=await L(e);if(!t)return null;try{let{stdout:e}=await p("pgrep",["-n","-P",String(t)],{timeout:5e3}),a=e.trim();if(!a)return null;let{stdout:r}=await p("ps",["-o","args=","-p",a],{timeout:5e3}),s=r.trim();if(!s)return null;let n=s.split(/\s+/);if(0===n.length)return s;if(n[0]=i.default.basename(n[0]),O.has(n[0])&&n.length>1){let e=i.default.basename(n[1]).replace(/\.(c|m)?js$/,"");n.splice(0,2,e)}return n.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,$,"applyConfig",0,I,"capturePaneContent",0,F,"capturePaneContentWithHistory",0,M,"checkTerminalProcess",0,N,"createSession",0,f,"defaultSessionName",0,()=>`pt-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}`,"exitCopyMode",0,T,"getAllPanesInfo",0,v,"getLastCommand",0,H,"getListeningPorts",0,q,"getPaneCurrentCommand",0,_,"getPaneDetailInfo",0,A,"getPaneTitle",0,P,"getSessionCwd",0,S,"getSessionPanePid",0,L,"hasSession",0,g,"killServer",0,D,"killSession",0,h,"listSessions",0,w,"scanSessions",0,x,"sendBracketedPaste",0,C,"sendKeys",0,W,"sendRawKeys",0,E,"workspaceSessionName",0,(e,t,a)=>`pt-${e}-${t}-${a}`],459015)},688947,(e,t,a)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,a)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,a)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,a)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,a)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,a)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,a)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,a)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,a)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,a)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let a=globalThis;a.__ptSyncClients||(a.__ptSyncClients=new Set);let r=a.__ptSyncClients;e.s(["broadcastSync",0,e=>{let a=JSON.stringify(e);for(let e of r)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(a)}])},322429,160874,e=>{"use strict";var t=e.i(924868),a=e.i(814747),r=e.i(446786),i=e.i(44014),s=e.i(459015),n=e.i(25146),o=e.i(666126),l=e.i(825265),u=e.i(804767);(0,n.createLogger)("claude-prompt");let c=e=>a.default.join((0,l.resolveLayoutDir)(e),"claude-prompt.md"),p=async e=>{let r=c(e.id);await t.default.mkdir(a.default.dirname(r),{recursive:!0});let i=`# purplemux context
|
|
2
|
-
|
|
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 t.default.readFile(r,"utf-8")===i)return r}catch{}return await t.default.writeFile(r,i,"utf-8"),r};e.s(["getClaudePromptPath",0,c,"writeClaudePromptFile",0,p],160874);let d=(0,n.createLogger)("workspace"),m="Workspace ",w=a.default.join(r.default.homedir(),".purplemux"),f=a.default.join(w,"workspaces.json"),y=a.default.join(w,"layout.json"),h=a.default.join(w,"tabs.json"),g=globalThis;g.__purplemuxWorkspaceLock||(g.__purplemuxWorkspaceLock=Promise.resolve());let k=async e=>{let t,a=new Promise(e=>{t=e}),r=g.__purplemuxWorkspaceLock;g.__purplemuxWorkspaceLock=a,await r;try{return await e()}finally{t()}},x=()=>({workspaces:[],groups:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()}),b=e=>(e.groups||(e.groups=[]),e.groups),S=async()=>{let e;try{e=await t.default.readFile(f,"utf-8")}catch{return null}try{let t=JSON.parse(e);for(let e of t.workspaces)!e.directories&&e.directory&&(e.directories=[e.directory],delete e.directory),delete e.order;for(let e of(Array.isArray(t.groups)||(t.groups=[]),t.groups))delete e.order;let a=new Set(t.groups.map(e=>e.id));for(let e of t.workspaces)e.groupId&&!a.has(e.groupId)&&(e.groupId=null);return t}catch{d.warn("Failed to parse workspaces.json, starting empty");try{await t.default.copyFile(f,f.replace(/\.json$/,".json.bak"))}catch{}return null}},L=async e=>{let a;a=b(e),e.workspaces=((e,t)=>{let a=new Set(t.map(e=>e.id)),r=new Map,i=[];for(let t of e){let e=t.groupId??null;if(e&&a.has(e)){let a=r.get(e)??[];a.push(t),r.set(e,a)}else i.push(t)}let s=[];for(let e of t){let t=r.get(e.id);t&&s.push(...t)}return s.push(...i),s})(e.workspaces,a);let{workspaces:r,groups:i,activeWorkspaceId:s,sidebarCollapsed:n,sidebarWidth:l}=e,u=JSON.stringify({workspaces:r,groups:i??[],activeWorkspaceId:s,sidebarCollapsed:n,sidebarWidth:l});if(g.__purplemuxWorkspacesContentCache===u)return;e.updatedAt=new Date().toISOString();let c=f+".tmp";try{await t.default.writeFile(c,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(c,f)}catch(e){throw await t.default.unlink(c).catch(()=>{}),e}g.__purplemuxWorkspacesContentCache=u,(0,o.broadcastSync)({type:"workspace"})},I=async()=>{let e=await (0,l.readLayoutFile)(y);if(!e)return null;let a="ws-default";await t.default.mkdir((0,l.resolveLayoutDir)(a),{recursive:!0}),await (0,l.writeLayoutFile)(e,(0,l.resolveLayoutFile)(a));let i={workspaces:[{id:a,name:"default",directories:[r.default.homedir()]}],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:e.updatedAt||new Date().toISOString()};return await L(i),d.info("Phase 4 layout.json → Workspace 'default' migration complete"),i},_=async()=>{try{let e=await t.default.readFile(h,"utf-8"),a=JSON.parse(e);if(!Array.isArray(a.tabs)||0===a.tabs.length)return null;let r=`pane-${(0,i.nanoid)(6)}`,s={root:{type:"pane",id:r,tabs:a.tabs,activeTabId:a.activeTabId??null},activePaneId:r,updatedAt:new Date().toISOString()},n=y+".tmp";try{await t.default.writeFile(n,JSON.stringify(s,null,2),{mode:384}),await t.default.rename(n,y)}catch(e){throw await t.default.unlink(n).catch(()=>{}),e}return d.info("tabs.json → layout.json migration complete"),await I()}catch{return null}},v=async()=>{await t.default.mkdir(a.default.join(w,"workspaces"),{recursive:!0});let e=await S();if(!e&&(await t.default.access(y).then(()=>!0).catch(()=>!1)?e=await I():await t.default.access(h).then(()=>!0).catch(()=>!1)&&(e=await _())),!e){let t=x();await L(t),e=t,d.info("Initial workspaces.json created")}if(0===e.workspaces.length)return;let r=await (0,s.listSessions)();for(let t of e.workspaces){let e=(0,l.resolveLayoutFile)(t.id),a=await (0,l.readLayoutFile)(e);if(!a){d.warn(`Workspace '${t.name}': layout.json corrupted, reset to default pane`),a=await (0,l.createDefaultLayout)(t.id,t.directories[0]),await (0,l.writeLayoutFile)(a,e);continue}let i=(0,u.collectAllTabs)(a.root).map(e=>e.sessionName),s=`pt-${t.id}-`,n=r.filter(e=>i.includes(e)||e.startsWith(s));try{await (0,l.crossCheckLayout)(a,n,t.id,t.directories[0])&&await (0,l.writeLayoutFile)(a,e)}catch(e){d.error(`Workspace '${t.name}': tmux consistency check failed: ${e instanceof Error?e.message:e}`)}}},$=async()=>{let e=await S();return e?{workspaces:e.workspaces,groups:e.groups??[],activeWorkspaceId:e.activeWorkspaceId,sidebarCollapsed:e.sidebarCollapsed,sidebarWidth:e.sidebarWidth}:{workspaces:[],groups:[],sidebarCollapsed:!1,sidebarWidth:220}},N=async()=>{let e=await S();return e?.activeWorkspaceId&&e.workspaces.some(t=>t.id===e.activeWorkspaceId)?e.activeWorkspaceId:e?.workspaces[0]?.id??null},P=async e=>{let t=await S();return t?.workspaces.find(t=>t.id===e)},T=async(e,a,r)=>k(async()=>{let s;try{s=await t.default.stat(e)}catch{throw Error("Directory does not exist")}if(!s.isDirectory())throw Error("Please enter a directory path, not a file");let n=await S()??x(),o=`ws-${(0,i.nanoid)(6)}`,u=a?.trim()||(e=>{let t=0;for(let a of e)if(a.name.startsWith(m)){let e=parseInt(a.name.slice(m.length),10);e>t&&(t=e)}return`${m}${t+1}`})(n.workspaces),c=await (0,l.createDefaultLayout)(o,e,r);await t.default.mkdir((0,l.resolveLayoutDir)(o),{recursive:!0}),await (0,l.writeLayoutFile)(c,(0,l.resolveLayoutFile)(o));let w={id:o,name:u,directories:[e]};return n.workspaces.push(w),await L(n),await p(w),d.debug(`Created: ${o} (${u}, ${e})`),w}),W=async e=>k(async()=>{let t=await S()??x(),a=t.workspaces.findIndex(t=>t.id===e);if(-1===a)return!1;let r=t.workspaces[a],i=await (0,l.readLayoutFile)((0,l.resolveLayoutFile)(e));if(i)for(let e of(0,u.collectAllTabs)(i.root))try{await (0,s.killSession)(e.sessionName)}catch{}try{await (0,l.removeLayoutFile)(e)}catch{}return t.workspaces.splice(a,1),await L(t),d.info(`Deleted: ${e} (${r.name})`),!0}),E=async(e,t)=>k(async()=>{let a=await S();if(!a)return null;let r=a.workspaces.find(t=>t.id===e);return r?(r.name=t,await L(a),await p(r),d.debug(`Renamed: ${e} → "${t}"`),{...r}):null}),C=async e=>k(async()=>{let t=await S()??x();void 0!==e.activeWorkspaceId&&(t.activeWorkspaceId=e.activeWorkspaceId),void 0!==e.sidebarCollapsed&&(t.sidebarCollapsed=e.sidebarCollapsed),void 0!==e.sidebarWidth&&(t.sidebarWidth=e.sidebarWidth),await L(t)}),A=async(e,t)=>k(async()=>{let a=await S();if(!a)return;let r=a.workspaces.find(t=>t.id===e);r&&JSON.stringify(r.directories)!==JSON.stringify(t)&&(r.directories=t,await L(a),await p(r))}),O=async e=>k(async()=>{let t=await S()??x(),a=new Map(t.workspaces.map(e=>[e.id,e])),r=new Set((t.groups??[]).map(e=>e.id)),i=[];for(let t of e){let e=a.get(t.id);if(!e)return!1;void 0!==t.groupId&&(e.groupId=t.groupId&&r.has(t.groupId)?t.groupId:null),i.push(e)}return i.length===t.workspaces.length&&(t.workspaces=i,await L(t),!0)}),D=async e=>k(async()=>{let t=await S()??x(),a=b(t),r=e.trim()||`Group ${a.length+1}`,s={id:`grp-${(0,i.nanoid)(6)}`,name:r,collapsed:!1};return a.push(s),await L(t),d.debug(`Group created: ${s.id} (${s.name})`),s}),F=async(e,t)=>k(async()=>{let a=await S();if(!a)return null;let r=(a.groups??[]).find(t=>t.id===e);if(!r)return null;let i=t.trim();return i?(r.name=i,await L(a),{...r}):r}),M=async(e,t)=>k(async()=>{let a=await S();if(!a)return!1;let r=(a.groups??[]).find(t=>t.id===e);return!!r&&(r.collapsed===t||(r.collapsed=t,await L(a),!0))}),j=async e=>k(async()=>{let t=await S();if(!t)return!1;let a=b(t),r=a.findIndex(t=>t.id===e);if(-1===r)return!1;for(let a of t.workspaces)a.groupId===e&&(a.groupId=null);return a.splice(r,1),await L(t),d.info(`Group ungrouped: ${e}`),!0}),R=async e=>k(async()=>{let t=await S();if(!t)return!1;let a=b(t),r=new Map(a.map(e=>[e.id,e])),i=[];for(let t of e){let e=r.get(t);if(!e)return!1;i.push(e)}return i.length===a.length&&(t.groups=i,await L(t),!0)}),G=async(e,t)=>k(async()=>{let a=await S();if(!a)return!1;let r=a.workspaces.find(t=>t.id===e);if(!r)return!1;let i=new Set((a.groups??[]).map(e=>e.id)),s=t&&i.has(t)?t:null;return(r.groupId??null)===s||(r.groupId=s,await L(a),!0)}),q=async e=>{try{if(!(await t.default.stat(e)).isDirectory())return{valid:!1,error:"Please enter a directory path, not a file"}}catch{return{valid:!1,error:"Directory does not exist"}}return{valid:!0,suggestedName:a.default.basename(e)}};e.s(["createGroup",0,D,"createWorkspace",0,T,"deleteWorkspace",0,W,"getActiveWorkspaceId",0,N,"getWorkspaceById",0,P,"getWorkspaces",0,$,"initWorkspaceStore",0,v,"renameGroup",0,F,"renameWorkspace",0,E,"reorderGroups",0,R,"reorderWorkspaces",0,O,"setGroupCollapsed",0,M,"setWorkspaceGroup",0,G,"ungroupGroup",0,j,"updateActive",0,C,"updateWorkspaceDirectories",0,A,"validateDirectory",0,q],322429)}];
|
|
41
|
-
|
|
42
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__05ij_ys._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),a=e.i(446786);let s=r.default.join(a.default.homedir(),".purplemux","logs"),i=process.env.LOG_LEVEL||"info",n=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,a]=r.split("=").map(e=>e.trim());e&&a&&(t[e]=a)}return t})(process.env.LOG_LEVELS),l=["trace","debug","info","warn","error","fatal"],o=globalThis;if(!o.__ptRootLogger){let e=[i,...Object.values(n)].reduce((e,t)=>l.indexOf(t)<l.indexOf(e)?t:e,"fatal");o.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(s,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=o.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=n[e]??i,t}])},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,r=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(r)),e.s(["PRISTINE_ENV",0,r],965898);let a=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),s=["LC_"],i=e=>a.has(e)||s.some(t=>e.startsWith(t)),n={TERM:"xterm-256color",COLORTERM:"truecolor"},l=()=>{let e={};for(let[t,a]of Object.entries(r))void 0!==a&&i(t)&&(e[t]=a);return{...e,...n}},o=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>r.SHELL||"/bin/bash";e.s(["buildShellEnv",0,()=>l(),"buildShellLaunchCommand",0,()=>{let e=Object.entries(l()).map(([e,t])=>`${e}=${o(t)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${e} ${o(u())} -l`},"defaultShell",0,u],597789)},44014,e=>{"use strict";let t,r;var a=e.i(666680);e.s(["nanoid",0,function(e=21){var s;s=e|=0,!t||t.length<s?(t=Buffer.allocUnsafe(128*s),a.webcrypto.getRandomValues(t),r=0):r+s>t.length&&(a.webcrypto.getRandomValues(t),r=0),r+=s;let i="";for(let a=r-e;a<r;a++)i+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[a]];return i}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),r=e.i(924868),a=e.i(224361),s=e.i(814747),i=e.i(44014),n=e.i(965898),l=e.i(597789),o=e.i(25146);process.platform;let u="linux"===process.platform;e.s(["isLinux",0,u],544538);let c=(0,o.createLogger)("terminal"),p=(0,a.promisify)(t.execFile),d="purple",m=s.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),y=async()=>{try{let{stdout:e}=await p("tmux",["-L",d,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},h=async(e,t,r,a)=>{let s=(0,l.buildShellLaunchCommand)();await p("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),s],{timeout:5e3,cwd:a||n.PRISTINE_ENV.HOME||"/"}),await E(),c.debug(`tmux session created: ${e} (cols: ${t}, rows: ${r})`)},f=e=>new Promise(t=>setTimeout(t,e)),w=async e=>{if(!await g(e))return;c.debug(`killSession start: ${e}`);let t=await v(e);if(t)try{c.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await p("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await g(e))return void c.debug(`killSession done (SIGTERM): ${e}`);await f(200)}if(c.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{c.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await p("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await g(e))return void c.debug(`killSession done (SIGKILL): ${e}`);await f(200)}c.warn(`tmux session still alive after kill: ${e}`)},g=async e=>{try{return await p("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},_=async()=>{},x=async()=>{await _();let e=await y();e.length>0&&e.forEach(e=>{c.debug(`existing tmux session found: ${e}`)})},S=async e=>{if(u)try{return await r.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await p("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),r=t.split("\n").find(e=>e.startsWith("n/"));return r?r.slice(1):null}catch{return null}},L=async e=>{let t=await v(e);if(t){let e=await S(t);if(e)return e}try{let{stdout:t}=await p("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},v=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),r=parseInt(t.trim(),10);return Number.isNaN(r)?null:r}catch{return null}},E=async()=>{try{await p("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},b=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},P=async()=>{try{let{stdout:e}=await p("tmux",["-L",d,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let r of e.trim().split("\n")){if(!r)continue;let[e,a,s,i,n]=r.split(" ");if(e&&a){let r=parseInt(i,10),l=parseInt(n,10);t.set(e,{command:a,path:s||"",pid:Number.isNaN(r)?0:r,windowActivity:Number.isNaN(l)?0:l})}}return t}catch{return new Map}},I=new Set(["bash","zsh","fish","sh","dash"]),N=async e=>{let t=await b(e);return t?{isSafe:I.has(t),processName:t}:{isSafe:!1,processName:"unknown"}},T=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},M=async e=>{await p("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},R=async(e,t)=>{await M(e),await p("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},$=async(e,t)=>{await M(e),await p("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},k=async(e,t)=>{await M(e),await p("tmux",["-L",d,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await p("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await p("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3})},q=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[r,a,s,i,n,l]=t.trim().split(" ");return{cwd:r||null,command:a||null,pid:s&&parseInt(s,10)||null,width:i&&parseInt(i,10)||null,height:n&&parseInt(n,10)||null,sessionCreated:l&&parseInt(l,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},j=new Set(["node","python","python3","ruby","perl","deno","bun"]),A=async()=>{try{await p("tmux",["-L",d,"kill-server"],{timeout:5e3}),c.debug("tmux server killed")}catch{}},O=async e=>{try{let{stdout:t}=await p("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},C=async(e,t)=>{try{let{stdout:r}=await p("tmux",["-L",d,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return r}catch{return null}},H=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let a of(await r.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(a,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await p("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},D=async e=>{let t=[],r=[e];for(;r.length>0;){let e=await H(r);if(0===e.length)break;t.push(...e),r=e}return t},U=async e=>{try{let t=new Set(e),{stdout:r}=await p("ss",["-tlnp"],{timeout:5e3}),a=new Set;for(let e of r.split("\n")){let r=e.match(/pid=(\d+)/g);if(!r||!r.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let s=e.match(/:(\d+)\s/);s&&a.add(parseInt(s[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},G=async e=>{let t=await D(e);if(0===t.length)return[];if(u)return U(t);try{let{stdout:e}=await p("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),r=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&r.add(parseInt(e[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},F=async e=>{let t=await v(e);if(!t)return null;try{let{stdout:e}=await p("pgrep",["-n","-P",String(t)],{timeout:5e3}),r=e.trim();if(!r)return null;let{stdout:a}=await p("ps",["-o","args=","-p",r],{timeout:5e3}),i=a.trim();if(!i)return null;let n=i.split(/\s+/);if(0===n.length)return i;if(n[0]=s.default.basename(n[0]),j.has(n[0])&&n.length>1){let e=s.default.basename(n[1]).replace(/\.(c|m)?js$/,"");n.splice(0,2,e)}return n.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,I,"applyConfig",0,E,"capturePaneContent",0,O,"capturePaneContentWithHistory",0,C,"checkTerminalProcess",0,N,"createSession",0,h,"defaultSessionName",0,()=>`pt-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}-${(0,i.nanoid)(6)}`,"exitCopyMode",0,M,"getAllPanesInfo",0,P,"getLastCommand",0,F,"getListeningPorts",0,G,"getPaneCurrentCommand",0,b,"getPaneDetailInfo",0,q,"getPaneTitle",0,T,"getSessionCwd",0,L,"getSessionPanePid",0,v,"hasSession",0,g,"killServer",0,A,"killSession",0,w,"listSessions",0,y,"scanSessions",0,x,"sendBracketedPaste",0,k,"sendKeys",0,R,"sendRawKeys",0,$,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,r)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,r)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,r)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,r)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,r)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,r)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let r=globalThis;r.__ptSyncClients||(r.__ptSyncClients=new Set);let a=r.__ptSyncClients;e.s(["broadcastSync",0,e=>{let r=JSON.stringify(e);for(let e of a)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(r)}])},902067,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),s=e.i(262950),i=e.i(924868),n=e.i(814747),l=e.i(44014),o=e.i(825265),u=e.i(25146);let c=(0,u.createLogger)("message-history"),p=globalThis;p.__ptMessageHistoryLocks||(p.__ptMessageHistoryLocks=new Map);let d=async(e,t)=>{let r,a=new Promise(e=>{r=e}),s=p.__ptMessageHistoryLocks.get(e)??Promise.resolve();p.__ptMessageHistoryLocks.set(e,a),await s;try{return await t()}finally{r(),p.__ptMessageHistoryLocks.get(e)===a&&p.__ptMessageHistoryLocks.delete(e)}},m=e=>n.default.join((0,o.resolveLayoutDir)(e),"message-history.json"),y=async e=>{try{let t=await i.default.readFile(e,"utf-8"),r=JSON.parse(t);return Array.isArray(r.entries)?r.entries:[]}catch(e){return"ENOENT"!==e.code&&c.warn({err:e},"failed to read"),[]}},h=async(e,t)=>{let r=n.default.dirname(e);await i.default.mkdir(r,{recursive:!0});let a=e+".tmp";try{await i.default.writeFile(a,JSON.stringify(t,null,2),{mode:384}),await i.default.rename(a,e)}catch(e){throw await i.default.unlink(a).catch(()=>{}),e}},f=async e=>y(m(e)),w=async(e,t)=>d(e,async()=>{let r=m(e),a=await y(r),s=a.findIndex(e=>e.message===t);-1!==s&&a.splice(s,1);let i={id:(0,l.nanoid)(),message:t,sentAt:new Date().toISOString()};return a.unshift(i),a.length>500&&(a.length=500),await h(r,{entries:a}),i}),g=async(e,t)=>d(e,async()=>{let r=m(e),a=(await y(r)).filter(e=>e.id!==t);return await h(r,{entries:a}),!0}),_=(0,u.createLogger)("message-history"),x=async(e,t)=>{if("GET"===e.method){let r=e.query.wsId;if(!r)return t.status(400).json({error:"wsId is required"});let a=await f(r);return t.status(200).json({entries:a})}if("POST"===e.method){let{wsId:r,message:a}=e.body;if(!r)return t.status(400).json({error:"wsId is required"});if(!a?.trim())return t.status(400).json({error:"message is required"});try{let e=await w(r,a);return t.status(201).json({entry:e})}catch(e){return _.error({err:e},"write failed"),t.status(500).json({error:"Failed to save"})}}if("DELETE"===e.method){let{wsId:r,id:a}=e.body;if(!r)return t.status(400).json({error:"wsId is required"});if(!a)return t.status(400).json({error:"id is required"});try{let e=await g(r,a);return t.status(200).json({success:e})}catch(e){return _.error({err:e},"delete failed"),t.status(500).json({error:"Failed to save"})}}return t.setHeader("Allow","GET, POST, DELETE"),t.status(405).json({error:"Method not allowed"})};e.s(["default",0,x],217026);var S=e.i(217026),L=e.i(7031),v=e.i(181927),E=e.i(846432);let b=(0,s.hoist)(S,"default"),P=(0,s.hoist)(S,"config"),I=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/message-history",pathname:"/api/message-history",bundlePath:"",filename:""},userland:S,distDir:".next",relativeProjectDir:""});async function N(e,r,a){a.requestMeta&&(0,E.setRequestMeta)(e,a.requestMeta),I.isDev&&(0,E.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/message-history";s=s.replace(/\/index$/,"")||"/";let i=await I.prepare(e,r,{srcPage:s});if(!i){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:n,params:l,prerenderManifest:o,routerServerContext:u}=i;try{let t,a=e.method||"GET",i=(0,L.getTracer)(),c=i.getActiveScopeSpan(),p=!!(null==u?void 0:u.isWrappedByNextServer),d=I.instrumentationOnRequestError.bind(I),m=async c=>I.render(e,r,{query:{...n,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:I.isDev,page:"/api/message-history",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>d(e,...t)}).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=i.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==v.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=e.get("next.route");if(n){let e=`${a} ${n}`;c.setAttributes({"next.route":n,"http.route":n,"next.span_name":e}),c.updateName(e),t&&t!==c&&(t.setAttribute("http.route",n),t.updateName(e))}else c.updateName(`${a} ${s}`)});p&&c?await m(c):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(v.BaseServerSpan.handleRequest,{spanName:`${a} ${s}`,kind:L.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},m),void 0,!p))}catch(e){if(I.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,P,"default",0,b,"handler",0,N],902067)},981532,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_workspace-store_ts_0vqt073._.js"].map(t=>e.l(t))).then(()=>t(322429)))},322522,e=>{e.v(e=>Promise.resolve().then(()=>e(459015)))},245061,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_tab-title_ts_0onatvs._.js"].map(t=>e.l(t))).then(()=>t(785128)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__06h3gzy._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},871911,e=>{"use strict";var t=e.i(254799),r=e.i(522734),a=e.i(814747),i=e.i(446786);let n=a.default.join(i.default.homedir(),".purplemux","cli-token"),s=globalThis;e.s(["verifyCliToken",0,e=>{let i=e.headers["x-pmux-token"];var o="string"==typeof i?i:void 0;if(!o)return!1;let l=(()=>{if(s.__ptCliToken)return s.__ptCliToken;let e=(()=>{try{return r.default.readFileSync(n,"utf-8").trim()||null}catch{return null}})();if(e)return s.__ptCliToken=e,e;let i=(0,t.randomBytes)(32).toString("hex");s.__ptCliToken=i;try{r.default.mkdirSync(a.default.dirname(n),{recursive:!0}),r.default.writeFileSync(n,i,{mode:384})}catch{}return i})();return o.length===l.length&&(0,t.timingSafeEqual)(Buffer.from(o),Buffer.from(l))}])},200523,e=>{"use strict";var t=e.i(825265),r=e.i(804767),a=e.i(322429);let i=async(e,i)=>{if(!await (0,a.getWorkspaceById)(e))return null;let n=await (0,t.getLayout)(e);for(let t of(0,r.collectPanes)(n.root)){let r=t.tabs.find(e=>e.id===i);if(r)return{workspaceId:e,paneId:t.id,tab:r}}return null},n=async e=>{let a=await (0,t.getLayout)(e);return(0,r.getFirstPaneId)(a.root)||null};e.s(["findTab",0,i,"resolveFirstPaneId",0,n])},780653,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),i=e.i(262950),n=e.i(871911),s=e.i(825265),o=e.i(804767),l=e.i(322429),u=e.i(200523);let d=(0,e.i(25146).createLogger)("api:cli:tabs"),p=["terminal","claude-code","web-browser","diff"],c=async(e,t)=>{if(!(0,n.verifyCliToken)(e))return t.status(403).json({error:"Forbidden"});if("GET"===e.method){let r="string"==typeof e.query.workspaceId?e.query.workspaceId:void 0,a=[];for(let e of r?[r]:(await (0,l.getWorkspaces)()).workspaces.map(e=>e.id)){if(!await (0,l.getWorkspaceById)(e))continue;let t=await (0,s.getLayout)(e);for(let r of(0,o.collectPanes)(t.root))for(let t of r.tabs)a.push({tabId:t.id,workspaceId:e,name:t.name,sessionName:t.sessionName,panelType:t.panelType})}return t.status(200).json({tabs:a})}if("POST"===e.method){let{workspaceId:r,name:a,panelType:i}=e.body;if(!r)return t.status(400).json({error:"workspaceId is required"});let n=await (0,l.getWorkspaceById)(r);if(!n)return t.status(404).json({error:"Workspace not found"});let o=await (0,u.resolveFirstPaneId)(r);if(!o)return t.status(500).json({error:"No pane available in workspace"});let c=p.includes(i)?i:"terminal";try{let e=await (0,s.addTabToPane)(r,o,a,n.directories[0],c);if(!e)return t.status(500).json({error:"Failed to create tab"});return t.status(201).json({tabId:e.id,workspaceId:r,paneId:o,sessionName:e.sessionName,name:e.name})}catch(r){let e=r instanceof Error?r.message:"unknown error";return d.error(`create tab failed: ${e}`),t.status(500).json({error:e})}}return t.setHeader("Allow","GET, POST"),t.status(405).json({error:"Method not allowed"})};e.s(["default",0,c],902516);var f=e.i(902516),m=e.i(7031),v=e.i(181927),h=e.i(846432);let g=(0,i.hoist)(f,"default"),y=(0,i.hoist)(f,"config"),w=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/cli/tabs/index",pathname:"/api/cli/tabs",bundlePath:"",filename:""},userland:f,distDir:".next",relativeProjectDir:""});async function b(e,r,a){a.requestMeta&&(0,h.setRequestMeta)(e,a.requestMeta),w.isDev&&(0,h.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/cli/tabs/index";i=i.replace(/\/index$/,"")||"/";let n=await w.prepare(e,r,{srcPage:i});if(!n){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:s,params:o,prerenderManifest:l,routerServerContext:u}=n;try{let t,a=e.method||"GET",n=(0,m.getTracer)(),d=n.getActiveScopeSpan(),p=!!(null==u?void 0:u.isWrappedByNextServer),c=w.instrumentationOnRequestError.bind(w),f=async d=>w.render(e,r,{query:{...s,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:l.preview,propagateError:!1,dev:w.isDev,page:"/api/cli/tabs/index",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>c(e,...t)}).finally(()=>{if(!d)return;d.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=n.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==v.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=e.get("next.route");if(s){let e=`${a} ${s}`;d.setAttributes({"next.route":s,"http.route":s,"next.span_name":e}),d.updateName(e),t&&t!==d&&(t.setAttribute("http.route",s),t.updateName(e))}else d.updateName(`${a} ${i}`)});p&&d?await f(d):(t=n.getActiveScopeSpan(),await n.withPropagatedContext(e.headers,()=>n.trace(v.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:m.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},f),void 0,!p))}catch(e){if(w.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,y,"default",0,g,"handler",0,b],780653)},981532,e=>{e.v(e=>Promise.resolve().then(()=>e(322429)))},322522,e=>{e.v(e=>Promise.resolve().then(()=>e(459015)))},245061,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_tab-title_ts_0onatvs._.js"].map(t=>e.l(t))).then(()=>t(785128)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0_fu3k.._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},871911,e=>{"use strict";var t=e.i(254799),r=e.i(522734),a=e.i(814747),i=e.i(446786);let n=a.default.join(i.default.homedir(),".purplemux","cli-token"),s=globalThis;e.s(["verifyCliToken",0,e=>{let i=e.headers["x-pmux-token"];var l="string"==typeof i?i:void 0;if(!l)return!1;let o=(()=>{if(s.__ptCliToken)return s.__ptCliToken;let e=(()=>{try{return r.default.readFileSync(n,"utf-8").trim()||null}catch{return null}})();if(e)return s.__ptCliToken=e,e;let i=(0,t.randomBytes)(32).toString("hex");s.__ptCliToken=i;try{r.default.mkdirSync(a.default.dirname(n),{recursive:!0}),r.default.writeFileSync(n,i,{mode:384})}catch{}return i})();return l.length===o.length&&(0,t.timingSafeEqual)(Buffer.from(l),Buffer.from(o))}])},200523,e=>{"use strict";var t=e.i(825265),r=e.i(804767),a=e.i(322429);let i=async(e,i)=>{if(!await (0,a.getWorkspaceById)(e))return null;let n=await (0,t.getLayout)(e);for(let t of(0,r.collectPanes)(n.root)){let r=t.tabs.find(e=>e.id===i);if(r)return{workspaceId:e,paneId:t.id,tab:r}}return null},n=async e=>{let a=await (0,t.getLayout)(e);return(0,r.getFirstPaneId)(a.root)||null};e.s(["findTab",0,i,"resolveFirstPaneId",0,n])},928818,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),i=e.i(262950),n=e.i(871911),s=e.i(200523),l=e.i(459015);let o=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});if(!(0,n.verifyCliToken)(e))return t.status(403).json({error:"Forbidden"});let r=e.query.tabId,a="string"==typeof e.query.workspaceId?e.query.workspaceId:void 0;if(!a)return t.status(400).json({error:"workspaceId is required"});let i=await (0,s.findTab)(a,r);if(!i)return t.status(404).json({error:"Tab not found"});if(!await (0,l.hasSession)(i.tab.sessionName))return t.status(200).json({tabId:r,workspaceId:a,alive:!1});let o=await (0,l.getPaneCurrentCommand)(i.tab.sessionName);return t.status(200).json({tabId:r,workspaceId:a,alive:!0,command:o,cliState:i.tab.cliState??null,claudeSessionId:i.tab.claudeSessionId??null})};e.s(["default",0,o],968326);var u=e.i(968326),d=e.i(7031),p=e.i(181927),c=e.i(846432);let f=(0,i.hoist)(u,"default"),v=(0,i.hoist)(u,"config"),h=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/cli/tabs/[tabId]/status",pathname:"/api/cli/tabs/[tabId]/status",bundlePath:"",filename:""},userland:u,distDir:".next",relativeProjectDir:""});async function m(e,r,a){a.requestMeta&&(0,c.setRequestMeta)(e,a.requestMeta),h.isDev&&(0,c.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/cli/tabs/[tabId]/status";i=i.replace(/\/index$/,"")||"/";let n=await h.prepare(e,r,{srcPage:i});if(!n){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:s,params:l,prerenderManifest:o,routerServerContext:u}=n;try{let t,a=e.method||"GET",n=(0,d.getTracer)(),c=n.getActiveScopeSpan(),f=!!(null==u?void 0:u.isWrappedByNextServer),v=h.instrumentationOnRequestError.bind(h),m=async d=>h.render(e,r,{query:{...s,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:h.isDev,page:"/api/cli/tabs/[tabId]/status",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>v(e,...t)}).finally(()=>{if(!d)return;d.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=n.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=e.get("next.route");if(s){let e=`${a} ${s}`;d.setAttributes({"next.route":s,"http.route":s,"next.span_name":e}),d.updateName(e),t&&t!==d&&(t.setAttribute("http.route",s),t.updateName(e))}else d.updateName(`${a} ${i}`)});f&&c?await m(c):(t=n.getActiveScopeSpan(),await n.withPropagatedContext(e.headers,()=>n.trace(p.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:d.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},m),void 0,!f))}catch(e){if(h.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,v,"default",0,f,"handler",0,m],928818)},981532,e=>{e.v(e=>Promise.resolve().then(()=>e(322429)))},322522,e=>{e.v(e=>Promise.resolve().then(()=>e(459015)))},245061,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_tab-title_ts_0onatvs._.js"].map(t=>e.l(t))).then(()=>t(785128)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0_imm_0._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},871911,e=>{"use strict";var t=e.i(254799),r=e.i(522734),a=e.i(814747),i=e.i(446786);let n=a.default.join(i.default.homedir(),".purplemux","cli-token"),s=globalThis;e.s(["verifyCliToken",0,e=>{let i=e.headers["x-pmux-token"];var o="string"==typeof i?i:void 0;if(!o)return!1;let l=(()=>{if(s.__ptCliToken)return s.__ptCliToken;let e=(()=>{try{return r.default.readFileSync(n,"utf-8").trim()||null}catch{return null}})();if(e)return s.__ptCliToken=e,e;let i=(0,t.randomBytes)(32).toString("hex");s.__ptCliToken=i;try{r.default.mkdirSync(a.default.dirname(n),{recursive:!0}),r.default.writeFileSync(n,i,{mode:384})}catch{}return i})();return o.length===l.length&&(0,t.timingSafeEqual)(Buffer.from(o),Buffer.from(l))}])},200523,e=>{"use strict";var t=e.i(825265),r=e.i(804767),a=e.i(322429);let i=async(e,i)=>{if(!await (0,a.getWorkspaceById)(e))return null;let n=await (0,t.getLayout)(e);for(let t of(0,r.collectPanes)(n.root)){let r=t.tabs.find(e=>e.id===i);if(r)return{workspaceId:e,paneId:t.id,tab:r}}return null},n=async e=>{let a=await (0,t.getLayout)(e);return(0,r.getFirstPaneId)(a.root)||null};e.s(["findTab",0,i,"resolveFirstPaneId",0,n])},500208,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),i=e.i(262950),n=e.i(871911),s=e.i(200523),o=e.i(825265);let l=async(e,t)=>{if(!(0,n.verifyCliToken)(e))return t.status(403).json({error:"Forbidden"});let r=e.query.tabId,a="string"==typeof e.query.workspaceId?e.query.workspaceId:void 0;if(!a)return t.status(400).json({error:"workspaceId is required"});if("GET"===e.method){let e=await (0,s.findTab)(a,r);return e?t.status(200).json({tabId:e.tab.id,workspaceId:e.workspaceId,paneId:e.paneId,name:e.tab.name,sessionName:e.tab.sessionName,panelType:e.tab.panelType}):t.status(404).json({error:"Tab not found"})}if("DELETE"===e.method){let e=await (0,s.findTab)(a,r);if(!e)return t.status(404).json({error:"Tab not found"});let i=await (0,o.removeTabFromPane)(a,e.paneId,r);return t.status(200).json({ok:i})}return t.setHeader("Allow","GET, DELETE"),t.status(405).json({error:"Method not allowed"})};e.s(["default",0,l],83594);var u=e.i(83594),d=e.i(7031),p=e.i(181927),f=e.i(846432);let c=(0,i.hoist)(u,"default"),v=(0,i.hoist)(u,"config"),m=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/cli/tabs/[tabId]/index",pathname:"/api/cli/tabs/[tabId]",bundlePath:"",filename:""},userland:u,distDir:".next",relativeProjectDir:""});async function h(e,r,a){a.requestMeta&&(0,f.setRequestMeta)(e,a.requestMeta),m.isDev&&(0,f.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/cli/tabs/[tabId]/index";i=i.replace(/\/index$/,"")||"/";let n=await m.prepare(e,r,{srcPage:i});if(!n){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:s,params:o,prerenderManifest:l,routerServerContext:u}=n;try{let t,a=e.method||"GET",n=(0,d.getTracer)(),f=n.getActiveScopeSpan(),c=!!(null==u?void 0:u.isWrappedByNextServer),v=m.instrumentationOnRequestError.bind(m),h=async d=>m.render(e,r,{query:{...s,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:l.preview,propagateError:!1,dev:m.isDev,page:"/api/cli/tabs/[tabId]/index",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>v(e,...t)}).finally(()=>{if(!d)return;d.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=n.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=e.get("next.route");if(s){let e=`${a} ${s}`;d.setAttributes({"next.route":s,"http.route":s,"next.span_name":e}),d.updateName(e),t&&t!==d&&(t.setAttribute("http.route",s),t.updateName(e))}else d.updateName(`${a} ${i}`)});c&&f?await h(f):(t=n.getActiveScopeSpan(),await n.withPropagatedContext(e.headers,()=>n.trace(p.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:d.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},h),void 0,!c))}catch(e){if(m.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,v,"default",0,c,"handler",0,h],500208)},981532,e=>{e.v(e=>Promise.resolve().then(()=>e(322429)))},322522,e=>{e.v(e=>Promise.resolve().then(()=>e(459015)))},245061,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_tab-title_ts_0onatvs._.js"].map(t=>e.l(t))).then(()=>t(785128)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0abp0lo._.js.map
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
module.exports=[254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},597789,965898,e=>{"use strict";let t=process.env.__PMUX_PRISTINE_ENV,r=Object.freeze(t?JSON.parse(t):{...process.env});t||(process.env.__PMUX_PRISTINE_ENV=JSON.stringify(r)),e.s(["PRISTINE_ENV",0,r],965898);let a=new Set(["HOME","USER","LOGNAME","SHELL","PATH","TERM","COLORTERM","LANG","TMPDIR","SSH_AUTH_SOCK","SSH_CONNECTION","SSH_TTY","DISPLAY","WAYLAND_DISPLAY","XDG_RUNTIME_DIR","TZ"]),i=["LC_"],s=e=>a.has(e)||i.some(t=>e.startsWith(t)),n={TERM:"xterm-256color",COLORTERM:"truecolor"},l=()=>{let e={};for(let[t,a]of Object.entries(r))void 0!==a&&s(t)&&(e[t]=a);return{...e,...n}},o=e=>`'${e.replace(/'/g,"'\\''")}'`,u=()=>r.SHELL||"/bin/bash";e.s(["buildShellEnv",0,()=>l(),"buildShellLaunchCommand",0,()=>{let e=Object.entries(l()).map(([e,t])=>`${e}=${o(t)}`).join(" ");return`env -i TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${e} ${o(u())} -l`},"defaultShell",0,u],597789)},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),a=e.i(446786);let i=r.default.join(a.default.homedir(),".purplemux","logs"),s=process.env.LOG_LEVEL||"info",n=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,a]=r.split("=").map(e=>e.trim());e&&a&&(t[e]=a)}return t})(process.env.LOG_LEVELS),l=["trace","debug","info","warn","error","fatal"],o=globalThis;if(!o.__ptRootLogger){let e=[s,...Object.values(n)].reduce((e,t)=>l.indexOf(t)<l.indexOf(e)?t:e,"fatal");o.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(i,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=o.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=n[e]??s,t}])},44014,e=>{"use strict";let t,r;var a=e.i(666680);e.s(["nanoid",0,function(e=21){var i;i=e|=0,!t||t.length<i?(t=Buffer.allocUnsafe(128*i),a.webcrypto.getRandomValues(t),r=0):r+i>t.length&&(a.webcrypto.getRandomValues(t),r=0),r+=i;let s="";for(let a=r-e;a<r;a++)s+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&t[a]];return s}],44014)},459015,544538,e=>{"use strict";var t=e.i(233405),r=e.i(924868),a=e.i(224361),i=e.i(814747),s=e.i(44014),n=e.i(965898),l=e.i(597789),o=e.i(25146);process.platform;let u="linux"===process.platform;e.s(["isLinux",0,u],544538);let p=(0,o.createLogger)("terminal"),c=(0,a.promisify)(t.execFile),d="purple",m=i.default.join(process.env.__PMUX_APP_DIR_UNPACKED||process.env.__PMUX_APP_DIR||process.cwd(),"src","config","tmux.conf"),f=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"ls","-F","#{session_name}"],{timeout:5e3});return e.trim().split("\n").map(e=>e.trim()).filter(e=>e.startsWith("pt-"))}catch{return[]}},h=async(e,t,r,a)=>{let i=(0,l.buildShellLaunchCommand)();await c("tmux",["-u","-L",d,"-f",m,"new-session","-d","-s",e,"-x",String(t),"-y",String(r),i],{timeout:5e3,cwd:a||n.PRISTINE_ENV.HOME||"/"}),await E(),p.debug(`tmux session created: ${e} (cols: ${t}, rows: ${r})`)},y=e=>new Promise(t=>setTimeout(t,e)),g=async e=>{if(!await w(e))return;p.debug(`killSession start: ${e}`);let t=await L(e);if(t)try{p.debug(`SIGTERM → process group ${t}: ${e}`),process.kill(-t,"SIGTERM")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<5;t++){if(!await w(e))return void p.debug(`killSession done (SIGTERM): ${e}`);await y(200)}if(p.warn(`session survived SIGTERM, escalating to SIGKILL: ${e}`),t)try{p.debug(`SIGKILL → process group ${t}: ${e}`),process.kill(-t,"SIGKILL")}catch{}try{await c("tmux",["-L",d,"kill-session","-t",e],{timeout:5e3})}catch{}for(let t=0;t<3;t++){if(!await w(e))return void p.debug(`killSession done (SIGKILL): ${e}`);await y(200)}p.warn(`tmux session still alive after kill: ${e}`)},w=async e=>{try{return await c("tmux",["-L",d,"has-session","-t",e],{timeout:5e3}),!0}catch{return!1}},x=async()=>{},S=async()=>{await x();let e=await f();e.length>0&&e.forEach(e=>{p.debug(`existing tmux session found: ${e}`)})},v=async e=>{if(u)try{return await r.default.readlink(`/proc/${e}/cwd`)}catch{return null}try{let{stdout:t}=await c("lsof",["-a","-p",String(e),"-d","cwd","-Fn"],{timeout:5e3}),r=t.split("\n").find(e=>e.startsWith("n/"));return r?r.slice(1):null}catch{return null}},_=async e=>{let t=await L(e);if(t){let e=await v(t);if(e)return e}try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path}"],{timeout:5e3});return t.trim()||null}catch{return null}},L=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_pid}"],{timeout:5e3}),r=parseInt(t.trim(),10);return Number.isNaN(r)?null:r}catch{return null}},E=async()=>{try{await c("tmux",["-L",d,"source-file",m],{timeout:5e3})}catch{}},b=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"list-panes","-t",e,"-F","#{pane_current_command}"],{timeout:5e3});return t.trim()||null}catch{return null}},P=async()=>{try{let{stdout:e}=await c("tmux",["-L",d,"list-panes","-a","-F","#{session_name} #{pane_current_command} #{pane_current_path} #{pane_pid} #{window_activity}"],{timeout:5e3}),t=new Map;for(let r of e.trim().split("\n")){if(!r)continue;let[e,a,i,s,n]=r.split(" ");if(e&&a){let r=parseInt(s,10),l=parseInt(n,10);t.set(e,{command:a,path:i||"",pid:Number.isNaN(r)?0:r,windowActivity:Number.isNaN(l)?0:l})}}return t}catch{return new Map}},I=new Set(["bash","zsh","fish","sh","dash"]),N=async e=>{let t=await b(e);return t?{isSafe:I.has(t),processName:t}:{isSafe:!1,processName:"unknown"}},$=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_title}"],{timeout:5e3});return t.trim()||null}catch{return null}},R=async e=>{await c("tmux",["-L",d,"copy-mode","-q","-t",e],{timeout:5e3}).catch(()=>{})},T=async(e,t)=>{await R(e),await c("tmux",["-L",d,"send-keys","-t",e,t,"Enter"],{timeout:5e3})},M=async(e,t)=>{await R(e),await c("tmux",["-L",d,"send-keys","-t",e,t],{timeout:5e3})},A=async(e,t)=>{await R(e),await c("tmux",["-L",d,"send-keys","-t",e,"-l",`\x1b[200~${t}\x1b[201~`],{timeout:5e3}),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3}),await new Promise(e=>setTimeout(e,600)),await c("tmux",["-L",d,"send-keys","-t",e,"Enter"],{timeout:5e3})},k=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"display-message","-p","-t",e,"#{pane_current_path} #{pane_current_command} #{pane_pid} #{pane_width} #{pane_height} #{session_created}"],{timeout:5e3}),[r,a,i,s,n,l]=t.trim().split(" ");return{cwd:r||null,command:a||null,pid:i&&parseInt(i,10)||null,width:s&&parseInt(s,10)||null,height:n&&parseInt(n,10)||null,sessionCreated:l&&parseInt(l,10)||null}}catch{return{cwd:null,command:null,pid:null,width:null,height:null,sessionCreated:null}}},C=new Set(["node","python","python3","ruby","perl","deno","bun"]),D=async()=>{try{await c("tmux",["-L",d,"kill-server"],{timeout:5e3}),p.debug("tmux server killed")}catch{}},H=async e=>{try{let{stdout:t}=await c("tmux",["-L",d,"capture-pane","-p","-t",e],{timeout:5e3});return t}catch{return null}},q=async(e,t)=>{try{let{stdout:r}=await c("tmux",["-L",d,"capture-pane","-p","-S",`-${t}`,"-t",e],{timeout:5e3});return r}catch{return null}},j=async e=>{if(u){let t=[];return await Promise.all(e.map(async e=>{try{for(let a of(await r.default.readFile(`/proc/${e}/task/${e}/children`,"utf-8")).trim().split(/\s+/)){let e=parseInt(a,10);Number.isNaN(e)||t.push(e)}}catch{}})),t}try{let{stdout:t}=await c("pgrep",["-P",e.join(",")],{timeout:5e3});return t.trim().split("\n").map(e=>parseInt(e,10)).filter(e=>!Number.isNaN(e))}catch{return[]}},O=async e=>{let t=[],r=[e];for(;r.length>0;){let e=await j(r);if(0===e.length)break;t.push(...e),r=e}return t},G=async e=>{try{let t=new Set(e),{stdout:r}=await c("ss",["-tlnp"],{timeout:5e3}),a=new Set;for(let e of r.split("\n")){let r=e.match(/pid=(\d+)/g);if(!r||!r.some(e=>t.has(parseInt(e.replace("pid=",""),10))))continue;let i=e.match(/:(\d+)\s/);i&&a.add(parseInt(i[1],10))}return[...a].sort((e,t)=>e-t)}catch{return[]}},U=async e=>{let t=await O(e);if(0===t.length)return[];if(u)return G(t);try{let{stdout:e}=await c("lsof",["-a","-p",t.join(","),"-i","-sTCP:LISTEN","-P","-Fn"],{timeout:5e3}),r=new Set;for(let t of e.split("\n"))if(t.startsWith("n")){let e=t.match(/:(\d+)$/);e&&r.add(parseInt(e[1],10))}return[...r].sort((e,t)=>e-t)}catch{return[]}},F=async e=>{let t=await L(e);if(!t)return null;try{let{stdout:e}=await c("pgrep",["-n","-P",String(t)],{timeout:5e3}),r=e.trim();if(!r)return null;let{stdout:a}=await c("ps",["-o","args=","-p",r],{timeout:5e3}),s=a.trim();if(!s)return null;let n=s.split(/\s+/);if(0===n.length)return s;if(n[0]=i.default.basename(n[0]),C.has(n[0])&&n.length>1){let e=i.default.basename(n[1]).replace(/\.(c|m)?js$/,"");n.splice(0,2,e)}return n.join(" ")}catch{return null}};e.s(["SAFE_SHELLS",0,I,"applyConfig",0,E,"capturePaneContent",0,H,"capturePaneContentWithHistory",0,q,"checkTerminalProcess",0,N,"createSession",0,h,"defaultSessionName",0,()=>`pt-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}-${(0,s.nanoid)(6)}`,"exitCopyMode",0,R,"getAllPanesInfo",0,P,"getLastCommand",0,F,"getListeningPorts",0,U,"getPaneCurrentCommand",0,b,"getPaneDetailInfo",0,k,"getPaneTitle",0,$,"getSessionCwd",0,_,"getSessionPanePid",0,L,"hasSession",0,w,"killServer",0,D,"killSession",0,g,"listSessions",0,f,"scanSessions",0,S,"sendBracketedPaste",0,A,"sendKeys",0,T,"sendRawKeys",0,M,"workspaceSessionName",0,(e,t,r)=>`pt-${e}-${t}-${r}`],459015)},942080,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),i=e.i(262950),s=e.i(233405),n=e.i(254799),l=e.i(224361),o=e.i(459015),u=e.i(25146);let p=(0,l.promisify)(s.execFile),c=(0,u.createLogger)("diff"),d=async e=>{try{let{stdout:t}=await p("git",["rev-list","--left-right","--count","HEAD...@{upstream}"],{cwd:e,timeout:1e4}),r=t.trim().split(/\s+/);return{ahead:parseInt(r[0],10)||0,behind:parseInt(r[1],10)||0}}catch{return{ahead:0,behind:0}}},m=async e=>{let[t,r,a,i]=await Promise.allSettled([p("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:e,timeout:1e4}),p("git",["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"],{cwd:e,timeout:1e4}),p("git",["stash","list"],{cwd:e,timeout:1e4}),p("git",["log","-1","--format=%H\x1f%s\x1f%an\x1f%at"],{cwd:e,timeout:1e4})]),s="fulfilled"===t.status?t.value.stdout.trim():"",n="fulfilled"===r.status?r.value.stdout.trim():null,l="fulfilled"===a.status?a.value.stdout.trim():"",o=l?l.split("\n").length:0,u=null;if("fulfilled"===i.status){let e=i.value.stdout.trim().split("\x1f");if(e.length>=4){let[t,r,a,i]=e;u={hash:t,shortHash:t.slice(0,7),subject:r,author:a,timestamp:1e3*parseInt(i,10)}}}return{branch:s,upstream:n,isDetached:"HEAD"===s,stash:o,headCommit:u}},f=async e=>{let[{stdout:t},{stdout:r},{stdout:a}]=await Promise.all([p("git",["rev-parse","HEAD"],{cwd:e,timeout:1e4}),p("git",["status","--porcelain","-uall"],{cwd:e,timeout:1e4}),p("git",["diff","HEAD","--shortstat"],{cwd:e,timeout:1e4})]);return(0,n.createHash)("sha1").update(`${t.trim()}
|
|
2
|
-
${r}
|
|
3
|
-
${a}`).digest("hex").slice(0,16)},h=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let r=e.query.session,a="true"===e.query.hashOnly,i="true"===e.query.fetch;if(!r)return t.status(400).json({error:"session parameter required"});if(!await (0,o.hasSession)(r))return t.status(404).json({error:"Session not found"});let s=await (0,o.getSessionCwd)(r);if(!s)return t.status(500).json({error:"Failed to get CWD"});try{await p("git",["rev-parse","--is-inside-work-tree"],{cwd:s,timeout:1e4})}catch{return t.status(200).json({isGitRepo:!1,diff:"",hash:""})}let n=!1;if(i)try{await p("git",["fetch","--prune"],{cwd:s,timeout:2e4}),n=!0}catch(e){c.warn(`silent fetch failed: ${e instanceof Error?e.message:e}`)}try{if(a){let[e,r]=await Promise.all([f(s),d(s)]);return t.status(200).json({isGitRepo:!0,hash:e,ahead:r.ahead,behind:r.behind,fetched:n})}let[{stdout:e},{stdout:r},i,l,o]=await Promise.all([p("git",["diff","HEAD"],{cwd:s,timeout:1e4,maxBuffer:5242880}),p("git",["status","--porcelain","-uall"],{cwd:s,timeout:1e4}),f(s),d(s),m(s)]),u=r.split("\n").filter(e=>e.startsWith("??")).map(e=>e.slice(3).trim()),c=e;for(let e of u)try{let{stdout:t}=await p("git",["diff","--no-index","/dev/null",e],{cwd:s,timeout:1e4});c+=t}catch(e){e&&"object"==typeof e&&"stdout"in e&&(c+=e.stdout)}return t.status(200).json({isGitRepo:!0,diff:c,hash:i,ahead:l.ahead,behind:l.behind,branch:o.branch,upstream:o.upstream,isDetached:o.isDetached,stash:o.stash,headCommit:o.headCommit,fetched:n})}catch(e){return c.error(`git diff failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to get diff"})}};e.s(["default",0,h],607240);var y=e.i(607240),g=e.i(7031),w=e.i(181927),x=e.i(846432);let S=(0,i.hoist)(y,"default"),v=(0,i.hoist)(y,"config"),_=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/layout/diff",pathname:"/api/layout/diff",bundlePath:"",filename:""},userland:y,distDir:".next",relativeProjectDir:""});async function L(e,r,a){a.requestMeta&&(0,x.setRequestMeta)(e,a.requestMeta),_.isDev&&(0,x.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/layout/diff";i=i.replace(/\/index$/,"")||"/";let s=await _.prepare(e,r,{srcPage:i});if(!s){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:n,params:l,prerenderManifest:o,routerServerContext:u}=s;try{let t,a=e.method||"GET",s=(0,g.getTracer)(),p=s.getActiveScopeSpan(),c=!!(null==u?void 0:u.isWrappedByNextServer),d=_.instrumentationOnRequestError.bind(_),m=async p=>_.render(e,r,{query:{...n,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:_.isDev,page:"/api/layout/diff",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>d(e,...t)}).finally(()=>{if(!p)return;p.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=s.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==w.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=e.get("next.route");if(n){let e=`${a} ${n}`;p.setAttributes({"next.route":n,"http.route":n,"next.span_name":e}),p.updateName(e),t&&t!==p&&(t.setAttribute("http.route",n),t.updateName(e))}else p.updateName(`${a} ${i}`)});c&&p?await m(p):(t=s.getActiveScopeSpan(),await s.withPropagatedContext(e.headers,()=>s.trace(w.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:g.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},m),void 0,!c))}catch(e){if(_.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,v,"default",0,S,"handler",0,L],942080)}];
|
|
4
|
-
|
|
5
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0auutl5._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},130146,(e,t,r)=>{t.exports=e.x("pino-28069d5257187539",()=>require("pino-28069d5257187539"))},25146,e=>{"use strict";var t=e.i(130146),r=e.i(814747),i=e.i(446786);let a=r.default.join(i.default.homedir(),".purplemux","logs"),n=process.env.LOG_LEVEL||"info",s=(e=>{if(!e)return{};let t={};for(let r of e.split(",")){let[e,i]=r.split("=").map(e=>e.trim());e&&i&&(t[e]=i)}return t})(process.env.LOG_LEVELS),o=["trace","debug","info","warn","error","fatal"],l=globalThis;if(!l.__ptRootLogger){let e=[n,...Object.values(s)].reduce((e,t)=>o.indexOf(t)<o.indexOf(e)?t:e,"fatal");l.__ptRootLogger=(0,t.default)({level:e,transport:{targets:[{target:"pino-roll",level:e,options:{file:r.default.join(a,"purplemux"),frequency:"daily",dateFormat:"yyyy-MM-dd",limit:{count:7},mkdir:!0}},{target:"pino-pretty",level:e,options:{colorize:!0,ignore:"pid,hostname,module",translateTime:"HH:MM:ss",messageFormat:"[{module}] {msg}"}}]}})}let u=l.__ptRootLogger;e.s(["createLogger",0,e=>{let t=u.child({module:e});return t.level=s[e]??n,t}])},688947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},406461,(e,t,r)=>{t.exports=e.x("zlib",()=>require("zlib"))},254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},524836,(e,t,r)=>{t.exports=e.x("https",()=>require("https"))},921517,(e,t,r)=>{t.exports=e.x("http",()=>require("http"))},504446,(e,t,r)=>{t.exports=e.x("net",()=>require("net"))},755004,(e,t,r)=>{t.exports=e.x("tls",()=>require("tls"))},792509,(e,t,r)=>{t.exports=e.x("url",()=>require("url"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},666126,e=>{"use strict";e.i(478319);var t=e.i(220951);(0,e.i(25146).createLogger)("sync");let r=globalThis;r.__ptSyncClients||(r.__ptSyncClients=new Set);let i=r.__ptSyncClients;e.s(["broadcastSync",0,e=>{let r=JSON.stringify(e);for(let e of i)e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<1048576&&e.send(r)}])},845994,e=>{"use strict";var t=e.i(924868),r=e.i(814747),i=e.i(446786),a=e.i(254799),n=e.i(666126);(0,e.i(25146).createLogger)("config");let s=r.default.join(i.default.homedir(),".purplemux"),o=r.default.join(s,"config.json"),l=globalThis;l.__ptConfigLock||(l.__ptConfigLock=Promise.resolve());let u=async e=>{let t,r=new Promise(e=>{t=e}),i=l.__ptConfigLock;l.__ptConfigLock=r,await i;try{return await e()}finally{t()}},p=()=>({updatedAt:new Date().toISOString()}),d=async()=>{try{let e=await t.default.readFile(o,"utf-8");return JSON.parse(e)}catch{return null}},c=async e=>{let{updatedAt:r,...i}=e,a=JSON.stringify(i);if(l.__ptConfigContentCache===a)return;e.updatedAt=new Date().toISOString();let s=o+".tmp";try{await t.default.writeFile(s,JSON.stringify(e,null,2),{mode:384}),await t.default.rename(s,o)}catch(e){throw await t.default.unlink(s).catch(()=>{}),e}l.__ptConfigContentCache=a,(0,n.broadcastSync)({type:"config"})},f="scrypt:",g=e=>"string"==typeof e&&e.startsWith(f),y=async e=>{let t=a.default.randomBytes(16),r=await new Promise((r,i)=>{a.default.scrypt(e,t,64,(e,t)=>{e?i(e):r(t)})});return`${f}${t.toString("hex")}:${r.toString("hex")}`},m=async(e,t)=>{if(!g(t))return!1;let[,r,i]=t.split(":"),n=Buffer.from(r,"hex"),s=Buffer.from(i,"hex"),o=await new Promise((t,r)=>{a.default.scrypt(e,n,s.length,(e,i)=>{e?r(e):t(i)})});return a.default.timingSafeEqual(o,s)},h=async()=>await d()??p(),x=async e=>u(async()=>{let t=await d()??p();Object.assign(t,e),await c(t)}),w=async()=>{let e=await d();return!g(e?.authPassword)},S=async()=>{let e=await d();return e?.dangerouslySkipPermissions??!1};e.s(["generateSecret",0,()=>a.default.randomBytes(32).toString("hex"),"getConfig",0,h,"getDangerouslySkipPermissions",0,S,"hashPassword",0,y,"needsSetup",0,w,"updateConfig",0,x,"verifyPassword",0,m])},818794,e=>{"use strict";var t=e.i(926747),r=e.i(190406),i=e.i(244898),a=e.i(262950),n=e.i(845994),s=e.i(772601);let o={count:0,firstAt:0},l=async(e,t)=>{if("POST"!==e.method)return t.setHeader("Allow","POST"),t.status(405).json({error:"Method not allowed"});if(0!==o.count&&(Date.now()-o.firstAt>9e5?(o={count:0,firstAt:0},!1):o.count>=16))return t.status(429).json({error:"Too many login attempts. Please try again later."});let{password:r}=e.body??{},i=process.env.AUTH_PASSWORD;if(!r||!i||!await (0,n.verifyPassword)(r,i))return 0===o.count||Date.now()-o.firstAt>9e5?o={count:1,firstAt:Date.now()}:o.count++,t.status(401).json({error:"Invalid password."});o={count:0,firstAt:0};let a=await (0,s.signSessionToken)(),l=(0,s.isSecureRequest)(e);return t.setHeader("Set-Cookie",(0,s.buildCookieHeader)(a,l)),t.status(200).json({ok:!0})};e.s(["default",0,l],328912);var u=e.i(328912),p=e.i(7031),d=e.i(181927),c=e.i(846432);let f=(0,a.hoist)(u,"default"),g=(0,a.hoist)(u,"config"),y=new i.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/auth/login",pathname:"/api/auth/login",bundlePath:"",filename:""},userland:u,distDir:".next",relativeProjectDir:""});async function m(e,r,i){i.requestMeta&&(0,c.setRequestMeta)(e,i.requestMeta),y.isDev&&(0,c.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let a="/api/auth/login";a=a.replace(/\/index$/,"")||"/";let n=await y.prepare(e,r,{srcPage:a});if(!n){r.statusCode=400,r.end("Bad Request"),null==i.waitUntil||i.waitUntil.call(i,Promise.resolve());return}let{query:s,params:o,prerenderManifest:l,routerServerContext:u}=n;try{let t,i=e.method||"GET",n=(0,p.getTracer)(),c=n.getActiveScopeSpan(),f=!!(null==u?void 0:u.isWrappedByNextServer),g=y.instrumentationOnRequestError.bind(y),m=async p=>y.render(e,r,{query:{...s,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:l.preview,propagateError:!1,dev:y.isDev,page:"/api/auth/login",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>g(e,...t)}).finally(()=>{if(!p)return;p.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=n.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=e.get("next.route");if(s){let e=`${i} ${s}`;p.setAttributes({"next.route":s,"http.route":s,"next.span_name":e}),p.updateName(e),t&&t!==p&&(t.setAttribute("http.route",s),t.updateName(e))}else p.updateName(`${i} ${a}`)});f&&c?await m(c):(t=n.getActiveScopeSpan(),await n.withPropagatedContext(e.headers,()=>n.trace(d.BaseServerSpan.handleRequest,{spanName:`${i} ${a}`,kind:p.SpanKind.SERVER,attributes:{"http.method":i,"http.target":e.url}},m),void 0,!f))}catch(e){if(y.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==i.waitUntil||i.waitUntil.call(i,Promise.resolve())}}e.s(["config",0,g,"default",0,f,"handler",0,m],818794)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0d-inw8._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},871911,e=>{"use strict";var t=e.i(254799),r=e.i(522734),a=e.i(814747),i=e.i(446786);let n=a.default.join(i.default.homedir(),".purplemux","cli-token"),s=globalThis;e.s(["verifyCliToken",0,e=>{let i=e.headers["x-pmux-token"];var l="string"==typeof i?i:void 0;if(!l)return!1;let o=(()=>{if(s.__ptCliToken)return s.__ptCliToken;let e=(()=>{try{return r.default.readFileSync(n,"utf-8").trim()||null}catch{return null}})();if(e)return s.__ptCliToken=e,e;let i=(0,t.randomBytes)(32).toString("hex");s.__ptCliToken=i;try{r.default.mkdirSync(a.default.dirname(n),{recursive:!0}),r.default.writeFileSync(n,i,{mode:384})}catch{}return i})();return l.length===o.length&&(0,t.timingSafeEqual)(Buffer.from(l),Buffer.from(o))}])},200523,e=>{"use strict";var t=e.i(825265),r=e.i(804767),a=e.i(322429);let i=async(e,i)=>{if(!await (0,a.getWorkspaceById)(e))return null;let n=await (0,t.getLayout)(e);for(let t of(0,r.collectPanes)(n.root)){let r=t.tabs.find(e=>e.id===i);if(r)return{workspaceId:e,paneId:t.id,tab:r}}return null},n=async e=>{let a=await (0,t.getLayout)(e);return(0,r.getFirstPaneId)(a.root)||null};e.s(["findTab",0,i,"resolveFirstPaneId",0,n])},673759,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),i=e.i(262950),n=e.i(871911),s=e.i(200523),l=e.i(459015);let o=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});if(!(0,n.verifyCliToken)(e))return t.status(403).json({error:"Forbidden"});let r=e.query.tabId,a="string"==typeof e.query.workspaceId?e.query.workspaceId:void 0;if(!a)return t.status(400).json({error:"workspaceId is required"});let i=await (0,s.findTab)(a,r);if(!i)return t.status(404).json({error:"Tab not found"});if(!await (0,l.hasSession)(i.tab.sessionName))return t.status(409).json({error:"Tab session is not running"});let o=await (0,l.capturePaneContent)(i.tab.sessionName);return t.status(200).json({content:o})};e.s(["default",0,o],16409);var u=e.i(16409),d=e.i(7031),p=e.i(181927),f=e.i(846432);let c=(0,i.hoist)(u,"default"),v=(0,i.hoist)(u,"config"),h=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/cli/tabs/[tabId]/result",pathname:"/api/cli/tabs/[tabId]/result",bundlePath:"",filename:""},userland:u,distDir:".next",relativeProjectDir:""});async function m(e,r,a){a.requestMeta&&(0,f.setRequestMeta)(e,a.requestMeta),h.isDev&&(0,f.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/cli/tabs/[tabId]/result";i=i.replace(/\/index$/,"")||"/";let n=await h.prepare(e,r,{srcPage:i});if(!n){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:s,params:l,prerenderManifest:o,routerServerContext:u}=n;try{let t,a=e.method||"GET",n=(0,d.getTracer)(),f=n.getActiveScopeSpan(),c=!!(null==u?void 0:u.isWrappedByNextServer),v=h.instrumentationOnRequestError.bind(h),m=async d=>h.render(e,r,{query:{...s,...l},params:l,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:o.preview,propagateError:!1,dev:h.isDev,page:"/api/cli/tabs/[tabId]/result",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>v(e,...t)}).finally(()=>{if(!d)return;d.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=n.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=e.get("next.route");if(s){let e=`${a} ${s}`;d.setAttributes({"next.route":s,"http.route":s,"next.span_name":e}),d.updateName(e),t&&t!==d&&(t.setAttribute("http.route",s),t.updateName(e))}else d.updateName(`${a} ${i}`)});c&&f?await m(f):(t=n.getActiveScopeSpan(),await n.withPropagatedContext(e.headers,()=>n.trace(p.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:d.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},m),void 0,!c))}catch(e){if(h.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,v,"default",0,c,"handler",0,m],673759)},981532,e=>{e.v(e=>Promise.resolve().then(()=>e(322429)))},322522,e=>{e.v(e=>Promise.resolve().then(()=>e(459015)))},245061,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_tab-title_ts_0onatvs._.js"].map(t=>e.l(t))).then(()=>t(785128)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0g8mjyh._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},871911,e=>{"use strict";var t=e.i(254799),r=e.i(522734),a=e.i(814747),i=e.i(446786);let n=a.default.join(i.default.homedir(),".purplemux","cli-token"),s=globalThis;e.s(["verifyCliToken",0,e=>{let i=e.headers["x-pmux-token"];var o="string"==typeof i?i:void 0;if(!o)return!1;let l=(()=>{if(s.__ptCliToken)return s.__ptCliToken;let e=(()=>{try{return r.default.readFileSync(n,"utf-8").trim()||null}catch{return null}})();if(e)return s.__ptCliToken=e,e;let i=(0,t.randomBytes)(32).toString("hex");s.__ptCliToken=i;try{r.default.mkdirSync(a.default.dirname(n),{recursive:!0}),r.default.writeFileSync(n,i,{mode:384})}catch{}return i})();return o.length===l.length&&(0,t.timingSafeEqual)(Buffer.from(o),Buffer.from(l))}])},200523,e=>{"use strict";var t=e.i(825265),r=e.i(804767),a=e.i(322429);let i=async(e,i)=>{if(!await (0,a.getWorkspaceById)(e))return null;let n=await (0,t.getLayout)(e);for(let t of(0,r.collectPanes)(n.root)){let r=t.tabs.find(e=>e.id===i);if(r)return{workspaceId:e,paneId:t.id,tab:r}}return null},n=async e=>{let a=await (0,t.getLayout)(e);return(0,r.getFirstPaneId)(a.root)||null};e.s(["findTab",0,i,"resolveFirstPaneId",0,n])},802873,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),i=e.i(262950),n=e.i(871911),s=e.i(200523),o=e.i(459015);let l=async(e,t)=>{if("POST"!==e.method)return t.setHeader("Allow","POST"),t.status(405).json({error:"Method not allowed"});if(!(0,n.verifyCliToken)(e))return t.status(403).json({error:"Forbidden"});let r=e.query.tabId,a="string"==typeof e.query.workspaceId?e.query.workspaceId:void 0;if(!a)return t.status(400).json({error:"workspaceId is required"});let{content:i}=e.body;if(!i)return t.status(400).json({error:"content is required"});let l=await (0,s.findTab)(a,r);return l?await (0,o.hasSession)(l.tab.sessionName)?(await (0,o.sendBracketedPaste)(l.tab.sessionName,i),t.status(200).json({status:"sent"})):t.status(409).json({error:"Tab session is not running"}):t.status(404).json({error:"Tab not found"})};e.s(["default",0,l],197672);var u=e.i(197672),d=e.i(7031),p=e.i(181927),c=e.i(846432);let f=(0,i.hoist)(u,"default"),v=(0,i.hoist)(u,"config"),h=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/cli/tabs/[tabId]/send",pathname:"/api/cli/tabs/[tabId]/send",bundlePath:"",filename:""},userland:u,distDir:".next",relativeProjectDir:""});async function m(e,r,a){a.requestMeta&&(0,c.setRequestMeta)(e,a.requestMeta),h.isDev&&(0,c.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/cli/tabs/[tabId]/send";i=i.replace(/\/index$/,"")||"/";let n=await h.prepare(e,r,{srcPage:i});if(!n){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:s,params:o,prerenderManifest:l,routerServerContext:u}=n;try{let t,a=e.method||"GET",n=(0,d.getTracer)(),c=n.getActiveScopeSpan(),f=!!(null==u?void 0:u.isWrappedByNextServer),v=h.instrumentationOnRequestError.bind(h),m=async d=>h.render(e,r,{query:{...s,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:l.preview,propagateError:!1,dev:h.isDev,page:"/api/cli/tabs/[tabId]/send",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>v(e,...t)}).finally(()=>{if(!d)return;d.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=n.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=e.get("next.route");if(s){let e=`${a} ${s}`;d.setAttributes({"next.route":s,"http.route":s,"next.span_name":e}),d.updateName(e),t&&t!==d&&(t.setAttribute("http.route",s),t.updateName(e))}else d.updateName(`${a} ${i}`)});f&&c?await m(c):(t=n.getActiveScopeSpan(),await n.withPropagatedContext(e.headers,()=>n.trace(p.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:d.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},m),void 0,!f))}catch(e){if(h.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,v,"default",0,f,"handler",0,m],802873)},981532,e=>{e.v(e=>Promise.resolve().then(()=>e(322429)))},322522,e=>{e.v(e=>Promise.resolve().then(()=>e(459015)))},245061,e=>{e.v(t=>Promise.all(["server/chunks/src_lib_tab-title_ts_0onatvs._.js"].map(t=>e.l(t))).then(()=>t(785128)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0lk7ru8._.js.map
|