codeam-cli 2.4.8 → 2.4.9

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.
Files changed (2) hide show
  1. package/dist/index.js +49 -14
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -179,7 +179,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
179
179
  // package.json
180
180
  var package_default = {
181
181
  name: "codeam-cli",
182
- version: "2.4.8",
182
+ version: "2.4.9",
183
183
  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.",
184
184
  main: "dist/index.js",
185
185
  bin: {
@@ -5742,19 +5742,36 @@ async function deploy() {
5742
5742
  }
5743
5743
  }
5744
5744
  const localClaudeDir = path9.join(os6.homedir(), ".claude");
5745
- const credStep = fe();
5746
- credStep.start("Bridging Claude credentials\u2026");
5747
- const bridged = await bridgeClaudeCredentials(provider, workspace.id, localClaudeDir);
5748
- switch (bridged) {
5749
- case "flat-file":
5750
- credStep.stop("\u2713 Local credentials staged");
5751
- break;
5752
- case "macos-keychain":
5753
- credStep.stop("\u2713 Credentials extracted from macOS Keychain and staged");
5754
- break;
5755
- case "none":
5756
- credStep.stop("\xB7 No local credentials found \u2014 will run interactive login after install");
5757
- break;
5745
+ const localCredsKind = await detectLocalClaudeCredentials(localClaudeDir);
5746
+ let bridged = "none";
5747
+ if (localCredsKind !== "none") {
5748
+ const sourceLabel = localCredsKind === "flat-file" ? "~/.claude/.credentials.json" : "macOS Keychain";
5749
+ const useLocal = await ot2({
5750
+ message: `Copy your local Claude credentials (${sourceLabel}) to the workspace?`,
5751
+ active: "Yes \u2014 same account, no re-auth",
5752
+ inactive: "No \u2014 log in with a different account",
5753
+ initialValue: true
5754
+ });
5755
+ if (q(useLocal)) {
5756
+ pt("Cancelled.");
5757
+ process.exit(0);
5758
+ }
5759
+ if (useLocal) {
5760
+ const credStep = fe();
5761
+ credStep.start("Bridging Claude credentials\u2026");
5762
+ bridged = await bridgeClaudeCredentials(provider, workspace.id, localClaudeDir);
5763
+ switch (bridged) {
5764
+ case "flat-file":
5765
+ credStep.stop("\u2713 Local credentials staged");
5766
+ break;
5767
+ case "macos-keychain":
5768
+ credStep.stop("\u2713 Credentials extracted from macOS Keychain and staged");
5769
+ break;
5770
+ case "none":
5771
+ credStep.stop("\u26A0 Could not extract local credentials \u2014 falling back to remote login");
5772
+ break;
5773
+ }
5774
+ }
5758
5775
  }
5759
5776
  const claudeStep = fe();
5760
5777
  claudeStep.start("Installing Claude CLI on workspace\u2026");
@@ -5882,6 +5899,24 @@ async function runRemoteClaudeLogin(provider, workspaceId) {
5882
5899
  );
5883
5900
  }
5884
5901
  }
5902
+ async function detectLocalClaudeCredentials(localClaudeDir) {
5903
+ if (fs8.existsSync(path9.join(localClaudeDir, ".credentials.json"))) {
5904
+ return "flat-file";
5905
+ }
5906
+ if (process.platform === "darwin") {
5907
+ try {
5908
+ await execFileP3(
5909
+ "security",
5910
+ ["find-generic-password", "-s", "Claude Code-credentials"],
5911
+ { maxBuffer: 1024 * 1024 }
5912
+ );
5913
+ return "macos-keychain";
5914
+ } catch {
5915
+ return "none";
5916
+ }
5917
+ }
5918
+ return "none";
5919
+ }
5885
5920
  async function verifyClaudeAuth(provider, workspaceId) {
5886
5921
  const result = await provider.exec(
5887
5922
  workspaceId,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.4.8",
3
+ "version": "2.4.9",
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": {