codeam-cli 2.4.18 → 2.4.20

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 CHANGED
@@ -4,6 +4,24 @@ 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.19] — 2026-05-03
8
+
9
+ ### Added
10
+
11
+ - **cli:** Handle shutdown_session command from mobile / web (v2.4.19)
12
+
13
+ ## [2.4.18] — 2026-05-03
14
+
15
+ ### Added
16
+
17
+ - **cli:** Codeam deploy ls + stop, plus runtime tag for the apps (v2.4.18)
18
+
19
+ ## [2.4.17] — 2026-05-03
20
+
21
+ ### Fixed
22
+
23
+ - **cli:** Show the QR in codeam deploy (tail -n +1) (v2.4.17)
24
+
7
25
  ## [2.4.16] — 2026-05-03
8
26
 
9
27
  ### 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.18",
182
+ version: "2.4.20",
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: {
@@ -2770,6 +2770,37 @@ except Exception:sys.exit(0)
2770
2770
  case "stop_task":
2771
2771
  claude.interrupt();
2772
2772
  break;
2773
+ case "set_keep_alive": {
2774
+ const enabled = !!cmd.payload.enabled;
2775
+ setKeepAlive(enabled);
2776
+ try {
2777
+ await relay.sendResult(cmd.id, "success", { enabled });
2778
+ } catch {
2779
+ }
2780
+ break;
2781
+ }
2782
+ case "shutdown_session": {
2783
+ try {
2784
+ await relay.sendResult(cmd.id, "success", { ok: true });
2785
+ } catch {
2786
+ }
2787
+ try {
2788
+ claude.kill();
2789
+ } catch {
2790
+ }
2791
+ try {
2792
+ const proc = (0, import_child_process4.spawn)("bash", ["-lc", "pm2 delete codeam-pair >/dev/null 2>&1 || true"], {
2793
+ detached: true,
2794
+ stdio: "ignore"
2795
+ });
2796
+ proc.unref();
2797
+ } catch {
2798
+ }
2799
+ outputSvc.dispose();
2800
+ relay.stop();
2801
+ ws.disconnect();
2802
+ process.exit(0);
2803
+ }
2773
2804
  case "get_context": {
2774
2805
  const usage = historySvc.getCurrentUsage();
2775
2806
  const monthlyCost = historySvc.getMonthlyEstimatedCost();
@@ -2992,6 +3023,23 @@ except Exception:sys.exit(0)
2992
3023
  setTimeout(() => {
2993
3024
  fetchQuotaUsage();
2994
3025
  }, 5e3);
3026
+ let keepAliveTimer = null;
3027
+ function setKeepAlive(enabled) {
3028
+ if (keepAliveTimer) {
3029
+ clearInterval(keepAliveTimer);
3030
+ keepAliveTimer = null;
3031
+ }
3032
+ if (!enabled) return;
3033
+ const ping = () => {
3034
+ const proc = (0, import_child_process4.spawn)("bash", ["-lc", "gh codespace list >/dev/null 2>&1 || true"], {
3035
+ stdio: "ignore",
3036
+ detached: true
3037
+ });
3038
+ proc.unref();
3039
+ };
3040
+ ping();
3041
+ keepAliveTimer = setInterval(ping, 8 * 60 * 1e3);
3042
+ }
2995
3043
  }
2996
3044
 
2997
3045
  // src/commands/pair.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.4.18",
3
+ "version": "2.4.20",
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": {