@mtreeai/msapling-cli 2.3.6-beta.40 → 2.3.6-beta.41
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 +35 -20
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -8685,11 +8685,22 @@ import { join as join17 } from "path";
|
|
|
8685
8685
|
import { chmodSync, existsSync as existsSync13, renameSync as renameSync2, unlinkSync } from "fs";
|
|
8686
8686
|
import { writeFile as writeFile6, readFile as readFile13 } from "fs/promises";
|
|
8687
8687
|
import { createHash as createHash4 } from "crypto";
|
|
8688
|
-
|
|
8688
|
+
async function getKeytar() {
|
|
8689
|
+
if (_keytar !== "pending") return _keytar;
|
|
8690
|
+
try {
|
|
8691
|
+
const mod = await import("keytar");
|
|
8692
|
+
_keytar = mod && typeof mod.setPassword === "function" ? mod : mod?.default ?? mod;
|
|
8693
|
+
} catch {
|
|
8694
|
+
_keytar = null;
|
|
8695
|
+
}
|
|
8696
|
+
return _keytar;
|
|
8697
|
+
}
|
|
8689
8698
|
async function saveToken(baseDir, token) {
|
|
8690
8699
|
const filePath = join17(baseDir, "vault", "token");
|
|
8691
8700
|
try {
|
|
8692
|
-
await
|
|
8701
|
+
const kt = await getKeytar();
|
|
8702
|
+
if (!kt) throw new Error("keytar not loadable");
|
|
8703
|
+
await kt.setPassword(KEYCHAIN_SERVICE, KEYCHAIN_ACCOUNT, token);
|
|
8693
8704
|
try {
|
|
8694
8705
|
if (existsSync13(filePath)) unlinkSync(filePath);
|
|
8695
8706
|
} catch {
|
|
@@ -8705,7 +8716,9 @@ async function saveToken(baseDir, token) {
|
|
|
8705
8716
|
async function loadToken(baseDir) {
|
|
8706
8717
|
const filePath = join17(baseDir, "vault", "token");
|
|
8707
8718
|
try {
|
|
8708
|
-
const
|
|
8719
|
+
const kt = await getKeytar();
|
|
8720
|
+
if (!kt) throw new Error("keytar not loadable");
|
|
8721
|
+
const keychainToken = await kt.getPassword(KEYCHAIN_SERVICE, KEYCHAIN_ACCOUNT);
|
|
8709
8722
|
if (keychainToken) return keychainToken;
|
|
8710
8723
|
} catch (e) {
|
|
8711
8724
|
console.debug(`Keychain unavailable (${e instanceof Error ? e.message : String(e)}), falling back to file storage`);
|
|
@@ -8719,7 +8732,8 @@ async function loadToken(baseDir) {
|
|
|
8719
8732
|
async function clearToken(baseDir) {
|
|
8720
8733
|
const filePath = join17(baseDir, "vault", "token");
|
|
8721
8734
|
try {
|
|
8722
|
-
await
|
|
8735
|
+
const kt = await getKeytar();
|
|
8736
|
+
if (kt) await kt.deletePassword(KEYCHAIN_SERVICE, KEYCHAIN_ACCOUNT);
|
|
8723
8737
|
} catch (e) {
|
|
8724
8738
|
console.debug(`Keychain unavailable for deletion (${e instanceof Error ? e.message : String(e)})`);
|
|
8725
8739
|
}
|
|
@@ -8753,11 +8767,12 @@ async function readVaultRef(baseDir, label) {
|
|
|
8753
8767
|
if (!existsSync13(objectPath)) return null;
|
|
8754
8768
|
return readFile13(objectPath, "utf8");
|
|
8755
8769
|
}
|
|
8756
|
-
var KEYCHAIN_SERVICE, KEYCHAIN_ACCOUNT;
|
|
8770
|
+
var _keytar, KEYCHAIN_SERVICE, KEYCHAIN_ACCOUNT;
|
|
8757
8771
|
var init_vault = __esm({
|
|
8758
8772
|
"../core/src/Storage/vault.ts"() {
|
|
8759
8773
|
"use strict";
|
|
8760
8774
|
init_esm_shims();
|
|
8775
|
+
_keytar = "pending";
|
|
8761
8776
|
KEYCHAIN_SERVICE = "msapling-cli";
|
|
8762
8777
|
KEYCHAIN_ACCOUNT = "auth_token";
|
|
8763
8778
|
}
|
|
@@ -9941,19 +9956,19 @@ var init_login = __esm({
|
|
|
9941
9956
|
});
|
|
9942
9957
|
|
|
9943
9958
|
// src/state/secureStore.ts
|
|
9944
|
-
async function
|
|
9945
|
-
if (
|
|
9959
|
+
async function getKeytar2() {
|
|
9960
|
+
if (_keytar2 !== "pending") return _keytar2;
|
|
9946
9961
|
try {
|
|
9947
|
-
|
|
9948
|
-
return
|
|
9962
|
+
_keytar2 = await import("keytar");
|
|
9963
|
+
return _keytar2;
|
|
9949
9964
|
} catch (e) {
|
|
9950
9965
|
console.warn(`[secureStore] keytar unavailable, falling back to file token: ${e instanceof Error ? e.message : String(e)}`);
|
|
9951
|
-
|
|
9966
|
+
_keytar2 = null;
|
|
9952
9967
|
return null;
|
|
9953
9968
|
}
|
|
9954
9969
|
}
|
|
9955
9970
|
async function secureStoreDelete() {
|
|
9956
|
-
const kt = await
|
|
9971
|
+
const kt = await getKeytar2();
|
|
9957
9972
|
if (!kt) return;
|
|
9958
9973
|
try {
|
|
9959
9974
|
await kt.deletePassword(KEYCHAIN_SERVICE2, KEYCHAIN_ACCOUNT2);
|
|
@@ -9961,14 +9976,14 @@ async function secureStoreDelete() {
|
|
|
9961
9976
|
console.warn(`[secureStore] deletePassword failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
9962
9977
|
}
|
|
9963
9978
|
}
|
|
9964
|
-
var KEYCHAIN_SERVICE2, KEYCHAIN_ACCOUNT2,
|
|
9979
|
+
var KEYCHAIN_SERVICE2, KEYCHAIN_ACCOUNT2, _keytar2;
|
|
9965
9980
|
var init_secureStore = __esm({
|
|
9966
9981
|
"src/state/secureStore.ts"() {
|
|
9967
9982
|
"use strict";
|
|
9968
9983
|
init_esm_shims();
|
|
9969
9984
|
KEYCHAIN_SERVICE2 = "msapling-cli";
|
|
9970
9985
|
KEYCHAIN_ACCOUNT2 = "auth-cookie";
|
|
9971
|
-
|
|
9986
|
+
_keytar2 = "pending";
|
|
9972
9987
|
}
|
|
9973
9988
|
});
|
|
9974
9989
|
|
|
@@ -12380,7 +12395,7 @@ var init_version = __esm({
|
|
|
12380
12395
|
description: "Show version information for CLI and core packages",
|
|
12381
12396
|
category: "debug",
|
|
12382
12397
|
handler: async (_args, context) => {
|
|
12383
|
-
const cliVersion = true ? "2.3.6-beta.
|
|
12398
|
+
const cliVersion = true ? "2.3.6-beta.41" : "(dev)";
|
|
12384
12399
|
const coreVersion = true ? "2.3.2" : "(dev)";
|
|
12385
12400
|
const runtime = process.version;
|
|
12386
12401
|
context.addMessage("system", "MSapling Version Info");
|
|
@@ -12389,7 +12404,7 @@ var init_version = __esm({
|
|
|
12389
12404
|
context.addMessage("system", row2("Core (@msapling/core)", coreVersion));
|
|
12390
12405
|
context.addMessage("system", row2("Runtime (Node/Bun)", runtime));
|
|
12391
12406
|
try {
|
|
12392
|
-
const ts = "2026-06-02T15:
|
|
12407
|
+
const ts = "2026-06-02T15:47:25.597Z";
|
|
12393
12408
|
if (ts && ts !== "__BUILD_TIMESTAMP__") {
|
|
12394
12409
|
context.addMessage("system", row2("Build Timestamp", ts));
|
|
12395
12410
|
}
|
|
@@ -15271,8 +15286,8 @@ async function checkConfigDir() {
|
|
|
15271
15286
|
}
|
|
15272
15287
|
async function checkKeytar() {
|
|
15273
15288
|
try {
|
|
15274
|
-
const
|
|
15275
|
-
if (
|
|
15289
|
+
const keytar = await import("keytar");
|
|
15290
|
+
if (keytar && typeof keytar.getPassword === "function") {
|
|
15276
15291
|
return {
|
|
15277
15292
|
name: "Keytar native binary",
|
|
15278
15293
|
status: "PASS",
|
|
@@ -15395,10 +15410,10 @@ async function checkNetworkReach() {
|
|
|
15395
15410
|
}
|
|
15396
15411
|
async function checkTokenValidity() {
|
|
15397
15412
|
try {
|
|
15398
|
-
const
|
|
15413
|
+
const keytar = await import("keytar");
|
|
15399
15414
|
const KEYCHAIN_SERVICE3 = "msapling-cli";
|
|
15400
15415
|
const KEYCHAIN_ACCOUNT3 = "auth_token";
|
|
15401
|
-
const token = await
|
|
15416
|
+
const token = await keytar.getPassword(KEYCHAIN_SERVICE3, KEYCHAIN_ACCOUNT3);
|
|
15402
15417
|
if (!token) {
|
|
15403
15418
|
return {
|
|
15404
15419
|
name: "Token validity",
|
|
@@ -17905,7 +17920,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
17905
17920
|
var Header = () => /* @__PURE__ */ jsxs(Box, { borderStyle: "single", borderColor: "cyan", paddingX: 1, marginBottom: 1, children: [
|
|
17906
17921
|
/* @__PURE__ */ jsxs(Text, { bold: true, color: "cyan", children: [
|
|
17907
17922
|
"\u25CF MSapling CLI v",
|
|
17908
|
-
"2.3.6-beta.
|
|
17923
|
+
"2.3.6-beta.41"
|
|
17909
17924
|
] }),
|
|
17910
17925
|
/* @__PURE__ */ jsx(Box, { marginLeft: 2, children: /* @__PURE__ */ jsx(Text, { color: "gray", children: "Platinum Tier Architecture" }) })
|
|
17911
17926
|
] });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mtreeai/msapling-cli",
|
|
3
|
-
"version": "2.3.6-beta.
|
|
3
|
+
"version": "2.3.6-beta.41",
|
|
4
4
|
"description": "MSapling CLI — React/Ink terminal client for the MSapling backend (chat, projects, MDrive, agent tools). Proprietary; redistribution prohibited.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"author": "MSapling Team",
|