handmux 0.29.1 → 0.29.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.
@@ -53,20 +53,18 @@ if [ -z "$CLAUDE_PID" ]; then
53
53
  done
54
54
  fi
55
55
  if [ -n "$CLAUDE_PID" ]; then
56
- # Start time in the same form the server reads (processStartedAt in tmuxRuntime.ts): on Linux the raw
57
- # procfs start tick, on macOS the `lstart` string. A wall-clock `lstart` moves whenever the host steps
58
- # the guest clock (WSL2), which makes one live process look like several.
59
- case "$(uname -s)" in
60
- Linux)
61
- # comm may contain spaces/parentheses: drop "pid (comm) " first, then starttime is field 20.
62
- CLAUDE_STARTED_AT=$(sed 's/.*) //' "/proc/$CLAUDE_PID/stat" 2>/dev/null \
63
- | awk '{ print $20 }' 2>/dev/null || printf '')
64
- ;;
65
- *)
66
- # `lstart` follows the process locale on macOS; force C so standalone Node can parse it consistently.
67
- CLAUDE_STARTED_AT=$(LC_ALL=C ps -p "$CLAUDE_PID" -o lstart= 2>/dev/null || printf '')
68
- ;;
69
- esac
56
+ # Start time in the same form the server reads (processStartedAt in tmuxRuntime.ts): the raw procfs start
57
+ # tick where procfs exists, otherwise the `lstart` string. A wall-clock `lstart` moves whenever the host
58
+ # steps the guest clock (WSL2), which makes one live process look like several. The proc root is
59
+ # overridable so tests can supply a fixture instead of the host's live process table.
60
+ PROC_ROOT="${HANDMUX_PROC_ROOT:-/proc}"
61
+ # comm may contain spaces/parentheses: drop "pid (comm) " first, then starttime is field 20.
62
+ CLAUDE_STARTED_AT=$(sed 's/.*) //' "$PROC_ROOT/$CLAUDE_PID/stat" 2>/dev/null \
63
+ | awk '{ print $20 }' 2>/dev/null || printf '')
64
+ if [ -z "$CLAUDE_STARTED_AT" ]; then
65
+ # `lstart` follows the process locale on macOS; force C so standalone Node can parse it consistently.
66
+ CLAUDE_STARTED_AT=$(LC_ALL=C ps -p "$CLAUDE_PID" -o lstart= 2>/dev/null || printf '')
67
+ fi
70
68
  CLAUDE_TTY=$(ps -p "$CLAUDE_PID" -o tty= 2>/dev/null || printf '')
71
69
  fi
72
70
  # payload 经 stdin 原样流给 node(不在 shell 里转义,避免坏数据);pane 含 '%' 直接进 JSON 字段,
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "handmux",
3
- "version": "0.29.1",
3
+ "version": "0.29.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,6 +75,12 @@
75
75
  "vitest": "^2.0.0"
76
76
  },
77
77
  "whatsNew": [
78
+ {
79
+ "version": "0.29.2",
80
+ "date": "2026-09-18",
81
+ "zh": "修复 Linux 下 Claude 事件上报的兼容问题",
82
+ "en": "Compatibility fix for Claude event reporting on Linux"
83
+ },
78
84
  {
79
85
  "version": "0.29.1",
80
86
  "date": "2026-09-18",
@@ -116,12 +122,6 @@
116
122
  "date": "2026-09-04",
117
123
  "zh": "对话精细复制 · Pi 上下文状态",
118
124
  "en": "Precise chat copy · Pi context status"
119
- },
120
- {
121
- "version": "0.25.2",
122
- "date": "2026-09-02",
123
- "zh": "修复 Agent 对话断流、排队与工具路径",
124
- "en": "Fixed Agent chat streams, queues, and tool paths"
125
125
  }
126
126
  ]
127
127
  }