@supatest/cli 0.0.6 → 0.0.7

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 +37 -10
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -4429,7 +4429,7 @@ var CLI_VERSION;
4429
4429
  var init_version = __esm({
4430
4430
  "src/version.ts"() {
4431
4431
  "use strict";
4432
- CLI_VERSION = "0.0.6";
4432
+ CLI_VERSION = "0.0.7";
4433
4433
  }
4434
4434
  });
4435
4435
 
@@ -4453,7 +4453,12 @@ var init_banner = __esm({
4453
4453
  import crypto from "crypto";
4454
4454
  import { hostname, userInfo } from "os";
4455
4455
  function deriveEncryptionKey() {
4456
- const salt = `${hostname()}-${userInfo().username}-supatest-cli`;
4456
+ const host = hostname();
4457
+ const user = userInfo().username;
4458
+ const salt = `${host}-${user}-supatest-cli`;
4459
+ if (process.env.DEBUG_ENCRYPTION) {
4460
+ console.error(`[encryption] hostname=${host}, username=${user}, salt=${salt}`);
4461
+ }
4457
4462
  return crypto.scryptSync("supatest-cli-token", salt, KEY_LENGTH);
4458
4463
  }
4459
4464
  function getEncryptionKey() {
@@ -4538,6 +4543,23 @@ async function isKeychainAvailable() {
4538
4543
  }
4539
4544
  return keychainAvailable;
4540
4545
  }
4546
+ async function saveToKeychain(token, expiresAt) {
4547
+ const keytar = await getKeytar();
4548
+ if (!keytar) {
4549
+ return false;
4550
+ }
4551
+ const payload = {
4552
+ token,
4553
+ expiresAt,
4554
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
4555
+ };
4556
+ try {
4557
+ await keytar.setPassword(SERVICE_NAME, ACCOUNT_NAME, JSON.stringify(payload));
4558
+ return true;
4559
+ } catch {
4560
+ return false;
4561
+ }
4562
+ }
4541
4563
  async function loadFromKeychain() {
4542
4564
  const keytar = await getKeytar();
4543
4565
  if (!keytar) {
@@ -4635,9 +4657,6 @@ function removeTokenFile() {
4635
4657
  unlinkSync(TOKEN_FILE);
4636
4658
  }
4637
4659
  }
4638
- function saveToken(token, expiresAt) {
4639
- saveTokenToFile(token, expiresAt);
4640
- }
4641
4660
  function loadToken() {
4642
4661
  const payload = loadTokenFromFile();
4643
4662
  if (!payload) {
@@ -4655,8 +4674,16 @@ function loadToken() {
4655
4674
  function removeToken() {
4656
4675
  removeTokenFile();
4657
4676
  }
4658
- function isLoggedIn() {
4659
- return loadToken() !== null;
4677
+ async function saveTokenAsync(token, expiresAt) {
4678
+ const storageType = await getStorageType();
4679
+ if (storageType === "keychain" /* KEYCHAIN */) {
4680
+ const saved = await saveToKeychain(token, expiresAt);
4681
+ if (saved) {
4682
+ removeTokenFile();
4683
+ return;
4684
+ }
4685
+ }
4686
+ saveTokenToFile(token, expiresAt);
4660
4687
  }
4661
4688
  async function loadTokenAsync() {
4662
4689
  const storageType = await getStorageType();
@@ -8008,11 +8035,11 @@ var init_App = __esm({
8008
8035
  const inputPromptRef = useRef6(null);
8009
8036
  const [showSessionSelector, setShowSessionSelector] = useState7(false);
8010
8037
  const [authState, setAuthState] = useState7(
8011
- () => isLoggedIn() ? "authenticated" /* Authenticated */ : "unauthenticated" /* Unauthenticated */
8038
+ () => config2.supatestApiKey ? "authenticated" /* Authenticated */ : "unauthenticated" /* Unauthenticated */
8012
8039
  );
8013
8040
  const [showAuthDialog, setShowAuthDialog] = useState7(false);
8014
8041
  useEffect10(() => {
8015
- if (!isLoggedIn() && !config2.supatestApiKey) {
8042
+ if (!config2.supatestApiKey) {
8016
8043
  setShowAuthDialog(true);
8017
8044
  }
8018
8045
  }, [config2.supatestApiKey]);
@@ -8033,7 +8060,7 @@ var init_App = __esm({
8033
8060
  });
8034
8061
  try {
8035
8062
  const result = await loginCommand();
8036
- saveToken(result.token, result.expiresAt);
8063
+ await saveTokenAsync(result.token, result.expiresAt);
8037
8064
  if (apiClient) {
8038
8065
  apiClient.setApiKey(result.token);
8039
8066
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@supatest/cli",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Supatest CLI - AI-powered task automation for CI/CD",
5
5
  "type": "module",
6
6
  "bin": {
@@ -38,7 +38,7 @@
38
38
  "access": "public"
39
39
  },
40
40
  "dependencies": {
41
- "@anthropic-ai/claude-agent-sdk": "^0.1.56",
41
+ "@anthropic-ai/claude-agent-sdk": "^0.1.58",
42
42
  "@anthropic-ai/sdk": "^0.71.0",
43
43
  "@types/inquirer": "^9.0.0",
44
44
  "ansi-escapes": "^7.0.0",