@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.
Files changed (2) hide show
  1. package/dist/index.js +35 -20
  2. 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
- import * as keytar from "keytar";
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 keytar.setPassword(KEYCHAIN_SERVICE, KEYCHAIN_ACCOUNT, token);
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 keychainToken = await keytar.getPassword(KEYCHAIN_SERVICE, KEYCHAIN_ACCOUNT);
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 keytar.deletePassword(KEYCHAIN_SERVICE, KEYCHAIN_ACCOUNT);
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 getKeytar() {
9945
- if (_keytar !== "pending") return _keytar;
9959
+ async function getKeytar2() {
9960
+ if (_keytar2 !== "pending") return _keytar2;
9946
9961
  try {
9947
- _keytar = await import("keytar");
9948
- return _keytar;
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
- _keytar = null;
9966
+ _keytar2 = null;
9952
9967
  return null;
9953
9968
  }
9954
9969
  }
9955
9970
  async function secureStoreDelete() {
9956
- const kt = await getKeytar();
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, _keytar;
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
- _keytar = "pending";
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.40" : "(dev)";
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:27:42.676Z";
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 keytar2 = await import("keytar");
15275
- if (keytar2 && typeof keytar2.getPassword === "function") {
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 keytar2 = await import("keytar");
15413
+ const keytar = await import("keytar");
15399
15414
  const KEYCHAIN_SERVICE3 = "msapling-cli";
15400
15415
  const KEYCHAIN_ACCOUNT3 = "auth_token";
15401
- const token = await keytar2.getPassword(KEYCHAIN_SERVICE3, KEYCHAIN_ACCOUNT3);
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.40"
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.40",
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",