purplemux 0.3.2 → 0.4.2
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 +116 -116
- 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 +7 -7
- package/.next/standalone/.next/server/chunks/[externals]__0s~lw5_._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-vpxlt._.js +5 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.wdm~p._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.xasox._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0075vnc._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__02.ow52._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__023w5uy._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__03rse4i._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__048funf._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05le.ev._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05~jgqd._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__06kid0d._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07ajdqq._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07fh~7w._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0mky_tj._.js → [root-of-the-server]__08nq4la._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ageh3g._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0atje0b._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cejele._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cy47p4._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0d9yo3_._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e5am-o._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e6z0u6._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0erq9rf._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0f-1scw._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0f0-oim._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fdh07q._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__00o93bf._.js → [root-of-the-server]__0fe0pqx._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fjtk0d._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g-v44c._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gm~y1a._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0h-9m0e._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0i0mb1-._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0j3kgjw._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0jqcz6h._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0lp1y.v._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0m9hms3._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0mpstz.._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0oqbs5g._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0pta11j._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0q0laz1._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qpwsk~._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0sgq23a._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0sisigk._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t27n38._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ts_s1k._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0vno7dh._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0vroi1-._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wae66j._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0x01z7b._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xgh-_t._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xs6_~.._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0y774bl._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0y_v9~l._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__10v85i5._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__110w2ya._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__11b3nvp._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__12_dfe-._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__12lg8hi._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__12v9yor._.js +3 -0
- package/.next/standalone/.next/server/chunks/_07f-e5d._.js +3 -0
- package/.next/standalone/.next/server/chunks/_0abd-ef._.js +3 -0
- package/.next/standalone/.next/server/chunks/_0naftfn._.js +1 -1
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_pages-api_019~zpv.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_pages-api_054vaqw.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_pages-api_05soyh7.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_pages-api_0dag3xq.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_pages-api_0drg5k..js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_pages-api_0qpjud8.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_pages-api_0to2msc.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_pages-api_0uk385d.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_pages-api_0v8pump.js +3 -0
- package/.next/standalone/.next/server/chunks/src_lib_06lqtoi._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_0bj652.._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__05vtngr._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__07jm3ld._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__00fyckt._.js → [root-of-the-server]__0fdpmgm._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__02~n2ds._.js → [root-of-the-server]__0hixhy3._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0lnsb8q._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ytsvx3._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0-0n2jc._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0-w3tj9._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0.asmh_._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0.~7e5x._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0025oot._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0148tmw._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_03.p176._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0y_feze._.js → _03u5alz._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_05enhz-._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_05oyq08._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0-gv~al._.js → _05qk2n5._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_06mfd2z._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_00zzfsm._.js → _072p152._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0.stp0n._.js → _08~3wi.._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_09n7sza._.js +18 -0
- package/.next/standalone/.next/server/chunks/ssr/_0b3mmpo._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_09l7tmm._.js → _0e8bhy5._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/_0g4dxt7._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0h7bs4u._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_12l2tic._.js → _0injlej._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0k_04fj._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0l_4npy._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_02eucpw._.js → _0mrdl.g._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0ob2rr-._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0qzs~4y._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0olu-g8._.js → _0r.fjs0._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/{_10dec5o._.js → _0sju65h._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_00cx0p2._.js → _0tk3_d1._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0vebac6._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0w7x_09._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_053tm~z._.js → _0wrhe~n._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0xnk7ht._.js +18 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0bhsmmv._.js → _0xxqycz._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0kzht5v._.js → _10eoz_a._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0k0r2i-._.js → _10hul60._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_10uebjl._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_11m23bw._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_13s7t5u._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{messages_0k204ao._.js → messages_02_r1om._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{messages_0f3u1ly._.js → messages_0u_y48r._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_de_settings_json_[json]_cjs_0ksu4_w._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_de_timeline_json_[json]_cjs_0_i8-gb._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_en_settings_json_[json]_cjs_0qwl-zt._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_en_timeline_json_[json]_cjs_0a50w3r._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_es_settings_json_[json]_cjs_0ce_kv6._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_es_timeline_json_[json]_cjs_07-b7ka._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_fr_settings_json_[json]_cjs_0h_6lba._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_fr_timeline_json_[json]_cjs_045zga0._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ja_settings_json_[json]_cjs_0pg~fls._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ja_timeline_json_[json]_cjs_0iwksd.._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ko_settings_json_[json]_cjs_07xpfc8._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ko_timeline_json_[json]_cjs_03gxaph._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_settings_json_[json]_cjs_0frspzp._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_timeline_json_[json]_cjs_0mhm8bo._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ru_settings_json_[json]_cjs_08ex00.._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ru_timeline_json_[json]_cjs_104t_vy._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_tr_settings_json_[json]_cjs_0piu0da._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_tr_timeline_json_[json]_cjs_11fne8p._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_settings_json_[json]_cjs_0uazwgy._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_timeline_json_[json]_cjs_0g0-bd6._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_settings_json_[json]_cjs_09u0c5l._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_timeline_json_[json]_cjs_0b3tm.x._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_0.l39rf._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_07i.2e~._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_0bbmd88._.js → node_modules_0az5xxz._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/node_modules_0cx6hl6._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_02oar3h._.js → node_modules_0g6n2o4._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/node_modules_0v0j4dl._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_0wwbj_z._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_0d_1ie5._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_0ik66ii._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_0k730f5._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_pages_0edfh6g.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_components_0n3s0.7._.js → src_components_054lzv8._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/src_components_07a_zfh._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_components_0gkfyrc._.js → src_components_0_j7p.~._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{src_components_05-kki3._.js → src_components_0dzgkvt._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{src_components_0fb83uz._.js → src_components_0l6f_-1._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/src_components_11nysou._.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_shortcuts_cheat-sheet-dialog_tsx_0i2pbva._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_components_features_stats_session-section_tsx_0imh21c._.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_components_ui_tooltip_tsx_0nba54u._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_use-browser-title_ts_0bw6.cb._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_use-workspace-store_ts_0h40e5c._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +116 -116
- package/.next/standalone/.next/server/middleware.js +1 -1
- package/.next/standalone/.next/server/pages/_app/build-manifest.json +7 -7
- package/.next/standalone/.next/server/pages/_app/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/_app.js +5 -5
- package/.next/standalone/.next/server/pages/_app.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/_document.js +3 -2
- package/.next/standalone/.next/server/pages/_document.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/_error/build-manifest.json +3 -3
- package/.next/standalone/.next/server/pages/_error/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/_error.js +7 -6
- package/.next/standalone/.next/server/pages/_error.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/auth/login.js +1 -1
- 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-agent.js +2 -2
- package/.next/standalone/.next/server/pages/api/check-agent.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/check-claude.js +2 -2
- package/.next/standalone/.next/server/pages/api/check-claude.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/cli/api-guide.js +1 -1
- package/.next/standalone/.next/server/pages/api/cli/api-guide.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/console.js +2 -2
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/console.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/eval.js +2 -2
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/eval.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/network.js +2 -2
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/network.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/screenshot.js +2 -2
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/screenshot.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/url.js +2 -2
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/browser/url.js.nft.json +1 -1
- 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 +2 -2
- 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/codex/launch-args.js +4 -4
- package/.next/standalone/.next/server/pages/api/codex/launch-args.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/codex/launch-command.js +2 -2
- package/.next/standalone/.next/server/pages/api/codex/launch-command.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/codex/sessions.js +2 -2
- package/.next/standalone/.next/server/pages/api/codex/sessions.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/config.js +1 -1
- package/.next/standalone/.next/server/pages/api/config.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/git/branch.js +2 -1
- package/.next/standalone/.next/server/pages/api/git/branch.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/git/status.js +2 -1
- package/.next/standalone/.next/server/pages/api/git/status.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/git/sync.js +2 -1
- package/.next/standalone/.next/server/pages/api/git/sync.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout/commit-diff.js +2 -1
- package/.next/standalone/.next/server/pages/api/layout/commit-diff.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout/cwd.js +2 -1
- package/.next/standalone/.next/server/pages/api/layout/cwd.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout/diff.js +2 -1
- package/.next/standalone/.next/server/pages/api/layout/diff.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout/file-content.js +2 -1
- package/.next/standalone/.next/server/pages/api/layout/file-content.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout/git-log.js +2 -1
- package/.next/standalone/.next/server/pages/api/layout/git-log.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 +4 -4
- 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 +6 -6
- 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 +2 -2
- package/.next/standalone/.next/server/pages/api/preflight/runtime.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/push/vapid-key.js +1 -1
- package/.next/standalone/.next/server/pages/api/push/vapid-key.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/aggregated.js +3 -3
- package/.next/standalone/.next/server/pages/api/stats/aggregated.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/cache-status.js +2 -2
- package/.next/standalone/.next/server/pages/api/stats/cache-status.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/daily-report/cache.js +2 -2
- 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 +2 -2
- 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 +4 -4
- package/.next/standalone/.next/server/pages/api/stats/daily-report/list.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/history.js +4 -4
- package/.next/standalone/.next/server/pages/api/stats/history.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/overview.js +4 -4
- package/.next/standalone/.next/server/pages/api/stats/overview.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/projects.js +3 -3
- package/.next/standalone/.next/server/pages/api/stats/projects.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/sessions.js +3 -3
- package/.next/standalone/.next/server/pages/api/stats/sessions.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/uptime.js +4 -4
- package/.next/standalone/.next/server/pages/api/stats/uptime.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/status/agent-launch.js +4 -4
- package/.next/standalone/.next/server/pages/api/status/agent-launch.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/status/hook.js +5 -5
- package/.next/standalone/.next/server/pages/api/status/hook.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/status/statusline.js +9 -9
- package/.next/standalone/.next/server/pages/api/status/statusline.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/system/tmux-sessions.js +2 -1
- package/.next/standalone/.next/server/pages/api/system/tmux-sessions.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/timeline/sessions.js +2 -2
- package/.next/standalone/.next/server/pages/api/timeline/sessions.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/tmux/capture.js +2 -1
- package/.next/standalone/.next/server/pages/api/tmux/capture.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/tmux/info.js +2 -1
- package/.next/standalone/.next/server/pages/api/tmux/info.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/tmux/permission-options.js +2 -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 +2 -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 +4 -4
- 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 +3 -3
- package/.next/standalone/.next/server/pages/api/tmux/reset.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/tmux/send-input.js +2 -1
- package/.next/standalone/.next/server/pages/api/tmux/send-input.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 +3 -3
- 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 +20 -20
- package/.next/standalone/.next/server/pages/index/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/index/react-loadable-manifest.json +12 -12
- package/.next/standalone/.next/server/pages/index.js +19 -18
- 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 +12 -12
- package/.next/standalone/.next/server/pages/login/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/login.js +16 -15
- 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 +20 -20
- package/.next/standalone/.next/server/pages/reports/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/reports/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/pages/reports.js +21 -20
- package/.next/standalone/.next/server/pages/reports.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/reset/build-manifest.json +3 -3
- package/.next/standalone/.next/server/pages/reset/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/reset.js +8 -7
- 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 +21 -21
- package/.next/standalone/.next/server/pages/stats/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/stats/react-loadable-manifest.json +15 -15
- package/.next/standalone/.next/server/pages/stats.js +21 -20
- package/.next/standalone/.next/server/pages/stats.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/tools-required/build-manifest.json +7 -7
- package/.next/standalone/.next/server/pages/tools-required/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/tools-required.js +12 -11
- 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 +20 -20
- package/.next/standalone/.next/server/pages/webview/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/webview/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/pages/webview.js +21 -20
- 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/static/{pZhcwQ83aP87HDTIzzyJ6 → Fvh2ZScb-GvlCulutSHF4}/_buildManifest.js +8 -8
- package/.next/standalone/.next/static/chunks/0-_m9g0bmuw6r.js +1 -0
- package/.next/standalone/.next/static/chunks/0.sri97ob4xz_.js +1 -0
- package/.next/standalone/.next/static/chunks/0.vz-0q9sjiuw.js +1 -0
- package/.next/standalone/.next/static/chunks/0.wij9w6vcwhg.js +1 -0
- package/.next/standalone/.next/static/chunks/0.~3qhg2-u3ky.js +1 -0
- package/.next/standalone/.next/static/chunks/00oa6ti8pq8c5.js +1 -0
- package/.next/standalone/.next/static/chunks/00ubv7ksa49tb.js +1 -0
- package/.next/standalone/.next/static/chunks/00wzy83e7d7gj.js +24 -0
- package/.next/standalone/.next/static/chunks/{0p-l.y2j.t_~p.js → 034mn8n--pyn6.js} +1 -1
- package/.next/standalone/.next/static/chunks/03eq8u6303wiy.js +1 -0
- package/.next/standalone/.next/static/chunks/{0dp8cx7g1vggf.js → 03jt6vqn-xilm.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0vr33-opwem7e.js → 04wf7.-7.-mpm.js} +1 -1
- package/.next/standalone/.next/static/chunks/05gba103lqp8r.js +1 -0
- package/.next/standalone/.next/static/chunks/07fcrp1t~2ivl.js +1 -0
- package/.next/standalone/.next/static/chunks/{02o84r01jsc.z.js → 07hp_eaak.fq-.js} +1 -1
- package/.next/standalone/.next/static/chunks/07lv2vmm9ayna.js +1 -0
- package/.next/standalone/.next/static/chunks/{07yop4v9xcwb9.js → 07qi73ciivwg_.js} +1 -1
- package/.next/standalone/.next/static/chunks/07vu4hx3.8d.3.js +1 -0
- package/.next/standalone/.next/static/chunks/09-h3tvhahhc~.js +24 -0
- package/.next/standalone/.next/static/chunks/09tnrtb~sgtjh.js +1 -0
- package/.next/standalone/.next/static/chunks/0_0bwcp~9lea8.js +1 -0
- package/.next/standalone/.next/static/chunks/0_ac9op.u-oja.js +5 -0
- package/.next/standalone/.next/static/chunks/{09psmnx8qch_s.js → 0_eqdbfwxb.~r.js} +1 -1
- package/.next/standalone/.next/static/chunks/0_ybvkygns8mh.js +1 -0
- package/.next/standalone/.next/static/chunks/{0ddh4qmi2awdq.js → 0byb_iu6a-~vd.js} +1 -1
- package/.next/standalone/.next/static/chunks/0c79f5oit0rws.js +1 -0
- package/.next/standalone/.next/static/chunks/{0f73mm-~6n8dq.js → 0ci366svlb59q.js} +14 -14
- package/.next/standalone/.next/static/chunks/0cy3p~8fa8p~8.js +1 -0
- package/.next/standalone/.next/static/chunks/0d8s09d-izdbq.js +6 -0
- package/.next/standalone/.next/static/chunks/0dqqxbo0n.jgl.js +1 -0
- package/.next/standalone/.next/static/chunks/0eledkadcprk3.js +1 -0
- package/.next/standalone/.next/static/chunks/0f04ma94_t32g.js +16 -0
- package/.next/standalone/.next/static/chunks/{0zgde2~kd4r.x.js → 0fe99e3vjh08f.js} +1 -1
- package/.next/standalone/.next/static/chunks/0fjl0qhyaiq8_.js +1 -0
- package/.next/standalone/.next/static/chunks/0fq~w9fqllgym.js +25 -0
- package/.next/standalone/.next/static/chunks/0h4_jo8dw7z07.js +1 -0
- package/.next/standalone/.next/static/chunks/0ho64go6.dk2j.js +1 -0
- package/.next/standalone/.next/static/chunks/0i.mswv9.fh.y.js +1 -0
- package/.next/standalone/.next/static/chunks/0jckr4.c_ydck.js +1 -0
- package/.next/standalone/.next/static/chunks/0jfnx~s5fhzop.js +1 -0
- package/.next/standalone/.next/static/chunks/0jlwnzphd~x2n.js +1 -0
- package/.next/standalone/.next/static/chunks/{09vwjd8b2iu9z.js → 0jrvo~4zrssmr.js} +1 -1
- package/.next/standalone/.next/static/chunks/0jux26vr_9f3j.js +16 -0
- package/.next/standalone/.next/static/chunks/{0szl_dovu0hgw.js → 0kbvx8fek6-wx.js} +1 -1
- package/.next/standalone/.next/static/chunks/0kgbmub.~n57_.js +1 -0
- package/.next/standalone/.next/static/chunks/{0-wv6sqgkc5wn.js → 0kmmaeod1s.vw.js} +1 -1
- package/.next/standalone/.next/static/chunks/0ky_fbnkmgw7q.js +1 -0
- package/.next/standalone/.next/static/chunks/0n.6yhpaevnz8.js +5 -0
- package/.next/standalone/.next/static/chunks/0nfea.nmg9qb1.js +1 -0
- package/.next/standalone/.next/static/chunks/{0kduo1cn7.pw0.js → 0nrajy77zpml1.js} +1 -1
- package/.next/standalone/.next/static/chunks/{038s7u_er9zkt.js → 0odkktrw2jut5.js} +1 -1
- package/.next/standalone/.next/static/chunks/0ot3qpr3oci.i.js +1 -0
- package/.next/standalone/.next/static/chunks/0oy0bdczs6jt8.js +1 -0
- package/.next/standalone/.next/static/chunks/0pag.t~kqlyp3.js +1 -0
- package/.next/standalone/.next/static/chunks/0pt89sjdo2ipr.js +1 -0
- package/.next/standalone/.next/static/chunks/{119llmw30g8ci.js → 0qwx.1h21gux4.js} +1 -1
- package/.next/standalone/.next/static/chunks/0rxc9kp0e79gt.js +1 -0
- package/.next/standalone/.next/static/chunks/{0suuptk6vxdav.js → 0s3as241o1mvo.js} +1 -1
- package/.next/standalone/.next/static/chunks/0sk1~xt8d6eoe.js +1 -0
- package/.next/standalone/.next/static/chunks/{04q2v0ev2_m6..js → 0sp1248q.hqf1.js} +14 -14
- package/.next/standalone/.next/static/chunks/0ssj2l353r77p.js +1 -0
- package/.next/standalone/.next/static/chunks/0swujoqiaycd1.js +16 -0
- package/.next/standalone/.next/static/chunks/0sz2qp_r_~kqm.js +1 -0
- package/.next/standalone/.next/static/chunks/0tcl5-wzvdvh5.js +1 -0
- package/.next/standalone/.next/static/chunks/{0laeq9nzminux.js → 0tg_xz8-y12iw.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0nr0sc2w3n.t5.js → 0u0j5g_n8yfug.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0n7jmg60eqx1a.js → 0u0tuq5t1k65o.js} +1 -1
- package/.next/standalone/.next/static/chunks/{09vzrni555ktn.js → 0u27983xn~~l-.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0cir.n19rqu--.js → 0vb_8vnjxy5d5.js} +3 -3
- package/.next/standalone/.next/static/chunks/0vgi6hb2nblyr.js +1 -0
- package/.next/standalone/.next/static/chunks/0vp09ip~b_3vk.js +1 -0
- package/.next/standalone/.next/static/chunks/{0s.jetayn5dov.js → 0w4iuufjlhqgh.js} +1 -1
- package/.next/standalone/.next/static/chunks/0xkgug8yajfut.css +1 -0
- package/.next/standalone/.next/static/chunks/0y-6.52zsn5h_.js +1 -0
- package/.next/standalone/.next/static/chunks/0zjazky.ffn.5.js +1 -0
- package/.next/standalone/.next/static/chunks/{0g3stahwz~vh..js → 0zqs7o6kl6cen.js} +2 -2
- package/.next/standalone/.next/static/chunks/0z~czj2_621fq.js +1 -0
- package/.next/standalone/.next/static/chunks/0~j4u9753jf1d.js +1 -0
- package/.next/standalone/.next/static/chunks/0~ln-rekt-0tf.js +1 -0
- package/.next/standalone/.next/static/chunks/0~nc~.u7n58cn.js +1 -0
- package/.next/standalone/.next/static/chunks/0~np-8bf4t.r-.js +13 -0
- package/.next/standalone/.next/static/chunks/0~nt8sh~v.8xl.js +1 -0
- package/.next/standalone/.next/static/chunks/{0cf9hfx9kzqzb.js → 11qkofozxwb7-.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0-0~b1fbfsoe~.js → 123.1tju3vua2.js} +1 -1
- package/.next/standalone/.next/static/chunks/12euqjbocagwt.js +12 -0
- package/.next/standalone/.next/static/chunks/12jwdr.-.hy1i.js +1 -0
- package/.next/standalone/.next/static/chunks/13o8~8tv2fn~3.js +1 -0
- package/.next/standalone/.next/static/chunks/14l28wdk~4pdq.js +24 -0
- package/.next/standalone/.next/static/chunks/15fxeeh5uenh3.js +1 -0
- package/.next/standalone/.next/static/chunks/15lb7b31.h8mg.js +1 -0
- package/.next/standalone/.next/static/chunks/15t.i9ua4pzb8.js +1 -0
- package/.next/standalone/.next/static/chunks/{10a.wwlnw50l5.js → 16ec1gvsgte06.js} +1 -1
- package/.next/standalone/.next/static/chunks/16eok15c7...d.js +1 -0
- package/.next/standalone/.next/static/chunks/17_b-3tuiu.b3.js +1 -0
- package/.next/standalone/.next/static/chunks/{0~o730huopa91.js → 17_gs~3jl212-.js} +1 -1
- package/.next/standalone/.next/static/chunks/17o5i93-p9y8p.js +1 -0
- package/.next/standalone/.next/static/chunks/180mwv20.t.r5.js +1 -0
- package/.next/standalone/.next/static/chunks/{0nqofghl.17w_.js → 18bw2zz5ejwop.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0heaqdupr4xj6.js → turbopack-02undbvb.95yf.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-14fnzd5yh28gy.js → turbopack-0hhd0k47o3zqx.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0g2bivvnd2gyd.js → turbopack-0npdg9_tz9kge.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0w89gj59tho~b.js → turbopack-0vo-yp2tf_zye.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0rntg0~hh7h.0.js → turbopack-0x9g~5tbkb3z6.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0.6hkxuraykc4.js → turbopack-0ykf3nc1yfrio.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0~gn911-6yqk2.js → turbopack-0yuo~n90_i6mk.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0sk1uk-fkcqdx.js → turbopack-14age6cyn.1v1.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0jcfxeuy1ge85.js → turbopack-17_zn5.-e_pwc.js} +1 -1
- package/.next/standalone/messages/de/settings.json +21 -2
- package/.next/standalone/messages/de/timeline.json +2 -2
- package/.next/standalone/messages/en/settings.json +21 -2
- package/.next/standalone/messages/en/timeline.json +2 -2
- package/.next/standalone/messages/es/settings.json +21 -2
- package/.next/standalone/messages/es/timeline.json +2 -2
- package/.next/standalone/messages/fr/settings.json +21 -2
- package/.next/standalone/messages/fr/timeline.json +2 -2
- package/.next/standalone/messages/ja/settings.json +21 -2
- package/.next/standalone/messages/ja/timeline.json +2 -2
- package/.next/standalone/messages/ko/settings.json +21 -2
- package/.next/standalone/messages/ko/timeline.json +2 -2
- package/.next/standalone/messages/pt-BR/settings.json +21 -2
- package/.next/standalone/messages/pt-BR/timeline.json +2 -2
- package/.next/standalone/messages/ru/settings.json +21 -2
- package/.next/standalone/messages/ru/timeline.json +2 -2
- package/.next/standalone/messages/tr/settings.json +21 -2
- package/.next/standalone/messages/tr/timeline.json +2 -2
- package/.next/standalone/messages/zh-CN/settings.json +21 -2
- package/.next/standalone/messages/zh-CN/timeline.json +2 -2
- package/.next/standalone/messages/zh-TW/settings.json +21 -2
- package/.next/standalone/messages/zh-TW/timeline.json +2 -2
- package/.next/standalone/package.json +3 -18
- package/.next/standalone/server.js +1 -1
- package/dist/server.js +72 -37
- package/package.json +3 -18
- package/.next/standalone/.next/server/chunks/[externals]__07eo6bi._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00blz4b._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00erel2._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00keyoc._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00rusjd._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07d3bxo._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07o3h27._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0a7jyyu._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0an3.o.._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ftuoz8._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0f~d9ug._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ge78._._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0il~az0._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0imsr4v._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0j.h25r._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0j.iwzl._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0jnxiiv._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0jzp9~o._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0k-me_v._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l5~4k1._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0mq5lip._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0nh5fcb._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0nwq7wo._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0nzphpn._.js +0 -5
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qslqkf._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0u_xzjy._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0uf.iy5._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0v9vm~c._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0vdn0s8._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0vr68v2._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xg~7a2._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xoflea._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__108dnsu._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__12t3f_q._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__13e34kx._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0-mzwe.._.js +0 -3
- package/.next/standalone/.next/server/chunks/_00w4xwx._.js +0 -3
- package/.next/standalone/.next/server/chunks/_00xyelm._.js +0 -3
- package/.next/standalone/.next/server/chunks/_019w2er._.js +0 -3
- package/.next/standalone/.next/server/chunks/_01shkub._.js +0 -3
- package/.next/standalone/.next/server/chunks/_048rfcr._.js +0 -3
- package/.next/standalone/.next/server/chunks/_04tsf.p._.js +0 -3
- package/.next/standalone/.next/server/chunks/_04wz5fx._.js +0 -3
- package/.next/standalone/.next/server/chunks/_05xvbu4._.js +0 -3
- package/.next/standalone/.next/server/chunks/_06ntp-s._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0763djt._.js +0 -3
- package/.next/standalone/.next/server/chunks/_07dkduh._.js +0 -3
- package/.next/standalone/.next/server/chunks/_07g1_zx._.js +0 -3
- package/.next/standalone/.next/server/chunks/_08hfr9b._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0_7my__._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0_wofwd._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0f2px04._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0j.srxq._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0py_7vt._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0r3d5qz._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0rh64c3._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0swnrzn._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0w-k~4g._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0y9vgfm._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0zym6f2._.js +0 -3
- package/.next/standalone/.next/server/chunks/_10i3z4~._.js +0 -3
- package/.next/standalone/.next/server/chunks/_13_e4ue._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__023cjc5._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08dxtof._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0glt298._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0-9ezhb._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_00zsk6a._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_018tm~n._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_01l~by9._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_02rms4q._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_05bq96_._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_06_8vkn._.js +0 -18
- package/.next/standalone/.next/server/chunks/ssr/_078y4dk._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0_b1pqf._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0fota2a._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0hmni4d._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0j87~j9._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0m6flec._.js +0 -18
- package/.next/standalone/.next/server/chunks/ssr/_0nbe6mv._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0o0~1bt._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0pg-q18._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0qov9e_._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0w.1ts8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0w6jc9p._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0xdbgmz._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0z4bg3i._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1289s74._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_0_2gaq0._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_0ydhwnx._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_0~y8-_1._.js +0 -7
- package/.next/standalone/.next/server/chunks/ssr/node_modules_105or.6._.js +0 -7
- package/.next/standalone/.next/server/chunks/ssr/node_modules_1294wzs._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_030gj7p._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_04tdvwp._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_@base-ui_0bdox2f._.js +0 -3
- package/.next/standalone/.next/static/chunks/0.4j~sc70rsrv.js +0 -1
- package/.next/standalone/.next/static/chunks/0.p~i94j58w8~.js +0 -1
- package/.next/standalone/.next/static/chunks/0.znxwgo-re2m.js +0 -1
- package/.next/standalone/.next/static/chunks/01.oujz.z9cq..js +0 -1
- package/.next/standalone/.next/static/chunks/0176ysv-agwwx.js +0 -1
- package/.next/standalone/.next/static/chunks/01fkwofcdqa6f.js +0 -1
- package/.next/standalone/.next/static/chunks/031unywm42_xs.js +0 -1
- package/.next/standalone/.next/static/chunks/034iwnjckh0il.js +0 -5
- package/.next/standalone/.next/static/chunks/03s5e91.zrsi_.js +0 -16
- package/.next/standalone/.next/static/chunks/04h2nxywvycry.js +0 -1
- package/.next/standalone/.next/static/chunks/051z~faikiw.t.js +0 -1
- package/.next/standalone/.next/static/chunks/059bbrow.p4tj.js +0 -1
- package/.next/standalone/.next/static/chunks/05tuw5nb50jqc.js +0 -1
- package/.next/standalone/.next/static/chunks/05zk.ks4roh-4.js +0 -24
- package/.next/standalone/.next/static/chunks/075ypo7pvlqvz.js +0 -1
- package/.next/standalone/.next/static/chunks/094_-.5.ue3p4.js +0 -1
- package/.next/standalone/.next/static/chunks/09ntfl7b8vh1y.js +0 -1
- package/.next/standalone/.next/static/chunks/0_7~rgbkmfo_p.js +0 -1
- package/.next/standalone/.next/static/chunks/0_psc1~qmka.m.js +0 -12
- package/.next/standalone/.next/static/chunks/0amz67ga8kcr7.js +0 -1
- package/.next/standalone/.next/static/chunks/0ap~c~__qw2_0.js +0 -25
- package/.next/standalone/.next/static/chunks/0b__~uq5xxl7i.js +0 -1
- package/.next/standalone/.next/static/chunks/0celh22a.~-u6.js +0 -1
- package/.next/standalone/.next/static/chunks/0do_uad33n8hv.js +0 -1
- package/.next/standalone/.next/static/chunks/0dwxj97xm70gv.js +0 -1
- package/.next/standalone/.next/static/chunks/0euxle0n3zjm3.js +0 -1
- package/.next/standalone/.next/static/chunks/0fax5v7rwhm7g.js +0 -6
- package/.next/standalone/.next/static/chunks/0fj1a4qnwy9s3.js +0 -1
- package/.next/standalone/.next/static/chunks/0g6r03ctl6d0y.js +0 -1
- package/.next/standalone/.next/static/chunks/0gfoib7v3q4k_.js +0 -1
- package/.next/standalone/.next/static/chunks/0hrsfwzxhrdg9.js +0 -1
- package/.next/standalone/.next/static/chunks/0jml98og5gb-~.js +0 -1
- package/.next/standalone/.next/static/chunks/0k-8shbo0tie5.js +0 -1
- package/.next/standalone/.next/static/chunks/0kep81gqgj5f5.js +0 -24
- package/.next/standalone/.next/static/chunks/0kriln8d9.mdo.js +0 -1
- package/.next/standalone/.next/static/chunks/0l.88yoxq6tq8.js +0 -24
- package/.next/standalone/.next/static/chunks/0lrjdru2bjp.x.js +0 -1
- package/.next/standalone/.next/static/chunks/0m4185ccd6adw.js +0 -1
- package/.next/standalone/.next/static/chunks/0nm1wy7i1z64_.js +0 -1
- package/.next/standalone/.next/static/chunks/0o1duxjxx_ar8.css +0 -1
- package/.next/standalone/.next/static/chunks/0o24wzcc3lhqj.js +0 -1
- package/.next/standalone/.next/static/chunks/0oh5xnzizgxt1.js +0 -1
- package/.next/standalone/.next/static/chunks/0oj36.r5qgu_7.js +0 -1
- package/.next/standalone/.next/static/chunks/0p2m6i37_wprv.js +0 -1
- package/.next/standalone/.next/static/chunks/0pojknlc_-2a2.js +0 -1
- package/.next/standalone/.next/static/chunks/0pyrh4zs52aog.js +0 -1
- package/.next/standalone/.next/static/chunks/0qz-agdkp9v1q.js +0 -16
- package/.next/standalone/.next/static/chunks/0t5w4x7owhfbe.js +0 -1
- package/.next/standalone/.next/static/chunks/0tmyyb67fvkg1.js +0 -1
- package/.next/standalone/.next/static/chunks/0un7lj6-.1ad3.js +0 -5
- package/.next/standalone/.next/static/chunks/0v1teptb865rv.js +0 -1
- package/.next/standalone/.next/static/chunks/0vdw2~trmzg71.js +0 -1
- package/.next/standalone/.next/static/chunks/0x2nrv0y7ik9o.js +0 -1
- package/.next/standalone/.next/static/chunks/0x9prsaq~w.t-.js +0 -1
- package/.next/standalone/.next/static/chunks/0xa1.t1vj1mw0.js +0 -1
- package/.next/standalone/.next/static/chunks/0xfp8sfehtui9.js +0 -1
- package/.next/standalone/.next/static/chunks/0y.tsl2t9e.n..js +0 -1
- package/.next/standalone/.next/static/chunks/0zj5rfbadmr-8.js +0 -1
- package/.next/standalone/.next/static/chunks/0zkmymf6bhpsj.js +0 -1
- package/.next/standalone/.next/static/chunks/0~-0t4i~p3pcf.js +0 -1
- package/.next/standalone/.next/static/chunks/0~2x5.s5syxpx.js +0 -1
- package/.next/standalone/.next/static/chunks/12f3vk2rnkb8u.js +0 -13
- package/.next/standalone/.next/static/chunks/14kx686__yikg.js +0 -1
- package/.next/standalone/.next/static/chunks/14vposxx99rq4.js +0 -1
- package/.next/standalone/.next/static/chunks/1617_g18pxhs7.js +0 -1
- package/.next/standalone/.next/static/chunks/166~a4sl8v944.js +0 -1
- package/.next/standalone/.next/static/chunks/168.xhj-0lt8a.js +0 -16
- package/.next/standalone/.next/static/chunks/179vwj~zm1gya.js +0 -1
- package/.next/standalone/.next/static/chunks/17d9mnk-k8oqi.js +0 -1
- package/.next/standalone/.next/static/chunks/17z_vu-9k57ay.js +0 -1
- /package/.next/standalone/.next/static/{pZhcwQ83aP87HDTIzzyJ6 → Fvh2ZScb-GvlCulutSHF4}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{pZhcwQ83aP87HDTIzzyJ6 → Fvh2ZScb-GvlCulutSHF4}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[255811,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),i=e.i(262950),s=e.i(233405),o=e.i(224361),n=e.i(459015),l=e.i(25146);let u=(0,o.promisify)(s.execFile),d=(0,l.createLogger)("commit-diff"),f=/^[0-9a-f]{4,40}$/i,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,a=e.query.hash;if(!r||!a)return t.status(400).json({error:"session and hash parameters required"});if(!f.test(a))return t.status(400).json({error:"Invalid hash format"});if(!await (0,n.hasSession)(r))return t.status(404).json({error:"Session not found"});let i=await (0,n.getSessionCwd)(r);if(!i)return t.status(500).json({error:"Failed to get CWD"});try{let{stdout:e}=await u("git",["-C",i,"log","-1","--format=%H\x1f%P\x1f%an\x1f%ae\x1f%at\x1f%s\x1f%b",a],{timeout:1e4}),r=e.replace(/\n$/,"").split("\x1f");if(r.length<7)return t.status(404).json({error:"Commit not found"});let[s,o,n,l,d,f,...p]=r,m=o.trim()?o.trim().split(/\s+/):[],c={hash:s,shortHash:s.slice(0,7),subject:f,body:p.join("\x1f").trim(),author:n,email:l,timestamp:1e3*parseInt(d,10),parents:m},h=0===m.length?["-C",i,"show","--format=",s]:["-C",i,"diff",`${s}^..${s}`],{stdout:g}=await u("git",h,{timeout:1e4,maxBuffer:0xa00000});return t.status(200).json({commit:c,diff:g})}catch(e){return d.error(`commit-diff failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to get commit diff"})}};e.s(["default",0,p],960498);var m=e.i(960498),c=e.i(7031),h=e.i(181927),g=e.i(846432);let v=(0,i.hoist)(m,"default"),x=(0,i.hoist)(m,"config"),w=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/layout/commit-diff",pathname:"/api/layout/commit-diff",bundlePath:"",filename:""},userland:m,distDir:".next",relativeProjectDir:""});async function y(e,r,a){a.requestMeta&&(0,g.setRequestMeta)(e,a.requestMeta),w.isDev&&(0,g.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/layout/commit-diff";i=i.replace(/\/index$/,"")||"/";let s=await w.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:o,params:n,prerenderManifest:l,routerServerContext:u}=s;try{let t,a=e.method||"GET",s=(0,c.getTracer)(),d=s.getActiveScopeSpan(),f=!!(null==u?void 0:u.isWrappedByNextServer),p=w.instrumentationOnRequestError.bind(w),m=async d=>w.render(e,r,{query:{...o,...n},params:n,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:l.preview,propagateError:!1,dev:w.isDev,page:"/api/layout/commit-diff",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>p(e,...t)}).finally(()=>{if(!d)return;d.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=s.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==h.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let o=e.get("next.route");if(o){let e=`${a} ${o}`;d.setAttributes({"next.route":o,"http.route":o,"next.span_name":e}),d.updateName(e),t&&t!==d&&(t.setAttribute("http.route",o),t.updateName(e))}else d.updateName(`${a} ${i}`)});f&&d?await m(d):(t=s.getActiveScopeSpan(),await s.withPropagatedContext(e.headers,()=>s.trace(h.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:c.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},m),void 0,!f))}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,x,"default",0,v,"handler",0,y],255811)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=node_modules_next_dist_esm_build_templates_pages-api_054vaqw.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[295055,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),n=e.i(262950),i=e.i(459015);let s=(0,e.i(25146).createLogger)("tmux"),o=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let r=e.query.session;if(!r)return t.status(400).json({error:"session parameter required"});if(!await (0,i.hasSession)(r))return t.status(404).json({error:"Session not found"});try{let e=await (0,i.capturePaneContent)(r);return t.status(200).json({content:e??""})}catch(e){return s.error(`capture failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to capture pane"})}};e.s(["default",0,o],798167);var u=e.i(798167),l=e.i(7031),d=e.i(181927),p=e.i(846432);let c=(0,n.hoist)(u,"default"),h=(0,n.hoist)(u,"config"),v=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/tmux/capture",pathname:"/api/tmux/capture",bundlePath:"",filename:""},userland:u,distDir:".next",relativeProjectDir:""});async function m(e,r,a){a.requestMeta&&(0,p.setRequestMeta)(e,a.requestMeta),v.isDev&&(0,p.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let n="/api/tmux/capture";n=n.replace(/\/index$/,"")||"/";let i=await v.prepare(e,r,{srcPage:n});if(!i){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:s,params:o,prerenderManifest:u,routerServerContext:c}=i;try{let t,a=e.method||"GET",i=(0,l.getTracer)(),p=i.getActiveScopeSpan(),h=!!(null==c?void 0:c.isWrappedByNextServer),m=v.instrumentationOnRequestError.bind(v),f=async l=>v.render(e,r,{query:{...s,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:u.preview,propagateError:!1,dev:v.isDev,page:"/api/tmux/capture",internalRevalidate:null==c?void 0:c.revalidate,onError:(...t)=>m(e,...t)}).finally(()=>{if(!l)return;l.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 s=e.get("next.route");if(s){let e=`${a} ${s}`;l.setAttributes({"next.route":s,"http.route":s,"next.span_name":e}),l.updateName(e),t&&t!==l&&(t.setAttribute("http.route",s),t.updateName(e))}else l.updateName(`${a} ${n}`)});h&&p?await f(p):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(d.BaseServerSpan.handleRequest,{spanName:`${a} ${n}`,kind:l.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},f),void 0,!h))}catch(e){if(v.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,h,"default",0,c,"handler",0,m],295055)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=node_modules_next_dist_esm_build_templates_pages-api_05soyh7.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[891870,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),s=e.i(262950),i=e.i(459015);let n=(0,e.i(25146).createLogger)("layout"),o=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,a]=await Promise.all([(0,i.getSessionCwd)(r),(0,i.getLastCommand)(r)]);if(!e)return t.status(500).json({error:"Failed to get CWD"});return t.status(200).json({cwd:e,lastCommand:a})}catch(e){return n.error(`cwd query failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to get CWD"})}};e.s(["default",0,o],18541);var l=e.i(18541),u=e.i(7031),d=e.i(181927),p=e.i(846432);let c=(0,s.hoist)(l,"default"),h=(0,s.hoist)(l,"config"),v=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/layout/cwd",pathname:"/api/layout/cwd",bundlePath:"",filename:""},userland:l,distDir:".next",relativeProjectDir:""});async function g(e,r,a){a.requestMeta&&(0,p.setRequestMeta)(e,a.requestMeta),v.isDev&&(0,p.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/api/layout/cwd";s=s.replace(/\/index$/,"")||"/";let i=await v.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:o,prerenderManifest:l,routerServerContext:c}=i;try{let t,a=e.method||"GET",i=(0,u.getTracer)(),p=i.getActiveScopeSpan(),h=!!(null==c?void 0:c.isWrappedByNextServer),g=v.instrumentationOnRequestError.bind(v),f=async u=>v.render(e,r,{query:{...n,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:l.preview,propagateError:!1,dev:v.isDev,page:"/api/layout/cwd",internalRevalidate:null==c?void 0:c.revalidate,onError:(...t)=>g(e,...t)}).finally(()=>{if(!u)return;u.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=i.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==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 n=e.get("next.route");if(n){let e=`${a} ${n}`;u.setAttributes({"next.route":n,"http.route":n,"next.span_name":e}),u.updateName(e),t&&t!==u&&(t.setAttribute("http.route",n),t.updateName(e))}else u.updateName(`${a} ${s}`)});h&&p?await f(p):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(d.BaseServerSpan.handleRequest,{spanName:`${a} ${s}`,kind:u.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},f),void 0,!h))}catch(e){if(v.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,h,"default",0,c,"handler",0,g],891870)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=node_modules_next_dist_esm_build_templates_pages-api_0dag3xq.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[285788,e=>{"use strict";var t=e.i(926747),r=e.i(190406),n=e.i(244898),a=e.i(262950),i=e.i(233405),s=e.i(224361),o=e.i(924868),l=e.i(814747),u=e.i(459015),d=e.i(25146);let c=(0,s.promisify)(i.execFile),p=(0,d.createLogger)("file-content"),f="WORKTREE",y=/^[A-Za-z0-9][A-Za-z0-9_\-/.^~]{0,200}$/,h={content:"",truncated:!1,binary:!1},v=e=>{if(!e||Array.isArray(e)||"/dev/null"===e||e.includes("\0")||e.startsWith("/"))return null;let t=0;for(let r of e.split("/"))if(""!==r&&"."!==r)if(".."===r){if((t-=1)<0)return null}else t+=1;return e},g=(e,t)=>{let r=Array.isArray(e)?e[0]:e;return r?r===f?f:y.test(r)?r:null:t},w=e=>e.length>1e6?{content:"",truncated:!0,binary:!1}:e.includes(0)?{content:"",truncated:!1,binary:!0}:{content:e.toString("utf8"),truncated:!1,binary:!1},m=async(e,t,r)=>{try{let{stdout:n}=await c("git",["-C",e,"show",`${t}:${r}`],{timeout:1e4,maxBuffer:1001024,encoding:"buffer"});return w(n)}catch{return h}},q=async(e,t)=>{try{let r=(0,l.resolve)(e,t);if(r!==e&&!r.startsWith(e+l.sep))return h;let n=await (0,o.readFile)(r);return w(n)}catch{return h}},R=(e,t,r)=>r?t===f?q(e,r):m(e,t,r):Promise.resolve(h),S=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let r="string"==typeof e.query.session?e.query.session:void 0;if(!r)return t.status(400).json({error:"session parameter required"});let n=v(e.query.oldPath),a=v(e.query.newPath),i=g(e.query.oldRef,"HEAD"),s=g(e.query.newRef,f);if(!i||!s)return t.status(400).json({error:"Invalid ref"});if(!n&&!a)return t.status(400).json({error:"oldPath or newPath required"});if(!await (0,u.hasSession)(r))return t.status(404).json({error:"Session not found"});let o=await (0,u.getSessionCwd)(r);if(!o)return t.status(500).json({error:"Failed to get CWD"});try{let[e,r]=await Promise.all([R(o,i,n),R(o,s,a)]),l=e.truncated||r.truncated,u=e.binary||r.binary;return t.status(200).json({oldContent:l||u?"":e.content,newContent:l||u?"":r.content,truncated:l,binary:u})}catch(e){return p.error(`file-content failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to get file content"})}};e.s(["default",0,S],447353);var A=e.i(447353),P=e.i(7031),b=e.i(181927),x=e.i(846432);let E=(0,a.hoist)(A,"default"),$=(0,a.hoist)(A,"config"),j=new n.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/layout/file-content",pathname:"/api/layout/file-content",bundlePath:"",filename:""},userland:A,distDir:".next",relativeProjectDir:""});async function C(e,r,n){n.requestMeta&&(0,x.setRequestMeta)(e,n.requestMeta),j.isDev&&(0,x.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let a="/api/layout/file-content";a=a.replace(/\/index$/,"")||"/";let i=await j.prepare(e,r,{srcPage:a});if(!i){r.statusCode=400,r.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve());return}let{query:s,params:o,prerenderManifest:l,routerServerContext:u}=i;try{let t,n=e.method||"GET",i=(0,P.getTracer)(),d=i.getActiveScopeSpan(),c=!!(null==u?void 0:u.isWrappedByNextServer),p=j.instrumentationOnRequestError.bind(j),f=async d=>j.render(e,r,{query:{...s,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:l.preview,propagateError:!1,dev:j.isDev,page:"/api/layout/file-content",internalRevalidate:null==u?void 0:u.revalidate,onError:(...t)=>p(e,...t)}).finally(()=>{if(!d)return;d.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=i.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==b.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=`${n} ${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(`${n} ${a}`)});c&&d?await f(d):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(b.BaseServerSpan.handleRequest,{spanName:`${n} ${a}`,kind:P.SpanKind.SERVER,attributes:{"http.method":n,"http.target":e.url}},f),void 0,!c))}catch(e){if(j.isDev)throw e;(0,t.sendError)(r,500,"Internal Server Error")}finally{null==n.waitUntil||n.waitUntil.call(n,Promise.resolve())}}e.s(["config",0,$,"default",0,E,"handler",0,C],285788)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=node_modules_next_dist_esm_build_templates_pages-api_0drg5k..js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[426427,e=>{"use strict";var t=e.i(926747),r=e.i(190406),s=e.i(244898),a=e.i(262950),i=e.i(233405),n=e.i(224361),o=e.i(459015),u=e.i(25146);let d=(0,n.promisify)(i.execFile),l=(0,u.createLogger)("git-sync"),p=async(e,t)=>{try{let{stdout:r,stderr:s}=await d("git",["-C",e,...t],{timeout:3e4,maxBuffer:2097152});return{ok:!0,stdout:r,stderr:s,killed:!1}}catch(e){return{ok:!1,stdout:e.stdout??"",stderr:e.stderr??e.message??"",killed:!!e.killed}}},c=e=>{if(e.killed)return"timeout";let t=(e.stderr+"\n"+e.stdout).toLowerCase();return t.includes("no upstream")||t.includes("no tracking information")?"no-upstream":t.includes("authentication failed")||t.includes("permission denied")||t.includes("could not read from remote")||t.includes("invalid credentials")?"auth":t.includes("would be overwritten by merge")||t.includes("would be overwritten by checkout")||t.includes("commit your changes or stash them")?"local-changes":t.includes("divergent")||t.includes("not possible to fast-forward")||t.includes("non-fast-forward")?e.stderr.toLowerCase().includes("push")?"rejected":"diverged":t.includes("rejected")||t.includes("updates were rejected")?"rejected":"unknown"},h=async e=>{let t=await p(e,["rev-list","--left-right","--count","HEAD...@{upstream}"]);if(!t.ok)return{ahead:0,behind:0};let r=t.stdout.trim().split(/\s+/);return{ahead:parseInt(r[0],10)||0,behind:parseInt(r[1],10)||0}},m=e=>({name:e,ok:!1,skipped:!0,stdout:"",stderr:""}),f=async(e,t)=>{if("POST"!==e.method)return t.setHeader("Allow","POST"),t.status(405).json({error:"Method not allowed"});let r=e.query.session;if(!r)return t.status(400).json({error:"session parameter required"});if(!await (0,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"});if(!(await p(s,["rev-parse","--is-inside-work-tree"])).ok)return t.status(400).json({error:"Not a git repository"});let a=await p(s,["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"]),i=a.ok?a.stdout.trim():null;if(!i){let e=await p(s,["rev-parse","--abbrev-ref","HEAD"]),r=e.ok?e.stdout.trim():"HEAD";return t.status(200).json({ok:!1,steps:[],summary:{pulled:0,pushed:0},upstream:null,branch:r,errorKind:"no-upstream"})}let n=[],u=await p(s,["fetch","--prune"]);if(n.push({name:"fetch",ok:u.ok,skipped:!1,stdout:u.stdout,stderr:u.stderr}),!u.ok)return l.warn(`fetch failed: ${u.stderr}`),n.push(m("pull")),n.push(m("push")),t.status(200).json({ok:!1,steps:n,summary:{pulled:0,pushed:0},upstream:i,errorKind:c(u)});let{behind:d}=await h(s),f=0;if(d>0){let e=await p(s,["pull","--ff-only"]);if(n.push({name:"pull",ok:e.ok,skipped:!1,stdout:e.stdout,stderr:e.stderr}),!e.ok)return l.warn(`pull failed: ${e.stderr}`),n.push(m("push")),t.status(200).json({ok:!1,steps:n,summary:{pulled:0,pushed:0},upstream:i,errorKind:c(e)});f=d}else n.push(m("pull"));let{ahead:w}=await h(s),g=0;if(w>0){let e=await p(s,["push"]);if(n.push({name:"push",ok:e.ok,skipped:!1,stdout:e.stdout,stderr:e.stderr}),!e.ok)return l.warn(`push failed: ${e.stderr}`),t.status(200).json({ok:!1,steps:n,summary:{pulled:f,pushed:0},upstream:i,errorKind:c(e)});g=w}else n.push(m("push"));return t.status(200).json({ok:!0,steps:n,summary:{pulled:f,pushed:g},upstream:i})};e.s(["default",0,f],362781);var w=e.i(362781),g=e.i(7031),v=e.i(181927),k=e.i(846432);let y=(0,a.hoist)(w,"default"),b=(0,a.hoist)(w,"config"),S=new s.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/git/sync",pathname:"/api/git/sync",bundlePath:"",filename:""},userland:w,distDir:".next",relativeProjectDir:""});async function j(e,r,s){s.requestMeta&&(0,k.setRequestMeta)(e,s.requestMeta),S.isDev&&(0,k.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let a="/api/git/sync";a=a.replace(/\/index$/,"")||"/";let i=await S.prepare(e,r,{srcPage:a});if(!i){r.statusCode=400,r.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve());return}let{query:n,params:o,prerenderManifest:u,routerServerContext:d}=i;try{let t,s=e.method||"GET",i=(0,g.getTracer)(),l=i.getActiveScopeSpan(),p=!!(null==d?void 0:d.isWrappedByNextServer),c=S.instrumentationOnRequestError.bind(S),h=async l=>S.render(e,r,{query:{...n,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:u.preview,propagateError:!1,dev:S.isDev,page:"/api/git/sync",internalRevalidate:null==d?void 0:d.revalidate,onError:(...t)=>c(e,...t)}).finally(()=>{if(!l)return;l.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=`${s} ${n}`;l.setAttributes({"next.route":n,"http.route":n,"next.span_name":e}),l.updateName(e),t&&t!==l&&(t.setAttribute("http.route",n),t.updateName(e))}else l.updateName(`${s} ${a}`)});p&&l?await h(l):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(v.BaseServerSpan.handleRequest,{spanName:`${s} ${a}`,kind:g.SpanKind.SERVER,attributes:{"http.method":s,"http.target":e.url}},h),void 0,!p))}catch(e){if(S.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,b,"default",0,y,"handler",0,j],426427)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=node_modules_next_dist_esm_build_templates_pages-api_0qpjud8.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[668144,e=>{"use strict";var t=e.i(926747),s=e.i(190406),a=e.i(244898),r=e.i(262950),i=e.i(459015);let n=async(e,t)=>{let s=await (0,i.listSessions)();t.status(200).json({count:s.length})};e.s(["default",0,n],877394);var o=e.i(877394),l=e.i(7031),u=e.i(181927),d=e.i(846432);let p=(0,r.hoist)(o,"default"),c=(0,r.hoist)(o,"config"),v=new a.PagesAPIRouteModule({definition:{kind:s.RouteKind.PAGES_API,page:"/api/system/tmux-sessions",pathname:"/api/system/tmux-sessions",bundlePath:"",filename:""},userland:o,distDir:".next",relativeProjectDir:""});async function m(e,s,a){a.requestMeta&&(0,d.setRequestMeta)(e,a.requestMeta),v.isDev&&(0,d.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let r="/api/system/tmux-sessions";r=r.replace(/\/index$/,"")||"/";let i=await v.prepare(e,s,{srcPage:r});if(!i){s.statusCode=400,s.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:n,params:o,prerenderManifest:p,routerServerContext:c}=i;try{let t,a=e.method||"GET",i=(0,l.getTracer)(),d=i.getActiveScopeSpan(),m=!!(null==c?void 0:c.isWrappedByNextServer),h=v.instrumentationOnRequestError.bind(v),g=async l=>v.render(e,s,{query:{...n,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:p.preview,propagateError:!1,dev:v.isDev,page:"/api/system/tmux-sessions",internalRevalidate:null==c?void 0:c.revalidate,onError:(...t)=>h(e,...t)}).finally(()=>{if(!l)return;l.setAttributes({"http.status_code":s.statusCode,"next.rsc":!1});let e=i.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${e.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=e.get("next.route");if(n){let e=`${a} ${n}`;l.setAttributes({"next.route":n,"http.route":n,"next.span_name":e}),l.updateName(e),t&&t!==l&&(t.setAttribute("http.route",n),t.updateName(e))}else l.updateName(`${a} ${r}`)});m&&d?await g(d):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(u.BaseServerSpan.handleRequest,{spanName:`${a} ${r}`,kind:l.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},g),void 0,!m))}catch(e){if(v.isDev)throw e;(0,t.sendError)(s,500,"Internal Server Error")}finally{null==a.waitUntil||a.waitUntil.call(a,Promise.resolve())}}e.s(["config",0,c,"default",0,p,"handler",0,m],668144)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=node_modules_next_dist_esm_build_templates_pages-api_0to2msc.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[360190,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),n=e.i(262950),i=e.i(459015);let s=(0,e.i(25146).createLogger)("tmux"),o=async(e,t)=>{if("POST"!==e.method)return t.setHeader("Allow","POST"),t.status(405).json({error:"Method not allowed"});let{session:r,input:a}=e.body;if(!r||!a)return t.status(400).json({error:"session and input parameters required"});if(!await (0,i.hasSession)(r))return t.status(404).json({error:"Session not found"});try{return await (0,i.sendRawKeys)(r,a),t.status(200).json({ok:!0})}catch(e){return s.error(`send-input failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to send input"})}};e.s(["default",0,o],943074);var u=e.i(943074),d=e.i(7031),l=e.i(181927),p=e.i(846432);let c=(0,n.hoist)(u,"default"),h=(0,n.hoist)(u,"config"),v=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/tmux/send-input",pathname:"/api/tmux/send-input",bundlePath:"",filename:""},userland:u,distDir:".next",relativeProjectDir:""});async function m(e,r,a){a.requestMeta&&(0,p.setRequestMeta)(e,a.requestMeta),v.isDev&&(0,p.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let n="/api/tmux/send-input";n=n.replace(/\/index$/,"")||"/";let i=await v.prepare(e,r,{srcPage:n});if(!i){r.statusCode=400,r.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve());return}let{query:s,params:o,prerenderManifest:u,routerServerContext:c}=i;try{let t,a=e.method||"GET",i=(0,d.getTracer)(),p=i.getActiveScopeSpan(),h=!!(null==c?void 0:c.isWrappedByNextServer),m=v.instrumentationOnRequestError.bind(v),f=async d=>v.render(e,r,{query:{...s,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:u.preview,propagateError:!1,dev:v.isDev,page:"/api/tmux/send-input",internalRevalidate:null==c?void 0:c.revalidate,onError:(...t)=>m(e,...t)}).finally(()=>{if(!d)return;d.setAttributes({"http.status_code":r.statusCode,"next.rsc":!1});let e=i.getRootSpanAttributes();if(!e)return;if(e.get("next.span_type")!==l.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} ${n}`)});h&&p?await f(p):(t=i.getActiveScopeSpan(),await i.withPropagatedContext(e.headers,()=>i.trace(l.BaseServerSpan.handleRequest,{spanName:`${a} ${n}`,kind:d.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},f),void 0,!h))}catch(e){if(v.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,h,"default",0,c,"handler",0,m],360190)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=node_modules_next_dist_esm_build_templates_pages-api_0uk385d.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[820158,e=>{"use strict";var t=e.i(926747),r=e.i(190406),a=e.i(244898),i=e.i(262950),n=e.i(459015);let s=(0,e.i(25146).createLogger)("tmux"),o=async(e,t)=>{if("GET"!==e.method)return t.setHeader("Allow","GET"),t.status(405).json({error:"Method not allowed"});let r=e.query.session;if(!r)return t.status(400).json({error:"session parameter required"});if(!await (0,n.hasSession)(r))return t.status(404).json({error:"Session not found"});try{let[e,a]=await Promise.all([(0,n.getPaneDetailInfo)(r),(0,n.getLastCommand)(r)]);return t.status(200).json({...e,lastCommand:a,sessionName:r})}catch(e){return s.error(`info query failed: ${e instanceof Error?e.message:e}`),t.status(500).json({error:"Failed to get tmux info"})}};e.s(["default",0,o],831539);var u=e.i(831539),l=e.i(7031),d=e.i(181927),p=e.i(846432);let c=(0,i.hoist)(u,"default"),f=(0,i.hoist)(u,"config"),m=new a.PagesAPIRouteModule({definition:{kind:r.RouteKind.PAGES_API,page:"/api/tmux/info",pathname:"/api/tmux/info",bundlePath:"",filename:""},userland:u,distDir:".next",relativeProjectDir:""});async function h(e,r,a){a.requestMeta&&(0,p.setRequestMeta)(e,a.requestMeta),m.isDev&&(0,p.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let i="/api/tmux/info";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:u,routerServerContext:c}=n;try{let t,a=e.method||"GET",n=(0,l.getTracer)(),p=n.getActiveScopeSpan(),f=!!(null==c?void 0:c.isWrappedByNextServer),h=m.instrumentationOnRequestError.bind(m),v=async l=>m.render(e,r,{query:{...s,...o},params:o,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:u.preview,propagateError:!1,dev:m.isDev,page:"/api/tmux/info",internalRevalidate:null==c?void 0:c.revalidate,onError:(...t)=>h(e,...t)}).finally(()=>{if(!l)return;l.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=`${a} ${s}`;l.setAttributes({"next.route":s,"http.route":s,"next.span_name":e}),l.updateName(e),t&&t!==l&&(t.setAttribute("http.route",s),t.updateName(e))}else l.updateName(`${a} ${i}`)});f&&p?await v(p):(t=n.getActiveScopeSpan(),await n.withPropagatedContext(e.headers,()=>n.trace(d.BaseServerSpan.handleRequest,{spanName:`${a} ${i}`,kind:l.SpanKind.SERVER,attributes:{"http.method":a,"http.target":e.url}},v),void 0,!f))}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,f,"default",0,c,"handler",0,h],820158)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=node_modules_next_dist_esm_build_templates_pages-api_0v8pump.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[201180,71943,166832,e=>{"use strict";e.s(["deriveAgentCliState",0,(e,t)=>{if(!e||"cancelled"===t)return t;switch(e.name){case"session-start":case"interrupt":return"idle";case"prompt-submit":return"busy";case"notification":return"needs-input";case"stop":return"ready-for-review"}}],201180);var t=e.i(522734),s=e.i(924868),a=e.i(814747),i=e.i(25146),n=e.i(796902);let r=(0,i.createLogger)("rate-limits");e.s(["createRateLimitsWatcher",0,e=>{let i=null,l=null,o=0,d=a.default.dirname(n.RATE_LIMITS_FILE),u=a.default.basename(n.RATE_LIMITS_FILE),c=async()=>{try{let t=await s.default.readFile(n.RATE_LIMITS_FILE,"utf-8"),a=JSON.parse(t);a.ts&&a.ts!==o&&(o=a.ts,e(a))}catch{}},p=()=>{c();try{(i=t.default.watch(d,(e,t)=>{t===u&&(l&&clearTimeout(l),l=setTimeout(c,500))})).on("error",()=>{r.debug(`${d} watch error, retrying...`),h(),setTimeout(p,5e3)})}catch{r.debug(`${d} not available yet, retrying...`),setTimeout(p,5e3)}},h=()=>{l&&(clearTimeout(l),l=null),i&&(i.close(),i=null)};return{start:p,stop:h}}],71943);let l=/Update available!\s+([0-9][^\s]*)\s+->\s+([0-9][^\s]*)/i,o=/Update now\s+\(runs `([^`]+)`\)/i,d=/^\s*›(?:\s*$|\s+(?!\d+\.)(?!\[[ x-]\])[^\n]*)$/m,u=/^\s*›?\s*Input disabled\./m;e.s(["isCodexTuiReadyContent",0,e=>{if(!e||(e=>{let t=e.replace(/\s+/g," ");if(/Update ran successfully! Please restart Codex\./i.test(t))return{status:"success",currentVersion:null,latestVersion:null,updateCommand:null};let s=t.match(l),a=/Release notes:/i.test(t)&&/Skip until next version/i.test(t);return s&&a?{status:/Updating Codex via `/i.test(t)?"updating":"prompt",currentVersion:s[1]??null,latestVersion:s[2]??null,updateCommand:t.match(o)?.[1]??null}:/Updating Codex via `/i.test(t)?{status:"updating",currentVersion:null,latestVersion:null,updateCommand:null}:null})(e)?.status==="prompt"||u.test(e))return!1;let t=e.split("\n"),s=t.length;for(;s>0&&""===t[s-1].trim();)s-=1;if(0===s)return!1;let a=t.slice(Math.max(0,s-8),s).join("\n");return d.test(a)}],166832)},387447,e=>{"use strict";var t=e.i(924868),s=e.i(814747),a=e.i(796902);let i=Promise.resolve(),n=async()=>{try{let e=await t.default.readFile(a.RATE_LIMITS_FILE,"utf-8"),s=JSON.parse(e);return{...s.claude?{claude:s.claude}:{},...s.codex?{codex:s.codex}:{}}}catch{return{}}},r=async(e,r)=>{let l=async()=>{let i={...await n(),ts:r.ts,[e]:r};return await t.default.mkdir(s.default.dirname(a.RATE_LIMITS_FILE),{recursive:!0}),await t.default.writeFile(a.RATE_LIMITS_FILE,JSON.stringify(i)),i},o=i.then(l,l);return i=o.then(()=>void 0,()=>void 0),o};e.s(["writeProviderRateLimits",0,r])},964759,e=>{"use strict";e.i(478319);var t=e.i(220951),s=e.i(322429),a=e.i(825265),i=e.i(804767),n=e.i(459015),r=e.i(333184),l=e.i(282992),o=e.i(853932),d=e.i(201180),u=e.i(746514),c=e.i(785128),p=e.i(71943),h=e.i(25146),m=e.i(971780),g=e.i(166832),y=e.i(751905),S=e.i(89101),f=e.i(924868),b=e.i(387447);let w=(0,h.createLogger)("codex-rate-limits"),v=e=>{if(!e||"number"!=typeof e.used_percent||!Number.isFinite(e.used_percent))return null;let t="number"==typeof e.resets_at&&Number.isFinite(e.resets_at)?e.resets_at:"number"==typeof e.resets_in_seconds&&Number.isFinite(e.resets_in_seconds)?Math.round(Date.now()/1e3+e.resets_in_seconds):null;return null===t?null:{used_percentage:e.used_percent,resets_at:t}},T=e=>{let t=[e.primary,e.secondary].filter(Boolean),s=null,a=null;for(let e of t){let t=v(e);t&&(300===e.window_minutes?s=t:10080===e.window_minutes&&(a=t))}return(s??=v(e.primary),a??=v(e.secondary),s||a)?{ts:Date.now()/1e3,five_hour:s,seven_day:a}:null},P=async e=>{try{let t=await f.default.stat(e);if(0===t.size)return!1;let s=Math.min(t.size,1048576),a=await f.default.open(e,"r");try{let e=Buffer.alloc(s);await a.read(e,0,s,t.size-s);let i=e.toString("utf-8").split("\n").filter(e=>e.trim());t.size>s&&i.length>0&&i.shift();let n=(e=>{for(let t=e.length-1;t>=0;t--)try{let s=JSON.parse(e[t]);if("event_msg"!==s.type||s.payload?.type!=="token_count"||!s.payload.rate_limits)continue;return T(s.payload.rate_limits)}catch{continue}return null})(i);if(!n)return!1;return await (0,b.writeProviderRateLimits)("codex",n),!0}finally{await a.close()}}catch(t){return w.debug({err:t,jsonlPath:e},"failed to cache codex rate limits"),!1}};var I=e.i(443571),A=e.i(814747),k=e.i(446786);let M=(0,h.createLogger)("session-history"),U=A.default.join(k.default.homedir(),".purplemux"),j=A.default.join(U,"session-history.json"),R=globalThis;R.__purplemuxSessionHistoryLock||(R.__purplemuxSessionHistoryLock=Promise.resolve());let _=async e=>{let t,s=new Promise(e=>{t=e}),a=R.__purplemuxSessionHistoryLock;R.__purplemuxSessionHistoryLock=s,await a;try{return await e()}finally{t()}},L=()=>({version:1,entries:[]}),W=e=>{if(!e||"object"!=typeof e||"string"!=typeof e.id||"string"!=typeof e.tabId)return null;let t="codex"===e.providerId?"codex":"claude",s="string"==typeof e.agentSessionId||null===e.agentSessionId?e.agentSessionId:"string"==typeof e.claudeSessionId?e.claudeSessionId:null;return void 0!==e.agentSessionId||void 0===e.claudeSessionId||R.__ptSessionHistoryLegacyLogged||(R.__ptSessionHistoryLegacyLogged=!0,M.info("Migrating legacy session-history entries (claudeSessionId → agentSessionId)")),{id:e.id,workspaceId:String(e.workspaceId??""),workspaceName:String(e.workspaceName??""),workspaceDir:"string"==typeof e.workspaceDir||null===e.workspaceDir?e.workspaceDir:null,tabId:e.tabId,providerId:t,agentSessionId:s,prompt:"string"==typeof e.prompt||null===e.prompt?e.prompt:null,result:"string"==typeof e.result||null===e.result?e.result:null,startedAt:Number(e.startedAt??0),completedAt:Number(e.completedAt??0),duration:Number(e.duration??0),dismissedAt:"number"==typeof e.dismissedAt||null===e.dismissedAt?e.dismissedAt:null,toolUsage:e.toolUsage??{},touchedFiles:Array.isArray(e.touchedFiles)?e.touchedFiles:[],...e.cancelled?{cancelled:!0}:{}}},x=async()=>{let e,t;try{e=await f.default.readFile(j,"utf-8")}catch{return L()}try{t=JSON.parse(e)}catch{M.warn("Failed to parse session-history.json, starting empty");try{await f.default.copyFile(j,j.replace(/\.json$/,".json.bak"))}catch{}return L()}let s=[];for(let e of t.entries??[]){let t=W(e);t&&s.push(t)}return{version:1,entries:s}},C=async e=>{let t={version:e.version,entries:e.entries.map(e=>{let{claudeSessionId:t,...s}=e;return s})},s=JSON.stringify(t.entries);if(R.__purplemuxSessionHistoryContentCache===s)return;let a=j+".tmp";try{await f.default.writeFile(a,JSON.stringify(t,null,2),{mode:384}),await f.default.rename(a,j)}catch(e){throw await f.default.unlink(a).catch(()=>{}),e}R.__purplemuxSessionHistoryContentCache=s},F=async e=>{await _(async()=>{let t=await x();t.entries.unshift(e),t.entries.length>200&&(t.entries=t.entries.slice(0,200)),await C(t)})},E=async(e,t)=>await _(async()=>{let s=await x(),a=s.entries.find(t=>t.tabId===e&&null===t.dismissedAt);return a?(a.dismissedAt=t,await C(s),a):null});var N=e.i(157469),J=e.i(75874),D=e.i(228448),q=e.i(44014),O=e.i(522734);let B=(0,h.createLogger)("status"),H=(0,h.createLogger)("hooks"),$=(e,t,s)=>({agentProviderId:e?.id,agentSummary:e?.readSummary(t)??null,agentSessionId:e?.sessionIdFromJsonlPath(s??null)??e?.readSessionId(t)??null}),V=new Set(["permission_prompt","worker_permission_prompt"]),z=new Set(["busy","idle","needs-input","ready-for-review"]),K=/^[^|]+\|[^|]+$/,X=[700,1500,3e3,5e3,8e3],G=globalThis;class Q{tabs=new Map;pollingTimer=null;currentInterval=0;clients=new Set;initialized=!1;rateLimitsWatcher=null;lastRateLimits=null;jsonlWatchers=new Map;compactStaleTimers=new Map;async init(){this.initialized||(this.initialized=!0,await this.scanAll(),this.startPolling(),this.rateLimitsWatcher=(0,p.createRateLimitsWatcher)(e=>{this.lastRateLimits=e,this.broadcast({type:"rate-limits:update",data:e})}),this.rateLimitsWatcher.start())}async scanAll(){let{workspaces:e}=await (0,s.getWorkspaces)(),t=await (0,n.getAllPanesInfo)();for(let e of[...this.jsonlWatchers.keys()])this.stopJsonlWatch(e);for(let s of(this.tabs.clear(),e)){let e=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(e)for(let a of(0,i.collectAllTabs)(e.root)){let e=t.get(a.sessionName),i=(0,l.getProviderByPanelType)(a.panelType),n=await this.readTabMetadata(e,i,a),r=a.cliState??"idle",o="busy"===r?"unknown":r,{terminalStatus:d,listeningPorts:u}=i?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(e),p=e?.command,h=e?`${e.command}|${e.path}`:void 0,m="needs-input"===o?{name:"notification",at:Date.now(),seq:0}:null;this.tabs.set(a.id,{cliState:o,workspaceId:s.id,tabName:a.name||(h?(0,c.formatTabTitle)(h,a.panelType):""),currentProcess:p,paneTitle:h,tmuxSession:a.sessionName,panelType:a.panelType,terminalStatus:d,listeningPorts:u,...$(i,a,n.jsonlPath),lastUserMessage:a.lastUserMessage,lastAssistantMessage:n.lastAssistantSnippet,currentAction:n.currentAction,readyForReviewAt:"ready-for-review"===o?Date.now():null,busySince:null,dismissedAt:a.dismissedAt??null,jsonlPath:n.jsonlPath,lastEvent:m,eventSeq:0}),("needs-input"===o||"unknown"===o)&&n.jsonlPath&&this.startJsonlWatch(a.id,n.jsonlPath),"unknown"===o&&this.resolveUnknown(a.id).catch(e=>B.warn("resolveUnknown failed: %s",e))}}}async resolveUnknown(e){let t=this.tabs.get(e);if(!t||"unknown"!==t.cliState)return;let s=(0,l.getProviderByPanelType)(t.panelType),a=(await (0,n.getAllPanesInfo)()).get(t.tmuxSession),i=a?.pid?await (0,r.getChildPids)(a.pid):[];if(!(a?.pid&&s&&await s.isAgentRunning(a.pid,i))){this.applyCliState(e,t,"idle",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(e,t);return}if(s&&t.jsonlPath){let{idle:a,stale:i,lastAssistantSnippet:n}=await s.readRuntimeSnapshot(t.jsonlPath);if(a&&!i&&n){this.applyCliState(e,t,"ready-for-review",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(e,t);return}}}async readTabMetadata(e,t,s){let a={lastAssistantSnippet:null,currentAction:null,jsonlPath:null};if(!e||!e.pid||!t)return a;let i=await (0,r.getChildPids)(e.pid);if(!await t.isAgentRunning(e.pid,i))return a;if(s){let e=t.readJsonlPath(s);if(e)try{await f.default.access(e);let{lastAssistantSnippet:s,currentAction:a}=await t.readRuntimeSnapshot(e);return{lastAssistantSnippet:s,currentAction:a,jsonlPath:e}}catch{}let a=t.readSessionId(s);if(a&&t.id===y.CODEX_PROVIDER_ID){let e=await (0,S.findCodexSessionById)(a);if(e?.jsonlPath){let{lastAssistantSnippet:s,currentAction:a}=await t.readRuntimeSnapshot(e.jsonlPath);return{lastAssistantSnippet:s,currentAction:a,jsonlPath:e.jsonlPath}}}}let n=await t.detectActiveSession(e.pid,i);if("running"!==n.status||!n.jsonlPath)return{lastAssistantSnippet:null,currentAction:null,jsonlPath:n.jsonlPath??null};let{lastAssistantSnippet:l,currentAction:o}=await t.readRuntimeSnapshot(n.jsonlPath);return{lastAssistantSnippet:l,currentAction:o,jsonlPath:n.jsonlPath}}async detectTerminalStatus(e){if(!e||!e.pid)return{terminalStatus:"idle",listeningPorts:[]};let t=await (0,n.getListeningPorts)(e.pid);return t.length>0?{terminalStatus:"server",listeningPorts:t}:{terminalStatus:n.SAFE_SHELLS.has(e.command)?"idle":"running",listeningPorts:[]}}getPollingInterval(){let e=this.tabs.size;return e>=21?6e4:e>=11?45e3:3e4}async rescan(){await this.scanAll()}startPolling(){this.stopPolling(),this.currentInterval=this.getPollingInterval(),this.pollingTimer=setInterval(()=>{this.poll().catch(e=>{B.error({err:e},"Polling error")})},this.currentInterval)}stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null,this.currentInterval=0)}async poll(){let{workspaces:e}=await (0,s.getWorkspaces)(),t=await (0,n.getAllPanesInfo)(),o=new Set,d=new Set(this.tabs.keys()),u=Date.now();for(let s of e){let e=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(e)for(let d of(0,i.collectAllTabs)(e.root)){o.add(d.id);let e=this.tabs.get(d.id),i=t.get(d.sessionName),p=(0,l.getProviderByPanelType)(d.panelType),{terminalStatus:h,listeningPorts:m}=p?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(i),g=i?.command,y=i?`${i.command}|${i.path}`:void 0;if(!e){let e=d.cliState??"idle",t="busy"===e?"unknown":e,a=await this.readTabMetadata(i,p,d),n="needs-input"===t?{name:"notification",at:Date.now(),seq:0}:null,r={cliState:t,workspaceId:s.id,tabName:d.name||(y?(0,c.formatTabTitle)(y,d.panelType):""),currentProcess:g,paneTitle:y,tmuxSession:d.sessionName,panelType:d.panelType,terminalStatus:h,listeningPorts:m,...$(p,d,a.jsonlPath),lastUserMessage:d.lastUserMessage,lastAssistantMessage:a.lastAssistantSnippet,currentAction:a.currentAction,jsonlPath:a.jsonlPath,lastEvent:n,eventSeq:0};this.tabs.set(d.id,r),this.persistToLayout(r),this.broadcastUpdate(d.id,r),"unknown"===t&&this.resolveUnknown(d.id).catch(e=>B.warn("resolveUnknown failed: %s",e));continue}let S=e.currentProcess!==g,f=e.lastUserMessage!==d.lastUserMessage,b=e.panelType!==d.panelType,w=await this.readTabMetadata(i,p,d);e.tabName=d.name||(y?(0,c.formatTabTitle)(y,d.panelType):""),e.currentProcess=g,e.paneTitle=y,e.workspaceId=s.id,e.panelType=d.panelType,e.agentProviderId=p?.id,e.agentSessionId=p?.sessionIdFromJsonlPath(w.jsonlPath)??p?.readSessionId(d)??null,e.jsonlPath=w.jsonlPath??e.jsonlPath,e.lastUserMessage=d.lastUserMessage,S&&(e.processRetries=3);let v=!S&&(e.processRetries??0)>0;v&&(e.processRetries=e.processRetries-1);let T=e.listeningPorts,P=T?.length!==m.length||m.some((e,t)=>T[t]!==e),I=e.terminalStatus!==h||P;I&&(e.terminalStatus=h,e.listeningPorts=m);let A=!1,k=p?p.readSummary(d):null;if("busy"===e.cliState||"needs-input"===e.cliState){let t=await (0,n.getPaneTitle)(d.sessionName),s=p?.parsePaneTitle(t)??null,i=s??k;i!==e.agentSummary&&(e.agentSummary=i,A=!0,s&&p&&(0,a.updateTabAgentSummary)(d.sessionName,p,s).catch(()=>{}))}else e.agentSummary!==k&&(e.agentSummary=k,A=!0);let M=null,U=async()=>{if(null!==M)return M;if(!i?.pid||!p)return M=!1,!1;let e=await (0,r.getChildPids)(i.pid);return M=await p.isAgentRunning(i.pid,e)};if("busy"===e.cliState&&e.lastEvent&&u-e.lastEvent.at>6e5&&!await U()){B.info({tabId:d.id},"busy stuck — agent process gone, forcing idle"),this.applyCliState(d.id,e,"idle",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(d.id,e);continue}if(p&&z.has(e.cliState)){let t=e.lastResumeOrStartedAt;if(!(void 0!==t&&u-t<5e3)){let t=e.paneTitle??"",s=!!t&&K.test(t);if((!t||s)&&!await U()){B.info({tabId:d.id,prevState:e.cliState},"agent process gone — transitioning to inactive"),this.applyCliState(d.id,e,"inactive",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(d.id,e);continue}}}if("inactive"===e.cliState&&"codex-cli"===e.panelType&&p&&await this.checkCodexTuiReady(e,U)){H.debug({tabId:d.id},"codex tui ready — synthetic session-start"),this.updateTabFromHook(e.tmuxSession,"session-start");continue}(I||S||v||f||b||A)&&this.broadcastUpdate(d.id,e)}}for(let e of d)!o.has(e)&&this.tabs.has(e)&&(this.stopJsonlWatch(e),this.tabs.delete(e),this.broadcastRemove(e));let p=this.getPollingInterval();this.pollingTimer&&p!==this.currentInterval&&this.startPolling()}getAllForClient(){let e={};for(let[t,s]of this.tabs)e[t]={cliState:s.cliState,workspaceId:s.workspaceId,tabName:s.tabName,currentProcess:s.currentProcess,paneTitle:s.paneTitle,panelType:s.panelType,terminalStatus:s.terminalStatus,listeningPorts:s.listeningPorts,agentProviderId:s.agentProviderId,agentSummary:s.agentSummary,lastUserMessage:s.lastUserMessage,lastAssistantMessage:s.lastAssistantMessage,currentAction:s.currentAction,readyForReviewAt:s.readyForReviewAt,busySince:s.busySince,dismissedAt:s.dismissedAt,agentSessionId:s.agentSessionId,compactingSince:s.compactingSince,permissionRequest:s.permissionRequest,lastEvent:s.lastEvent,eventSeq:s.eventSeq};return e}applyCliState(e,t,s,a={}){let i=t.cliState;if(i===s)return;let n=t.busySince;t.cliState=s,t.readyForReviewAt="ready-for-review"===s?Date.now():null,t.busySince="busy"===s?Date.now():null,"busy"===s&&(t.dismissedAt=null),"needs-input"===i&&"needs-input"!==s&&t.permissionRequest&&(t.permissionRequest=null),"ready-for-review"===s&&t.jsonlPath&&new Promise(e=>setTimeout(e,500)).then(()=>this.saveSessionHistory(e,t,n,!1)).catch(e=>{B.warn("Failed to save session history: %s",e)}),"ready-for-review"!==s||a.silent||this.sendWebPush(e,t,"review").catch(e=>{B.warn("Web push failed: %s",e)}),"needs-input"!==s||a.silent||this.sendWebPush(e,t,"needs-input").catch(e=>{B.warn("Web push failed: %s",e)});let r=("busy"===s||"needs-input"===s)&&t.jsonlPath,l="ready-for-review"===s&&this.jsonlWatchers.has(e);r&&!this.jsonlWatchers.has(e)?this.startJsonlWatch(e,t.jsonlPath):!r&&!l&&this.jsonlWatchers.has(e)&&this.stopJsonlWatch(e)}async saveSessionHistory(e,t,a,i){if(!t.lastUserMessage)return;let n=t.agentProviderId?(0,l.getProvider)(t.agentProviderId):(0,l.getProviderByPanelType)(t.panelType),r=t.jsonlPath&&n?await n.readSessionHistoryStats(t.jsonlPath):null,{workspaces:o}=await (0,s.getWorkspaces)(),d=o.find(e=>e.id===t.workspaceId),u=Date.now(),c=r?.firstUserTs??a??u,p=i?u:r?.lastAssistantTs??u,h=i?p-c:r?.turnDurationMs??p-c,m="codex"===t.agentProviderId?"codex":"claude",g={id:(0,q.nanoid)(),workspaceId:t.workspaceId,workspaceName:d?.name??t.workspaceId,workspaceDir:d?.directories[0]??null,tabId:e,providerId:m,agentSessionId:t.agentSessionId??null,prompt:r?.lastUserText??t.lastUserMessage,result:r?.lastAssistantText??null,startedAt:c,completedAt:p,duration:h,dismissedAt:p,toolUsage:r?.toolUsage??{},touchedFiles:r?.touchedFiles??[],...i?{cancelled:!0}:{}};await F(g),this.broadcast({type:"session-history:update",entry:g})}dismissTab(e,t){let s=this.tabs.get(e);if(!s||"ready-for-review"!==s.cliState)return;let a=Date.now();this.applyCliState(e,s,"idle",{silent:!0}),s.dismissedAt=a,this.persistToLayout(s),this.broadcastUpdate(e,s,t),E(e,a).then(e=>{e&&this.broadcast({type:"session-history:update",entry:e})}).catch(e=>{B.warn("Failed to update session history dismissedAt: %s",e)})}ackNotificationInput(e,t){let s=this.tabs.get(e);s&&"needs-input"===s.cliState&&s.lastEvent?.name==="notification"&&s.lastEvent.seq===t&&(H.debug({tabId:e,seq:t},"ack: needs-input→busy"),this.applyCliState(e,s,"busy"),this.persistToLayout(s),this.broadcastUpdate(e,s))}async checkCodexTuiReady(e,t){if(!await t())return!1;let s=await (0,m.capturePaneAtWidth)(e.tmuxSession,80,24).catch(e=>(B.warn("codex tui ready capture failed: %s",e),null));return!!s&&(0,g.isCodexTuiReadyContent)(s)}async recoverUnknownIfPending(e){let t=this.tabs.get(e);if(!t)return{recovered:!1,reason:"no-entry"};if("unknown"!==t.cliState)return{recovered:!1,reason:"not-unknown"};let s=await (0,m.capturePaneAtWidth)(t.tmuxSession,120,50).catch(e=>(B.warn("recoverUnknownIfPending capture failed: %s",e),null));if(!s)return{recovered:!1,reason:"capture-failed"};let{options:a}=(0,I.parsePermissionOptions)(s);if(0===a.length)return{recovered:!1,reason:"no-options"};let i=Date.now(),n=(t.eventSeq??0)+1;return t.eventSeq=n,t.lastEvent={name:"notification",at:i,seq:n},H.debug({tabId:e,seq:n,options:a.length},"recover unknown→needs-input from pane capture"),this.applyCliState(e,t,"needs-input",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(e,t),{recovered:!0}}findTabIdBySession(e){for(let[t,s]of this.tabs)if(s.tmuxSession===e)return t}updateTabFromHook(e,t,s){let a=this.findTabIdBySession(e);if(!a)return void H.debug({tmuxSession:e,event:t,notificationType:s},"no tabId for session");let i=this.tabs.get(a);if(!i)return void H.debug({tabId:a,event:t,notificationType:s},"no entry for tab");if("pre-compact"===t||"post-compact"===t){H.debug({tabId:a,event:t},"compact hook"),this.setCompacting(a,i,"pre-compact"===t?Date.now():null);return}if("session-start"!==t&&"prompt-submit"!==t&&"notification"!==t&&"stop"!==t&&"interrupt"!==t)return void H.debug({tabId:a,event:t,notificationType:s},"unknown event, ignoring");if("notification"===t&&s&&!V.has(s))return void H.debug({tabId:a,event:t,notificationType:s},"non-input notification, skipping state transition");let n=Date.now(),r=(i.eventSeq??0)+1;i.eventSeq=r,i.lastEvent={name:t,at:n,seq:r},"session-start"===t&&(i.lastResumeOrStartedAt=n),this.broadcast({type:"status:hook-event",tabId:a,event:i.lastEvent});let o=i.cliState,u=(0,d.deriveAgentCliState)(i.lastEvent,o);if(H.debug({tabId:a,event:t,notificationType:s,seq:r,prevState:o,newState:u,transition:o!==u},`processed ${t}${s?`(${s})`:""} ${o}→${u}`),o!==u&&(this.applyCliState(a,i,u),this.persistToLayout(i),this.broadcastUpdate(a,i)),"busy"!==u&&"needs-input"!==u||i.jsonlPath||this.resolveAndWatchJsonl(a,e).catch(()=>{}),"stop"===t&&i.jsonlPath){let e=(e=!1)=>{let t=(0,l.getProviderByPanelType)(i.panelType);t&&t.readRuntimeSnapshot(i.jsonlPath,{force:e}).then(({currentAction:e,lastAssistantSnippet:t,reset:s})=>{let n=!1;s?(null!==i.currentAction&&(i.currentAction=null,n=!0),null!==i.lastAssistantMessage&&(i.lastAssistantMessage=null,n=!0)):(null!==e&&e.summary!==i.currentAction?.summary&&(i.currentAction=e,n=!0),null!==t&&i.lastAssistantMessage!==t&&(i.lastAssistantMessage=t,n=!0)),n&&this.broadcastUpdate(a,i)}).catch(()=>{})};e(),setTimeout(()=>{e(!0)},500)}}handleProviderEvent(e,t,s){let a=this.findTabIdBySession(t);if(!a)return H.debug({providerId:e,tmuxSession:t,event:s.kind},"no tabId for provider event"),!1;let i=this.tabs.get(a);if(!i)return H.debug({providerId:e,tabId:a,event:s.kind},"no entry for provider event tab"),!1;let n=(0,l.getProviderByPanelType)(i.panelType);return n&&n.id!==e?(H.debug({providerId:e,expectedProviderId:n.id,tabId:a,event:s.kind},"provider event panel mismatch"),!1):(this.handleTabWorkStateEvent(a,s),!0)}applyAgentHookMeta(e,t,s){let i=this.findTabIdBySession(t);if(!i)return null;let n=this.tabs.get(i);if(!n)return null;let r=(0,l.getProviderByPanelType)(n.panelType);if(r&&r.id!==e)return H.debug({providerId:e,expectedProviderId:r.id,tabId:i},"provider hook meta panel mismatch"),null;let o=!1;if(n.agentProviderId!==e&&(n.agentProviderId=e,o=!0),void 0!==s.sessionId&&n.agentSessionId!==s.sessionId&&(n.agentSessionId=s.sessionId,o=!0),void 0!==s.jsonlPath&&n.jsonlPath!==s.jsonlPath&&(n.jsonlPath=s.jsonlPath,o=!0),s.clearMessages&&(null!==n.agentSummary&&(n.agentSummary=null,o=!0),null!==n.lastUserMessage&&(n.lastUserMessage=null,o=!0),null!==n.lastAssistantMessage&&(n.lastAssistantMessage=null,o=!0)),void 0!==s.lastUserMessage&&n.lastUserMessage!==s.lastUserMessage&&(n.lastUserMessage=s.lastUserMessage,o=!0),void 0!==s.agentSummary&&n.agentSummary!==s.agentSummary&&(n.agentSummary=s.agentSummary,o=!0),void 0!==s.permissionRequest&&n.permissionRequest!==s.permissionRequest&&(n.permissionRequest=s.permissionRequest,o=!0),o){let t=r??(0,l.getProvider)(e);t&&(0,a.updateTabAgentState)(n.tmuxSession,t,{...void 0!==s.sessionId?{sessionId:s.sessionId}:{},...void 0!==s.jsonlPath?{jsonlPath:s.jsonlPath}:{},...void 0!==s.agentSummary||s.clearMessages?{summary:s.clearMessages?null:s.agentSummary??null}:{},...void 0!==s.lastUserMessage||s.clearMessages?{lastUserMessage:s.clearMessages?null:s.lastUserMessage??null}:{}}).catch(()=>{}),this.persistToLayout(n),this.broadcastUpdate(i,n)}return{tabId:i,cliState:n.cliState}}setCompacting(e,t,s){let a=this.compactStaleTimers.get(e);if(a&&(clearTimeout(a),this.compactStaleTimers.delete(e)),(t.compactingSince??null)!==s&&(t.compactingSince=s,this.broadcastUpdate(e,t),null!==s)){let t=setTimeout(()=>{this.compactStaleTimers.delete(e);let t=this.tabs.get(e);t&&t.compactingSince===s&&(t.compactingSince=null,H.debug({tabId:e},"compact stale, auto-cleared"),this.broadcastUpdate(e,t))},6e4);this.compactStaleTimers.set(e,t)}}removeTab(e){let t=this.tabs.get(e);t&&("busy"===t.cliState||"needs-input"===t.cliState)&&t.lastUserMessage&&this.saveSessionHistory(e,t,t.busySince,!0).catch(e=>{B.warn("Failed to save cancelled session history: %s",e)}),this.stopJsonlWatch(e);let s=this.compactStaleTimers.get(e);s&&(clearTimeout(s),this.compactStaleTimers.delete(e)),this.tabs.delete(e),this.broadcastRemove(e)}reconcileWorkspaceTabs(e,t){let s=new Set(t);for(let[t,a]of this.tabs)a.workspaceId!==e||s.has(t)||this.removeTab(t)}removeWorkspaceTabs(e){for(let[t,s]of this.tabs)s.workspaceId===e&&this.removeTab(t)}registerTab(e,t){this.tabs.set(e,t),this.broadcastUpdate(e,t)}handleTabWorkStateEvent(e,t){let s=this.tabs.get(e);if(s)switch(t.kind){case"session-start":case"prompt-submit":case"stop":case"interrupt":case"pre-compact":case"post-compact":this.updateTabFromHook(s.tmuxSession,t.kind);break;case"notification":this.updateTabFromHook(s.tmuxSession,"notification",t.notificationType);break;case"summary-update":s.agentSummary!==t.summary&&(s.agentSummary=t.summary,this.broadcastUpdate(e,s));break;case"last-user-message":s.lastUserMessage!==t.message&&(s.lastUserMessage=t.message,this.broadcastUpdate(e,s))}}markAgentLaunch(e,t){let s=this.tabs.get(e);if(s){if(s.lastResumeOrStartedAt=Date.now(),t?.resetAgentSession){s.agentSessionId=null,s.jsonlPath=null,s.agentSummary=null,s.lastUserMessage=null,s.lastAssistantMessage=null,s.currentAction=null,s.permissionRequest=null;let t=this.jsonlWatchers.get(e);t&&(t.watcher.close(),t.debounceTimer&&clearTimeout(t.debounceTimer),this.jsonlWatchers.delete(e)),this.persistToLayout(s);let i=(0,l.getProviderByPanelType)(s.panelType);i&&(0,a.updateTabAgentState)(s.tmuxSession,i,{sessionId:null,jsonlPath:null,summary:null,lastUserMessage:null}).catch(()=>{}),this.broadcastUpdate(e,s)}for(let t of X)setTimeout(()=>{this.poll().catch(t=>{B.error({err:t,tabId:e},"Launch readiness poll error")})},t)}}addClient(e){this.clients.add(e),this.lastRateLimits&&e.readyState===t.WebSocket.OPEN&&e.send(JSON.stringify({type:"rate-limits:update",data:this.lastRateLimits}))}removeClient(e){this.clients.delete(e)}persistToLayout(e){(0,a.updateTabCliStatus)(e.tmuxSession,e.cliState,e.dismissedAt).catch(()=>{})}broadcastUpdate(e,t,s){let a={type:"status:update",tabId:e,cliState:t.cliState,workspaceId:t.workspaceId,tabName:t.tabName,currentProcess:t.currentProcess,paneTitle:t.paneTitle,panelType:t.panelType,terminalStatus:t.terminalStatus,listeningPorts:t.listeningPorts,agentProviderId:t.agentProviderId,agentSummary:t.agentSummary,lastUserMessage:t.lastUserMessage,lastAssistantMessage:t.lastAssistantMessage,currentAction:t.currentAction,readyForReviewAt:t.readyForReviewAt,busySince:t.busySince,dismissedAt:t.dismissedAt,agentSessionId:t.agentSessionId,compactingSince:t.compactingSince,permissionRequest:t.permissionRequest,lastEvent:t.lastEvent,eventSeq:t.eventSeq};this.broadcast(a,s)}broadcastRemove(e){this.broadcast({type:"status:update",tabId:e,cliState:null,workspaceId:"",tabName:""})}static BACKPRESSURE_LIMIT=1048576;broadcast(e,s){let a=JSON.stringify(e);for(let e of this.clients)e!==s&&e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<Q.BACKPRESSURE_LIMIT&&e.send(a)}async resolveAndWatchJsonl(e,t){let s=this.tabs.get(e);if(!s||s.jsonlPath)return;let r=null,d=(0,a.parseSessionName)(t);if(d){let o=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(d.wsId));if(o){let a=(0,i.collectAllTabs)(o.root).find(e=>e.sessionName===t),d=(0,l.getProviderByPanelType)(a?.panelType),c=a&&d?d.readSessionId(a):null;if(a&&d&&c)if(d.id===y.CODEX_PROVIDER_ID)r=(await (0,S.findCodexSessionById)(c))?.jsonlPath??null;else{let e=await (0,n.getSessionCwd)(t);if(e){let t=`${(0,u.cwdToProjectPath)(e)}/${c}.jsonl`;try{await f.default.access(t),r=t}catch{}}}a?.lastUserMessage&&s.lastUserMessage!==a.lastUserMessage&&(s.lastUserMessage=a.lastUserMessage,this.broadcastUpdate(e,s))}}if(!r){let e=await (0,n.getSessionPanePid)(t);if(e){let{info:t}=await (0,o.detectAnyActiveSession)(e);r=t.jsonlPath}}if(!r)return;s.jsonlPath=r;let c=(0,l.getProviderByPanelType)(s.panelType);c&&(s.agentProviderId=c.id,s.agentSessionId=c.sessionIdFromJsonlPath(r)??s.agentSessionId),"busy"!==s.cliState&&"needs-input"!==s.cliState||this.jsonlWatchers.has(e)||this.startJsonlWatch(e,r)}startJsonlWatch(e,t){let s=this.jsonlWatchers.get(e);if(s?.jsonlPath!==t){s&&this.stopJsonlWatch(e),B.debug("startJsonlWatch tabId=%s path=%s",e,t);try{let s=(0,O.watch)(t,()=>{let s=this.jsonlWatchers.get(e);s&&(s.debounceTimer&&clearTimeout(s.debounceTimer),s.debounceTimer=setTimeout(()=>{this.onJsonlFileChange(e,t).catch(()=>{})},100))});s.on("error",()=>{this.stopJsonlWatch(e)}),this.jsonlWatchers.set(e,{watcher:s,jsonlPath:t,debounceTimer:null})}catch{}}}stopJsonlWatch(e){let t=this.jsonlWatchers.get(e);if(t){B.debug("stopJsonlWatch tabId=%s",e),t.debounceTimer&&clearTimeout(t.debounceTimer);try{t.watcher.close()}catch{}this.jsonlWatchers.delete(e)}}async onJsonlFileChange(e,t){let s=this.tabs.get(e);if(!s||"busy"!==s.cliState&&"needs-input"!==s.cliState&&"unknown"!==s.cliState&&"ready-for-review"!==s.cliState)return void this.stopJsonlWatch(e);let a=(0,l.getProviderByPanelType)(s.panelType);if(!a)return;let{currentAction:i,lastAssistantSnippet:n,reset:r,interrupted:o,lastEntryTs:d}=await a.readRuntimeSnapshot(t);(s.agentProviderId===y.CODEX_PROVIDER_ID||"codex-cli"===s.panelType)&&P(t).catch(()=>{}),o&&"busy"===s.cliState&&null!==d&&d>(s.lastInterruptTs??0)&&d>(s.lastEvent?.at??0)&&(s.lastInterruptTs=d,H.debug({tabId:e,lastEntryTs:d},"synthetic interrupt from JSONL"),this.updateTabFromHook(s.tmuxSession,"interrupt"));let u=!1;r?(null!==s.currentAction&&(s.currentAction=null,u=!0),null!==s.lastAssistantMessage&&(s.lastAssistantMessage=null,u=!0)):(null!==i&&i.summary!==s.currentAction?.summary&&(s.currentAction=i,u=!0),null!==n&&s.lastAssistantMessage!==n&&(s.lastAssistantMessage=n,u=!0)),u&&this.broadcastUpdate(e,s)}shutdown(){for(let e of(this.stopPolling(),this.rateLimitsWatcher?.stop(),[...this.jsonlWatchers.keys()]))this.stopJsonlWatch(e);for(let e of this.clients)e.readyState===t.WebSocket.OPEN&&e.close(1001,"Server shutting down");this.clients.clear()}notifyLastUserMessage(e,t){let s=(0,a.parseSessionName)(e);if(!s)return;let i=this.tabs.get(s.tabId);i&&i.lastUserMessage!==t&&(i.lastUserMessage=t,this.broadcastUpdate(s.tabId,i))}async sendWebPush(e,t,a){let i=await (0,J.getSubscriptions)();if(0===i.length)return;let n=await (0,D.getVAPIDKeys)();N.default.setVapidDetails("mailto:noreply@purplemux.app",n.publicKey,n.privateKey);let r=t.lastUserMessage?.slice(0,100)||t.tabName||e,l=(await (0,s.getWorkspaces)()).workspaces.find(e=>e.id===t.workspaceId),o="codex"===t.agentProviderId?"codex":"claude",d=JSON.stringify({title:"needs-input"===a?"Input Required":"Task Complete",body:r,tabId:e,workspaceId:t.workspaceId,providerId:o,claudeSessionId:t.agentSessionId??null,workspaceName:l?.name??"",workspaceDir:l?.directories[0]??null});if(!(0,J.isAnyDeviceVisible)())for(let e of i)try{await N.default.sendNotification(e,d)}catch(s){let t=s.statusCode;(410===t||404===t)&&await (0,J.removeSubscription)(e.endpoint),B.warn("Web push send error: %s",t)}}}e.s(["getStatusManager",0,()=>{if(!G.__ptStatusManager){let e=new Q;G.__ptStatusManager=e,(0,a.setLayoutReconciler)({reconcileWorkspaceTabs:(t,s)=>e.reconcileWorkspaceTabs(t,s),removeWorkspaceTabs:t=>e.removeWorkspaceTabs(t)})}return G.__ptStatusManager}],964759)}];
|
|
1
|
+
module.exports=[201180,71943,38932,e=>{"use strict";e.s(["deriveAgentCliState",0,(e,t)=>{if(!e||"cancelled"===t)return t;switch(e.name){case"session-start":case"interrupt":return"idle";case"prompt-submit":return"busy";case"notification":return"needs-input";case"stop":return"ready-for-review"}}],201180);var t=e.i(522734),s=e.i(924868),a=e.i(814747),i=e.i(25146),n=e.i(796902);let r=(0,i.createLogger)("rate-limits");e.s(["createRateLimitsWatcher",0,e=>{let i=null,l=null,o=0,d=a.default.dirname(n.RATE_LIMITS_FILE),u=a.default.basename(n.RATE_LIMITS_FILE),c=async()=>{try{let t=await s.default.readFile(n.RATE_LIMITS_FILE,"utf-8"),a=JSON.parse(t);a.ts&&a.ts!==o&&(o=a.ts,e(a))}catch{}},p=()=>{c();try{(i=t.default.watch(d,(e,t)=>{t===u&&(l&&clearTimeout(l),l=setTimeout(c,500))})).on("error",()=>{r.debug(`${d} watch error, retrying...`),h(),setTimeout(p,5e3)})}catch{r.debug(`${d} not available yet, retrying...`),setTimeout(p,5e3)}},h=()=>{l&&(clearTimeout(l),l=null),i&&(i.close(),i=null)};return{start:p,stop:h}}],71943);let l=/Update available!\s+([0-9][^\s]*)\s+->\s+([0-9][^\s]*)/i,o=/Update now\s+\(runs `([^`]+)`\)/i,d=/^\s*›(?:\s*$|\s+(?!\d+\.)(?!\[[ x-]\])[^\n]*)$/m,u=/^\s*›?\s*Input disabled\./m;e.s(["isCodexTuiReadyContent",0,e=>{if(!e||(e=>{let t=e.replace(/\s+/g," ");if(/Update ran successfully! Please restart Codex\./i.test(t))return{status:"success",currentVersion:null,latestVersion:null,updateCommand:null};let s=t.match(l),a=/Release notes:/i.test(t)&&/Skip until next version/i.test(t);return s&&a?{status:/Updating Codex via `/i.test(t)?"updating":"prompt",currentVersion:s[1]??null,latestVersion:s[2]??null,updateCommand:t.match(o)?.[1]??null}:/Updating Codex via `/i.test(t)?{status:"updating",currentVersion:null,latestVersion:null,updateCommand:null}:null})(e)?.status==="prompt"||u.test(e))return!1;let t=e.split("\n"),s=t.length;for(;s>0&&""===t[s-1].trim();)s-=1;if(0===s)return!1;let a=t.slice(Math.max(0,s-8),s).join("\n");return d.test(a)}],38932)},387447,e=>{"use strict";var t=e.i(924868),s=e.i(814747),a=e.i(796902);let i=Promise.resolve(),n=async()=>{try{let e=await t.default.readFile(a.RATE_LIMITS_FILE,"utf-8"),s=JSON.parse(e);return{...s.claude?{claude:s.claude}:{},...s.codex?{codex:s.codex}:{}}}catch{return{}}},r=async(e,r)=>{let l=async()=>{let i={...await n(),ts:r.ts,[e]:r};return await t.default.mkdir(s.default.dirname(a.RATE_LIMITS_FILE),{recursive:!0}),await t.default.writeFile(a.RATE_LIMITS_FILE,JSON.stringify(i)),i},o=i.then(l,l);return i=o.then(()=>void 0,()=>void 0),o};e.s(["writeProviderRateLimits",0,r])},964759,e=>{"use strict";e.i(478319);var t=e.i(220951),s=e.i(322429),a=e.i(825265),i=e.i(804767),n=e.i(459015),r=e.i(333184),l=e.i(282992),o=e.i(853932),d=e.i(201180),u=e.i(746514),c=e.i(785128),p=e.i(71943),h=e.i(25146),m=e.i(971780),g=e.i(38932),y=e.i(751905),S=e.i(89101),f=e.i(924868),b=e.i(387447);let w=(0,h.createLogger)("codex-rate-limits"),v=e=>{if(!e||"number"!=typeof e.used_percent||!Number.isFinite(e.used_percent))return null;let t="number"==typeof e.resets_at&&Number.isFinite(e.resets_at)?e.resets_at:"number"==typeof e.resets_in_seconds&&Number.isFinite(e.resets_in_seconds)?Math.round(Date.now()/1e3+e.resets_in_seconds):null;return null===t?null:{used_percentage:e.used_percent,resets_at:t}},T=e=>{let t=[e.primary,e.secondary].filter(Boolean),s=null,a=null;for(let e of t){let t=v(e);t&&(300===e.window_minutes?s=t:10080===e.window_minutes&&(a=t))}return(s??=v(e.primary),a??=v(e.secondary),s||a)?{ts:Date.now()/1e3,five_hour:s,seven_day:a}:null},P=async e=>{try{let t=await f.default.stat(e);if(0===t.size)return!1;let s=Math.min(t.size,1048576),a=await f.default.open(e,"r");try{let e=Buffer.alloc(s);await a.read(e,0,s,t.size-s);let i=e.toString("utf-8").split("\n").filter(e=>e.trim());t.size>s&&i.length>0&&i.shift();let n=(e=>{for(let t=e.length-1;t>=0;t--)try{let s=JSON.parse(e[t]);if("event_msg"!==s.type||s.payload?.type!=="token_count"||!s.payload.rate_limits)continue;return T(s.payload.rate_limits)}catch{continue}return null})(i);if(!n)return!1;return await (0,b.writeProviderRateLimits)("codex",n),!0}finally{await a.close()}}catch(t){return w.debug({err:t,jsonlPath:e},"failed to cache codex rate limits"),!1}};var I=e.i(443571),A=e.i(814747),k=e.i(446786);let M=(0,h.createLogger)("session-history"),U=A.default.join(k.default.homedir(),".purplemux"),j=A.default.join(U,"session-history.json"),R=globalThis;R.__purplemuxSessionHistoryLock||(R.__purplemuxSessionHistoryLock=Promise.resolve());let _=async e=>{let t,s=new Promise(e=>{t=e}),a=R.__purplemuxSessionHistoryLock;R.__purplemuxSessionHistoryLock=s,await a;try{return await e()}finally{t()}},L=()=>({version:1,entries:[]}),W=e=>{if(!e||"object"!=typeof e||"string"!=typeof e.id||"string"!=typeof e.tabId)return null;let t="codex"===e.providerId?"codex":"claude",s="string"==typeof e.agentSessionId||null===e.agentSessionId?e.agentSessionId:"string"==typeof e.claudeSessionId?e.claudeSessionId:null;return void 0!==e.agentSessionId||void 0===e.claudeSessionId||R.__ptSessionHistoryLegacyLogged||(R.__ptSessionHistoryLegacyLogged=!0,M.info("Migrating legacy session-history entries (claudeSessionId → agentSessionId)")),{id:e.id,workspaceId:String(e.workspaceId??""),workspaceName:String(e.workspaceName??""),workspaceDir:"string"==typeof e.workspaceDir||null===e.workspaceDir?e.workspaceDir:null,tabId:e.tabId,providerId:t,agentSessionId:s,prompt:"string"==typeof e.prompt||null===e.prompt?e.prompt:null,result:"string"==typeof e.result||null===e.result?e.result:null,startedAt:Number(e.startedAt??0),completedAt:Number(e.completedAt??0),duration:Number(e.duration??0),dismissedAt:"number"==typeof e.dismissedAt||null===e.dismissedAt?e.dismissedAt:null,toolUsage:e.toolUsage??{},touchedFiles:Array.isArray(e.touchedFiles)?e.touchedFiles:[],...e.cancelled?{cancelled:!0}:{}}},x=async()=>{let e,t;try{e=await f.default.readFile(j,"utf-8")}catch{return L()}try{t=JSON.parse(e)}catch{M.warn("Failed to parse session-history.json, starting empty");try{await f.default.copyFile(j,j.replace(/\.json$/,".json.bak"))}catch{}return L()}let s=[];for(let e of t.entries??[]){let t=W(e);t&&s.push(t)}return{version:1,entries:s}},C=async e=>{let t={version:e.version,entries:e.entries.map(e=>{let{claudeSessionId:t,...s}=e;return s})},s=JSON.stringify(t.entries);if(R.__purplemuxSessionHistoryContentCache===s)return;let a=j+".tmp";try{await f.default.writeFile(a,JSON.stringify(t,null,2),{mode:384}),await f.default.rename(a,j)}catch(e){throw await f.default.unlink(a).catch(()=>{}),e}R.__purplemuxSessionHistoryContentCache=s},F=async e=>{await _(async()=>{let t=await x();t.entries.unshift(e),t.entries.length>200&&(t.entries=t.entries.slice(0,200)),await C(t)})},E=async(e,t)=>await _(async()=>{let s=await x(),a=s.entries.find(t=>t.tabId===e&&null===t.dismissedAt);return a?(a.dismissedAt=t,await C(s),a):null});var N=e.i(157469),J=e.i(75874),D=e.i(228448),q=e.i(44014),O=e.i(522734);let B=(0,h.createLogger)("status"),H=(0,h.createLogger)("hooks"),$=(e,t,s)=>({agentProviderId:e?.id,agentSummary:e?.readSummary(t)??null,agentSessionId:e?.sessionIdFromJsonlPath(s??null)??e?.readSessionId(t)??null}),V=new Set(["permission_prompt","worker_permission_prompt"]),z=new Set(["busy","idle","needs-input","ready-for-review"]),K=/^[^|]+\|[^|]+$/,X=[700,1500,3e3,5e3,8e3],G=globalThis;class Q{tabs=new Map;pollingTimer=null;currentInterval=0;clients=new Set;initialized=!1;rateLimitsWatcher=null;lastRateLimits=null;jsonlWatchers=new Map;compactStaleTimers=new Map;async init(){this.initialized||(this.initialized=!0,await this.scanAll(),this.startPolling(),this.rateLimitsWatcher=(0,p.createRateLimitsWatcher)(e=>{this.lastRateLimits=e,this.broadcast({type:"rate-limits:update",data:e})}),this.rateLimitsWatcher.start())}async scanAll(){let{workspaces:e}=await (0,s.getWorkspaces)(),t=await (0,n.getAllPanesInfo)();for(let e of[...this.jsonlWatchers.keys()])this.stopJsonlWatch(e);for(let s of(this.tabs.clear(),e)){let e=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(e)for(let a of(0,i.collectAllTabs)(e.root)){let e=t.get(a.sessionName),i=(0,l.getProviderByPanelType)(a.panelType),n=await this.readTabMetadata(e,i,a),r=a.cliState??"idle",o="busy"===r?"unknown":r,{terminalStatus:d,listeningPorts:u}=i?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(e),p=e?.command,h=e?`${e.command}|${e.path}`:void 0,m="needs-input"===o?{name:"notification",at:Date.now(),seq:0}:null;this.tabs.set(a.id,{cliState:o,workspaceId:s.id,tabName:a.name||(h?(0,c.formatTabTitle)(h,a.panelType):""),currentProcess:p,paneTitle:h,tmuxSession:a.sessionName,panelType:a.panelType,terminalStatus:d,listeningPorts:u,...$(i,a,n.jsonlPath),lastUserMessage:a.lastUserMessage,lastAssistantMessage:n.lastAssistantSnippet,currentAction:n.currentAction,readyForReviewAt:"ready-for-review"===o?Date.now():null,busySince:null,dismissedAt:a.dismissedAt??null,jsonlPath:n.jsonlPath,lastEvent:m,eventSeq:0}),("needs-input"===o||"unknown"===o)&&n.jsonlPath&&this.startJsonlWatch(a.id,n.jsonlPath),"unknown"===o&&this.resolveUnknown(a.id).catch(e=>B.warn("resolveUnknown failed: %s",e))}}}async resolveUnknown(e){let t=this.tabs.get(e);if(!t||"unknown"!==t.cliState)return;let s=(0,l.getProviderByPanelType)(t.panelType),a=(await (0,n.getAllPanesInfo)()).get(t.tmuxSession),i=a?.pid?await (0,r.getChildPids)(a.pid):[];if(!(a?.pid&&s&&await s.isAgentRunning(a.pid,i))){this.applyCliState(e,t,"idle",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(e,t);return}if(s&&t.jsonlPath){let{idle:a,stale:i,lastAssistantSnippet:n}=await s.readRuntimeSnapshot(t.jsonlPath);if(a&&!i&&n){this.applyCliState(e,t,"ready-for-review",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(e,t);return}}}async readTabMetadata(e,t,s){let a={lastAssistantSnippet:null,currentAction:null,jsonlPath:null};if(!e||!e.pid||!t)return a;let i=await (0,r.getChildPids)(e.pid);if(!await t.isAgentRunning(e.pid,i))return a;if(s){let e=t.readJsonlPath(s);if(e)try{await f.default.access(e);let{lastAssistantSnippet:s,currentAction:a}=await t.readRuntimeSnapshot(e);return{lastAssistantSnippet:s,currentAction:a,jsonlPath:e}}catch{}let a=t.readSessionId(s);if(a&&t.id===y.CODEX_PROVIDER_ID){let e=await (0,S.findCodexSessionById)(a);if(e?.jsonlPath){let{lastAssistantSnippet:s,currentAction:a}=await t.readRuntimeSnapshot(e.jsonlPath);return{lastAssistantSnippet:s,currentAction:a,jsonlPath:e.jsonlPath}}}}let n=await t.detectActiveSession(e.pid,i);if("running"!==n.status||!n.jsonlPath)return{lastAssistantSnippet:null,currentAction:null,jsonlPath:n.jsonlPath??null};let{lastAssistantSnippet:l,currentAction:o}=await t.readRuntimeSnapshot(n.jsonlPath);return{lastAssistantSnippet:l,currentAction:o,jsonlPath:n.jsonlPath}}async detectTerminalStatus(e){if(!e||!e.pid)return{terminalStatus:"idle",listeningPorts:[]};let t=await (0,n.getListeningPorts)(e.pid);return t.length>0?{terminalStatus:"server",listeningPorts:t}:{terminalStatus:n.SAFE_SHELLS.has(e.command)?"idle":"running",listeningPorts:[]}}getPollingInterval(){let e=this.tabs.size;return e>=21?6e4:e>=11?45e3:3e4}async rescan(){await this.scanAll()}startPolling(){this.stopPolling(),this.currentInterval=this.getPollingInterval(),this.pollingTimer=setInterval(()=>{this.poll().catch(e=>{B.error({err:e},"Polling error")})},this.currentInterval)}stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null,this.currentInterval=0)}async poll(){let{workspaces:e}=await (0,s.getWorkspaces)(),t=await (0,n.getAllPanesInfo)(),o=new Set,d=new Set(this.tabs.keys()),u=Date.now();for(let s of e){let e=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(e)for(let d of(0,i.collectAllTabs)(e.root)){o.add(d.id);let e=this.tabs.get(d.id),i=t.get(d.sessionName),p=(0,l.getProviderByPanelType)(d.panelType),{terminalStatus:h,listeningPorts:m}=p?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(i),g=i?.command,y=i?`${i.command}|${i.path}`:void 0;if(!e){let e=d.cliState??"idle",t="busy"===e?"unknown":e,a=await this.readTabMetadata(i,p,d),n="needs-input"===t?{name:"notification",at:Date.now(),seq:0}:null,r={cliState:t,workspaceId:s.id,tabName:d.name||(y?(0,c.formatTabTitle)(y,d.panelType):""),currentProcess:g,paneTitle:y,tmuxSession:d.sessionName,panelType:d.panelType,terminalStatus:h,listeningPorts:m,...$(p,d,a.jsonlPath),lastUserMessage:d.lastUserMessage,lastAssistantMessage:a.lastAssistantSnippet,currentAction:a.currentAction,jsonlPath:a.jsonlPath,lastEvent:n,eventSeq:0};this.tabs.set(d.id,r),this.persistToLayout(r),this.broadcastUpdate(d.id,r),"unknown"===t&&this.resolveUnknown(d.id).catch(e=>B.warn("resolveUnknown failed: %s",e));continue}let S=e.currentProcess!==g,f=e.lastUserMessage!==d.lastUserMessage,b=e.panelType!==d.panelType,w=await this.readTabMetadata(i,p,d);e.tabName=d.name||(y?(0,c.formatTabTitle)(y,d.panelType):""),e.currentProcess=g,e.paneTitle=y,e.workspaceId=s.id,e.panelType=d.panelType,e.agentProviderId=p?.id,e.agentSessionId=p?.sessionIdFromJsonlPath(w.jsonlPath)??p?.readSessionId(d)??null,e.jsonlPath=w.jsonlPath??e.jsonlPath,e.lastUserMessage=d.lastUserMessage,S&&(e.processRetries=3);let v=!S&&(e.processRetries??0)>0;v&&(e.processRetries=e.processRetries-1);let T=e.listeningPorts,P=T?.length!==m.length||m.some((e,t)=>T[t]!==e),I=e.terminalStatus!==h||P;I&&(e.terminalStatus=h,e.listeningPorts=m);let A=!1,k=p?p.readSummary(d):null;if("busy"===e.cliState||"needs-input"===e.cliState){let t=await (0,n.getPaneTitle)(d.sessionName),s=p?.parsePaneTitle(t)??null,i=s??k;i!==e.agentSummary&&(e.agentSummary=i,A=!0,s&&p&&(0,a.updateTabAgentSummary)(d.sessionName,p,s).catch(()=>{}))}else e.agentSummary!==k&&(e.agentSummary=k,A=!0);let M=null,U=async()=>{if(null!==M)return M;if(!i?.pid||!p)return M=!1,!1;let e=await (0,r.getChildPids)(i.pid);return M=await p.isAgentRunning(i.pid,e)};if("busy"===e.cliState&&e.lastEvent&&u-e.lastEvent.at>6e5&&!await U()){B.info({tabId:d.id},"busy stuck — agent process gone, forcing idle"),this.applyCliState(d.id,e,"idle",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(d.id,e);continue}if(p&&z.has(e.cliState)){let t=e.lastResumeOrStartedAt;if(!(void 0!==t&&u-t<5e3)){let t=e.paneTitle??"",s=!!t&&K.test(t);if((!t||s)&&!await U()){B.info({tabId:d.id,prevState:e.cliState},"agent process gone — transitioning to inactive"),this.applyCliState(d.id,e,"inactive",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(d.id,e);continue}}}if("inactive"===e.cliState&&"codex-cli"===e.panelType&&p&&await this.checkCodexTuiReady(e,U)){H.debug({tabId:d.id},"codex tui ready — synthetic session-start"),this.updateTabFromHook(e.tmuxSession,"session-start");continue}(I||S||v||f||b||A)&&this.broadcastUpdate(d.id,e)}}for(let e of d)!o.has(e)&&this.tabs.has(e)&&(this.stopJsonlWatch(e),this.tabs.delete(e),this.broadcastRemove(e));let p=this.getPollingInterval();this.pollingTimer&&p!==this.currentInterval&&this.startPolling()}getAllForClient(){let e={};for(let[t,s]of this.tabs)e[t]={cliState:s.cliState,workspaceId:s.workspaceId,tabName:s.tabName,currentProcess:s.currentProcess,paneTitle:s.paneTitle,panelType:s.panelType,terminalStatus:s.terminalStatus,listeningPorts:s.listeningPorts,agentProviderId:s.agentProviderId,agentSummary:s.agentSummary,lastUserMessage:s.lastUserMessage,lastAssistantMessage:s.lastAssistantMessage,currentAction:s.currentAction,readyForReviewAt:s.readyForReviewAt,busySince:s.busySince,dismissedAt:s.dismissedAt,agentSessionId:s.agentSessionId,compactingSince:s.compactingSince,permissionRequest:s.permissionRequest,lastEvent:s.lastEvent,eventSeq:s.eventSeq};return e}applyCliState(e,t,s,a={}){let i=t.cliState;if(i===s)return;let n=t.busySince;t.cliState=s,t.readyForReviewAt="ready-for-review"===s?Date.now():null,t.busySince="busy"===s?Date.now():null,"busy"===s&&(t.dismissedAt=null),"needs-input"===i&&"needs-input"!==s&&t.permissionRequest&&(t.permissionRequest=null),"ready-for-review"===s&&t.jsonlPath&&new Promise(e=>setTimeout(e,500)).then(()=>this.saveSessionHistory(e,t,n,!1)).catch(e=>{B.warn("Failed to save session history: %s",e)}),"ready-for-review"!==s||a.silent||this.sendWebPush(e,t,"review").catch(e=>{B.warn("Web push failed: %s",e)}),"needs-input"!==s||a.silent||this.sendWebPush(e,t,"needs-input").catch(e=>{B.warn("Web push failed: %s",e)});let r=("busy"===s||"needs-input"===s)&&t.jsonlPath,l="ready-for-review"===s&&this.jsonlWatchers.has(e);r&&!this.jsonlWatchers.has(e)?this.startJsonlWatch(e,t.jsonlPath):!r&&!l&&this.jsonlWatchers.has(e)&&this.stopJsonlWatch(e)}async saveSessionHistory(e,t,a,i){if(!t.lastUserMessage)return;let n=t.agentProviderId?(0,l.getProvider)(t.agentProviderId):(0,l.getProviderByPanelType)(t.panelType),r=t.jsonlPath&&n?await n.readSessionHistoryStats(t.jsonlPath):null,{workspaces:o}=await (0,s.getWorkspaces)(),d=o.find(e=>e.id===t.workspaceId),u=Date.now(),c=r?.firstUserTs??a??u,p=i?u:r?.lastAssistantTs??u,h=i?p-c:r?.turnDurationMs??p-c,m="codex"===t.agentProviderId?"codex":"claude",g={id:(0,q.nanoid)(),workspaceId:t.workspaceId,workspaceName:d?.name??t.workspaceId,workspaceDir:d?.directories[0]??null,tabId:e,providerId:m,agentSessionId:t.agentSessionId??null,prompt:r?.lastUserText??t.lastUserMessage,result:r?.lastAssistantText??null,startedAt:c,completedAt:p,duration:h,dismissedAt:p,toolUsage:r?.toolUsage??{},touchedFiles:r?.touchedFiles??[],...i?{cancelled:!0}:{}};await F(g),this.broadcast({type:"session-history:update",entry:g})}dismissTab(e,t){let s=this.tabs.get(e);if(!s||"ready-for-review"!==s.cliState)return;let a=Date.now();this.applyCliState(e,s,"idle",{silent:!0}),s.dismissedAt=a,this.persistToLayout(s),this.broadcastUpdate(e,s,t),E(e,a).then(e=>{e&&this.broadcast({type:"session-history:update",entry:e})}).catch(e=>{B.warn("Failed to update session history dismissedAt: %s",e)})}ackNotificationInput(e,t){let s=this.tabs.get(e);s&&"needs-input"===s.cliState&&s.lastEvent?.name==="notification"&&s.lastEvent.seq===t&&(H.debug({tabId:e,seq:t},"ack: needs-input→busy"),this.applyCliState(e,s,"busy"),this.persistToLayout(s),this.broadcastUpdate(e,s))}async checkCodexTuiReady(e,t){if(!await t())return!1;let s=await (0,m.capturePaneAtWidth)(e.tmuxSession,80,24).catch(e=>(B.warn("codex tui ready capture failed: %s",e),null));return!!s&&(0,g.isCodexTuiReadyContent)(s)}async recoverUnknownIfPending(e){let t=this.tabs.get(e);if(!t)return{recovered:!1,reason:"no-entry"};if("unknown"!==t.cliState)return{recovered:!1,reason:"not-unknown"};let s=await (0,m.capturePaneAtWidth)(t.tmuxSession,120,50).catch(e=>(B.warn("recoverUnknownIfPending capture failed: %s",e),null));if(!s)return{recovered:!1,reason:"capture-failed"};let{options:a}=(0,I.parsePermissionOptions)(s);if(0===a.length)return{recovered:!1,reason:"no-options"};let i=Date.now(),n=(t.eventSeq??0)+1;return t.eventSeq=n,t.lastEvent={name:"notification",at:i,seq:n},H.debug({tabId:e,seq:n,options:a.length},"recover unknown→needs-input from pane capture"),this.applyCliState(e,t,"needs-input",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(e,t),{recovered:!0}}findTabIdBySession(e){for(let[t,s]of this.tabs)if(s.tmuxSession===e)return t}updateTabFromHook(e,t,s){let a=this.findTabIdBySession(e);if(!a)return void H.debug({tmuxSession:e,event:t,notificationType:s},"no tabId for session");let i=this.tabs.get(a);if(!i)return void H.debug({tabId:a,event:t,notificationType:s},"no entry for tab");if("pre-compact"===t||"post-compact"===t){H.debug({tabId:a,event:t},"compact hook"),this.setCompacting(a,i,"pre-compact"===t?Date.now():null);return}if("session-start"!==t&&"prompt-submit"!==t&&"notification"!==t&&"stop"!==t&&"interrupt"!==t)return void H.debug({tabId:a,event:t,notificationType:s},"unknown event, ignoring");if("notification"===t&&s&&!V.has(s))return void H.debug({tabId:a,event:t,notificationType:s},"non-input notification, skipping state transition");let n=Date.now(),r=(i.eventSeq??0)+1;i.eventSeq=r,i.lastEvent={name:t,at:n,seq:r},"session-start"===t&&(i.lastResumeOrStartedAt=n),this.broadcast({type:"status:hook-event",tabId:a,event:i.lastEvent});let o=i.cliState,u=(0,d.deriveAgentCliState)(i.lastEvent,o);if(H.debug({tabId:a,event:t,notificationType:s,seq:r,prevState:o,newState:u,transition:o!==u},`processed ${t}${s?`(${s})`:""} ${o}→${u}`),o!==u&&(this.applyCliState(a,i,u),this.persistToLayout(i),this.broadcastUpdate(a,i)),"busy"!==u&&"needs-input"!==u||i.jsonlPath||this.resolveAndWatchJsonl(a,e).catch(()=>{}),"stop"===t&&i.jsonlPath){let e=(e=!1)=>{let t=(0,l.getProviderByPanelType)(i.panelType);t&&t.readRuntimeSnapshot(i.jsonlPath,{force:e}).then(({currentAction:e,lastAssistantSnippet:t,reset:s})=>{let n=!1;s?(null!==i.currentAction&&(i.currentAction=null,n=!0),null!==i.lastAssistantMessage&&(i.lastAssistantMessage=null,n=!0)):(null!==e&&e.summary!==i.currentAction?.summary&&(i.currentAction=e,n=!0),null!==t&&i.lastAssistantMessage!==t&&(i.lastAssistantMessage=t,n=!0)),n&&this.broadcastUpdate(a,i)}).catch(()=>{})};e(),setTimeout(()=>{e(!0)},500)}}handleProviderEvent(e,t,s){let a=this.findTabIdBySession(t);if(!a)return H.debug({providerId:e,tmuxSession:t,event:s.kind},"no tabId for provider event"),!1;let i=this.tabs.get(a);if(!i)return H.debug({providerId:e,tabId:a,event:s.kind},"no entry for provider event tab"),!1;let n=(0,l.getProviderByPanelType)(i.panelType);return n&&n.id!==e?(H.debug({providerId:e,expectedProviderId:n.id,tabId:a,event:s.kind},"provider event panel mismatch"),!1):(this.handleTabWorkStateEvent(a,s),!0)}applyAgentHookMeta(e,t,s){let i=this.findTabIdBySession(t);if(!i)return null;let n=this.tabs.get(i);if(!n)return null;let r=(0,l.getProviderByPanelType)(n.panelType);if(r&&r.id!==e)return H.debug({providerId:e,expectedProviderId:r.id,tabId:i},"provider hook meta panel mismatch"),null;let o=!1;if(n.agentProviderId!==e&&(n.agentProviderId=e,o=!0),void 0!==s.sessionId&&n.agentSessionId!==s.sessionId&&(n.agentSessionId=s.sessionId,o=!0),void 0!==s.jsonlPath&&n.jsonlPath!==s.jsonlPath&&(n.jsonlPath=s.jsonlPath,o=!0),s.clearMessages&&(null!==n.agentSummary&&(n.agentSummary=null,o=!0),null!==n.lastUserMessage&&(n.lastUserMessage=null,o=!0),null!==n.lastAssistantMessage&&(n.lastAssistantMessage=null,o=!0)),void 0!==s.lastUserMessage&&n.lastUserMessage!==s.lastUserMessage&&(n.lastUserMessage=s.lastUserMessage,o=!0),void 0!==s.agentSummary&&n.agentSummary!==s.agentSummary&&(n.agentSummary=s.agentSummary,o=!0),void 0!==s.permissionRequest&&n.permissionRequest!==s.permissionRequest&&(n.permissionRequest=s.permissionRequest,o=!0),o){let t=r??(0,l.getProvider)(e);t&&(0,a.updateTabAgentState)(n.tmuxSession,t,{...void 0!==s.sessionId?{sessionId:s.sessionId}:{},...void 0!==s.jsonlPath?{jsonlPath:s.jsonlPath}:{},...void 0!==s.agentSummary||s.clearMessages?{summary:s.clearMessages?null:s.agentSummary??null}:{},...void 0!==s.lastUserMessage||s.clearMessages?{lastUserMessage:s.clearMessages?null:s.lastUserMessage??null}:{}}).catch(()=>{}),this.persistToLayout(n),this.broadcastUpdate(i,n)}return{tabId:i,cliState:n.cliState}}setCompacting(e,t,s){let a=this.compactStaleTimers.get(e);if(a&&(clearTimeout(a),this.compactStaleTimers.delete(e)),(t.compactingSince??null)!==s&&(t.compactingSince=s,this.broadcastUpdate(e,t),null!==s)){let t=setTimeout(()=>{this.compactStaleTimers.delete(e);let t=this.tabs.get(e);t&&t.compactingSince===s&&(t.compactingSince=null,H.debug({tabId:e},"compact stale, auto-cleared"),this.broadcastUpdate(e,t))},6e4);this.compactStaleTimers.set(e,t)}}removeTab(e){let t=this.tabs.get(e);t&&("busy"===t.cliState||"needs-input"===t.cliState)&&t.lastUserMessage&&this.saveSessionHistory(e,t,t.busySince,!0).catch(e=>{B.warn("Failed to save cancelled session history: %s",e)}),this.stopJsonlWatch(e);let s=this.compactStaleTimers.get(e);s&&(clearTimeout(s),this.compactStaleTimers.delete(e)),this.tabs.delete(e),this.broadcastRemove(e)}reconcileWorkspaceTabs(e,t){let s=new Set(t);for(let[t,a]of this.tabs)a.workspaceId!==e||s.has(t)||this.removeTab(t)}removeWorkspaceTabs(e){for(let[t,s]of this.tabs)s.workspaceId===e&&this.removeTab(t)}registerTab(e,t){this.tabs.set(e,t),this.broadcastUpdate(e,t)}handleTabWorkStateEvent(e,t){let s=this.tabs.get(e);if(s)switch(t.kind){case"session-start":case"prompt-submit":case"stop":case"interrupt":case"pre-compact":case"post-compact":this.updateTabFromHook(s.tmuxSession,t.kind);break;case"notification":this.updateTabFromHook(s.tmuxSession,"notification",t.notificationType);break;case"summary-update":s.agentSummary!==t.summary&&(s.agentSummary=t.summary,this.broadcastUpdate(e,s));break;case"last-user-message":s.lastUserMessage!==t.message&&(s.lastUserMessage=t.message,this.broadcastUpdate(e,s))}}markAgentLaunch(e,t){let s=this.tabs.get(e);if(s){if(s.lastResumeOrStartedAt=Date.now(),t?.resetAgentSession){s.agentSessionId=null,s.jsonlPath=null,s.agentSummary=null,s.lastUserMessage=null,s.lastAssistantMessage=null,s.currentAction=null,s.permissionRequest=null;let t=this.jsonlWatchers.get(e);t&&(t.watcher.close(),t.debounceTimer&&clearTimeout(t.debounceTimer),this.jsonlWatchers.delete(e)),this.persistToLayout(s);let i=(0,l.getProviderByPanelType)(s.panelType);i&&(0,a.updateTabAgentState)(s.tmuxSession,i,{sessionId:null,jsonlPath:null,summary:null,lastUserMessage:null}).catch(()=>{}),this.broadcastUpdate(e,s)}for(let t of X)setTimeout(()=>{this.poll().catch(t=>{B.error({err:t,tabId:e},"Launch readiness poll error")})},t)}}addClient(e){this.clients.add(e),this.lastRateLimits&&e.readyState===t.WebSocket.OPEN&&e.send(JSON.stringify({type:"rate-limits:update",data:this.lastRateLimits}))}removeClient(e){this.clients.delete(e)}persistToLayout(e){(0,a.updateTabCliStatus)(e.tmuxSession,e.cliState,e.dismissedAt).catch(()=>{})}broadcastUpdate(e,t,s){let a={type:"status:update",tabId:e,cliState:t.cliState,workspaceId:t.workspaceId,tabName:t.tabName,currentProcess:t.currentProcess,paneTitle:t.paneTitle,panelType:t.panelType,terminalStatus:t.terminalStatus,listeningPorts:t.listeningPorts,agentProviderId:t.agentProviderId,agentSummary:t.agentSummary,lastUserMessage:t.lastUserMessage,lastAssistantMessage:t.lastAssistantMessage,currentAction:t.currentAction,readyForReviewAt:t.readyForReviewAt,busySince:t.busySince,dismissedAt:t.dismissedAt,agentSessionId:t.agentSessionId,compactingSince:t.compactingSince,permissionRequest:t.permissionRequest,lastEvent:t.lastEvent,eventSeq:t.eventSeq};this.broadcast(a,s)}broadcastRemove(e){this.broadcast({type:"status:update",tabId:e,cliState:null,workspaceId:"",tabName:""})}static BACKPRESSURE_LIMIT=1048576;broadcast(e,s){let a=JSON.stringify(e);for(let e of this.clients)e!==s&&e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<Q.BACKPRESSURE_LIMIT&&e.send(a)}async resolveAndWatchJsonl(e,t){let s=this.tabs.get(e);if(!s||s.jsonlPath)return;let r=null,d=(0,a.parseSessionName)(t);if(d){let o=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(d.wsId));if(o){let a=(0,i.collectAllTabs)(o.root).find(e=>e.sessionName===t),d=(0,l.getProviderByPanelType)(a?.panelType),c=a&&d?d.readSessionId(a):null;if(a&&d&&c)if(d.id===y.CODEX_PROVIDER_ID)r=(await (0,S.findCodexSessionById)(c))?.jsonlPath??null;else{let e=await (0,n.getSessionCwd)(t);if(e){let t=`${(0,u.cwdToProjectPath)(e)}/${c}.jsonl`;try{await f.default.access(t),r=t}catch{}}}a?.lastUserMessage&&s.lastUserMessage!==a.lastUserMessage&&(s.lastUserMessage=a.lastUserMessage,this.broadcastUpdate(e,s))}}if(!r){let e=await (0,n.getSessionPanePid)(t);if(e){let{info:t}=await (0,o.detectAnyActiveSession)(e);r=t.jsonlPath}}if(!r)return;s.jsonlPath=r;let c=(0,l.getProviderByPanelType)(s.panelType);c&&(s.agentProviderId=c.id,s.agentSessionId=c.sessionIdFromJsonlPath(r)??s.agentSessionId),"busy"!==s.cliState&&"needs-input"!==s.cliState||this.jsonlWatchers.has(e)||this.startJsonlWatch(e,r)}startJsonlWatch(e,t){let s=this.jsonlWatchers.get(e);if(s?.jsonlPath!==t){s&&this.stopJsonlWatch(e),B.debug("startJsonlWatch tabId=%s path=%s",e,t);try{let s=(0,O.watch)(t,()=>{let s=this.jsonlWatchers.get(e);s&&(s.debounceTimer&&clearTimeout(s.debounceTimer),s.debounceTimer=setTimeout(()=>{this.onJsonlFileChange(e,t).catch(()=>{})},100))});s.on("error",()=>{this.stopJsonlWatch(e)}),this.jsonlWatchers.set(e,{watcher:s,jsonlPath:t,debounceTimer:null})}catch{}}}stopJsonlWatch(e){let t=this.jsonlWatchers.get(e);if(t){B.debug("stopJsonlWatch tabId=%s",e),t.debounceTimer&&clearTimeout(t.debounceTimer);try{t.watcher.close()}catch{}this.jsonlWatchers.delete(e)}}async onJsonlFileChange(e,t){let s=this.tabs.get(e);if(!s||"busy"!==s.cliState&&"needs-input"!==s.cliState&&"unknown"!==s.cliState&&"ready-for-review"!==s.cliState)return void this.stopJsonlWatch(e);let a=(0,l.getProviderByPanelType)(s.panelType);if(!a)return;let{currentAction:i,lastAssistantSnippet:n,reset:r,interrupted:o,lastEntryTs:d}=await a.readRuntimeSnapshot(t);(s.agentProviderId===y.CODEX_PROVIDER_ID||"codex-cli"===s.panelType)&&P(t).catch(()=>{}),o&&"busy"===s.cliState&&null!==d&&d>(s.lastInterruptTs??0)&&d>(s.lastEvent?.at??0)&&(s.lastInterruptTs=d,H.debug({tabId:e,lastEntryTs:d},"synthetic interrupt from JSONL"),this.updateTabFromHook(s.tmuxSession,"interrupt"));let u=!1;r?(null!==s.currentAction&&(s.currentAction=null,u=!0),null!==s.lastAssistantMessage&&(s.lastAssistantMessage=null,u=!0)):(null!==i&&i.summary!==s.currentAction?.summary&&(s.currentAction=i,u=!0),null!==n&&s.lastAssistantMessage!==n&&(s.lastAssistantMessage=n,u=!0)),u&&this.broadcastUpdate(e,s)}shutdown(){for(let e of(this.stopPolling(),this.rateLimitsWatcher?.stop(),[...this.jsonlWatchers.keys()]))this.stopJsonlWatch(e);for(let e of this.clients)e.readyState===t.WebSocket.OPEN&&e.close(1001,"Server shutting down");this.clients.clear()}notifyLastUserMessage(e,t){let s=(0,a.parseSessionName)(e);if(!s)return;let i=this.tabs.get(s.tabId);i&&i.lastUserMessage!==t&&(i.lastUserMessage=t,this.broadcastUpdate(s.tabId,i))}async sendWebPush(e,t,a){let i=await (0,J.getSubscriptions)();if(0===i.length)return;let n=await (0,D.getVAPIDKeys)();N.default.setVapidDetails("mailto:noreply@purplemux.app",n.publicKey,n.privateKey);let r=t.lastUserMessage?.slice(0,100)||t.tabName||e,l=(await (0,s.getWorkspaces)()).workspaces.find(e=>e.id===t.workspaceId),o="codex"===t.agentProviderId?"codex":"claude",d=JSON.stringify({title:"needs-input"===a?"Input Required":"Task Complete",body:r,tabId:e,workspaceId:t.workspaceId,providerId:o,claudeSessionId:t.agentSessionId??null,workspaceName:l?.name??"",workspaceDir:l?.directories[0]??null});if(!(0,J.isAnyDeviceVisible)())for(let e of i)try{await N.default.sendNotification(e,d)}catch(s){let t=s.statusCode;(410===t||404===t)&&await (0,J.removeSubscription)(e.endpoint),B.warn("Web push send error: %s",t)}}}e.s(["getStatusManager",0,()=>{if(!G.__ptStatusManager){let e=new Q;G.__ptStatusManager=e,(0,a.setLayoutReconciler)({reconcileWorkspaceTabs:(t,s)=>e.reconcileWorkspaceTabs(t,s),removeWorkspaceTabs:t=>e.removeWorkspaceTabs(t)})}return G.__ptStatusManager}],964759)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_lib_06lqtoi._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[387447,e=>{"use strict";var t=e.i(924868),s=e.i(814747),a=e.i(796902);let i=Promise.resolve(),n=async()=>{try{let e=await t.default.readFile(a.RATE_LIMITS_FILE,"utf-8"),s=JSON.parse(e);return{...s.claude?{claude:s.claude}:{},...s.codex?{codex:s.codex}:{}}}catch{return{}}},r=async(e,r)=>{let l=async()=>{let i={...await n(),ts:r.ts,[e]:r};return await t.default.mkdir(s.default.dirname(a.RATE_LIMITS_FILE),{recursive:!0}),await t.default.writeFile(a.RATE_LIMITS_FILE,JSON.stringify(i)),i},o=i.then(l,l);return i=o.then(()=>void 0,()=>void 0),o};e.s(["writeProviderRateLimits",0,r])},201180,71943,166832,e=>{"use strict";e.s(["deriveAgentCliState",0,(e,t)=>{if(!e||"cancelled"===t)return t;switch(e.name){case"session-start":case"interrupt":return"idle";case"prompt-submit":return"busy";case"notification":return"needs-input";case"stop":return"ready-for-review"}}],201180);var t=e.i(522734),s=e.i(924868),a=e.i(814747),i=e.i(25146),n=e.i(796902);let r=(0,i.createLogger)("rate-limits");e.s(["createRateLimitsWatcher",0,e=>{let i=null,l=null,o=0,d=a.default.dirname(n.RATE_LIMITS_FILE),u=a.default.basename(n.RATE_LIMITS_FILE),c=async()=>{try{let t=await s.default.readFile(n.RATE_LIMITS_FILE,"utf-8"),a=JSON.parse(t);a.ts&&a.ts!==o&&(o=a.ts,e(a))}catch{}},p=()=>{c();try{(i=t.default.watch(d,(e,t)=>{t===u&&(l&&clearTimeout(l),l=setTimeout(c,500))})).on("error",()=>{r.debug(`${d} watch error, retrying...`),h(),setTimeout(p,5e3)})}catch{r.debug(`${d} not available yet, retrying...`),setTimeout(p,5e3)}},h=()=>{l&&(clearTimeout(l),l=null),i&&(i.close(),i=null)};return{start:p,stop:h}}],71943);let l=/Update available!\s+([0-9][^\s]*)\s+->\s+([0-9][^\s]*)/i,o=/Update now\s+\(runs `([^`]+)`\)/i,d=/^\s*›(?:\s*$|\s+(?!\d+\.)(?!\[[ x-]\])[^\n]*)$/m,u=/^\s*›?\s*Input disabled\./m;e.s(["isCodexTuiReadyContent",0,e=>{if(!e||(e=>{let t=e.replace(/\s+/g," ");if(/Update ran successfully! Please restart Codex\./i.test(t))return{status:"success",currentVersion:null,latestVersion:null,updateCommand:null};let s=t.match(l),a=/Release notes:/i.test(t)&&/Skip until next version/i.test(t);return s&&a?{status:/Updating Codex via `/i.test(t)?"updating":"prompt",currentVersion:s[1]??null,latestVersion:s[2]??null,updateCommand:t.match(o)?.[1]??null}:/Updating Codex via `/i.test(t)?{status:"updating",currentVersion:null,latestVersion:null,updateCommand:null}:null})(e)?.status==="prompt"||u.test(e))return!1;let t=e.split("\n"),s=t.length;for(;s>0&&""===t[s-1].trim();)s-=1;if(0===s)return!1;let a=t.slice(Math.max(0,s-8),s).join("\n");return d.test(a)}],166832)},964759,e=>{"use strict";e.i(478319);var t=e.i(220951),s=e.i(322429),a=e.i(825265),i=e.i(804767),n=e.i(459015),r=e.i(333184),l=e.i(282992),o=e.i(853932),d=e.i(201180),u=e.i(746514),c=e.i(785128),p=e.i(71943),h=e.i(25146),m=e.i(971780),g=e.i(166832),y=e.i(751905),S=e.i(89101),f=e.i(924868),b=e.i(387447);let w=(0,h.createLogger)("codex-rate-limits"),v=e=>{if(!e||"number"!=typeof e.used_percent||!Number.isFinite(e.used_percent))return null;let t="number"==typeof e.resets_at&&Number.isFinite(e.resets_at)?e.resets_at:"number"==typeof e.resets_in_seconds&&Number.isFinite(e.resets_in_seconds)?Math.round(Date.now()/1e3+e.resets_in_seconds):null;return null===t?null:{used_percentage:e.used_percent,resets_at:t}},T=e=>{let t=[e.primary,e.secondary].filter(Boolean),s=null,a=null;for(let e of t){let t=v(e);t&&(300===e.window_minutes?s=t:10080===e.window_minutes&&(a=t))}return(s??=v(e.primary),a??=v(e.secondary),s||a)?{ts:Date.now()/1e3,five_hour:s,seven_day:a}:null},P=async e=>{try{let t=await f.default.stat(e);if(0===t.size)return!1;let s=Math.min(t.size,1048576),a=await f.default.open(e,"r");try{let e=Buffer.alloc(s);await a.read(e,0,s,t.size-s);let i=e.toString("utf-8").split("\n").filter(e=>e.trim());t.size>s&&i.length>0&&i.shift();let n=(e=>{for(let t=e.length-1;t>=0;t--)try{let s=JSON.parse(e[t]);if("event_msg"!==s.type||s.payload?.type!=="token_count"||!s.payload.rate_limits)continue;return T(s.payload.rate_limits)}catch{continue}return null})(i);if(!n)return!1;return await (0,b.writeProviderRateLimits)("codex",n),!0}finally{await a.close()}}catch(t){return w.debug({err:t,jsonlPath:e},"failed to cache codex rate limits"),!1}};var I=e.i(443571),A=e.i(814747),k=e.i(446786);let M=(0,h.createLogger)("session-history"),U=A.default.join(k.default.homedir(),".purplemux"),j=A.default.join(U,"session-history.json"),R=globalThis;R.__purplemuxSessionHistoryLock||(R.__purplemuxSessionHistoryLock=Promise.resolve());let _=async e=>{let t,s=new Promise(e=>{t=e}),a=R.__purplemuxSessionHistoryLock;R.__purplemuxSessionHistoryLock=s,await a;try{return await e()}finally{t()}},L=()=>({version:1,entries:[]}),W=e=>{if(!e||"object"!=typeof e||"string"!=typeof e.id||"string"!=typeof e.tabId)return null;let t="codex"===e.providerId?"codex":"claude",s="string"==typeof e.agentSessionId||null===e.agentSessionId?e.agentSessionId:"string"==typeof e.claudeSessionId?e.claudeSessionId:null;return void 0!==e.agentSessionId||void 0===e.claudeSessionId||R.__ptSessionHistoryLegacyLogged||(R.__ptSessionHistoryLegacyLogged=!0,M.info("Migrating legacy session-history entries (claudeSessionId → agentSessionId)")),{id:e.id,workspaceId:String(e.workspaceId??""),workspaceName:String(e.workspaceName??""),workspaceDir:"string"==typeof e.workspaceDir||null===e.workspaceDir?e.workspaceDir:null,tabId:e.tabId,providerId:t,agentSessionId:s,prompt:"string"==typeof e.prompt||null===e.prompt?e.prompt:null,result:"string"==typeof e.result||null===e.result?e.result:null,startedAt:Number(e.startedAt??0),completedAt:Number(e.completedAt??0),duration:Number(e.duration??0),dismissedAt:"number"==typeof e.dismissedAt||null===e.dismissedAt?e.dismissedAt:null,toolUsage:e.toolUsage??{},touchedFiles:Array.isArray(e.touchedFiles)?e.touchedFiles:[],...e.cancelled?{cancelled:!0}:{}}},x=async()=>{let e,t;try{e=await f.default.readFile(j,"utf-8")}catch{return L()}try{t=JSON.parse(e)}catch{M.warn("Failed to parse session-history.json, starting empty");try{await f.default.copyFile(j,j.replace(/\.json$/,".json.bak"))}catch{}return L()}let s=[];for(let e of t.entries??[]){let t=W(e);t&&s.push(t)}return{version:1,entries:s}},C=async e=>{let t={version:e.version,entries:e.entries.map(e=>{let{claudeSessionId:t,...s}=e;return s})},s=JSON.stringify(t.entries);if(R.__purplemuxSessionHistoryContentCache===s)return;let a=j+".tmp";try{await f.default.writeFile(a,JSON.stringify(t,null,2),{mode:384}),await f.default.rename(a,j)}catch(e){throw await f.default.unlink(a).catch(()=>{}),e}R.__purplemuxSessionHistoryContentCache=s},F=async e=>{await _(async()=>{let t=await x();t.entries.unshift(e),t.entries.length>200&&(t.entries=t.entries.slice(0,200)),await C(t)})},E=async(e,t)=>await _(async()=>{let s=await x(),a=s.entries.find(t=>t.tabId===e&&null===t.dismissedAt);return a?(a.dismissedAt=t,await C(s),a):null});var N=e.i(157469),J=e.i(75874),D=e.i(228448),q=e.i(44014),O=e.i(522734);let B=(0,h.createLogger)("status"),H=(0,h.createLogger)("hooks"),$=(e,t,s)=>({agentProviderId:e?.id,agentSummary:e?.readSummary(t)??null,agentSessionId:e?.sessionIdFromJsonlPath(s??null)??e?.readSessionId(t)??null}),V=new Set(["permission_prompt","worker_permission_prompt"]),z=new Set(["busy","idle","needs-input","ready-for-review"]),K=/^[^|]+\|[^|]+$/,X=[700,1500,3e3,5e3,8e3],G=globalThis;class Q{tabs=new Map;pollingTimer=null;currentInterval=0;clients=new Set;initialized=!1;rateLimitsWatcher=null;lastRateLimits=null;jsonlWatchers=new Map;compactStaleTimers=new Map;async init(){this.initialized||(this.initialized=!0,await this.scanAll(),this.startPolling(),this.rateLimitsWatcher=(0,p.createRateLimitsWatcher)(e=>{this.lastRateLimits=e,this.broadcast({type:"rate-limits:update",data:e})}),this.rateLimitsWatcher.start())}async scanAll(){let{workspaces:e}=await (0,s.getWorkspaces)(),t=await (0,n.getAllPanesInfo)();for(let e of[...this.jsonlWatchers.keys()])this.stopJsonlWatch(e);for(let s of(this.tabs.clear(),e)){let e=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(e)for(let a of(0,i.collectAllTabs)(e.root)){let e=t.get(a.sessionName),i=(0,l.getProviderByPanelType)(a.panelType),n=await this.readTabMetadata(e,i,a),r=a.cliState??"idle",o="busy"===r?"unknown":r,{terminalStatus:d,listeningPorts:u}=i?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(e),p=e?.command,h=e?`${e.command}|${e.path}`:void 0,m="needs-input"===o?{name:"notification",at:Date.now(),seq:0}:null;this.tabs.set(a.id,{cliState:o,workspaceId:s.id,tabName:a.name||(h?(0,c.formatTabTitle)(h,a.panelType):""),currentProcess:p,paneTitle:h,tmuxSession:a.sessionName,panelType:a.panelType,terminalStatus:d,listeningPorts:u,...$(i,a,n.jsonlPath),lastUserMessage:a.lastUserMessage,lastAssistantMessage:n.lastAssistantSnippet,currentAction:n.currentAction,readyForReviewAt:"ready-for-review"===o?Date.now():null,busySince:null,dismissedAt:a.dismissedAt??null,jsonlPath:n.jsonlPath,lastEvent:m,eventSeq:0}),("needs-input"===o||"unknown"===o)&&n.jsonlPath&&this.startJsonlWatch(a.id,n.jsonlPath),"unknown"===o&&this.resolveUnknown(a.id).catch(e=>B.warn("resolveUnknown failed: %s",e))}}}async resolveUnknown(e){let t=this.tabs.get(e);if(!t||"unknown"!==t.cliState)return;let s=(0,l.getProviderByPanelType)(t.panelType),a=(await (0,n.getAllPanesInfo)()).get(t.tmuxSession),i=a?.pid?await (0,r.getChildPids)(a.pid):[];if(!(a?.pid&&s&&await s.isAgentRunning(a.pid,i))){this.applyCliState(e,t,"idle",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(e,t);return}if(s&&t.jsonlPath){let{idle:a,stale:i,lastAssistantSnippet:n}=await s.readRuntimeSnapshot(t.jsonlPath);if(a&&!i&&n){this.applyCliState(e,t,"ready-for-review",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(e,t);return}}}async readTabMetadata(e,t,s){let a={lastAssistantSnippet:null,currentAction:null,jsonlPath:null};if(!e||!e.pid||!t)return a;let i=await (0,r.getChildPids)(e.pid);if(!await t.isAgentRunning(e.pid,i))return a;if(s){let e=t.readJsonlPath(s);if(e)try{await f.default.access(e);let{lastAssistantSnippet:s,currentAction:a}=await t.readRuntimeSnapshot(e);return{lastAssistantSnippet:s,currentAction:a,jsonlPath:e}}catch{}let a=t.readSessionId(s);if(a&&t.id===y.CODEX_PROVIDER_ID){let e=await (0,S.findCodexSessionById)(a);if(e?.jsonlPath){let{lastAssistantSnippet:s,currentAction:a}=await t.readRuntimeSnapshot(e.jsonlPath);return{lastAssistantSnippet:s,currentAction:a,jsonlPath:e.jsonlPath}}}}let n=await t.detectActiveSession(e.pid,i);if("running"!==n.status||!n.jsonlPath)return{lastAssistantSnippet:null,currentAction:null,jsonlPath:n.jsonlPath??null};let{lastAssistantSnippet:l,currentAction:o}=await t.readRuntimeSnapshot(n.jsonlPath);return{lastAssistantSnippet:l,currentAction:o,jsonlPath:n.jsonlPath}}async detectTerminalStatus(e){if(!e||!e.pid)return{terminalStatus:"idle",listeningPorts:[]};let t=await (0,n.getListeningPorts)(e.pid);return t.length>0?{terminalStatus:"server",listeningPorts:t}:{terminalStatus:n.SAFE_SHELLS.has(e.command)?"idle":"running",listeningPorts:[]}}getPollingInterval(){let e=this.tabs.size;return e>=21?6e4:e>=11?45e3:3e4}async rescan(){await this.scanAll()}startPolling(){this.stopPolling(),this.currentInterval=this.getPollingInterval(),this.pollingTimer=setInterval(()=>{this.poll().catch(e=>{B.error({err:e},"Polling error")})},this.currentInterval)}stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null,this.currentInterval=0)}async poll(){let{workspaces:e}=await (0,s.getWorkspaces)(),t=await (0,n.getAllPanesInfo)(),o=new Set,d=new Set(this.tabs.keys()),u=Date.now();for(let s of e){let e=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(e)for(let d of(0,i.collectAllTabs)(e.root)){o.add(d.id);let e=this.tabs.get(d.id),i=t.get(d.sessionName),p=(0,l.getProviderByPanelType)(d.panelType),{terminalStatus:h,listeningPorts:m}=p?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(i),g=i?.command,y=i?`${i.command}|${i.path}`:void 0;if(!e){let e=d.cliState??"idle",t="busy"===e?"unknown":e,a=await this.readTabMetadata(i,p,d),n="needs-input"===t?{name:"notification",at:Date.now(),seq:0}:null,r={cliState:t,workspaceId:s.id,tabName:d.name||(y?(0,c.formatTabTitle)(y,d.panelType):""),currentProcess:g,paneTitle:y,tmuxSession:d.sessionName,panelType:d.panelType,terminalStatus:h,listeningPorts:m,...$(p,d,a.jsonlPath),lastUserMessage:d.lastUserMessage,lastAssistantMessage:a.lastAssistantSnippet,currentAction:a.currentAction,jsonlPath:a.jsonlPath,lastEvent:n,eventSeq:0};this.tabs.set(d.id,r),this.persistToLayout(r),this.broadcastUpdate(d.id,r),"unknown"===t&&this.resolveUnknown(d.id).catch(e=>B.warn("resolveUnknown failed: %s",e));continue}let S=e.currentProcess!==g,f=e.lastUserMessage!==d.lastUserMessage,b=e.panelType!==d.panelType,w=await this.readTabMetadata(i,p,d);e.tabName=d.name||(y?(0,c.formatTabTitle)(y,d.panelType):""),e.currentProcess=g,e.paneTitle=y,e.workspaceId=s.id,e.panelType=d.panelType,e.agentProviderId=p?.id,e.agentSessionId=p?.sessionIdFromJsonlPath(w.jsonlPath)??p?.readSessionId(d)??null,e.jsonlPath=w.jsonlPath??e.jsonlPath,e.lastUserMessage=d.lastUserMessage,S&&(e.processRetries=3);let v=!S&&(e.processRetries??0)>0;v&&(e.processRetries=e.processRetries-1);let T=e.listeningPorts,P=T?.length!==m.length||m.some((e,t)=>T[t]!==e),I=e.terminalStatus!==h||P;I&&(e.terminalStatus=h,e.listeningPorts=m);let A=!1,k=p?p.readSummary(d):null;if("busy"===e.cliState||"needs-input"===e.cliState){let t=await (0,n.getPaneTitle)(d.sessionName),s=p?.parsePaneTitle(t)??null,i=s??k;i!==e.agentSummary&&(e.agentSummary=i,A=!0,s&&p&&(0,a.updateTabAgentSummary)(d.sessionName,p,s).catch(()=>{}))}else e.agentSummary!==k&&(e.agentSummary=k,A=!0);let M=null,U=async()=>{if(null!==M)return M;if(!i?.pid||!p)return M=!1,!1;let e=await (0,r.getChildPids)(i.pid);return M=await p.isAgentRunning(i.pid,e)};if("busy"===e.cliState&&e.lastEvent&&u-e.lastEvent.at>6e5&&!await U()){B.info({tabId:d.id},"busy stuck — agent process gone, forcing idle"),this.applyCliState(d.id,e,"idle",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(d.id,e);continue}if(p&&z.has(e.cliState)){let t=e.lastResumeOrStartedAt;if(!(void 0!==t&&u-t<5e3)){let t=e.paneTitle??"",s=!!t&&K.test(t);if((!t||s)&&!await U()){B.info({tabId:d.id,prevState:e.cliState},"agent process gone — transitioning to inactive"),this.applyCliState(d.id,e,"inactive",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(d.id,e);continue}}}if("inactive"===e.cliState&&"codex-cli"===e.panelType&&p&&await this.checkCodexTuiReady(e,U)){H.debug({tabId:d.id},"codex tui ready — synthetic session-start"),this.updateTabFromHook(e.tmuxSession,"session-start");continue}(I||S||v||f||b||A)&&this.broadcastUpdate(d.id,e)}}for(let e of d)!o.has(e)&&this.tabs.has(e)&&(this.stopJsonlWatch(e),this.tabs.delete(e),this.broadcastRemove(e));let p=this.getPollingInterval();this.pollingTimer&&p!==this.currentInterval&&this.startPolling()}getAllForClient(){let e={};for(let[t,s]of this.tabs)e[t]={cliState:s.cliState,workspaceId:s.workspaceId,tabName:s.tabName,currentProcess:s.currentProcess,paneTitle:s.paneTitle,panelType:s.panelType,terminalStatus:s.terminalStatus,listeningPorts:s.listeningPorts,agentProviderId:s.agentProviderId,agentSummary:s.agentSummary,lastUserMessage:s.lastUserMessage,lastAssistantMessage:s.lastAssistantMessage,currentAction:s.currentAction,readyForReviewAt:s.readyForReviewAt,busySince:s.busySince,dismissedAt:s.dismissedAt,agentSessionId:s.agentSessionId,compactingSince:s.compactingSince,permissionRequest:s.permissionRequest,lastEvent:s.lastEvent,eventSeq:s.eventSeq};return e}applyCliState(e,t,s,a={}){let i=t.cliState;if(i===s)return;let n=t.busySince;t.cliState=s,t.readyForReviewAt="ready-for-review"===s?Date.now():null,t.busySince="busy"===s?Date.now():null,"busy"===s&&(t.dismissedAt=null),"needs-input"===i&&"needs-input"!==s&&t.permissionRequest&&(t.permissionRequest=null),"ready-for-review"===s&&t.jsonlPath&&new Promise(e=>setTimeout(e,500)).then(()=>this.saveSessionHistory(e,t,n,!1)).catch(e=>{B.warn("Failed to save session history: %s",e)}),"ready-for-review"!==s||a.silent||this.sendWebPush(e,t,"review").catch(e=>{B.warn("Web push failed: %s",e)}),"needs-input"!==s||a.silent||this.sendWebPush(e,t,"needs-input").catch(e=>{B.warn("Web push failed: %s",e)});let r=("busy"===s||"needs-input"===s)&&t.jsonlPath,l="ready-for-review"===s&&this.jsonlWatchers.has(e);r&&!this.jsonlWatchers.has(e)?this.startJsonlWatch(e,t.jsonlPath):!r&&!l&&this.jsonlWatchers.has(e)&&this.stopJsonlWatch(e)}async saveSessionHistory(e,t,a,i){if(!t.lastUserMessage)return;let n=t.agentProviderId?(0,l.getProvider)(t.agentProviderId):(0,l.getProviderByPanelType)(t.panelType),r=t.jsonlPath&&n?await n.readSessionHistoryStats(t.jsonlPath):null,{workspaces:o}=await (0,s.getWorkspaces)(),d=o.find(e=>e.id===t.workspaceId),u=Date.now(),c=r?.firstUserTs??a??u,p=i?u:r?.lastAssistantTs??u,h=i?p-c:r?.turnDurationMs??p-c,m="codex"===t.agentProviderId?"codex":"claude",g={id:(0,q.nanoid)(),workspaceId:t.workspaceId,workspaceName:d?.name??t.workspaceId,workspaceDir:d?.directories[0]??null,tabId:e,providerId:m,agentSessionId:t.agentSessionId??null,prompt:r?.lastUserText??t.lastUserMessage,result:r?.lastAssistantText??null,startedAt:c,completedAt:p,duration:h,dismissedAt:p,toolUsage:r?.toolUsage??{},touchedFiles:r?.touchedFiles??[],...i?{cancelled:!0}:{}};await F(g),this.broadcast({type:"session-history:update",entry:g})}dismissTab(e,t){let s=this.tabs.get(e);if(!s||"ready-for-review"!==s.cliState)return;let a=Date.now();this.applyCliState(e,s,"idle",{silent:!0}),s.dismissedAt=a,this.persistToLayout(s),this.broadcastUpdate(e,s,t),E(e,a).then(e=>{e&&this.broadcast({type:"session-history:update",entry:e})}).catch(e=>{B.warn("Failed to update session history dismissedAt: %s",e)})}ackNotificationInput(e,t){let s=this.tabs.get(e);s&&"needs-input"===s.cliState&&s.lastEvent?.name==="notification"&&s.lastEvent.seq===t&&(H.debug({tabId:e,seq:t},"ack: needs-input→busy"),this.applyCliState(e,s,"busy"),this.persistToLayout(s),this.broadcastUpdate(e,s))}async checkCodexTuiReady(e,t){if(!await t())return!1;let s=await (0,m.capturePaneAtWidth)(e.tmuxSession,80,24).catch(e=>(B.warn("codex tui ready capture failed: %s",e),null));return!!s&&(0,g.isCodexTuiReadyContent)(s)}async recoverUnknownIfPending(e){let t=this.tabs.get(e);if(!t)return{recovered:!1,reason:"no-entry"};if("unknown"!==t.cliState)return{recovered:!1,reason:"not-unknown"};let s=await (0,m.capturePaneAtWidth)(t.tmuxSession,120,50).catch(e=>(B.warn("recoverUnknownIfPending capture failed: %s",e),null));if(!s)return{recovered:!1,reason:"capture-failed"};let{options:a}=(0,I.parsePermissionOptions)(s);if(0===a.length)return{recovered:!1,reason:"no-options"};let i=Date.now(),n=(t.eventSeq??0)+1;return t.eventSeq=n,t.lastEvent={name:"notification",at:i,seq:n},H.debug({tabId:e,seq:n,options:a.length},"recover unknown→needs-input from pane capture"),this.applyCliState(e,t,"needs-input",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(e,t),{recovered:!0}}findTabIdBySession(e){for(let[t,s]of this.tabs)if(s.tmuxSession===e)return t}updateTabFromHook(e,t,s){let a=this.findTabIdBySession(e);if(!a)return void H.debug({tmuxSession:e,event:t,notificationType:s},"no tabId for session");let i=this.tabs.get(a);if(!i)return void H.debug({tabId:a,event:t,notificationType:s},"no entry for tab");if("pre-compact"===t||"post-compact"===t){H.debug({tabId:a,event:t},"compact hook"),this.setCompacting(a,i,"pre-compact"===t?Date.now():null);return}if("session-start"!==t&&"prompt-submit"!==t&&"notification"!==t&&"stop"!==t&&"interrupt"!==t)return void H.debug({tabId:a,event:t,notificationType:s},"unknown event, ignoring");if("notification"===t&&s&&!V.has(s))return void H.debug({tabId:a,event:t,notificationType:s},"non-input notification, skipping state transition");let n=Date.now(),r=(i.eventSeq??0)+1;i.eventSeq=r,i.lastEvent={name:t,at:n,seq:r},"session-start"===t&&(i.lastResumeOrStartedAt=n),this.broadcast({type:"status:hook-event",tabId:a,event:i.lastEvent});let o=i.cliState,u=(0,d.deriveAgentCliState)(i.lastEvent,o);if(H.debug({tabId:a,event:t,notificationType:s,seq:r,prevState:o,newState:u,transition:o!==u},`processed ${t}${s?`(${s})`:""} ${o}→${u}`),o!==u&&(this.applyCliState(a,i,u),this.persistToLayout(i),this.broadcastUpdate(a,i)),"busy"!==u&&"needs-input"!==u||i.jsonlPath||this.resolveAndWatchJsonl(a,e).catch(()=>{}),"stop"===t&&i.jsonlPath){let e=(e=!1)=>{let t=(0,l.getProviderByPanelType)(i.panelType);t&&t.readRuntimeSnapshot(i.jsonlPath,{force:e}).then(({currentAction:e,lastAssistantSnippet:t,reset:s})=>{let n=!1;s?(null!==i.currentAction&&(i.currentAction=null,n=!0),null!==i.lastAssistantMessage&&(i.lastAssistantMessage=null,n=!0)):(null!==e&&e.summary!==i.currentAction?.summary&&(i.currentAction=e,n=!0),null!==t&&i.lastAssistantMessage!==t&&(i.lastAssistantMessage=t,n=!0)),n&&this.broadcastUpdate(a,i)}).catch(()=>{})};e(),setTimeout(()=>{e(!0)},500)}}handleProviderEvent(e,t,s){let a=this.findTabIdBySession(t);if(!a)return H.debug({providerId:e,tmuxSession:t,event:s.kind},"no tabId for provider event"),!1;let i=this.tabs.get(a);if(!i)return H.debug({providerId:e,tabId:a,event:s.kind},"no entry for provider event tab"),!1;let n=(0,l.getProviderByPanelType)(i.panelType);return n&&n.id!==e?(H.debug({providerId:e,expectedProviderId:n.id,tabId:a,event:s.kind},"provider event panel mismatch"),!1):(this.handleTabWorkStateEvent(a,s),!0)}applyAgentHookMeta(e,t,s){let i=this.findTabIdBySession(t);if(!i)return null;let n=this.tabs.get(i);if(!n)return null;let r=(0,l.getProviderByPanelType)(n.panelType);if(r&&r.id!==e)return H.debug({providerId:e,expectedProviderId:r.id,tabId:i},"provider hook meta panel mismatch"),null;let o=!1;if(n.agentProviderId!==e&&(n.agentProviderId=e,o=!0),void 0!==s.sessionId&&n.agentSessionId!==s.sessionId&&(n.agentSessionId=s.sessionId,o=!0),void 0!==s.jsonlPath&&n.jsonlPath!==s.jsonlPath&&(n.jsonlPath=s.jsonlPath,o=!0),s.clearMessages&&(null!==n.agentSummary&&(n.agentSummary=null,o=!0),null!==n.lastUserMessage&&(n.lastUserMessage=null,o=!0),null!==n.lastAssistantMessage&&(n.lastAssistantMessage=null,o=!0)),void 0!==s.lastUserMessage&&n.lastUserMessage!==s.lastUserMessage&&(n.lastUserMessage=s.lastUserMessage,o=!0),void 0!==s.agentSummary&&n.agentSummary!==s.agentSummary&&(n.agentSummary=s.agentSummary,o=!0),void 0!==s.permissionRequest&&n.permissionRequest!==s.permissionRequest&&(n.permissionRequest=s.permissionRequest,o=!0),o){let t=r??(0,l.getProvider)(e);t&&(0,a.updateTabAgentState)(n.tmuxSession,t,{...void 0!==s.sessionId?{sessionId:s.sessionId}:{},...void 0!==s.jsonlPath?{jsonlPath:s.jsonlPath}:{},...void 0!==s.agentSummary||s.clearMessages?{summary:s.clearMessages?null:s.agentSummary??null}:{},...void 0!==s.lastUserMessage||s.clearMessages?{lastUserMessage:s.clearMessages?null:s.lastUserMessage??null}:{}}).catch(()=>{}),this.persistToLayout(n),this.broadcastUpdate(i,n)}return{tabId:i,cliState:n.cliState}}setCompacting(e,t,s){let a=this.compactStaleTimers.get(e);if(a&&(clearTimeout(a),this.compactStaleTimers.delete(e)),(t.compactingSince??null)!==s&&(t.compactingSince=s,this.broadcastUpdate(e,t),null!==s)){let t=setTimeout(()=>{this.compactStaleTimers.delete(e);let t=this.tabs.get(e);t&&t.compactingSince===s&&(t.compactingSince=null,H.debug({tabId:e},"compact stale, auto-cleared"),this.broadcastUpdate(e,t))},6e4);this.compactStaleTimers.set(e,t)}}removeTab(e){let t=this.tabs.get(e);t&&("busy"===t.cliState||"needs-input"===t.cliState)&&t.lastUserMessage&&this.saveSessionHistory(e,t,t.busySince,!0).catch(e=>{B.warn("Failed to save cancelled session history: %s",e)}),this.stopJsonlWatch(e);let s=this.compactStaleTimers.get(e);s&&(clearTimeout(s),this.compactStaleTimers.delete(e)),this.tabs.delete(e),this.broadcastRemove(e)}reconcileWorkspaceTabs(e,t){let s=new Set(t);for(let[t,a]of this.tabs)a.workspaceId!==e||s.has(t)||this.removeTab(t)}removeWorkspaceTabs(e){for(let[t,s]of this.tabs)s.workspaceId===e&&this.removeTab(t)}registerTab(e,t){this.tabs.set(e,t),this.broadcastUpdate(e,t)}handleTabWorkStateEvent(e,t){let s=this.tabs.get(e);if(s)switch(t.kind){case"session-start":case"prompt-submit":case"stop":case"interrupt":case"pre-compact":case"post-compact":this.updateTabFromHook(s.tmuxSession,t.kind);break;case"notification":this.updateTabFromHook(s.tmuxSession,"notification",t.notificationType);break;case"summary-update":s.agentSummary!==t.summary&&(s.agentSummary=t.summary,this.broadcastUpdate(e,s));break;case"last-user-message":s.lastUserMessage!==t.message&&(s.lastUserMessage=t.message,this.broadcastUpdate(e,s))}}markAgentLaunch(e,t){let s=this.tabs.get(e);if(s){if(s.lastResumeOrStartedAt=Date.now(),t?.resetAgentSession){s.agentSessionId=null,s.jsonlPath=null,s.agentSummary=null,s.lastUserMessage=null,s.lastAssistantMessage=null,s.currentAction=null,s.permissionRequest=null;let t=this.jsonlWatchers.get(e);t&&(t.watcher.close(),t.debounceTimer&&clearTimeout(t.debounceTimer),this.jsonlWatchers.delete(e)),this.persistToLayout(s);let i=(0,l.getProviderByPanelType)(s.panelType);i&&(0,a.updateTabAgentState)(s.tmuxSession,i,{sessionId:null,jsonlPath:null,summary:null,lastUserMessage:null}).catch(()=>{}),this.broadcastUpdate(e,s)}for(let t of X)setTimeout(()=>{this.poll().catch(t=>{B.error({err:t,tabId:e},"Launch readiness poll error")})},t)}}addClient(e){this.clients.add(e),this.lastRateLimits&&e.readyState===t.WebSocket.OPEN&&e.send(JSON.stringify({type:"rate-limits:update",data:this.lastRateLimits}))}removeClient(e){this.clients.delete(e)}persistToLayout(e){(0,a.updateTabCliStatus)(e.tmuxSession,e.cliState,e.dismissedAt).catch(()=>{})}broadcastUpdate(e,t,s){let a={type:"status:update",tabId:e,cliState:t.cliState,workspaceId:t.workspaceId,tabName:t.tabName,currentProcess:t.currentProcess,paneTitle:t.paneTitle,panelType:t.panelType,terminalStatus:t.terminalStatus,listeningPorts:t.listeningPorts,agentProviderId:t.agentProviderId,agentSummary:t.agentSummary,lastUserMessage:t.lastUserMessage,lastAssistantMessage:t.lastAssistantMessage,currentAction:t.currentAction,readyForReviewAt:t.readyForReviewAt,busySince:t.busySince,dismissedAt:t.dismissedAt,agentSessionId:t.agentSessionId,compactingSince:t.compactingSince,permissionRequest:t.permissionRequest,lastEvent:t.lastEvent,eventSeq:t.eventSeq};this.broadcast(a,s)}broadcastRemove(e){this.broadcast({type:"status:update",tabId:e,cliState:null,workspaceId:"",tabName:""})}static BACKPRESSURE_LIMIT=1048576;broadcast(e,s){let a=JSON.stringify(e);for(let e of this.clients)e!==s&&e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<Q.BACKPRESSURE_LIMIT&&e.send(a)}async resolveAndWatchJsonl(e,t){let s=this.tabs.get(e);if(!s||s.jsonlPath)return;let r=null,d=(0,a.parseSessionName)(t);if(d){let o=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(d.wsId));if(o){let a=(0,i.collectAllTabs)(o.root).find(e=>e.sessionName===t),d=(0,l.getProviderByPanelType)(a?.panelType),c=a&&d?d.readSessionId(a):null;if(a&&d&&c)if(d.id===y.CODEX_PROVIDER_ID)r=(await (0,S.findCodexSessionById)(c))?.jsonlPath??null;else{let e=await (0,n.getSessionCwd)(t);if(e){let t=`${(0,u.cwdToProjectPath)(e)}/${c}.jsonl`;try{await f.default.access(t),r=t}catch{}}}a?.lastUserMessage&&s.lastUserMessage!==a.lastUserMessage&&(s.lastUserMessage=a.lastUserMessage,this.broadcastUpdate(e,s))}}if(!r){let e=await (0,n.getSessionPanePid)(t);if(e){let{info:t}=await (0,o.detectAnyActiveSession)(e);r=t.jsonlPath}}if(!r)return;s.jsonlPath=r;let c=(0,l.getProviderByPanelType)(s.panelType);c&&(s.agentProviderId=c.id,s.agentSessionId=c.sessionIdFromJsonlPath(r)??s.agentSessionId),"busy"!==s.cliState&&"needs-input"!==s.cliState||this.jsonlWatchers.has(e)||this.startJsonlWatch(e,r)}startJsonlWatch(e,t){let s=this.jsonlWatchers.get(e);if(s?.jsonlPath!==t){s&&this.stopJsonlWatch(e),B.debug("startJsonlWatch tabId=%s path=%s",e,t);try{let s=(0,O.watch)(t,()=>{let s=this.jsonlWatchers.get(e);s&&(s.debounceTimer&&clearTimeout(s.debounceTimer),s.debounceTimer=setTimeout(()=>{this.onJsonlFileChange(e,t).catch(()=>{})},100))});s.on("error",()=>{this.stopJsonlWatch(e)}),this.jsonlWatchers.set(e,{watcher:s,jsonlPath:t,debounceTimer:null})}catch{}}}stopJsonlWatch(e){let t=this.jsonlWatchers.get(e);if(t){B.debug("stopJsonlWatch tabId=%s",e),t.debounceTimer&&clearTimeout(t.debounceTimer);try{t.watcher.close()}catch{}this.jsonlWatchers.delete(e)}}async onJsonlFileChange(e,t){let s=this.tabs.get(e);if(!s||"busy"!==s.cliState&&"needs-input"!==s.cliState&&"unknown"!==s.cliState&&"ready-for-review"!==s.cliState)return void this.stopJsonlWatch(e);let a=(0,l.getProviderByPanelType)(s.panelType);if(!a)return;let{currentAction:i,lastAssistantSnippet:n,reset:r,interrupted:o,lastEntryTs:d}=await a.readRuntimeSnapshot(t);(s.agentProviderId===y.CODEX_PROVIDER_ID||"codex-cli"===s.panelType)&&P(t).catch(()=>{}),o&&"busy"===s.cliState&&null!==d&&d>(s.lastInterruptTs??0)&&d>(s.lastEvent?.at??0)&&(s.lastInterruptTs=d,H.debug({tabId:e,lastEntryTs:d},"synthetic interrupt from JSONL"),this.updateTabFromHook(s.tmuxSession,"interrupt"));let u=!1;r?(null!==s.currentAction&&(s.currentAction=null,u=!0),null!==s.lastAssistantMessage&&(s.lastAssistantMessage=null,u=!0)):(null!==i&&i.summary!==s.currentAction?.summary&&(s.currentAction=i,u=!0),null!==n&&s.lastAssistantMessage!==n&&(s.lastAssistantMessage=n,u=!0)),u&&this.broadcastUpdate(e,s)}shutdown(){for(let e of(this.stopPolling(),this.rateLimitsWatcher?.stop(),[...this.jsonlWatchers.keys()]))this.stopJsonlWatch(e);for(let e of this.clients)e.readyState===t.WebSocket.OPEN&&e.close(1001,"Server shutting down");this.clients.clear()}notifyLastUserMessage(e,t){let s=(0,a.parseSessionName)(e);if(!s)return;let i=this.tabs.get(s.tabId);i&&i.lastUserMessage!==t&&(i.lastUserMessage=t,this.broadcastUpdate(s.tabId,i))}async sendWebPush(e,t,a){let i=await (0,J.getSubscriptions)();if(0===i.length)return;let n=await (0,D.getVAPIDKeys)();N.default.setVapidDetails("mailto:noreply@purplemux.app",n.publicKey,n.privateKey);let r=t.lastUserMessage?.slice(0,100)||t.tabName||e,l=(await (0,s.getWorkspaces)()).workspaces.find(e=>e.id===t.workspaceId),o="codex"===t.agentProviderId?"codex":"claude",d=JSON.stringify({title:"needs-input"===a?"Input Required":"Task Complete",body:r,tabId:e,workspaceId:t.workspaceId,providerId:o,claudeSessionId:t.agentSessionId??null,workspaceName:l?.name??"",workspaceDir:l?.directories[0]??null});if(!(0,J.isAnyDeviceVisible)())for(let e of i)try{await N.default.sendNotification(e,d)}catch(s){let t=s.statusCode;(410===t||404===t)&&await (0,J.removeSubscription)(e.endpoint),B.warn("Web push send error: %s",t)}}}e.s(["getStatusManager",0,()=>{if(!G.__ptStatusManager){let e=new Q;G.__ptStatusManager=e,(0,a.setLayoutReconciler)({reconcileWorkspaceTabs:(t,s)=>e.reconcileWorkspaceTabs(t,s),removeWorkspaceTabs:t=>e.removeWorkspaceTabs(t)})}return G.__ptStatusManager}],964759)}];
|
|
1
|
+
module.exports=[387447,e=>{"use strict";var t=e.i(924868),s=e.i(814747),a=e.i(796902);let i=Promise.resolve(),n=async()=>{try{let e=await t.default.readFile(a.RATE_LIMITS_FILE,"utf-8"),s=JSON.parse(e);return{...s.claude?{claude:s.claude}:{},...s.codex?{codex:s.codex}:{}}}catch{return{}}},r=async(e,r)=>{let l=async()=>{let i={...await n(),ts:r.ts,[e]:r};return await t.default.mkdir(s.default.dirname(a.RATE_LIMITS_FILE),{recursive:!0}),await t.default.writeFile(a.RATE_LIMITS_FILE,JSON.stringify(i)),i},o=i.then(l,l);return i=o.then(()=>void 0,()=>void 0),o};e.s(["writeProviderRateLimits",0,r])},201180,71943,38932,e=>{"use strict";e.s(["deriveAgentCliState",0,(e,t)=>{if(!e||"cancelled"===t)return t;switch(e.name){case"session-start":case"interrupt":return"idle";case"prompt-submit":return"busy";case"notification":return"needs-input";case"stop":return"ready-for-review"}}],201180);var t=e.i(522734),s=e.i(924868),a=e.i(814747),i=e.i(25146),n=e.i(796902);let r=(0,i.createLogger)("rate-limits");e.s(["createRateLimitsWatcher",0,e=>{let i=null,l=null,o=0,d=a.default.dirname(n.RATE_LIMITS_FILE),u=a.default.basename(n.RATE_LIMITS_FILE),c=async()=>{try{let t=await s.default.readFile(n.RATE_LIMITS_FILE,"utf-8"),a=JSON.parse(t);a.ts&&a.ts!==o&&(o=a.ts,e(a))}catch{}},p=()=>{c();try{(i=t.default.watch(d,(e,t)=>{t===u&&(l&&clearTimeout(l),l=setTimeout(c,500))})).on("error",()=>{r.debug(`${d} watch error, retrying...`),h(),setTimeout(p,5e3)})}catch{r.debug(`${d} not available yet, retrying...`),setTimeout(p,5e3)}},h=()=>{l&&(clearTimeout(l),l=null),i&&(i.close(),i=null)};return{start:p,stop:h}}],71943);let l=/Update available!\s+([0-9][^\s]*)\s+->\s+([0-9][^\s]*)/i,o=/Update now\s+\(runs `([^`]+)`\)/i,d=/^\s*›(?:\s*$|\s+(?!\d+\.)(?!\[[ x-]\])[^\n]*)$/m,u=/^\s*›?\s*Input disabled\./m;e.s(["isCodexTuiReadyContent",0,e=>{if(!e||(e=>{let t=e.replace(/\s+/g," ");if(/Update ran successfully! Please restart Codex\./i.test(t))return{status:"success",currentVersion:null,latestVersion:null,updateCommand:null};let s=t.match(l),a=/Release notes:/i.test(t)&&/Skip until next version/i.test(t);return s&&a?{status:/Updating Codex via `/i.test(t)?"updating":"prompt",currentVersion:s[1]??null,latestVersion:s[2]??null,updateCommand:t.match(o)?.[1]??null}:/Updating Codex via `/i.test(t)?{status:"updating",currentVersion:null,latestVersion:null,updateCommand:null}:null})(e)?.status==="prompt"||u.test(e))return!1;let t=e.split("\n"),s=t.length;for(;s>0&&""===t[s-1].trim();)s-=1;if(0===s)return!1;let a=t.slice(Math.max(0,s-8),s).join("\n");return d.test(a)}],38932)},964759,e=>{"use strict";e.i(478319);var t=e.i(220951),s=e.i(322429),a=e.i(825265),i=e.i(804767),n=e.i(459015),r=e.i(333184),l=e.i(282992),o=e.i(853932),d=e.i(201180),u=e.i(746514),c=e.i(785128),p=e.i(71943),h=e.i(25146),m=e.i(971780),g=e.i(38932),y=e.i(751905),S=e.i(89101),f=e.i(924868),b=e.i(387447);let w=(0,h.createLogger)("codex-rate-limits"),v=e=>{if(!e||"number"!=typeof e.used_percent||!Number.isFinite(e.used_percent))return null;let t="number"==typeof e.resets_at&&Number.isFinite(e.resets_at)?e.resets_at:"number"==typeof e.resets_in_seconds&&Number.isFinite(e.resets_in_seconds)?Math.round(Date.now()/1e3+e.resets_in_seconds):null;return null===t?null:{used_percentage:e.used_percent,resets_at:t}},T=e=>{let t=[e.primary,e.secondary].filter(Boolean),s=null,a=null;for(let e of t){let t=v(e);t&&(300===e.window_minutes?s=t:10080===e.window_minutes&&(a=t))}return(s??=v(e.primary),a??=v(e.secondary),s||a)?{ts:Date.now()/1e3,five_hour:s,seven_day:a}:null},P=async e=>{try{let t=await f.default.stat(e);if(0===t.size)return!1;let s=Math.min(t.size,1048576),a=await f.default.open(e,"r");try{let e=Buffer.alloc(s);await a.read(e,0,s,t.size-s);let i=e.toString("utf-8").split("\n").filter(e=>e.trim());t.size>s&&i.length>0&&i.shift();let n=(e=>{for(let t=e.length-1;t>=0;t--)try{let s=JSON.parse(e[t]);if("event_msg"!==s.type||s.payload?.type!=="token_count"||!s.payload.rate_limits)continue;return T(s.payload.rate_limits)}catch{continue}return null})(i);if(!n)return!1;return await (0,b.writeProviderRateLimits)("codex",n),!0}finally{await a.close()}}catch(t){return w.debug({err:t,jsonlPath:e},"failed to cache codex rate limits"),!1}};var I=e.i(443571),A=e.i(814747),k=e.i(446786);let M=(0,h.createLogger)("session-history"),U=A.default.join(k.default.homedir(),".purplemux"),j=A.default.join(U,"session-history.json"),R=globalThis;R.__purplemuxSessionHistoryLock||(R.__purplemuxSessionHistoryLock=Promise.resolve());let _=async e=>{let t,s=new Promise(e=>{t=e}),a=R.__purplemuxSessionHistoryLock;R.__purplemuxSessionHistoryLock=s,await a;try{return await e()}finally{t()}},L=()=>({version:1,entries:[]}),W=e=>{if(!e||"object"!=typeof e||"string"!=typeof e.id||"string"!=typeof e.tabId)return null;let t="codex"===e.providerId?"codex":"claude",s="string"==typeof e.agentSessionId||null===e.agentSessionId?e.agentSessionId:"string"==typeof e.claudeSessionId?e.claudeSessionId:null;return void 0!==e.agentSessionId||void 0===e.claudeSessionId||R.__ptSessionHistoryLegacyLogged||(R.__ptSessionHistoryLegacyLogged=!0,M.info("Migrating legacy session-history entries (claudeSessionId → agentSessionId)")),{id:e.id,workspaceId:String(e.workspaceId??""),workspaceName:String(e.workspaceName??""),workspaceDir:"string"==typeof e.workspaceDir||null===e.workspaceDir?e.workspaceDir:null,tabId:e.tabId,providerId:t,agentSessionId:s,prompt:"string"==typeof e.prompt||null===e.prompt?e.prompt:null,result:"string"==typeof e.result||null===e.result?e.result:null,startedAt:Number(e.startedAt??0),completedAt:Number(e.completedAt??0),duration:Number(e.duration??0),dismissedAt:"number"==typeof e.dismissedAt||null===e.dismissedAt?e.dismissedAt:null,toolUsage:e.toolUsage??{},touchedFiles:Array.isArray(e.touchedFiles)?e.touchedFiles:[],...e.cancelled?{cancelled:!0}:{}}},x=async()=>{let e,t;try{e=await f.default.readFile(j,"utf-8")}catch{return L()}try{t=JSON.parse(e)}catch{M.warn("Failed to parse session-history.json, starting empty");try{await f.default.copyFile(j,j.replace(/\.json$/,".json.bak"))}catch{}return L()}let s=[];for(let e of t.entries??[]){let t=W(e);t&&s.push(t)}return{version:1,entries:s}},C=async e=>{let t={version:e.version,entries:e.entries.map(e=>{let{claudeSessionId:t,...s}=e;return s})},s=JSON.stringify(t.entries);if(R.__purplemuxSessionHistoryContentCache===s)return;let a=j+".tmp";try{await f.default.writeFile(a,JSON.stringify(t,null,2),{mode:384}),await f.default.rename(a,j)}catch(e){throw await f.default.unlink(a).catch(()=>{}),e}R.__purplemuxSessionHistoryContentCache=s},F=async e=>{await _(async()=>{let t=await x();t.entries.unshift(e),t.entries.length>200&&(t.entries=t.entries.slice(0,200)),await C(t)})},E=async(e,t)=>await _(async()=>{let s=await x(),a=s.entries.find(t=>t.tabId===e&&null===t.dismissedAt);return a?(a.dismissedAt=t,await C(s),a):null});var N=e.i(157469),J=e.i(75874),D=e.i(228448),q=e.i(44014),O=e.i(522734);let B=(0,h.createLogger)("status"),H=(0,h.createLogger)("hooks"),$=(e,t,s)=>({agentProviderId:e?.id,agentSummary:e?.readSummary(t)??null,agentSessionId:e?.sessionIdFromJsonlPath(s??null)??e?.readSessionId(t)??null}),V=new Set(["permission_prompt","worker_permission_prompt"]),z=new Set(["busy","idle","needs-input","ready-for-review"]),K=/^[^|]+\|[^|]+$/,X=[700,1500,3e3,5e3,8e3],G=globalThis;class Q{tabs=new Map;pollingTimer=null;currentInterval=0;clients=new Set;initialized=!1;rateLimitsWatcher=null;lastRateLimits=null;jsonlWatchers=new Map;compactStaleTimers=new Map;async init(){this.initialized||(this.initialized=!0,await this.scanAll(),this.startPolling(),this.rateLimitsWatcher=(0,p.createRateLimitsWatcher)(e=>{this.lastRateLimits=e,this.broadcast({type:"rate-limits:update",data:e})}),this.rateLimitsWatcher.start())}async scanAll(){let{workspaces:e}=await (0,s.getWorkspaces)(),t=await (0,n.getAllPanesInfo)();for(let e of[...this.jsonlWatchers.keys()])this.stopJsonlWatch(e);for(let s of(this.tabs.clear(),e)){let e=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(e)for(let a of(0,i.collectAllTabs)(e.root)){let e=t.get(a.sessionName),i=(0,l.getProviderByPanelType)(a.panelType),n=await this.readTabMetadata(e,i,a),r=a.cliState??"idle",o="busy"===r?"unknown":r,{terminalStatus:d,listeningPorts:u}=i?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(e),p=e?.command,h=e?`${e.command}|${e.path}`:void 0,m="needs-input"===o?{name:"notification",at:Date.now(),seq:0}:null;this.tabs.set(a.id,{cliState:o,workspaceId:s.id,tabName:a.name||(h?(0,c.formatTabTitle)(h,a.panelType):""),currentProcess:p,paneTitle:h,tmuxSession:a.sessionName,panelType:a.panelType,terminalStatus:d,listeningPorts:u,...$(i,a,n.jsonlPath),lastUserMessage:a.lastUserMessage,lastAssistantMessage:n.lastAssistantSnippet,currentAction:n.currentAction,readyForReviewAt:"ready-for-review"===o?Date.now():null,busySince:null,dismissedAt:a.dismissedAt??null,jsonlPath:n.jsonlPath,lastEvent:m,eventSeq:0}),("needs-input"===o||"unknown"===o)&&n.jsonlPath&&this.startJsonlWatch(a.id,n.jsonlPath),"unknown"===o&&this.resolveUnknown(a.id).catch(e=>B.warn("resolveUnknown failed: %s",e))}}}async resolveUnknown(e){let t=this.tabs.get(e);if(!t||"unknown"!==t.cliState)return;let s=(0,l.getProviderByPanelType)(t.panelType),a=(await (0,n.getAllPanesInfo)()).get(t.tmuxSession),i=a?.pid?await (0,r.getChildPids)(a.pid):[];if(!(a?.pid&&s&&await s.isAgentRunning(a.pid,i))){this.applyCliState(e,t,"idle",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(e,t);return}if(s&&t.jsonlPath){let{idle:a,stale:i,lastAssistantSnippet:n}=await s.readRuntimeSnapshot(t.jsonlPath);if(a&&!i&&n){this.applyCliState(e,t,"ready-for-review",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(e,t);return}}}async readTabMetadata(e,t,s){let a={lastAssistantSnippet:null,currentAction:null,jsonlPath:null};if(!e||!e.pid||!t)return a;let i=await (0,r.getChildPids)(e.pid);if(!await t.isAgentRunning(e.pid,i))return a;if(s){let e=t.readJsonlPath(s);if(e)try{await f.default.access(e);let{lastAssistantSnippet:s,currentAction:a}=await t.readRuntimeSnapshot(e);return{lastAssistantSnippet:s,currentAction:a,jsonlPath:e}}catch{}let a=t.readSessionId(s);if(a&&t.id===y.CODEX_PROVIDER_ID){let e=await (0,S.findCodexSessionById)(a);if(e?.jsonlPath){let{lastAssistantSnippet:s,currentAction:a}=await t.readRuntimeSnapshot(e.jsonlPath);return{lastAssistantSnippet:s,currentAction:a,jsonlPath:e.jsonlPath}}}}let n=await t.detectActiveSession(e.pid,i);if("running"!==n.status||!n.jsonlPath)return{lastAssistantSnippet:null,currentAction:null,jsonlPath:n.jsonlPath??null};let{lastAssistantSnippet:l,currentAction:o}=await t.readRuntimeSnapshot(n.jsonlPath);return{lastAssistantSnippet:l,currentAction:o,jsonlPath:n.jsonlPath}}async detectTerminalStatus(e){if(!e||!e.pid)return{terminalStatus:"idle",listeningPorts:[]};let t=await (0,n.getListeningPorts)(e.pid);return t.length>0?{terminalStatus:"server",listeningPorts:t}:{terminalStatus:n.SAFE_SHELLS.has(e.command)?"idle":"running",listeningPorts:[]}}getPollingInterval(){let e=this.tabs.size;return e>=21?6e4:e>=11?45e3:3e4}async rescan(){await this.scanAll()}startPolling(){this.stopPolling(),this.currentInterval=this.getPollingInterval(),this.pollingTimer=setInterval(()=>{this.poll().catch(e=>{B.error({err:e},"Polling error")})},this.currentInterval)}stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null,this.currentInterval=0)}async poll(){let{workspaces:e}=await (0,s.getWorkspaces)(),t=await (0,n.getAllPanesInfo)(),o=new Set,d=new Set(this.tabs.keys()),u=Date.now();for(let s of e){let e=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(e)for(let d of(0,i.collectAllTabs)(e.root)){o.add(d.id);let e=this.tabs.get(d.id),i=t.get(d.sessionName),p=(0,l.getProviderByPanelType)(d.panelType),{terminalStatus:h,listeningPorts:m}=p?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(i),g=i?.command,y=i?`${i.command}|${i.path}`:void 0;if(!e){let e=d.cliState??"idle",t="busy"===e?"unknown":e,a=await this.readTabMetadata(i,p,d),n="needs-input"===t?{name:"notification",at:Date.now(),seq:0}:null,r={cliState:t,workspaceId:s.id,tabName:d.name||(y?(0,c.formatTabTitle)(y,d.panelType):""),currentProcess:g,paneTitle:y,tmuxSession:d.sessionName,panelType:d.panelType,terminalStatus:h,listeningPorts:m,...$(p,d,a.jsonlPath),lastUserMessage:d.lastUserMessage,lastAssistantMessage:a.lastAssistantSnippet,currentAction:a.currentAction,jsonlPath:a.jsonlPath,lastEvent:n,eventSeq:0};this.tabs.set(d.id,r),this.persistToLayout(r),this.broadcastUpdate(d.id,r),"unknown"===t&&this.resolveUnknown(d.id).catch(e=>B.warn("resolveUnknown failed: %s",e));continue}let S=e.currentProcess!==g,f=e.lastUserMessage!==d.lastUserMessage,b=e.panelType!==d.panelType,w=await this.readTabMetadata(i,p,d);e.tabName=d.name||(y?(0,c.formatTabTitle)(y,d.panelType):""),e.currentProcess=g,e.paneTitle=y,e.workspaceId=s.id,e.panelType=d.panelType,e.agentProviderId=p?.id,e.agentSessionId=p?.sessionIdFromJsonlPath(w.jsonlPath)??p?.readSessionId(d)??null,e.jsonlPath=w.jsonlPath??e.jsonlPath,e.lastUserMessage=d.lastUserMessage,S&&(e.processRetries=3);let v=!S&&(e.processRetries??0)>0;v&&(e.processRetries=e.processRetries-1);let T=e.listeningPorts,P=T?.length!==m.length||m.some((e,t)=>T[t]!==e),I=e.terminalStatus!==h||P;I&&(e.terminalStatus=h,e.listeningPorts=m);let A=!1,k=p?p.readSummary(d):null;if("busy"===e.cliState||"needs-input"===e.cliState){let t=await (0,n.getPaneTitle)(d.sessionName),s=p?.parsePaneTitle(t)??null,i=s??k;i!==e.agentSummary&&(e.agentSummary=i,A=!0,s&&p&&(0,a.updateTabAgentSummary)(d.sessionName,p,s).catch(()=>{}))}else e.agentSummary!==k&&(e.agentSummary=k,A=!0);let M=null,U=async()=>{if(null!==M)return M;if(!i?.pid||!p)return M=!1,!1;let e=await (0,r.getChildPids)(i.pid);return M=await p.isAgentRunning(i.pid,e)};if("busy"===e.cliState&&e.lastEvent&&u-e.lastEvent.at>6e5&&!await U()){B.info({tabId:d.id},"busy stuck — agent process gone, forcing idle"),this.applyCliState(d.id,e,"idle",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(d.id,e);continue}if(p&&z.has(e.cliState)){let t=e.lastResumeOrStartedAt;if(!(void 0!==t&&u-t<5e3)){let t=e.paneTitle??"",s=!!t&&K.test(t);if((!t||s)&&!await U()){B.info({tabId:d.id,prevState:e.cliState},"agent process gone — transitioning to inactive"),this.applyCliState(d.id,e,"inactive",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(d.id,e);continue}}}if("inactive"===e.cliState&&"codex-cli"===e.panelType&&p&&await this.checkCodexTuiReady(e,U)){H.debug({tabId:d.id},"codex tui ready — synthetic session-start"),this.updateTabFromHook(e.tmuxSession,"session-start");continue}(I||S||v||f||b||A)&&this.broadcastUpdate(d.id,e)}}for(let e of d)!o.has(e)&&this.tabs.has(e)&&(this.stopJsonlWatch(e),this.tabs.delete(e),this.broadcastRemove(e));let p=this.getPollingInterval();this.pollingTimer&&p!==this.currentInterval&&this.startPolling()}getAllForClient(){let e={};for(let[t,s]of this.tabs)e[t]={cliState:s.cliState,workspaceId:s.workspaceId,tabName:s.tabName,currentProcess:s.currentProcess,paneTitle:s.paneTitle,panelType:s.panelType,terminalStatus:s.terminalStatus,listeningPorts:s.listeningPorts,agentProviderId:s.agentProviderId,agentSummary:s.agentSummary,lastUserMessage:s.lastUserMessage,lastAssistantMessage:s.lastAssistantMessage,currentAction:s.currentAction,readyForReviewAt:s.readyForReviewAt,busySince:s.busySince,dismissedAt:s.dismissedAt,agentSessionId:s.agentSessionId,compactingSince:s.compactingSince,permissionRequest:s.permissionRequest,lastEvent:s.lastEvent,eventSeq:s.eventSeq};return e}applyCliState(e,t,s,a={}){let i=t.cliState;if(i===s)return;let n=t.busySince;t.cliState=s,t.readyForReviewAt="ready-for-review"===s?Date.now():null,t.busySince="busy"===s?Date.now():null,"busy"===s&&(t.dismissedAt=null),"needs-input"===i&&"needs-input"!==s&&t.permissionRequest&&(t.permissionRequest=null),"ready-for-review"===s&&t.jsonlPath&&new Promise(e=>setTimeout(e,500)).then(()=>this.saveSessionHistory(e,t,n,!1)).catch(e=>{B.warn("Failed to save session history: %s",e)}),"ready-for-review"!==s||a.silent||this.sendWebPush(e,t,"review").catch(e=>{B.warn("Web push failed: %s",e)}),"needs-input"!==s||a.silent||this.sendWebPush(e,t,"needs-input").catch(e=>{B.warn("Web push failed: %s",e)});let r=("busy"===s||"needs-input"===s)&&t.jsonlPath,l="ready-for-review"===s&&this.jsonlWatchers.has(e);r&&!this.jsonlWatchers.has(e)?this.startJsonlWatch(e,t.jsonlPath):!r&&!l&&this.jsonlWatchers.has(e)&&this.stopJsonlWatch(e)}async saveSessionHistory(e,t,a,i){if(!t.lastUserMessage)return;let n=t.agentProviderId?(0,l.getProvider)(t.agentProviderId):(0,l.getProviderByPanelType)(t.panelType),r=t.jsonlPath&&n?await n.readSessionHistoryStats(t.jsonlPath):null,{workspaces:o}=await (0,s.getWorkspaces)(),d=o.find(e=>e.id===t.workspaceId),u=Date.now(),c=r?.firstUserTs??a??u,p=i?u:r?.lastAssistantTs??u,h=i?p-c:r?.turnDurationMs??p-c,m="codex"===t.agentProviderId?"codex":"claude",g={id:(0,q.nanoid)(),workspaceId:t.workspaceId,workspaceName:d?.name??t.workspaceId,workspaceDir:d?.directories[0]??null,tabId:e,providerId:m,agentSessionId:t.agentSessionId??null,prompt:r?.lastUserText??t.lastUserMessage,result:r?.lastAssistantText??null,startedAt:c,completedAt:p,duration:h,dismissedAt:p,toolUsage:r?.toolUsage??{},touchedFiles:r?.touchedFiles??[],...i?{cancelled:!0}:{}};await F(g),this.broadcast({type:"session-history:update",entry:g})}dismissTab(e,t){let s=this.tabs.get(e);if(!s||"ready-for-review"!==s.cliState)return;let a=Date.now();this.applyCliState(e,s,"idle",{silent:!0}),s.dismissedAt=a,this.persistToLayout(s),this.broadcastUpdate(e,s,t),E(e,a).then(e=>{e&&this.broadcast({type:"session-history:update",entry:e})}).catch(e=>{B.warn("Failed to update session history dismissedAt: %s",e)})}ackNotificationInput(e,t){let s=this.tabs.get(e);s&&"needs-input"===s.cliState&&s.lastEvent?.name==="notification"&&s.lastEvent.seq===t&&(H.debug({tabId:e,seq:t},"ack: needs-input→busy"),this.applyCliState(e,s,"busy"),this.persistToLayout(s),this.broadcastUpdate(e,s))}async checkCodexTuiReady(e,t){if(!await t())return!1;let s=await (0,m.capturePaneAtWidth)(e.tmuxSession,80,24).catch(e=>(B.warn("codex tui ready capture failed: %s",e),null));return!!s&&(0,g.isCodexTuiReadyContent)(s)}async recoverUnknownIfPending(e){let t=this.tabs.get(e);if(!t)return{recovered:!1,reason:"no-entry"};if("unknown"!==t.cliState)return{recovered:!1,reason:"not-unknown"};let s=await (0,m.capturePaneAtWidth)(t.tmuxSession,120,50).catch(e=>(B.warn("recoverUnknownIfPending capture failed: %s",e),null));if(!s)return{recovered:!1,reason:"capture-failed"};let{options:a}=(0,I.parsePermissionOptions)(s);if(0===a.length)return{recovered:!1,reason:"no-options"};let i=Date.now(),n=(t.eventSeq??0)+1;return t.eventSeq=n,t.lastEvent={name:"notification",at:i,seq:n},H.debug({tabId:e,seq:n,options:a.length},"recover unknown→needs-input from pane capture"),this.applyCliState(e,t,"needs-input",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(e,t),{recovered:!0}}findTabIdBySession(e){for(let[t,s]of this.tabs)if(s.tmuxSession===e)return t}updateTabFromHook(e,t,s){let a=this.findTabIdBySession(e);if(!a)return void H.debug({tmuxSession:e,event:t,notificationType:s},"no tabId for session");let i=this.tabs.get(a);if(!i)return void H.debug({tabId:a,event:t,notificationType:s},"no entry for tab");if("pre-compact"===t||"post-compact"===t){H.debug({tabId:a,event:t},"compact hook"),this.setCompacting(a,i,"pre-compact"===t?Date.now():null);return}if("session-start"!==t&&"prompt-submit"!==t&&"notification"!==t&&"stop"!==t&&"interrupt"!==t)return void H.debug({tabId:a,event:t,notificationType:s},"unknown event, ignoring");if("notification"===t&&s&&!V.has(s))return void H.debug({tabId:a,event:t,notificationType:s},"non-input notification, skipping state transition");let n=Date.now(),r=(i.eventSeq??0)+1;i.eventSeq=r,i.lastEvent={name:t,at:n,seq:r},"session-start"===t&&(i.lastResumeOrStartedAt=n),this.broadcast({type:"status:hook-event",tabId:a,event:i.lastEvent});let o=i.cliState,u=(0,d.deriveAgentCliState)(i.lastEvent,o);if(H.debug({tabId:a,event:t,notificationType:s,seq:r,prevState:o,newState:u,transition:o!==u},`processed ${t}${s?`(${s})`:""} ${o}→${u}`),o!==u&&(this.applyCliState(a,i,u),this.persistToLayout(i),this.broadcastUpdate(a,i)),"busy"!==u&&"needs-input"!==u||i.jsonlPath||this.resolveAndWatchJsonl(a,e).catch(()=>{}),"stop"===t&&i.jsonlPath){let e=(e=!1)=>{let t=(0,l.getProviderByPanelType)(i.panelType);t&&t.readRuntimeSnapshot(i.jsonlPath,{force:e}).then(({currentAction:e,lastAssistantSnippet:t,reset:s})=>{let n=!1;s?(null!==i.currentAction&&(i.currentAction=null,n=!0),null!==i.lastAssistantMessage&&(i.lastAssistantMessage=null,n=!0)):(null!==e&&e.summary!==i.currentAction?.summary&&(i.currentAction=e,n=!0),null!==t&&i.lastAssistantMessage!==t&&(i.lastAssistantMessage=t,n=!0)),n&&this.broadcastUpdate(a,i)}).catch(()=>{})};e(),setTimeout(()=>{e(!0)},500)}}handleProviderEvent(e,t,s){let a=this.findTabIdBySession(t);if(!a)return H.debug({providerId:e,tmuxSession:t,event:s.kind},"no tabId for provider event"),!1;let i=this.tabs.get(a);if(!i)return H.debug({providerId:e,tabId:a,event:s.kind},"no entry for provider event tab"),!1;let n=(0,l.getProviderByPanelType)(i.panelType);return n&&n.id!==e?(H.debug({providerId:e,expectedProviderId:n.id,tabId:a,event:s.kind},"provider event panel mismatch"),!1):(this.handleTabWorkStateEvent(a,s),!0)}applyAgentHookMeta(e,t,s){let i=this.findTabIdBySession(t);if(!i)return null;let n=this.tabs.get(i);if(!n)return null;let r=(0,l.getProviderByPanelType)(n.panelType);if(r&&r.id!==e)return H.debug({providerId:e,expectedProviderId:r.id,tabId:i},"provider hook meta panel mismatch"),null;let o=!1;if(n.agentProviderId!==e&&(n.agentProviderId=e,o=!0),void 0!==s.sessionId&&n.agentSessionId!==s.sessionId&&(n.agentSessionId=s.sessionId,o=!0),void 0!==s.jsonlPath&&n.jsonlPath!==s.jsonlPath&&(n.jsonlPath=s.jsonlPath,o=!0),s.clearMessages&&(null!==n.agentSummary&&(n.agentSummary=null,o=!0),null!==n.lastUserMessage&&(n.lastUserMessage=null,o=!0),null!==n.lastAssistantMessage&&(n.lastAssistantMessage=null,o=!0)),void 0!==s.lastUserMessage&&n.lastUserMessage!==s.lastUserMessage&&(n.lastUserMessage=s.lastUserMessage,o=!0),void 0!==s.agentSummary&&n.agentSummary!==s.agentSummary&&(n.agentSummary=s.agentSummary,o=!0),void 0!==s.permissionRequest&&n.permissionRequest!==s.permissionRequest&&(n.permissionRequest=s.permissionRequest,o=!0),o){let t=r??(0,l.getProvider)(e);t&&(0,a.updateTabAgentState)(n.tmuxSession,t,{...void 0!==s.sessionId?{sessionId:s.sessionId}:{},...void 0!==s.jsonlPath?{jsonlPath:s.jsonlPath}:{},...void 0!==s.agentSummary||s.clearMessages?{summary:s.clearMessages?null:s.agentSummary??null}:{},...void 0!==s.lastUserMessage||s.clearMessages?{lastUserMessage:s.clearMessages?null:s.lastUserMessage??null}:{}}).catch(()=>{}),this.persistToLayout(n),this.broadcastUpdate(i,n)}return{tabId:i,cliState:n.cliState}}setCompacting(e,t,s){let a=this.compactStaleTimers.get(e);if(a&&(clearTimeout(a),this.compactStaleTimers.delete(e)),(t.compactingSince??null)!==s&&(t.compactingSince=s,this.broadcastUpdate(e,t),null!==s)){let t=setTimeout(()=>{this.compactStaleTimers.delete(e);let t=this.tabs.get(e);t&&t.compactingSince===s&&(t.compactingSince=null,H.debug({tabId:e},"compact stale, auto-cleared"),this.broadcastUpdate(e,t))},6e4);this.compactStaleTimers.set(e,t)}}removeTab(e){let t=this.tabs.get(e);t&&("busy"===t.cliState||"needs-input"===t.cliState)&&t.lastUserMessage&&this.saveSessionHistory(e,t,t.busySince,!0).catch(e=>{B.warn("Failed to save cancelled session history: %s",e)}),this.stopJsonlWatch(e);let s=this.compactStaleTimers.get(e);s&&(clearTimeout(s),this.compactStaleTimers.delete(e)),this.tabs.delete(e),this.broadcastRemove(e)}reconcileWorkspaceTabs(e,t){let s=new Set(t);for(let[t,a]of this.tabs)a.workspaceId!==e||s.has(t)||this.removeTab(t)}removeWorkspaceTabs(e){for(let[t,s]of this.tabs)s.workspaceId===e&&this.removeTab(t)}registerTab(e,t){this.tabs.set(e,t),this.broadcastUpdate(e,t)}handleTabWorkStateEvent(e,t){let s=this.tabs.get(e);if(s)switch(t.kind){case"session-start":case"prompt-submit":case"stop":case"interrupt":case"pre-compact":case"post-compact":this.updateTabFromHook(s.tmuxSession,t.kind);break;case"notification":this.updateTabFromHook(s.tmuxSession,"notification",t.notificationType);break;case"summary-update":s.agentSummary!==t.summary&&(s.agentSummary=t.summary,this.broadcastUpdate(e,s));break;case"last-user-message":s.lastUserMessage!==t.message&&(s.lastUserMessage=t.message,this.broadcastUpdate(e,s))}}markAgentLaunch(e,t){let s=this.tabs.get(e);if(s){if(s.lastResumeOrStartedAt=Date.now(),t?.resetAgentSession){s.agentSessionId=null,s.jsonlPath=null,s.agentSummary=null,s.lastUserMessage=null,s.lastAssistantMessage=null,s.currentAction=null,s.permissionRequest=null;let t=this.jsonlWatchers.get(e);t&&(t.watcher.close(),t.debounceTimer&&clearTimeout(t.debounceTimer),this.jsonlWatchers.delete(e)),this.persistToLayout(s);let i=(0,l.getProviderByPanelType)(s.panelType);i&&(0,a.updateTabAgentState)(s.tmuxSession,i,{sessionId:null,jsonlPath:null,summary:null,lastUserMessage:null}).catch(()=>{}),this.broadcastUpdate(e,s)}for(let t of X)setTimeout(()=>{this.poll().catch(t=>{B.error({err:t,tabId:e},"Launch readiness poll error")})},t)}}addClient(e){this.clients.add(e),this.lastRateLimits&&e.readyState===t.WebSocket.OPEN&&e.send(JSON.stringify({type:"rate-limits:update",data:this.lastRateLimits}))}removeClient(e){this.clients.delete(e)}persistToLayout(e){(0,a.updateTabCliStatus)(e.tmuxSession,e.cliState,e.dismissedAt).catch(()=>{})}broadcastUpdate(e,t,s){let a={type:"status:update",tabId:e,cliState:t.cliState,workspaceId:t.workspaceId,tabName:t.tabName,currentProcess:t.currentProcess,paneTitle:t.paneTitle,panelType:t.panelType,terminalStatus:t.terminalStatus,listeningPorts:t.listeningPorts,agentProviderId:t.agentProviderId,agentSummary:t.agentSummary,lastUserMessage:t.lastUserMessage,lastAssistantMessage:t.lastAssistantMessage,currentAction:t.currentAction,readyForReviewAt:t.readyForReviewAt,busySince:t.busySince,dismissedAt:t.dismissedAt,agentSessionId:t.agentSessionId,compactingSince:t.compactingSince,permissionRequest:t.permissionRequest,lastEvent:t.lastEvent,eventSeq:t.eventSeq};this.broadcast(a,s)}broadcastRemove(e){this.broadcast({type:"status:update",tabId:e,cliState:null,workspaceId:"",tabName:""})}static BACKPRESSURE_LIMIT=1048576;broadcast(e,s){let a=JSON.stringify(e);for(let e of this.clients)e!==s&&e.readyState===t.WebSocket.OPEN&&e.bufferedAmount<Q.BACKPRESSURE_LIMIT&&e.send(a)}async resolveAndWatchJsonl(e,t){let s=this.tabs.get(e);if(!s||s.jsonlPath)return;let r=null,d=(0,a.parseSessionName)(t);if(d){let o=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(d.wsId));if(o){let a=(0,i.collectAllTabs)(o.root).find(e=>e.sessionName===t),d=(0,l.getProviderByPanelType)(a?.panelType),c=a&&d?d.readSessionId(a):null;if(a&&d&&c)if(d.id===y.CODEX_PROVIDER_ID)r=(await (0,S.findCodexSessionById)(c))?.jsonlPath??null;else{let e=await (0,n.getSessionCwd)(t);if(e){let t=`${(0,u.cwdToProjectPath)(e)}/${c}.jsonl`;try{await f.default.access(t),r=t}catch{}}}a?.lastUserMessage&&s.lastUserMessage!==a.lastUserMessage&&(s.lastUserMessage=a.lastUserMessage,this.broadcastUpdate(e,s))}}if(!r){let e=await (0,n.getSessionPanePid)(t);if(e){let{info:t}=await (0,o.detectAnyActiveSession)(e);r=t.jsonlPath}}if(!r)return;s.jsonlPath=r;let c=(0,l.getProviderByPanelType)(s.panelType);c&&(s.agentProviderId=c.id,s.agentSessionId=c.sessionIdFromJsonlPath(r)??s.agentSessionId),"busy"!==s.cliState&&"needs-input"!==s.cliState||this.jsonlWatchers.has(e)||this.startJsonlWatch(e,r)}startJsonlWatch(e,t){let s=this.jsonlWatchers.get(e);if(s?.jsonlPath!==t){s&&this.stopJsonlWatch(e),B.debug("startJsonlWatch tabId=%s path=%s",e,t);try{let s=(0,O.watch)(t,()=>{let s=this.jsonlWatchers.get(e);s&&(s.debounceTimer&&clearTimeout(s.debounceTimer),s.debounceTimer=setTimeout(()=>{this.onJsonlFileChange(e,t).catch(()=>{})},100))});s.on("error",()=>{this.stopJsonlWatch(e)}),this.jsonlWatchers.set(e,{watcher:s,jsonlPath:t,debounceTimer:null})}catch{}}}stopJsonlWatch(e){let t=this.jsonlWatchers.get(e);if(t){B.debug("stopJsonlWatch tabId=%s",e),t.debounceTimer&&clearTimeout(t.debounceTimer);try{t.watcher.close()}catch{}this.jsonlWatchers.delete(e)}}async onJsonlFileChange(e,t){let s=this.tabs.get(e);if(!s||"busy"!==s.cliState&&"needs-input"!==s.cliState&&"unknown"!==s.cliState&&"ready-for-review"!==s.cliState)return void this.stopJsonlWatch(e);let a=(0,l.getProviderByPanelType)(s.panelType);if(!a)return;let{currentAction:i,lastAssistantSnippet:n,reset:r,interrupted:o,lastEntryTs:d}=await a.readRuntimeSnapshot(t);(s.agentProviderId===y.CODEX_PROVIDER_ID||"codex-cli"===s.panelType)&&P(t).catch(()=>{}),o&&"busy"===s.cliState&&null!==d&&d>(s.lastInterruptTs??0)&&d>(s.lastEvent?.at??0)&&(s.lastInterruptTs=d,H.debug({tabId:e,lastEntryTs:d},"synthetic interrupt from JSONL"),this.updateTabFromHook(s.tmuxSession,"interrupt"));let u=!1;r?(null!==s.currentAction&&(s.currentAction=null,u=!0),null!==s.lastAssistantMessage&&(s.lastAssistantMessage=null,u=!0)):(null!==i&&i.summary!==s.currentAction?.summary&&(s.currentAction=i,u=!0),null!==n&&s.lastAssistantMessage!==n&&(s.lastAssistantMessage=n,u=!0)),u&&this.broadcastUpdate(e,s)}shutdown(){for(let e of(this.stopPolling(),this.rateLimitsWatcher?.stop(),[...this.jsonlWatchers.keys()]))this.stopJsonlWatch(e);for(let e of this.clients)e.readyState===t.WebSocket.OPEN&&e.close(1001,"Server shutting down");this.clients.clear()}notifyLastUserMessage(e,t){let s=(0,a.parseSessionName)(e);if(!s)return;let i=this.tabs.get(s.tabId);i&&i.lastUserMessage!==t&&(i.lastUserMessage=t,this.broadcastUpdate(s.tabId,i))}async sendWebPush(e,t,a){let i=await (0,J.getSubscriptions)();if(0===i.length)return;let n=await (0,D.getVAPIDKeys)();N.default.setVapidDetails("mailto:noreply@purplemux.app",n.publicKey,n.privateKey);let r=t.lastUserMessage?.slice(0,100)||t.tabName||e,l=(await (0,s.getWorkspaces)()).workspaces.find(e=>e.id===t.workspaceId),o="codex"===t.agentProviderId?"codex":"claude",d=JSON.stringify({title:"needs-input"===a?"Input Required":"Task Complete",body:r,tabId:e,workspaceId:t.workspaceId,providerId:o,claudeSessionId:t.agentSessionId??null,workspaceName:l?.name??"",workspaceDir:l?.directories[0]??null});if(!(0,J.isAnyDeviceVisible)())for(let e of i)try{await N.default.sendNotification(e,d)}catch(s){let t=s.statusCode;(410===t||404===t)&&await (0,J.removeSubscription)(e.endpoint),B.warn("Web push send error: %s",t)}}}e.s(["getStatusManager",0,()=>{if(!G.__ptStatusManager){let e=new Q;G.__ptStatusManager=e,(0,a.setLayoutReconciler)({reconcileWorkspaceTabs:(t,s)=>e.reconcileWorkspaceTabs(t,s),removeWorkspaceTabs:t=>e.removeWorkspaceTabs(t)})}return G.__ptStatusManager}],964759)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_lib_0bj652.._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[508171,(a,b,c)=>{b.exports=a.x("react/jsx-runtime",()=>require("react/jsx-runtime"))},127669,(a,b,c)=>{b.exports=a.x("react",()=>require("react"))},908597,a=>{"use strict";a.s(["getVisuallyOrderedWorkspaces",0,(a,b)=>{let c=new Set(b.map(a=>a.id)),d=new Map,e=[];for(let b of a){let a=b.groupId??null;if(a&&c.has(a)){let c=d.get(a)??[];c.push(b),d.set(a,c)}else e.push(b)}let f=[];for(let a of b){let b=d.get(a.id);b&&f.push(...b)}return f.push(...e),f}])},986013,a=>{"use strict";let b,c;var d=a.i(666680);a.s(["nanoid",0,function(a=21){var e=a|=0;if(e<0||e>1024)throw RangeError("Wrong ID size");!b||b.length<e?(b=Buffer.allocUnsafe(128*e),d.webcrypto.getRandomValues(b),c=0):c+e>b.length&&(d.webcrypto.getRandomValues(b),c=0),c+=e;let f="";for(let d=c-a;d<c;d++)f+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&b[d]];return f}],986013)},144784,a=>{"use strict";let b=a=>"pane"===a.type?[a]:[...b(a.children[0]),...b(a.children[1])],c=(a,b)=>"pane"===a.type?a.id===b?a:null:c(a.children[0],b)||c(a.children[1],b),d=a=>"pane"===a.type?a.id:d(a.children[0]),e=a=>"pane"===a.type?a.id:e(a.children[1]),f=(a,b,c)=>"pane"===a.type?a.id===b?c:a:{...a,children:[f(a.children[0],b,c),f(a.children[1],b,c)]},g=(a,b)=>{if("pane"===a.type)return null;let[c,d]=a.children;if("pane"===c.type&&c.id===b)return d;if("pane"===d.type&&d.id===b)return c;let e=g(c,b);if(e)return{...a,children:[e,d]};let f=g(d,b);return f?{...a,children:[c,f]}:null},h=(a,b)=>{if("pane"===a.type)return null;let[c,f]=a.children;return"pane"===c.type&&c.id===b?d(f):"pane"===f.type&&f.id===b?e(c):h(c,b)||h(f,b)},i=(a,b,c)=>{if("split"!==a.type)return a;if(0===b.length)return{...a,ratio:c};let[d,...e]=b,f=[a.children[0],a.children[1]];return f[d]=i(a.children[d],e,c),{...a,children:f}},j=(a,b)=>"pane"===a.type||a.orientation!==b?1:j(a.children[0],b)+j(a.children[1],b),k=a=>{if("pane"===a.type)return!0;let b=j(a.children[0],a.orientation),c=j(a.children[1],a.orientation);return!(Math.abs(a.ratio-b/(b+c)*100)>1)&&k(a.children[0])&&k(a.children[1])},l=a=>{if("pane"===a.type)return a;let b=j(a.children[0],a.orientation),c=Math.round(b/(b+j(a.children[1],a.orientation))*1e4)/100;return{...a,ratio:c,children:[l(a.children[0]),l(a.children[1])]}},m=(a,b,c)=>{if("pane"===a.type)return a.id===b?c(a):a;let d=m(a.children[0],b,c);if(d!==a.children[0])return{...a,children:[d,a.children[1]]};let e=m(a.children[1],b,c);return e!==a.children[1]?{...a,children:[a.children[0],e]}:a};a.s(["collectAllTabs",0,a=>b(a).flatMap(a=>a.tabs),"collectPanes",0,b,"equalizeNode",0,l,"findAdjacentPaneInDirection",0,(a,b,c)=>{let f=[],g=a=>{if("pane"===a.type)return a.id===b;for(let b=0;b<2;b++){if(f.push({node:a,childIndex:b}),g(a.children[b]))return!0;f.pop()}return!1};if(!g(a))return null;let h="left"===c||"right"===c?"horizontal":"vertical",i=+("left"===c||"up"===c);for(let a=f.length-1;a>=0;a--){let{node:b,childIndex:g}=f[a];if("split"===b.type&&b.orientation===h&&g===i){let a=b.children[1-i];return"left"===c||"up"===c?e(a):d(a)}}return null},"findPane",0,c,"findResizeTarget",0,(a,b,c)=>{let d=[],e=a=>{if("pane"===a.type)return a.id===b;for(let b=0;b<2;b++){if(d.push({node:a,childIndex:b}),e(a.children[b]))return!0;d.pop()}return!1};if(!e(a))return null;let f="left"===c||"right"===c?"horizontal":"vertical",g=+("right"!==c&&"down"!==c),h="right"===c||"down"===c;for(let a=d.length-1;a>=0;a--){let{node:b,childIndex:c}=d[a];if("split"===b.type&&b.orientation===f&&c===g)return{path:d.slice(0,a).map(a=>a.childIndex),currentRatio:b.ratio,increase:h}}return null},"getFirstPaneId",0,d,"isEqualized",0,k,"removePaneWithFocus",0,(a,c)=>{let d=h(a.root,c),e=g(a.root,c);e&&(a.root=e),a.activePaneId===c&&(a.activePaneId=d??b(a.root)[0]?.id??null)},"replacePane",0,f,"updatePaneInTree",0,m,"updateRatioAtPath",0,i])},797630,a=>{"use strict";let b=a=>"web-browser"===a?"Web Browser":"";a.s(["defaultTabNameForPanelType",0,b,"resolveTabNameForPanelTypeChange",0,(a,c,d)=>{let e=b(c),f="agent-sessions"===c?"Session List":"",g=b(d),h=a.trim();return!h&&g||(""!==e&&h===e||""!==f&&h===f)&&h!==g?g:a}])},796202,a=>{"use strict";var b=a.i(924868),c=a.i(814747),d=a.i(446786),e=a.i(986013);a.i(859379);var f=a.i(926026),g=a.i(945413),h=a.i(124749);a.i(144784);let i=globalThis;i.__ptAgentProviders||(i.__ptAgentProviders=new Map);let j=i.__ptAgentProviders;var k=a.i(908597);let l=(0,f.createLogger)("workspace"),m="Workspace ",n=async a=>{let b=[];for(let c of Array.from(j.values())){let d=c.writeWorkspacePrompt?.(a);d&&b.push(d)}await Promise.all(b)},o=c.default.join(d.default.homedir(),".purplemux"),p=c.default.join(o,"workspaces.json");c.default.join(o,"layout.json"),c.default.join(o,"tabs.json");let q=globalThis;q.__purplemuxWorkspaceLock||(q.__purplemuxWorkspaceLock=Promise.resolve());let r=async a=>{let b,c=new Promise(a=>{b=a}),d=q.__purplemuxWorkspaceLock;q.__purplemuxWorkspaceLock=c,await d;try{return await a()}finally{b()}},s=async()=>{let a;try{a=await b.default.readFile(p,"utf-8")}catch{return null}try{let b=JSON.parse(a);for(let a of b.workspaces)!a.directories&&a.directory&&(a.directories=[a.directory],delete a.directory),delete a.order;for(let a of(Array.isArray(b.groups)||(b.groups=[]),b.groups))delete a.order;let c=new Set(b.groups.map(a=>a.id));for(let a of b.workspaces)a.groupId&&!c.has(a.groupId)&&(a.groupId=null);return b}catch{l.warn("Failed to parse workspaces.json, starting empty");try{await b.default.copyFile(p,p.replace(/\.json$/,".json.bak"))}catch{}return null}},t=async a=>{let c;a.groups||(a.groups=[]),c=a.groups,a.workspaces=(0,k.getVisuallyOrderedWorkspaces)(a.workspaces,c);let{workspaces:d,groups:e,activeWorkspaceId:f,sidebarCollapsed:h,sidebarWidth:i}=a,j=JSON.stringify({workspaces:d,groups:e??[],activeWorkspaceId:f,sidebarCollapsed:h,sidebarWidth:i});if(q.__purplemuxWorkspacesContentCache===j)return;a.updatedAt=new Date().toISOString();let l=p+".tmp";try{await b.default.writeFile(l,JSON.stringify(a,null,2),{mode:384}),await b.default.rename(l,p)}catch(a){throw await b.default.unlink(l).catch(()=>{}),a}q.__purplemuxWorkspacesContentCache=j,(0,g.broadcastSync)({type:"workspace"})},u=async()=>{let a=await s();return a?{workspaces:a.workspaces,groups:a.groups??[],activeWorkspaceId:a.activeWorkspaceId,sidebarCollapsed:a.sidebarCollapsed,sidebarWidth:a.sidebarWidth}:{workspaces:[],groups:[],sidebarCollapsed:!1,sidebarWidth:220}},v=async(a,c,d)=>r(async()=>{let f;try{f=await b.default.stat(a)}catch{throw Error("Directory does not exist")}if(!f.isDirectory())throw Error("Please enter a directory path, not a file");let g=await s()??{workspaces:[],groups:[],sidebarCollapsed:!1,sidebarWidth:240,updatedAt:new Date().toISOString()},i=`ws-${(0,e.nanoid)(6)}`,j=c?.trim()||(a=>{let b=0;for(let c of a)if(c.name.startsWith(m)){let a=parseInt(c.name.slice(m.length),10);a>b&&(b=a)}return`${m}${b+1}`})(g.workspaces),k=await (0,h.createDefaultLayout)(i,a,d);await b.default.mkdir((0,h.resolveLayoutDir)(i),{recursive:!0}),await (0,h.writeLayoutFile)(k,(0,h.resolveLayoutFile)(i));let o={id:i,name:j,directories:[a]};return g.workspaces.push(o),await t(g),await n(o),l.debug(`Created: ${i} (${j}, ${a})`),o}),w=async(a,b)=>r(async()=>{let c=await s();if(!c)return;let d=c.workspaces.find(b=>b.id===a);d&&JSON.stringify(d.directories)!==JSON.stringify(b)&&(d.directories=b,await t(c),await n(d))});a.s(["createWorkspace",0,v,"getWorkspaces",0,u,"updateWorkspaceDirectories",0,w],796202)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=%5Broot-of-the-server%5D__05vtngr._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[508171,(a,b,c)=>{b.exports=a.x("react/jsx-runtime",()=>require("react/jsx-runtime"))},127669,(a,b,c)=>{b.exports=a.x("react",()=>require("react"))},456195,(a,b,c)=>{b.exports=a.x("react-dom",()=>require("react-dom"))},398544,(a,b,c)=>{a.e,b.exports=function(){"use strict";var a="millisecond",b="second",c="minute",d="hour",e="week",f="month",g="quarter",h="year",i="date",j="Invalid Date",k=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,l=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m=function(a,b,c){var d=String(a);return!d||d.length>=b?a:""+Array(b+1-d.length).join(c)+a},n="en",o={};o[n]={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(a){var b=["th","st","nd","rd"],c=a%100;return"["+a+(b[(c-20)%10]||b[c]||b[0])+"]"}};var p="$isDayjsObject",q=function(a){return a instanceof u||!(!a||!a[p])},r=function a(b,c,d){var e;if(!b)return n;if("string"==typeof b){var f=b.toLowerCase();o[f]&&(e=f),c&&(o[f]=c,e=f);var g=b.split("-");if(!e&&g.length>1)return a(g[0])}else{var h=b.name;o[h]=b,e=h}return!d&&e&&(n=e),e||!d&&n},s=function(a,b){if(q(a))return a.clone();var c="object"==typeof b?b:{};return c.date=a,c.args=arguments,new u(c)},t={s:m,z:function(a){var b=-a.utcOffset(),c=Math.abs(b);return(b<=0?"+":"-")+m(Math.floor(c/60),2,"0")+":"+m(c%60,2,"0")},m:function a(b,c){if(b.date()<c.date())return-a(c,b);var d=12*(c.year()-b.year())+(c.month()-b.month()),e=b.clone().add(d,f),g=c-e<0,h=b.clone().add(d+(g?-1:1),f);return+(-(d+(c-e)/(g?e-h:h-e))||0)},a:function(a){return a<0?Math.ceil(a)||0:Math.floor(a)},p:function(j){return({M:f,y:h,w:e,d:"day",D:i,h:d,m:c,s:b,ms:a,Q:g})[j]||String(j||"").toLowerCase().replace(/s$/,"")},u:function(a){return void 0===a}};t.l=r,t.i=q,t.w=function(a,b){return s(a,{locale:b.$L,utc:b.$u,x:b.$x,$offset:b.$offset})};var u=function(){function m(a){this.$L=r(a.locale,null,!0),this.parse(a),this.$x=this.$x||a.x||{},this[p]=!0}var n=m.prototype;return n.parse=function(a){this.$d=function(a){var b=a.date,c=a.utc;if(null===b)return new Date(NaN);if(t.u(b))return new Date;if(b instanceof Date)return new Date(b);if("string"==typeof b&&!/Z$/i.test(b)){var d=b.match(k);if(d){var e=d[2]-1||0,f=(d[7]||"0").substring(0,3);return c?new Date(Date.UTC(d[1],e,d[3]||1,d[4]||0,d[5]||0,d[6]||0,f)):new Date(d[1],e,d[3]||1,d[4]||0,d[5]||0,d[6]||0,f)}}return new Date(b)}(a),this.init()},n.init=function(){var a=this.$d;this.$y=a.getFullYear(),this.$M=a.getMonth(),this.$D=a.getDate(),this.$W=a.getDay(),this.$H=a.getHours(),this.$m=a.getMinutes(),this.$s=a.getSeconds(),this.$ms=a.getMilliseconds()},n.$utils=function(){return t},n.isValid=function(){return this.$d.toString()!==j},n.isSame=function(a,b){var c=s(a);return this.startOf(b)<=c&&c<=this.endOf(b)},n.isAfter=function(a,b){return s(a)<this.startOf(b)},n.isBefore=function(a,b){return this.endOf(b)<s(a)},n.$g=function(a,b,c){return t.u(a)?this[b]:this.set(c,a)},n.unix=function(){return Math.floor(this.valueOf()/1e3)},n.valueOf=function(){return this.$d.getTime()},n.startOf=function(a,g){var j=this,k=!!t.u(g)||g,l=t.p(a),m=function(a,b){var c=t.w(j.$u?Date.UTC(j.$y,b,a):new Date(j.$y,b,a),j);return k?c:c.endOf("day")},n=function(a,b){return t.w(j.toDate()[a].apply(j.toDate("s"),(k?[0,0,0,0]:[23,59,59,999]).slice(b)),j)},o=this.$W,p=this.$M,q=this.$D,r="set"+(this.$u?"UTC":"");switch(l){case h:return k?m(1,0):m(31,11);case f:return k?m(1,p):m(0,p+1);case e:var s=this.$locale().weekStart||0,u=(o<s?o+7:o)-s;return m(k?q-u:q+(6-u),p);case"day":case i:return n(r+"Hours",0);case d:return n(r+"Minutes",1);case c:return n(r+"Seconds",2);case b:return n(r+"Milliseconds",3);default:return this.clone()}},n.endOf=function(a){return this.startOf(a,!1)},n.$set=function(e,g){var j,k=t.p(e),l="set"+(this.$u?"UTC":""),m=((j={}).day=l+"Date",j[i]=l+"Date",j[f]=l+"Month",j[h]=l+"FullYear",j[d]=l+"Hours",j[c]=l+"Minutes",j[b]=l+"Seconds",j[a]=l+"Milliseconds",j)[k],n="day"===k?this.$D+(g-this.$W):g;if(k===f||k===h){var o=this.clone().set(i,1);o.$d[m](n),o.init(),this.$d=o.set(i,Math.min(this.$D,o.daysInMonth())).$d}else m&&this.$d[m](n);return this.init(),this},n.set=function(a,b){return this.clone().$set(a,b)},n.get=function(a){return this[t.p(a)]()},n.add=function(a,g){var i,j=this;a=Number(a);var k=t.p(g),l=function(b){var c=s(j);return t.w(c.date(c.date()+Math.round(b*a)),j)};if(k===f)return this.set(f,this.$M+a);if(k===h)return this.set(h,this.$y+a);if("day"===k)return l(1);if(k===e)return l(7);var m=((i={})[c]=6e4,i[d]=36e5,i[b]=1e3,i)[k]||1,n=this.$d.getTime()+a*m;return t.w(n,this)},n.subtract=function(a,b){return this.add(-1*a,b)},n.format=function(a){var b=this,c=this.$locale();if(!this.isValid())return c.invalidDate||j;var d=a||"YYYY-MM-DDTHH:mm:ssZ",e=t.z(this),f=this.$H,g=this.$m,h=this.$M,i=c.weekdays,k=c.months,m=c.meridiem,n=function(a,c,e,f){return a&&(a[c]||a(b,d))||e[c].slice(0,f)},o=function(a){return t.s(f%12||12,a,"0")},p=m||function(a,b,c){var d=a<12?"AM":"PM";return c?d.toLowerCase():d};return d.replace(l,function(a,d){return d||function(a){switch(a){case"YY":return String(b.$y).slice(-2);case"YYYY":return t.s(b.$y,4,"0");case"M":return h+1;case"MM":return t.s(h+1,2,"0");case"MMM":return n(c.monthsShort,h,k,3);case"MMMM":return n(k,h);case"D":return b.$D;case"DD":return t.s(b.$D,2,"0");case"d":return String(b.$W);case"dd":return n(c.weekdaysMin,b.$W,i,2);case"ddd":return n(c.weekdaysShort,b.$W,i,3);case"dddd":return i[b.$W];case"H":return String(f);case"HH":return t.s(f,2,"0");case"h":return o(1);case"hh":return o(2);case"a":return p(f,g,!0);case"A":return p(f,g,!1);case"m":return String(g);case"mm":return t.s(g,2,"0");case"s":return String(b.$s);case"ss":return t.s(b.$s,2,"0");case"SSS":return t.s(b.$ms,3,"0");case"Z":return e}return null}(a)||e.replace(":","")})},n.utcOffset=function(){return-(15*Math.round(this.$d.getTimezoneOffset()/15))},n.diff=function(a,i,j){var k,l=this,m=t.p(i),n=s(a),o=(n.utcOffset()-this.utcOffset())*6e4,p=this-n,q=function(){return t.m(l,n)};switch(m){case h:k=q()/12;break;case f:k=q();break;case g:k=q()/3;break;case e:k=(p-o)/6048e5;break;case"day":k=(p-o)/864e5;break;case d:k=p/36e5;break;case c:k=p/6e4;break;case b:k=p/1e3;break;default:k=p}return j?k:t.a(k)},n.daysInMonth=function(){return this.endOf(f).$D},n.$locale=function(){return o[this.$L]},n.locale=function(a,b){if(!a)return this.$L;var c=this.clone(),d=r(a,b,!0);return d&&(c.$L=d),c},n.clone=function(){return t.w(this.$d,this)},n.toDate=function(){return new Date(this.valueOf())},n.toJSON=function(){return this.isValid()?this.toISOString():null},n.toISOString=function(){return this.$d.toISOString()},n.toString=function(){return this.$d.toUTCString()},m}(),v=u.prototype;return s.prototype=v,[["$ms",a],["$s",b],["$m",c],["$H",d],["$W","day"],["$M",f],["$y",h],["$D",i]].forEach(function(a){v[a[1]]=function(b){return this.$g(b,a[0],a[1])}}),s.extend=function(a,b){return a.$i||(a(b,u,s),a.$i=!0),s},s.locale=r,s.isDayjs=q,s.unix=function(a){return s(1e3*a)},s.en=o[n],s.Ls=o,s.p={},s}()},908597,a=>{"use strict";a.s(["getVisuallyOrderedWorkspaces",0,(a,b)=>{let c=new Set(b.map(a=>a.id)),d=new Map,e=[];for(let b of a){let a=b.groupId??null;if(a&&c.has(a)){let c=d.get(a)??[];c.push(b),d.set(a,c)}else e.push(b)}let f=[];for(let a of b){let b=d.get(a.id);b&&f.push(...b)}return f.push(...e),f}])},986013,a=>{"use strict";let b,c;var d=a.i(666680);a.s(["nanoid",0,function(a=21){var e=a|=0;if(e<0||e>1024)throw RangeError("Wrong ID size");!b||b.length<e?(b=Buffer.allocUnsafe(128*e),d.webcrypto.getRandomValues(b),c=0):c+e>b.length&&(d.webcrypto.getRandomValues(b),c=0),c+=e;let f="";for(let d=c-a;d<c;d++)f+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&b[d]];return f}],986013)},797630,a=>{"use strict";let b=a=>"web-browser"===a?"Web Browser":"";a.s(["defaultTabNameForPanelType",0,b,"resolveTabNameForPanelTypeChange",0,(a,c,d)=>{let e=b(c),f="agent-sessions"===c?"Session List":"",g=b(d),h=a.trim();return!h&&g||(""!==e&&h===e||""!==f&&h===f)&&h!==g?g:a}])},144784,a=>{"use strict";let b=a=>"pane"===a.type?[a]:[...b(a.children[0]),...b(a.children[1])],c=(a,b)=>"pane"===a.type?a.id===b?a:null:c(a.children[0],b)||c(a.children[1],b),d=a=>"pane"===a.type?a.id:d(a.children[0]),e=a=>"pane"===a.type?a.id:e(a.children[1]),f=(a,b,c)=>"pane"===a.type?a.id===b?c:a:{...a,children:[f(a.children[0],b,c),f(a.children[1],b,c)]},g=(a,b)=>{if("pane"===a.type)return null;let[c,d]=a.children;if("pane"===c.type&&c.id===b)return d;if("pane"===d.type&&d.id===b)return c;let e=g(c,b);if(e)return{...a,children:[e,d]};let f=g(d,b);return f?{...a,children:[c,f]}:null},h=(a,b)=>{if("pane"===a.type)return null;let[c,f]=a.children;return"pane"===c.type&&c.id===b?d(f):"pane"===f.type&&f.id===b?e(c):h(c,b)||h(f,b)},i=(a,b,c)=>{if("split"!==a.type)return a;if(0===b.length)return{...a,ratio:c};let[d,...e]=b,f=[a.children[0],a.children[1]];return f[d]=i(a.children[d],e,c),{...a,children:f}},j=(a,b)=>"pane"===a.type||a.orientation!==b?1:j(a.children[0],b)+j(a.children[1],b),k=a=>{if("pane"===a.type)return!0;let b=j(a.children[0],a.orientation),c=j(a.children[1],a.orientation);return!(Math.abs(a.ratio-b/(b+c)*100)>1)&&k(a.children[0])&&k(a.children[1])},l=a=>{if("pane"===a.type)return a;let b=j(a.children[0],a.orientation),c=Math.round(b/(b+j(a.children[1],a.orientation))*1e4)/100;return{...a,ratio:c,children:[l(a.children[0]),l(a.children[1])]}},m=(a,b,c)=>{if("pane"===a.type)return a.id===b?c(a):a;let d=m(a.children[0],b,c);if(d!==a.children[0])return{...a,children:[d,a.children[1]]};let e=m(a.children[1],b,c);return e!==a.children[1]?{...a,children:[a.children[0],e]}:a};a.s(["collectAllTabs",0,a=>b(a).flatMap(a=>a.tabs),"collectPanes",0,b,"equalizeNode",0,l,"findAdjacentPaneInDirection",0,(a,b,c)=>{let f=[],g=a=>{if("pane"===a.type)return a.id===b;for(let b=0;b<2;b++){if(f.push({node:a,childIndex:b}),g(a.children[b]))return!0;f.pop()}return!1};if(!g(a))return null;let h="left"===c||"right"===c?"horizontal":"vertical",i=+("left"===c||"up"===c);for(let a=f.length-1;a>=0;a--){let{node:b,childIndex:g}=f[a];if("split"===b.type&&b.orientation===h&&g===i){let a=b.children[1-i];return"left"===c||"up"===c?e(a):d(a)}}return null},"findPane",0,c,"findResizeTarget",0,(a,b,c)=>{let d=[],e=a=>{if("pane"===a.type)return a.id===b;for(let b=0;b<2;b++){if(d.push({node:a,childIndex:b}),e(a.children[b]))return!0;d.pop()}return!1};if(!e(a))return null;let f="left"===c||"right"===c?"horizontal":"vertical",g=+("right"!==c&&"down"!==c),h="right"===c||"down"===c;for(let a=d.length-1;a>=0;a--){let{node:b,childIndex:c}=d[a];if("split"===b.type&&b.orientation===f&&c===g)return{path:d.slice(0,a).map(a=>a.childIndex),currentRatio:b.ratio,increase:h}}return null},"getFirstPaneId",0,d,"isEqualized",0,k,"removePaneWithFocus",0,(a,c)=>{let d=h(a.root,c),e=g(a.root,c);e&&(a.root=e),a.activePaneId===c&&(a.activePaneId=d??b(a.root)[0]?.id??null)},"replacePane",0,f,"updatePaneInTree",0,m,"updateRatioAtPath",0,i])},4873,a=>{"use strict";var b=a.i(127669);let c=a=>{let b,c=new Set,d=(a,d)=>{let e="function"==typeof a?a(b):a;if(!Object.is(e,b)){let a=b;b=(null!=d?d:"object"!=typeof e||null===e)?e:Object.assign({},b,e),c.forEach(c=>c(b,a))}},e=()=>b,f={setState:d,getState:e,getInitialState:()=>g,subscribe:a=>(c.add(a),()=>c.delete(a))},g=b=a(d,e,f);return f},d=a=>{let d=a?c(a):c,e=a=>(function(a,c=a=>a){let d=b.default.useSyncExternalStore(a.subscribe,b.default.useCallback(()=>c(a.getState()),[a,c]),b.default.useCallback(()=>c(a.getInitialState()),[a,c]));return b.default.useDebugValue(d),d})(d,a);return Object.assign(e,d),e};a.s(["create",0,a=>a?d(a):d],4873)},721043,a=>{"use strict";a.s(["default",0,!1])},206456,a=>{"use strict";let b=new Set(["zsh","bash","fish","sh","-zsh","-bash","-fish","-sh"]),c=new Set(["codex","Codex","node"]),d=a=>{if("~"===a||"/"===a)return a;let b=a.replace(/\/$/,"").split("/");return b[b.length-1]||a},e=a=>{let b=a.trim();if(!b)return null;let c=b.indexOf("|");return c>0?b.slice(0,c):null},f=(a,b)=>"codex-cli"===b&&c.has(a)?"Codex":a;a.s(["formatTabTitle",0,(a,c)=>{let g=a.trim();if(!g)return"";let h=e(a);if(null!==h){let a=g.slice(g.indexOf("|")+1);return b.has(h)?d(a):f(h,c)}let i=g.match(/@[^:]+:\s*(.*)/);if(i)return d(i[1].trim());if(g.startsWith("/")||g.startsWith("~"))return d(g);let j=g.split(/\s+/)[0];return b.has(j)?"":f(j||"",c)},"isShellProcess",0,a=>{let c=e(a);return null!==c&&b.has(c)},"parseCurrentCommand",0,e])},168711,175679,a=>{"use strict";var b=a.i(4873);let c=(0,b.create)(a=>({data:null,setData:b=>a({data:b})}));a.s(["default",0,c],168711);let d=(0,b.create)(a=>({entries:[],syncFromServer:b=>a({entries:b}),upsertEntry:b=>a(a=>{let c=a.entries.findIndex(a=>a.id===b.id);if(c>=0){let d=[...a.entries];return d[c]=b,{entries:d}}return{entries:[b,...a.entries]}})}));a.s(["default",0,d],175679)},357785,a=>{"use strict";var b=a.i(4873);let c={phase:"idle",status:null,branch:null,error:null,lastFetchedAt:null},d=a=>a?a.staged+a.modified+a.untracked:0,e=(0,b.create)((a,b)=>({cwdKey:null,tmuxSession:null,...c,requestSeq:0,resetForTarget:({cwdKey:b,tmuxSession:d})=>{a(a=>a.cwdKey===b?a.tmuxSession===d?a:{tmuxSession:d}:{...c,cwdKey:b,tmuxSession:d,requestSeq:a.requestSeq+1})},fetchForTarget:async({cwdKey:c,tmuxSession:d},e)=>{if(!c||!d)return void b().resetForTarget({cwdKey:null,tmuxSession:null});let f=b(),g=f.cwdKey!==c,h=null!==f.lastFetchedAt&&Date.now()-f.lastFetchedAt<15e3;if(!g&&!e?.force&&h&&"error"!==f.phase){f.tmuxSession!==d&&a({tmuxSession:d});return}let i=f.requestSeq+1;a({cwdKey:c,tmuxSession:d,phase:"loading",status:g?null:f.status,branch:g?null:f.branch,error:null,lastFetchedAt:null,requestSeq:i});try{let c=new URLSearchParams({tmuxSession:d});e?.force&&c.set("force","true");let f=await fetch(`/api/git/status?${c.toString()}`,{cache:"no-store"});if(!f.ok)throw Error(`status-${f.status}`);let g=await f.json();if(b().requestSeq!==i)return;if(!g.status)return void a({phase:"not-git",status:null,branch:null,error:null,lastFetchedAt:Date.now()});let h=null;try{let a=new URLSearchParams({tmuxSession:d});e?.force&&a.set("force","true");let b=await fetch(`/api/git/branch?${a.toString()}`,{cache:"no-store"});b.ok&&(h=(await b.json()).branch)}catch{h=null}if(b().requestSeq!==i)return;a({phase:"ready",status:g.status,branch:h,error:null,lastFetchedAt:Date.now()})}catch(c){if(b().requestSeq!==i)return;a({phase:"error",status:null,branch:null,error:c instanceof Error?c.message:String(c),lastFetchedAt:Date.now()})}}}));a.s(["default",0,e,"formatGitStatusSummary",0,(a,b,c,e)=>{if("idle"===a)return e;if("loading"===a)return"Checking Git status...";if("not-git"===a)return"Not a Git repository";if("error"===a)return"Git status unavailable";if(!c)return e;let f=d(c),g=[b??"Git",f>0?`${f} changed`:"clean"];return(c.insertions>0||c.deletions>0)&&g.push(`+${c.insertions} -${c.deletions}`),c.ahead>0&&g.push(`ahead ${c.ahead}`),c.behind>0&&g.push(`behind ${c.behind}`),c.stash>0&&g.push(`${c.stash} stash`),g.join(" · ")},"getGitStatusIndicators",0,a=>{if(!a)return[];let b=d(a),c=[];return b>0&&c.push({key:"changed",label:b>99?"99+":String(b),tone:"dirty"}),a.ahead>0&&c.push({key:"ahead",label:`↑${a.ahead}`,tone:"sync"}),a.behind>0&&c.push({key:"behind",label:`↓${a.behind}`,tone:"sync"}),a.stash>0&&c.push({key:"stash",label:`S${a.stash}`,tone:"stash"}),c}])},552591,a=>{"use strict";var b=a.i(127669),c=a.i(760644),d=a.i(199462),e=a.i(168711),f=a.i(175679),g=a.i(357785),h=a.i(626605),i=a.i(206456),j=a.i(144784);let k=null;a.s(["ackNotificationInput",0,(a,b)=>{k?.readyState===WebSocket.OPEN&&k.send(JSON.stringify({type:"status:ack-notification",tabId:a,seq:b}))},"default",0,()=>{let a=(0,b.useRef)(0),l=(0,b.useRef)(null),m=(0,b.useRef)(!0);(0,b.useEffect)(()=>{m.current=!0;let b=()=>{if(!m.current)return;let n="https:"===location.protocol?"wss:":"ws:",o=new WebSocket(`${n}//${location.host}/api/status`);k=o,o.onopen=()=>{m.current&&(a.current=0,c.default.getState().setStatusWsConnected(!0))},o.onmessage=a=>{if(m.current)try{let b=JSON.parse(a.data);switch(b.type){case"status:sync":for(let[a,e]of(c.default.getState().syncAllFromServer(b.tabs),Object.entries(b.tabs)))"agent-sessions"!==e.panelType&&e.paneTitle&&!d.default.getState().metadata[a]?.title&&d.default.getState().setTitle(a,(0,i.formatTabTitle)(e.paneTitle,e.panelType));break;case"status:update":c.default.getState().updateFromServer(b.tabId,{cliState:b.cliState,workspaceId:b.workspaceId,tabName:b.tabName,panelType:b.panelType,terminalStatus:b.terminalStatus,listeningPorts:b.listeningPorts,currentProcess:b.currentProcess,agentProviderId:b.agentProviderId,agentSessionId:b.agentSessionId,agentSummary:b.agentSummary,lastUserMessage:b.lastUserMessage,lastAssistantMessage:b.lastAssistantMessage,currentAction:b.currentAction,readyForReviewAt:b.readyForReviewAt,busySince:b.busySince,dismissedAt:b.dismissedAt,compactingSince:b.compactingSince,permissionRequest:b.permissionRequest,lastEvent:b.lastEvent,eventSeq:b.eventSeq}),b.paneTitle&&"agent-sessions"!==b.panelType&&d.default.getState().setTitle(b.tabId,(0,i.formatTabTitle)(b.paneTitle,b.panelType));break;case"status:hook-event":c.default.getState().applyHookEvent(b.tabId,b.event),((a,b)=>{if("stop"!==b.name)return;let c=g.default.getState();if(!c.cwdKey||!c.tmuxSession)return;let d=h.useLayoutStore.getState().layout;if(!d)return;let e=(0,j.collectAllTabs)(d.root).find(b=>b.id===a);e&&e.sessionName===c.tmuxSession&&c.fetchForTarget({cwdKey:c.cwdKey,tmuxSession:c.tmuxSession},{force:!0})})(b.tabId,b.event);break;case"rate-limits:update":e.default.getState().setData(b.data);break;case"session-history:sync":f.default.getState().syncFromServer(b.entries);break;case"session-history:update":f.default.getState().upsertEntry(b.entry)}}catch{}},o.onclose=()=>{if(!m.current)return;c.default.getState().setStatusWsConnected(!1),k=null;let d=Math.min(1e3*Math.pow(2,a.current),3e4);a.current++,l.current=setTimeout(b,d)},o.onerror=()=>{}};b();let n=()=>{if("visible"!==document.visibilityState)return;let c=k?.readyState;c!==WebSocket.OPEN&&c!==WebSocket.CONNECTING&&(l.current&&(clearTimeout(l.current),l.current=null),a.current=0,b())};return document.addEventListener("visibilitychange",n),()=>{m.current=!1,l.current&&(clearTimeout(l.current),l.current=null),k&&(k.close(),k=null),document.removeEventListener("visibilitychange",n)}},[])},"dismissTab",0,a=>{c.default.getState().dismissTab(a),k?.readyState===WebSocket.OPEN&&k.send(JSON.stringify({type:"status:tab-dismissed",tabId:a}))},"requestSync",0,()=>{k?.readyState===WebSocket.OPEN&&k.send(JSON.stringify({type:"status:request-sync"}))}])},96968,a=>{"use strict";var b=a.i(127669);let c=768;a.s(["default",0,(a=c)=>{let d=`(max-width: ${a-1}px)`,e=(0,b.useCallback)(a=>{let b=window.matchMedia(d);return b.addEventListener("change",a),()=>b.removeEventListener("change",a)},[d]),f=(0,b.useCallback)(()=>window.matchMedia(d).matches,[d]),g=(0,b.useCallback)(()=>!1,[]);return(0,b.useSyncExternalStore)(e,f,g)}])}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=%5Broot-of-the-server%5D__07jm3ld._.js.map
|