codeam-cli 2.40.1 → 2.41.0
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 +20 -0
- package/dist/index.js +45 -11
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,26 @@ 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.40.2] — 2026-06-24
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** Provision Claude setup-token via CLAUDE_CODE_OAUTH_TOKEN on self-hosted (was malformed .credentials.json → 401)
|
|
12
|
+
|
|
13
|
+
### Merge
|
|
14
|
+
|
|
15
|
+
- Provision Claude setup-token via CLAUDE_CODE_OAUTH_TOKEN on self-hosted
|
|
16
|
+
|
|
17
|
+
## [2.40.1] — 2026-06-24
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- **cli:** Refresh plugin-auth token on 401 in reportCredentialInvalid
|
|
22
|
+
|
|
23
|
+
### Merge
|
|
24
|
+
|
|
25
|
+
- ReportCredentialInvalid refreshes plugin-auth token on 401 (codeagent-niu)
|
|
26
|
+
|
|
7
27
|
## [2.40.0] — 2026-06-24
|
|
8
28
|
|
|
9
29
|
### Added
|
package/dist/index.js
CHANGED
|
@@ -5390,7 +5390,7 @@ function readAnonId() {
|
|
|
5390
5390
|
}
|
|
5391
5391
|
function superProperties() {
|
|
5392
5392
|
return {
|
|
5393
|
-
cliVersion: true ? "2.
|
|
5393
|
+
cliVersion: true ? "2.41.0" : "0.0.0-dev",
|
|
5394
5394
|
nodeVersion: process.version,
|
|
5395
5395
|
platform: process.platform,
|
|
5396
5396
|
arch: process.arch,
|
|
@@ -5549,7 +5549,7 @@ var os4 = __toESM(require("os"));
|
|
|
5549
5549
|
// package.json
|
|
5550
5550
|
var package_default = {
|
|
5551
5551
|
name: "codeam-cli",
|
|
5552
|
-
version: "2.
|
|
5552
|
+
version: "2.41.0",
|
|
5553
5553
|
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.",
|
|
5554
5554
|
type: "commonjs",
|
|
5555
5555
|
main: "dist/index.js",
|
|
@@ -17308,7 +17308,11 @@ var claudeProvisioner = {
|
|
|
17308
17308
|
if (auth.kind === "api_key") {
|
|
17309
17309
|
return { ANTHROPIC_API_KEY: auth.value };
|
|
17310
17310
|
}
|
|
17311
|
-
|
|
17311
|
+
const value = auth.value.trim();
|
|
17312
|
+
const isJsonBlob = value.startsWith("{");
|
|
17313
|
+
if (isJsonBlob) {
|
|
17314
|
+
writeFile0600(path43.join(home, ".claude", ".credentials.json"), value);
|
|
17315
|
+
}
|
|
17312
17316
|
const claudeJson = path43.join(home, ".claude.json");
|
|
17313
17317
|
if (!fs37.existsSync(claudeJson)) {
|
|
17314
17318
|
writeFile0600(
|
|
@@ -17316,7 +17320,7 @@ var claudeProvisioner = {
|
|
|
17316
17320
|
JSON.stringify({ hasCompletedOnboarding: true, customApiKeyResponses: { approved: [] } })
|
|
17317
17321
|
);
|
|
17318
17322
|
}
|
|
17319
|
-
return {};
|
|
17323
|
+
return isJsonBlob ? {} : { CLAUDE_CODE_OAUTH_TOKEN: value };
|
|
17320
17324
|
}
|
|
17321
17325
|
};
|
|
17322
17326
|
var codexProvisioner = {
|
|
@@ -17749,7 +17753,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
17749
17753
|
if (process.env.NODE_ENV === "test") return;
|
|
17750
17754
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
17751
17755
|
if (process.env.CI) return;
|
|
17752
|
-
const current = true ? "2.
|
|
17756
|
+
const current = true ? "2.41.0" : null;
|
|
17753
17757
|
if (!current) return;
|
|
17754
17758
|
const cache = readCache();
|
|
17755
17759
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -17766,7 +17770,7 @@ function checkForUpdates() {
|
|
|
17766
17770
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
17767
17771
|
if (process.env.CI) return;
|
|
17768
17772
|
if (!process.stdout.isTTY) return;
|
|
17769
|
-
const current = true ? "2.
|
|
17773
|
+
const current = true ? "2.41.0" : null;
|
|
17770
17774
|
if (!current) return;
|
|
17771
17775
|
const cache = readCache();
|
|
17772
17776
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -18204,7 +18208,7 @@ var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process14.s
|
|
|
18204
18208
|
detached: false
|
|
18205
18209
|
});
|
|
18206
18210
|
function currentCliVersion() {
|
|
18207
|
-
return true ? "2.
|
|
18211
|
+
return true ? "2.41.0" : null;
|
|
18208
18212
|
}
|
|
18209
18213
|
function runCmd(cmd, args2, timeoutMs) {
|
|
18210
18214
|
return new Promise((resolve7) => {
|
|
@@ -24615,10 +24619,38 @@ function looksLikeAuthFailure(text) {
|
|
|
24615
24619
|
}
|
|
24616
24620
|
var AUTH_FAILURE_MESSAGE = "\u{1F512} **Authentication failed \u2014 your agent credentials are invalid or expired (API 401).**\n\nTap [Re-authenticate this agent](codeam://reauth) to renew your credentials in Profile \u203A Agents, then send your message again.";
|
|
24617
24621
|
var TURN_FAILURE_MESSAGE = "\u26A0\uFE0F **The agent hit an error and couldn\u2019t finish this turn.** Please send your message again.";
|
|
24622
|
+
var PROVIDER_OUTAGE_RE = /overloaded_error|\boverloaded\b|service[ _]unavailable|temporarily[ _]unavailable|(?:api error|http|status)[:\s]+(?:529|503|502|504)\b|\b(?:529|503|502|504)\b[^\n]{0,40}(?:overload|unavailable|gateway|upstream|server error)|bad gateway|gateway time-?out|upstream (?:error|connect|timeout)/i;
|
|
24623
|
+
function looksLikeProviderOutage(text) {
|
|
24624
|
+
return PROVIDER_OUTAGE_RE.test(text);
|
|
24625
|
+
}
|
|
24626
|
+
function agentStatusPage(agent) {
|
|
24627
|
+
const a = (agent ?? "").toLowerCase();
|
|
24628
|
+
if (a.includes("claude") || a.includes("anthropic"))
|
|
24629
|
+
return { vendor: "Anthropic", url: "https://status.anthropic.com" };
|
|
24630
|
+
if (a.includes("codex") || a.includes("openai"))
|
|
24631
|
+
return { vendor: "OpenAI", url: "https://status.openai.com" };
|
|
24632
|
+
if (a.includes("gemini") || a.includes("google"))
|
|
24633
|
+
return { vendor: "Google", url: "https://status.cloud.google.com" };
|
|
24634
|
+
if (a.includes("copilot")) return { vendor: "GitHub", url: "https://www.githubstatus.com" };
|
|
24635
|
+
if (a.includes("cursor")) return { vendor: "Cursor", url: "https://status.cursor.com" };
|
|
24636
|
+
return null;
|
|
24637
|
+
}
|
|
24638
|
+
function providerOutageMessage(agent) {
|
|
24639
|
+
const info = agentStatusPage(agent);
|
|
24640
|
+
const who = info ? info.vendor : "The agent provider";
|
|
24641
|
+
return `\u{1F310} **${who} is having a service disruption \u2014 this isn\u2019t your session.**
|
|
24642
|
+
|
|
24643
|
+
The agent provider returned an overload/outage error, so this turn couldn\u2019t finish. It usually clears up on its own \u2014 just send your message again in a bit.` + (info ? `
|
|
24644
|
+
|
|
24645
|
+
Follow the status here: [${info.url}](${info.url})` : "");
|
|
24646
|
+
}
|
|
24618
24647
|
function failureBubble(opts) {
|
|
24619
24648
|
if (looksLikeAuthFailure(opts.detail) || looksLikeAuthFailure(opts.recentStderr)) {
|
|
24620
24649
|
return AUTH_FAILURE_MESSAGE;
|
|
24621
24650
|
}
|
|
24651
|
+
if (looksLikeProviderOutage(opts.detail) || looksLikeProviderOutage(opts.recentStderr)) {
|
|
24652
|
+
return providerOutageMessage(opts.agent);
|
|
24653
|
+
}
|
|
24622
24654
|
if (!opts.hadText) return TURN_FAILURE_MESSAGE;
|
|
24623
24655
|
return null;
|
|
24624
24656
|
}
|
|
@@ -24736,6 +24768,7 @@ async function runAcpSession(opts) {
|
|
|
24736
24768
|
onUnexpectedExit: (code, signal) => {
|
|
24737
24769
|
log.warn("acpRunner", `adapter died code=${code} signal=${signal}; shutting down session`);
|
|
24738
24770
|
const authFail = looksLikeAuthFailure(recentStderr.join("\n"));
|
|
24771
|
+
const outageFail = !authFail && looksLikeProviderOutage(recentStderr.join("\n"));
|
|
24739
24772
|
if (authFail) {
|
|
24740
24773
|
void reportCredentialInvalid(opts);
|
|
24741
24774
|
}
|
|
@@ -24745,7 +24778,7 @@ async function runAcpSession(opts) {
|
|
|
24745
24778
|
await streaming.closeAll();
|
|
24746
24779
|
await publisher.publishOutput({
|
|
24747
24780
|
type: "text",
|
|
24748
|
-
content: authFail ? AUTH_FAILURE_MESSAGE : `Agent adapter exited unexpectedly (code=${code ?? "null"} signal=${signal ?? "null"}).`,
|
|
24781
|
+
content: authFail ? AUTH_FAILURE_MESSAGE : outageFail ? providerOutageMessage(opts.agent) : `Agent adapter exited unexpectedly (code=${code ?? "null"} signal=${signal ?? "null"}).`,
|
|
24749
24782
|
done: true
|
|
24750
24783
|
});
|
|
24751
24784
|
})(),
|
|
@@ -24933,7 +24966,8 @@ async function handleCommand(cmd, client2, relay, acpSessionId, models, streamin
|
|
|
24933
24966
|
const bubble = failureBubble({
|
|
24934
24967
|
detail,
|
|
24935
24968
|
recentStderr: recentStderr.join("\n"),
|
|
24936
|
-
hadText
|
|
24969
|
+
hadText,
|
|
24970
|
+
agent: opts.agent
|
|
24937
24971
|
});
|
|
24938
24972
|
if (bubble) {
|
|
24939
24973
|
await publisher.publishOutput({ type: "text", content: bubble, done: true });
|
|
@@ -29092,7 +29126,7 @@ function checkChokidar() {
|
|
|
29092
29126
|
}
|
|
29093
29127
|
async function doctor(args2 = []) {
|
|
29094
29128
|
const json = args2.includes("--json");
|
|
29095
|
-
const cliVersion = true ? "2.
|
|
29129
|
+
const cliVersion = true ? "2.41.0" : "0.0.0-dev";
|
|
29096
29130
|
const apiBase2 = resolveApiBaseUrl();
|
|
29097
29131
|
const diagnosticId = (0, import_node_crypto8.randomUUID)();
|
|
29098
29132
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -29291,7 +29325,7 @@ async function completion(args2) {
|
|
|
29291
29325
|
// src/commands/version.ts
|
|
29292
29326
|
var import_picocolors14 = __toESM(require("picocolors"));
|
|
29293
29327
|
function version2() {
|
|
29294
|
-
const v = true ? "2.
|
|
29328
|
+
const v = true ? "2.41.0" : "unknown";
|
|
29295
29329
|
console.log(`${import_picocolors14.default.bold("codeam-cli")} ${import_picocolors14.default.cyan(v)}`);
|
|
29296
29330
|
}
|
|
29297
29331
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.41.0",
|
|
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",
|