purplemux 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +49 -49
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/required-server-files.json +1 -1
- package/.next/standalone/.next/routes-manifest.json +7 -7
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__06an6au._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__02f5zis._.js → [root-of-the-server]__08dxtof._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08z3drz._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__11uqzxt._.js → [root-of-the-server]__0kumyrr._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s7k1je._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_13qovxu._.js → _0.stp0n._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_11h746h._.js → _00cx0p2._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_02rms4q._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_06_8vkn._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0uwytsj._.js → _078y4dk._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0uph6rf._.js → _0kzht5v._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0m6flec._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0pg-q18._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0r90z3l._.js +8 -0
- package/.next/standalone/.next/server/chunks/ssr/_0w.1ts8._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0w6jc9p._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0z6yp7a._.js → _0y_feze._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0v2czf2._.js → _10dec5o._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{messages_01~7za1._.js → messages_0f3u1ly._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{messages_10_yt3k._.js → messages_0k204ao._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_de_terminal_json_[json]_cjs_05jirtw._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_en_terminal_json_[json]_cjs_0~ls3g-._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_es_terminal_json_[json]_cjs_04g2b1_._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_fr_terminal_json_[json]_cjs_0uhakya._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ja_terminal_json_[json]_cjs_0776z4f._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ko_terminal_json_[json]_cjs_06611.3._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_terminal_json_[json]_cjs_034yyg9._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_ru_terminal_json_[json]_cjs_0emk8~n._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_tr_terminal_json_[json]_cjs_0xpix8g._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_terminal_json_[json]_cjs_12vwl8a._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_terminal_json_[json]_cjs_0spg5z5._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_0t5csgq._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_use-intl_dist_esm_production_react_0bnxcps.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_components_00nri37._.js → src_components_05-kki3._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_components_0jrgsp7._.js → src_components_0fb83uz._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_components_0mhu5-5._.js → src_components_0gkfyrc._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_components_0~e6p9k._.js → src_components_0n3s0.7._.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/functions-config-manifest.json +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +49 -49
- package/.next/standalone/.next/server/pages/_app/build-manifest.json +6 -6
- package/.next/standalone/.next/server/pages/_app/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/_app.js +2 -2
- package/.next/standalone/.next/server/pages/_app.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/_document.js +3 -3
- package/.next/standalone/.next/server/pages/_document.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/_error/build-manifest.json +3 -3
- package/.next/standalone/.next/server/pages/_error/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/_error.js +4 -4
- package/.next/standalone/.next/server/pages/_error.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 +7 -7
- package/.next/standalone/.next/server/pages/index/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/index/react-loadable-manifest.json +4 -4
- package/.next/standalone/.next/server/pages/index.js +5 -5
- 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 +4 -4
- package/.next/standalone/.next/server/pages/login/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/login.js +4 -4
- 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 +6 -6
- package/.next/standalone/.next/server/pages/reports/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/reports.js +5 -5
- package/.next/standalone/.next/server/pages/reports.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/reset/build-manifest.json +4 -4
- package/.next/standalone/.next/server/pages/reset/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/reset.js +5 -5
- 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 +6 -6
- package/.next/standalone/.next/server/pages/stats/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/stats.js +5 -5
- package/.next/standalone/.next/server/pages/stats.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/tools-required/build-manifest.json +4 -4
- package/.next/standalone/.next/server/pages/tools-required/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/tools-required.js +5 -5
- 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 +6 -6
- package/.next/standalone/.next/server/pages/webview/client-build-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/webview.js +5 -5
- package/.next/standalone/.next/server/pages/webview.js.nft.json +1 -1
- package/.next/standalone/.next/server/pages/zh-CN/404.html +1 -1
- package/.next/standalone/.next/server/pages/zh-CN/500.html +1 -1
- package/.next/standalone/.next/server/pages/zh-TW/404.html +1 -1
- package/.next/standalone/.next/server/pages/zh-TW/500.html +1 -1
- package/.next/standalone/.next/static/chunks/01.oujz.z9cq..js +1 -0
- package/.next/standalone/.next/static/chunks/{0~23in~aqup16.js → 0176ysv-agwwx.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0icark0o3b_6j.js → 03s5e91.zrsi_.js} +4 -4
- package/.next/standalone/.next/static/chunks/{0h57gqab.hlp8.js → 05zk.ks4roh-4.js} +6 -6
- package/.next/standalone/.next/static/chunks/05~6_0_288m3t.js +1 -0
- package/.next/standalone/.next/static/chunks/06uy95ammv.ud.js +1 -0
- package/.next/standalone/.next/static/chunks/08-el~h0ax929.js +1 -0
- package/.next/standalone/.next/static/chunks/{14_wa..vd6~2y.js → 0984g4~der6-4.js} +2 -2
- package/.next/standalone/.next/static/chunks/{016ho28abx9rt.js → 0_psc1~qmka.m.js} +4 -4
- package/.next/standalone/.next/static/chunks/{00s6ekn81~vi-.js → 0ap~c~__qw2_0.js} +6 -6
- package/.next/standalone/.next/static/chunks/0cir.n19rqu--.js +8 -0
- package/.next/standalone/.next/static/chunks/0dpud6_2~.2iv.js +1 -0
- package/.next/standalone/.next/static/chunks/0euxle0n3zjm3.js +1 -0
- package/.next/standalone/.next/static/chunks/0fax5v7rwhm7g.js +6 -0
- package/.next/standalone/.next/static/chunks/{0wf0tx~eo05t~.js → 0gfoib7v3q4k_.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0538dx15fw8_n.js → 0kep81gqgj5f5.js} +7 -7
- package/.next/standalone/.next/static/chunks/0kriln8d9.mdo.js +1 -0
- package/.next/standalone/.next/static/chunks/{0eia27slkj8a0.js → 0l.88yoxq6tq8.js} +6 -6
- package/.next/standalone/.next/static/chunks/{0ea-k_kbq5gi1.js → 0n7jmg60eqx1a.js} +1 -1
- package/.next/standalone/.next/static/chunks/0nm1wy7i1z64_.js +1 -0
- package/.next/standalone/.next/static/chunks/0o1e0e_okaxww.js +1 -0
- package/.next/standalone/.next/static/chunks/{0l80eb3i.wx6k.js → 0p2m6i37_wprv.js} +1 -1
- package/.next/standalone/.next/static/chunks/0qz-agdkp9v1q.js +16 -0
- package/.next/standalone/.next/static/chunks/0w1v1a5wi.byq.js +1 -0
- package/.next/standalone/.next/static/chunks/0wha_~zny181w.js +1 -0
- package/.next/standalone/.next/static/chunks/0wu-q.gmu-64d.js +5 -0
- package/.next/standalone/.next/static/chunks/{00l132mp04ubq.js → 0xfp8sfehtui9.js} +1 -1
- package/.next/standalone/.next/static/chunks/0yzd69blq638o.js +1 -0
- package/.next/standalone/.next/static/chunks/{0erebazb6ppou.js → 12f3vk2rnkb8u.js} +6 -6
- package/.next/standalone/.next/static/chunks/135cvydv7redz.js +1 -0
- package/.next/standalone/.next/static/chunks/14rrqgjvv0_69.js +1 -0
- package/.next/standalone/.next/static/chunks/14vposxx99rq4.js +1 -0
- package/.next/standalone/.next/static/chunks/{09mlfwheuib_9.js → 168.xhj-0lt8a.js} +1 -1
- package/.next/standalone/.next/static/chunks/1792_-2m366un.js +1 -0
- package/.next/standalone/.next/static/chunks/{0nr5ul7mf1bo7.js → 179vwj~zm1gya.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-10c4z.4l4dxnu.js → turbopack-0.6hkxuraykc4.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-05.ehb143ourd.js → turbopack-0g2bivvnd2gyd.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0ji23rzquaykn.js → turbopack-0heaqdupr4xj6.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-02wj1-z8.1081.js → turbopack-0jcfxeuy1ge85.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-07.z46yb_52p5.js → turbopack-0rntg0~hh7h.0.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-05j~l.6~_nm9l.js → turbopack-0sk1uk-fkcqdx.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-11utvoktq4lmr.js → turbopack-0w89gj59tho~b.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-04t3309-jsj3y.js → turbopack-0~gn911-6yqk2.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0-rpf9ad3km~v.js → turbopack-14fnzd5yh28gy.js} +1 -1
- package/.next/standalone/.next/static/{bybcCRIlOhSPtqdnJUPM- → pZhcwQ83aP87HDTIzzyJ6}/_buildManifest.js +8 -8
- package/.next/standalone/.next/static/{bybcCRIlOhSPtqdnJUPM- → pZhcwQ83aP87HDTIzzyJ6}/_clientMiddlewareManifest.js +1 -1
- package/.next/standalone/messages/de/terminal.json +1 -1
- package/.next/standalone/messages/en/terminal.json +1 -1
- package/.next/standalone/messages/es/terminal.json +1 -1
- package/.next/standalone/messages/fr/terminal.json +1 -1
- package/.next/standalone/messages/ja/terminal.json +1 -1
- package/.next/standalone/messages/ko/terminal.json +1 -1
- package/.next/standalone/messages/pt-BR/terminal.json +1 -1
- package/.next/standalone/messages/ru/terminal.json +1 -1
- package/.next/standalone/messages/tr/terminal.json +1 -1
- package/.next/standalone/messages/zh-CN/terminal.json +1 -1
- package/.next/standalone/messages/zh-TW/terminal.json +1 -1
- package/.next/standalone/package.json +6 -5
- package/.next/standalone/server.js +1 -1
- package/.next/standalone/src/config/tmux.conf +11 -3
- package/README.de.md +41 -14
- package/README.es.md +41 -14
- package/README.fr.md +41 -14
- package/README.ja.md +41 -14
- package/README.ko.md +41 -14
- package/README.md +41 -14
- package/README.pt-BR.md +41 -14
- package/README.ru.md +41 -14
- package/README.tr.md +41 -14
- package/README.zh-CN.md +41 -14
- package/README.zh-TW.md +41 -14
- package/dist/server.js +6 -5
- package/package.json +6 -5
- package/src/config/tmux.conf +11 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0y7-o~r._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_08ytq3p._.js +0 -8
- package/.next/standalone/.next/static/chunks/00snihvygw9l4.js +0 -1
- package/.next/standalone/.next/static/chunks/00yfl7agnve...js +0 -5
- package/.next/standalone/.next/static/chunks/02ocrfbfg24nx.js +0 -1
- package/.next/standalone/.next/static/chunks/04rkjr-2duj5b.js +0 -1
- package/.next/standalone/.next/static/chunks/0c8wt2p0xhe5i.js +0 -1
- package/.next/standalone/.next/static/chunks/0duqg-kf_y-i3.js +0 -1
- package/.next/standalone/.next/static/chunks/0ep22zye8flqz.js +0 -1
- package/.next/standalone/.next/static/chunks/0ff6a07hvp4pu.js +0 -6
- package/.next/standalone/.next/static/chunks/0fg9x61ohrtv3.js +0 -1
- package/.next/standalone/.next/static/chunks/0fgx5m8vdxaap.js +0 -1
- package/.next/standalone/.next/static/chunks/0m_sn0gry7q~c.js +0 -1
- package/.next/standalone/.next/static/chunks/0p5c0gp6gyhh6.js +0 -1
- package/.next/standalone/.next/static/chunks/0qsmo2marl-6d.js +0 -16
- package/.next/standalone/.next/static/chunks/0ul9.j_tmw365.js +0 -1
- package/.next/standalone/.next/static/chunks/107yj1xx63glr.js +0 -1
- package/.next/standalone/.next/static/chunks/12_04jv.ecbd-.js +0 -1
- package/.next/standalone/.next/static/chunks/14cccdp9z2qvf.js +0 -8
- package/.next/standalone/.next/static/chunks/14yj.l6qq359_.js +0 -1
- package/.next/standalone/.next/static/chunks/1786bmcy3s8sd.js +0 -1
- package/.next/standalone/.next/static/chunks/17mf_h-e8sebp.js +0 -1
- /package/.next/standalone/.next/static/{bybcCRIlOhSPtqdnJUPM- → pZhcwQ83aP87HDTIzzyJ6}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# purplemux
|
|
2
2
|
|
|
3
|
-
**Claude Code, many tasks at once. Faster.**
|
|
3
|
+
**Claude Code and Codex, many tasks at once. Faster.**
|
|
4
4
|
|
|
5
5
|
Every session on a single screen. Uninterrupted, even on your phone.
|
|
6
6
|
|
|
@@ -24,7 +24,7 @@ Prefer a native app? Grab the macOS Electron build from the [latest release](htt
|
|
|
24
24
|
|
|
25
25
|
## Why purplemux
|
|
26
26
|
|
|
27
|
-
- **Multi-session dashboard** — See working/needs-input status for every Claude Code session at a glance
|
|
27
|
+
- **Multi-session dashboard** — See working/needs-input status for every Claude Code and Codex session at a glance
|
|
28
28
|
- **Rate limit monitoring** — 5-hour / 7-day remaining usage with reset countdown
|
|
29
29
|
- **Push notifications** — Desktop and mobile alerts when a task finishes or needs input
|
|
30
30
|
- **Mobile & multi-device** — Reach the same session from a phone, tablet, or another desktop
|
|
@@ -49,20 +49,23 @@ Plus
|
|
|
49
49
|
- **Keyboard shortcuts** — Splits, tab switching, focus movement
|
|
50
50
|
- **Terminal themes** — Dark / light mode, multiple color themes
|
|
51
51
|
- **Workspaces & groups** — Save and restore panel layouts, tabs, and working directories. Organize workspaces into groups with drag-and-drop
|
|
52
|
-
- **Git workflow** — Side-by-side / line-by-line diff with syntax highlighting, inline hunk expansion, and a paginated history tab. Fetch / pull / push from the panel with ahead/behind indicators — if sync fails (dirty worktree, conflicts), Ask Claude in one click
|
|
52
|
+
- **Git workflow** — Side-by-side / line-by-line diff with syntax highlighting, inline hunk expansion, and a paginated history tab. Fetch / pull / push from the panel with ahead/behind indicators — if sync fails (dirty worktree, conflicts), Ask Claude or Codex in one click
|
|
53
53
|
- **Web browser panel** — Embedded browser for checking dev output (Electron). Drive it from the `purplemux` CLI and switch viewports with a built-in device emulator
|
|
54
|
+
- **Agent tabs** — Start Claude, Codex, or a combined session list from the new-tab menu
|
|
54
55
|
|
|
55
|
-
### Claude Code integration
|
|
56
|
+
### Claude Code and Codex integration
|
|
56
57
|
|
|
57
58
|
- **Real-time status** — Working / needs-input indicators with session switching
|
|
58
59
|
- **Live session view** — Messages, tool calls, tasks, permission prompts, thinking blocks
|
|
59
|
-
- **
|
|
60
|
+
- **Codex tabs** — Launch Codex CLI sessions with the same tmux-backed persistence as Claude
|
|
61
|
+
- **Session list** — Browse and resume recent Claude and Codex sessions from one combined view
|
|
62
|
+
- **One-click resume** — Restart a paused Claude or Codex session directly from the browser
|
|
60
63
|
- **Auto resume** — Recover previous Claude sessions on server start
|
|
61
64
|
- **Quick prompts** — Register frequently used prompts and send with one click
|
|
62
65
|
- **Attachments** — Drop images into the chat input, or attach files to insert their paths. Works on mobile
|
|
63
66
|
- **Message history** — Reuse previous messages
|
|
64
|
-
- **Usage analytics** —
|
|
65
|
-
- **Rate limits** — 5-hour / 7-day remaining usage with reset countdown
|
|
67
|
+
- **Usage analytics** — Claude + Codex tokens, cost, per-project breakdowns, and daily AI reports
|
|
68
|
+
- **Rate limits** — 5-hour / 7-day remaining usage with reset countdown for supported providers
|
|
66
69
|
|
|
67
70
|
### Mobile & accessibility
|
|
68
71
|
|
|
@@ -90,6 +93,22 @@ Plus
|
|
|
90
93
|
- [Node.js](https://nodejs.org/) 20+
|
|
91
94
|
- [tmux](https://github.com/tmux/tmux)
|
|
92
95
|
|
|
96
|
+
Required for Claude tabs. Install Claude Code and sign in before starting a Claude tab:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
curl -fsSL https://claude.ai/install.sh | bash
|
|
100
|
+
# or, with Homebrew latest channel
|
|
101
|
+
brew install --cask claude-code@latest
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Optional for Codex tabs. Install Codex CLI and sign in before starting a Codex tab:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npm i -g @openai/codex
|
|
108
|
+
# or
|
|
109
|
+
brew install --cask codex
|
|
110
|
+
```
|
|
111
|
+
|
|
93
112
|
### npx (fastest)
|
|
94
113
|
|
|
95
114
|
```bash
|
|
@@ -103,6 +122,13 @@ npm install -g purplemux
|
|
|
103
122
|
purplemux
|
|
104
123
|
```
|
|
105
124
|
|
|
125
|
+
### CLI examples
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
purplemux tab create -w WS -t codex-cli -n "fix auth"
|
|
129
|
+
purplemux tab create -w WS -t agent-sessions
|
|
130
|
+
```
|
|
131
|
+
|
|
106
132
|
### Run from source
|
|
107
133
|
|
|
108
134
|
```bash
|
|
@@ -199,24 +225,25 @@ The default is HTTP. Always use HTTPS when exposing the app externally:
|
|
|
199
225
|
▼ ▼ ▼
|
|
200
226
|
┌─────────────────────────────────────────────────────────────┐
|
|
201
227
|
│ System │
|
|
202
|
-
│ tmux (purple socket)
|
|
228
|
+
│ tmux (purple socket) Agent CLIs │
|
|
203
229
|
│ ┌────────┐ ┌────────┐ ┌────────────────────────────┐ │
|
|
204
|
-
│ │Session1│ │Session2│ ... │
|
|
205
|
-
│ │ (shell)│ │ (shell)│ │
|
|
206
|
-
│ └────────┘ └────────┘ │
|
|
230
|
+
│ │Session1│ │Session2│ ... │ Claude Code │ │
|
|
231
|
+
│ │ (shell)│ │ (shell)│ │ ~/.claude/projects/*.jsonl │ │
|
|
232
|
+
│ └────────┘ └────────┘ │ Codex │ │
|
|
233
|
+
│ │ ~/.codex/sessions/*.jsonl │ │
|
|
207
234
|
│ └────────────────────────────┘ │
|
|
208
235
|
└─────────────────────────────────────────────────────────────┘
|
|
209
236
|
```
|
|
210
237
|
|
|
211
238
|
**Terminal I/O** — xterm.js connects to node-pty via WebSocket; node-pty attaches to tmux sessions. A binary protocol handles stdin/stdout/resize with backpressure control.
|
|
212
239
|
|
|
213
|
-
**Status detection** — Claude Code
|
|
240
|
+
**Status detection** — Agent event hooks deliver instant updates via HTTP POST. Claude Code uses `SessionStart`, `Stop`, and `Notification`; Codex uses `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop`, and `PermissionRequest`. Polling every 5–15s inspects process trees and analyzes the last 8KB of JSONL files.
|
|
214
241
|
|
|
215
|
-
**Timeline** — Watches JSONL session logs under `~/.claude/projects/`, parses new lines on change, and streams structured entries to the browser.
|
|
242
|
+
**Timeline** — Watches JSONL session logs under `~/.claude/projects/` and `~/.codex/sessions/`, parses new lines on change, and streams structured entries to the browser.
|
|
216
243
|
|
|
217
244
|
**tmux isolation** — Uses a dedicated `purple` socket, completely separate from your existing tmux. No prefix key, no status bar.
|
|
218
245
|
|
|
219
|
-
**Auto recovery** — On server start, restores previous Claude sessions via `claude --resume {sessionId}`.
|
|
246
|
+
**Auto recovery** — On server start, restores previous Claude sessions via `claude --resume {sessionId}`. Codex sessions can be resumed from the session list or with `codex resume {sessionId}`.
|
|
220
247
|
|
|
221
248
|
## License
|
|
222
249
|
|
package/README.pt-BR.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# purplemux
|
|
2
2
|
|
|
3
|
-
**Claude Code, várias tarefas ao mesmo tempo. Mais rápido.**
|
|
3
|
+
**Claude Code e Codex, várias tarefas ao mesmo tempo. Mais rápido.**
|
|
4
4
|
|
|
5
5
|
Todas as sessões em uma tela só. Sem quebras, até no celular.
|
|
6
6
|
|
|
@@ -24,7 +24,7 @@ Prefere um app nativo? Baixe a versão Electron para macOS na [última release](
|
|
|
24
24
|
|
|
25
25
|
## Por que purplemux
|
|
26
26
|
|
|
27
|
-
- **Painel multissessão** — Veja o status «trabalhando / aguardando entrada» de todas as sessões do Claude Code de relance
|
|
27
|
+
- **Painel multissessão** — Veja o status «trabalhando / aguardando entrada» de todas as sessões do Claude Code e do Codex de relance
|
|
28
28
|
- **Monitor de rate limit** — Saldo de 5 horas / 7 dias com contagem regressiva até o reset
|
|
29
29
|
- **Notificações push** — Alertas no desktop e no mobile quando uma tarefa termina ou precisa de entrada
|
|
30
30
|
- **Mobile e multi-dispositivo** — Acesse a mesma sessão a partir do celular, tablet ou outro desktop
|
|
@@ -49,20 +49,23 @@ E ainda
|
|
|
49
49
|
- **Atalhos de teclado** — Divisão, troca de abas, movimento de foco
|
|
50
50
|
- **Temas do terminal** — Modo escuro / claro e vários esquemas de cores
|
|
51
51
|
- **Workspaces e grupos** — Salve e restaure layouts de painéis, abas e diretórios de trabalho por workspace. Organize os workspaces em grupos com arrastar e soltar
|
|
52
|
-
- **Fluxo de trabalho Git** — Side-by-side / Line-by-line com destaque de sintaxe, expansão de hunks inline e uma aba de histórico paginada. Fetch / pull / push direto do painel com indicadores ahead/behind — se o sync falhar (dirty worktree, conflitos), Ask Claude em um clique
|
|
52
|
+
- **Fluxo de trabalho Git** — Side-by-side / Line-by-line com destaque de sintaxe, expansão de hunks inline e uma aba de histórico paginada. Fetch / pull / push direto do painel com indicadores ahead/behind — se o sync falhar (dirty worktree, conflitos), Ask Claude ou Codex em um clique
|
|
53
53
|
- **Painel de navegador web** — Navegador embutido ao lado do terminal para conferir o resultado de desenvolvimento (Electron). Controle pelo CLI `purplemux` e alterne viewports com um emulador de dispositivo integrado
|
|
54
|
+
- **Abas de agentes** — Inicie Claude, Codex ou uma lista de sessões combinada pelo menu de nova aba
|
|
54
55
|
|
|
55
|
-
### Integração com Claude Code
|
|
56
|
+
### Integração com Claude Code e Codex
|
|
56
57
|
|
|
57
58
|
- **Status em tempo real** — Indicadores de trabalhando / aguardando entrada e troca entre sessões
|
|
58
59
|
- **Visualização da sessão ao vivo** — Mensagens, chamadas de ferramentas, tarefas, solicitações de permissão e blocos thinking
|
|
59
|
-
- **
|
|
60
|
+
- **Abas Codex** — Inicie sessões do Codex CLI com a mesma persistência baseada em tmux do Claude
|
|
61
|
+
- **Lista de sessões** — Navegue e retome sessões recentes do Claude e do Codex em uma visualização combinada
|
|
62
|
+
- **Resume em um clique** — Retome sessões pausadas do Claude ou do Codex direto do navegador
|
|
60
63
|
- **Resume automático** — Restauração automática de sessões anteriores do Claude ao iniciar o servidor
|
|
61
64
|
- **Prompts rápidos** — Cadastre prompts frequentes e envie com um clique
|
|
62
65
|
- **Anexos** — Solte imagens no campo de chat ou anexe arquivos para inserir o caminho. Funciona também no mobile
|
|
63
66
|
- **Histórico de mensagens** — Reutilize mensagens anteriores
|
|
64
|
-
- **Estatísticas de uso** — Tokens
|
|
65
|
-
- **Rate limit** — Saldo de 5 horas / 7 dias com contagem regressiva de reset
|
|
67
|
+
- **Estatísticas de uso** — Tokens do Claude + Codex, custo, análise por projeto e relatórios de IA diários
|
|
68
|
+
- **Rate limit** — Saldo de 5 horas / 7 dias com contagem regressiva de reset para provedores compatíveis
|
|
66
69
|
|
|
67
70
|
### Mobile e acessibilidade
|
|
68
71
|
|
|
@@ -90,6 +93,22 @@ E ainda
|
|
|
90
93
|
- [Node.js](https://nodejs.org/) 20+
|
|
91
94
|
- [tmux](https://github.com/tmux/tmux)
|
|
92
95
|
|
|
96
|
+
Necessário para abas Claude. Instale o Claude Code e faça login antes de iniciar uma aba Claude:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
curl -fsSL https://claude.ai/install.sh | bash
|
|
100
|
+
# ou com o canal latest do Homebrew
|
|
101
|
+
brew install --cask claude-code@latest
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Opcional para abas Codex. Instale o Codex CLI e faça login antes de iniciar uma aba Codex:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npm i -g @openai/codex
|
|
108
|
+
# ou
|
|
109
|
+
brew install --cask codex
|
|
110
|
+
```
|
|
111
|
+
|
|
93
112
|
### npx (mais rápido)
|
|
94
113
|
|
|
95
114
|
```bash
|
|
@@ -103,6 +122,13 @@ npm install -g purplemux
|
|
|
103
122
|
purplemux
|
|
104
123
|
```
|
|
105
124
|
|
|
125
|
+
### Exemplos de CLI
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
purplemux tab create -w WS -t codex-cli -n "fix auth"
|
|
129
|
+
purplemux tab create -w WS -t agent-sessions
|
|
130
|
+
```
|
|
131
|
+
|
|
106
132
|
### A partir do código-fonte
|
|
107
133
|
|
|
108
134
|
```bash
|
|
@@ -199,24 +225,25 @@ Por padrão, o protocolo é HTTP. Sempre use HTTPS ao expor externamente:
|
|
|
199
225
|
▼ ▼ ▼
|
|
200
226
|
┌─────────────────────────────────────────────────────────────┐
|
|
201
227
|
│ System │
|
|
202
|
-
│ tmux (purple socket)
|
|
228
|
+
│ tmux (purple socket) Agent CLIs │
|
|
203
229
|
│ ┌────────┐ ┌────────┐ ┌────────────────────────────┐ │
|
|
204
|
-
│ │Session1│ │Session2│ ... │
|
|
205
|
-
│ │ (shell)│ │ (shell)│ │
|
|
206
|
-
│ └────────┘ └────────┘ │
|
|
230
|
+
│ │Session1│ │Session2│ ... │ Claude Code │ │
|
|
231
|
+
│ │ (shell)│ │ (shell)│ │ ~/.claude/projects/*.jsonl │ │
|
|
232
|
+
│ └────────┘ └────────┘ │ Codex │ │
|
|
233
|
+
│ │ ~/.codex/sessions/*.jsonl │ │
|
|
207
234
|
│ └────────────────────────────┘ │
|
|
208
235
|
└─────────────────────────────────────────────────────────────┘
|
|
209
236
|
```
|
|
210
237
|
|
|
211
238
|
**I/O do terminal** — xterm.js conecta-se ao node-pty via WebSocket e o node-pty se acopla às sessões do tmux. Um protocolo binário trata stdin/stdout/resize com controle de backpressure.
|
|
212
239
|
|
|
213
|
-
**Detecção de status** — Os hooks de eventos
|
|
240
|
+
**Detecção de status** — Os hooks de eventos dos agentes entregam atualizações imediatas via HTTP POST. Claude Code usa `SessionStart`, `Stop` e `Notification`; Codex usa `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop` e `PermissionRequest`. A cada 5–15 s a árvore de processos é inspecionada e os últimos 8 KB dos arquivos JSONL são analisados.
|
|
214
241
|
|
|
215
|
-
**Timeline** — Observa os logs de sessão JSONL em `~/.claude/projects/`, faz o parse das novas linhas a cada mudança e envia entradas estruturadas para o navegador.
|
|
242
|
+
**Timeline** — Observa os logs de sessão JSONL em `~/.claude/projects/` e `~/.codex/sessions/`, faz o parse das novas linhas a cada mudança e envia entradas estruturadas para o navegador.
|
|
216
243
|
|
|
217
244
|
**Isolamento do tmux** — Usa um socket `purple` dedicado, completamente separado do seu tmux existente. Sem tecla prefixo nem barra de status.
|
|
218
245
|
|
|
219
|
-
**Recuperação automática** — Ao iniciar o servidor, sessões anteriores do Claude são restauradas via `claude --resume {sessionId}`.
|
|
246
|
+
**Recuperação automática** — Ao iniciar o servidor, sessões anteriores do Claude são restauradas via `claude --resume {sessionId}`. Sessões do Codex podem ser retomadas pela lista de sessões ou com `codex resume {sessionId}`.
|
|
220
247
|
|
|
221
248
|
## License
|
|
222
249
|
|
package/README.ru.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# purplemux
|
|
2
2
|
|
|
3
|
-
**Claude Code, много задач одновременно. Быстрее.**
|
|
3
|
+
**Claude Code и Codex, много задач одновременно. Быстрее.**
|
|
4
4
|
|
|
5
5
|
Все сессии на одном экране. Без обрывов — даже с телефона.
|
|
6
6
|
|
|
@@ -24,7 +24,7 @@ npx purplemux@latest
|
|
|
24
24
|
|
|
25
25
|
## Почему purplemux
|
|
26
26
|
|
|
27
|
-
- **Дашборд нескольких сессий** — одним взглядом видите статус «работает / ждёт ввода» по каждой сессии Claude Code
|
|
27
|
+
- **Дашборд нескольких сессий** — одним взглядом видите статус «работает / ждёт ввода» по каждой сессии Claude Code и Codex
|
|
28
28
|
- **Мониторинг rate limit** — остаток за 5 часов / 7 дней и обратный отсчёт до сброса
|
|
29
29
|
- **Push-уведомления** — оповещения на десктопе и мобильном, когда задача завершена или нужен ввод
|
|
30
30
|
- **Мобильность и мульти-устройства** — доступ к одной и той же сессии с телефона, планшета или другого рабочего места
|
|
@@ -49,20 +49,23 @@ npx purplemux@latest
|
|
|
49
49
|
- **Горячие клавиши** — разделение, переключение вкладок, перемещение фокуса
|
|
50
50
|
- **Темы терминала** — тёмный / светлый режим, несколько цветовых тем
|
|
51
51
|
- **Рабочие пространства и группы** — сохранение и восстановление раскладки панелей, вкладок и рабочих каталогов в пределах рабочего пространства. Объединяйте рабочие пространства в группы перетаскиванием
|
|
52
|
-
- **Git-воркфлоу** — Side-by-side / Line-by-line с подсветкой синтаксиса, инлайновое раскрытие hunk и отдельная вкладка истории с пагинацией. Fetch / pull / push прямо из панели с индикаторами ahead/behind — при ошибке синхронизации (dirty worktree, конфликты) можно в один клик Ask Claude
|
|
52
|
+
- **Git-воркфлоу** — Side-by-side / Line-by-line с подсветкой синтаксиса, инлайновое раскрытие hunk и отдельная вкладка истории с пагинацией. Fetch / pull / push прямо из панели с индикаторами ahead/behind — при ошибке синхронизации (dirty worktree, конфликты) можно в один клик Ask Claude или Codex
|
|
53
53
|
- **Панель веб-браузера** — встроенный браузер рядом с терминалом для проверки результата разработки (Electron). Управляется через CLI `purplemux`, со встроенным эмулятором устройств для переключения viewport
|
|
54
|
+
- **Вкладки агентов** — запускайте Claude, Codex или общий список сессий из меню новой вкладки
|
|
54
55
|
|
|
55
|
-
### Интеграция с Claude Code
|
|
56
|
+
### Интеграция с Claude Code и Codex
|
|
56
57
|
|
|
57
58
|
- **Статус в реальном времени** — индикаторы «работает / ждёт ввода», переключение между сессиями
|
|
58
59
|
- **Live-вид сессии** — сообщения, вызовы инструментов, задачи, запросы разрешений, блоки thinking
|
|
59
|
-
- **
|
|
60
|
+
- **Вкладки Codex** — запускайте сессии Codex CLI с той же tmux-персистентностью, что и Claude
|
|
61
|
+
- **Список сессий** — просматривайте и возобновляйте недавние сессии Claude и Codex в одном общем представлении
|
|
62
|
+
- **Resume в один клик** — возобновляйте приостановленную сессию Claude или Codex прямо из браузера
|
|
60
63
|
- **Автоматический resume** — при старте сервера восстанавливаются предыдущие сессии Claude
|
|
61
64
|
- **Быстрые промпты** — сохраняйте часто используемые промпты и отправляйте их в один клик
|
|
62
65
|
- **Вложения** — перетаскивайте изображения в поле ввода чата или прикрепляйте файлы — путь будет вставлен автоматически. Работает и на мобильных
|
|
63
66
|
- **История сообщений** — повторно используйте прошлые сообщения
|
|
64
|
-
- **Статистика использования** — токены
|
|
65
|
-
- **Rate limit** — остаток за 5 часов / 7
|
|
67
|
+
- **Статистика использования** — токены Claude + Codex, стоимость, разбивка по проектам, ежедневные AI-отчёты
|
|
68
|
+
- **Rate limit** — остаток за 5 часов / 7 дней с обратным отсчётом до сброса для поддерживаемых провайдеров
|
|
66
69
|
|
|
67
70
|
### Мобильность и доступность
|
|
68
71
|
|
|
@@ -90,6 +93,22 @@ npx purplemux@latest
|
|
|
90
93
|
- [Node.js](https://nodejs.org/) 20+
|
|
91
94
|
- [tmux](https://github.com/tmux/tmux)
|
|
92
95
|
|
|
96
|
+
Требуется для вкладок Claude. Установите Claude Code и войдите в аккаунт перед запуском вкладки Claude:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
curl -fsSL https://claude.ai/install.sh | bash
|
|
100
|
+
# или через Homebrew latest channel
|
|
101
|
+
brew install --cask claude-code@latest
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Необязательно для вкладок Codex. Установите Codex CLI и войдите в аккаунт перед запуском вкладки Codex:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npm i -g @openai/codex
|
|
108
|
+
# или
|
|
109
|
+
brew install --cask codex
|
|
110
|
+
```
|
|
111
|
+
|
|
93
112
|
### npx (самый быстрый способ)
|
|
94
113
|
|
|
95
114
|
```bash
|
|
@@ -103,6 +122,13 @@ npm install -g purplemux
|
|
|
103
122
|
purplemux
|
|
104
123
|
```
|
|
105
124
|
|
|
125
|
+
### Примеры CLI
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
purplemux tab create -w WS -t codex-cli -n "fix auth"
|
|
129
|
+
purplemux tab create -w WS -t agent-sessions
|
|
130
|
+
```
|
|
131
|
+
|
|
106
132
|
### Запуск из исходников
|
|
107
133
|
|
|
108
134
|
```bash
|
|
@@ -199,24 +225,25 @@ tailscale serve --bg off 8022
|
|
|
199
225
|
▼ ▼ ▼
|
|
200
226
|
┌─────────────────────────────────────────────────────────────┐
|
|
201
227
|
│ System │
|
|
202
|
-
│ tmux (purple socket)
|
|
228
|
+
│ tmux (purple socket) Agent CLIs │
|
|
203
229
|
│ ┌────────┐ ┌────────┐ ┌────────────────────────────┐ │
|
|
204
|
-
│ │Session1│ │Session2│ ... │
|
|
205
|
-
│ │ (shell)│ │ (shell)│ │
|
|
206
|
-
│ └────────┘ └────────┘ │
|
|
230
|
+
│ │Session1│ │Session2│ ... │ Claude Code │ │
|
|
231
|
+
│ │ (shell)│ │ (shell)│ │ ~/.claude/projects/*.jsonl │ │
|
|
232
|
+
│ └────────┘ └────────┘ │ Codex │ │
|
|
233
|
+
│ │ ~/.codex/sessions/*.jsonl │ │
|
|
207
234
|
│ └────────────────────────────┘ │
|
|
208
235
|
└─────────────────────────────────────────────────────────────┘
|
|
209
236
|
```
|
|
210
237
|
|
|
211
238
|
**I/O терминала** — xterm.js подключается к node-pty через WebSocket, а node-pty — к сессиям tmux. Бинарный протокол обрабатывает stdin/stdout/resize с контролем backpressure.
|
|
212
239
|
|
|
213
|
-
**Определение статуса** — хуки событий Claude Code
|
|
240
|
+
**Определение статуса** — хуки событий агентов мгновенно доставляют обновления по HTTP POST. Claude Code использует `SessionStart`, `Stop` и `Notification`; Codex использует `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop` и `PermissionRequest`. Каждые 5–15 с проверяется дерево процессов и анализируются последние 8 КБ JSONL-файла.
|
|
214
241
|
|
|
215
|
-
**Таймлайн** — отслеживает JSONL-логи сессий в `~/.claude/projects/`, разбирает новые строки при изменении файла и транслирует структурированные записи в браузер.
|
|
242
|
+
**Таймлайн** — отслеживает JSONL-логи сессий в `~/.claude/projects/` и `~/.codex/sessions/`, разбирает новые строки при изменении файла и транслирует структурированные записи в браузер.
|
|
216
243
|
|
|
217
244
|
**Изоляция tmux** — используется отдельный сокет `purple`, полностью независимый от уже работающего tmux. Без prefix-клавиши и статус-бара.
|
|
218
245
|
|
|
219
|
-
**Автовосстановление** — при старте сервера предыдущие сессии Claude восстанавливаются через `claude --resume {sessionId}`.
|
|
246
|
+
**Автовосстановление** — при старте сервера предыдущие сессии Claude восстанавливаются через `claude --resume {sessionId}`. Сессии Codex можно возобновить из списка сессий или командой `codex resume {sessionId}`.
|
|
220
247
|
|
|
221
248
|
## License
|
|
222
249
|
|
package/README.tr.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# purplemux
|
|
2
2
|
|
|
3
|
-
**Claude Code, birden çok işi aynı anda. Daha hızlı.**
|
|
3
|
+
**Claude Code ve Codex, birden çok işi aynı anda. Daha hızlı.**
|
|
4
4
|
|
|
5
5
|
Tüm oturumlarınız tek bir ekranda. Telefonda bile kopuksuz.
|
|
6
6
|
|
|
@@ -24,7 +24,7 @@ Yerel bir uygulama mı tercih edersiniz? macOS Electron sürümünü [en son sü
|
|
|
24
24
|
|
|
25
25
|
## Neden purplemux
|
|
26
26
|
|
|
27
|
-
- **Çoklu oturum panosu** — Tüm Claude Code oturumlarının «çalışıyor / giriş bekliyor» durumunu tek bakışta görün
|
|
27
|
+
- **Çoklu oturum panosu** — Tüm Claude Code ve Codex oturumlarının «çalışıyor / giriş bekliyor» durumunu tek bakışta görün
|
|
28
28
|
- **Rate limit takibi** — 5 saat / 7 gün kalan kullanım ve sıfırlama geri sayımı
|
|
29
29
|
- **Push bildirimleri** — Görev bitince veya giriş gerektiğinde masaüstü ve mobil uyarılar
|
|
30
30
|
- **Mobil ve çoklu cihaz** — Aynı oturuma telefonunuzdan, tabletinizden veya başka bir masaüstünden erişin
|
|
@@ -49,20 +49,23 @@ Ayrıca
|
|
|
49
49
|
- **Klavye kısayolları** — Bölme, sekme değiştirme, odak hareketi
|
|
50
50
|
- **Terminal temaları** — Koyu / açık mod, çeşitli renk temaları
|
|
51
51
|
- **Çalışma alanları & gruplar** — Panel düzenini, sekmeleri ve çalışma dizinlerini çalışma alanı bazında kaydedin ve geri yükleyin. Çalışma alanlarını sürükle-bırak ile gruplara ayırarak yönetin
|
|
52
|
-
- **Git iş akışı** — Side-by-side / Line-by-line geçişi ve sözdizimi vurgulamasıyla birlikte satır içi hunk genişletme ve sayfalandırılmış geçmiş sekmesi. Panelden doğrudan fetch / pull / push (ahead/behind göstergeleriyle) — sync başarısız olursa (dirty worktree, çakışma) tek tıkla Ask Claude
|
|
52
|
+
- **Git iş akışı** — Side-by-side / Line-by-line geçişi ve sözdizimi vurgulamasıyla birlikte satır içi hunk genişletme ve sayfalandırılmış geçmiş sekmesi. Panelden doğrudan fetch / pull / push (ahead/behind göstergeleriyle) — sync başarısız olursa (dirty worktree, çakışma) tek tıkla Ask Claude veya Codex
|
|
53
53
|
- **Web tarayıcı paneli** — Geliştirme çıktısını kontrol etmek için terminalin yanında gömülü tarayıcı (Electron). `purplemux` CLI'dan kontrol edin ve dahili cihaz öykünücüsüyle viewport'u değiştirin
|
|
54
|
+
- **Ajan sekmeleri** — Yeni sekme menüsünden Claude, Codex veya birleşik oturum listesini başlatın
|
|
54
55
|
|
|
55
|
-
### Claude Code entegrasyonu
|
|
56
|
+
### Claude Code ve Codex entegrasyonu
|
|
56
57
|
|
|
57
58
|
- **Gerçek zamanlı durum** — Çalışıyor / giriş bekliyor göstergeleri ve oturumlar arası geçiş
|
|
58
59
|
- **Canlı oturum görünümü** — Mesajlar, araç çağrıları, görevler, izin istekleri ve thinking blokları
|
|
59
|
-
- **
|
|
60
|
+
- **Codex sekmeleri** — Claude ile aynı tmux tabanlı kalıcılıkla Codex CLI oturumları başlatın
|
|
61
|
+
- **Oturum listesi** — Yakın tarihli Claude ve Codex oturumlarını tek birleşik görünümden inceleyin ve devam ettirin
|
|
62
|
+
- **Tek tıkla Resume** — Duraklatılmış Claude veya Codex oturumunu doğrudan tarayıcıdan devam ettirin
|
|
60
63
|
- **Otomatik Resume** — Sunucu başlatıldığında önceki Claude oturumlarını otomatik olarak kurtarır
|
|
61
64
|
- **Hızlı prompt'lar** — Sık kullanılan prompt'ları kaydedin ve tek tıkla gönderin
|
|
62
65
|
- **Ekler** — Sohbet alanına görseller bırakın veya dosya ekleyerek yolunu otomatik ekletin. Mobilde de çalışır
|
|
63
66
|
- **Mesaj geçmişi** — Önceki mesajları tekrar kullanın
|
|
64
|
-
- **Kullanım istatistikleri** —
|
|
65
|
-
- **Rate limit** — 5 saat / 7 gün kalan kullanım ve sıfırlama geri sayımı
|
|
67
|
+
- **Kullanım istatistikleri** — Claude + Codex token'ları, maliyet, proje bazlı kırılım, günlük AI raporları
|
|
68
|
+
- **Rate limit** — Desteklenen sağlayıcılar için 5 saat / 7 gün kalan kullanım ve sıfırlama geri sayımı
|
|
66
69
|
|
|
67
70
|
### Mobil ve erişilebilirlik
|
|
68
71
|
|
|
@@ -90,6 +93,22 @@ Ayrıca
|
|
|
90
93
|
- [Node.js](https://nodejs.org/) 20+
|
|
91
94
|
- [tmux](https://github.com/tmux/tmux)
|
|
92
95
|
|
|
96
|
+
Claude sekmeleri için gereklidir. Claude Code'u kurun ve Claude sekmesi başlatmadan önce giriş yapın:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
curl -fsSL https://claude.ai/install.sh | bash
|
|
100
|
+
# veya Homebrew latest kanalıyla
|
|
101
|
+
brew install --cask claude-code@latest
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Codex sekmeleri için isteğe bağlıdır. Codex CLI'ı kurun ve Codex sekmesi başlatmadan önce giriş yapın:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npm i -g @openai/codex
|
|
108
|
+
# veya
|
|
109
|
+
brew install --cask codex
|
|
110
|
+
```
|
|
111
|
+
|
|
93
112
|
### npx (en hızlısı)
|
|
94
113
|
|
|
95
114
|
```bash
|
|
@@ -103,6 +122,13 @@ npm install -g purplemux
|
|
|
103
122
|
purplemux
|
|
104
123
|
```
|
|
105
124
|
|
|
125
|
+
### CLI örnekleri
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
purplemux tab create -w WS -t codex-cli -n "fix auth"
|
|
129
|
+
purplemux tab create -w WS -t agent-sessions
|
|
130
|
+
```
|
|
131
|
+
|
|
106
132
|
### Kaynaktan çalıştırma
|
|
107
133
|
|
|
108
134
|
```bash
|
|
@@ -199,24 +225,25 @@ Varsayılan protokol HTTP'dir. Dışarı açarken mutlaka HTTPS kullanın:
|
|
|
199
225
|
▼ ▼ ▼
|
|
200
226
|
┌─────────────────────────────────────────────────────────────┐
|
|
201
227
|
│ System │
|
|
202
|
-
│ tmux (purple socket)
|
|
228
|
+
│ tmux (purple socket) Agent CLIs │
|
|
203
229
|
│ ┌────────┐ ┌────────┐ ┌────────────────────────────┐ │
|
|
204
|
-
│ │Session1│ │Session2│ ... │
|
|
205
|
-
│ │ (shell)│ │ (shell)│ │
|
|
206
|
-
│ └────────┘ └────────┘ │
|
|
230
|
+
│ │Session1│ │Session2│ ... │ Claude Code │ │
|
|
231
|
+
│ │ (shell)│ │ (shell)│ │ ~/.claude/projects/*.jsonl │ │
|
|
232
|
+
│ └────────┘ └────────┘ │ Codex │ │
|
|
233
|
+
│ │ ~/.codex/sessions/*.jsonl │ │
|
|
207
234
|
│ └────────────────────────────┘ │
|
|
208
235
|
└─────────────────────────────────────────────────────────────┘
|
|
209
236
|
```
|
|
210
237
|
|
|
211
238
|
**Terminal G/Ç** — xterm.js, node-pty'ye WebSocket üzerinden bağlanır; node-pty ise tmux oturumlarına iliştirilir. İkili bir protokol stdin/stdout/resize işlemlerini backpressure kontrolüyle yürütür.
|
|
212
239
|
|
|
213
|
-
**Durum algılama** —
|
|
240
|
+
**Durum algılama** — Ajan olay hook'ları HTTP POST ile anında güncelleme gönderir. Claude Code `SessionStart`, `Stop` ve `Notification` kullanır; Codex `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop` ve `PermissionRequest` kullanır. Her 5–15 sn'de bir süreç ağacı kontrol edilir ve JSONL dosyalarının son 8 KB'si analiz edilir.
|
|
214
241
|
|
|
215
|
-
**Zaman tüneli** — `~/.claude/projects/` altındaki JSONL oturum loglarını izler, değişiklikte yeni satırları ayrıştırır ve yapılandırılmış girişleri tarayıcıya akıtır.
|
|
242
|
+
**Zaman tüneli** — `~/.claude/projects/` ve `~/.codex/sessions/` altındaki JSONL oturum loglarını izler, değişiklikte yeni satırları ayrıştırır ve yapılandırılmış girişleri tarayıcıya akıtır.
|
|
216
243
|
|
|
217
244
|
**tmux izolasyonu** — Mevcut tmux'unuzdan tamamen ayrı, özel bir `purple` soketi kullanır. Prefix tuşu yok, durum çubuğu yok.
|
|
218
245
|
|
|
219
|
-
**Otomatik kurtarma** — Sunucu başlatıldığında önceki Claude oturumları `claude --resume {sessionId}` ile geri yüklenir.
|
|
246
|
+
**Otomatik kurtarma** — Sunucu başlatıldığında önceki Claude oturumları `claude --resume {sessionId}` ile geri yüklenir. Codex oturumları oturum listesinden veya `codex resume {sessionId}` ile devam ettirilebilir.
|
|
220
247
|
|
|
221
248
|
## License
|
|
222
249
|
|
package/README.zh-CN.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# purplemux
|
|
2
2
|
|
|
3
|
-
**Claude Code,多任务同时进行。更快。**
|
|
3
|
+
**Claude Code 与 Codex,多任务同时进行。更快。**
|
|
4
4
|
|
|
5
5
|
一屏纵览所有会话,在手机上也毫无中断。
|
|
6
6
|
|
|
@@ -24,7 +24,7 @@ npx purplemux@latest
|
|
|
24
24
|
|
|
25
25
|
## 为什么选择 purplemux
|
|
26
26
|
|
|
27
|
-
- **多会话仪表盘** — 一眼掌握所有 Claude Code 会话的「运行中 / 等待输入」状态
|
|
27
|
+
- **多会话仪表盘** — 一眼掌握所有 Claude Code 与 Codex 会话的「运行中 / 等待输入」状态
|
|
28
28
|
- **速率限制监控** — 显示 5 小时 / 7 天剩余额度及重置倒计时
|
|
29
29
|
- **推送通知** — 任务完成或需要输入时,桌面与移动端推送提醒
|
|
30
30
|
- **移动端 & 多设备** — 在手机、平板或其他桌面都能访问同一会话
|
|
@@ -49,20 +49,23 @@ npx purplemux@latest
|
|
|
49
49
|
- **键盘快捷键** — 分割、切换标签、焦点移动
|
|
50
50
|
- **终端主题** — 深色 / 浅色模式,多种配色主题
|
|
51
51
|
- **工作区 & 分组** — 以工作区为单位保存 / 恢复面板布局、标签与工作目录。通过拖拽将工作区组织为分组进行管理
|
|
52
|
-
- **Git 工作流** — 支持 Side-by-side / Line-by-line 切换与语法高亮,以及行内 hunk 展开、分页历史标签。可从面板直接 fetch / pull / push (含 ahead/behind 指示) — 同步失败时 (dirty worktree、冲突) 一键 Ask Claude
|
|
52
|
+
- **Git 工作流** — 支持 Side-by-side / Line-by-line 切换与语法高亮,以及行内 hunk 展开、分页历史标签。可从面板直接 fetch / pull / push (含 ahead/behind 指示) — 同步失败时 (dirty worktree、冲突) 一键 Ask Claude 或 Codex
|
|
53
53
|
- **内置浏览器面板** — 在终端旁嵌入浏览器查看开发结果 (Electron)。可通过 `purplemux` CLI 控制,并内置设备模拟器切换视口
|
|
54
|
+
- **智能体标签** — 从新建标签菜单启动 Claude、Codex 或统一会话列表
|
|
54
55
|
|
|
55
|
-
### Claude Code 集成
|
|
56
|
+
### Claude Code 与 Codex 集成
|
|
56
57
|
|
|
57
58
|
- **实时状态** — 运行中 / 等待输入指示,支持在会话间切换
|
|
58
59
|
- **实时会话视图** — 消息、工具调用、任务、权限请求、thinking 区块
|
|
59
|
-
-
|
|
60
|
+
- **Codex 标签** — 使用与 Claude 相同的 tmux 持久化能力启动 Codex CLI 会话
|
|
61
|
+
- **会话列表** — 在统一视图中浏览并恢复最近的 Claude 与 Codex 会话
|
|
62
|
+
- **一键 Resume** — 直接从浏览器恢复已中断的 Claude 或 Codex 会话
|
|
60
63
|
- **自动 Resume** — 服务器启动时自动恢复之前的 Claude 会话
|
|
61
64
|
- **快速提示** — 注册常用提示,一键发送
|
|
62
65
|
- **附件** — 在聊天输入中拖入图片,或附加文件以自动插入路径。移动端同样可用
|
|
63
66
|
- **消息历史** — 复用之前的消息
|
|
64
|
-
- **用量统计** —
|
|
65
|
-
- **速率限制** — 5 小时 / 7 天剩余额度,重置倒计时
|
|
67
|
+
- **用量统计** — Claude + Codex Token、成本、按项目拆分、每日 AI 报告
|
|
68
|
+
- **速率限制** — 支持的提供方的 5 小时 / 7 天剩余额度,重置倒计时
|
|
66
69
|
|
|
67
70
|
### 移动端 & 易用性
|
|
68
71
|
|
|
@@ -90,6 +93,22 @@ npx purplemux@latest
|
|
|
90
93
|
- [Node.js](https://nodejs.org/) 20+
|
|
91
94
|
- [tmux](https://github.com/tmux/tmux)
|
|
92
95
|
|
|
96
|
+
Claude 标签需要。安装 Claude Code,并在启动 Claude 标签前登录:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
curl -fsSL https://claude.ai/install.sh | bash
|
|
100
|
+
# 或使用 Homebrew latest 频道
|
|
101
|
+
brew install --cask claude-code@latest
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Codex 标签为可选。安装 Codex CLI,并在启动 Codex 标签前登录:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npm i -g @openai/codex
|
|
108
|
+
# 或
|
|
109
|
+
brew install --cask codex
|
|
110
|
+
```
|
|
111
|
+
|
|
93
112
|
### npx (最快)
|
|
94
113
|
|
|
95
114
|
```bash
|
|
@@ -103,6 +122,13 @@ npm install -g purplemux
|
|
|
103
122
|
purplemux
|
|
104
123
|
```
|
|
105
124
|
|
|
125
|
+
### CLI 示例
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
purplemux tab create -w WS -t codex-cli -n "fix auth"
|
|
129
|
+
purplemux tab create -w WS -t agent-sessions
|
|
130
|
+
```
|
|
131
|
+
|
|
106
132
|
### 从源码运行
|
|
107
133
|
|
|
108
134
|
```bash
|
|
@@ -199,24 +225,25 @@ tailscale serve --bg off 8022
|
|
|
199
225
|
▼ ▼ ▼
|
|
200
226
|
┌─────────────────────────────────────────────────────────────┐
|
|
201
227
|
│ System │
|
|
202
|
-
│ tmux (purple socket)
|
|
228
|
+
│ tmux (purple socket) Agent CLIs │
|
|
203
229
|
│ ┌────────┐ ┌────────┐ ┌────────────────────────────┐ │
|
|
204
|
-
│ │Session1│ │Session2│ ... │
|
|
205
|
-
│ │ (shell)│ │ (shell)│ │
|
|
206
|
-
│ └────────┘ └────────┘ │
|
|
230
|
+
│ │Session1│ │Session2│ ... │ Claude Code │ │
|
|
231
|
+
│ │ (shell)│ │ (shell)│ │ ~/.claude/projects/*.jsonl │ │
|
|
232
|
+
│ └────────┘ └────────┘ │ Codex │ │
|
|
233
|
+
│ │ ~/.codex/sessions/*.jsonl │ │
|
|
207
234
|
│ └────────────────────────────┘ │
|
|
208
235
|
└─────────────────────────────────────────────────────────────┘
|
|
209
236
|
```
|
|
210
237
|
|
|
211
238
|
**终端 I/O** — xterm.js 通过 WebSocket 连接 node-pty,node-pty 再接入 tmux 会话。使用二进制协议处理 stdin / stdout / resize 并进行背压控制。
|
|
212
239
|
|
|
213
|
-
**状态检测** — Claude Code
|
|
240
|
+
**状态检测** — 智能体事件 hook 通过 HTTP POST 立即推送更新。Claude Code 使用 `SessionStart`、`Stop`、`Notification`;Codex 使用 `SessionStart`、`UserPromptSubmit`、`PreToolUse`、`PostToolUse`、`Stop`、`PermissionRequest`。每 5–15 秒轮询一次进程树,并分析 JSONL 文件末尾 8KB。
|
|
214
241
|
|
|
215
|
-
**时间线** — 监听 `~/.claude/projects/` 下的 JSONL 会话日志,文件变化时解析新行并将结构化条目流式传送到浏览器。
|
|
242
|
+
**时间线** — 监听 `~/.claude/projects/` 与 `~/.codex/sessions/` 下的 JSONL 会话日志,文件变化时解析新行并将结构化条目流式传送到浏览器。
|
|
216
243
|
|
|
217
244
|
**tmux 隔离** — 使用专用的 `purple` socket,与现有 tmux 完全隔离。无前缀键,无状态栏。
|
|
218
245
|
|
|
219
|
-
**自动恢复** — 服务器启动时通过 `claude --resume {sessionId}` 恢复之前的 Claude 会话。
|
|
246
|
+
**自动恢复** — 服务器启动时通过 `claude --resume {sessionId}` 恢复之前的 Claude 会话。Codex 会话可从会话列表恢复,也可使用 `codex resume {sessionId}`。
|
|
220
247
|
|
|
221
248
|
## License
|
|
222
249
|
|