purplemux 0.1.21 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +77 -77
- 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 +13 -7
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00glsnv._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__05bsxq0._.js → [root-of-the-server]__00yjayf._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__01.~37j._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__03l15.f._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__045vzzi._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__04cr_m8._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0ff8o47._.js → [root-of-the-server]__04o.cbq._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05ij_ys._.js +42 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07gfnob._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07xijrd._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__09gkm_6._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_.po82._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0auutl5._.js +5 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cjfc~l._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l~_wd0._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0m4quth._.js → [root-of-the-server]__0n61.a8._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ovn6yp._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qvunc5._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t1c-6w._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__09w77m2._.js → [root-of-the-server]__0t7wqt6._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0vi8p6v._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0w3m-oz._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__11j9~6h._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0xn_0ft._.js → [root-of-the-server]__12ksl6n._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__12nr~pb._.js +3 -0
- package/.next/standalone/.next/server/chunks/_0e8e4zn._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0isokfh._.js +1 -1
- package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_pages-api_00-t8sq.js +3 -0
- package/.next/standalone/.next/server/chunks/src_lib_136edwc._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_lib_layout-store_ts_0fanx7c._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_session-parser_ts_0~rhicw._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_status-manager_ts_003hlhy._.js +13 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0au.ssp._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0_mc3i2._.js → _00ehnd~._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0qejycp._.js → _00rrt71._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_06yggfn._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0kjoxb9._.js → _08h9ynz._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_08ytq3p._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0h~fc23._.js → _0_c~3id._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0-xx2s1._.js → _0_owbnq._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0al4.z9._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0b~zgl1._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0quk21n._.js → _0dg4_bi._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0qy269j._.js → _0gp1meg._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0iy5a-w._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0js4l3t._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0fuovbm._.js → _0lnui2f._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0nkeoiw._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0qbbxeq._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_06.nllk._.js → _0rxhzwm._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0g258pg._.js → _0sfctwm._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0c0hpua._.js → _0ulmx3c._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0k9ybcl._.js → _0wlh.pc._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_11wj.a4._.js → _0y5jzd3._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0z61aq-._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0lhf6qf._.js → _0~.theb._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0si9.17._.js → _11rnj4l._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{messages_127a4ox._.js → messages_046iw4z._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{messages_005j2ko._.js → messages_0zr0cc7._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_de_notification_json_[json]_cjs_02k70lx._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_de_session_json_[json]_cjs_0b-1vpl._.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_en_notification_json_[json]_cjs_0jqq879._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_en_session_json_[json]_cjs_0jaymfk._.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_es_notification_json_[json]_cjs_0q.i2xj._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_es_session_json_[json]_cjs_0jy1144._.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_fr_notification_json_[json]_cjs_0muj65q._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_fr_session_json_[json]_cjs_0rz0g.c._.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_ja_notification_json_[json]_cjs_03v~p7j._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ja_session_json_[json]_cjs_0cos-uy._.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_ko_notification_json_[json]_cjs_0gx~jkl._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ko_session_json_[json]_cjs_0x4saic._.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_pt-BR_notification_json_[json]_cjs_02mo05m._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_session_json_[json]_cjs_0-x8ftl._.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_ru_notification_json_[json]_cjs_03crije._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ru_session_json_[json]_cjs_0~2-kve._.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_tr_notification_json_[json]_cjs_0g.576s._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_tr_session_json_[json]_cjs_0zsvt_4._.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_zh-CN_notification_json_[json]_cjs_07v9on4._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_session_json_[json]_cjs_134xza~._.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-TW_notification_json_[json]_cjs_0.ktzjy._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_session_json_[json]_cjs_0mv_~-8._.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/{node_modules_0cndrls._.js → node_modules_0kc8lix._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/src_05g_qd3._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_components_10v_9d0._.js → src_components_0cflin8._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_components_04vn0dm._.js → src_components_0g.s~e7._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_components_0gsv3ly._.js → src_components_0jrj_vu._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_components_0iq~ool._.js → src_components_0rs9yzr._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_components_features_mobile_mobile-terminal-page_tsx_02chzch._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_components_features_workspace_terminal-page_tsx_0wuq-jl._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_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/chunks/ssr/src_lib_message-namespaces_ts_0wjpvu5._.js +3 -0
- package/.next/standalone/.next/server/middleware-build-manifest.js +77 -77
- 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 +4 -4
- package/.next/standalone/.next/server/pages/_app.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/_error/build-manifest.json +2 -2
- package/.next/standalone/.next/server/pages/_error/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/_error.js +2 -2
- package/.next/standalone/.next/server/pages/_error.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/check-claude.js +1 -1
- package/.next/standalone/.next/server/pages/api/check-claude.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/cli/tabs/[tabId]/result.js +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/pages/api/cli/tabs.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/cli/workspaces.js +1 -1
- package/.next/standalone/.next/server/pages/api/cli/workspaces.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/git/branch.js +1 -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 +1 -1
- package/.next/standalone/.next/server/pages/api/git/status.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout/cwd.js +1 -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 +1 -1
- package/.next/standalone/.next/server/pages/api/layout/diff.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout/pane/[paneId]/tabs/[tabId]/move.js +1 -1
- 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 +2 -2
- 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 +1 -1
- 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 +4 -4
- 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 +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/pages/api/layout/pane.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/layout.js +1 -1
- package/.next/standalone/.next/server/pages/api/layout.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/message-history.js +1 -1
- package/.next/standalone/.next/server/pages/api/message-history.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/daily-report/cache.js +1 -1
- package/.next/standalone/.next/server/pages/api/stats/daily-report/cache.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/daily-report/generate.js +1 -1
- package/.next/standalone/.next/server/pages/api/stats/daily-report/generate.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/daily-report/list.js +1 -1
- package/.next/standalone/.next/server/pages/api/stats/daily-report/list.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/projects.js +1 -1
- package/.next/standalone/.next/server/pages/api/stats/projects.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/sessions.js +1 -1
- package/.next/standalone/.next/server/pages/api/stats/sessions.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/stats/uptime.js +1 -1
- package/.next/standalone/.next/server/pages/api/stats/uptime.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/status/hook.js +4 -4
- 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 -1
- 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 +1 -1
- package/.next/standalone/.next/server/pages/api/system/tmux-sessions.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/timeline/entries.js +1 -1
- package/.next/standalone/.next/server/pages/api/timeline/entries.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/timeline/message-counts/pages-manifest.json +3 -0
- package/.next/standalone/.next/server/pages/api/timeline/message-counts.js +5 -0
- package/.next/standalone/.next/server/pages/api/timeline/message-counts.js.map +5 -0
- package/.next/standalone/.next/server/pages/api/timeline/message-counts.js.nft.json +1 -0
- package/.next/standalone/.next/server/pages/api/timeline/sessions.js +1 -1
- package/.next/standalone/.next/server/pages/api/timeline/sessions.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/tmux/capture.js +1 -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 +1 -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 +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/pages/api/tmux/plan-options.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/tmux/recover-unknown.js +5 -5
- package/.next/standalone/.next/server/pages/api/tmux/recover-unknown.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/tmux/reset.js +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 +1 -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 +1 -1
- package/.next/standalone/.next/server/pages/api/workspace/[workspaceId].js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/workspace/active.js +1 -1
- package/.next/standalone/.next/server/pages/api/workspace/active.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/workspace/reorder.js +1 -1
- package/.next/standalone/.next/server/pages/api/workspace/reorder.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/workspace/validate.js +1 -1
- package/.next/standalone/.next/server/pages/api/workspace/validate.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/api/workspace.js +4 -4
- 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 +12 -12
- package/.next/standalone/.next/server/pages/index/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/index/react-loadable-manifest.json +6 -6
- package/.next/standalone/.next/server/pages/index.js +13 -13
- 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 +10 -10
- package/.next/standalone/.next/server/pages/login/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/login.js +2 -2
- 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 +16 -16
- package/.next/standalone/.next/server/pages/reports/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/reports.js +9 -9
- package/.next/standalone/.next/server/pages/reports.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/reset/build-manifest.json +2 -2
- package/.next/standalone/.next/server/pages/reset/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/reset.js +3 -3
- 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 +13 -13
- package/.next/standalone/.next/server/pages/stats/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/stats/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/stats.js +6 -6
- package/.next/standalone/.next/server/pages/stats.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/tools-required/build-manifest.json +2 -2
- package/.next/standalone/.next/server/pages/tools-required/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/tools-required.js +3 -3
- package/.next/standalone/.next/server/pages/tools-required.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/tr/404.html +1 -1
- package/.next/standalone/.next/server/pages/tr/500.html +1 -1
- package/.next/standalone/.next/server/pages/webview/build-manifest.json +10 -10
- package/.next/standalone/.next/server/pages/webview/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/webview.js +10 -10
- package/.next/standalone/.next/server/pages/webview.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/zh-CN/404.html +1 -1
- package/.next/standalone/.next/server/pages/zh-CN/500.html +1 -1
- package/.next/standalone/.next/server/pages/zh-TW/404.html +1 -1
- package/.next/standalone/.next/server/pages/zh-TW/500.html +1 -1
- package/.next/standalone/.next/server/pages-manifest.json +1 -0
- package/.next/standalone/.next/static/{dcByQy16pcz2rzj9snwtK → WXAyTQ0PHZnxXXCwEZpit}/_buildManifest.js +9 -8
- package/.next/standalone/.next/static/chunks/0-97ruc25d2lz.js +1 -0
- package/.next/standalone/.next/static/chunks/{17e9_m-u1zvfx.js → 0-xrsiia9hc.c.js} +1 -1
- package/.next/standalone/.next/static/chunks/{135rnnu.-sh80.js → 0.ecwkadp7-hq.js} +1 -1
- package/.next/standalone/.next/static/chunks/00nx1s6rpu537.js +1 -0
- package/.next/standalone/.next/static/chunks/{0nin7ftvq8x5c.js → 00ziyk306y55s.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0kebzqtn4norb.js → 01-fb9rb-21.a.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0dthloew7zc8k.js → 010m3dplwy4n6.js} +16 -16
- package/.next/standalone/.next/static/chunks/{0_7qn_xpf-6l~.js → 02mfn213kze9c.js} +2 -2
- package/.next/standalone/.next/static/chunks/02r-a1_lz7fuk.js +1 -0
- package/.next/standalone/.next/static/chunks/04bbxzycy0y90.js +1 -0
- package/.next/standalone/.next/static/chunks/{0y--b123-dayk.js → 04cl8pvql07vz.js} +1 -1
- package/.next/standalone/.next/static/chunks/{15wkoi26~8omr.js → 04f25y8yc8j00.js} +1 -1
- package/.next/standalone/.next/static/chunks/{02.xbkqbezb~v.js → 04uzwc8c9u49~.js} +1 -1
- package/.next/standalone/.next/static/chunks/05oh32ya2uzfq.js +1 -0
- package/.next/standalone/.next/static/chunks/06e51nokt~dtt.js +1 -0
- package/.next/standalone/.next/static/chunks/06ypydsl._u~2.js +5 -0
- package/.next/standalone/.next/static/chunks/07-xm--o034du.js +1 -0
- package/.next/standalone/.next/static/chunks/071neb1eikeoh.js +1 -0
- package/.next/standalone/.next/static/chunks/07i6~xrmgspp8.js +1 -0
- package/.next/standalone/.next/static/chunks/{0i7zwsw_~llk0.js → 07v3udp2qhc02.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0kox55ju9c.e4.js → 088o~nd5em_1d.js} +1 -1
- package/.next/standalone/.next/static/chunks/{10_1w.i.mluxp.js → 08xz_z9u4ex9t.js} +1 -1
- package/.next/standalone/.next/static/chunks/{02119z8xemosp.js → 08yjqhf82rx~h.js} +1 -1
- package/.next/standalone/.next/static/chunks/095e2xf3z6x3g.js +23 -0
- package/.next/standalone/.next/static/chunks/{040hwmh16ihpj.js → 09agwg~-xbxbs.js} +1 -1
- package/.next/standalone/.next/static/chunks/09tinkgkd8br_.js +1 -0
- package/.next/standalone/.next/static/chunks/09vjzvj4~rwbf.js +1 -0
- package/.next/standalone/.next/static/chunks/{0puhant9cy0xw.js → 0__ve3txz-02p.js} +1 -1
- package/.next/standalone/.next/static/chunks/0a1hi9y0lwv3j.js +1 -0
- package/.next/standalone/.next/static/chunks/{0fzb0m-2k2x14.js → 0bzbaprexb9od.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0ggsfsmm~hj5t.js → 0cfpdp0_-.4aj.js} +1 -1
- package/.next/standalone/.next/static/chunks/0chjvj73yfmoj.js +1 -0
- package/.next/standalone/.next/static/chunks/{0yi.kp2rt4-nc.js → 0ea-k_kbq5gi1.js} +1 -1
- package/.next/standalone/.next/static/chunks/{082eokcz_e-4q.js → 0f81tdf_8utww.js} +1 -1
- package/.next/standalone/.next/static/chunks/{14ajlpt1s6ueh.js → 0ff6a07hvp4pu.js} +2 -2
- package/.next/standalone/.next/static/chunks/{105.cpxealiud.js → 0fotmrplo6yc7.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0h_vfy~qxk1_6.js → 0h-7ntqpip4oi.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0wvyw8fxpnmre.js → 0h~_fdj60t_~l.js} +1 -1
- package/.next/standalone/.next/static/chunks/{04_s.sj1oagqr.js → 0i2uqmry6cyl_.js} +1 -1
- package/.next/standalone/.next/static/chunks/0if5fmp94~nc2.js +12 -0
- package/.next/standalone/.next/static/chunks/{1235zq5em7nh2.js → 0iw7xjsfo1v-u.js} +10 -10
- package/.next/standalone/.next/static/chunks/0jxk8j~j30thp.js +1 -0
- package/.next/standalone/.next/static/chunks/{0_eof.53ko6d_.js → 0lz-p_awksh5e.js} +1 -1
- package/.next/standalone/.next/static/chunks/0m_amua611xl0.js +5 -0
- package/.next/standalone/.next/static/chunks/0nyar-7g9rya6.js +1 -0
- package/.next/standalone/.next/static/chunks/0o6esya.vhm1..js +1 -0
- package/.next/standalone/.next/static/chunks/0oxlivdn8c89b.js +1 -0
- package/.next/standalone/.next/static/chunks/{0iiahbpxxksju.js → 0p1vmcv-mlsg5.js} +1 -1
- package/.next/standalone/.next/static/chunks/{14067kbmixmm6.js → 0pw-284q1gfk3.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0turlr93lvkg8.js → 0t0-4sn-nqqld.js} +1 -1
- package/.next/standalone/.next/static/chunks/{09jl7_l-yth-3.js → 0t76mt4_ijxw7.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0_nr91n2-npr6.js → 0u-1zto-umjh9.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0x4khblf0c7-p.js → 0u9~wuf2zbs5z.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0krb2wvo2_ipb.js → 0unvbz84l4g9h.js} +1 -1
- package/.next/standalone/.next/static/chunks/{12up4kbv36k4r.js → 0w52yh2srwcs0.js} +2 -2
- package/.next/standalone/.next/static/chunks/{0ml0ppx6kwe2_.js → 0w9~wt6~_cxhf.js} +1 -1
- package/.next/standalone/.next/static/chunks/0wp13r5su.j3e.js +1 -0
- package/.next/standalone/.next/static/chunks/{0e~.6y_x93o06.js → 0y3fmkya..f_6.js} +13 -13
- package/.next/standalone/.next/static/chunks/0~ei.a78nuwqe.js +1 -0
- package/.next/standalone/.next/static/chunks/{0hqhf5soi_25r.js → 0~lnp45fxxtgz.js} +1 -1
- package/.next/standalone/.next/static/chunks/0~nlz9.lltzrz.js +1 -0
- package/.next/standalone/.next/static/chunks/10bvbbw1062os.js +1 -0
- package/.next/standalone/.next/static/chunks/{01sxhicgu6p69.js → 11ess6mn2988z.js} +10 -10
- package/.next/standalone/.next/static/chunks/11gch78bg_qsn.js +1 -0
- package/.next/standalone/.next/static/chunks/{0zzlz_qu90xvc.js → 11nk1lwom62oe.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0sj1hijbxwqzi.js → 131tx--pi8.tm.js} +1 -1
- package/.next/standalone/.next/static/chunks/13zzmkwag6vsm.css +1 -0
- package/.next/standalone/.next/static/chunks/13~7v30_nnqks.js +1 -0
- package/.next/standalone/.next/static/chunks/{0arxgyek93av0.js → 17deooyefr~9o.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0jhs9_arn872p.js → 17e2iymrk7eoa.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0kima6zc7cl2p.js → 17et6y09q052u.js} +1 -1
- package/.next/standalone/.next/static/chunks/17jcucuef_33-.js +1 -0
- package/.next/standalone/.next/static/chunks/{turbopack-11cbtg95iwob2.js → turbopack-0-itu0o9y_vq8.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0t_pmdbcbax~k.js → turbopack-0.28.d-q12n3p.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0tl7oxj3760qz.js → turbopack-0.4ipr_kch~.s.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-02re16zyko_-d.js → turbopack-0g80nrinbfgtk.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-03ch5ephon-wk.js → turbopack-0h0~tr4tgq3aa.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0k.5aa0_xv2hq.js → turbopack-0hwi_g-tegs_u.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0au9jjcv_8-gl.js → turbopack-0np.oib7-.1fp.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-02yx2w1m.5ub9.js → turbopack-0qmx66h203l93.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0vqdj~g~ggw3x.js → turbopack-11utvoktq4lmr.js} +1 -1
- package/.next/standalone/messages/de/notification.json +3 -1
- package/.next/standalone/messages/de/session.json +5 -2
- package/.next/standalone/messages/de/settings.json +22 -1
- package/.next/standalone/messages/en/notification.json +3 -1
- package/.next/standalone/messages/en/session.json +5 -2
- package/.next/standalone/messages/en/settings.json +20 -1
- package/.next/standalone/messages/es/notification.json +3 -1
- package/.next/standalone/messages/es/session.json +5 -2
- package/.next/standalone/messages/es/settings.json +22 -1
- package/.next/standalone/messages/fr/notification.json +3 -1
- package/.next/standalone/messages/fr/session.json +5 -2
- package/.next/standalone/messages/fr/settings.json +22 -1
- package/.next/standalone/messages/ja/notification.json +3 -1
- package/.next/standalone/messages/ja/session.json +5 -2
- package/.next/standalone/messages/ja/settings.json +22 -1
- package/.next/standalone/messages/ko/notification.json +3 -1
- package/.next/standalone/messages/ko/session.json +5 -2
- package/.next/standalone/messages/ko/settings.json +20 -1
- package/.next/standalone/messages/pt-BR/notification.json +3 -1
- package/.next/standalone/messages/pt-BR/session.json +5 -2
- package/.next/standalone/messages/pt-BR/settings.json +22 -1
- package/.next/standalone/messages/ru/notification.json +3 -1
- package/.next/standalone/messages/ru/session.json +5 -2
- package/.next/standalone/messages/ru/settings.json +22 -1
- package/.next/standalone/messages/tr/notification.json +3 -1
- package/.next/standalone/messages/tr/session.json +5 -2
- package/.next/standalone/messages/tr/settings.json +22 -1
- package/.next/standalone/messages/zh-CN/notification.json +3 -1
- package/.next/standalone/messages/zh-CN/session.json +5 -2
- package/.next/standalone/messages/zh-CN/settings.json +22 -1
- package/.next/standalone/messages/zh-TW/notification.json +3 -1
- package/.next/standalone/messages/zh-TW/session.json +5 -2
- package/.next/standalone/messages/zh-TW/settings.json +22 -1
- package/.next/standalone/package.json +4 -5
- package/.next/standalone/server.js +1 -1
- package/dist/server.js +219 -244
- package/package.json +4 -5
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__019s3sg._.js +0 -15
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__02d5mfa._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__050uepg._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__093j355._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cy9s8s._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0dn3vc8._.js +0 -5
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g99747._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ge7g~x._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0iqf2xr._.js +0 -15
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ky2xd.._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l806ne._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0mm5n3z._.js +0 -15
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0psi612._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qtw~r6._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ysyw3z._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~7f-os._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__10b7n-k._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-e2yqy._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vwkkwh._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0mu2snc._.js +0 -3
- package/.next/standalone/.next/static/chunks/0.me5n9dvrgga.js +0 -1
- package/.next/standalone/.next/static/chunks/04u8dbn0ogxqm.js +0 -5
- package/.next/standalone/.next/static/chunks/0617badw.sq7c.js +0 -1
- package/.next/standalone/.next/static/chunks/06ik0y0xz_pxd.js +0 -5
- package/.next/standalone/.next/static/chunks/06~0v3h-9qr-b.js +0 -1
- package/.next/standalone/.next/static/chunks/0_iwf7xd96dhg.js +0 -1
- package/.next/standalone/.next/static/chunks/0b.80wy8lilvw.js +0 -1
- package/.next/standalone/.next/static/chunks/0c9nugbfmzaq4.js +0 -23
- package/.next/standalone/.next/static/chunks/0da0otp~vxk80.js +0 -1
- package/.next/standalone/.next/static/chunks/0diujbo1qkcle.css +0 -1
- package/.next/standalone/.next/static/chunks/0ep6reedai0y6.js +0 -1
- package/.next/standalone/.next/static/chunks/0f6dlhth6ll0c.js +0 -12
- package/.next/standalone/.next/static/chunks/0j.bb896cs98k.js +0 -1
- package/.next/standalone/.next/static/chunks/0j630d8~~4rbz.js +0 -1
- package/.next/standalone/.next/static/chunks/0k7kp5g9etss9.js +0 -1
- package/.next/standalone/.next/static/chunks/0ng68zj-fjm.w.js +0 -1
- package/.next/standalone/.next/static/chunks/0nsq-sayv38ks.js +0 -1
- package/.next/standalone/.next/static/chunks/0nvalz7iwy6qc.js +0 -1
- package/.next/standalone/.next/static/chunks/0rr7vbxqscvhw.js +0 -1
- package/.next/standalone/.next/static/chunks/0s66~z6yys6zz.js +0 -1
- package/.next/standalone/.next/static/chunks/0s8imclb5deef.js +0 -1
- package/.next/standalone/.next/static/chunks/0u7flh--27u75.js +0 -1
- package/.next/standalone/.next/static/chunks/0vrlsk_eqnj7q.js +0 -1
- package/.next/standalone/.next/static/chunks/0vw93vbkgsb1a.js +0 -1
- package/.next/standalone/.next/static/chunks/12i5z~h-3ys7k.js +0 -1
- package/.next/standalone/.next/static/chunks/171khl108g-m8.js +0 -1
- package/.next/standalone/.next/static/chunks/17fzeqm4m_x67.js +0 -1
- /package/.next/standalone/.next/static/{dcByQy16pcz2rzj9snwtK → WXAyTQ0PHZnxXXCwEZpit}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{dcByQy16pcz2rzj9snwtK → WXAyTQ0PHZnxXXCwEZpit}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,15 @@
|
|
|
1
|
-
module.exports=[964759,t=>{"use strict";t.i(478319);var e=t.i(220951),s=t.i(322429),a=t.i(825265),i=t.i(804767),n=t.i(459015),l=t.i(143511),r=t.i(746514),o=t.i(785128),c=t.i(840665),u=t.i(522734),d=t.i(924868),p=t.i(814747),h=t.i(25146),m=t.i(796902);let y=(0,h.createLogger)("rate-limits"),S=p.default.dirname(m.RATE_LIMITS_FILE),f=p.default.basename(m.RATE_LIMITS_FILE);var g=t.i(971780),b=t.i(443571),w=t.i(446786);let T=(0,h.createLogger)("session-history"),A=p.default.join(w.default.homedir(),".purplemux"),v=p.default.join(A,"session-history.json"),P=globalThis;P.__purplemuxSessionHistoryLock||(P.__purplemuxSessionHistoryLock=Promise.resolve());let k=async t=>{let e,s=new Promise(t=>{e=t}),a=P.__purplemuxSessionHistoryLock;P.__purplemuxSessionHistoryLock=s,await a;try{return await t()}finally{e()}},M=()=>({version:1,entries:[]}),I=async()=>{let t;try{t=await d.default.readFile(v,"utf-8")}catch{return M()}try{return JSON.parse(t)}catch{T.warn("Failed to parse session-history.json, starting empty");try{await d.default.copyFile(v,v.replace(/\.json$/,".json.bak"))}catch{}return M()}},U=async t=>{let e=JSON.stringify(t.entries);if(P.__purplemuxSessionHistoryContentCache===e)return;let s=v+".tmp";try{await d.default.writeFile(s,JSON.stringify(t,null,2),{mode:384}),await d.default.rename(s,v)}catch(t){throw await d.default.unlink(s).catch(()=>{}),t}P.__purplemuxSessionHistoryContentCache=e},j=async t=>{await k(async()=>{let e=await I();e.entries.unshift(t),e.entries.length>200&&(e.entries=e.entries.slice(0,200)),await U(e)})},W=async(t,e)=>await k(async()=>{let s=await I(),a=s.entries.find(e=>e.tabId===t&&null===e.dismissedAt);return a?(a.dismissedAt=e,await U(s),a):null});var E=t.i(157469),L=t.i(75874),_=t.i(228448),R=t.i(44014);let N=(0,h.createLogger)("status"),x=(0,h.createLogger)("hooks"),C=t=>t?p.default.basename(t,".jsonl"):null,F=new Set(["permission_prompt","worker_permission_prompt"]),J=new Map,D=t=>{let e=t.name??"Tool",s=t.input??{};return{toolName:e,summary:(0,c.summarizeToolCall)(e,s)}},z=t=>{let e=!1;for(let s=t.length-1;s>=0;s--)try{let a=JSON.parse(t[s]);if(a.isSidechain)continue;if("user"===a.type){let t=a.message?.content;Array.isArray(t)&&t.some(t=>"tool_result"===t.type)||(e=!0);continue}if("assistant"!==a.type||!a.message?.content)continue;if(e)return{lastAssistantSnippet:null,currentAction:null,reset:!0};let i=a.message.content;if(!Array.isArray(i))continue;let n=null,l=null;for(let t=i.length-1;t>=0;t--){let e=i[t];if("tool_use"===e.type){l=D(e);break}if("text"===e.type&&e.text?.trim()){let t=e.text.trim();l={toolName:null,summary:t.length>200?t.slice(0,200)+"…":t};break}}for(let t=i.length-1;t>=0;t--)if("text"===i[t].type&&i[t].text?.trim()){let e=i[t].text.trim();n=e.length>200?e.slice(0,200)+"…":e;break}return{lastAssistantSnippet:n,currentAction:l,reset:!1}}catch{continue}return{lastAssistantSnippet:null,currentAction:null,reset:!1}},O=(t,e)=>{for(let s=t.length-1;s>=0;s--)try{let a=JSON.parse(t[s]);if(a.isSidechain)continue;let i=a.timestamp?new Date(a.timestamp).getTime():null;if("system"===a.type&&("stop_hook_summary"===a.subtype||"turn_duration"===a.subtype))return{matched:!0,idle:!0,stale:!1,needsStaleRecheck:!1,staleMs:0,lastEntryTs:i,interrupted:!1};if("assistant"===a.type){let t=a.message?.stop_reason;if(!t){let t=e>2e4;return{matched:!0,idle:t,stale:!0,needsStaleRecheck:!t,staleMs:2e4,lastEntryTs:i,interrupted:!1}}return{matched:!0,idle:"tool_use"!==t,stale:!1,needsStaleRecheck:!1,staleMs:0,lastEntryTs:i,interrupted:!1}}if("user"===a.type){let t=a.message?.content;if(Array.isArray(t)&&1===t.length&&"string"==typeof t[0]?.text&&t[0].text.startsWith(c.INTERRUPT_PREFIX))return{matched:!0,idle:!0,stale:!1,needsStaleRecheck:!1,staleMs:0,lastEntryTs:i,interrupted:!0};let s=e>9e4;return{matched:!0,idle:s,stale:!0,needsStaleRecheck:!s,staleMs:9e4,lastEntryTs:i,interrupted:!1}}}catch{continue}return{matched:!1,idle:e>9e4,stale:!0,needsStaleRecheck:e<=9e4,staleMs:9e4,lastEntryTs:null,interrupted:!1}},q=async t=>{try{let e=await d.default.stat(t);if(0===e.size)return{idle:!0,stale:!1,lastAssistantSnippet:null,currentAction:null,reset:!1,lastEntryTs:null,staleMs:0,interrupted:!1};let s=J.get(t);if(s&&s.mtimeMs===e.mtimeMs){if(J.delete(t),J.set(t,s),s.idle)return{idle:!0,stale:s.stale,lastAssistantSnippet:s.lastAssistantSnippet,currentAction:s.currentAction,reset:s.reset,lastEntryTs:s.lastEntryTs,staleMs:s.staleMs,interrupted:s.interrupted};if(s.needsStaleRecheck)return{idle:Date.now()-e.mtimeMs>s.staleMs,stale:!0,lastAssistantSnippet:s.lastAssistantSnippet,currentAction:s.currentAction,reset:s.reset,lastEntryTs:s.lastEntryTs,staleMs:s.staleMs,interrupted:s.interrupted};return{idle:!1,stale:!1,lastAssistantSnippet:s.lastAssistantSnippet,currentAction:s.currentAction,reset:s.reset,lastEntryTs:s.lastEntryTs,staleMs:s.staleMs,interrupted:s.interrupted}}let a=await d.default.open(t,"r");try{let s=Date.now()-e.mtimeMs,i=Math.min(e.size,8192),n=Buffer.alloc(i);await a.read(n,0,i,e.size-i);let l=n.toString("utf-8").split("\n").filter(t=>t.trim()),r=O(l,s),o=z(l);if(!r.matched&&e.size>8192){let t=Math.min(e.size,131072),i=Buffer.alloc(t);await a.read(i,0,t,e.size-t);let n=i.toString("utf-8").split("\n").filter(t=>t.trim());r=O(n,s),o.lastAssistantSnippet||o.currentAction||(o=z(n))}return J.size>=256&&J.delete(J.keys().next().value),J.set(t,{mtimeMs:e.mtimeMs,idle:r.idle,stale:r.stale,needsStaleRecheck:r.needsStaleRecheck,staleMs:r.staleMs,lastAssistantSnippet:o.lastAssistantSnippet,currentAction:o.currentAction,reset:o.reset,lastEntryTs:r.lastEntryTs,interrupted:r.interrupted}),{idle:r.idle,stale:r.stale,lastAssistantSnippet:o.lastAssistantSnippet,currentAction:o.currentAction,reset:o.reset,lastEntryTs:r.lastEntryTs,staleMs:r.staleMs,interrupted:r.interrupted}}finally{await a.close()}}catch{return{idle:!1,stale:!1,lastAssistantSnippet:null,currentAction:null,reset:!1,lastEntryTs:null,staleMs:0,interrupted:!1}}},$=async t=>{let e={toolUsage:{},touchedFiles:[],lastAssistantText:null,lastUserText:null,firstUserTs:null,lastAssistantTs:null,turnDurationMs:null};try{let s=await d.default.stat(t);if(0===s.size)return e;let a=await d.default.open(t,"r");try{let t=Math.min(s.size,131072),e=Buffer.alloc(t);await a.read(e,0,t,s.size-t);let i=e.toString("utf-8").split("\n").filter(t=>t.trim()),n={},l=new Set,r=null,o=null,c=null,u=null,d=null;for(let t=i.length-1;t>=0;t--)try{let e=JSON.parse(i[t]);if("file-history-snapshot"===e.type)break;if(e.isSidechain)continue;"system"!==e.type||"turn_duration"!==e.subtype||"number"!=typeof e.durationMs||d||(d=e.durationMs);let s=e.timestamp?new Date(e.timestamp).getTime():null;if("user"===e.type&&(s&&(u=s),!o&&Array.isArray(e.message?.content))){for(let t of e.message.content)if("text"===t.type&&t.text){o=t.text;break}}if("assistant"===e.type&&(s&&!c&&(c=s),Array.isArray(e.message?.content))){let t=null;for(let s of e.message.content)"tool_use"===s.type&&s.name&&(n[s.name]=(n[s.name]??0)+1,("Edit"===s.name||"Write"===s.name)&&s.input?.file_path&&l.add(String(s.input.file_path))),"text"===s.type&&s.text&&(t=s.text);!r&&t&&(r=t)}}catch{continue}return{toolUsage:n,touchedFiles:[...l],lastAssistantText:r,lastUserText:o,firstUserTs:u,lastAssistantTs:c,turnDurationMs:d}}finally{await a.close()}}catch{return e}},H=/^[✳⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏⠐⠈]\s+/,B=t=>t&&H.test(t)&&t.replace(H,"").trim()||null,K=globalThis;class V{tabs=new Map;pollingTimer=null;currentInterval=0;clients=new Set;initialized=!1;rateLimitsWatcher=null;lastRateLimits=null;jsonlWatchers=new Map;compactStaleTimers=new Map;async init(){if(!this.initialized){var t;let e,s,a,i,n,l;this.initialized=!0,await this.scanAll(),this.startPolling(),this.rateLimitsWatcher=(t=t=>{this.lastRateLimits=t,this.broadcast({type:"rate-limits:update",data:t})},e=null,s=null,a=0,i=async()=>{try{let e=await d.default.readFile(m.RATE_LIMITS_FILE,"utf-8"),s=JSON.parse(e);s.ts&&s.ts!==a&&(a=s.ts,t(s))}catch{}},n=()=>{i();try{(e=u.default.watch(S,(t,e)=>{e===f&&(s&&clearTimeout(s),s=setTimeout(i,500))})).on("error",()=>{y.debug(`${S} watch error, retrying...`),l(),setTimeout(n,5e3)})}catch{y.debug(`${S} not available yet, retrying...`),setTimeout(n,5e3)}},{start:n,stop:l=()=>{s&&(clearTimeout(s),s=null),e&&(e.close(),e=null)}}),this.rateLimitsWatcher.start()}}async scanAll(){let{workspaces:t}=await (0,s.getWorkspaces)(),e=await (0,n.getAllPanesInfo)();for(let t of[...this.jsonlWatchers.keys()])this.stopJsonlWatch(t);for(let s of(this.tabs.clear(),t)){let t=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(t)for(let a of(0,i.collectAllTabs)(t.root)){let t=e.get(a.sessionName),i=await this.readTabMetadata(t),n=a.cliState??"idle",l="busy"===n?"unknown":n,{terminalStatus:r,listeningPorts:c}="claude-code"===a.panelType?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(t),u=t?.command,d=t?`${t.command}|${t.path}`:void 0,p="needs-input"===l?{name:"notification",at:Date.now(),seq:0}:null;this.tabs.set(a.id,{cliState:l,workspaceId:s.id,tabName:a.name||(d?(0,o.formatTabTitle)(d):""),currentProcess:u,paneTitle:d,tmuxSession:a.sessionName,panelType:a.panelType,terminalStatus:r,listeningPorts:c,claudeSummary:a.claudeSummary,lastUserMessage:a.lastUserMessage,lastAssistantMessage:i.lastAssistantSnippet,currentAction:i.currentAction,readyForReviewAt:"ready-for-review"===l?Date.now():null,busySince:null,dismissedAt:a.dismissedAt??null,claudeSessionId:C(i.jsonlPath)??a.claudeSessionId??null,jsonlPath:i.jsonlPath,lastEvent:p,eventSeq:0}),("needs-input"===l||"unknown"===l)&&i.jsonlPath&&this.startJsonlWatch(a.id,i.jsonlPath),"unknown"===l&&this.resolveUnknown(a.id).catch(t=>N.warn("resolveUnknown failed: %s",t))}}}async resolveUnknown(t){let e=this.tabs.get(t);if(!e||"unknown"!==e.cliState)return;let s=(await (0,n.getAllPanesInfo)()).get(e.tmuxSession),a=s?.pid?await (0,l.getChildPids)(s.pid):[];if(!(s?.pid&&await (0,l.isClaudeRunning)(s.pid,a))){this.applyCliState(t,e,"idle",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(t,e);return}if(e.jsonlPath){let{idle:s,stale:a,lastAssistantSnippet:i}=await q(e.jsonlPath);if(s&&!a&&i){this.applyCliState(t,e,"ready-for-review",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(t,e);return}}}async readTabMetadata(t){let e={lastAssistantSnippet:null,currentAction:null,jsonlPath:null};if(!t||!t.pid)return e;let s=await (0,l.getChildPids)(t.pid);if(!await (0,l.isClaudeRunning)(t.pid,s))return e;let a=await (0,l.detectActiveSession)(t.pid,s);if("running"!==a.status||!a.jsonlPath)return{lastAssistantSnippet:null,currentAction:null,jsonlPath:a.jsonlPath??null};let{lastAssistantSnippet:i,currentAction:n}=await q(a.jsonlPath);return{lastAssistantSnippet:i,currentAction:n,jsonlPath:a.jsonlPath}}async detectTerminalStatus(t){if(!t||!t.pid)return{terminalStatus:"idle",listeningPorts:[]};let e=await (0,n.getListeningPorts)(t.pid);return e.length>0?{terminalStatus:"server",listeningPorts:e}:{terminalStatus:n.SAFE_SHELLS.has(t.command)?"idle":"running",listeningPorts:[]}}getPollingInterval(){let t=this.tabs.size;return t>=21?6e4:t>=11?45e3:3e4}async rescan(){await this.scanAll()}startPolling(){this.stopPolling(),this.currentInterval=this.getPollingInterval(),this.pollingTimer=setInterval(()=>{this.poll().catch(t=>{N.error({err:t},"Polling error")})},this.currentInterval)}stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null,this.currentInterval=0)}async poll(){let{workspaces:t}=await (0,s.getWorkspaces)(),e=await (0,n.getAllPanesInfo)(),r=new Set,c=new Set(this.tabs.keys()),u=Date.now();for(let s of t){let t=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(t)for(let c of(0,i.collectAllTabs)(t.root)){r.add(c.id);let t=this.tabs.get(c.id),i=e.get(c.sessionName),{terminalStatus:d,listeningPorts:p}="claude-code"===c.panelType?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(i),h=i?.command,m=i?`${i.command}|${i.path}`:void 0;if(!t){let t=c.cliState??"idle",e="busy"===t?"unknown":t,a=await this.readTabMetadata(i),n="needs-input"===e?{name:"notification",at:Date.now(),seq:0}:null,l={cliState:e,workspaceId:s.id,tabName:c.name||(m?(0,o.formatTabTitle)(m):""),currentProcess:h,paneTitle:m,tmuxSession:c.sessionName,panelType:c.panelType,terminalStatus:d,listeningPorts:p,claudeSummary:c.claudeSummary,lastUserMessage:c.lastUserMessage,lastAssistantMessage:a.lastAssistantSnippet,currentAction:a.currentAction,claudeSessionId:C(a.jsonlPath)??c.claudeSessionId??null,jsonlPath:a.jsonlPath,lastEvent:n,eventSeq:0};this.tabs.set(c.id,l),this.persistToLayout(l),this.broadcastUpdate(c.id,l),"unknown"===e&&this.resolveUnknown(c.id).catch(t=>N.warn("resolveUnknown failed: %s",t));continue}let y=t.currentProcess!==h,S=t.lastUserMessage!==c.lastUserMessage,f=t.panelType!==c.panelType,g=await this.readTabMetadata(i);t.tabName=c.name||(m?(0,o.formatTabTitle)(m):""),t.currentProcess=h,t.paneTitle=m,t.workspaceId=s.id,t.panelType=c.panelType,t.claudeSessionId=C(g.jsonlPath)??c.claudeSessionId??null,t.jsonlPath=g.jsonlPath??t.jsonlPath,t.lastUserMessage=c.lastUserMessage,y&&(t.processRetries=3);let b=!y&&(t.processRetries??0)>0;b&&(t.processRetries=t.processRetries-1);let w=t.listeningPorts,T=w?.length!==p.length||p.some((t,e)=>w[e]!==t),A=t.terminalStatus!==d||T;A&&(t.terminalStatus=d,t.listeningPorts=p);let v=!1;if("busy"===t.cliState||"needs-input"===t.cliState){let e=B(await (0,n.getPaneTitle)(c.sessionName));e&&e!==t.claudeSummary&&(t.claudeSummary=e,v=!0,(0,a.updateTabClaudeSummary)(c.sessionName,e).catch(()=>{}))}else t.claudeSummary!==c.claudeSummary&&(t.claudeSummary=c.claudeSummary,v=!0);if("busy"===t.cliState&&t.lastEvent&&u-t.lastEvent.at>6e5){let e=i?.pid?await (0,l.getChildPids)(i.pid):[];if(!(i?.pid&&await (0,l.isClaudeRunning)(i.pid,e))){N.info({tabId:c.id},"busy stuck — Claude process gone, forcing idle"),this.applyCliState(c.id,t,"idle",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(c.id,t);continue}}(A||y||b||S||f||v)&&this.broadcastUpdate(c.id,t)}}for(let t of c)!r.has(t)&&this.tabs.has(t)&&(this.stopJsonlWatch(t),this.tabs.delete(t),this.broadcastRemove(t));let d=this.getPollingInterval();this.pollingTimer&&d!==this.currentInterval&&this.startPolling()}getAllForClient(){let t={};for(let[e,s]of this.tabs)t[e]={cliState:s.cliState,workspaceId:s.workspaceId,tabName:s.tabName,currentProcess:s.currentProcess,paneTitle:s.paneTitle,panelType:s.panelType,terminalStatus:s.terminalStatus,listeningPorts:s.listeningPorts,claudeSummary:s.claudeSummary,lastUserMessage:s.lastUserMessage,lastAssistantMessage:s.lastAssistantMessage,currentAction:s.currentAction,readyForReviewAt:s.readyForReviewAt,busySince:s.busySince,dismissedAt:s.dismissedAt,claudeSessionId:s.claudeSessionId,lastEvent:s.lastEvent,eventSeq:s.eventSeq};return t}applyCliState(t,e,s,a={}){if(e.cliState===s)return;let i=e.busySince;e.cliState=s,e.readyForReviewAt="ready-for-review"===s?Date.now():null,e.busySince="busy"===s?Date.now():null,"busy"===s&&(e.dismissedAt=null),"ready-for-review"===s&&e.jsonlPath&&new Promise(t=>setTimeout(t,500)).then(()=>this.saveSessionHistory(t,e,i,!1)).catch(t=>{N.warn("Failed to save session history: %s",t)}),"ready-for-review"!==s||a.silent||this.sendWebPush(t,e,"review").catch(t=>{N.warn("Web push failed: %s",t)}),"needs-input"!==s||a.silent||this.sendWebPush(t,e,"needs-input").catch(t=>{N.warn("Web push failed: %s",t)});let n=("busy"===s||"needs-input"===s)&&e.jsonlPath,l="ready-for-review"===s&&this.jsonlWatchers.has(t);n&&!this.jsonlWatchers.has(t)?this.startJsonlWatch(t,e.jsonlPath):!n&&!l&&this.jsonlWatchers.has(t)&&this.stopJsonlWatch(t)}async saveSessionHistory(t,e,a,i){if(!e.lastUserMessage)return;let n=e.jsonlPath?await $(e.jsonlPath):null,{workspaces:l}=await (0,s.getWorkspaces)(),r=l.find(t=>t.id===e.workspaceId),o=Date.now(),c=n?.firstUserTs??a??o,u=i?o:n?.lastAssistantTs??o,d=i?u-c:n?.turnDurationMs??u-c,p={id:(0,R.nanoid)(),workspaceId:e.workspaceId,workspaceName:r?.name??e.workspaceId,workspaceDir:r?.directories[0]??null,tabId:t,claudeSessionId:e.claudeSessionId??null,prompt:n?.lastUserText??e.lastUserMessage,result:n?.lastAssistantText??null,startedAt:c,completedAt:u,duration:d,dismissedAt:u,toolUsage:n?.toolUsage??{},touchedFiles:n?.touchedFiles??[],...i?{cancelled:!0}:{}};await j(p),this.broadcast({type:"session-history:update",entry:p})}dismissTab(t,e){let s=this.tabs.get(t);if(!s||"ready-for-review"!==s.cliState)return;let a=Date.now();this.applyCliState(t,s,"idle",{silent:!0}),s.dismissedAt=a,this.persistToLayout(s),this.broadcastUpdate(t,s,e),W(t,a).then(t=>{t&&this.broadcast({type:"session-history:update",entry:t})}).catch(t=>{N.warn("Failed to update session history dismissedAt: %s",t)})}ackNotificationInput(t,e){let s=this.tabs.get(t);s&&"needs-input"===s.cliState&&s.lastEvent?.name==="notification"&&s.lastEvent.seq===e&&(x.debug({tabId:t,seq:e},"ack: needs-input→busy"),this.applyCliState(t,s,"busy"),this.persistToLayout(s),this.broadcastUpdate(t,s))}async recoverUnknownIfPending(t){let e=this.tabs.get(t);if(!e)return{recovered:!1,reason:"no-entry"};if("unknown"!==e.cliState)return{recovered:!1,reason:"not-unknown"};let s=await (0,g.capturePaneAtWidth)(e.tmuxSession,120,50).catch(t=>(N.warn("recoverUnknownIfPending capture failed: %s",t),null));if(!s)return{recovered:!1,reason:"capture-failed"};let{options:a}=(0,b.parsePermissionOptions)(s);if(0===a.length)return{recovered:!1,reason:"no-options"};let i=Date.now(),n=(e.eventSeq??0)+1;return e.eventSeq=n,e.lastEvent={name:"notification",at:i,seq:n},x.debug({tabId:t,seq:n,options:a.length},"recover unknown→needs-input from pane capture"),this.applyCliState(t,e,"needs-input",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(t,e),{recovered:!0}}findTabIdBySession(t){for(let[e,s]of this.tabs)if(s.tmuxSession===t)return e}updateTabFromHook(t,e,s){let a=this.findTabIdBySession(t);if(!a)return void x.debug({tmuxSession:t,event:e,notificationType:s},"no tabId for session");let i=this.tabs.get(a);if(!i)return void x.debug({tabId:a,event:e,notificationType:s},"no entry for tab");if("pre-compact"===e||"post-compact"===e){x.debug({tabId:a,event:e},"compact hook"),this.setCompacting(a,i,"pre-compact"===e?Date.now():null);return}if("session-start"!==e&&"prompt-submit"!==e&&"notification"!==e&&"stop"!==e&&"interrupt"!==e)return void x.debug({tabId:a,event:e,notificationType:s},"unknown event, ignoring");if("notification"===e&&s&&!F.has(s))return void x.debug({tabId:a,event:e,notificationType:s},"non-input notification, skipping state transition");let n=Date.now(),l=(i.eventSeq??0)+1;i.eventSeq=l,i.lastEvent={name:e,at:n,seq:l},this.broadcast({type:"status:hook-event",tabId:a,event:i.lastEvent});let r=i.cliState,o="cancelled"===r?r:((t,e)=>{if(!t)return e;switch(t.name){case"session-start":case"interrupt":return"idle";case"prompt-submit":return"busy";case"notification":return"needs-input";case"stop":return"ready-for-review"}})(i.lastEvent,r);if(x.debug({tabId:a,event:e,notificationType:s,seq:l,prevState:r,newState:o,transition:r!==o},`processed ${e}${s?`(${s})`:""} ${r}→${o}`),r!==o&&(this.applyCliState(a,i,o),this.persistToLayout(i),this.broadcastUpdate(a,i)),"busy"!==o&&"needs-input"!==o||i.jsonlPath||this.resolveAndWatchJsonl(a,t).catch(()=>{}),"stop"===e&&i.jsonlPath){let t=()=>{q(i.jsonlPath).then(({currentAction:t,lastAssistantSnippet:e,reset:s})=>{let n=!1;s?(null!==i.currentAction&&(i.currentAction=null,n=!0),null!==i.lastAssistantMessage&&(i.lastAssistantMessage=null,n=!0)):(null!==t&&t.summary!==i.currentAction?.summary&&(i.currentAction=t,n=!0),null!==e&&i.lastAssistantMessage!==e&&(i.lastAssistantMessage=e,n=!0)),n&&this.broadcastUpdate(a,i)}).catch(()=>{})};t(),setTimeout(()=>{J.delete(i.jsonlPath),t()},500)}}setCompacting(t,e,s){let a=this.compactStaleTimers.get(t);if(a&&(clearTimeout(a),this.compactStaleTimers.delete(t)),(e.compactingSince??null)!==s&&(e.compactingSince=s,this.broadcastUpdate(t,e),null!==s)){let e=setTimeout(()=>{this.compactStaleTimers.delete(t);let e=this.tabs.get(t);e&&e.compactingSince===s&&(e.compactingSince=null,x.debug({tabId:t},"compact stale, auto-cleared"),this.broadcastUpdate(t,e))},6e4);this.compactStaleTimers.set(t,e)}}removeTab(t){let e=this.tabs.get(t);e&&("busy"===e.cliState||"needs-input"===e.cliState)&&e.lastUserMessage&&this.saveSessionHistory(t,e,e.busySince,!0).catch(t=>{N.warn("Failed to save cancelled session history: %s",t)}),this.stopJsonlWatch(t);let s=this.compactStaleTimers.get(t);s&&(clearTimeout(s),this.compactStaleTimers.delete(t)),this.tabs.delete(t),this.broadcastRemove(t)}reconcileWorkspaceTabs(t,e){let s=new Set(e);for(let[e,a]of this.tabs)a.workspaceId!==t||s.has(e)||this.removeTab(e)}removeWorkspaceTabs(t){for(let[e,s]of this.tabs)s.workspaceId===t&&this.removeTab(e)}registerTab(t,e){this.tabs.set(t,e),this.broadcastUpdate(t,e)}addClient(t){this.clients.add(t),this.lastRateLimits&&t.readyState===e.WebSocket.OPEN&&t.send(JSON.stringify({type:"rate-limits:update",data:this.lastRateLimits}))}removeClient(t){this.clients.delete(t)}persistToLayout(t){(0,a.updateTabCliStatus)(t.tmuxSession,t.cliState,t.dismissedAt).catch(()=>{})}broadcastUpdate(t,e,s){let a={type:"status:update",tabId:t,cliState:e.cliState,workspaceId:e.workspaceId,tabName:e.tabName,currentProcess:e.currentProcess,paneTitle:e.paneTitle,panelType:e.panelType,terminalStatus:e.terminalStatus,listeningPorts:e.listeningPorts,claudeSummary:e.claudeSummary,lastUserMessage:e.lastUserMessage,lastAssistantMessage:e.lastAssistantMessage,currentAction:e.currentAction,readyForReviewAt:e.readyForReviewAt,busySince:e.busySince,dismissedAt:e.dismissedAt,claudeSessionId:e.claudeSessionId,compactingSince:e.compactingSince,lastEvent:e.lastEvent,eventSeq:e.eventSeq};this.broadcast(a,s)}broadcastRemove(t){this.broadcast({type:"status:update",tabId:t,cliState:null,workspaceId:"",tabName:""})}static BACKPRESSURE_LIMIT=1048576;broadcast(t,s){let a=JSON.stringify(t);for(let t of this.clients)t!==s&&t.readyState===e.WebSocket.OPEN&&t.bufferedAmount<V.BACKPRESSURE_LIMIT&&t.send(a)}async resolveAndWatchJsonl(t,e){let s=this.tabs.get(t);if(!s||s.jsonlPath)return;let o=null,c=(0,a.parseSessionName)(e);if(c){let l=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(c.wsId));if(l){let a=(0,i.collectAllTabs)(l.root).find(t=>t.sessionName===e);if(a?.claudeSessionId){let t=await (0,n.getSessionCwd)(e);if(t){let e=`${(0,r.cwdToProjectPath)(t)}/${a.claudeSessionId}.jsonl`;try{await d.default.access(e),o=e}catch{}}}a?.lastUserMessage&&s.lastUserMessage!==a.lastUserMessage&&(s.lastUserMessage=a.lastUserMessage,this.broadcastUpdate(t,s))}}if(!o){let t=await (0,n.getSessionPanePid)(e);t&&(o=(await (0,l.detectActiveSession)(t)).jsonlPath)}o&&(s.jsonlPath=o,s.claudeSessionId=C(o)??s.claudeSessionId,"busy"!==s.cliState&&"needs-input"!==s.cliState||this.jsonlWatchers.has(t)||this.startJsonlWatch(t,o))}startJsonlWatch(t,e){let s=this.jsonlWatchers.get(t);if(s?.jsonlPath!==e){s&&this.stopJsonlWatch(t),N.debug("startJsonlWatch tabId=%s path=%s",t,e);try{let s=(0,u.watch)(e,()=>{let s=this.jsonlWatchers.get(t);s&&(s.debounceTimer&&clearTimeout(s.debounceTimer),s.debounceTimer=setTimeout(()=>{this.onJsonlFileChange(t,e).catch(()=>{})},100))});s.on("error",()=>{this.stopJsonlWatch(t)}),this.jsonlWatchers.set(t,{watcher:s,jsonlPath:e,debounceTimer:null})}catch{}}}stopJsonlWatch(t){let e=this.jsonlWatchers.get(t);if(e){N.debug("stopJsonlWatch tabId=%s",t),e.debounceTimer&&clearTimeout(e.debounceTimer);try{e.watcher.close()}catch{}this.jsonlWatchers.delete(t)}}async onJsonlFileChange(t,e){let s=this.tabs.get(t);if(!s||"busy"!==s.cliState&&"needs-input"!==s.cliState&&"unknown"!==s.cliState&&"ready-for-review"!==s.cliState)return void this.stopJsonlWatch(t);let{currentAction:a,lastAssistantSnippet:i,reset:n,interrupted:l,lastEntryTs:r}=await q(e);l&&"busy"===s.cliState&&null!==r&&r>(s.lastInterruptTs??0)&&r>(s.lastEvent?.at??0)&&(s.lastInterruptTs=r,x.debug({tabId:t,lastEntryTs:r},"synthetic interrupt from JSONL"),this.updateTabFromHook(s.tmuxSession,"interrupt"));let o=!1;n?(null!==s.currentAction&&(s.currentAction=null,o=!0),null!==s.lastAssistantMessage&&(s.lastAssistantMessage=null,o=!0)):(null!==a&&a.summary!==s.currentAction?.summary&&(s.currentAction=a,o=!0),null!==i&&s.lastAssistantMessage!==i&&(s.lastAssistantMessage=i,o=!0)),o&&this.broadcastUpdate(t,s)}shutdown(){for(let t of(this.stopPolling(),this.rateLimitsWatcher?.stop(),[...this.jsonlWatchers.keys()]))this.stopJsonlWatch(t);for(let t of this.clients)t.readyState===e.WebSocket.OPEN&&t.close(1001,"Server shutting down");this.clients.clear()}notifyLastUserMessage(t,e){let s=(0,a.parseSessionName)(t);if(!s)return;let i=this.tabs.get(s.tabId);i&&i.lastUserMessage!==e&&(i.lastUserMessage=e,this.broadcastUpdate(s.tabId,i))}async sendWebPush(t,e,a){let i=await (0,L.getSubscriptions)();if(0===i.length)return;let n=await (0,_.getVAPIDKeys)();E.default.setVapidDetails("mailto:noreply@purplemux.app",n.publicKey,n.privateKey);let l=e.lastUserMessage?.slice(0,100)||e.tabName||t,r=(await (0,s.getWorkspaces)()).workspaces.find(t=>t.id===e.workspaceId),o=JSON.stringify({title:"needs-input"===a?"Input Required":"Task Complete",body:l,tabId:t,workspaceId:e.workspaceId,claudeSessionId:e.claudeSessionId??null,workspaceName:r?.name??"",workspaceDir:r?.directories[0]??null});if(!(0,L.isAnyDeviceVisible)())for(let t of i)try{await E.default.sendNotification(t,o)}catch(s){let e=s.statusCode;(410===e||404===e)&&await (0,L.removeSubscription)(t.endpoint),N.warn("Web push send error: %s",e)}}}t.s(["getStatusManager",0,()=>{if(!K.__ptStatusManager){let t=new V;K.__ptStatusManager=t,(0,a.setLayoutReconciler)({reconcileWorkspaceTabs:(e,s)=>t.reconcileWorkspaceTabs(e,s),removeWorkspaceTabs:e=>t.removeWorkspaceTabs(e)})}return K.__ptStatusManager}],964759)}];
|
|
1
|
+
module.exports=[964759,796902,t=>{"use strict";t.i(478319);var e=t.i(220951),s=t.i(322429),a=t.i(825265),i=t.i(804767),n=t.i(459015),l=t.i(143511),r=t.i(746514),o=t.i(785128),c=t.i(840665),u=t.i(522734),d=t.i(924868),p=t.i(814747),h=t.i(25146),m=t.i(446786);let y=p.default.join(m.default.homedir(),".purplemux"),S=p.default.join(y,"statusline.sh"),f=p.default.join(y,"rate-limits.json"),g=`#!/bin/sh
|
|
2
|
+
PORT_FILE="$HOME/.purplemux/port"
|
|
3
|
+
TOKEN_FILE="$HOME/.purplemux/cli-token"
|
|
4
|
+
[ -f "$PORT_FILE" ] || exit 0
|
|
5
|
+
[ -f "$TOKEN_FILE" ] || exit 0
|
|
6
|
+
PORT=$(cat "$PORT_FILE")
|
|
7
|
+
TOKEN=$(cat "$TOKEN_FILE")
|
|
8
|
+
curl -sf --max-time 2 -X POST \\
|
|
9
|
+
-H 'Content-Type: application/json' \\
|
|
10
|
+
-H "x-pmux-token: \${TOKEN}" \\
|
|
11
|
+
--data-binary @- \\
|
|
12
|
+
"http://localhost:\${PORT}/api/status/statusline" 2>/dev/null || exit 0
|
|
13
|
+
`;t.s(["RATE_LIMITS_FILE",0,f,"STATUSLINE_SCRIPT_CONTENT",0,g,"STATUSLINE_SCRIPT_PATH",0,S],796902);let b=(0,h.createLogger)("rate-limits"),w=p.default.dirname(f),T=p.default.basename(f);var A=t.i(971780),v=t.i(443571);let P=(0,h.createLogger)("session-history"),k=p.default.join(m.default.homedir(),".purplemux"),M=p.default.join(k,"session-history.json"),I=globalThis;I.__purplemuxSessionHistoryLock||(I.__purplemuxSessionHistoryLock=Promise.resolve());let E=async t=>{let e,s=new Promise(t=>{e=t}),a=I.__purplemuxSessionHistoryLock;I.__purplemuxSessionHistoryLock=s,await a;try{return await t()}finally{e()}},j=()=>({version:1,entries:[]}),U=async()=>{let t;try{t=await d.default.readFile(M,"utf-8")}catch{return j()}try{return JSON.parse(t)}catch{P.warn("Failed to parse session-history.json, starting empty");try{await d.default.copyFile(M,M.replace(/\.json$/,".json.bak"))}catch{}return j()}},W=async t=>{let e=JSON.stringify(t.entries);if(I.__purplemuxSessionHistoryContentCache===e)return;let s=M+".tmp";try{await d.default.writeFile(s,JSON.stringify(t,null,2),{mode:384}),await d.default.rename(s,M)}catch(t){throw await d.default.unlink(s).catch(()=>{}),t}I.__purplemuxSessionHistoryContentCache=e},L=async t=>{await E(async()=>{let e=await U();e.entries.unshift(t),e.entries.length>200&&(e.entries=e.entries.slice(0,200)),await W(e)})},_=async(t,e)=>await E(async()=>{let s=await U(),a=s.entries.find(e=>e.tabId===t&&null===e.dismissedAt);return a?(a.dismissedAt=e,await W(s),a):null});var N=t.i(157469),R=t.i(75874),x=t.i(228448),C=t.i(44014);let F=(0,h.createLogger)("status"),J=(0,h.createLogger)("hooks"),O=t=>t?p.default.basename(t,".jsonl"):null,$=new Set(["permission_prompt","worker_permission_prompt"]),D=new Map,H=t=>{let e=t.name??"Tool",s=t.input??{};return{toolName:e,summary:(0,c.summarizeToolCall)(e,s)}},z=t=>{let e=!1;for(let s=t.length-1;s>=0;s--)try{let a=JSON.parse(t[s]);if(a.isSidechain)continue;if("user"===a.type){let t=a.message?.content;Array.isArray(t)&&t.some(t=>"tool_result"===t.type)||(e=!0);continue}if("assistant"!==a.type||!a.message?.content)continue;if(e)return{lastAssistantSnippet:null,currentAction:null,reset:!0};let i=a.message.content;if(!Array.isArray(i))continue;let n=null,l=null;for(let t=i.length-1;t>=0;t--){let e=i[t];if("tool_use"===e.type){l=H(e);break}if("text"===e.type&&e.text?.trim()){let t=e.text.trim();l={toolName:null,summary:t.length>200?t.slice(0,200)+"…":t};break}}for(let t=i.length-1;t>=0;t--)if("text"===i[t].type&&i[t].text?.trim()){let e=i[t].text.trim();n=e.length>200?e.slice(0,200)+"…":e;break}return{lastAssistantSnippet:n,currentAction:l,reset:!1}}catch{continue}return{lastAssistantSnippet:null,currentAction:null,reset:!1}},q=(t,e)=>{for(let s=t.length-1;s>=0;s--)try{let a=JSON.parse(t[s]);if(a.isSidechain)continue;let i=a.timestamp?new Date(a.timestamp).getTime():null;if("system"===a.type&&("stop_hook_summary"===a.subtype||"turn_duration"===a.subtype))return{matched:!0,idle:!0,stale:!1,needsStaleRecheck:!1,staleMs:0,lastEntryTs:i,interrupted:!1};if("assistant"===a.type){let t=a.message?.stop_reason;if(!t){let t=e>2e4;return{matched:!0,idle:t,stale:!0,needsStaleRecheck:!t,staleMs:2e4,lastEntryTs:i,interrupted:!1}}return{matched:!0,idle:"tool_use"!==t,stale:!1,needsStaleRecheck:!1,staleMs:0,lastEntryTs:i,interrupted:!1}}if("user"===a.type){let t=a.message?.content;if(Array.isArray(t)&&1===t.length&&"string"==typeof t[0]?.text&&t[0].text.startsWith(c.INTERRUPT_PREFIX))return{matched:!0,idle:!0,stale:!1,needsStaleRecheck:!1,staleMs:0,lastEntryTs:i,interrupted:!0};let s=e>9e4;return{matched:!0,idle:s,stale:!0,needsStaleRecheck:!s,staleMs:9e4,lastEntryTs:i,interrupted:!1}}}catch{continue}return{matched:!1,idle:e>9e4,stale:!0,needsStaleRecheck:e<=9e4,staleMs:9e4,lastEntryTs:null,interrupted:!1}},K=async t=>{try{let e=await d.default.stat(t);if(0===e.size)return{idle:!0,stale:!1,lastAssistantSnippet:null,currentAction:null,reset:!1,lastEntryTs:null,staleMs:0,interrupted:!1};let s=D.get(t);if(s&&s.mtimeMs===e.mtimeMs){if(D.delete(t),D.set(t,s),s.idle)return{idle:!0,stale:s.stale,lastAssistantSnippet:s.lastAssistantSnippet,currentAction:s.currentAction,reset:s.reset,lastEntryTs:s.lastEntryTs,staleMs:s.staleMs,interrupted:s.interrupted};if(s.needsStaleRecheck)return{idle:Date.now()-e.mtimeMs>s.staleMs,stale:!0,lastAssistantSnippet:s.lastAssistantSnippet,currentAction:s.currentAction,reset:s.reset,lastEntryTs:s.lastEntryTs,staleMs:s.staleMs,interrupted:s.interrupted};return{idle:!1,stale:!1,lastAssistantSnippet:s.lastAssistantSnippet,currentAction:s.currentAction,reset:s.reset,lastEntryTs:s.lastEntryTs,staleMs:s.staleMs,interrupted:s.interrupted}}let a=await d.default.open(t,"r");try{let s=Date.now()-e.mtimeMs,i=Math.min(e.size,8192),n=Buffer.alloc(i);await a.read(n,0,i,e.size-i);let l=n.toString("utf-8").split("\n").filter(t=>t.trim()),r=q(l,s),o=z(l);if(!r.matched&&e.size>8192){let t=Math.min(e.size,131072),i=Buffer.alloc(t);await a.read(i,0,t,e.size-t);let n=i.toString("utf-8").split("\n").filter(t=>t.trim());r=q(n,s),o.lastAssistantSnippet||o.currentAction||(o=z(n))}return D.size>=256&&D.delete(D.keys().next().value),D.set(t,{mtimeMs:e.mtimeMs,idle:r.idle,stale:r.stale,needsStaleRecheck:r.needsStaleRecheck,staleMs:r.staleMs,lastAssistantSnippet:o.lastAssistantSnippet,currentAction:o.currentAction,reset:o.reset,lastEntryTs:r.lastEntryTs,interrupted:r.interrupted}),{idle:r.idle,stale:r.stale,lastAssistantSnippet:o.lastAssistantSnippet,currentAction:o.currentAction,reset:o.reset,lastEntryTs:r.lastEntryTs,staleMs:r.staleMs,interrupted:r.interrupted}}finally{await a.close()}}catch{return{idle:!1,stale:!1,lastAssistantSnippet:null,currentAction:null,reset:!1,lastEntryTs:null,staleMs:0,interrupted:!1}}},B=async t=>{let e={toolUsage:{},touchedFiles:[],lastAssistantText:null,lastUserText:null,firstUserTs:null,lastAssistantTs:null,turnDurationMs:null};try{let s=await d.default.stat(t);if(0===s.size)return e;let a=await d.default.open(t,"r");try{let t=Math.min(s.size,131072),e=Buffer.alloc(t);await a.read(e,0,t,s.size-t);let i=e.toString("utf-8").split("\n").filter(t=>t.trim()),n={},l=new Set,r=null,o=null,c=null,u=null,d=null;for(let t=i.length-1;t>=0;t--)try{let e=JSON.parse(i[t]);if("file-history-snapshot"===e.type)break;if(e.isSidechain)continue;"system"!==e.type||"turn_duration"!==e.subtype||"number"!=typeof e.durationMs||d||(d=e.durationMs);let s=e.timestamp?new Date(e.timestamp).getTime():null;if("user"===e.type&&(s&&(u=s),!o&&Array.isArray(e.message?.content))){for(let t of e.message.content)if("text"===t.type&&t.text){o=t.text;break}}if("assistant"===e.type&&(s&&!c&&(c=s),Array.isArray(e.message?.content))){let t=null;for(let s of e.message.content)"tool_use"===s.type&&s.name&&(n[s.name]=(n[s.name]??0)+1,("Edit"===s.name||"Write"===s.name)&&s.input?.file_path&&l.add(String(s.input.file_path))),"text"===s.type&&s.text&&(t=s.text);!r&&t&&(r=t)}}catch{continue}return{toolUsage:n,touchedFiles:[...l],lastAssistantText:r,lastUserText:o,firstUserTs:u,lastAssistantTs:c,turnDurationMs:d}}finally{await a.close()}}catch{return e}},V=/^[✳⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏⠐⠈]\s+/,X=t=>t&&V.test(t)&&t.replace(V,"").trim()||null,G=globalThis;class Q{tabs=new Map;pollingTimer=null;currentInterval=0;clients=new Set;initialized=!1;rateLimitsWatcher=null;lastRateLimits=null;jsonlWatchers=new Map;compactStaleTimers=new Map;async init(){if(!this.initialized){var t;let e,s,a,i,n,l;this.initialized=!0,await this.scanAll(),this.startPolling(),this.rateLimitsWatcher=(t=t=>{this.lastRateLimits=t,this.broadcast({type:"rate-limits:update",data:t})},e=null,s=null,a=0,i=async()=>{try{let e=await d.default.readFile(f,"utf-8"),s=JSON.parse(e);s.ts&&s.ts!==a&&(a=s.ts,t(s))}catch{}},n=()=>{i();try{(e=u.default.watch(w,(t,e)=>{e===T&&(s&&clearTimeout(s),s=setTimeout(i,500))})).on("error",()=>{b.debug(`${w} watch error, retrying...`),l(),setTimeout(n,5e3)})}catch{b.debug(`${w} not available yet, retrying...`),setTimeout(n,5e3)}},{start:n,stop:l=()=>{s&&(clearTimeout(s),s=null),e&&(e.close(),e=null)}}),this.rateLimitsWatcher.start()}}async scanAll(){let{workspaces:t}=await (0,s.getWorkspaces)(),e=await (0,n.getAllPanesInfo)();for(let t of[...this.jsonlWatchers.keys()])this.stopJsonlWatch(t);for(let s of(this.tabs.clear(),t)){let t=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(t)for(let a of(0,i.collectAllTabs)(t.root)){let t=e.get(a.sessionName),i=await this.readTabMetadata(t),n=a.cliState??"idle",l="busy"===n?"unknown":n,{terminalStatus:r,listeningPorts:c}="claude-code"===a.panelType?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(t),u=t?.command,d=t?`${t.command}|${t.path}`:void 0,p="needs-input"===l?{name:"notification",at:Date.now(),seq:0}:null;this.tabs.set(a.id,{cliState:l,workspaceId:s.id,tabName:a.name||(d?(0,o.formatTabTitle)(d):""),currentProcess:u,paneTitle:d,tmuxSession:a.sessionName,panelType:a.panelType,terminalStatus:r,listeningPorts:c,claudeSummary:a.claudeSummary,lastUserMessage:a.lastUserMessage,lastAssistantMessage:i.lastAssistantSnippet,currentAction:i.currentAction,readyForReviewAt:"ready-for-review"===l?Date.now():null,busySince:null,dismissedAt:a.dismissedAt??null,claudeSessionId:O(i.jsonlPath)??a.claudeSessionId??null,jsonlPath:i.jsonlPath,lastEvent:p,eventSeq:0}),("needs-input"===l||"unknown"===l)&&i.jsonlPath&&this.startJsonlWatch(a.id,i.jsonlPath),"unknown"===l&&this.resolveUnknown(a.id).catch(t=>F.warn("resolveUnknown failed: %s",t))}}}async resolveUnknown(t){let e=this.tabs.get(t);if(!e||"unknown"!==e.cliState)return;let s=(await (0,n.getAllPanesInfo)()).get(e.tmuxSession),a=s?.pid?await (0,l.getChildPids)(s.pid):[];if(!(s?.pid&&await (0,l.isClaudeRunning)(s.pid,a))){this.applyCliState(t,e,"idle",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(t,e);return}if(e.jsonlPath){let{idle:s,stale:a,lastAssistantSnippet:i}=await K(e.jsonlPath);if(s&&!a&&i){this.applyCliState(t,e,"ready-for-review",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(t,e);return}}}async readTabMetadata(t){let e={lastAssistantSnippet:null,currentAction:null,jsonlPath:null};if(!t||!t.pid)return e;let s=await (0,l.getChildPids)(t.pid);if(!await (0,l.isClaudeRunning)(t.pid,s))return e;let a=await (0,l.detectActiveSession)(t.pid,s);if("running"!==a.status||!a.jsonlPath)return{lastAssistantSnippet:null,currentAction:null,jsonlPath:a.jsonlPath??null};let{lastAssistantSnippet:i,currentAction:n}=await K(a.jsonlPath);return{lastAssistantSnippet:i,currentAction:n,jsonlPath:a.jsonlPath}}async detectTerminalStatus(t){if(!t||!t.pid)return{terminalStatus:"idle",listeningPorts:[]};let e=await (0,n.getListeningPorts)(t.pid);return e.length>0?{terminalStatus:"server",listeningPorts:e}:{terminalStatus:n.SAFE_SHELLS.has(t.command)?"idle":"running",listeningPorts:[]}}getPollingInterval(){let t=this.tabs.size;return t>=21?6e4:t>=11?45e3:3e4}async rescan(){await this.scanAll()}startPolling(){this.stopPolling(),this.currentInterval=this.getPollingInterval(),this.pollingTimer=setInterval(()=>{this.poll().catch(t=>{F.error({err:t},"Polling error")})},this.currentInterval)}stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null,this.currentInterval=0)}async poll(){let{workspaces:t}=await (0,s.getWorkspaces)(),e=await (0,n.getAllPanesInfo)(),r=new Set,c=new Set(this.tabs.keys()),u=Date.now();for(let s of t){let t=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(s.id));if(t)for(let c of(0,i.collectAllTabs)(t.root)){r.add(c.id);let t=this.tabs.get(c.id),i=e.get(c.sessionName),{terminalStatus:d,listeningPorts:p}="claude-code"===c.panelType?{terminalStatus:"idle",listeningPorts:[]}:await this.detectTerminalStatus(i),h=i?.command,m=i?`${i.command}|${i.path}`:void 0;if(!t){let t=c.cliState??"idle",e="busy"===t?"unknown":t,a=await this.readTabMetadata(i),n="needs-input"===e?{name:"notification",at:Date.now(),seq:0}:null,l={cliState:e,workspaceId:s.id,tabName:c.name||(m?(0,o.formatTabTitle)(m):""),currentProcess:h,paneTitle:m,tmuxSession:c.sessionName,panelType:c.panelType,terminalStatus:d,listeningPorts:p,claudeSummary:c.claudeSummary,lastUserMessage:c.lastUserMessage,lastAssistantMessage:a.lastAssistantSnippet,currentAction:a.currentAction,claudeSessionId:O(a.jsonlPath)??c.claudeSessionId??null,jsonlPath:a.jsonlPath,lastEvent:n,eventSeq:0};this.tabs.set(c.id,l),this.persistToLayout(l),this.broadcastUpdate(c.id,l),"unknown"===e&&this.resolveUnknown(c.id).catch(t=>F.warn("resolveUnknown failed: %s",t));continue}let y=t.currentProcess!==h,S=t.lastUserMessage!==c.lastUserMessage,f=t.panelType!==c.panelType,g=await this.readTabMetadata(i);t.tabName=c.name||(m?(0,o.formatTabTitle)(m):""),t.currentProcess=h,t.paneTitle=m,t.workspaceId=s.id,t.panelType=c.panelType,t.claudeSessionId=O(g.jsonlPath)??c.claudeSessionId??null,t.jsonlPath=g.jsonlPath??t.jsonlPath,t.lastUserMessage=c.lastUserMessage,y&&(t.processRetries=3);let b=!y&&(t.processRetries??0)>0;b&&(t.processRetries=t.processRetries-1);let w=t.listeningPorts,T=w?.length!==p.length||p.some((t,e)=>w[e]!==t),A=t.terminalStatus!==d||T;A&&(t.terminalStatus=d,t.listeningPorts=p);let v=!1;if("busy"===t.cliState||"needs-input"===t.cliState){let e=X(await (0,n.getPaneTitle)(c.sessionName));e&&e!==t.claudeSummary&&(t.claudeSummary=e,v=!0,(0,a.updateTabClaudeSummary)(c.sessionName,e).catch(()=>{}))}else t.claudeSummary!==c.claudeSummary&&(t.claudeSummary=c.claudeSummary,v=!0);if("busy"===t.cliState&&t.lastEvent&&u-t.lastEvent.at>6e5){let e=i?.pid?await (0,l.getChildPids)(i.pid):[];if(!(i?.pid&&await (0,l.isClaudeRunning)(i.pid,e))){F.info({tabId:c.id},"busy stuck — Claude process gone, forcing idle"),this.applyCliState(c.id,t,"idle",{silent:!0}),this.persistToLayout(t),this.broadcastUpdate(c.id,t);continue}}(A||y||b||S||f||v)&&this.broadcastUpdate(c.id,t)}}for(let t of c)!r.has(t)&&this.tabs.has(t)&&(this.stopJsonlWatch(t),this.tabs.delete(t),this.broadcastRemove(t));let d=this.getPollingInterval();this.pollingTimer&&d!==this.currentInterval&&this.startPolling()}getAllForClient(){let t={};for(let[e,s]of this.tabs)t[e]={cliState:s.cliState,workspaceId:s.workspaceId,tabName:s.tabName,currentProcess:s.currentProcess,paneTitle:s.paneTitle,panelType:s.panelType,terminalStatus:s.terminalStatus,listeningPorts:s.listeningPorts,claudeSummary:s.claudeSummary,lastUserMessage:s.lastUserMessage,lastAssistantMessage:s.lastAssistantMessage,currentAction:s.currentAction,readyForReviewAt:s.readyForReviewAt,busySince:s.busySince,dismissedAt:s.dismissedAt,claudeSessionId:s.claudeSessionId,lastEvent:s.lastEvent,eventSeq:s.eventSeq};return t}applyCliState(t,e,s,a={}){if(e.cliState===s)return;let i=e.busySince;e.cliState=s,e.readyForReviewAt="ready-for-review"===s?Date.now():null,e.busySince="busy"===s?Date.now():null,"busy"===s&&(e.dismissedAt=null),"ready-for-review"===s&&e.jsonlPath&&new Promise(t=>setTimeout(t,500)).then(()=>this.saveSessionHistory(t,e,i,!1)).catch(t=>{F.warn("Failed to save session history: %s",t)}),"ready-for-review"!==s||a.silent||this.sendWebPush(t,e,"review").catch(t=>{F.warn("Web push failed: %s",t)}),"needs-input"!==s||a.silent||this.sendWebPush(t,e,"needs-input").catch(t=>{F.warn("Web push failed: %s",t)});let n=("busy"===s||"needs-input"===s)&&e.jsonlPath,l="ready-for-review"===s&&this.jsonlWatchers.has(t);n&&!this.jsonlWatchers.has(t)?this.startJsonlWatch(t,e.jsonlPath):!n&&!l&&this.jsonlWatchers.has(t)&&this.stopJsonlWatch(t)}async saveSessionHistory(t,e,a,i){if(!e.lastUserMessage)return;let n=e.jsonlPath?await B(e.jsonlPath):null,{workspaces:l}=await (0,s.getWorkspaces)(),r=l.find(t=>t.id===e.workspaceId),o=Date.now(),c=n?.firstUserTs??a??o,u=i?o:n?.lastAssistantTs??o,d=i?u-c:n?.turnDurationMs??u-c,p={id:(0,C.nanoid)(),workspaceId:e.workspaceId,workspaceName:r?.name??e.workspaceId,workspaceDir:r?.directories[0]??null,tabId:t,claudeSessionId:e.claudeSessionId??null,prompt:n?.lastUserText??e.lastUserMessage,result:n?.lastAssistantText??null,startedAt:c,completedAt:u,duration:d,dismissedAt:u,toolUsage:n?.toolUsage??{},touchedFiles:n?.touchedFiles??[],...i?{cancelled:!0}:{}};await L(p),this.broadcast({type:"session-history:update",entry:p})}dismissTab(t,e){let s=this.tabs.get(t);if(!s||"ready-for-review"!==s.cliState)return;let a=Date.now();this.applyCliState(t,s,"idle",{silent:!0}),s.dismissedAt=a,this.persistToLayout(s),this.broadcastUpdate(t,s,e),_(t,a).then(t=>{t&&this.broadcast({type:"session-history:update",entry:t})}).catch(t=>{F.warn("Failed to update session history dismissedAt: %s",t)})}ackNotificationInput(t,e){let s=this.tabs.get(t);s&&"needs-input"===s.cliState&&s.lastEvent?.name==="notification"&&s.lastEvent.seq===e&&(J.debug({tabId:t,seq:e},"ack: needs-input→busy"),this.applyCliState(t,s,"busy"),this.persistToLayout(s),this.broadcastUpdate(t,s))}async recoverUnknownIfPending(t){let e=this.tabs.get(t);if(!e)return{recovered:!1,reason:"no-entry"};if("unknown"!==e.cliState)return{recovered:!1,reason:"not-unknown"};let s=await (0,A.capturePaneAtWidth)(e.tmuxSession,120,50).catch(t=>(F.warn("recoverUnknownIfPending capture failed: %s",t),null));if(!s)return{recovered:!1,reason:"capture-failed"};let{options:a}=(0,v.parsePermissionOptions)(s);if(0===a.length)return{recovered:!1,reason:"no-options"};let i=Date.now(),n=(e.eventSeq??0)+1;return e.eventSeq=n,e.lastEvent={name:"notification",at:i,seq:n},J.debug({tabId:t,seq:n,options:a.length},"recover unknown→needs-input from pane capture"),this.applyCliState(t,e,"needs-input",{silent:!0}),this.persistToLayout(e),this.broadcastUpdate(t,e),{recovered:!0}}findTabIdBySession(t){for(let[e,s]of this.tabs)if(s.tmuxSession===t)return e}updateTabFromHook(t,e,s){let a=this.findTabIdBySession(t);if(!a)return void J.debug({tmuxSession:t,event:e,notificationType:s},"no tabId for session");let i=this.tabs.get(a);if(!i)return void J.debug({tabId:a,event:e,notificationType:s},"no entry for tab");if("pre-compact"===e||"post-compact"===e){J.debug({tabId:a,event:e},"compact hook"),this.setCompacting(a,i,"pre-compact"===e?Date.now():null);return}if("session-start"!==e&&"prompt-submit"!==e&&"notification"!==e&&"stop"!==e&&"interrupt"!==e)return void J.debug({tabId:a,event:e,notificationType:s},"unknown event, ignoring");if("notification"===e&&s&&!$.has(s))return void J.debug({tabId:a,event:e,notificationType:s},"non-input notification, skipping state transition");let n=Date.now(),l=(i.eventSeq??0)+1;i.eventSeq=l,i.lastEvent={name:e,at:n,seq:l},this.broadcast({type:"status:hook-event",tabId:a,event:i.lastEvent});let r=i.cliState,o="cancelled"===r?r:((t,e)=>{if(!t)return e;switch(t.name){case"session-start":case"interrupt":return"idle";case"prompt-submit":return"busy";case"notification":return"needs-input";case"stop":return"ready-for-review"}})(i.lastEvent,r);if(J.debug({tabId:a,event:e,notificationType:s,seq:l,prevState:r,newState:o,transition:r!==o},`processed ${e}${s?`(${s})`:""} ${r}→${o}`),r!==o&&(this.applyCliState(a,i,o),this.persistToLayout(i),this.broadcastUpdate(a,i)),"busy"!==o&&"needs-input"!==o||i.jsonlPath||this.resolveAndWatchJsonl(a,t).catch(()=>{}),"stop"===e&&i.jsonlPath){let t=()=>{K(i.jsonlPath).then(({currentAction:t,lastAssistantSnippet:e,reset:s})=>{let n=!1;s?(null!==i.currentAction&&(i.currentAction=null,n=!0),null!==i.lastAssistantMessage&&(i.lastAssistantMessage=null,n=!0)):(null!==t&&t.summary!==i.currentAction?.summary&&(i.currentAction=t,n=!0),null!==e&&i.lastAssistantMessage!==e&&(i.lastAssistantMessage=e,n=!0)),n&&this.broadcastUpdate(a,i)}).catch(()=>{})};t(),setTimeout(()=>{D.delete(i.jsonlPath),t()},500)}}setCompacting(t,e,s){let a=this.compactStaleTimers.get(t);if(a&&(clearTimeout(a),this.compactStaleTimers.delete(t)),(e.compactingSince??null)!==s&&(e.compactingSince=s,this.broadcastUpdate(t,e),null!==s)){let e=setTimeout(()=>{this.compactStaleTimers.delete(t);let e=this.tabs.get(t);e&&e.compactingSince===s&&(e.compactingSince=null,J.debug({tabId:t},"compact stale, auto-cleared"),this.broadcastUpdate(t,e))},6e4);this.compactStaleTimers.set(t,e)}}removeTab(t){let e=this.tabs.get(t);e&&("busy"===e.cliState||"needs-input"===e.cliState)&&e.lastUserMessage&&this.saveSessionHistory(t,e,e.busySince,!0).catch(t=>{F.warn("Failed to save cancelled session history: %s",t)}),this.stopJsonlWatch(t);let s=this.compactStaleTimers.get(t);s&&(clearTimeout(s),this.compactStaleTimers.delete(t)),this.tabs.delete(t),this.broadcastRemove(t)}reconcileWorkspaceTabs(t,e){let s=new Set(e);for(let[e,a]of this.tabs)a.workspaceId!==t||s.has(e)||this.removeTab(e)}removeWorkspaceTabs(t){for(let[e,s]of this.tabs)s.workspaceId===t&&this.removeTab(e)}registerTab(t,e){this.tabs.set(t,e),this.broadcastUpdate(t,e)}addClient(t){this.clients.add(t),this.lastRateLimits&&t.readyState===e.WebSocket.OPEN&&t.send(JSON.stringify({type:"rate-limits:update",data:this.lastRateLimits}))}removeClient(t){this.clients.delete(t)}persistToLayout(t){(0,a.updateTabCliStatus)(t.tmuxSession,t.cliState,t.dismissedAt).catch(()=>{})}broadcastUpdate(t,e,s){let a={type:"status:update",tabId:t,cliState:e.cliState,workspaceId:e.workspaceId,tabName:e.tabName,currentProcess:e.currentProcess,paneTitle:e.paneTitle,panelType:e.panelType,terminalStatus:e.terminalStatus,listeningPorts:e.listeningPorts,claudeSummary:e.claudeSummary,lastUserMessage:e.lastUserMessage,lastAssistantMessage:e.lastAssistantMessage,currentAction:e.currentAction,readyForReviewAt:e.readyForReviewAt,busySince:e.busySince,dismissedAt:e.dismissedAt,claudeSessionId:e.claudeSessionId,compactingSince:e.compactingSince,lastEvent:e.lastEvent,eventSeq:e.eventSeq};this.broadcast(a,s)}broadcastRemove(t){this.broadcast({type:"status:update",tabId:t,cliState:null,workspaceId:"",tabName:""})}static BACKPRESSURE_LIMIT=1048576;broadcast(t,s){let a=JSON.stringify(t);for(let t of this.clients)t!==s&&t.readyState===e.WebSocket.OPEN&&t.bufferedAmount<Q.BACKPRESSURE_LIMIT&&t.send(a)}async resolveAndWatchJsonl(t,e){let s=this.tabs.get(t);if(!s||s.jsonlPath)return;let o=null,c=(0,a.parseSessionName)(e);if(c){let l=await (0,a.readLayoutFile)((0,a.resolveLayoutFile)(c.wsId));if(l){let a=(0,i.collectAllTabs)(l.root).find(t=>t.sessionName===e);if(a?.claudeSessionId){let t=await (0,n.getSessionCwd)(e);if(t){let e=`${(0,r.cwdToProjectPath)(t)}/${a.claudeSessionId}.jsonl`;try{await d.default.access(e),o=e}catch{}}}a?.lastUserMessage&&s.lastUserMessage!==a.lastUserMessage&&(s.lastUserMessage=a.lastUserMessage,this.broadcastUpdate(t,s))}}if(!o){let t=await (0,n.getSessionPanePid)(e);t&&(o=(await (0,l.detectActiveSession)(t)).jsonlPath)}o&&(s.jsonlPath=o,s.claudeSessionId=O(o)??s.claudeSessionId,"busy"!==s.cliState&&"needs-input"!==s.cliState||this.jsonlWatchers.has(t)||this.startJsonlWatch(t,o))}startJsonlWatch(t,e){let s=this.jsonlWatchers.get(t);if(s?.jsonlPath!==e){s&&this.stopJsonlWatch(t),F.debug("startJsonlWatch tabId=%s path=%s",t,e);try{let s=(0,u.watch)(e,()=>{let s=this.jsonlWatchers.get(t);s&&(s.debounceTimer&&clearTimeout(s.debounceTimer),s.debounceTimer=setTimeout(()=>{this.onJsonlFileChange(t,e).catch(()=>{})},100))});s.on("error",()=>{this.stopJsonlWatch(t)}),this.jsonlWatchers.set(t,{watcher:s,jsonlPath:e,debounceTimer:null})}catch{}}}stopJsonlWatch(t){let e=this.jsonlWatchers.get(t);if(e){F.debug("stopJsonlWatch tabId=%s",t),e.debounceTimer&&clearTimeout(e.debounceTimer);try{e.watcher.close()}catch{}this.jsonlWatchers.delete(t)}}async onJsonlFileChange(t,e){let s=this.tabs.get(t);if(!s||"busy"!==s.cliState&&"needs-input"!==s.cliState&&"unknown"!==s.cliState&&"ready-for-review"!==s.cliState)return void this.stopJsonlWatch(t);let{currentAction:a,lastAssistantSnippet:i,reset:n,interrupted:l,lastEntryTs:r}=await K(e);l&&"busy"===s.cliState&&null!==r&&r>(s.lastInterruptTs??0)&&r>(s.lastEvent?.at??0)&&(s.lastInterruptTs=r,J.debug({tabId:t,lastEntryTs:r},"synthetic interrupt from JSONL"),this.updateTabFromHook(s.tmuxSession,"interrupt"));let o=!1;n?(null!==s.currentAction&&(s.currentAction=null,o=!0),null!==s.lastAssistantMessage&&(s.lastAssistantMessage=null,o=!0)):(null!==a&&a.summary!==s.currentAction?.summary&&(s.currentAction=a,o=!0),null!==i&&s.lastAssistantMessage!==i&&(s.lastAssistantMessage=i,o=!0)),o&&this.broadcastUpdate(t,s)}shutdown(){for(let t of(this.stopPolling(),this.rateLimitsWatcher?.stop(),[...this.jsonlWatchers.keys()]))this.stopJsonlWatch(t);for(let t of this.clients)t.readyState===e.WebSocket.OPEN&&t.close(1001,"Server shutting down");this.clients.clear()}notifyLastUserMessage(t,e){let s=(0,a.parseSessionName)(t);if(!s)return;let i=this.tabs.get(s.tabId);i&&i.lastUserMessage!==e&&(i.lastUserMessage=e,this.broadcastUpdate(s.tabId,i))}async sendWebPush(t,e,a){let i=await (0,R.getSubscriptions)();if(0===i.length)return;let n=await (0,x.getVAPIDKeys)();N.default.setVapidDetails("mailto:noreply@purplemux.app",n.publicKey,n.privateKey);let l=e.lastUserMessage?.slice(0,100)||e.tabName||t,r=(await (0,s.getWorkspaces)()).workspaces.find(t=>t.id===e.workspaceId),o=JSON.stringify({title:"needs-input"===a?"Input Required":"Task Complete",body:l,tabId:t,workspaceId:e.workspaceId,claudeSessionId:e.claudeSessionId??null,workspaceName:r?.name??"",workspaceDir:r?.directories[0]??null});if(!(0,R.isAnyDeviceVisible)())for(let t of i)try{await N.default.sendNotification(t,o)}catch(s){let e=s.statusCode;(410===e||404===e)&&await (0,R.removeSubscription)(t.endpoint),F.warn("Web push send error: %s",e)}}}t.s(["getStatusManager",0,()=>{if(!G.__ptStatusManager){let t=new Q;G.__ptStatusManager=t,(0,a.setLayoutReconciler)({reconcileWorkspaceTabs:(e,s)=>t.reconcileWorkspaceTabs(e,s),removeWorkspaceTabs:e=>t.removeWorkspaceTabs(e)})}return G.__ptStatusManager}],964759)}];
|
|
2
14
|
|
|
3
15
|
//# sourceMappingURL=src_lib_status-manager_ts_003hlhy._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[522734,(a,b,c)=>{b.exports=a.x("fs",()=>require("fs"))},666680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},688947,(a,b,c)=>{b.exports=a.x("stream",()=>require("stream"))},406461,(a,b,c)=>{b.exports=a.x("zlib",()=>require("zlib"))},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}()},986013,a=>{"use strict";let b,c;var d=a.i(666680);a.s(["nanoid",0,function(a=21){var e;e=a|=0,!b||b.length<e?(b=Buffer.allocUnsafe(128*e),d.webcrypto.getRandomValues(b),c=0):c+e>b.length&&(d.webcrypto.getRandomValues(b),c=0),c+=e;let f="";for(let d=c-a;d<c;d++)f+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&b[d]];return f}],986013)},144784,a=>{"use strict";let b=a=>"pane"===a.type?[a]:[...b(a.children[0]),...b(a.children[1])],c=(a,b)=>"pane"===a.type?a.id===b?a:null:c(a.children[0],b)||c(a.children[1],b),d=a=>"pane"===a.type?a.id:d(a.children[0]),e=a=>"pane"===a.type?a.id:e(a.children[1]),f=(a,b,c)=>"pane"===a.type?a.id===b?c:a:{...a,children:[f(a.children[0],b,c),f(a.children[1],b,c)]},g=(a,b)=>{if("pane"===a.type)return null;let[c,d]=a.children;if("pane"===c.type&&c.id===b)return d;if("pane"===d.type&&d.id===b)return c;let e=g(c,b);if(e)return{...a,children:[e,d]};let f=g(d,b);return f?{...a,children:[c,f]}:null},h=(a,b)=>{if("pane"===a.type)return null;let[c,f]=a.children;return"pane"===c.type&&c.id===b?d(f):"pane"===f.type&&f.id===b?e(c):h(c,b)||h(f,b)},i=(a,b,c)=>{if("split"!==a.type)return a;if(0===b.length)return{...a,ratio:c};let[d,...e]=b,f=[a.children[0],a.children[1]];return f[d]=i(a.children[d],e,c),{...a,children:f}},j=(a,b)=>"pane"===a.type||a.orientation!==b?1:j(a.children[0],b)+j(a.children[1],b),k=a=>{if("pane"===a.type)return!0;let b=j(a.children[0],a.orientation),c=j(a.children[1],a.orientation);return!(Math.abs(a.ratio-b/(b+c)*100)>1)&&k(a.children[0])&&k(a.children[1])},l=a=>{if("pane"===a.type)return a;let b=j(a.children[0],a.orientation),c=Math.round(b/(b+j(a.children[1],a.orientation))*1e4)/100;return{...a,ratio:c,children:[l(a.children[0]),l(a.children[1])]}},m=(a,b,c)=>{if("pane"===a.type)return a.id===b?c(a):a;let d=m(a.children[0],b,c);if(d!==a.children[0])return{...a,children:[d,a.children[1]]};let e=m(a.children[1],b,c);return e!==a.children[1]?{...a,children:[a.children[0],e]}:a};a.s(["collectAllTabs",0,a=>b(a).flatMap(a=>a.tabs),"collectPanes",0,b,"equalizeNode",0,l,"findAdjacentPaneInDirection",0,(a,b,c)=>{let f=[],g=a=>{if("pane"===a.type)return a.id===b;for(let b=0;b<2;b++){if(f.push({node:a,childIndex:b}),g(a.children[b]))return!0;f.pop()}return!1};if(!g(a))return null;let h="left"===c||"right"===c?"horizontal":"vertical",i=+("left"===c||"up"===c);for(let a=f.length-1;a>=0;a--){let{node:b,childIndex:g}=f[a];if("split"===b.type&&b.orientation===h&&g===i){let a=b.children[1-i];return"left"===c||"up"===c?e(a):d(a)}}return null},"findPane",0,c,"findResizeTarget",0,(a,b,c)=>{let d=[],e=a=>{if("pane"===a.type)return a.id===b;for(let b=0;b<2;b++){if(d.push({node:a,childIndex:b}),e(a.children[b]))return!0;d.pop()}return!1};if(!e(a))return null;let f="left"===c||"right"===c?"horizontal":"vertical",g=+("right"!==c&&"down"!==c),h="right"===c||"down"===c;for(let a=d.length-1;a>=0;a--){let{node:b,childIndex:c}=d[a];if("split"===b.type&&b.orientation===f&&c===g)return{path:d.slice(0,a).map(a=>a.childIndex),currentRatio:b.ratio,increase:h}}return null},"getFirstPaneId",0,d,"isEqualized",0,k,"removePaneWithFocus",0,(a,c)=>{let d=h(a.root,c),e=g(a.root,c);e&&(a.root=e),a.activePaneId===c&&(a.activePaneId=d??b(a.root)[0]?.id??null)},"replacePane",0,f,"updatePaneInTree",0,m,"updateRatioAtPath",0,i])},206456,a=>{"use strict";let b=new Set(["zsh","bash","fish","sh","-zsh","-bash","-fish","-sh"]),c=a=>{if("~"===a||"/"===a)return a;let b=a.replace(/\/$/,"").split("/");return b[b.length-1]||a},d=a=>{let b=a.trim();if(!b)return null;let c=b.indexOf("|");return c>0?b.slice(0,c):null};a.s(["formatTabTitle",0,a=>{let e=a.trim();if(!e)return"";let f=d(a);if(null!==f){let a=e.slice(e.indexOf("|")+1);return b.has(f)?c(a):f}let g=e.match(/@[^:]+:\s*(.*)/);if(g)return c(g[1].trim());if(e.startsWith("/")||e.startsWith("~"))return c(e);let h=e.split(/\s+/)[0];return b.has(h)?"":h||""},"isShellProcess",0,a=>{let c=d(a);return null!==c&&b.has(c)},"parseCurrentCommand",0,d])},4873,a=>{"use strict";var b=a.i(127669);let c=a=>{let b,c=new Set,d=(a,d)=>{let e="function"==typeof a?a(b):a;if(!Object.is(e,b)){let a=b;b=(null!=d?d:"object"!=typeof e||null===e)?e:Object.assign({},b,e),c.forEach(c=>c(b,a))}},e=()=>b,f={setState:d,getState:e,getInitialState:()=>g,subscribe:a=>(c.add(a),()=>c.delete(a))},g=b=a(d,e,f);return f},d=a=>{let d=a?c(a):c,e=a=>(function(a,c=a=>a){let d=b.default.useSyncExternalStore(a.subscribe,b.default.useCallback(()=>c(a.getState()),[a,c]),b.default.useCallback(()=>c(a.getInitialState()),[a,c]));return b.default.useDebugValue(d),d})(d,a);return Object.assign(e,d),e};a.s(["create",0,a=>a?d(a):d],4873)},721043,a=>{"use strict";a.s(["default",0,!1])},480824,740398,83041,a=>{"use strict";var b=a.i(4873),c=a.i(127669),d=(a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}},e=["light","dark"],f="(prefers-color-scheme: dark)",g=c.createContext(void 0),h={setTheme:a=>{},themes:[]},i=()=>{var a;return null!=(a=c.useContext(g))?a:h},j=["light","dark"],k=({forcedTheme:a,disableTransitionOnChange:b=!1,enableSystem:d=!0,enableColorScheme:h=!0,storageKey:i="theme",themes:k=j,defaultTheme:p=d?"system":"light",attribute:q="data-theme",value:r,children:s,nonce:t,scriptProps:u})=>{let[v,w]=c.useState(()=>m(i,p)),[x,y]=c.useState(()=>"system"===v?o():v),z=r?Object.values(r):k,A=c.useCallback(a=>{let c=a;if(!c)return;"system"===a&&d&&(c=o());let f=r?r[c]:c,g=b?n(t):null,i=document.documentElement,j=a=>{"class"===a?(i.classList.remove(...z),f&&i.classList.add(f)):a.startsWith("data-")&&(f?i.setAttribute(a,f):i.removeAttribute(a))};if(Array.isArray(q)?q.forEach(j):j(q),h){let a=e.includes(p)?p:null,b=e.includes(c)?c:a;i.style.colorScheme=b}null==g||g()},[t]),B=c.useCallback(a=>{let b="function"==typeof a?a(v):a;w(b);try{localStorage.setItem(i,b)}catch(a){}},[v]),C=c.useCallback(b=>{y(o(b)),"system"===v&&d&&!a&&A("system")},[v,a]);c.useEffect(()=>{let a=window.matchMedia(f);return a.addListener(C),C(a),()=>a.removeListener(C)},[C]),c.useEffect(()=>{let a=a=>{a.key===i&&(a.newValue?w(a.newValue):B(p))};return window.addEventListener("storage",a),()=>window.removeEventListener("storage",a)},[B]),c.useEffect(()=>{A(null!=a?a:v)},[a,v]);let D=c.useMemo(()=>({theme:v,setTheme:B,forcedTheme:a,resolvedTheme:"system"===v?x:v,themes:d?[...k,"system"]:k,systemTheme:d?x:void 0}),[v,B,a,x,d,k]);return c.createElement(g.Provider,{value:D},c.createElement(l,{forcedTheme:a,storageKey:i,attribute:q,enableSystem:d,enableColorScheme:h,defaultTheme:p,value:r,themes:k,nonce:t,scriptProps:u}),s)},l=c.memo(({forcedTheme:a,storageKey:b,attribute:e,enableSystem:f,enableColorScheme:g,defaultTheme:h,value:i,themes:j,nonce:k,scriptProps:l})=>{let m=JSON.stringify([e,b,h,a,j,i,f,g]).slice(1,-1);return c.createElement("script",{...l,suppressHydrationWarning:!0,nonce:k,dangerouslySetInnerHTML:{__html:`(${d.toString()})(${m})`}})}),m=(a,b)=>{},n=a=>{let b=document.createElement("style");return a&&b.setAttribute("nonce",a),b.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(b),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(b)},1)}},o=a=>(a||(a=window.matchMedia(f)),a.matches?"dark":"light");a.s(["ThemeProvider",0,a=>c.useContext(g)?c.createElement(c.Fragment,null,a.children):c.createElement(k,{...a}),"useTheme",0,i],740398);let p=[{id:"snazzy",name:"Snazzy",variant:"dark",colors:{background:"#1e1f29",foreground:"#ebece6",cursor:"#e4e4e4",cursorAccent:"#1e1f29",selectionBackground:"#81aec6",selectionForeground:"#000000",black:"#000000",red:"#fc4346",green:"#50fb7c",yellow:"#f0fb8c",blue:"#49baff",magenta:"#fc4cb4",cyan:"#8be9fe",white:"#ededec",brightBlack:"#555555",brightRed:"#fc4346",brightGreen:"#50fb7c",brightYellow:"#f0fb8c",brightBlue:"#49baff",brightMagenta:"#fc4cb4",brightCyan:"#8be9fe",brightWhite:"#ededec"}},{id:"dracula",name:"Dracula",variant:"dark",colors:{background:"#282a36",foreground:"#f8f8f2",cursor:"#f8f8f2",cursorAccent:"#282a36",selectionBackground:"#44475a",selectionForeground:"#f8f8f2",black:"#21222c",red:"#ff5555",green:"#50fa7b",yellow:"#f1fa8c",blue:"#bd93f9",magenta:"#ff79c6",cyan:"#8be9fd",white:"#f8f8f2",brightBlack:"#6272a4",brightRed:"#ff6e6e",brightGreen:"#69ff94",brightYellow:"#ffffa5",brightBlue:"#d6acff",brightMagenta:"#ff92df",brightCyan:"#a4ffff",brightWhite:"#ffffff"}},{id:"one-dark",name:"One Dark",variant:"dark",colors:{background:"#282c34",foreground:"#abb2bf",cursor:"#528bff",cursorAccent:"#282c34",selectionBackground:"#3e4451",selectionForeground:"#abb2bf",black:"#282c34",red:"#e06c75",green:"#98c379",yellow:"#e5c07b",blue:"#61afef",magenta:"#c678dd",cyan:"#56b6c2",white:"#abb2bf",brightBlack:"#5c6370",brightRed:"#e06c75",brightGreen:"#98c379",brightYellow:"#e5c07b",brightBlue:"#61afef",brightMagenta:"#c678dd",brightCyan:"#56b6c2",brightWhite:"#ffffff"}},{id:"tokyo-night",name:"Tokyo Night",variant:"dark",colors:{background:"#1a1b26",foreground:"#a9b1d6",cursor:"#c0caf5",cursorAccent:"#1a1b26",selectionBackground:"#33467c",selectionForeground:"#a9b1d6",black:"#15161e",red:"#f7768e",green:"#9ece6a",yellow:"#e0af68",blue:"#7aa2f7",magenta:"#bb9af7",cyan:"#7dcfff",white:"#a9b1d6",brightBlack:"#414868",brightRed:"#f7768e",brightGreen:"#9ece6a",brightYellow:"#e0af68",brightBlue:"#7aa2f7",brightMagenta:"#bb9af7",brightCyan:"#7dcfff",brightWhite:"#c0caf5"}},{id:"nord",name:"Nord",variant:"dark",colors:{background:"#2e3440",foreground:"#d8dee9",cursor:"#d8dee9",cursorAccent:"#2e3440",selectionBackground:"#434c5e",selectionForeground:"#d8dee9",black:"#3b4252",red:"#bf616a",green:"#a3be8c",yellow:"#ebcb8b",blue:"#81a1c1",magenta:"#b48ead",cyan:"#88c0d0",white:"#e5e9f0",brightBlack:"#4c566a",brightRed:"#bf616a",brightGreen:"#a3be8c",brightYellow:"#ebcb8b",brightBlue:"#81a1c1",brightMagenta:"#b48ead",brightCyan:"#8fbcbb",brightWhite:"#eceff4"}},{id:"catppuccin-mocha",name:"Catppuccin Mocha",variant:"dark",colors:{background:"#1e1e2e",foreground:"#cdd6f4",cursor:"#f5e0dc",cursorAccent:"#1e1e2e",selectionBackground:"#585b70",selectionForeground:"#cdd6f4",black:"#45475a",red:"#f38ba8",green:"#a6e3a1",yellow:"#f9e2af",blue:"#89b4fa",magenta:"#f5c2e7",cyan:"#94e2d5",white:"#bac2de",brightBlack:"#585b70",brightRed:"#f38ba8",brightGreen:"#a6e3a1",brightYellow:"#f9e2af",brightBlue:"#89b4fa",brightMagenta:"#f5c2e7",brightCyan:"#94e2d5",brightWhite:"#a6adc8"}},{id:"catppuccin-latte",name:"Catppuccin Latte",variant:"light",colors:{background:"#eff1f5",foreground:"#4c4f69",cursor:"#dc8a78",cursorAccent:"#eff1f5",selectionBackground:"#acb0be",selectionForeground:"#4c4f69",black:"#5c5f77",red:"#d20f39",green:"#40a02b",yellow:"#df8e1d",blue:"#1e66f5",magenta:"#ea76cb",cyan:"#179299",white:"#acb0be",brightBlack:"#6c6f85",brightRed:"#d20f39",brightGreen:"#40a02b",brightYellow:"#df8e1d",brightBlue:"#1e66f5",brightMagenta:"#ea76cb",brightCyan:"#179299",brightWhite:"#bcc0cc"}},{id:"github-light",name:"GitHub Light",variant:"light",colors:{background:"#f6f8fa",foreground:"#24292f",cursor:"#044289",cursorAccent:"#f6f8fa",selectionBackground:"#b6d7ff",selectionForeground:"#24292f",black:"#24292f",red:"#cf222e",green:"#116329",yellow:"#9a6700",blue:"#0969da",magenta:"#8250df",cyan:"#1b7c83",white:"#6e7781",brightBlack:"#57606a",brightRed:"#a40e26",brightGreen:"#1a7f37",brightYellow:"#bf8700",brightBlue:"#218bff",brightMagenta:"#a475f9",brightCyan:"#3192aa",brightWhite:"#8c959f"}},{id:"one-light",name:"One Light",variant:"light",colors:{background:"#fafafa",foreground:"#383a42",cursor:"#526eff",cursorAccent:"#fafafa",selectionBackground:"#e5e5e6",selectionForeground:"#383a42",black:"#383a42",red:"#e45649",green:"#50a14f",yellow:"#c18401",blue:"#4078f2",magenta:"#a626a4",cyan:"#0184bc",white:"#a0a1a7",brightBlack:"#696c77",brightRed:"#e45649",brightGreen:"#50a14f",brightYellow:"#c18401",brightBlue:"#4078f2",brightMagenta:"#a626a4",brightCyan:"#0184bc",brightWhite:"#d4d4d4"}},{id:"solarized-light",name:"Solarized Light",variant:"light",colors:{background:"#fdf6e3",foreground:"#657b83",cursor:"#657b83",cursorAccent:"#fdf6e3",selectionBackground:"#eee8d5",selectionForeground:"#657b83",black:"#073642",red:"#dc322f",green:"#859900",yellow:"#b58900",blue:"#268bd2",magenta:"#d33682",cyan:"#2aa198",white:"#eee8d5",brightBlack:"#002b36",brightRed:"#cb4b16",brightGreen:"#586e75",brightYellow:"#657b83",brightBlue:"#839496",brightMagenta:"#6c71c4",brightCyan:"#93a1a1",brightWhite:"#fdf6e3"}},{id:"tokyo-night-light",name:"Tokyo Night Light",variant:"light",colors:{background:"#e1e2e7",foreground:"#3760bf",cursor:"#3760bf",cursorAccent:"#e1e2e7",selectionBackground:"#b6bfe2",selectionForeground:"#3760bf",black:"#e9e9ed",red:"#f52a65",green:"#587539",yellow:"#8c6c3e",blue:"#2e7de9",magenta:"#9854f1",cyan:"#007197",white:"#6172b0",brightBlack:"#a1a6c5",brightRed:"#f52a65",brightGreen:"#587539",brightYellow:"#8c6c3e",brightBlue:"#2e7de9",brightMagenta:"#9854f1",brightCyan:"#007197",brightWhite:"#3760bf"}},{id:"nord-light",name:"Nord Light",variant:"light",colors:{background:"#eceff4",foreground:"#2e3440",cursor:"#2e3440",cursorAccent:"#eceff4",selectionBackground:"#d8dee9",selectionForeground:"#2e3440",black:"#2e3440",red:"#bf616a",green:"#a3be8c",yellow:"#ebcb8b",blue:"#81a1c1",magenta:"#b48ead",cyan:"#88c0d0",white:"#d8dee9",brightBlack:"#4c566a",brightRed:"#bf616a",brightGreen:"#a3be8c",brightYellow:"#ebcb8b",brightBlue:"#81a1c1",brightMagenta:"#b48ead",brightCyan:"#8fbcbb",brightWhite:"#eceff4"}}],q={light:"catppuccin-latte",dark:"snazzy"},r=a=>p.find(b=>b.id===a)??p[0];a.s(["DEFAULT_THEME_IDS",0,q,"TERMINAL_THEMES",0,p,"getTerminalTheme",0,r],83041);let s=(0,b.create)(a=>({themeIds:{...q},setTheme:(b,c)=>{a(a=>{let d={...a.themeIds,[b]:c};return fetch("/api/config",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({terminalTheme:d})}).catch(()=>{}),{themeIds:d}})},hydrate:b=>{a({themeIds:{...q,...b}})}}));a.s(["default",0,()=>{let{resolvedTheme:a}=i(),b="light"===a?"light":"dark",{themeIds:c,setTheme:d}=s(),e=r(c[b]);return{mode:b,themeIds:c,theme:e,setTerminalTheme:d,themes:p}},"initTerminalTheme",0,a=>{a&&s.getState().hydrate(a)}],480824)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=%5Broot-of-the-server%5D__0au.ssp._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[811705,396552,a=>{"use strict";var b=a.i(508171),c=a.i(799856);a.s(["Card",0,function({className:a,size:d="default",...e}){return(0,b.jsx)("div",{"data-slot":"card","data-size":d,className:(0,c.cn)("group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",a),...e})},"CardContent",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-content",className:(0,c.cn)("px-4 group-data-[size=sm]/card:px-3",a),...d})},"CardHeader",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-header",className:(0,c.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",a),...d})},"CardTitle",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-title",className:(0,c.cn)("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",a),...d})}],811705);var d=a.i(398544);let e=a=>a>=1e6?`${(a/1e6).toFixed(1)}M`:a>=1e3?`${(a/1e3).toFixed(1)}K`:a.toLocaleString();a.s(["WEEKDAY_LABELS",0,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"formatAxisTick",0,a=>e(a),"formatCostWithComma",0,a=>{if(a<1)return`$${a.toFixed(2)}`;let[b,c]=a.toFixed(1).split(".");return`$${Number(b).toLocaleString()}.${c}`},"formatDate",0,a=>(0,d.default)(a).format("MM/DD"),"formatDuration",0,a=>{let b=Math.floor(a/6e4);if(b<60)return`${b}m`;let c=Math.floor(b/60);if(c<24)return`${c}h ${b%60}m`;let d=Math.floor(c/24);return`${d}d ${c%24}h`},"formatNumber",0,e,"formatNumberWithComma",0,a=>a.toLocaleString(),"getChangeRate",0,(a,b)=>{if(0===b)return null;let c=(a-b)/b*100;return`${c>=0?"+":""}${Math.round(c).toLocaleString()}%`}],396552)},776979,436028,a=>{"use strict";var b=a.i(508171),c=a.i(127669),d=a.i(113952);let e=(0,a.i(564375).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);a.s(["AlertCircle",0,e],436028);var f=a.i(506766),g=a.i(396465);let h=({onRetry:a})=>{let c=(0,d.useTranslations)("stats"),h=(0,d.useTranslations)("common");return(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-3 rounded-xl bg-card py-12 ring-1 ring-foreground/10",children:[(0,b.jsx)(e,{className:"h-5 w-5 text-muted-foreground"}),(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:c("errorLoadFailed")}),(0,b.jsxs)(g.Button,{variant:"outline",size:"sm",onClick:a,children:[(0,b.jsx)(f.RefreshCw,{className:"mr-1.5 h-3 w-3"}),h("retry")]})]})};class i extends c.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(a,b){console.error(`[${this.props.sectionName}] Error:`,a,b)}handleRetry=()=>{this.setState({hasError:!1})};render(){return this.state.hasError?(0,b.jsx)(h,{onRetry:this.handleRetry}):this.props.children}}a.s(["default",0,i],776979)},321327,a=>{"use strict";var b=a.i(579168),c=a.i(627068),d=a.i(332759),e=a.i(817359),f=a.i(468695),g=a.i(508171),h=a.i(127669),i=a.i(119059),j=a.i(113952),k=a.i(199987),l=a.i(125487),m=a.i(274399),n=a.i(396465),o=a.i(356233),p=a.i(266929),q=a.i(776979),r=a.i(398544),s=a.i(92654),t=a.i(93538),u=a.i(643228),v=a.i(506766),w=a.i(581228),x=a.i(510414),y=a.i(811705),z=a.i(678240),A=a.i(396552);let B="prose prose-sm prose-invert max-w-none text-foreground/80 [&_h2]:mt-4 [&_h2]:mb-1 [&_h2]:text-base [&_h2]:font-semibold [&_h2]:text-foreground [&_h3]:mt-2 [&_h3]:mb-0.5 [&_h3]:text-sm [&_h3]:font-medium [&_h3]:text-foreground/80 [&_ul]:my-0.5 [&_ul]:pl-4 [&_li]:my-0 [&_li]:text-sm [&_p]:text-sm [&_p]:my-1 [&_p]:leading-relaxed",C=(0,h.memo)(({days:a,cache:b,onCacheUpdate:c,batchActions:d,onBatchRunningChange:e})=>{let f=(0,j.useTranslations)("stats"),i=(0,z.default)(a=>a.locale),[k,m]=(0,h.useState)(null),[o,p]=(0,h.useState)(new Set),[q,C]=(0,h.useState)(!1),D=(0,h.useRef)(!1),E=(0,h.useCallback)(async(a,b=!1)=>{let c=await fetch("/api/stats/daily-report/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({date:a,force:b,locale:i})});if(!c.ok)throw Error((await c.json().catch(()=>({message:"unknown error"}))).message??`HTTP ${c.status}`);return await c.json()},[i]),F=(0,h.useCallback)(async(a,b=!1)=>{m(a);try{let d=await E(a,b);c(a,d),x.toast.success(f("summaryGenerated"))}catch(a){x.toast.error(a instanceof Error?a.message:f("summaryFailed"))}finally{m(null)}},[E,c,f]),G=(0,h.useCallback)(async()=>{D.current=!1,C(!0);let d=0;try{for(let e of a){if(D.current)break;let a=b?.days[e.date];if(!a||a.locale!==i){m(e.date);try{let a=await E(e.date);c(e.date,a),d++}catch{x.toast.error(f("summaryDateFailed",{date:e.date}));break}}}}finally{m(null),C(!1),d>0&&x.toast.success(f("summaryBatchComplete",{count:d}))}},[a,b,E,c,f,i]),H=(0,h.useCallback)(()=>{D.current=!0},[]),I=(0,h.useCallback)(a=>{p(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})},[]),J=(0,r.default)().format("YYYY-MM-DD");return(0,h.useEffect)(()=>{d&&(d.start=G,d.stop=H)},[d,G,H]),(0,h.useEffect)(()=>{e?.(q)},[q,e]),(0,g.jsxs)("div",{className:"space-y-4",children:[a.map(a=>{let c=(0,r.default)(a.date),d=A.WEEKDAY_LABELS[c.day()],e=a.date===J,h=b?.days[a.date]??null,i=k===a.date,j=o.has(a.date);return(0,g.jsxs)("div",{className:"space-y-2",children:[(0,g.jsxs)("div",{className:"flex items-center justify-between px-1",children:[(0,g.jsxs)("div",{className:"flex items-center gap-2",children:[(0,g.jsxs)("span",{className:"text-base font-medium text-muted-foreground",children:[a.date," (",d,")"]}),e&&(0,g.jsx)("span",{className:"rounded bg-ui-teal/15 px-1.5 py-0.5 text-[10px] font-medium text-ui-teal",children:f("today")})]}),(0,g.jsxs)("div",{className:"flex items-center gap-1.5",children:[h&&(0,g.jsxs)(g.Fragment,{children:[i&&(0,g.jsx)("span",{className:"text-xs text-muted-foreground",children:f("generating")}),(0,g.jsx)(n.Button,{variant:"ghost",size:"icon-xs",onClick:()=>F(a.date,!0),disabled:null!==k,className:"text-muted-foreground",children:(0,g.jsx)(v.RefreshCw,{className:`h-3 w-3${i?" animate-spin":""}`})})]}),(0,g.jsxs)("span",{className:"text-xs tabular-nums text-muted-foreground",children:[f("sessionCount",{count:a.sessionCount})," · ",(0,A.formatCostWithComma)(a.cost)]})]})]}),(0,g.jsx)(y.Card,{size:"sm",children:(0,g.jsxs)(y.CardContent,{className:"space-y-2",children:[!h&&!i&&(0,g.jsxs)(n.Button,{variant:"outline",size:"xs",onClick:()=>F(a.date),disabled:null!==k,children:[(0,g.jsx)(l.Sparkles,{className:"h-3 w-3"}),f("summarize")]}),!h&&i&&(0,g.jsxs)("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[(0,g.jsx)(w.default,{className:"h-2.5 w-2.5"}),(0,g.jsx)("span",{children:f("generatingSummary")})]}),h&&(0,g.jsx)(g.Fragment,{children:(0,g.jsxs)("div",{className:i?"opacity-40":void 0,children:[(0,g.jsx)("div",{className:B,children:(0,g.jsx)(s.default,{children:h.brief})}),h.detail&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(n.Button,{variant:"ghost",size:"xs",onClick:()=>I(a.date),className:"text-muted-foreground",disabled:i,children:j?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(t.ChevronDown,{className:"h-3 w-3"}),f("collapse")]}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(u.ChevronRight,{className:"h-3 w-3"}),f("showMore")]})}),j&&(0,g.jsx)("div",{className:"border-t pt-2",children:(0,g.jsx)("div",{className:B,children:(0,g.jsx)(s.default,{children:h.detail})})})]})]})})]})})]},a.date)}),0===a.length&&(0,g.jsx)("p",{className:"py-4 text-center text-xs text-muted-foreground",children:f("noActivity")})]})}),D=()=>{let a=(0,j.useTranslations)("reports");(0,o.default)(a("title"));let[b,c]=(0,h.useState)([]),[d,e]=(0,h.useState)(0),[f,p]=(0,h.useState)(!0),[r,s]=(0,h.useState)(!1),t=(0,h.useCallback)(async(a,b)=>(await fetch(`/api/stats/daily-report/list?offset=${a}&limit=10`,{signal:b})).json(),[]);(0,h.useEffect)(()=>{let a=new AbortController;return t(0,a.signal).then(a=>{c(a.days),e(a.total)}).catch(()=>{}).finally(()=>p(!1)),()=>a.abort()},[t]);let u=(0,h.useCallback)(async()=>{s(!0);try{let a=await t(b.length);c(b=>[...b,...a.days]),e(a.total)}catch{}finally{s(!1)}},[b.length,t]),v=(0,h.useCallback)((a,b)=>{c(c=>c.map(c=>c.date===a?{...c,report:b}:c))},[]),w=b.map(a=>({date:a.date,sessionCount:a.sessionCount,cost:a.cost})),x={days:Object.fromEntries(b.filter(a=>a.report).map(a=>[a.date,a.report]))},y=b.length<d,z=b.filter(a=>!a.report).length,A=(0,h.useRef)({start:()=>{},stop:()=>{}}),[B,D]=(0,h.useState)(!1),E=(0,g.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(0,g.jsxs)("div",{className:"mx-auto max-w-content px-4 py-6",children:[(0,g.jsxs)("div",{className:"mb-6 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,g.jsxs)("div",{className:"flex items-center gap-2",children:[(0,g.jsx)(k.FileText,{className:"h-5 w-5 text-claude-active"}),(0,g.jsx)("h1",{className:"text-base font-semibold",children:a("title")})]}),(0,g.jsx)("div",{className:"flex items-center gap-2",children:!f&&z>0&&(B?(0,g.jsxs)(n.Button,{variant:"outline",size:"xs",onClick:()=>A.current.stop(),children:[(0,g.jsx)(m.Square,{className:"h-3 w-3"}),a("stop")]}):(0,g.jsxs)(n.Button,{variant:"outline",size:"xs",onClick:()=>A.current.start(),children:[(0,g.jsx)(l.Sparkles,{className:"h-3 w-3"}),a("summarize",{count:z})]}))})]}),(0,g.jsx)(q.default,{sectionName:a("title"),children:f?(0,g.jsx)("div",{className:"space-y-2",children:Array.from({length:5}).map((a,b)=>(0,g.jsxs)("div",{className:"flex items-center gap-3 rounded-xl bg-card px-4 py-4 ring-1 ring-foreground/10",children:[(0,g.jsxs)("div",{className:"flex-1 space-y-2",children:[(0,g.jsx)("div",{className:"h-3.5 w-32 animate-pulse rounded bg-muted"}),(0,g.jsx)("div",{className:"h-3 w-20 animate-pulse rounded bg-muted"})]}),(0,g.jsx)("div",{className:"h-3 w-24 animate-pulse rounded bg-muted"})]},b))}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(C,{days:w,cache:x,onCacheUpdate:v,batchActions:A.current,onBatchRunningChange:D}),y&&(0,g.jsx)("div",{className:"mt-3 flex justify-center",children:(0,g.jsx)(n.Button,{variant:"outline",size:"sm",onClick:u,disabled:r,children:r?a("loadingMore"):a("loadMore",{count:d-b.length})})})]})})]})});return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(i.default,{children:(0,g.jsx)("title",{children:a("pageTitle")})}),E]})};D.getLayout=p.getPageShellWithTitlebarLayout;let E=async b=>{let{requireAuth:c}=await a.A(120441),{loadMessagesServer:d}=await a.A(168414);return c(b,async()=>({props:{messages:await d()}}))};a.s(["default",0,D,"getServerSideProps",0,E],254728);var F=a.i(254728),G=a.i(509193);let H=(0,d.hoist)(F,"default"),I=(0,d.hoist)(F,"getStaticProps"),J=(0,d.hoist)(F,"getStaticPaths"),K=(0,d.hoist)(F,"getServerSideProps"),L=(0,d.hoist)(F,"config"),M=(0,d.hoist)(F,"reportWebVitals"),N=(0,d.hoist)(F,"unstable_getStaticProps"),O=(0,d.hoist)(F,"unstable_getStaticPaths"),P=(0,d.hoist)(F,"unstable_getStaticParams"),Q=(0,d.hoist)(F,"unstable_getServerProps"),R=(0,d.hoist)(F,"unstable_getServerSideProps"),S=new b.PagesRouteModule({definition:{kind:c.RouteKind.PAGES,page:"/reports",pathname:"/reports",bundlePath:"",filename:""},distDir:".next",relativeProjectDir:"",components:{App:f.default,Document:e.default},userland:F}),T=(0,G.getHandler)({srcPage:"/reports",config:L,userland:F,routeModule:S,getStaticPaths:J,getStaticProps:I,getServerSideProps:K});a.s(["config",0,L,"default",0,H,"getServerSideProps",0,K,"getStaticPaths",0,J,"getStaticProps",0,I,"handler",0,T,"reportWebVitals",0,M,"routeModule",0,S,"unstable_getServerProps",0,Q,"unstable_getServerSideProps",0,R,"unstable_getStaticParams",0,P,"unstable_getStaticPaths",0,O,"unstable_getStaticProps",0,N],321327)},876457,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_components_features_workspace_settings-dialog_tsx_05v~y7d._.js"].map(b=>a.l(b))).then(()=>b(563410)))},200022,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_components_features_shortcuts_cheat-sheet-dialog_tsx_0i2pbva._.js"].map(b=>a.l(b))).then(()=>b(469403)))},419326,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_components_10v_9d0._.js"].map(b=>a.l(b))).then(()=>b(9252)))},120441,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_types_preflight_ts_06_o3k4._.js","server/chunks/ssr/src_lib_require-auth_ts_0lybmh2._.js"].map(b=>a.l(b))).then(()=>b(56975)))},168414,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_load-messages_ts_11e7h4~._.js"].map(b=>a.l(b))).then(()=>b(387607)))}];
|
|
1
|
+
module.exports=[811705,396552,a=>{"use strict";var b=a.i(508171),c=a.i(799856);a.s(["Card",0,function({className:a,size:d="default",...e}){return(0,b.jsx)("div",{"data-slot":"card","data-size":d,className:(0,c.cn)("group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",a),...e})},"CardContent",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-content",className:(0,c.cn)("px-4 group-data-[size=sm]/card:px-3",a),...d})},"CardHeader",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-header",className:(0,c.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",a),...d})},"CardTitle",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-title",className:(0,c.cn)("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",a),...d})}],811705);var d=a.i(398544);let e=a=>a>=1e6?`${(a/1e6).toFixed(1)}M`:a>=1e3?`${(a/1e3).toFixed(1)}K`:a.toLocaleString();a.s(["WEEKDAY_LABELS",0,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"formatAxisTick",0,a=>e(a),"formatCostWithComma",0,a=>{if(a<1)return`$${a.toFixed(2)}`;let[b,c]=a.toFixed(1).split(".");return`$${Number(b).toLocaleString()}.${c}`},"formatDate",0,a=>(0,d.default)(a).format("MM/DD"),"formatDuration",0,a=>{let b=Math.floor(a/6e4);if(b<60)return`${b}m`;let c=Math.floor(b/60);if(c<24)return`${c}h ${b%60}m`;let d=Math.floor(c/24);return`${d}d ${c%24}h`},"formatNumber",0,e,"formatNumberWithComma",0,a=>a.toLocaleString(),"getChangeRate",0,(a,b)=>{if(0===b)return null;let c=(a-b)/b*100;return`${c>=0?"+":""}${Math.round(c).toLocaleString()}%`}],396552)},776979,436028,a=>{"use strict";var b=a.i(508171),c=a.i(127669),d=a.i(113952);let e=(0,a.i(564375).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);a.s(["AlertCircle",0,e],436028);var f=a.i(506766),g=a.i(396465);let h=({onRetry:a})=>{let c=(0,d.useTranslations)("stats"),h=(0,d.useTranslations)("common");return(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-3 rounded-xl bg-card py-12 ring-1 ring-foreground/10",children:[(0,b.jsx)(e,{className:"h-5 w-5 text-muted-foreground"}),(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:c("errorLoadFailed")}),(0,b.jsxs)(g.Button,{variant:"outline",size:"sm",onClick:a,children:[(0,b.jsx)(f.RefreshCw,{className:"mr-1.5 h-3 w-3"}),h("retry")]})]})};class i extends c.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(a,b){console.error(`[${this.props.sectionName}] Error:`,a,b)}handleRetry=()=>{this.setState({hasError:!1})};render(){return this.state.hasError?(0,b.jsx)(h,{onRetry:this.handleRetry}):this.props.children}}a.s(["default",0,i],776979)},321327,a=>{"use strict";var b=a.i(579168),c=a.i(627068),d=a.i(332759),e=a.i(817359),f=a.i(468695),g=a.i(508171),h=a.i(127669),i=a.i(119059),j=a.i(113952),k=a.i(199987),l=a.i(125487),m=a.i(274399),n=a.i(396465),o=a.i(356233),p=a.i(266929),q=a.i(776979),r=a.i(398544),s=a.i(92654),t=a.i(93538),u=a.i(643228),v=a.i(506766),w=a.i(581228),x=a.i(510414),y=a.i(811705),z=a.i(678240),A=a.i(396552);let B="prose prose-sm prose-invert max-w-none text-foreground/80 [&_h2]:mt-4 [&_h2]:mb-1 [&_h2]:text-base [&_h2]:font-semibold [&_h2]:text-foreground [&_h3]:mt-2 [&_h3]:mb-0.5 [&_h3]:text-sm [&_h3]:font-medium [&_h3]:text-foreground/80 [&_ul]:my-0.5 [&_ul]:pl-4 [&_li]:my-0 [&_li]:text-sm [&_p]:text-sm [&_p]:my-1 [&_p]:leading-relaxed",C=(0,h.memo)(({days:a,cache:b,onCacheUpdate:c,batchActions:d,onBatchRunningChange:e})=>{let f=(0,j.useTranslations)("stats"),i=(0,z.default)(a=>a.locale),[k,m]=(0,h.useState)(null),[o,p]=(0,h.useState)(new Set),[q,C]=(0,h.useState)(!1),D=(0,h.useRef)(!1),E=(0,h.useCallback)(async(a,b=!1)=>{let c=await fetch("/api/stats/daily-report/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({date:a,force:b,locale:i})});if(!c.ok)throw Error((await c.json().catch(()=>({message:"unknown error"}))).message??`HTTP ${c.status}`);return await c.json()},[i]),F=(0,h.useCallback)(async(a,b=!1)=>{m(a);try{let d=await E(a,b);c(a,d),x.toast.success(f("summaryGenerated"))}catch(a){x.toast.error(a instanceof Error?a.message:f("summaryFailed"))}finally{m(null)}},[E,c,f]),G=(0,h.useCallback)(async()=>{D.current=!1,C(!0);let d=0;try{for(let e of a){if(D.current)break;let a=b?.days[e.date];if(!a||a.locale!==i){m(e.date);try{let a=await E(e.date);c(e.date,a),d++}catch{x.toast.error(f("summaryDateFailed",{date:e.date}));break}}}}finally{m(null),C(!1),d>0&&x.toast.success(f("summaryBatchComplete",{count:d}))}},[a,b,E,c,f,i]),H=(0,h.useCallback)(()=>{D.current=!0},[]),I=(0,h.useCallback)(a=>{p(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})},[]),J=(0,r.default)().format("YYYY-MM-DD");return(0,h.useEffect)(()=>{d&&(d.start=G,d.stop=H)},[d,G,H]),(0,h.useEffect)(()=>{e?.(q)},[q,e]),(0,g.jsxs)("div",{className:"space-y-4",children:[a.map(a=>{let c=(0,r.default)(a.date),d=A.WEEKDAY_LABELS[c.day()],e=a.date===J,h=b?.days[a.date]??null,i=k===a.date,j=o.has(a.date);return(0,g.jsxs)("div",{className:"space-y-2",children:[(0,g.jsxs)("div",{className:"flex items-center justify-between px-1",children:[(0,g.jsxs)("div",{className:"flex items-center gap-2",children:[(0,g.jsxs)("span",{className:"text-base font-medium text-muted-foreground",children:[a.date," (",d,")"]}),e&&(0,g.jsx)("span",{className:"rounded bg-ui-teal/15 px-1.5 py-0.5 text-[10px] font-medium text-ui-teal",children:f("today")})]}),(0,g.jsxs)("div",{className:"flex items-center gap-1.5",children:[h&&(0,g.jsxs)(g.Fragment,{children:[i&&(0,g.jsx)("span",{className:"text-xs text-muted-foreground",children:f("generating")}),(0,g.jsx)(n.Button,{variant:"ghost",size:"icon-xs",onClick:()=>F(a.date,!0),disabled:null!==k,className:"text-muted-foreground",children:(0,g.jsx)(v.RefreshCw,{className:`h-3 w-3${i?" animate-spin":""}`})})]}),(0,g.jsxs)("span",{className:"text-xs tabular-nums text-muted-foreground",children:[f("sessionCount",{count:a.sessionCount})," · ",(0,A.formatCostWithComma)(a.cost)]})]})]}),(0,g.jsx)(y.Card,{size:"sm",children:(0,g.jsxs)(y.CardContent,{className:"space-y-2",children:[!h&&!i&&(0,g.jsxs)(n.Button,{variant:"outline",size:"xs",onClick:()=>F(a.date),disabled:null!==k,children:[(0,g.jsx)(l.Sparkles,{className:"h-3 w-3"}),f("summarize")]}),!h&&i&&(0,g.jsxs)("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[(0,g.jsx)(w.default,{className:"h-2.5 w-2.5"}),(0,g.jsx)("span",{children:f("generatingSummary")})]}),h&&(0,g.jsx)(g.Fragment,{children:(0,g.jsxs)("div",{className:i?"opacity-40":void 0,children:[(0,g.jsx)("div",{className:B,children:(0,g.jsx)(s.default,{children:h.brief})}),h.detail&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(n.Button,{variant:"ghost",size:"xs",onClick:()=>I(a.date),className:"text-muted-foreground",disabled:i,children:j?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(t.ChevronDown,{className:"h-3 w-3"}),f("collapse")]}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(u.ChevronRight,{className:"h-3 w-3"}),f("showMore")]})}),j&&(0,g.jsx)("div",{className:"border-t pt-2",children:(0,g.jsx)("div",{className:B,children:(0,g.jsx)(s.default,{children:h.detail})})})]})]})})]})})]},a.date)}),0===a.length&&(0,g.jsx)("p",{className:"py-4 text-center text-xs text-muted-foreground",children:f("noActivity")})]})}),D=()=>{let a=(0,j.useTranslations)("reports");(0,o.default)(a("title"));let[b,c]=(0,h.useState)([]),[d,e]=(0,h.useState)(0),[f,p]=(0,h.useState)(!0),[r,s]=(0,h.useState)(!1),t=(0,h.useCallback)(async(a,b)=>(await fetch(`/api/stats/daily-report/list?offset=${a}&limit=10`,{signal:b})).json(),[]);(0,h.useEffect)(()=>{let a=new AbortController;return t(0,a.signal).then(a=>{c(a.days),e(a.total)}).catch(()=>{}).finally(()=>p(!1)),()=>a.abort()},[t]);let u=(0,h.useCallback)(async()=>{s(!0);try{let a=await t(b.length);c(b=>[...b,...a.days]),e(a.total)}catch{}finally{s(!1)}},[b.length,t]),v=(0,h.useCallback)((a,b)=>{c(c=>c.map(c=>c.date===a?{...c,report:b}:c))},[]),w=b.map(a=>({date:a.date,sessionCount:a.sessionCount,cost:a.cost})),x={days:Object.fromEntries(b.filter(a=>a.report).map(a=>[a.date,a.report]))},y=b.length<d,z=b.filter(a=>!a.report).length,A=(0,h.useRef)({start:()=>{},stop:()=>{}}),[B,D]=(0,h.useState)(!1),E=(0,g.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(0,g.jsxs)("div",{className:"mx-auto max-w-content px-4 py-6",children:[(0,g.jsxs)("div",{className:"mb-6 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,g.jsxs)("div",{className:"flex items-center gap-2",children:[(0,g.jsx)(k.FileText,{className:"h-5 w-5 text-claude-active"}),(0,g.jsx)("h1",{className:"text-base font-semibold",children:a("title")})]}),(0,g.jsx)("div",{className:"flex items-center gap-2",children:!f&&z>0&&(B?(0,g.jsxs)(n.Button,{variant:"outline",size:"xs",onClick:()=>A.current.stop(),children:[(0,g.jsx)(m.Square,{className:"h-3 w-3"}),a("stop")]}):(0,g.jsxs)(n.Button,{variant:"outline",size:"xs",onClick:()=>A.current.start(),children:[(0,g.jsx)(l.Sparkles,{className:"h-3 w-3"}),a("summarize",{count:z})]}))})]}),(0,g.jsx)(q.default,{sectionName:a("title"),children:f?(0,g.jsx)("div",{className:"space-y-2",children:Array.from({length:5}).map((a,b)=>(0,g.jsxs)("div",{className:"flex items-center gap-3 rounded-xl bg-card px-4 py-4 ring-1 ring-foreground/10",children:[(0,g.jsxs)("div",{className:"flex-1 space-y-2",children:[(0,g.jsx)("div",{className:"h-3.5 w-32 animate-pulse rounded bg-muted"}),(0,g.jsx)("div",{className:"h-3 w-20 animate-pulse rounded bg-muted"})]}),(0,g.jsx)("div",{className:"h-3 w-24 animate-pulse rounded bg-muted"})]},b))}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(C,{days:w,cache:x,onCacheUpdate:v,batchActions:A.current,onBatchRunningChange:D}),y&&(0,g.jsx)("div",{className:"mt-3 flex justify-center",children:(0,g.jsx)(n.Button,{variant:"outline",size:"sm",onClick:u,disabled:r,children:r?a("loadingMore"):a("loadMore",{count:d-b.length})})})]})})]})});return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(i.default,{children:(0,g.jsx)("title",{children:a("pageTitle")})}),E]})};D.getLayout=p.getPageShellWithTitlebarLayout;let E=async b=>{let{requireAuth:c}=await a.A(120441),{loadMessagesServer:d}=await a.A(168414);return c(b,async()=>({props:{messages:await d()}}))};a.s(["default",0,D,"getServerSideProps",0,E],254728);var F=a.i(254728),G=a.i(509193);let H=(0,d.hoist)(F,"default"),I=(0,d.hoist)(F,"getStaticProps"),J=(0,d.hoist)(F,"getStaticPaths"),K=(0,d.hoist)(F,"getServerSideProps"),L=(0,d.hoist)(F,"config"),M=(0,d.hoist)(F,"reportWebVitals"),N=(0,d.hoist)(F,"unstable_getStaticProps"),O=(0,d.hoist)(F,"unstable_getStaticPaths"),P=(0,d.hoist)(F,"unstable_getStaticParams"),Q=(0,d.hoist)(F,"unstable_getServerProps"),R=(0,d.hoist)(F,"unstable_getServerSideProps"),S=new b.PagesRouteModule({definition:{kind:c.RouteKind.PAGES,page:"/reports",pathname:"/reports",bundlePath:"",filename:""},distDir:".next",relativeProjectDir:"",components:{App:f.default,Document:e.default},userland:F}),T=(0,G.getHandler)({srcPage:"/reports",config:L,userland:F,routeModule:S,getStaticPaths:J,getStaticProps:I,getServerSideProps:K});a.s(["config",0,L,"default",0,H,"getServerSideProps",0,K,"getStaticPaths",0,J,"getStaticProps",0,I,"handler",0,T,"reportWebVitals",0,M,"routeModule",0,S,"unstable_getServerProps",0,Q,"unstable_getServerSideProps",0,R,"unstable_getStaticParams",0,P,"unstable_getStaticPaths",0,O,"unstable_getStaticProps",0,N],321327)},876457,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_components_features_workspace_settings-dialog_tsx_05v~y7d._.js"].map(b=>a.l(b))).then(()=>b(563410)))},200022,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_components_features_shortcuts_cheat-sheet-dialog_tsx_0i2pbva._.js"].map(b=>a.l(b))).then(()=>b(469403)))},419326,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_components_0g.s~e7._.js"].map(b=>a.l(b))).then(()=>b(9252)))},120441,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_types_preflight_ts_06_o3k4._.js","server/chunks/ssr/src_lib_require-auth_ts_0lybmh2._.js"].map(b=>a.l(b))).then(()=>b(56975)))},168414,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_load-messages_ts_11e7h4~._.js"].map(b=>a.l(b))).then(()=>b(387607)))}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=_00ehnd~._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module.exports=[931528,(a,b,c)=>{"use strict";var d=a.r(127669);d.useState,d.useEffect,d.useLayoutEffect,d.useDebugValue,c.useSyncExternalStore=void 0!==d.useSyncExternalStore?d.useSyncExternalStore:function(a,b){return b()}},152119,(a,b,c)=>{"use strict";b.exports=a.r(931528)},534033,(a,b,c)=>{"use strict";var d=a.r(127669),e=a.r(152119),f="function"==typeof Object.is?Object.is:function(a,b){return a===b&&(0!==a||1/a==1/b)||a!=a&&b!=b},g=e.useSyncExternalStore,h=d.useRef,i=d.useEffect,j=d.useMemo,k=d.useDebugValue;c.useSyncExternalStoreWithSelector=function(a,b,c,d,e){var l=h(null);if(null===l.current){var m={hasValue:!1,value:null};l.current=m}else m=l.current;var n=g(a,(l=j(function(){function a(a){if(!i){if(i=!0,g=a,a=d(a),void 0!==e&&m.hasValue){var b=m.value;if(e(b,a))return h=b}return h=a}if(b=h,f(g,a))return b;var c=d(a);return void 0!==e&&e(b,c)?(g=a,b):(g=a,h=c)}var g,h,i=!1,j=void 0===c?null:c;return[function(){return a(b())},null===j?void 0:function(){return a(j())}]},[b,c,d,e]))[0],l[1]);return i(function(){m.hasValue=!0,m.value=n},[n]),k(n),n}},908328,(a,b,c)=>{"use strict";b.exports=a.r(534033)},564375,a=>{"use strict";var b=a.i(127669);let c=(...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim(),d=a=>{let b=a.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,b,c)=>c?c.toUpperCase():b.toLowerCase());return b.charAt(0).toUpperCase()+b.slice(1)};var e={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let f=(0,b.createContext)({}),g=(0,b.forwardRef)(({color:a,size:d,strokeWidth:g,absoluteStrokeWidth:h,className:i="",children:j,iconNode:k,...l},m)=>{let{size:n=24,strokeWidth:o=2,absoluteStrokeWidth:p=!1,color:q="currentColor",className:r=""}=(0,b.useContext)(f)??{},s=h??p?24*Number(g??o)/Number(d??n):g??o;return(0,b.createElement)("svg",{ref:m,...e,width:d??n??e.width,height:d??n??e.height,stroke:a??q,strokeWidth:s,className:c("lucide",r,i),...!j&&!(a=>{for(let b in a)if(b.startsWith("aria-")||"role"===b||"title"===b)return!0;return!1})(l)&&{"aria-hidden":"true"},...l},[...k.map(([a,c])=>(0,b.createElement)(a,c)),...Array.isArray(j)?j:[j]])});a.s(["default",0,(a,e)=>{let f=(0,b.forwardRef)(({className:f,...h},i)=>(0,b.createElement)(g,{ref:i,iconNode:e,className:c(`lucide-${d(a).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${a}`,f),...h}));return f.displayName=d(a),f}],564375)},597435,177765,a=>{"use strict";let b=(0,a.i(564375).default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);a.s(["default",0,b],177765),a.s(["Check",0,b],597435)},975022,a=>{"use strict";let b=(0,a.i(564375).default)("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);a.s(["Terminal",0,b],975022)},532572,a=>{"use strict";let b=(0,a.i(564375).default)("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]);a.s(["Download",0,b],532572)},841527,a=>{"use strict";var b=a.i(508171),c=a.i(975022),d=a.i(799856);a.s(["default",0,({shimmer:a=!1,size:e="sm",className:f})=>(0,b.jsxs)("div",{className:(0,d.cn)("flex items-center gap-1.5","xl"===e&&"gap-2.5",f),children:[(0,b.jsx)(c.Terminal,{className:(0,d.cn)("xl"===e?"h-6 w-6":"h-4 w-4","shrink-0 text-brand")}),(0,b.jsxs)("span",{className:(0,d.cn)("xl"===e?"text-xl":"text-sm",a?"animate-shimmer":"text-brand"),children:[(0,b.jsx)("span",{className:"font-bold",children:"purple"}),(0,b.jsx)("span",{className:"font-normal",children:"mux"})]})]})])},428496,a=>{"use strict";a.s(["isRuntimeOk",0,a=>a.tmux.installed&&a.tmux.compatible&&a.git.installed&&a.claude.installed])},737098,849612,a=>{"use strict";let b=(0,a.i(564375).default)("refresh-ccw",[["path",{d:"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"14sxne"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16",key:"1hlbsb"}],["path",{d:"M16 16h5v5",key:"ccwih5"}]]);a.s(["RefreshCcw",0,b],737098);var c=a.i(508171),d=a.i(127669),e=a.i(113952),f=a.i(109254),g=a.i(396465),h=a.i(514385),i=a.i(104877);a.s(["default",0,({open:a,onOpenChange:b,command:j,label:k})=>{let l=(0,e.useTranslations)("common"),m=(0,d.useRef)(!1),n=(0,d.useRef)(()=>{}),{connect:o,disconnect:p,sendStdin:q,sendResize:r}=(a=>{let b=(0,d.useRef)(null),[c,e]=(0,d.useState)("idle"),f=(0,d.useRef)(a);(0,d.useEffect)(()=>{f.current=a},[a]);let g=(0,d.useCallback)(()=>{let a=b.current;a&&(a.close(),b.current=null)},[]);(0,d.useEffect)(()=>()=>{b.current?.close()},[]);let h=(0,d.useCallback)((a,c,d)=>{g();let h="https:"===window.location.protocol?"wss:":"ws:",j=new WebSocket(`${h}//${window.location.host}/api/install?command=${encodeURIComponent(a)}&cols=${c}&rows=${d}`);j.binaryType="arraybuffer",b.current=j,j.onopen=()=>e("connected"),j.onmessage=a=>{let b=(0,i.decodeMessage)(a.data);b.type===i.MSG_STDOUT&&f.current(b.payload)},j.onclose=()=>{b.current=null,e("disconnected")},j.onerror=()=>{b.current=null,e("disconnected")}},[g]);return{status:c,connect:h,disconnect:g,sendStdin:(0,d.useCallback)(a=>{b.current?.send((0,i.encodeStdin)(a))},[]),sendResize:(0,d.useCallback)((a,c)=>{b.current?.send((0,i.encodeResize)(a,c))},[])}})(a=>n.current(a)),{terminalRef:s,write:t,fit:u,isReady:v}=(0,h.default)({fontSize:12,onInput:q,onResize:r});(0,d.useEffect)(()=>{n.current=t},[t]),(0,d.useEffect)(()=>{if(a&&v&&!m.current){m.current=!0;let{cols:a,rows:b}=u();o(j,a,b)}},[a,v,j,o,u]);let w=(0,d.useCallback)(()=>{p(),m.current=!1,b(!1),window.location.reload()},[p,b]);return(0,c.jsx)(f.Dialog,{open:a,onOpenChange:a=>{a||w()},children:(0,c.jsxs)(f.DialogContent,{className:"sm:max-w-2xl",showCloseButton:!1,children:[(0,c.jsx)(f.DialogHeader,{children:(0,c.jsx)(f.DialogTitle,{children:k})}),(0,c.jsx)("div",{ref:s,className:"h-[400px] w-full rounded-md bg-black p-2"}),(0,c.jsx)(f.DialogFooter,{children:(0,c.jsx)(g.Button,{variant:"outline",onClick:w,children:l("close")})})]})})}],849612)},191926,a=>{"use strict";var b=a.i(579168),c=a.i(627068),d=a.i(332759),e=a.i(817359),f=a.i(468695),g=a.i(508171),h=a.i(127669),i=a.i(41910),j=a.i(113952),k=a.i(119059),l=a.i(369773),m=a.i(597435),n=a.i(532572),o=a.i(311988),p=a.i(737098),q=a.i(734637),r=a.i(396465),s=a.i(841527),t=a.i(849612),u=a.i(428496);let v=async b=>{let{requireAuth:c}=await a.A(120441),{loadMessagesServer:d}=await a.A(168414);return c(b,async()=>({props:{messages:await d()}}),{skipPreflight:!0})};a.s(["default",0,()=>{let a=(0,j.useTranslations)("toolsRequired"),b=(0,i.useRouter)().query.from||"/",{status:c,checking:d,recheck:e}=(()=>{let[a,b]=(0,h.useState)(null),[c,d]=(0,h.useState)(!0),e=(0,h.useCallback)(async a=>{d(!0);try{let c=await fetch("/api/preflight/runtime",{method:a}),d=await c.json();b(d)}catch{}finally{d(!1)}},[]);return(0,h.useEffect)(()=>{e("GET")},[e]),{status:a,checking:c,recheck:(0,h.useCallback)(()=>e("POST"),[e])}})(),[f,v]=(0,h.useState)(null);(0,h.useEffect)(()=>{c&&(0,u.isRuntimeOk)(c)&&(window.location.href=b)},[c,b]);let w=c?[{name:"tmux",ok:c.tmux.installed&&c.tmux.compatible,version:c.tmux.version},{name:"Git",ok:c.git.installed,version:c.git.version},{name:"Claude CLI",ok:c.claude.installed,version:c.claude.version}]:[],x=c?((a,b)=>{if(!(a.tmux.installed&&a.tmux.compatible)){let c=a.tmux.installed&&!a.tmux.compatible;return{command:c?"tmux-upgrade":"tmux-install",label:b(c?"upgradeTmux":"installTmux")}}return a.git.installed?a.claude.installed?null:{command:"claude",label:b("installClaude")}:{command:"git",label:b("installGit")}})(c,a):null;return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(k.default,{children:(0,g.jsx)("title",{children:a("pageTitle")})}),(0,g.jsx)("div",{className:"flex min-h-svh items-center justify-center p-6",children:(0,g.jsxs)("div",{className:"w-full max-w-sm flex flex-col gap-6",children:[(0,g.jsx)(s.default,{shimmer:!0,size:"xl",className:"justify-center"}),d&&!c?(0,g.jsxs)("div",{className:"flex items-center justify-center gap-2 py-8 text-muted-foreground",children:[(0,g.jsx)(o.Loader2,{className:"h-5 w-5 animate-spin"}),(0,g.jsx)("span",{className:"text-sm",children:a("checking")})]}):c&&(0,u.isRuntimeOk)(c)?(0,g.jsxs)("div",{className:"flex items-center justify-center gap-2 py-8 text-positive",children:[(0,g.jsx)(m.Check,{className:"h-5 w-5"}),(0,g.jsx)("span",{className:"text-sm font-medium",children:a("allGood")})]}):(0,g.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,g.jsxs)("div",{className:"flex items-center gap-2 text-ui-amber",children:[(0,g.jsx)(l.AlertTriangle,{className:"h-5 w-5 shrink-0"}),(0,g.jsx)("p",{className:"text-sm font-medium",children:a("title")})]}),(0,g.jsx)("p",{className:"text-sm text-muted-foreground",children:a("description")}),(0,g.jsx)("div",{className:"space-y-1.5",children:w.map(a=>(0,g.jsxs)("div",{className:"flex items-center gap-2 text-sm",children:[a.ok?(0,g.jsx)(m.Check,{className:"h-4 w-4 shrink-0 text-positive"}):(0,g.jsx)(q.X,{className:"h-4 w-4 shrink-0 text-negative"}),(0,g.jsx)("span",{className:a.ok?"text-muted-foreground":"text-foreground font-medium",children:a.name}),a.version&&(0,g.jsxs)("span",{className:"text-xs text-muted-foreground",children:["(",a.version,")"]})]},a.name))}),(0,g.jsxs)("div",{className:"flex flex-col gap-2",children:[x&&(0,g.jsxs)(r.Button,{size:"lg",className:"h-12 w-full",onClick:()=>v(x),children:[(0,g.jsx)(n.Download,{className:"mr-1 h-4 w-4"}),x.label]}),(0,g.jsxs)(r.Button,{variant:"outline",size:"lg",className:"h-12 w-full",disabled:d,onClick:e,children:[(0,g.jsx)(p.RefreshCcw,{className:"mr-1 h-4 w-4"}),a("recheck")]})]})]}),f&&(0,g.jsx)(t.default,{open:!0,onOpenChange:()=>v(null),command:f.command,label:f.label})]})})]})},"getServerSideProps",0,v],295832);var w=a.i(295832),x=a.i(509193);let y=(0,d.hoist)(w,"default"),z=(0,d.hoist)(w,"getStaticProps"),A=(0,d.hoist)(w,"getStaticPaths"),B=(0,d.hoist)(w,"getServerSideProps"),C=(0,d.hoist)(w,"config"),D=(0,d.hoist)(w,"reportWebVitals"),E=(0,d.hoist)(w,"unstable_getStaticProps"),F=(0,d.hoist)(w,"unstable_getStaticPaths"),G=(0,d.hoist)(w,"unstable_getStaticParams"),H=(0,d.hoist)(w,"unstable_getServerProps"),I=(0,d.hoist)(w,"unstable_getServerSideProps"),J=new b.PagesRouteModule({definition:{kind:c.RouteKind.PAGES,page:"/tools-required",pathname:"/tools-required",bundlePath:"",filename:""},distDir:".next",relativeProjectDir:"",components:{App:f.default,Document:e.default},userland:w}),K=(0,x.getHandler)({srcPage:"/tools-required",config:C,userland:w,routeModule:J,getStaticPaths:A,getStaticProps:z,getServerSideProps:B});a.s(["config",0,C,"default",0,y,"getServerSideProps",0,B,"getStaticPaths",0,A,"getStaticProps",0,z,"handler",0,K,"reportWebVitals",0,D,"routeModule",0,J,"unstable_getServerProps",0,H,"unstable_getServerSideProps",0,I,"unstable_getStaticParams",0,G,"unstable_getStaticPaths",0,F,"unstable_getStaticProps",0,E],191926)},120441,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_require-auth_ts_0lybmh2._.js"].map(b=>a.l(b))).then(()=>b(56975)))},168414,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_load-messages_ts_11e7h4~._.js"].map(b=>a.l(b))).then(()=>b(387607)))}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=_00rrt71._.js.map
|