codeam-cli 2.8.0 → 2.9.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 CHANGED
@@ -4,6 +4,19 @@ 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.8.1] — 2026-05-09
8
+
9
+ ### Revert
10
+
11
+ - **jetbrains-plugin:** Drop CLI plugin-bridge from ClaudeCodeTerminalStrategy
12
+
13
+ ## [2.8.0] — 2026-05-09
14
+
15
+ ### Added
16
+
17
+ - **cli:** Plugin-bridge subcommand for one-session IDE embedding
18
+ - **jetbrains-plugin:** Per-agent Strategy pattern + AI Assistant capture + CLI bridge
19
+
7
20
  ## [2.7.0] — 2026-05-08
8
21
 
9
22
  ### Added
package/dist/index.js CHANGED
@@ -1477,7 +1477,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
1477
1477
  // package.json
1478
1478
  var package_default = {
1479
1479
  name: "codeam-cli",
1480
- version: "2.8.0",
1480
+ version: "2.9.0",
1481
1481
  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.",
1482
1482
  type: "commonjs",
1483
1483
  main: "dist/index.js",
@@ -7038,15 +7038,13 @@ function readTokenFromArgs(args2) {
7038
7038
  }
7039
7039
  async function claim(token, pluginId) {
7040
7040
  const url = `${API_BASE5}/api/pairing/claim-auto-token`;
7041
- const codespaceName = process.env.CODESPACE_NAME ?? "";
7042
- const isCodespace = codespaceName.length > 0;
7043
7041
  const body = {
7044
7042
  token,
7045
7043
  pluginId,
7046
- ideName: isCodespace ? "codeam-cli (codespace)" : "codeam-cli",
7044
+ ideName: "codeam-cli (codespace)",
7047
7045
  ideVersion: process.env.npm_package_version ?? "unknown",
7048
7046
  hostname: os9.hostname(),
7049
- codespaceName
7047
+ codespaceName: process.env.CODESPACE_NAME ?? ""
7050
7048
  };
7051
7049
  const res = await fetch(url, {
7052
7050
  method: "POST",
@@ -7085,111 +7083,6 @@ async function pairAuto(args2) {
7085
7083
  await start();
7086
7084
  }
7087
7085
 
7088
- // src/commands/plugin-bridge.ts
7089
- async function pluginBridge() {
7090
- const sessionId = process.env.CODEAM_BRIDGE_SESSION_ID;
7091
- const pluginId = process.env.CODEAM_BRIDGE_PLUGIN_ID;
7092
- const pluginAuthToken = process.env.CODEAM_BRIDGE_PLUGIN_AUTH_TOKEN;
7093
- if (!sessionId || !pluginId || !pluginAuthToken) {
7094
- console.error(
7095
- "[plugin-bridge] missing CODEAM_BRIDGE_SESSION_ID / CODEAM_BRIDGE_PLUGIN_ID / CODEAM_BRIDGE_PLUGIN_AUTH_TOKEN env"
7096
- );
7097
- process.exit(1);
7098
- }
7099
- const cwd = process.cwd();
7100
- const historySvc = new HistoryService(pluginId, cwd);
7101
- const keepAliveCtx = { inCodespace: false, codespaceName: void 0 };
7102
- const { apply: setKeepAlive2 } = buildKeepAlive(keepAliveCtx);
7103
- const outputSvc = new OutputService(
7104
- sessionId,
7105
- pluginId,
7106
- (conversationId) => historySvc.setCurrentConversationId(conversationId),
7107
- (reset) => historySvc.setRateLimitReset(reset),
7108
- () => {
7109
- if (historySvc.isQuotaStale()) fetchQuotaUsage(historySvc);
7110
- setTimeout(() => {
7111
- historySvc.uploadDelta().catch(() => {
7112
- });
7113
- }, 400);
7114
- },
7115
- () => {
7116
- const prevCount = historySvc.getCurrentMessageCount();
7117
- historySvc.waitForNewUserMessage(prevCount).then((userText) => outputSvc.startTerminalTurn(userText ?? void 0)).catch(() => outputSvc.startTerminalTurn(void 0));
7118
- },
7119
- pluginAuthToken
7120
- );
7121
- const claude = new ClaudeService({
7122
- cwd,
7123
- onData(raw) {
7124
- outputSvc.push(raw);
7125
- },
7126
- onExit(code) {
7127
- outputSvc.dispose();
7128
- process.exit(code);
7129
- }
7130
- });
7131
- const relayStub = new CommandRelayService(pluginId, async () => {
7132
- });
7133
- const ctx = {
7134
- outputSvc,
7135
- claude,
7136
- historySvc,
7137
- relay: relayStub,
7138
- setKeepAlive: setKeepAlive2,
7139
- keepAliveCtx
7140
- };
7141
- function shutdown(code) {
7142
- try {
7143
- claude.kill();
7144
- } catch {
7145
- }
7146
- try {
7147
- outputSvc.dispose();
7148
- } catch {
7149
- }
7150
- process.exit(code);
7151
- }
7152
- process.once("SIGINT", () => shutdown(0));
7153
- process.once("SIGTERM", () => shutdown(0));
7154
- await claude.spawn();
7155
- await outputSvc.startTerminalTurn();
7156
- let buffer = "";
7157
- process.stdin.setEncoding("utf8");
7158
- process.stdin.on("data", (chunk) => {
7159
- buffer += chunk;
7160
- let idx;
7161
- while ((idx = buffer.indexOf("\n")) !== -1) {
7162
- const line = buffer.slice(0, idx).trim();
7163
- buffer = buffer.slice(idx + 1);
7164
- if (!line) continue;
7165
- try {
7166
- const raw = JSON.parse(line);
7167
- if (typeof raw?.id !== "string" || typeof raw?.type !== "string") continue;
7168
- const cmd = {
7169
- id: raw.id,
7170
- type: raw.type,
7171
- sessionId,
7172
- // always the plugin's session — ignore any value from the host
7173
- payload: raw.payload ?? {}
7174
- };
7175
- dispatchCommand(ctx, cmd).catch(() => {
7176
- });
7177
- } catch {
7178
- }
7179
- }
7180
- });
7181
- process.stdin.on("end", () => shutdown(0));
7182
- setTimeout(() => {
7183
- historySvc.detectCurrentConversation();
7184
- historySvc.load().catch(() => {
7185
- });
7186
- const currentId = historySvc.getCurrentConversationId();
7187
- if (currentId) historySvc.loadConversation(currentId).catch(() => {
7188
- });
7189
- }, 2e3);
7190
- setTimeout(() => fetchQuotaUsage(historySvc), 5e3);
7191
- }
7192
-
7193
7086
  // src/commands/sessions.ts
7194
7087
  var import_picocolors4 = __toESM(require("picocolors"));
7195
7088
  async function sessions(args2) {
@@ -9425,7 +9318,7 @@ async function stopWorkspaceFromLocal(target) {
9425
9318
  // src/commands/version.ts
9426
9319
  var import_picocolors11 = __toESM(require("picocolors"));
9427
9320
  function version() {
9428
- const v = true ? "2.8.0" : "unknown";
9321
+ const v = true ? "2.9.0" : "unknown";
9429
9322
  console.log(`${import_picocolors11.default.bold("codeam-cli")} ${import_picocolors11.default.cyan(v)}`);
9430
9323
  }
9431
9324
 
@@ -9560,7 +9453,7 @@ function checkForUpdates() {
9560
9453
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
9561
9454
  if (process.env.CI) return;
9562
9455
  if (!process.stdout.isTTY) return;
9563
- const current = true ? "2.8.0" : null;
9456
+ const current = true ? "2.9.0" : null;
9564
9457
  if (!current) return;
9565
9458
  const cache = readCache();
9566
9459
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -9592,8 +9485,6 @@ async function main() {
9592
9485
  return pair();
9593
9486
  case "pair-auto":
9594
9487
  return pairAuto(args);
9595
- case "plugin-bridge":
9596
- return pluginBridge();
9597
9488
  case "sessions":
9598
9489
  return sessions(args);
9599
9490
  case "status":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.8.0",
3
+ "version": "2.9.0",
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
  "type": "commonjs",
6
6
  "main": "dist/index.js",