codeam-cli 2.43.0 → 2.43.2
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 +25 -0
- package/dist/index.js +95 -43
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,31 @@ 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.43.1] — 2026-06-24
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** 1M-context recovery must publish an awaiting-answer (the tappable button), not just a select_prompt chunk
|
|
12
|
+
|
|
13
|
+
## [2.43.0] — 2026-06-24
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- **cli:** Classify the 1M-context usage-credits error
|
|
18
|
+
- **cli:** Persist per-session disable1mContext flag
|
|
19
|
+
- **cli:** AcpClient accepts extraEnv for the adapter spawn
|
|
20
|
+
- **cli:** OneMContextRecovery offer + decision helper
|
|
21
|
+
- **cli:** OneMContextRecovery offer + decision helper + DI recovery factory
|
|
22
|
+
- **cli:** On-demand 1M-context disable recovery — offer action, re-spawn ACP with the knob, auto-rerun
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- **cli:** Move 1M-context classifier into oneMContextRecovery (break runner import cycle)
|
|
27
|
+
|
|
28
|
+
### Documentation
|
|
29
|
+
|
|
30
|
+
- **meta:** Record agent-failure-messaging + heartbeat + credential rules (AGENTS.md + CLAUDE.md)
|
|
31
|
+
|
|
7
32
|
## [2.42.0] — 2026-06-24
|
|
8
33
|
|
|
9
34
|
### Added
|
package/dist/index.js
CHANGED
|
@@ -5397,7 +5397,7 @@ function readAnonId() {
|
|
|
5397
5397
|
}
|
|
5398
5398
|
function superProperties() {
|
|
5399
5399
|
return {
|
|
5400
|
-
cliVersion: true ? "2.43.
|
|
5400
|
+
cliVersion: true ? "2.43.2" : "0.0.0-dev",
|
|
5401
5401
|
nodeVersion: process.version,
|
|
5402
5402
|
platform: process.platform,
|
|
5403
5403
|
arch: process.arch,
|
|
@@ -5578,7 +5578,7 @@ var os4 = __toESM(require("os"));
|
|
|
5578
5578
|
// package.json
|
|
5579
5579
|
var package_default = {
|
|
5580
5580
|
name: "codeam-cli",
|
|
5581
|
-
version: "2.43.
|
|
5581
|
+
version: "2.43.2",
|
|
5582
5582
|
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.",
|
|
5583
5583
|
type: "commonjs",
|
|
5584
5584
|
main: "dist/index.js",
|
|
@@ -17361,15 +17361,25 @@ function writeFile0600(filePath, contents) {
|
|
|
17361
17361
|
fs37.writeFileSync(filePath, contents, { encoding: "utf8", mode: 384 });
|
|
17362
17362
|
fs37.chmodSync(filePath, 384);
|
|
17363
17363
|
}
|
|
17364
|
+
function rmIfExists(filePath) {
|
|
17365
|
+
try {
|
|
17366
|
+
fs37.rmSync(filePath, { force: true });
|
|
17367
|
+
} catch {
|
|
17368
|
+
}
|
|
17369
|
+
}
|
|
17364
17370
|
var claudeProvisioner = {
|
|
17365
17371
|
write(auth, home) {
|
|
17372
|
+
const credentialsJson = path43.join(home, ".claude", ".credentials.json");
|
|
17366
17373
|
if (auth.kind === "api_key") {
|
|
17374
|
+
rmIfExists(credentialsJson);
|
|
17367
17375
|
return { ANTHROPIC_API_KEY: auth.value };
|
|
17368
17376
|
}
|
|
17369
17377
|
const value = auth.value.trim();
|
|
17370
17378
|
const isJsonBlob = value.startsWith("{");
|
|
17371
17379
|
if (isJsonBlob) {
|
|
17372
|
-
writeFile0600(
|
|
17380
|
+
writeFile0600(credentialsJson, value);
|
|
17381
|
+
} else {
|
|
17382
|
+
rmIfExists(credentialsJson);
|
|
17373
17383
|
}
|
|
17374
17384
|
const claudeJson = path43.join(home, ".claude.json");
|
|
17375
17385
|
if (!fs37.existsSync(claudeJson)) {
|
|
@@ -17383,10 +17393,12 @@ var claudeProvisioner = {
|
|
|
17383
17393
|
};
|
|
17384
17394
|
var codexProvisioner = {
|
|
17385
17395
|
write(auth, home) {
|
|
17396
|
+
const authJson = path43.join(home, ".codex", "auth.json");
|
|
17386
17397
|
if (auth.kind === "api_key") {
|
|
17398
|
+
rmIfExists(authJson);
|
|
17387
17399
|
return { OPENAI_API_KEY: auth.value };
|
|
17388
17400
|
}
|
|
17389
|
-
writeFile0600(
|
|
17401
|
+
writeFile0600(authJson, auth.value);
|
|
17390
17402
|
return {};
|
|
17391
17403
|
}
|
|
17392
17404
|
};
|
|
@@ -17811,7 +17823,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
17811
17823
|
if (process.env.NODE_ENV === "test") return;
|
|
17812
17824
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
17813
17825
|
if (process.env.CI) return;
|
|
17814
|
-
const current = true ? "2.43.
|
|
17826
|
+
const current = true ? "2.43.2" : null;
|
|
17815
17827
|
if (!current) return;
|
|
17816
17828
|
const cache = readCache();
|
|
17817
17829
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -17828,7 +17840,7 @@ function checkForUpdates() {
|
|
|
17828
17840
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
17829
17841
|
if (process.env.CI) return;
|
|
17830
17842
|
if (!process.stdout.isTTY) return;
|
|
17831
|
-
const current = true ? "2.43.
|
|
17843
|
+
const current = true ? "2.43.2" : null;
|
|
17832
17844
|
if (!current) return;
|
|
17833
17845
|
const cache = readCache();
|
|
17834
17846
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -18266,7 +18278,7 @@ var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process14.s
|
|
|
18266
18278
|
detached: false
|
|
18267
18279
|
});
|
|
18268
18280
|
function currentCliVersion() {
|
|
18269
|
-
return true ? "2.43.
|
|
18281
|
+
return true ? "2.43.2" : null;
|
|
18270
18282
|
}
|
|
18271
18283
|
function runCmd(cmd, args2, timeoutMs) {
|
|
18272
18284
|
return new Promise((resolve7) => {
|
|
@@ -23464,6 +23476,7 @@ function createOneMRecovery(deps) {
|
|
|
23464
23476
|
pending = { blocks };
|
|
23465
23477
|
await deps.publishText(sp.question);
|
|
23466
23478
|
await deps.publishSelectPrompt(sp.question, sp.options);
|
|
23479
|
+
await deps.publishAwaitingAnswer(sp.question, sp.options);
|
|
23467
23480
|
deps.appendAgentReply(sp.question);
|
|
23468
23481
|
deps.flushHistory();
|
|
23469
23482
|
deps.log?.(`1M-context credits gate \u2014 recovery offered id=${commandId.slice(0, 8)}`);
|
|
@@ -23510,6 +23523,7 @@ function reconcileCumulative(existing, incoming) {
|
|
|
23510
23523
|
}
|
|
23511
23524
|
|
|
23512
23525
|
// src/agents/acp/onboarding.ts
|
|
23526
|
+
var import_child_process22 = require("child_process");
|
|
23513
23527
|
var fs44 = __toESM(require("fs"));
|
|
23514
23528
|
var os37 = __toESM(require("os"));
|
|
23515
23529
|
var path51 = __toESM(require("path"));
|
|
@@ -23523,10 +23537,44 @@ var _onboardingSeam = {
|
|
|
23523
23537
|
disabled: () => {
|
|
23524
23538
|
const v = process.env.CODEAM_ONBOARDING_DISABLED;
|
|
23525
23539
|
return !!v && v !== "0" && v.toLowerCase() !== "false";
|
|
23540
|
+
},
|
|
23541
|
+
/**
|
|
23542
|
+
* The `origin` remote URL for `cwd`, or null when there's no git repo /
|
|
23543
|
+
* remote. Seam so tests drive `resolveRepoName` without a real checkout.
|
|
23544
|
+
*/
|
|
23545
|
+
gitRemoteUrl: (cwd) => {
|
|
23546
|
+
try {
|
|
23547
|
+
return (0, import_child_process22.execFileSync)("git", ["-C", cwd, "remote", "get-url", "origin"], {
|
|
23548
|
+
encoding: "utf8",
|
|
23549
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
23550
|
+
timeout: 2e3
|
|
23551
|
+
}).trim();
|
|
23552
|
+
} catch {
|
|
23553
|
+
return null;
|
|
23554
|
+
}
|
|
23526
23555
|
}
|
|
23527
23556
|
};
|
|
23557
|
+
function isUuid(s) {
|
|
23558
|
+
return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(s);
|
|
23559
|
+
}
|
|
23560
|
+
function repoNameFromRemoteUrl(url) {
|
|
23561
|
+
const m = url.trim().replace(/\.git$/, "").replace(/\/$/, "").match(/[/:]([^/]+)\/([^/]+)$/);
|
|
23562
|
+
return m ? m[2] : null;
|
|
23563
|
+
}
|
|
23564
|
+
function resolveRepoName(cwd) {
|
|
23565
|
+
if (cwd) {
|
|
23566
|
+
const url = _onboardingSeam.gitRemoteUrl(cwd);
|
|
23567
|
+
if (url) {
|
|
23568
|
+
const name = repoNameFromRemoteUrl(url);
|
|
23569
|
+
if (name) return name;
|
|
23570
|
+
}
|
|
23571
|
+
}
|
|
23572
|
+
const base = path51.basename(cwd || "");
|
|
23573
|
+
if (base && !isUuid(base)) return base;
|
|
23574
|
+
return "this project";
|
|
23575
|
+
}
|
|
23528
23576
|
function buildOnboardingWelcome(cwd) {
|
|
23529
|
-
const repo =
|
|
23577
|
+
const repo = resolveRepoName(cwd);
|
|
23530
23578
|
return [
|
|
23531
23579
|
`Welcome to CodeAgent Mobile! \u{1F44B} You're now driving this agent from your phone \u2014 and it comes fully wired, zero setup:`,
|
|
23532
23580
|
"",
|
|
@@ -23798,7 +23846,7 @@ function extractSelectPrompt(text) {
|
|
|
23798
23846
|
var import_crypto5 = require("crypto");
|
|
23799
23847
|
|
|
23800
23848
|
// src/services/turn-files/git-changeset.ts
|
|
23801
|
-
var
|
|
23849
|
+
var import_child_process23 = require("child_process");
|
|
23802
23850
|
var fs45 = __toESM(require("fs/promises"));
|
|
23803
23851
|
var path52 = __toESM(require("path"));
|
|
23804
23852
|
async function collectRepoChangeset(opts) {
|
|
@@ -23913,7 +23961,7 @@ function defaultRunGit(cwd, args2) {
|
|
|
23913
23961
|
return new Promise((resolve7) => {
|
|
23914
23962
|
let proc;
|
|
23915
23963
|
try {
|
|
23916
|
-
proc = (0,
|
|
23964
|
+
proc = (0, import_child_process23.spawn)("git", args2, { cwd, env: process.env });
|
|
23917
23965
|
} catch {
|
|
23918
23966
|
resolve7(null);
|
|
23919
23967
|
return;
|
|
@@ -24953,6 +25001,10 @@ async function runAcpSession(opts) {
|
|
|
24953
25001
|
currentIndex: 0,
|
|
24954
25002
|
done: true
|
|
24955
25003
|
}),
|
|
25004
|
+
// The button driver — mobile renders the tappable option from this
|
|
25005
|
+
// awaiting-answer event; the user's tap returns as a `select_option`
|
|
25006
|
+
// command, caught at the top of the select_option case by tryRecover.
|
|
25007
|
+
publishAwaitingAnswer: (prompt, options) => publisher.publishAwaitingAnswer({ questionId: (0, import_node_crypto7.randomUUID)(), prompt, options }),
|
|
24956
25008
|
sendResult: (commandId, status2, result) => relay.sendResult(commandId, status2, result),
|
|
24957
25009
|
appendAgentReply: (text) => history.appendAgentReply(text),
|
|
24958
25010
|
flushHistory: () => void history.flush(),
|
|
@@ -27165,11 +27217,11 @@ async function logout() {
|
|
|
27165
27217
|
var import_picocolors11 = __toESM(require("picocolors"));
|
|
27166
27218
|
|
|
27167
27219
|
// src/services/providers/github-codespaces.ts
|
|
27168
|
-
var
|
|
27220
|
+
var import_child_process24 = require("child_process");
|
|
27169
27221
|
var import_util4 = require("util");
|
|
27170
27222
|
var import_picocolors9 = __toESM(require("picocolors"));
|
|
27171
27223
|
var path55 = __toESM(require("path"));
|
|
27172
|
-
var execFileP6 = (0, import_util4.promisify)(
|
|
27224
|
+
var execFileP6 = (0, import_util4.promisify)(import_child_process24.execFile);
|
|
27173
27225
|
var MAX_BUFFER = 8 * 1024 * 1024;
|
|
27174
27226
|
function resetStdinForChild() {
|
|
27175
27227
|
if (process.stdin.isTTY) {
|
|
@@ -27213,7 +27265,7 @@ var GitHubCodespacesProvider = class {
|
|
|
27213
27265
|
if (!isAuthed) {
|
|
27214
27266
|
resetStdinForChild();
|
|
27215
27267
|
await new Promise((resolve7, reject) => {
|
|
27216
|
-
const proc = (0,
|
|
27268
|
+
const proc = (0, import_child_process24.spawn)("gh", ["auth", "login", "-s", "codespace,repo,read:user"], {
|
|
27217
27269
|
stdio: "inherit"
|
|
27218
27270
|
});
|
|
27219
27271
|
proc.on("exit", (code) => {
|
|
@@ -27247,7 +27299,7 @@ var GitHubCodespacesProvider = class {
|
|
|
27247
27299
|
wt(noteLines.join("\n"), "One more permission needed");
|
|
27248
27300
|
resetStdinForChild();
|
|
27249
27301
|
const refreshCode = await new Promise((resolve7, reject) => {
|
|
27250
|
-
const proc = (0,
|
|
27302
|
+
const proc = (0, import_child_process24.spawn)(
|
|
27251
27303
|
"gh",
|
|
27252
27304
|
["auth", "refresh", "-h", "github.com", "-s", "codespace"],
|
|
27253
27305
|
{ stdio: "inherit" }
|
|
@@ -27397,7 +27449,7 @@ var GitHubCodespacesProvider = class {
|
|
|
27397
27449
|
O2.step(`Installing gh via ${installCmd.describe}\u2026`);
|
|
27398
27450
|
resetStdinForChild();
|
|
27399
27451
|
const ok = await new Promise((resolve7) => {
|
|
27400
|
-
const proc = (0,
|
|
27452
|
+
const proc = (0, import_child_process24.spawn)(installCmd.exe, installCmd.args, { stdio: "inherit" });
|
|
27401
27453
|
proc.on("exit", (code) => resolve7(code === 0));
|
|
27402
27454
|
proc.on("error", () => resolve7(false));
|
|
27403
27455
|
});
|
|
@@ -27424,7 +27476,7 @@ var GitHubCodespacesProvider = class {
|
|
|
27424
27476
|
);
|
|
27425
27477
|
resetStdinForChild();
|
|
27426
27478
|
await new Promise((resolve7, reject) => {
|
|
27427
|
-
const proc = (0,
|
|
27479
|
+
const proc = (0, import_child_process24.spawn)(
|
|
27428
27480
|
"gh",
|
|
27429
27481
|
["auth", "refresh", "-h", "github.com", "-s", "repo,read:org"],
|
|
27430
27482
|
{ stdio: "inherit" }
|
|
@@ -27602,7 +27654,7 @@ var GitHubCodespacesProvider = class {
|
|
|
27602
27654
|
async streamCommand(workspaceId, command2) {
|
|
27603
27655
|
resetStdinForChild();
|
|
27604
27656
|
return new Promise((resolve7, reject) => {
|
|
27605
|
-
const proc = (0,
|
|
27657
|
+
const proc = (0, import_child_process24.spawn)(
|
|
27606
27658
|
"gh",
|
|
27607
27659
|
["codespace", "ssh", "-c", workspaceId, "--", "-tt", command2],
|
|
27608
27660
|
{ stdio: "inherit" }
|
|
@@ -27629,11 +27681,11 @@ var GitHubCodespacesProvider = class {
|
|
|
27629
27681
|
`mkdir -p ${shellQuote(remoteDir)} && tar -xzf - -C ${shellQuote(remoteDir)}`
|
|
27630
27682
|
];
|
|
27631
27683
|
await new Promise((resolve7, reject) => {
|
|
27632
|
-
const tar = (0,
|
|
27684
|
+
const tar = (0, import_child_process24.spawn)("tar", tarArgs, {
|
|
27633
27685
|
stdio: ["ignore", "pipe", "pipe"],
|
|
27634
27686
|
env: tarEnv
|
|
27635
27687
|
});
|
|
27636
|
-
const ssh = (0,
|
|
27688
|
+
const ssh = (0, import_child_process24.spawn)("gh", sshArgs, {
|
|
27637
27689
|
stdio: [tar.stdout, "pipe", "pipe"]
|
|
27638
27690
|
});
|
|
27639
27691
|
let tarErr = "";
|
|
@@ -27667,7 +27719,7 @@ var GitHubCodespacesProvider = class {
|
|
|
27667
27719
|
}
|
|
27668
27720
|
const cmd = parts.join(" && ");
|
|
27669
27721
|
await new Promise((resolve7, reject) => {
|
|
27670
|
-
const proc = (0,
|
|
27722
|
+
const proc = (0, import_child_process24.spawn)(
|
|
27671
27723
|
"gh",
|
|
27672
27724
|
["codespace", "ssh", "-c", workspaceId, "--", cmd],
|
|
27673
27725
|
{ stdio: ["pipe", "pipe", "pipe"] }
|
|
@@ -27725,11 +27777,11 @@ function shellQuote(s) {
|
|
|
27725
27777
|
}
|
|
27726
27778
|
|
|
27727
27779
|
// src/services/providers/gitpod.ts
|
|
27728
|
-
var
|
|
27780
|
+
var import_child_process25 = require("child_process");
|
|
27729
27781
|
var import_util5 = require("util");
|
|
27730
27782
|
var path56 = __toESM(require("path"));
|
|
27731
27783
|
var import_picocolors10 = __toESM(require("picocolors"));
|
|
27732
|
-
var execFileP7 = (0, import_util5.promisify)(
|
|
27784
|
+
var execFileP7 = (0, import_util5.promisify)(import_child_process25.execFile);
|
|
27733
27785
|
var MAX_BUFFER2 = 8 * 1024 * 1024;
|
|
27734
27786
|
function resetStdinForChild2() {
|
|
27735
27787
|
if (process.stdin.isTTY) {
|
|
@@ -27769,7 +27821,7 @@ var GitpodProvider = class {
|
|
|
27769
27821
|
);
|
|
27770
27822
|
resetStdinForChild2();
|
|
27771
27823
|
await new Promise((resolve7, reject) => {
|
|
27772
|
-
const proc = (0,
|
|
27824
|
+
const proc = (0, import_child_process25.spawn)("gitpod", ["login"], { stdio: "inherit" });
|
|
27773
27825
|
proc.on("exit", (code) => {
|
|
27774
27826
|
if (code === 0) resolve7();
|
|
27775
27827
|
else reject(new Error("gitpod login failed."));
|
|
@@ -27921,7 +27973,7 @@ var GitpodProvider = class {
|
|
|
27921
27973
|
async streamCommand(workspaceId, command2) {
|
|
27922
27974
|
resetStdinForChild2();
|
|
27923
27975
|
return new Promise((resolve7, reject) => {
|
|
27924
|
-
const proc = (0,
|
|
27976
|
+
const proc = (0, import_child_process25.spawn)(
|
|
27925
27977
|
"gitpod",
|
|
27926
27978
|
["workspace", "ssh", workspaceId, "--", "-tt", command2],
|
|
27927
27979
|
{ stdio: "inherit" }
|
|
@@ -27941,11 +27993,11 @@ var GitpodProvider = class {
|
|
|
27941
27993
|
const tarEnv = { ...process.env, COPYFILE_DISABLE: "1" };
|
|
27942
27994
|
const remoteCmd = `mkdir -p ${shellQuote2(remoteDir)} && tar -xzf - -C ${shellQuote2(remoteDir)}`;
|
|
27943
27995
|
await new Promise((resolve7, reject) => {
|
|
27944
|
-
const tar = (0,
|
|
27996
|
+
const tar = (0, import_child_process25.spawn)("tar", tarArgs, {
|
|
27945
27997
|
stdio: ["ignore", "pipe", "pipe"],
|
|
27946
27998
|
env: tarEnv
|
|
27947
27999
|
});
|
|
27948
|
-
const ssh = (0,
|
|
28000
|
+
const ssh = (0, import_child_process25.spawn)(
|
|
27949
28001
|
"gitpod",
|
|
27950
28002
|
["workspace", "ssh", workspaceId, "--", remoteCmd],
|
|
27951
28003
|
{ stdio: [tar.stdout, "pipe", "pipe"] }
|
|
@@ -27977,7 +28029,7 @@ var GitpodProvider = class {
|
|
|
27977
28029
|
}
|
|
27978
28030
|
const cmd = parts.join(" && ");
|
|
27979
28031
|
await new Promise((resolve7, reject) => {
|
|
27980
|
-
const proc = (0,
|
|
28032
|
+
const proc = (0, import_child_process25.spawn)(
|
|
27981
28033
|
"gitpod",
|
|
27982
28034
|
["workspace", "ssh", workspaceId, "--", cmd],
|
|
27983
28035
|
{ stdio: ["pipe", "pipe", "pipe"] }
|
|
@@ -28001,10 +28053,10 @@ function shellQuote2(s) {
|
|
|
28001
28053
|
}
|
|
28002
28054
|
|
|
28003
28055
|
// src/services/providers/gitlab-workspaces.ts
|
|
28004
|
-
var
|
|
28056
|
+
var import_child_process26 = require("child_process");
|
|
28005
28057
|
var import_util6 = require("util");
|
|
28006
28058
|
var path57 = __toESM(require("path"));
|
|
28007
|
-
var execFileP8 = (0, import_util6.promisify)(
|
|
28059
|
+
var execFileP8 = (0, import_util6.promisify)(import_child_process26.execFile);
|
|
28008
28060
|
var MAX_BUFFER3 = 8 * 1024 * 1024;
|
|
28009
28061
|
var GITLAB_API_BASE = process.env.CODEAM_GITLAB_API_URL ?? "https://gitlab.com/api/v4";
|
|
28010
28062
|
function resetStdinForChild3() {
|
|
@@ -28046,7 +28098,7 @@ var GitLabWorkspacesProvider = class {
|
|
|
28046
28098
|
);
|
|
28047
28099
|
resetStdinForChild3();
|
|
28048
28100
|
await new Promise((resolve7, reject) => {
|
|
28049
|
-
const proc = (0,
|
|
28101
|
+
const proc = (0, import_child_process26.spawn)(
|
|
28050
28102
|
"glab",
|
|
28051
28103
|
["auth", "login", "--scopes", "api,read_user,read_repository"],
|
|
28052
28104
|
{ stdio: "inherit" }
|
|
@@ -28218,7 +28270,7 @@ Docs: https://docs.gitlab.com/ee/user/workspace/configuration.html`
|
|
|
28218
28270
|
const sshHost = process.env.CODEAM_GITLAB_SSH_HOST ?? "workspaces.gitlab.com";
|
|
28219
28271
|
resetStdinForChild3();
|
|
28220
28272
|
return new Promise((resolve7, reject) => {
|
|
28221
|
-
const proc = (0,
|
|
28273
|
+
const proc = (0, import_child_process26.spawn)(
|
|
28222
28274
|
"ssh",
|
|
28223
28275
|
["-tt", "-o", "StrictHostKeyChecking=accept-new", `${workspaceId}@${sshHost}`, command2],
|
|
28224
28276
|
{ stdio: "inherit" }
|
|
@@ -28239,8 +28291,8 @@ Docs: https://docs.gitlab.com/ee/user/workspace/configuration.html`
|
|
|
28239
28291
|
const tarEnv = { ...process.env, COPYFILE_DISABLE: "1" };
|
|
28240
28292
|
const remoteCmd = `mkdir -p ${shellQuote3(remoteDir)} && tar -xzf - -C ${shellQuote3(remoteDir)}`;
|
|
28241
28293
|
await new Promise((resolve7, reject) => {
|
|
28242
|
-
const tar = (0,
|
|
28243
|
-
const ssh = (0,
|
|
28294
|
+
const tar = (0, import_child_process26.spawn)("tar", tarArgs, { stdio: ["ignore", "pipe", "pipe"], env: tarEnv });
|
|
28295
|
+
const ssh = (0, import_child_process26.spawn)(
|
|
28244
28296
|
"ssh",
|
|
28245
28297
|
["-o", "StrictHostKeyChecking=accept-new", `${workspaceId}@${sshHost}`, remoteCmd],
|
|
28246
28298
|
{ stdio: [tar.stdout, "pipe", "pipe"] }
|
|
@@ -28270,7 +28322,7 @@ Docs: https://docs.gitlab.com/ee/user/workspace/configuration.html`
|
|
|
28270
28322
|
}
|
|
28271
28323
|
const cmd = parts.join(" && ");
|
|
28272
28324
|
await new Promise((resolve7, reject) => {
|
|
28273
|
-
const proc = (0,
|
|
28325
|
+
const proc = (0, import_child_process26.spawn)(
|
|
28274
28326
|
"ssh",
|
|
28275
28327
|
["-o", "StrictHostKeyChecking=accept-new", `${workspaceId}@${sshHost}`, cmd],
|
|
28276
28328
|
{ stdio: ["pipe", "pipe", "pipe"] }
|
|
@@ -28329,10 +28381,10 @@ function shellQuote3(s) {
|
|
|
28329
28381
|
}
|
|
28330
28382
|
|
|
28331
28383
|
// src/services/providers/railway.ts
|
|
28332
|
-
var
|
|
28384
|
+
var import_child_process27 = require("child_process");
|
|
28333
28385
|
var import_util7 = require("util");
|
|
28334
28386
|
var path58 = __toESM(require("path"));
|
|
28335
|
-
var execFileP9 = (0, import_util7.promisify)(
|
|
28387
|
+
var execFileP9 = (0, import_util7.promisify)(import_child_process27.execFile);
|
|
28336
28388
|
var MAX_BUFFER4 = 8 * 1024 * 1024;
|
|
28337
28389
|
function resetStdinForChild4() {
|
|
28338
28390
|
if (process.stdin.isTTY) {
|
|
@@ -28373,7 +28425,7 @@ var RailwayProvider = class {
|
|
|
28373
28425
|
);
|
|
28374
28426
|
resetStdinForChild4();
|
|
28375
28427
|
await new Promise((resolve7, reject) => {
|
|
28376
|
-
const proc = (0,
|
|
28428
|
+
const proc = (0, import_child_process27.spawn)("railway", ["login"], { stdio: "inherit" });
|
|
28377
28429
|
proc.on("exit", (code) => {
|
|
28378
28430
|
if (code === 0) resolve7();
|
|
28379
28431
|
else reject(new Error("railway login failed."));
|
|
@@ -28516,7 +28568,7 @@ var RailwayProvider = class {
|
|
|
28516
28568
|
}
|
|
28517
28569
|
resetStdinForChild4();
|
|
28518
28570
|
return new Promise((resolve7, reject) => {
|
|
28519
|
-
const proc = (0,
|
|
28571
|
+
const proc = (0, import_child_process27.spawn)(
|
|
28520
28572
|
"railway",
|
|
28521
28573
|
["shell", "--project", projectId, "--service", serviceId, "--command", command2],
|
|
28522
28574
|
{ stdio: "inherit" }
|
|
@@ -28540,8 +28592,8 @@ var RailwayProvider = class {
|
|
|
28540
28592
|
const tarEnv = { ...process.env, COPYFILE_DISABLE: "1" };
|
|
28541
28593
|
const remoteCmd = `mkdir -p ${shellQuote4(remoteDir)} && tar -xzf - -C ${shellQuote4(remoteDir)}`;
|
|
28542
28594
|
await new Promise((resolve7, reject) => {
|
|
28543
|
-
const tar = (0,
|
|
28544
|
-
const sh = (0,
|
|
28595
|
+
const tar = (0, import_child_process27.spawn)("tar", tarArgs, { stdio: ["ignore", "pipe", "pipe"], env: tarEnv });
|
|
28596
|
+
const sh = (0, import_child_process27.spawn)(
|
|
28545
28597
|
"railway",
|
|
28546
28598
|
["shell", "--project", projectId, "--service", serviceId, "--command", remoteCmd],
|
|
28547
28599
|
{ stdio: [tar.stdout, "pipe", "pipe"] }
|
|
@@ -28574,7 +28626,7 @@ var RailwayProvider = class {
|
|
|
28574
28626
|
}
|
|
28575
28627
|
const cmd = parts.join(" && ");
|
|
28576
28628
|
await new Promise((resolve7, reject) => {
|
|
28577
|
-
const proc = (0,
|
|
28629
|
+
const proc = (0, import_child_process27.spawn)(
|
|
28578
28630
|
"railway",
|
|
28579
28631
|
["shell", "--project", projectId, "--service", serviceId, "--command", cmd],
|
|
28580
28632
|
{ stdio: ["pipe", "pipe", "pipe"] }
|
|
@@ -29324,7 +29376,7 @@ function checkChokidar() {
|
|
|
29324
29376
|
}
|
|
29325
29377
|
async function doctor(args2 = []) {
|
|
29326
29378
|
const json = args2.includes("--json");
|
|
29327
|
-
const cliVersion = true ? "2.43.
|
|
29379
|
+
const cliVersion = true ? "2.43.2" : "0.0.0-dev";
|
|
29328
29380
|
const apiBase2 = resolveApiBaseUrl();
|
|
29329
29381
|
const diagnosticId = (0, import_node_crypto8.randomUUID)();
|
|
29330
29382
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -29523,7 +29575,7 @@ async function completion(args2) {
|
|
|
29523
29575
|
// src/commands/version.ts
|
|
29524
29576
|
var import_picocolors14 = __toESM(require("picocolors"));
|
|
29525
29577
|
function version2() {
|
|
29526
|
-
const v = true ? "2.43.
|
|
29578
|
+
const v = true ? "2.43.2" : "unknown";
|
|
29527
29579
|
console.log(`${import_picocolors14.default.bold("codeam-cli")} ${import_picocolors14.default.cyan(v)}`);
|
|
29528
29580
|
}
|
|
29529
29581
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.43.
|
|
3
|
+
"version": "2.43.2",
|
|
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",
|