codeam-cli 2.15.6 → 2.15.8
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 +9 -0
- package/README.md +1 -1
- package/dist/index.js +41 -21
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,15 @@ 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.15.6] — 2026-05-20
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **cli:** Send current git branch on pair
|
|
12
|
+
- **vsc-plugin:** Emit file-change + review-hunk events from Path B (direct claude)
|
|
13
|
+
- **jetbrains-plugin:** Emit file-change + review-hunk events from Path B
|
|
14
|
+
- **cli:** Epic C — emit streaming chunks + subscribe to answer channel
|
|
15
|
+
|
|
7
16
|
## [2.15.5] — 2026-05-20
|
|
8
17
|
|
|
9
18
|
### Added
|
package/README.md
CHANGED
|
@@ -111,7 +111,7 @@ Adding more cloud backends (Gitpod, Coder, your own SSH host, …) is a single n
|
|
|
111
111
|
|
|
112
112
|
| Variable | Default | Effect |
|
|
113
113
|
|---|---|---|
|
|
114
|
-
| `CODEAM_API_URL` | `https://codeagent-mobile
|
|
114
|
+
| `CODEAM_API_URL` | `https://api.codeagent-mobile.com` | Override the backend relay URL. Useful for hitting a staging environment or self-hosted backend. |
|
|
115
115
|
| `CODEAM_DISABLE_UPDATE_CHECK` | unset | Set to `1` to suppress the "update available" banner. The check also auto-skips on non-TTY stdout, when `CI=true`, and during tests. |
|
|
116
116
|
| `CODEAM_AUTO_TOKEN` | unset | One-shot pairing token consumed by `codeam pair-auto`. Used by the `codeam deploy` bootstrap; see *Advanced / scripted pairing* below. |
|
|
117
117
|
|
package/dist/index.js
CHANGED
|
@@ -284,6 +284,9 @@ function isKnownAgentId(id) {
|
|
|
284
284
|
return id === "claude" || id === "codex" || id === "copilot";
|
|
285
285
|
}
|
|
286
286
|
|
|
287
|
+
// ../../packages/shared/src/api-url.ts
|
|
288
|
+
var DEFAULT_API_BASE_URL = "https://api.codeagent-mobile.com";
|
|
289
|
+
|
|
287
290
|
// src/config.ts
|
|
288
291
|
var fs = __toESM(require("fs"));
|
|
289
292
|
var os = __toESM(require("os"));
|
|
@@ -386,7 +389,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
|
|
|
386
389
|
// package.json
|
|
387
390
|
var package_default = {
|
|
388
391
|
name: "codeam-cli",
|
|
389
|
-
version: "2.15.
|
|
392
|
+
version: "2.15.8",
|
|
390
393
|
description: "Workflow-continuity bridge for AI coding agents. Wrap Claude Code or Codex in a PTY and supervise, approve, and redirect the session from any device \u2014 async. The terminal companion for CodeAgent Mobile.",
|
|
391
394
|
type: "commonjs",
|
|
392
395
|
main: "dist/index.js",
|
|
@@ -490,21 +493,30 @@ function showError(msg) {
|
|
|
490
493
|
function showInfo(msg) {
|
|
491
494
|
console.log(` ${import_picocolors.default.dim("\xB7")} ${msg}`);
|
|
492
495
|
}
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
const
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
console.log(
|
|
496
|
+
var BOX_INTERIOR = 30;
|
|
497
|
+
var BOX_BORDER_TOP = ` \u250C${"\u2500".repeat(BOX_INTERIOR)}\u2510`;
|
|
498
|
+
var BOX_BORDER_BOT = ` \u2514${"\u2500".repeat(BOX_INTERIOR)}\u2518`;
|
|
499
|
+
function boxRow(content, visibleLength) {
|
|
500
|
+
const pad = " ".repeat(Math.max(0, BOX_INTERIOR - visibleLength));
|
|
501
|
+
return ` \u2502${content}${pad}\u2502`;
|
|
502
|
+
}
|
|
503
|
+
function showPairingCode(code) {
|
|
504
|
+
console.log(BOX_BORDER_TOP);
|
|
505
|
+
const codeVisible = ` Code: ${code}`.length;
|
|
506
|
+
console.log(
|
|
507
|
+
boxRow(` Code: ${import_picocolors.default.bold(import_picocolors.default.yellow(code))}`, codeVisible)
|
|
508
|
+
);
|
|
509
|
+
console.log(BOX_BORDER_BOT);
|
|
502
510
|
console.log("");
|
|
503
511
|
import_qrcode_terminal.default.generate(code, { small: true }, (qr) => {
|
|
504
512
|
qr.split("\n").forEach((line) => console.log(" " + line));
|
|
505
513
|
});
|
|
506
514
|
console.log("");
|
|
507
515
|
}
|
|
516
|
+
function formatRemaining(expiresAt) {
|
|
517
|
+
const secs = Math.max(0, Math.floor((expiresAt - Date.now()) / 1e3));
|
|
518
|
+
return `${Math.floor(secs / 60)}:${String(secs % 60).padStart(2, "0")}`;
|
|
519
|
+
}
|
|
508
520
|
|
|
509
521
|
// src/services/command-relay.service.ts
|
|
510
522
|
var https2 = __toESM(require("https"));
|
|
@@ -558,7 +570,7 @@ function computePollDelay({ baseMs, failures }) {
|
|
|
558
570
|
}
|
|
559
571
|
|
|
560
572
|
// src/services/pairing.service.ts
|
|
561
|
-
var API_BASE = process.env.CODEAM_API_URL ??
|
|
573
|
+
var API_BASE = process.env.CODEAM_API_URL ?? DEFAULT_API_BASE_URL;
|
|
562
574
|
async function requestCode(pluginId) {
|
|
563
575
|
try {
|
|
564
576
|
const runtime = process.env.CODESPACES === "true" ? "github-codespaces" : "local";
|
|
@@ -778,7 +790,7 @@ var log = {
|
|
|
778
790
|
};
|
|
779
791
|
|
|
780
792
|
// src/services/command-relay.service.ts
|
|
781
|
-
var API_BASE2 = process.env.CODEAM_API_URL ??
|
|
793
|
+
var API_BASE2 = process.env.CODEAM_API_URL ?? DEFAULT_API_BASE_URL;
|
|
782
794
|
var CommandRelayService = class {
|
|
783
795
|
constructor(pluginId, onCommand, agentMeta) {
|
|
784
796
|
this.pluginId = pluginId;
|
|
@@ -5194,7 +5206,7 @@ var ChromeStepTracker = class {
|
|
|
5194
5206
|
// src/services/output/chunk-emitter.ts
|
|
5195
5207
|
var https3 = __toESM(require("https"));
|
|
5196
5208
|
var http3 = __toESM(require("http"));
|
|
5197
|
-
var API_BASE3 = process.env.CODEAM_API_URL ??
|
|
5209
|
+
var API_BASE3 = process.env.CODEAM_API_URL ?? DEFAULT_API_BASE_URL;
|
|
5198
5210
|
var ChunkEmitter = class {
|
|
5199
5211
|
constructor(opts) {
|
|
5200
5212
|
this.opts = opts;
|
|
@@ -5683,7 +5695,7 @@ var historyRecordSchema = import_zod.z.object({
|
|
|
5683
5695
|
content: import_zod.z.union([import_zod.z.string(), import_zod.z.array(import_zod.z.unknown())]).optional()
|
|
5684
5696
|
}).passthrough().optional()
|
|
5685
5697
|
}).passthrough();
|
|
5686
|
-
var API_BASE4 = process.env.CODEAM_API_URL ??
|
|
5698
|
+
var API_BASE4 = process.env.CODEAM_API_URL ?? DEFAULT_API_BASE_URL;
|
|
5687
5699
|
function extractText2(content) {
|
|
5688
5700
|
if (typeof content === "string") return content;
|
|
5689
5701
|
if (Array.isArray(content)) {
|
|
@@ -6289,7 +6301,7 @@ function _post2(url, headers, payload) {
|
|
|
6289
6301
|
}
|
|
6290
6302
|
|
|
6291
6303
|
// src/services/file-watcher.service.ts
|
|
6292
|
-
var API_BASE5 = process.env.CODEAM_API_URL ??
|
|
6304
|
+
var API_BASE5 = process.env.CODEAM_API_URL ?? DEFAULT_API_BASE_URL;
|
|
6293
6305
|
var DEBOUNCE_MS = 250;
|
|
6294
6306
|
var MAX_RETRIES = 2;
|
|
6295
6307
|
var RETRY_BACKOFF_MS = 300;
|
|
@@ -6704,7 +6716,7 @@ function _get(url, headers) {
|
|
|
6704
6716
|
}
|
|
6705
6717
|
|
|
6706
6718
|
// src/services/streaming-emitter.service.ts
|
|
6707
|
-
var API_BASE6 = process.env.CODEAM_API_URL ??
|
|
6719
|
+
var API_BASE6 = process.env.CODEAM_API_URL ?? DEFAULT_API_BASE_URL;
|
|
6708
6720
|
var TICK_MS = 50;
|
|
6709
6721
|
var ANSWER_POLL_MS = 1500;
|
|
6710
6722
|
var SELECTOR_STABLE_MS = 800;
|
|
@@ -8439,14 +8451,20 @@ async function pair(args2 = []) {
|
|
|
8439
8451
|
process.exit(1);
|
|
8440
8452
|
}
|
|
8441
8453
|
spin.stop("Got pairing code");
|
|
8442
|
-
showPairingCode(result.code
|
|
8454
|
+
showPairingCode(result.code);
|
|
8443
8455
|
console.log(import_picocolors3.default.dim(" Scan the QR code or enter the code in CodeAgent Mobile."));
|
|
8444
8456
|
console.log("");
|
|
8445
8457
|
const waitSpin = dist_exports.spinner();
|
|
8446
|
-
|
|
8458
|
+
const waitMessage = () => `Waiting for mobile app... \xB7 expires in ${formatRemaining(result.expiresAt)}`;
|
|
8459
|
+
waitSpin.start(waitMessage());
|
|
8460
|
+
const countdownInterval = setInterval(() => {
|
|
8461
|
+
waitSpin.message(waitMessage());
|
|
8462
|
+
}, 1e3);
|
|
8463
|
+
countdownInterval.unref?.();
|
|
8447
8464
|
await new Promise((resolve2) => {
|
|
8448
8465
|
let stopPolling = null;
|
|
8449
8466
|
function sigintHandler() {
|
|
8467
|
+
clearInterval(countdownInterval);
|
|
8450
8468
|
stopPolling?.();
|
|
8451
8469
|
console.log("");
|
|
8452
8470
|
process.exit(0);
|
|
@@ -8455,6 +8473,7 @@ async function pair(args2 = []) {
|
|
|
8455
8473
|
pluginId,
|
|
8456
8474
|
(info) => {
|
|
8457
8475
|
process.removeListener("SIGINT", sigintHandler);
|
|
8476
|
+
clearInterval(countdownInterval);
|
|
8458
8477
|
waitSpin.stop("Paired!");
|
|
8459
8478
|
addSession({
|
|
8460
8479
|
id: info.sessionId,
|
|
@@ -8472,6 +8491,7 @@ async function pair(args2 = []) {
|
|
|
8472
8491
|
resolve2();
|
|
8473
8492
|
},
|
|
8474
8493
|
() => {
|
|
8494
|
+
clearInterval(countdownInterval);
|
|
8475
8495
|
waitSpin.stop("Timed out");
|
|
8476
8496
|
showError("Pairing timed out after 5 minutes. Run codeam pair to try again.");
|
|
8477
8497
|
process.exit(1);
|
|
@@ -8486,7 +8506,7 @@ async function pair(args2 = []) {
|
|
|
8486
8506
|
var fs15 = __toESM(require("fs"));
|
|
8487
8507
|
var os14 = __toESM(require("os"));
|
|
8488
8508
|
var import_crypto5 = require("crypto");
|
|
8489
|
-
var API_BASE7 = process.env.CODEAM_API_URL ??
|
|
8509
|
+
var API_BASE7 = process.env.CODEAM_API_URL ?? DEFAULT_API_BASE_URL;
|
|
8490
8510
|
function fail(msg) {
|
|
8491
8511
|
console.error(`
|
|
8492
8512
|
${msg}
|
|
@@ -10621,7 +10641,7 @@ async function stopWorkspaceFromLocal(target) {
|
|
|
10621
10641
|
// src/commands/version.ts
|
|
10622
10642
|
var import_picocolors11 = __toESM(require("picocolors"));
|
|
10623
10643
|
function version() {
|
|
10624
|
-
const v = true ? "2.15.
|
|
10644
|
+
const v = true ? "2.15.8" : "unknown";
|
|
10625
10645
|
console.log(`${import_picocolors11.default.bold("codeam-cli")} ${import_picocolors11.default.cyan(v)}`);
|
|
10626
10646
|
}
|
|
10627
10647
|
|
|
@@ -10760,7 +10780,7 @@ function checkForUpdates() {
|
|
|
10760
10780
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
10761
10781
|
if (process.env.CI) return;
|
|
10762
10782
|
if (!process.stdout.isTTY) return;
|
|
10763
|
-
const current = true ? "2.15.
|
|
10783
|
+
const current = true ? "2.15.8" : null;
|
|
10764
10784
|
if (!current) return;
|
|
10765
10785
|
const cache = readCache();
|
|
10766
10786
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.15.
|
|
3
|
+
"version": "2.15.8",
|
|
4
4
|
"description": "Workflow-continuity bridge for AI coding agents. Wrap Claude Code or Codex in a PTY and supervise, approve, and redirect the session from any device — async. The terminal companion for CodeAgent Mobile.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "dist/index.js",
|