handmux 0.27.1 → 0.27.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.
@@ -48,7 +48,7 @@
48
48
  @keyframes bootDot { 0%,100% { opacity: .22; transform: translateY(0); } 40% { opacity: 1; transform: translateY(-3px); } }
49
49
  @media (prefers-reduced-motion: reduce) { .boot-glow, .boot-dots i { animation: none; opacity: .8; } }
50
50
  </style>
51
- <script type="module" crossorigin src="/assets/index-VT8s4ELL.js"></script>
51
+ <script type="module" crossorigin src="/assets/index-B4pKf3IW.js"></script>
52
52
  <link rel="stylesheet" crossorigin href="/assets/index-Cdrh2CUp.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" crossorigin href="/assets/index-Cdrh2CUp.css"></noscript>
53
53
  </head>
54
54
  <body>
@@ -25,7 +25,7 @@ export function echoTerminalProbe(ws, message) {
25
25
  export function startSubscribeDeadline(ws, timeoutMs = SUBSCRIBE_TIMEOUT_MS) {
26
26
  const timer = setTimeout(() => {
27
27
  if (ws.readyState < 2)
28
- ws.close(4001, 'authentication timeout');
28
+ ws.close(4000, 'subscribe timeout');
29
29
  }, timeoutMs);
30
30
  timer.unref?.();
31
31
  return () => clearTimeout(timer);
@@ -359,9 +359,11 @@ export function createTerminalStream({ token, commands, spawnControl, }) {
359
359
  }
360
360
  if (authenticating)
361
361
  return;
362
- if (message.type !== 'subscribe'
363
- || !tokenEquals(message.token ?? '', token)
364
- || !isPaneId(message.pane)) {
362
+ if (message.type !== 'subscribe' || !isPaneId(message.pane)) {
363
+ ws.close(1003, 'bad subscribe message');
364
+ return;
365
+ }
366
+ if (!tokenEquals(message.token ?? '', token)) {
365
367
  ws.close(4001, 'unauthorized');
366
368
  return;
367
369
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "handmux",
3
- "version": "0.27.1",
3
+ "version": "0.27.2",
4
4
  "description": "A mobile vibe-coding cockpit — built on tmux: drive your live session, Claude Code / Codex — anything a terminal can run — from your phone.",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-only",
@@ -75,13 +75,13 @@
75
75
  "vitest": "^2.0.0"
76
76
  },
77
77
  "whatsNew": [
78
+ {"version":"0.27.2","date":"2026-09-08","zh":"修复多标签页偶发鉴权弹窗","en":"Fix intermittent authentication prompts across tabs"},
78
79
  {"version":"0.27.1","date":"2026-09-08","zh":"腾讯语音 · 终端光标修复 · Codex 对话恢复","en":"Tencent voice · terminal cursor fixes · Codex chat recovery"},
79
80
  {"version":"0.27.0","date":"2026-09-05","zh":"腾讯语音输入 · 终端输入更准确","en":"Tencent voice input · more accurate terminal typing"},
80
81
  {"version":"0.26.0","date":"2026-09-04","zh":"对话精细复制 · Pi 上下文状态","en":"Precise chat copy · Pi context status"},
81
82
  {"version":"0.25.2","date":"2026-09-02","zh":"修复 Agent 对话断流、排队与工具路径","en":"Fixed Agent chat streams, queues, and tool paths"},
82
83
  {"version":"0.25.1","date":"2026-09-02","zh":"修复 Codex 幽灵任务与对话空白","en":"Fixed Codex ghost tasks and blank chats"},
83
84
  {"version":"0.25.0","date":"2026-09-01","zh":"Pi 原生接入 · 多 Agent 对话更可靠","en":"Native Pi support · more reliable agent chat"},
84
- {"version":"0.24.0","date":"2026-08-11","zh":"Codex 任务进度与 Goal 原生上线","en":"Native Codex task progress and Goals"},
85
- {"version":"0.23.0","date":"2026-08-09","zh":"Codex 托管对话正式上线","en":"Managed Codex chat is here"}
85
+ {"version":"0.24.0","date":"2026-08-11","zh":"Codex 任务进度与 Goal 原生上线","en":"Native Codex task progress and Goals"}
86
86
  ]
87
87
  }