codeam-cli 2.43.6 → 2.44.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 +12 -0
- package/README.md +15 -0
- package/dist/index.js +222 -88
- package/package.json +1 -1
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.43.7] — 2026-06-25
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** Surface ACP agent startup failures in-app instead of stuck loading/offline
|
|
12
|
+
|
|
13
|
+
## [2.43.6] — 2026-06-25
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **cli:** ACP newSession no longer hangs forever on a fatal startup error
|
|
18
|
+
|
|
7
19
|
## [2.43.5] — 2026-06-25
|
|
8
20
|
|
|
9
21
|
### Added
|
package/README.md
CHANGED
|
@@ -55,6 +55,7 @@ That's it. Open the [CodeAgent Mobile app](https://codeagent-mobile.com), enter
|
|
|
55
55
|
| `codeam sessions switch` | Choose which paired session the next `codeam` invocation will use |
|
|
56
56
|
| `codeam sessions delete <session-id>` | Forget a specific paired session (leaves the others intact) |
|
|
57
57
|
| `codeam status` | Show connection status |
|
|
58
|
+
| `codeam invite` | Print your referral link — share it to earn PRO for you and the devs you bring |
|
|
58
59
|
| `codeam doctor` | run environment, install, and pairing diagnostics (`--json` for machine-readable output) |
|
|
59
60
|
| `codeam logout` | Remove all paired sessions |
|
|
60
61
|
| `codeam deploy` | Provision a cloud workspace (GitHub Codespaces) and pair it to your phone |
|
|
@@ -68,6 +69,20 @@ That's it. Open the [CodeAgent Mobile app](https://codeagent-mobile.com), enter
|
|
|
68
69
|
|
|
69
70
|
---
|
|
70
71
|
|
|
72
|
+
## `codeam invite` — share your referral link
|
|
73
|
+
|
|
74
|
+
Once you're paired, run:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
codeam invite
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
The CLI fetches your personal referral link from the backend and prints it. Share it with teammates: every developer who signs up through your link and pairs their first session earns **both of you 14 days of PRO** — at no extra cost.
|
|
81
|
+
|
|
82
|
+
> Requires an active paired session (`codeam pair` first).
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
71
86
|
## `codeam deploy` — drive a cloud workspace from your phone
|
|
72
87
|
|
|
73
88
|
Don't want to keep your laptop running while you control Claude from the train? `codeam deploy` spins up a fresh **GitHub Codespace** for any of your repos, installs Claude Code + `codeam-cli` inside it, copies your local Claude credentials so you skip the re-auth (or runs `claude login` interactively if you don't have a local config yet), supervises the agent with **PM2** so the session survives even after you close your laptop, and gives you a QR/code to pair your phone — straight from your local terminal.
|
package/dist/index.js
CHANGED
|
@@ -5397,7 +5397,7 @@ function readAnonId() {
|
|
|
5397
5397
|
}
|
|
5398
5398
|
function superProperties() {
|
|
5399
5399
|
return {
|
|
5400
|
-
cliVersion: true ? "2.
|
|
5400
|
+
cliVersion: true ? "2.44.0" : "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.
|
|
5581
|
+
version: "2.44.0",
|
|
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",
|
|
@@ -17899,7 +17899,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
17899
17899
|
if (process.env.NODE_ENV === "test") return;
|
|
17900
17900
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
17901
17901
|
if (process.env.CI) return;
|
|
17902
|
-
const current = true ? "2.
|
|
17902
|
+
const current = true ? "2.44.0" : null;
|
|
17903
17903
|
if (!current) return;
|
|
17904
17904
|
const cache = readCache();
|
|
17905
17905
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -17916,7 +17916,7 @@ function checkForUpdates() {
|
|
|
17916
17916
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
17917
17917
|
if (process.env.CI) return;
|
|
17918
17918
|
if (!process.stdout.isTTY) return;
|
|
17919
|
-
const current = true ? "2.
|
|
17919
|
+
const current = true ? "2.44.0" : null;
|
|
17920
17920
|
if (!current) return;
|
|
17921
17921
|
const cache = readCache();
|
|
17922
17922
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -18354,7 +18354,7 @@ var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process14.s
|
|
|
18354
18354
|
detached: false
|
|
18355
18355
|
});
|
|
18356
18356
|
function currentCliVersion() {
|
|
18357
|
-
return true ? "2.
|
|
18357
|
+
return true ? "2.44.0" : null;
|
|
18358
18358
|
}
|
|
18359
18359
|
function runCmd(cmd, args2, timeoutMs) {
|
|
18360
18360
|
return new Promise((resolve7) => {
|
|
@@ -24994,6 +24994,61 @@ The agent provider returned an overload/outage error, so this turn couldn\u2019t
|
|
|
24994
24994
|
|
|
24995
24995
|
Follow the status here: [${info.url}](${info.url})` : "");
|
|
24996
24996
|
}
|
|
24997
|
+
function isGeminiIneligibleTier(haystack) {
|
|
24998
|
+
return /IneligibleTierError|UNSUPPORTED_CLIENT|no longer supported for Gemini Code Assist|not eligible for Gemini Code Assist/i.test(
|
|
24999
|
+
haystack
|
|
25000
|
+
);
|
|
25001
|
+
}
|
|
25002
|
+
function startupFailureMessage(agent, detail, recentStderr) {
|
|
25003
|
+
const haystack = `${detail}
|
|
25004
|
+
${recentStderr}`;
|
|
25005
|
+
if (agent === "gemini" && isGeminiIneligibleTier(haystack)) {
|
|
25006
|
+
return [
|
|
25007
|
+
"\u26A0\uFE0F **Gemini couldn't start \u2014 your Google account isn't eligible.**",
|
|
25008
|
+
"",
|
|
25009
|
+
"Google discontinued free **\u201CLogin with Google\u201D** access to the Gemini CLI on 2026-06-18. The free / individual tier (and Google AI Pro/Ultra) can no longer authenticate here.",
|
|
25010
|
+
"",
|
|
25011
|
+
"To use Gemini from CodeAgent, re-link it in **Profile \u203A Agents** with either:",
|
|
25012
|
+
"\u2022 a **Gemini API key** (AI Studio \u2014 free quota available), or",
|
|
25013
|
+
"\u2022 a paid **Gemini Code Assist (Standard/Enterprise)** subscription."
|
|
25014
|
+
].join("\n");
|
|
25015
|
+
}
|
|
25016
|
+
if (looksLikeAuthFailure(haystack)) return AUTH_FAILURE_MESSAGE;
|
|
25017
|
+
if (looksLikeProviderOutage(haystack)) return providerOutageMessage(agent);
|
|
25018
|
+
const tail = recentStderr.split("\n").filter(Boolean).slice(-3).join("\n");
|
|
25019
|
+
return [
|
|
25020
|
+
`\u26A0\uFE0F The ${agent} agent failed to start.`,
|
|
25021
|
+
"",
|
|
25022
|
+
tail ? `Details:
|
|
25023
|
+
${tail}` : detail
|
|
25024
|
+
].join("\n");
|
|
25025
|
+
}
|
|
25026
|
+
async function surfaceStartupFailure(opts) {
|
|
25027
|
+
const msg = startupFailureMessage(opts.agent, opts.detail, opts.recentStderr);
|
|
25028
|
+
const publish = async () => {
|
|
25029
|
+
try {
|
|
25030
|
+
await opts.publisher.publishOutput({ type: "new_turn", done: false });
|
|
25031
|
+
await opts.publisher.publishOutput({ type: "text", content: msg, done: true });
|
|
25032
|
+
} catch {
|
|
25033
|
+
}
|
|
25034
|
+
};
|
|
25035
|
+
await publish();
|
|
25036
|
+
const errRelay = new CommandRelayService(
|
|
25037
|
+
opts.pluginId,
|
|
25038
|
+
async (cmd) => {
|
|
25039
|
+
if (cmd.type === "get_conversation") {
|
|
25040
|
+
await errRelay.sendResult(cmd.id, "completed", {}).catch(() => void 0);
|
|
25041
|
+
return;
|
|
25042
|
+
}
|
|
25043
|
+
await publish();
|
|
25044
|
+
await errRelay.sendResult(cmd.id, "failed", {
|
|
25045
|
+
error: `${opts.agent} is unavailable \u2014 see the message in chat.`
|
|
25046
|
+
}).catch(() => void 0);
|
|
25047
|
+
},
|
|
25048
|
+
{ id: opts.agent, name: opts.agent, displayName: opts.agent }
|
|
25049
|
+
);
|
|
25050
|
+
errRelay.start();
|
|
25051
|
+
}
|
|
24997
25052
|
function failureBubble(opts) {
|
|
24998
25053
|
if (looksLikeAuthFailure(opts.detail) || looksLikeAuthFailure(opts.recentStderr)) {
|
|
24999
25054
|
return AUTH_FAILURE_MESSAGE;
|
|
@@ -25194,12 +25249,27 @@ async function runAcpSession(opts) {
|
|
|
25194
25249
|
log: (msg) => log.info("acpRunner", msg)
|
|
25195
25250
|
});
|
|
25196
25251
|
showInfo(`Starting ${opts.agent} via ACP adapter (${opts.adapter.requiresAgentBinary})\u2026`);
|
|
25252
|
+
let handshake;
|
|
25253
|
+
try {
|
|
25254
|
+
handshake = await client2.start();
|
|
25255
|
+
} catch (startErr) {
|
|
25256
|
+
const detail = describeError(startErr);
|
|
25257
|
+
log.warn("acpRunner", `ACP start failed for ${opts.agent}: ${detail}`);
|
|
25258
|
+
await surfaceStartupFailure({
|
|
25259
|
+
agent: opts.agent,
|
|
25260
|
+
pluginId: opts.pluginId,
|
|
25261
|
+
detail,
|
|
25262
|
+
recentStderr: recentStderr.join("\n"),
|
|
25263
|
+
publisher
|
|
25264
|
+
});
|
|
25265
|
+
return;
|
|
25266
|
+
}
|
|
25197
25267
|
const {
|
|
25198
25268
|
sessionId: acpSessionId,
|
|
25199
25269
|
initialize,
|
|
25200
25270
|
model: handshakeModel,
|
|
25201
25271
|
tier: handshakeTier
|
|
25202
|
-
} =
|
|
25272
|
+
} = handshake;
|
|
25203
25273
|
log.trace(
|
|
25204
25274
|
"acpRunner",
|
|
25205
25275
|
`adapter handshake ok protocolVersion=${initialize.protocolVersion} sessionId=${acpSessionId.slice(0, 8)}`
|
|
@@ -29378,13 +29448,71 @@ async function host(args2) {
|
|
|
29378
29448
|
);
|
|
29379
29449
|
}
|
|
29380
29450
|
|
|
29451
|
+
// src/commands/invite.ts
|
|
29452
|
+
var import_picocolors13 = __toESM(require("picocolors"));
|
|
29453
|
+
var API_BASE12 = resolveApiBaseUrl();
|
|
29454
|
+
async function invite() {
|
|
29455
|
+
showIntro();
|
|
29456
|
+
const cfg = loadCliConfig();
|
|
29457
|
+
const session = cfg.sessions.find((s) => s.id === cfg.activeSessionId) ?? null;
|
|
29458
|
+
const pluginAuthToken = session?.pluginAuthToken;
|
|
29459
|
+
const sessionId = session?.id;
|
|
29460
|
+
const pluginId = session?.pluginId ?? cfg.pluginId;
|
|
29461
|
+
if (!pluginAuthToken || !sessionId || !pluginId) {
|
|
29462
|
+
console.log(
|
|
29463
|
+
import_picocolors13.default.yellow(" Not paired yet.") + import_picocolors13.default.dim(" Run ") + import_picocolors13.default.cyan("codeam pair") + import_picocolors13.default.dim(" first, then retry.")
|
|
29464
|
+
);
|
|
29465
|
+
console.log("");
|
|
29466
|
+
return;
|
|
29467
|
+
}
|
|
29468
|
+
try {
|
|
29469
|
+
const result = await _transport.postJsonAuthed(
|
|
29470
|
+
`${API_BASE12}/api/referrals/code`,
|
|
29471
|
+
{ sessionId, pluginId },
|
|
29472
|
+
pluginAuthToken
|
|
29473
|
+
);
|
|
29474
|
+
const data = result?.data;
|
|
29475
|
+
if (!data?.link) {
|
|
29476
|
+
console.log(
|
|
29477
|
+
import_picocolors13.default.red(" Unexpected response from server. Try ") + import_picocolors13.default.cyan("codeam pair") + import_picocolors13.default.red(" then retry.")
|
|
29478
|
+
);
|
|
29479
|
+
console.log("");
|
|
29480
|
+
return;
|
|
29481
|
+
}
|
|
29482
|
+
console.log(import_picocolors13.default.bold(" Invite your crew \u2014 unlock PRO for you and them\n"));
|
|
29483
|
+
console.log(` ${import_picocolors13.default.bold(import_picocolors13.default.cyan(data.link))}`);
|
|
29484
|
+
console.log("");
|
|
29485
|
+
console.log(
|
|
29486
|
+
import_picocolors13.default.dim(
|
|
29487
|
+
" Share this link. Every dev who signs up and pairs a session earns you both 14 days of PRO."
|
|
29488
|
+
)
|
|
29489
|
+
);
|
|
29490
|
+
console.log("");
|
|
29491
|
+
} catch (err) {
|
|
29492
|
+
const e = err;
|
|
29493
|
+
const code = typeof e.statusCode === "number" ? e.statusCode : null;
|
|
29494
|
+
if (code !== null) {
|
|
29495
|
+
console.log(
|
|
29496
|
+
import_picocolors13.default.red(
|
|
29497
|
+
` Couldn't fetch your invite link (HTTP ${code}). Try \`codeam pair\` then retry.`
|
|
29498
|
+
)
|
|
29499
|
+
);
|
|
29500
|
+
} else {
|
|
29501
|
+
console.log(
|
|
29502
|
+
import_picocolors13.default.red(" Couldn't reach the server. Check your connection and try again.")
|
|
29503
|
+
);
|
|
29504
|
+
}
|
|
29505
|
+
console.log("");
|
|
29506
|
+
}
|
|
29507
|
+
}
|
|
29508
|
+
|
|
29381
29509
|
// src/commands/doctor.ts
|
|
29382
29510
|
var import_node_dns = require("dns");
|
|
29383
29511
|
var import_node_util5 = require("util");
|
|
29384
29512
|
var import_node_crypto8 = require("crypto");
|
|
29385
29513
|
var fs48 = __toESM(require("fs"));
|
|
29386
29514
|
var path59 = __toESM(require("path"));
|
|
29387
|
-
var
|
|
29515
|
+
var import_picocolors14 = __toESM(require("picocolors"));
|
|
29388
29516
|
var dnsResolveP = (0, import_node_util5.promisify)(import_node_dns.resolve);
|
|
29389
29517
|
async function checkDns(apiBase2) {
|
|
29390
29518
|
const host2 = (() => {
|
|
@@ -29551,7 +29679,7 @@ function checkChokidar() {
|
|
|
29551
29679
|
}
|
|
29552
29680
|
async function doctor(args2 = []) {
|
|
29553
29681
|
const json = args2.includes("--json");
|
|
29554
|
-
const cliVersion = true ? "2.
|
|
29682
|
+
const cliVersion = true ? "2.44.0" : "0.0.0-dev";
|
|
29555
29683
|
const apiBase2 = resolveApiBaseUrl();
|
|
29556
29684
|
const diagnosticId = (0, import_node_crypto8.randomUUID)();
|
|
29557
29685
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -29591,46 +29719,46 @@ async function doctor(args2 = []) {
|
|
|
29591
29719
|
function printHumanReport(r) {
|
|
29592
29720
|
const out2 = process.stderr;
|
|
29593
29721
|
out2.write(`
|
|
29594
|
-
${
|
|
29722
|
+
${import_picocolors14.default.bold(" codeam doctor")}
|
|
29595
29723
|
|
|
29596
29724
|
`);
|
|
29597
|
-
out2.write(` ${
|
|
29725
|
+
out2.write(` ${import_picocolors14.default.dim("cli")} ${r.cliVersion}
|
|
29598
29726
|
`);
|
|
29599
|
-
out2.write(` ${
|
|
29727
|
+
out2.write(` ${import_picocolors14.default.dim("node")} ${r.node}
|
|
29600
29728
|
`);
|
|
29601
|
-
out2.write(` ${
|
|
29729
|
+
out2.write(` ${import_picocolors14.default.dim("os")} ${r.platform} ${r.arch}
|
|
29602
29730
|
`);
|
|
29603
|
-
out2.write(` ${
|
|
29731
|
+
out2.write(` ${import_picocolors14.default.dim("api")} ${r.apiBase}
|
|
29604
29732
|
`);
|
|
29605
29733
|
if (process.env.CODEAM_TEST_MODE === "1" || process.env.CODEAM_TEST_MODE?.toLowerCase() === "true") {
|
|
29606
|
-
out2.write(` ${
|
|
29734
|
+
out2.write(` ${import_picocolors14.default.dim("mode")} ${import_picocolors14.default.yellow("TEST_MODE \u2014 using dev preview")}
|
|
29607
29735
|
`);
|
|
29608
29736
|
} else if (process.env.CODEAM_API_URL) {
|
|
29609
|
-
out2.write(` ${
|
|
29737
|
+
out2.write(` ${import_picocolors14.default.dim("mode")} ${import_picocolors14.default.yellow("CODEAM_API_URL override")}
|
|
29610
29738
|
`);
|
|
29611
29739
|
}
|
|
29612
|
-
out2.write(` ${
|
|
29740
|
+
out2.write(` ${import_picocolors14.default.dim("diag id")} ${r.diagnosticId}
|
|
29613
29741
|
`);
|
|
29614
29742
|
out2.write("\n");
|
|
29615
29743
|
for (const c2 of r.checks) {
|
|
29616
|
-
const mark = c2.ok ?
|
|
29617
|
-
out2.write(` ${mark} ${c2.label}${
|
|
29744
|
+
const mark = c2.ok ? import_picocolors14.default.green("\u2713") : c2.optional ? import_picocolors14.default.yellow("!") : import_picocolors14.default.red("\u2717");
|
|
29745
|
+
out2.write(` ${mark} ${c2.label}${import_picocolors14.default.dim(` \u2014 ${c2.detail}`)}
|
|
29618
29746
|
`);
|
|
29619
29747
|
if (!c2.ok && c2.hint) {
|
|
29620
29748
|
for (const line of c2.hint.split("\n")) {
|
|
29621
|
-
out2.write(` ${
|
|
29749
|
+
out2.write(` ${import_picocolors14.default.dim(line)}
|
|
29622
29750
|
`);
|
|
29623
29751
|
}
|
|
29624
29752
|
}
|
|
29625
29753
|
}
|
|
29626
29754
|
out2.write("\n");
|
|
29627
29755
|
if (r.ok) {
|
|
29628
|
-
out2.write(` ${
|
|
29756
|
+
out2.write(` ${import_picocolors14.default.green("All checks passed.")}
|
|
29629
29757
|
|
|
29630
29758
|
`);
|
|
29631
29759
|
} else {
|
|
29632
29760
|
out2.write(
|
|
29633
|
-
` ${
|
|
29761
|
+
` ${import_picocolors14.default.red("Some checks failed.")} ${import_picocolors14.default.dim("Paste the diagnostic id above when opening a bug report.")}
|
|
29634
29762
|
|
|
29635
29763
|
`
|
|
29636
29764
|
);
|
|
@@ -29748,118 +29876,123 @@ async function completion(args2) {
|
|
|
29748
29876
|
}
|
|
29749
29877
|
|
|
29750
29878
|
// src/commands/version.ts
|
|
29751
|
-
var
|
|
29879
|
+
var import_picocolors15 = __toESM(require("picocolors"));
|
|
29752
29880
|
function version2() {
|
|
29753
|
-
const v = true ? "2.
|
|
29754
|
-
console.log(`${
|
|
29881
|
+
const v = true ? "2.44.0" : "unknown";
|
|
29882
|
+
console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
|
|
29755
29883
|
}
|
|
29756
29884
|
|
|
29757
29885
|
// src/commands/help.ts
|
|
29758
|
-
var
|
|
29886
|
+
var import_picocolors16 = __toESM(require("picocolors"));
|
|
29759
29887
|
function help() {
|
|
29760
29888
|
const lines = [
|
|
29761
29889
|
"",
|
|
29762
|
-
` ${
|
|
29890
|
+
` ${import_picocolors16.default.bold(import_picocolors16.default.magenta("codeam-cli"))} ${import_picocolors16.default.dim("\u2014 remote-control AI coding agents from your phone")}`,
|
|
29763
29891
|
"",
|
|
29764
|
-
` ${
|
|
29765
|
-
` ${
|
|
29892
|
+
` ${import_picocolors16.default.bold("Usage")}`,
|
|
29893
|
+
` ${import_picocolors16.default.cyan("codeam")} ${import_picocolors16.default.dim("[command]")}`,
|
|
29766
29894
|
"",
|
|
29767
|
-
` ${
|
|
29768
|
-
` ${
|
|
29769
|
-
` ${
|
|
29770
|
-
` ${
|
|
29771
|
-
` ${
|
|
29772
|
-
` ${
|
|
29773
|
-
` ${
|
|
29774
|
-
` ${
|
|
29775
|
-
` ${
|
|
29776
|
-
` ${
|
|
29777
|
-
` ${
|
|
29778
|
-
` ${
|
|
29779
|
-
` ${
|
|
29780
|
-
` ${
|
|
29781
|
-
` ${
|
|
29782
|
-
` ${
|
|
29895
|
+
` ${import_picocolors16.default.bold("Commands")}`,
|
|
29896
|
+
` ${import_picocolors16.default.white("codeam")} ${import_picocolors16.default.dim("start the active agent with mobile control")}`,
|
|
29897
|
+
` ${import_picocolors16.default.white("codeam <agent>")} ${import_picocolors16.default.dim("start a specific agent \u2014 e.g. claude, codex")}`,
|
|
29898
|
+
` ${import_picocolors16.default.white("codeam pair")} ${import_picocolors16.default.dim("pair a new mobile device (interactive)")}`,
|
|
29899
|
+
` ${import_picocolors16.default.white("codeam pair --agent <id>")} ${import_picocolors16.default.dim("pair non-interactively for a specific agent")}`,
|
|
29900
|
+
` ${import_picocolors16.default.white("codeam sessions")} ${import_picocolors16.default.dim("list paired devices")}`,
|
|
29901
|
+
` ${import_picocolors16.default.white("codeam sessions switch")} ${import_picocolors16.default.dim("switch the active paired session")}`,
|
|
29902
|
+
` ${import_picocolors16.default.white("codeam sessions delete <id>")} ${import_picocolors16.default.dim("remove a specific paired session")}`,
|
|
29903
|
+
` ${import_picocolors16.default.white("codeam status")} ${import_picocolors16.default.dim("show connection info")}`,
|
|
29904
|
+
` ${import_picocolors16.default.white("codeam logout")} ${import_picocolors16.default.dim("remove all paired sessions")}`,
|
|
29905
|
+
` ${import_picocolors16.default.white("codeam link <agent>")} ${import_picocolors16.default.dim("link an agent (claude, codex) to your CodeAgent account")}`,
|
|
29906
|
+
` ${import_picocolors16.default.white("codeam deploy")} ${import_picocolors16.default.dim("provision a cloud workspace (Codespaces) and pair it")}`,
|
|
29907
|
+
` ${import_picocolors16.default.white("codeam deploy ls | list")} ${import_picocolors16.default.dim("list deployed cloud workspaces")}`,
|
|
29908
|
+
` ${import_picocolors16.default.white("codeam deploy stop | remove")} ${import_picocolors16.default.dim("stop a deployed workspace session")}`,
|
|
29909
|
+
` ${import_picocolors16.default.white("codeam doctor")} ${import_picocolors16.default.dim("run diagnostic checks (DNS, /health, binaries, \u2026)")}`,
|
|
29910
|
+
` ${import_picocolors16.default.white("codeam completion <shell>")} ${import_picocolors16.default.dim("emit a bash/zsh/fish completion script")}`,
|
|
29783
29911
|
"",
|
|
29784
|
-
` ${
|
|
29785
|
-
` ${
|
|
29786
|
-
` ${
|
|
29912
|
+
` ${import_picocolors16.default.bold("Flags")}`,
|
|
29913
|
+
` ${import_picocolors16.default.white("-v, --version")} ${import_picocolors16.default.dim("print the CLI version")}`,
|
|
29914
|
+
` ${import_picocolors16.default.white("-h, --help")} ${import_picocolors16.default.dim("show this help")}`,
|
|
29787
29915
|
"",
|
|
29788
|
-
` ${
|
|
29789
|
-
` ${
|
|
29790
|
-
` ${
|
|
29916
|
+
` ${import_picocolors16.default.bold("Links")}`,
|
|
29917
|
+
` ${import_picocolors16.default.dim("Docs:")} ${import_picocolors16.default.green("https://www.codeagent-mobile.com")}`,
|
|
29918
|
+
` ${import_picocolors16.default.dim("Issues:")} ${import_picocolors16.default.green("https://github.com/edgar-durand/codeagent-mobile-clients/issues")}`,
|
|
29791
29919
|
""
|
|
29792
29920
|
];
|
|
29793
29921
|
process.stdout.write(lines.join("\n") + "\n");
|
|
29794
29922
|
}
|
|
29795
29923
|
|
|
29796
29924
|
// src/commands/subcommand-help.ts
|
|
29797
|
-
var
|
|
29925
|
+
var import_picocolors17 = __toESM(require("picocolors"));
|
|
29798
29926
|
var HELPS = {
|
|
29799
29927
|
pair: () => print([
|
|
29800
|
-
` ${
|
|
29928
|
+
` ${import_picocolors17.default.bold("codeam pair")} ${import_picocolors17.default.dim("\u2014 pair a mobile device with this CLI")}`,
|
|
29801
29929
|
"",
|
|
29802
|
-
` ${
|
|
29803
|
-
` ${
|
|
29804
|
-
` ${
|
|
29930
|
+
` ${import_picocolors17.default.cyan("codeam pair")} ${import_picocolors17.default.dim("interactive pairing (prompts for the agent)")}`,
|
|
29931
|
+
` ${import_picocolors17.default.cyan("codeam pair --agent <id>")} ${import_picocolors17.default.dim("pair non-interactively (agent: claude | codex)")}`,
|
|
29932
|
+
` ${import_picocolors17.default.cyan("codeam pair --dry-run")} ${import_picocolors17.default.dim("request a pairing code, validate the response, exit")}`
|
|
29805
29933
|
]),
|
|
29806
29934
|
"pair-auto": () => print([
|
|
29807
|
-
` ${
|
|
29935
|
+
` ${import_picocolors17.default.bold("codeam pair-auto")} ${import_picocolors17.default.dim("\u2014 non-interactive variant of pair for scripted setups")}`,
|
|
29808
29936
|
"",
|
|
29809
|
-
` ${
|
|
29937
|
+
` ${import_picocolors17.default.cyan("codeam pair-auto --agent <id>")} ${import_picocolors17.default.dim("pair using the supplied agent id; exit on success or timeout")}`
|
|
29810
29938
|
]),
|
|
29811
29939
|
link: () => print([
|
|
29812
|
-
` ${
|
|
29940
|
+
` ${import_picocolors17.default.bold("codeam link <agent>")} ${import_picocolors17.default.dim("\u2014 upload a local agent token (Claude or Codex) to your vault")}`,
|
|
29813
29941
|
"",
|
|
29814
|
-
` ${
|
|
29815
|
-
` ${
|
|
29942
|
+
` ${import_picocolors17.default.cyan("codeam link claude")}`,
|
|
29943
|
+
` ${import_picocolors17.default.cyan("codeam link codex")}`,
|
|
29816
29944
|
"",
|
|
29817
|
-
` ${
|
|
29818
|
-
` ${
|
|
29819
|
-
` ${
|
|
29820
|
-
` ${
|
|
29821
|
-
` ${
|
|
29945
|
+
` ${import_picocolors17.default.white("--api-key=<key>")} ${import_picocolors17.default.dim("paste an API key directly (visible in `ps -ef`)")}`,
|
|
29946
|
+
` ${import_picocolors17.default.white("--api-key-file=<path>")} ${import_picocolors17.default.dim("read API key from a file (recommended for CI / scripts)")}`,
|
|
29947
|
+
` ${import_picocolors17.default.white("--reuse-existing")} ${import_picocolors17.default.dim("upload existing creds without re-launching the agent login")}`,
|
|
29948
|
+
` ${import_picocolors17.default.white("--token-file=<path>")} ${import_picocolors17.default.dim("manual credential blob path for unusual vendor locations")}`,
|
|
29949
|
+
` ${import_picocolors17.default.white("--dry-run")} ${import_picocolors17.default.dim("probe the /api/plugin/agents/<agent>/link endpoint and exit")}`
|
|
29822
29950
|
]),
|
|
29823
29951
|
sessions: () => print([
|
|
29824
|
-
` ${
|
|
29952
|
+
` ${import_picocolors17.default.bold("codeam sessions")} ${import_picocolors17.default.dim("\u2014 list, switch, or delete paired mobile sessions")}`,
|
|
29825
29953
|
"",
|
|
29826
|
-
` ${
|
|
29827
|
-
` ${
|
|
29828
|
-
` ${
|
|
29954
|
+
` ${import_picocolors17.default.cyan("codeam sessions")} ${import_picocolors17.default.dim("list all paired sessions on this machine")}`,
|
|
29955
|
+
` ${import_picocolors17.default.cyan("codeam sessions switch")} ${import_picocolors17.default.dim("interactively switch the active session")}`,
|
|
29956
|
+
` ${import_picocolors17.default.cyan("codeam sessions delete <id>")} ${import_picocolors17.default.dim("remove a specific paired session")}`
|
|
29829
29957
|
]),
|
|
29830
29958
|
deploy: () => print([
|
|
29831
|
-
` ${
|
|
29959
|
+
` ${import_picocolors17.default.bold("codeam deploy")} ${import_picocolors17.default.dim("\u2014 provision a cloud workspace (GitHub Codespaces) and pair it")}`,
|
|
29960
|
+
"",
|
|
29961
|
+
` ${import_picocolors17.default.cyan("codeam deploy")} ${import_picocolors17.default.dim("start a new deploy (prompts for repo + agent)")}`,
|
|
29962
|
+
` ${import_picocolors17.default.cyan("codeam deploy ls | list")} ${import_picocolors17.default.dim("list deployed cloud workspaces")}`,
|
|
29963
|
+
` ${import_picocolors17.default.cyan("codeam deploy stop | remove")} ${import_picocolors17.default.dim("pick a workspace and stop its codeam-pair session")}`
|
|
29964
|
+
]),
|
|
29965
|
+
invite: () => print([
|
|
29966
|
+
` ${import_picocolors17.default.bold("codeam invite")} ${import_picocolors17.default.dim("\u2014 print your referral link to earn PRO for you and your crew")}`,
|
|
29832
29967
|
"",
|
|
29833
|
-
` ${
|
|
29834
|
-
` ${import_picocolors16.default.cyan("codeam deploy ls | list")} ${import_picocolors16.default.dim("list deployed cloud workspaces")}`,
|
|
29835
|
-
` ${import_picocolors16.default.cyan("codeam deploy stop | remove")} ${import_picocolors16.default.dim("pick a workspace and stop its codeam-pair session")}`
|
|
29968
|
+
` ${import_picocolors17.default.cyan("codeam invite")} ${import_picocolors17.default.dim("fetch and display your personal referral link")}`
|
|
29836
29969
|
]),
|
|
29837
29970
|
status: () => print([
|
|
29838
|
-
` ${
|
|
29971
|
+
` ${import_picocolors17.default.bold("codeam status")} ${import_picocolors17.default.dim("\u2014 show the active session, agent, and connection info")}`
|
|
29839
29972
|
]),
|
|
29840
29973
|
logout: () => print([
|
|
29841
|
-
` ${
|
|
29974
|
+
` ${import_picocolors17.default.bold("codeam logout")} ${import_picocolors17.default.dim("\u2014 remove every paired session from this machine")}`
|
|
29842
29975
|
]),
|
|
29843
29976
|
doctor: () => print([
|
|
29844
|
-
` ${
|
|
29977
|
+
` ${import_picocolors17.default.bold("codeam doctor")} ${import_picocolors17.default.dim("\u2014 run diagnostic checks for support triage")}`,
|
|
29845
29978
|
"",
|
|
29846
|
-
` ${
|
|
29847
|
-
` ${
|
|
29979
|
+
` ${import_picocolors17.default.cyan("codeam doctor")} ${import_picocolors17.default.dim("human-readable report")}`,
|
|
29980
|
+
` ${import_picocolors17.default.cyan("codeam doctor --json")} ${import_picocolors17.default.dim("machine-parseable report (single JSON document on stdout)")}`,
|
|
29848
29981
|
"",
|
|
29849
|
-
` ${
|
|
29850
|
-
` ${
|
|
29982
|
+
` ${import_picocolors17.default.dim("Output never includes tokens or credentials. Paste the diagnostic id")}`,
|
|
29983
|
+
` ${import_picocolors17.default.dim("into a bug report so support can grep the server-side logs.")}`
|
|
29851
29984
|
]),
|
|
29852
29985
|
completion: () => print([
|
|
29853
|
-
` ${
|
|
29986
|
+
` ${import_picocolors17.default.bold("codeam completion <shell>")} ${import_picocolors17.default.dim("\u2014 emit a shell-completion script for sourcing")}`,
|
|
29854
29987
|
"",
|
|
29855
|
-
` ${
|
|
29856
|
-
` ${
|
|
29857
|
-
` ${
|
|
29988
|
+
` ${import_picocolors17.default.cyan("codeam completion bash")} ${import_picocolors17.default.dim("print a bash completion function")}`,
|
|
29989
|
+
` ${import_picocolors17.default.cyan("codeam completion zsh")} ${import_picocolors17.default.dim("print a zsh completion function")}`,
|
|
29990
|
+
` ${import_picocolors17.default.cyan("codeam completion fish")} ${import_picocolors17.default.dim("print a fish completion file")}`,
|
|
29858
29991
|
"",
|
|
29859
|
-
` ${
|
|
29860
|
-
` ${
|
|
29861
|
-
` ${
|
|
29862
|
-
` ${
|
|
29992
|
+
` ${import_picocolors17.default.dim("Examples:")}`,
|
|
29993
|
+
` ${import_picocolors17.default.dim(" bash: codeam completion bash >> ~/.bashrc")}`,
|
|
29994
|
+
` ${import_picocolors17.default.dim(" zsh: codeam completion zsh >> ~/.zshrc")}`,
|
|
29995
|
+
` ${import_picocolors17.default.dim(" fish: codeam completion fish > ~/.config/fish/completions/codeam.fish")}`
|
|
29863
29996
|
])
|
|
29864
29997
|
};
|
|
29865
29998
|
function print(lines) {
|
|
@@ -29927,6 +30060,7 @@ async function main() {
|
|
|
29927
30060
|
"host": () => host(args),
|
|
29928
30061
|
"sessions": () => sessions2(args),
|
|
29929
30062
|
"status": () => status(),
|
|
30063
|
+
"invite": () => invite(),
|
|
29930
30064
|
"logout": () => logout(),
|
|
29931
30065
|
"link": () => link(args),
|
|
29932
30066
|
"doctor": () => doctor(args),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.44.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",
|