@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.
- package/dist/index.js +37 -10
- 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.
|
|
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
|
|
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
|
|
4659
|
-
|
|
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
|
-
() =>
|
|
8038
|
+
() => config2.supatestApiKey ? "authenticated" /* Authenticated */ : "unauthenticated" /* Unauthenticated */
|
|
8012
8039
|
);
|
|
8013
8040
|
const [showAuthDialog, setShowAuthDialog] = useState7(false);
|
|
8014
8041
|
useEffect10(() => {
|
|
8015
|
-
if (!
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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",
|