codeam-cli 2.4.22 → 2.4.24

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.23] — 2026-05-03
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Shutdown_session also runs gh codespace stop (v2.4.23)
12
+
13
+ ## [2.4.22] — 2026-05-03
14
+
15
+ ### Added
16
+
17
+ - **cli:** "+ Don't see your project?" expands gh OAuth scopes (v2.4.22)
18
+
7
19
  ## [2.4.21] — 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.22",
182
+ version: "2.4.24",
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,6 +2793,18 @@ 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") {
2798
+ try {
2799
+ const stopProc = (0, import_child_process4.spawn)(
2800
+ "bash",
2801
+ ["-lc", `sleep 1; gh codespace stop -c ${JSON.stringify(codespaceName)} >/dev/null 2>&1 || true`],
2802
+ { detached: true, stdio: "ignore" }
2803
+ );
2804
+ stopProc.unref();
2805
+ } catch {
2806
+ }
2807
+ }
2796
2808
  try {
2797
2809
  const proc = (0, import_child_process4.spawn)("bash", ["-lc", "pm2 delete codeam-pair >/dev/null 2>&1 || true"], {
2798
2810
  detached: true,
@@ -5418,20 +5430,43 @@ var GitHubCodespacesProvider = class {
5418
5430
  });
5419
5431
  }
5420
5432
  async listProjects() {
5421
- const { stdout } = await execFileP2(
5422
- "gh",
5423
- [
5424
- "repo",
5425
- "list",
5433
+ const fetchRepos = async (owner) => {
5434
+ const args2 = ["repo", "list"];
5435
+ if (owner) args2.push(owner);
5436
+ args2.push(
5426
5437
  "--json",
5427
5438
  "name,nameWithOwner,description,defaultBranchRef,isPrivate",
5428
5439
  "--limit",
5429
5440
  "200"
5430
- ],
5431
- { maxBuffer: MAX_BUFFER }
5432
- );
5433
- const raw = JSON.parse(stdout);
5434
- return raw.map((r) => ({
5441
+ );
5442
+ try {
5443
+ const { stdout } = await execFileP2("gh", args2, { maxBuffer: MAX_BUFFER });
5444
+ return JSON.parse(stdout);
5445
+ } catch {
5446
+ return [];
5447
+ }
5448
+ };
5449
+ const own = await fetchRepos();
5450
+ let orgRepos = [];
5451
+ try {
5452
+ const { stdout } = await execFileP2(
5453
+ "gh",
5454
+ ["api", "--paginate", "user/orgs", "--jq", ".[].login"],
5455
+ { maxBuffer: MAX_BUFFER }
5456
+ );
5457
+ const orgLogins = stdout.split("\n").map((l) => l.trim()).filter((l) => l.length > 0);
5458
+ const perOrg = await Promise.all(orgLogins.map((org) => fetchRepos(org)));
5459
+ orgRepos = perOrg.flat();
5460
+ } catch {
5461
+ }
5462
+ const seen = /* @__PURE__ */ new Set();
5463
+ const merged = [];
5464
+ for (const r of [...own, ...orgRepos]) {
5465
+ if (seen.has(r.nameWithOwner)) continue;
5466
+ seen.add(r.nameWithOwner);
5467
+ merged.push(r);
5468
+ }
5469
+ return merged.map((r) => ({
5435
5470
  id: r.nameWithOwner,
5436
5471
  name: r.name,
5437
5472
  fullName: r.nameWithOwner,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.4.22",
3
+ "version": "2.4.24",
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": {