codeam-cli 2.4.25 → 2.4.27

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,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.26] — 2026-05-03
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Set_keep_alive PATCHes idle_timeout instead of pinging API (v2.4.26)
12
+
13
+ ## [2.4.25] — 2026-05-03
14
+
15
+ ### Added
16
+
17
+ - **cli:** Three new deploy providers — Gitpod, GitLab Workspaces, Railway (v2.4.25)
18
+
7
19
  ## [2.4.24] — 2026-05-03
8
20
 
9
21
  ### Added
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.25",
182
+ version: "2.4.27",
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: {
@@ -2793,12 +2793,12 @@ except Exception:sys.exit(0)
2793
2793
  claude.kill();
2794
2794
  } catch {
2795
2795
  }
2796
- const codespaceName = process.env.CODESPACE_NAME;
2797
- if (codespaceName && process.env.CODESPACES === "true") {
2796
+ const codespaceName2 = process.env.CODESPACE_NAME;
2797
+ if (codespaceName2 && process.env.CODESPACES === "true") {
2798
2798
  try {
2799
2799
  const stopProc = (0, import_child_process4.spawn)(
2800
2800
  "bash",
2801
- ["-lc", `sleep 1; gh codespace stop -c ${JSON.stringify(codespaceName)} >/dev/null 2>&1 || true`],
2801
+ ["-lc", `sleep 1; gh codespace stop -c ${JSON.stringify(codespaceName2)} >/dev/null 2>&1 || true`],
2802
2802
  { detached: true, stdio: "ignore" }
2803
2803
  );
2804
2804
  stopProc.unref();
@@ -3041,22 +3041,42 @@ except Exception:sys.exit(0)
3041
3041
  fetchQuotaUsage();
3042
3042
  }, 5e3);
3043
3043
  const inCodespace = process.env.CODESPACES === "true";
3044
+ const codespaceName = process.env.CODESPACE_NAME;
3044
3045
  let keepAliveTimer = null;
3046
+ async function setIdleTimeout(minutes) {
3047
+ if (!inCodespace || !codespaceName) return;
3048
+ await new Promise((resolve2) => {
3049
+ const proc = (0, import_child_process4.spawn)(
3050
+ "gh",
3051
+ [
3052
+ "api",
3053
+ "-X",
3054
+ "PATCH",
3055
+ `/user/codespaces/${codespaceName}`,
3056
+ "-F",
3057
+ `idle_timeout_minutes=${minutes}`
3058
+ ],
3059
+ { stdio: "ignore", detached: true }
3060
+ );
3061
+ proc.unref();
3062
+ proc.on("exit", () => resolve2());
3063
+ proc.on("error", () => resolve2());
3064
+ });
3065
+ }
3045
3066
  function setKeepAlive(enabled) {
3046
3067
  if (keepAliveTimer) {
3047
3068
  clearInterval(keepAliveTimer);
3048
3069
  keepAliveTimer = null;
3049
3070
  }
3050
- if (!enabled || !inCodespace) return;
3051
- const ping = () => {
3052
- const proc = (0, import_child_process4.spawn)("bash", ["-lc", "gh codespace list >/dev/null 2>&1 || true"], {
3053
- stdio: "ignore",
3054
- detached: true
3055
- });
3056
- proc.unref();
3057
- };
3058
- ping();
3059
- keepAliveTimer = setInterval(ping, 8 * 60 * 1e3);
3071
+ if (!inCodespace || !codespaceName) return;
3072
+ if (!enabled) {
3073
+ void setIdleTimeout(30);
3074
+ return;
3075
+ }
3076
+ void setIdleTimeout(240);
3077
+ keepAliveTimer = setInterval(() => {
3078
+ void setIdleTimeout(240);
3079
+ }, 30 * 60 * 1e3);
3060
3080
  }
3061
3081
  }
3062
3082
 
@@ -6721,9 +6741,9 @@ async function deploy() {
6721
6741
  } catch {
6722
6742
  machineStep.stop("\xB7 Could not list machine types \u2014 using provider default");
6723
6743
  }
6724
- if (machines.length > 1) {
6744
+ if (machines.length >= 1) {
6725
6745
  const picked = await _t({
6726
- message: "Pick a machine size (starts at 8 GB RAM):",
6746
+ message: machines.length === 1 ? "Confirm machine size (only one is available for this project):" : "Pick a machine size (starts at 8 GB RAM):",
6727
6747
  initialValue: machines[0].id,
6728
6748
  options: machines.map((m) => ({
6729
6749
  value: m.id,
@@ -6736,8 +6756,6 @@ async function deploy() {
6736
6756
  process.exit(0);
6737
6757
  }
6738
6758
  machineTypeId = picked;
6739
- } else if (machines.length === 1) {
6740
- machineTypeId = machines[0].id;
6741
6759
  }
6742
6760
  }
6743
6761
  if (!workspace) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.4.25",
3
+ "version": "2.4.27",
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": {