codeam-cli 2.0.0 → 2.0.1
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/dist/index.js +72 -37
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -116,7 +116,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
|
|
|
116
116
|
// package.json
|
|
117
117
|
var package_default = {
|
|
118
118
|
name: "codeam-cli",
|
|
119
|
-
version: "2.0.
|
|
119
|
+
version: "2.0.1",
|
|
120
120
|
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.",
|
|
121
121
|
main: "dist/index.js",
|
|
122
122
|
bin: {
|
|
@@ -1010,38 +1010,7 @@ function classifyStep(text) {
|
|
|
1010
1010
|
return { tool: "other", label, status: "running" };
|
|
1011
1011
|
}
|
|
1012
1012
|
|
|
1013
|
-
// ../../packages/shared/src/
|
|
1014
|
-
var MODEL_PRICING = {
|
|
1015
|
-
"claude-sonnet-4": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
|
|
1016
|
-
"claude-opus-4": { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 },
|
|
1017
|
-
"claude-3-5-sonnet": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
|
|
1018
|
-
"claude-3-5-haiku": { input: 0.8, output: 4, cacheRead: 0.08, cacheWrite: 1 },
|
|
1019
|
-
"claude-3-haiku": { input: 0.25, output: 1.25, cacheRead: 0.03, cacheWrite: 0.3 }
|
|
1020
|
-
};
|
|
1021
|
-
var MODEL_CONTEXT_WINDOW = {
|
|
1022
|
-
"claude-opus-4": 1e6,
|
|
1023
|
-
"claude-sonnet-4": 1e6,
|
|
1024
|
-
"claude-3-5-sonnet": 2e5,
|
|
1025
|
-
"claude-3-5-haiku": 2e5,
|
|
1026
|
-
"claude-3-haiku": 2e5
|
|
1027
|
-
};
|
|
1028
|
-
var DEFAULT_CONTEXT_WINDOW = 2e5;
|
|
1029
|
-
function getPricing(model) {
|
|
1030
|
-
for (const [prefix, pricing] of Object.entries(MODEL_PRICING)) {
|
|
1031
|
-
if (model.startsWith(prefix)) return pricing;
|
|
1032
|
-
}
|
|
1033
|
-
return MODEL_PRICING["claude-sonnet-4"];
|
|
1034
|
-
}
|
|
1035
|
-
function getContextWindow(model) {
|
|
1036
|
-
if (!model) return DEFAULT_CONTEXT_WINDOW;
|
|
1037
|
-
for (const [prefix, size] of Object.entries(MODEL_CONTEXT_WINDOW)) {
|
|
1038
|
-
if (model.startsWith(prefix)) return size;
|
|
1039
|
-
}
|
|
1040
|
-
return DEFAULT_CONTEXT_WINDOW;
|
|
1041
|
-
}
|
|
1042
|
-
|
|
1043
|
-
// src/services/output.service.ts
|
|
1044
|
-
var API_BASE4 = process.env.CODEAM_API_URL ?? "https://codeagent-mobile-api.vercel.app";
|
|
1013
|
+
// ../../packages/shared/src/protocol/renderToLines.ts
|
|
1045
1014
|
function renderToLines(raw) {
|
|
1046
1015
|
const screen = [""];
|
|
1047
1016
|
let row = 0;
|
|
@@ -1147,11 +1116,12 @@ function renderToLines(raw) {
|
|
|
1147
1116
|
}
|
|
1148
1117
|
return screen;
|
|
1149
1118
|
}
|
|
1119
|
+
|
|
1120
|
+
// ../../packages/shared/src/protocol/selector.ts
|
|
1150
1121
|
function detectSelector(lines) {
|
|
1151
1122
|
if (lines.some((l) => /\?\s+for\s+shortcuts/i.test(l.trim()))) return null;
|
|
1152
1123
|
const clean = lines.map(
|
|
1153
1124
|
(l) => l.replace(/^[│╭╰╮╯┌└┐┘├┤┬┴┼]\s?/, "").replace(/\s*[│╭╰╮╯┌└┐┘├┤┬┴┼─━═]+\s*$/, "")
|
|
1154
|
-
// strip trailing fill + border
|
|
1155
1125
|
);
|
|
1156
1126
|
if (!clean.some((l) => /^❯\s*\d+\./.test(l.trim()))) return null;
|
|
1157
1127
|
let optionStartIdx = -1;
|
|
@@ -1253,6 +1223,8 @@ function detectListSelector(lines) {
|
|
|
1253
1223
|
currentIndex
|
|
1254
1224
|
};
|
|
1255
1225
|
}
|
|
1226
|
+
|
|
1227
|
+
// ../../packages/shared/src/protocol/filterChrome.ts
|
|
1256
1228
|
function filterChrome(lines) {
|
|
1257
1229
|
const result = [];
|
|
1258
1230
|
let skipEchoContinuation = false;
|
|
@@ -1295,6 +1267,39 @@ function filterChrome(lines) {
|
|
|
1295
1267
|
}
|
|
1296
1268
|
return result;
|
|
1297
1269
|
}
|
|
1270
|
+
|
|
1271
|
+
// ../../packages/shared/src/models/pricing.ts
|
|
1272
|
+
var MODEL_PRICING = {
|
|
1273
|
+
"claude-sonnet-4": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
|
|
1274
|
+
"claude-opus-4": { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 },
|
|
1275
|
+
"claude-3-5-sonnet": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
|
|
1276
|
+
"claude-3-5-haiku": { input: 0.8, output: 4, cacheRead: 0.08, cacheWrite: 1 },
|
|
1277
|
+
"claude-3-haiku": { input: 0.25, output: 1.25, cacheRead: 0.03, cacheWrite: 0.3 }
|
|
1278
|
+
};
|
|
1279
|
+
var MODEL_CONTEXT_WINDOW = {
|
|
1280
|
+
"claude-opus-4": 1e6,
|
|
1281
|
+
"claude-sonnet-4": 1e6,
|
|
1282
|
+
"claude-3-5-sonnet": 2e5,
|
|
1283
|
+
"claude-3-5-haiku": 2e5,
|
|
1284
|
+
"claude-3-haiku": 2e5
|
|
1285
|
+
};
|
|
1286
|
+
var DEFAULT_CONTEXT_WINDOW = 2e5;
|
|
1287
|
+
function getPricing(model) {
|
|
1288
|
+
for (const [prefix, pricing] of Object.entries(MODEL_PRICING)) {
|
|
1289
|
+
if (model.startsWith(prefix)) return pricing;
|
|
1290
|
+
}
|
|
1291
|
+
return MODEL_PRICING["claude-sonnet-4"];
|
|
1292
|
+
}
|
|
1293
|
+
function getContextWindow(model) {
|
|
1294
|
+
if (!model) return DEFAULT_CONTEXT_WINDOW;
|
|
1295
|
+
for (const [prefix, size] of Object.entries(MODEL_CONTEXT_WINDOW)) {
|
|
1296
|
+
if (model.startsWith(prefix)) return size;
|
|
1297
|
+
}
|
|
1298
|
+
return DEFAULT_CONTEXT_WINDOW;
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
// src/services/output.service.ts
|
|
1302
|
+
var API_BASE4 = process.env.CODEAM_API_URL ?? "https://codeagent-mobile-api.vercel.app";
|
|
1298
1303
|
var OutputService = class _OutputService {
|
|
1299
1304
|
constructor(sessionId, pluginId, onSessionIdDetected, onRateLimitDetected, onTurnComplete, onTerminalTurnDetected) {
|
|
1300
1305
|
this.sessionId = sessionId;
|
|
@@ -1582,6 +1587,27 @@ var path4 = __toESM(require("path"));
|
|
|
1582
1587
|
var os4 = __toESM(require("os"));
|
|
1583
1588
|
var https3 = __toESM(require("https"));
|
|
1584
1589
|
var http3 = __toESM(require("http"));
|
|
1590
|
+
|
|
1591
|
+
// src/services/logger.ts
|
|
1592
|
+
var LEVELS = { silent: 0, error: 1, warn: 2, info: 3, debug: 4 };
|
|
1593
|
+
function currentLevel() {
|
|
1594
|
+
const raw = (process.env.CODEAM_LOG ?? "error").toLowerCase();
|
|
1595
|
+
return LEVELS[raw] ?? LEVELS.error;
|
|
1596
|
+
}
|
|
1597
|
+
function emit(level, tag, msg, err) {
|
|
1598
|
+
if (LEVELS[level] > currentLevel()) return;
|
|
1599
|
+
const detail = err instanceof Error ? `: ${err.message}` : err !== void 0 ? `: ${String(err)}` : "";
|
|
1600
|
+
process.stderr.write(`[codeam:${level}] ${tag} \u2014 ${msg}${detail}
|
|
1601
|
+
`);
|
|
1602
|
+
}
|
|
1603
|
+
var log = {
|
|
1604
|
+
error: (tag, msg, err) => emit("error", tag, msg, err),
|
|
1605
|
+
warn: (tag, msg, err) => emit("warn", tag, msg, err),
|
|
1606
|
+
info: (tag, msg, err) => emit("info", tag, msg, err),
|
|
1607
|
+
debug: (tag, msg, err) => emit("debug", tag, msg, err)
|
|
1608
|
+
};
|
|
1609
|
+
|
|
1610
|
+
// src/services/history.service.ts
|
|
1585
1611
|
var API_BASE5 = process.env.CODEAM_API_URL ?? "https://codeagent-mobile-api.vercel.app";
|
|
1586
1612
|
function encodeCwd(cwd) {
|
|
1587
1613
|
return cwd.replace(/\//g, "-");
|
|
@@ -1599,7 +1625,10 @@ function parseJsonl(filePath) {
|
|
|
1599
1625
|
let raw;
|
|
1600
1626
|
try {
|
|
1601
1627
|
raw = fs4.readFileSync(filePath, "utf8");
|
|
1602
|
-
} catch {
|
|
1628
|
+
} catch (err) {
|
|
1629
|
+
if (err.code !== "ENOENT") {
|
|
1630
|
+
log.warn("history:parseJsonl", `read failed for ${filePath}`, err);
|
|
1631
|
+
}
|
|
1603
1632
|
return messages;
|
|
1604
1633
|
}
|
|
1605
1634
|
const lines = raw.split("\n").filter(Boolean);
|
|
@@ -1643,11 +1672,17 @@ function post(endpoint, body) {
|
|
|
1643
1672
|
},
|
|
1644
1673
|
(res) => {
|
|
1645
1674
|
res.resume();
|
|
1646
|
-
|
|
1675
|
+
const ok = res.statusCode !== void 0 && res.statusCode >= 200 && res.statusCode < 300;
|
|
1676
|
+
if (!ok) log.warn("history:post", `${endpoint} \u2192 HTTP ${res.statusCode}`);
|
|
1677
|
+
resolve(ok);
|
|
1647
1678
|
}
|
|
1648
1679
|
);
|
|
1649
|
-
req.on("error", () =>
|
|
1680
|
+
req.on("error", (err) => {
|
|
1681
|
+
log.warn("history:post", `${endpoint} network error`, err);
|
|
1682
|
+
resolve(false);
|
|
1683
|
+
});
|
|
1650
1684
|
req.on("timeout", () => {
|
|
1685
|
+
log.warn("history:post", `${endpoint} timeout after 15s`);
|
|
1651
1686
|
req.destroy();
|
|
1652
1687
|
resolve(false);
|
|
1653
1688
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
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": {
|