brew-tui 2.2.2 → 2.3.1

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 (32) hide show
  1. package/build/{brew-tui-bar-installer-GTV4OEZW.js → brew-tui-bar-installer-PCHNYMZL.js} +5 -3
  2. package/build/{brewfile-manager-HWTPBXPO.js → brewfile-manager-DNRM6CQ7.js} +3 -3
  3. package/build/chunk-7R4ME2NC.js +342 -0
  4. package/build/chunk-7R4ME2NC.js.map +1 -0
  5. package/build/chunk-CCAT52XY.js +138 -0
  6. package/build/chunk-CCAT52XY.js.map +1 -0
  7. package/build/{chunk-YUE5NRTE.js → chunk-I5VZR55J.js} +23 -3
  8. package/build/chunk-I5VZR55J.js.map +1 -0
  9. package/build/{version-check-QY3SQ6XI.js → chunk-KR6EAHEE.js} +6 -5
  10. package/build/{chunk-ZC23DNMK.js → chunk-PYDQHHI2.js} +22 -354
  11. package/build/chunk-PYDQHHI2.js.map +1 -0
  12. package/build/{chunk-F2S7TGCS.js → chunk-SDQYHY2L.js} +3 -1
  13. package/build/chunk-SDQYHY2L.js.map +1 -0
  14. package/build/{chunk-Y45AXONF.js → chunk-UZMGXQKF.js} +2 -2
  15. package/build/doctor-D56LDODR.js +133 -0
  16. package/build/doctor-D56LDODR.js.map +1 -0
  17. package/build/index.js +60 -162
  18. package/build/index.js.map +1 -1
  19. package/build/postinstall.js +10 -5
  20. package/build/postinstall.js.map +1 -1
  21. package/build/{sync-engine-G5ML7TJ5.js → sync-engine-KTH4K3NG.js} +4 -3
  22. package/build/version-check-UUJMLUK6.js +15 -0
  23. package/build/version-check-UUJMLUK6.js.map +1 -0
  24. package/package.json +1 -1
  25. package/build/chunk-F2S7TGCS.js.map +0 -1
  26. package/build/chunk-YUE5NRTE.js.map +0 -1
  27. package/build/chunk-ZC23DNMK.js.map +0 -1
  28. /package/build/{brew-tui-bar-installer-GTV4OEZW.js.map → brew-tui-bar-installer-PCHNYMZL.js.map} +0 -0
  29. /package/build/{brewfile-manager-HWTPBXPO.js.map → brewfile-manager-DNRM6CQ7.js.map} +0 -0
  30. /package/build/{version-check-QY3SQ6XI.js.map → chunk-KR6EAHEE.js.map} +0 -0
  31. /package/build/{chunk-Y45AXONF.js.map → chunk-UZMGXQKF.js.map} +0 -0
  32. /package/build/{sync-engine-G5ML7TJ5.js.map → sync-engine-KTH4K3NG.js.map} +0 -0
package/build/index.js CHANGED
@@ -1,3 +1,7 @@
1
+ import {
2
+ useLicenseStore,
3
+ verifyStoreIntegrity
4
+ } from "./chunk-CCAT52XY.js";
1
5
  import {
2
6
  brewUpdate,
3
7
  casksToListItems,
@@ -24,21 +28,21 @@ import {
24
28
  uninstallPackage,
25
29
  unpinPackage,
26
30
  validatePackageName
27
- } from "./chunk-Y45AXONF.js";
31
+ } from "./chunk-UZMGXQKF.js";
28
32
  import {
29
- activate,
30
33
  applyConflictResolutions,
31
- deactivate,
32
34
  decryptPayload,
33
- getDegradationLevel,
34
- isExpired,
35
- loadLicense,
36
35
  loadSyncConfig,
37
- needsRevalidation,
38
36
  readSyncEnvelope,
39
- revalidate,
40
37
  sync
41
- } from "./chunk-ZC23DNMK.js";
38
+ } from "./chunk-7R4ME2NC.js";
39
+ import {
40
+ activate,
41
+ deactivate,
42
+ getDegradationLevel,
43
+ loadLicense,
44
+ revalidate
45
+ } from "./chunk-PYDQHHI2.js";
42
46
  import {
43
47
  fetchWithRetry
44
48
  } from "./chunk-NRRQECXA.js";
@@ -47,7 +51,7 @@ import {
47
51
  t,
48
52
  tp,
49
53
  useLocaleStore
50
- } from "./chunk-F2S7TGCS.js";
54
+ } from "./chunk-SDQYHY2L.js";
51
55
  import {
52
56
  checkCompliance
53
57
  } from "./chunk-S3NRCC23.js";
@@ -670,132 +674,12 @@ function AppLayout({ children }) {
670
674
  ] });
671
675
  }
672
676
 
673
- // src/stores/license-store.ts
674
- import { create as create2 } from "zustand";
675
-
676
- // src/lib/license/anti-tamper.ts
677
- var _originalIsPro = null;
678
- var _originalGetState = null;
679
- var _storeApi = null;
680
- function initStoreIntegrity(store) {
681
- _storeApi = store;
682
- _originalIsPro = store.getState().isPro;
683
- _originalGetState = store.getState;
684
- }
685
- function verifyStoreIntegrity() {
686
- if (!_storeApi || !_originalIsPro || !_originalGetState) return false;
687
- const state = _storeApi.getState();
688
- if (state.isPro !== _originalIsPro) return false;
689
- if (_storeApi.getState !== _originalGetState) return false;
690
- if (state.status === "free" && state.isPro()) return false;
691
- return true;
692
- }
693
-
694
- // src/stores/license-store.ts
695
- var REVALIDATION_CHECK_MS = 60 * 60 * 1e3;
696
- var _revalidatingPromise = null;
697
- var _revalidationInterval = null;
698
- async function doRevalidation(license, set) {
699
- const result = await revalidate(license);
700
- if (result === "expired") {
701
- set({ status: "expired", license: { ...license, status: "expired" }, degradation: "expired" });
702
- } else {
703
- const updated = await loadLicense();
704
- const effective = updated ?? license;
705
- set({ license: effective, degradation: getDegradationLevel(effective) });
706
- }
707
- }
708
- var useLicenseStore = create2((set, get) => ({
709
- status: "validating",
710
- license: null,
711
- error: null,
712
- degradation: "none",
713
- initialize: async () => {
714
- initStoreIntegrity(useLicenseStore);
715
- await ensureDataDirs();
716
- const license = await loadLicense();
717
- if (!license) {
718
- set({ status: "free", license: null, degradation: "none" });
719
- return;
720
- }
721
- if (isExpired(license)) {
722
- set({ status: "expired", license, degradation: "expired" });
723
- return;
724
- }
725
- const level = getDegradationLevel(license);
726
- if (level === "expired") {
727
- set({ status: "expired", license, degradation: "expired" });
728
- return;
729
- }
730
- set({ status: license.plan, license, degradation: level });
731
- if (needsRevalidation(license)) {
732
- if (!_revalidatingPromise) {
733
- _revalidatingPromise = doRevalidation(license, set).finally(() => {
734
- _revalidatingPromise = null;
735
- });
736
- }
737
- await _revalidatingPromise;
738
- }
739
- if (_revalidationInterval) clearInterval(_revalidationInterval);
740
- _revalidationInterval = setInterval(() => {
741
- const current = get().license;
742
- const status = get().status;
743
- if (!current || status !== "pro" && status !== "team") return;
744
- if (!needsRevalidation(current)) return;
745
- if (_revalidatingPromise) return;
746
- _revalidatingPromise = doRevalidation(current, set).finally(() => {
747
- _revalidatingPromise = null;
748
- });
749
- }, REVALIDATION_CHECK_MS);
750
- _revalidationInterval.unref();
751
- },
752
- activate: async (key) => {
753
- set({ error: null });
754
- try {
755
- const license = await activate(key);
756
- set({ status: license.plan, license, degradation: "none" });
757
- return true;
758
- } catch (err) {
759
- const msg = err instanceof Error ? err.message : String(err);
760
- set({ error: msg });
761
- return false;
762
- }
763
- },
764
- deactivate: async () => {
765
- const { license } = get();
766
- if (license) {
767
- const { remoteSuccess } = await deactivate(license);
768
- if (!remoteSuccess) {
769
- set({ status: "free", license: null, degradation: "none", error: "License removed locally but server deactivation failed. It may remain active remotely." });
770
- return;
771
- }
772
- }
773
- set({ status: "free", license: null, degradation: "none", error: null });
774
- },
775
- revalidate: async () => {
776
- const { license } = get();
777
- if (!license) return;
778
- try {
779
- await doRevalidation(license, set);
780
- } catch (err) {
781
- set({ error: err instanceof Error ? err.message : String(err) });
782
- }
783
- },
784
- // Team is a superset of Pro — team users have full Pro access plus team features.
785
- // Pro users do NOT get Team features (Compliance) without paying for the Team tier.
786
- isPro: () => {
787
- const s = get().status;
788
- return s === "pro" || s === "team";
789
- },
790
- isTeam: () => get().status === "team"
791
- }));
792
-
793
677
  // src/hooks/use-keyboard.ts
794
678
  import { useInput } from "ink";
795
679
 
796
680
  // src/stores/modal-store.ts
797
- import { create as create3 } from "zustand";
798
- var useModalStore = create3((set) => ({
681
+ import { create as create2 } from "zustand";
682
+ var useModalStore = create2((set) => ({
799
683
  _count: 0,
800
684
  isOpen: false,
801
685
  openModal: () => set((s) => {
@@ -1041,7 +925,7 @@ function useVisibleRows({
1041
925
  }
1042
926
 
1043
927
  // src/stores/brew-store.ts
1044
- import { create as create4 } from "zustand";
928
+ import { create as create3 } from "zustand";
1045
929
  var BREW_UPDATE_COOLDOWN_MS = 5 * 60 * 1e3;
1046
930
  var fetchAllInFlight = null;
1047
931
  var brewUpdateInFlight = null;
@@ -1055,7 +939,7 @@ function setError(set, key, error) {
1055
939
  function recordFetchTime(set, key) {
1056
940
  set((s) => ({ lastFetchedAt: { ...s.lastFetchedAt, [key]: Date.now() } }));
1057
941
  }
1058
- var useBrewStore = create4((set, get) => ({
942
+ var useBrewStore = create3((set, get) => ({
1059
943
  formulae: [],
1060
944
  casks: [],
1061
945
  outdated: { formulae: [], casks: [] },
@@ -1163,9 +1047,7 @@ var useBrewStore = create4((set, get) => ({
1163
1047
  store.fetchInstalled(),
1164
1048
  store.fetchOutdated(),
1165
1049
  store.fetchServices(),
1166
- store.fetchConfig(),
1167
- store.fetchLeaves(),
1168
- store.fetchDoctor()
1050
+ store.fetchConfig()
1169
1051
  ]).then(() => void 0).finally(() => {
1170
1052
  fetchAllInFlight = null;
1171
1053
  });
@@ -1196,7 +1078,7 @@ var useBrewStore = create4((set, get) => ({
1196
1078
  }));
1197
1079
 
1198
1080
  // src/stores/security-store.ts
1199
- import { create as create5 } from "zustand";
1081
+ import { create as create4 } from "zustand";
1200
1082
 
1201
1083
  // src/lib/security/osv-api.ts
1202
1084
  var OSV_BATCH_URL = "https://api.osv.dev/v1/querybatch";
@@ -1469,7 +1351,7 @@ function verifyPro(license, status) {
1469
1351
 
1470
1352
  // src/stores/security-store.ts
1471
1353
  var CACHE_TTL_MS = 30 * 60 * 1e3;
1472
- var useSecurityStore = create5((set, get) => ({
1354
+ var useSecurityStore = create4((set, get) => ({
1473
1355
  summary: null,
1474
1356
  loading: false,
1475
1357
  error: null,
@@ -1497,8 +1379,8 @@ var useSecurityStore = create5((set, get) => ({
1497
1379
  }));
1498
1380
 
1499
1381
  // src/stores/brewfile-store.ts
1500
- import { create as create6 } from "zustand";
1501
- var useBrewfileStore = create6((set, get) => ({
1382
+ import { create as create5 } from "zustand";
1383
+ var useBrewfileStore = create5((set, get) => ({
1502
1384
  schema: null,
1503
1385
  drift: null,
1504
1386
  loading: false,
@@ -1550,8 +1432,8 @@ var useBrewfileStore = create6((set, get) => ({
1550
1432
  }));
1551
1433
 
1552
1434
  // src/stores/sync-store.ts
1553
- import { create as create7 } from "zustand";
1554
- var useSyncStore = create7((set, get) => ({
1435
+ import { create as create6 } from "zustand";
1436
+ var useSyncStore = create6((set, get) => ({
1555
1437
  config: null,
1556
1438
  lastResult: null,
1557
1439
  conflicts: [],
@@ -1602,8 +1484,8 @@ var useSyncStore = create7((set, get) => ({
1602
1484
  }));
1603
1485
 
1604
1486
  // src/stores/compliance-store.ts
1605
- import { create as create8 } from "zustand";
1606
- var useComplianceStore = create8((set, get) => ({
1487
+ import { create as create7 } from "zustand";
1488
+ var useComplianceStore = create7((set, get) => ({
1607
1489
  policy: null,
1608
1490
  report: null,
1609
1491
  loading: false,
@@ -3245,7 +3127,7 @@ import { useEffect as useEffect14, useRef as useRef9, useState as useState11 } f
3245
3127
  import { Box as Box25 } from "ink";
3246
3128
 
3247
3129
  // src/stores/profile-store.ts
3248
- import { create as create9 } from "zustand";
3130
+ import { create as create8 } from "zustand";
3249
3131
 
3250
3132
  // src/lib/profiles/profile-manager.ts
3251
3133
  import { readFile, writeFile as writeFile2, readdir, rm, rename } from "fs/promises";
@@ -3412,7 +3294,7 @@ function getIsPro() {
3412
3294
  const { license, status } = useLicenseStore.getState();
3413
3295
  return verifyPro(license, status);
3414
3296
  }
3415
- var useProfileStore = create9((set) => ({
3297
+ var useProfileStore = create8((set) => ({
3416
3298
  profileNames: [],
3417
3299
  selectedProfile: null,
3418
3300
  loading: false,
@@ -3817,7 +3699,7 @@ import { useEffect as useEffect15, useRef as useRef10, useState as useState12 }
3817
3699
  import { Box as Box26, Text as Text28 } from "ink";
3818
3700
 
3819
3701
  // src/stores/cleanup-store.ts
3820
- import { create as create10 } from "zustand";
3702
+ import { create as create9 } from "zustand";
3821
3703
 
3822
3704
  // src/lib/cleanup/cleanup-analyzer.ts
3823
3705
  import { execFile } from "child_process";
@@ -3898,7 +3780,7 @@ async function analyzeCleanup(isPro, formulae, leaves) {
3898
3780
  }
3899
3781
 
3900
3782
  // src/stores/cleanup-store.ts
3901
- var useCleanupStore = create10((set, get) => ({
3783
+ var useCleanupStore = create9((set, get) => ({
3902
3784
  summary: null,
3903
3785
  selected: /* @__PURE__ */ new Set(),
3904
3786
  loading: false,
@@ -4091,12 +3973,12 @@ import { useEffect as useEffect16, useState as useState13, useMemo as useMemo5 }
4091
3973
  import { Box as Box27, Text as Text29 } from "ink";
4092
3974
 
4093
3975
  // src/stores/history-store.ts
4094
- import { create as create11 } from "zustand";
3976
+ import { create as create10 } from "zustand";
4095
3977
  function getStrongIsPro() {
4096
3978
  const { license, status } = useLicenseStore.getState();
4097
3979
  return verifyPro(license, status);
4098
3980
  }
4099
- var useHistoryStore = create11((set) => ({
3981
+ var useHistoryStore = create10((set) => ({
4100
3982
  entries: [],
4101
3983
  loading: false,
4102
3984
  error: null,
@@ -4668,7 +4550,7 @@ function AccountView() {
4668
4550
  status === "pro" || status === "team" || status === "expired" ? `v ${t("hint_revalidate")} ` : "",
4669
4551
  revalidating ? t("account_revalidating") : "",
4670
4552
  " ",
4671
- t("app_version", { version: "2.2.2" })
4553
+ t("app_version", { version: "2.3.1" })
4672
4554
  ] }) })
4673
4555
  ] });
4674
4556
  }
@@ -4678,7 +4560,7 @@ import { useCallback as useCallback3, useEffect as useEffect18, useRef as useRef
4678
4560
  import { Box as Box30, Text as Text32 } from "ink";
4679
4561
 
4680
4562
  // src/stores/rollback-store.ts
4681
- import { create as create12 } from "zustand";
4563
+ import { create as create11 } from "zustand";
4682
4564
 
4683
4565
  // src/lib/rollback/rollback-engine.ts
4684
4566
  import { readdir as readdir2 } from "fs/promises";
@@ -4857,7 +4739,7 @@ async function* executeRollbackPlan(plan, isPro) {
4857
4739
  }
4858
4740
 
4859
4741
  // src/stores/rollback-store.ts
4860
- var useRollbackStore = create12((set) => ({
4742
+ var useRollbackStore = create11((set) => ({
4861
4743
  snapshots: [],
4862
4744
  loading: false,
4863
4745
  error: null,
@@ -6176,7 +6058,7 @@ async function reportError(err, context = {}) {
6176
6058
  const config = await resolveConfig();
6177
6059
  if (!config.enabled || !config.endpoint) return;
6178
6060
  const machineId = await getMachineId();
6179
- const version = true ? "2.2.2" : "unknown";
6061
+ const version = true ? "2.3.1" : "unknown";
6180
6062
  await postReport(buildReport("error", err, context, machineId, version), config);
6181
6063
  }
6182
6064
  async function installCrashReporter() {
@@ -6185,7 +6067,7 @@ async function installCrashReporter() {
6185
6067
  if (!config.enabled || !config.endpoint) return;
6186
6068
  _installed = true;
6187
6069
  const machineId = await getMachineId();
6188
- const version = true ? "2.2.2" : "unknown";
6070
+ const version = true ? "2.3.1" : "unknown";
6189
6071
  process.on("uncaughtException", (err) => {
6190
6072
  void postReport(buildReport("fatal", err, { kind: "uncaughtException" }, machineId, version), config);
6191
6073
  });
@@ -6200,7 +6082,18 @@ import { jsx as jsx39 } from "react/jsx-runtime";
6200
6082
  var [, , command, arg] = process.argv;
6201
6083
  async function runCli() {
6202
6084
  if (command === "--version" || command === "-v" || command === "version") {
6203
- process.stdout.write("2.2.2\n");
6085
+ const cliVersion = "2.3.1";
6086
+ process.stdout.write(cliVersion + "\n");
6087
+ if (process.platform === "darwin") {
6088
+ try {
6089
+ const { readBrewTUIBarVersion } = await import("./version-check-UUJMLUK6.js");
6090
+ const appVersion = await readBrewTUIBarVersion();
6091
+ if (appVersion && appVersion !== cliVersion) {
6092
+ process.stderr.write(t("cli_versionMismatchWarning", { installed: appVersion, expected: cliVersion }) + "\n");
6093
+ }
6094
+ } catch {
6095
+ }
6096
+ }
6204
6097
  return;
6205
6098
  }
6206
6099
  await ensureDataDirs();
@@ -6308,7 +6201,7 @@ Snapshots: ${snapshots.length} (latest: ${latest ? formatDate(latest.capturedAt)
6308
6201
  } catch {
6309
6202
  }
6310
6203
  try {
6311
- const { loadBrewfile: loadBrewfile2, computeDrift: computeDrift2 } = await import("./brewfile-manager-HWTPBXPO.js");
6204
+ const { loadBrewfile: loadBrewfile2, computeDrift: computeDrift2 } = await import("./brewfile-manager-DNRM6CQ7.js");
6312
6205
  const schema = await loadBrewfile2();
6313
6206
  if (schema) {
6314
6207
  const drift = await computeDrift2(schema);
@@ -6317,7 +6210,7 @@ Snapshots: ${snapshots.length} (latest: ${latest ? formatDate(latest.capturedAt)
6317
6210
  } catch {
6318
6211
  }
6319
6212
  try {
6320
- const { loadSyncConfig: loadSyncConfig2 } = await import("./sync-engine-G5ML7TJ5.js");
6213
+ const { loadSyncConfig: loadSyncConfig2 } = await import("./sync-engine-KTH4K3NG.js");
6321
6214
  const syncConfig = await loadSyncConfig2();
6322
6215
  if (syncConfig?.lastSync) {
6323
6216
  console.log(`Sync: last sync ${formatDate(syncConfig.lastSync)}`);
@@ -6341,7 +6234,7 @@ Snapshots: ${snapshots.length} (latest: ${latest ? formatDate(latest.capturedAt)
6341
6234
  if (command === "install-brewbar") {
6342
6235
  console.warn(t("cli_brewtuibarLegacyAlias", { legacy: command, current: "install-brew-tui-bar" }));
6343
6236
  }
6344
- const { installBrewTUIBar } = await import("./brew-tui-bar-installer-GTV4OEZW.js");
6237
+ const { installBrewTUIBar } = await import("./brew-tui-bar-installer-PCHNYMZL.js");
6345
6238
  try {
6346
6239
  console.log(t("cli_brewtuibarInstalling"));
6347
6240
  await installBrewTUIBar(false, arg === "--force");
@@ -6356,7 +6249,7 @@ Snapshots: ${snapshots.length} (latest: ${latest ? formatDate(latest.capturedAt)
6356
6249
  if (command === "uninstall-brewbar") {
6357
6250
  console.warn(t("cli_brewtuibarLegacyAlias", { legacy: command, current: "uninstall-brew-tui-bar" }));
6358
6251
  }
6359
- const { uninstallBrewTUIBar } = await import("./brew-tui-bar-installer-GTV4OEZW.js");
6252
+ const { uninstallBrewTUIBar } = await import("./brew-tui-bar-installer-PCHNYMZL.js");
6360
6253
  try {
6361
6254
  await uninstallBrewTUIBar();
6362
6255
  console.log(t("cli_brewtuibarUninstalled"));
@@ -6366,6 +6259,11 @@ Snapshots: ${snapshots.length} (latest: ${latest ? formatDate(latest.capturedAt)
6366
6259
  }
6367
6260
  return;
6368
6261
  }
6262
+ if (command === "doctor") {
6263
+ const { runDoctor } = await import("./doctor-D56LDODR.js");
6264
+ await runDoctor();
6265
+ return;
6266
+ }
6369
6267
  if (command === "delete-account") {
6370
6268
  const rl = createInterface({ input: process.stdin, output: process.stdout });
6371
6269
  const answer = await rl.question(t("delete_account_confirm") + " (y/N): ");
@@ -6386,7 +6284,7 @@ Snapshots: ${snapshots.length} (latest: ${latest ? formatDate(latest.capturedAt)
6386
6284
  async function ensureBrewTUIBarRunning() {
6387
6285
  if (process.platform !== "darwin") return;
6388
6286
  await useLicenseStore.getState().initialize();
6389
- const { syncAndLaunchBrewTUIBar } = await import("./brew-tui-bar-installer-GTV4OEZW.js");
6287
+ const { syncAndLaunchBrewTUIBar } = await import("./brew-tui-bar-installer-PCHNYMZL.js");
6390
6288
  await syncAndLaunchBrewTUIBar();
6391
6289
  }
6392
6290
  runCli().catch((err) => {