codeam-cli 2.4.12 → 2.4.13
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/CHANGELOG.md +12 -0
- package/dist/index.js +16 -24
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@ All notable changes to `codeam-cli` are documented here.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [2.4.12] — 2026-05-03
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** Wait for Claude to be ready before closing local terminal (v2.4.12)
|
|
12
|
+
|
|
13
|
+
## [2.4.11] — 2026-05-03
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **cli:** Codeam deploy detaches local terminal after pairing (v2.4.11)
|
|
18
|
+
|
|
7
19
|
## [2.4.10] — 2026-05-03
|
|
8
20
|
|
|
9
21
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -179,7 +179,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
|
|
|
179
179
|
// package.json
|
|
180
180
|
var package_default = {
|
|
181
181
|
name: "codeam-cli",
|
|
182
|
-
version: "2.4.
|
|
182
|
+
version: "2.4.13",
|
|
183
183
|
description: "Remote control Claude Code (and other AI coding agents) from your mobile phone. Pair your device, send prompts, stream responses in real-time, and approve commands \u2014 from anywhere.",
|
|
184
184
|
main: "dist/index.js",
|
|
185
185
|
bin: {
|
|
@@ -706,6 +706,7 @@ def onwinch(n,f):
|
|
|
706
706
|
except Exception:pass
|
|
707
707
|
signal.signal(signal.SIGCHLD,onchld)
|
|
708
708
|
signal.signal(signal.SIGWINCH,onwinch)
|
|
709
|
+
signal.signal(signal.SIGHUP,signal.SIG_IGN)
|
|
709
710
|
i=sys.stdin.fileno()
|
|
710
711
|
o=sys.stdout.fileno()
|
|
711
712
|
while not done[0]:
|
|
@@ -5890,47 +5891,39 @@ async function deploy() {
|
|
|
5890
5891
|
].filter(Boolean).join("\n"),
|
|
5891
5892
|
"Almost there"
|
|
5892
5893
|
);
|
|
5893
|
-
const
|
|
5894
|
+
const wrapper = [
|
|
5894
5895
|
"mkdir -p ~/.codeam-deploy",
|
|
5895
5896
|
"LOG=~/.codeam-deploy/session.log",
|
|
5896
5897
|
"PIDFILE=~/.codeam-deploy/session.pid",
|
|
5897
|
-
// Stop any prior detached session for this codespace.
|
|
5898
5898
|
'if [ -f "$PIDFILE" ]; then OLD=$(cat "$PIDFILE" 2>/dev/null); if [ -n "$OLD" ] && kill -0 "$OLD" 2>/dev/null; then kill "$OLD" 2>/dev/null; sleep 1; fi; fi',
|
|
5899
5899
|
': > "$LOG"',
|
|
5900
|
-
// Detach codeam pair from this shell so SSH hangup
|
|
5901
|
-
//
|
|
5902
|
-
|
|
5903
|
-
|
|
5904
|
-
"
|
|
5900
|
+
// Detach codeam pair from this shell so SSH hangup never reaches
|
|
5901
|
+
// it. The combination is: setsid (new session, no controlling
|
|
5902
|
+
// terminal) + nohup (ignore SIGHUP) + < /dev/null (no stdin
|
|
5903
|
+
// attached) + redirect stdio to log file.
|
|
5904
|
+
'setsid nohup codeam pair > "$LOG" 2>&1 < /dev/null &',
|
|
5905
|
+
"sleep 1",
|
|
5906
|
+
'PID=$(pgrep -fn "codeam pair" | head -1)',
|
|
5905
5907
|
'echo "$PID" > "$PIDFILE"',
|
|
5906
|
-
// Stream the log to the local terminal.
|
|
5907
5908
|
'tail -n +1 -F "$LOG" 2>/dev/null &',
|
|
5908
5909
|
"TAIL=$!",
|
|
5909
|
-
// Local Ctrl+C: kill ONLY the tail and exit — relay stays alive.
|
|
5910
5910
|
"trap 'kill $TAIL 2>/dev/null; exit 130' INT TERM",
|
|
5911
|
-
// Phase 1 — wait for the QR scan to complete.
|
|
5912
5911
|
"SUCCESS=0",
|
|
5913
5912
|
"while true; do",
|
|
5914
5913
|
' if grep -q "Paired with" "$LOG" 2>/dev/null; then SUCCESS=1; break; fi',
|
|
5915
|
-
' if ! kill -0 "$PID" 2>/dev/null; then SUCCESS=0; break; fi',
|
|
5914
|
+
' if [ -z "$PID" ] || ! kill -0 "$PID" 2>/dev/null; then SUCCESS=0; break; fi',
|
|
5916
5915
|
" sleep 1",
|
|
5917
5916
|
"done",
|
|
5918
5917
|
'if [ "$SUCCESS" = "1" ]; then',
|
|
5919
5918
|
" echo",
|
|
5920
5919
|
' echo "\u2713 Phone paired."',
|
|
5921
|
-
' echo "
|
|
5922
|
-
' echo "
|
|
5920
|
+
' echo " Answer any first-time prompts ("trust this folder", etc.) on your phone."',
|
|
5921
|
+
' echo " Local terminal will close once Claude is ready."',
|
|
5923
5922
|
" echo",
|
|
5924
|
-
// Phase 2 — wait until Claude is fully initialised. The
|
|
5925
|
-
// "? for shortcuts" line (from Claude\'s status bar) is the most
|
|
5926
|
-
// reliable "ready" marker — it only renders AFTER any trust /
|
|
5927
|
-
// onboarding prompts have been resolved. Cap at 3 minutes so we
|
|
5928
|
-
// never hang the local terminal forever if the user doesn\'t
|
|
5929
|
-
// resolve a prompt on their phone.
|
|
5930
5923
|
" WAIT_START=$(date +%s)",
|
|
5931
5924
|
" while true; do",
|
|
5932
5925
|
' if grep -q "for shortcuts" "$LOG" 2>/dev/null; then break; fi',
|
|
5933
|
-
' if ! kill -0 "$PID" 2>/dev/null; then break; fi',
|
|
5926
|
+
' if [ -z "$PID" ] || ! kill -0 "$PID" 2>/dev/null; then break; fi',
|
|
5934
5927
|
" if [ $(($(date +%s) - WAIT_START)) -gt 180 ]; then break; fi",
|
|
5935
5928
|
" sleep 1",
|
|
5936
5929
|
" done",
|
|
@@ -5945,15 +5938,14 @@ async function deploy() {
|
|
|
5945
5938
|
' echo "\u2717 Pairing did not complete (codeam pair exited)."',
|
|
5946
5939
|
" exit 1",
|
|
5947
5940
|
"fi"
|
|
5948
|
-
];
|
|
5949
|
-
const wrapper = wrapperLines.join("\n");
|
|
5941
|
+
].join("\n");
|
|
5950
5942
|
const code = (await provider.streamCommand(workspace.id, `bash -lc ${shellQuoteSingle(wrapper)}`)).code;
|
|
5951
5943
|
if (code === 0) {
|
|
5952
5944
|
gt(import_picocolors8.default.green("\u2713 Workspace deployed and paired. Drive from your phone, anywhere."));
|
|
5953
5945
|
} else if (code === 130) {
|
|
5954
5946
|
gt(import_picocolors8.default.yellow("Disconnected from local terminal. Mobile session keeps running on the codespace."));
|
|
5955
5947
|
} else {
|
|
5956
|
-
gt(import_picocolors8.default.yellow(
|
|
5948
|
+
gt(import_picocolors8.default.yellow('Pairing did not complete. Run "codeam pair" inside the codespace if needed.'));
|
|
5957
5949
|
}
|
|
5958
5950
|
}
|
|
5959
5951
|
function shellQuoteSingle(s) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.13",
|
|
4
4
|
"description": "Remote control Claude Code (and other AI coding agents) from your mobile phone. Pair your device, send prompts, stream responses in real-time, and approve commands — from anywhere.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|