brew-tui 2.2.2 → 2.3.0

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-LS6N5D5P.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/{version-check-QY3SQ6XI.js → chunk-HXTTSU3T.js} +6 -5
  8. package/build/{chunk-ZC23DNMK.js → chunk-PYDQHHI2.js} +22 -354
  9. package/build/chunk-PYDQHHI2.js.map +1 -0
  10. package/build/{chunk-F2S7TGCS.js → chunk-SDQYHY2L.js} +3 -1
  11. package/build/chunk-SDQYHY2L.js.map +1 -0
  12. package/build/{chunk-Y45AXONF.js → chunk-UZMGXQKF.js} +2 -2
  13. package/build/{chunk-YUE5NRTE.js → chunk-YEMLGOXS.js} +23 -3
  14. package/build/chunk-YEMLGOXS.js.map +1 -0
  15. package/build/doctor-VRBE2VXF.js +133 -0
  16. package/build/doctor-VRBE2VXF.js.map +1 -0
  17. package/build/index.js +59 -159
  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-3JMI6HOO.js +15 -0
  23. package/build/version-check-3JMI6HOO.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-LS6N5D5P.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-HXTTSU3T.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: [] },
@@ -1196,7 +1080,7 @@ var useBrewStore = create4((set, get) => ({
1196
1080
  }));
1197
1081
 
1198
1082
  // src/stores/security-store.ts
1199
- import { create as create5 } from "zustand";
1083
+ import { create as create4 } from "zustand";
1200
1084
 
1201
1085
  // src/lib/security/osv-api.ts
1202
1086
  var OSV_BATCH_URL = "https://api.osv.dev/v1/querybatch";
@@ -1469,7 +1353,7 @@ function verifyPro(license, status) {
1469
1353
 
1470
1354
  // src/stores/security-store.ts
1471
1355
  var CACHE_TTL_MS = 30 * 60 * 1e3;
1472
- var useSecurityStore = create5((set, get) => ({
1356
+ var useSecurityStore = create4((set, get) => ({
1473
1357
  summary: null,
1474
1358
  loading: false,
1475
1359
  error: null,
@@ -1497,8 +1381,8 @@ var useSecurityStore = create5((set, get) => ({
1497
1381
  }));
1498
1382
 
1499
1383
  // src/stores/brewfile-store.ts
1500
- import { create as create6 } from "zustand";
1501
- var useBrewfileStore = create6((set, get) => ({
1384
+ import { create as create5 } from "zustand";
1385
+ var useBrewfileStore = create5((set, get) => ({
1502
1386
  schema: null,
1503
1387
  drift: null,
1504
1388
  loading: false,
@@ -1550,8 +1434,8 @@ var useBrewfileStore = create6((set, get) => ({
1550
1434
  }));
1551
1435
 
1552
1436
  // src/stores/sync-store.ts
1553
- import { create as create7 } from "zustand";
1554
- var useSyncStore = create7((set, get) => ({
1437
+ import { create as create6 } from "zustand";
1438
+ var useSyncStore = create6((set, get) => ({
1555
1439
  config: null,
1556
1440
  lastResult: null,
1557
1441
  conflicts: [],
@@ -1602,8 +1486,8 @@ var useSyncStore = create7((set, get) => ({
1602
1486
  }));
1603
1487
 
1604
1488
  // src/stores/compliance-store.ts
1605
- import { create as create8 } from "zustand";
1606
- var useComplianceStore = create8((set, get) => ({
1489
+ import { create as create7 } from "zustand";
1490
+ var useComplianceStore = create7((set, get) => ({
1607
1491
  policy: null,
1608
1492
  report: null,
1609
1493
  loading: false,
@@ -3245,7 +3129,7 @@ import { useEffect as useEffect14, useRef as useRef9, useState as useState11 } f
3245
3129
  import { Box as Box25 } from "ink";
3246
3130
 
3247
3131
  // src/stores/profile-store.ts
3248
- import { create as create9 } from "zustand";
3132
+ import { create as create8 } from "zustand";
3249
3133
 
3250
3134
  // src/lib/profiles/profile-manager.ts
3251
3135
  import { readFile, writeFile as writeFile2, readdir, rm, rename } from "fs/promises";
@@ -3412,7 +3296,7 @@ function getIsPro() {
3412
3296
  const { license, status } = useLicenseStore.getState();
3413
3297
  return verifyPro(license, status);
3414
3298
  }
3415
- var useProfileStore = create9((set) => ({
3299
+ var useProfileStore = create8((set) => ({
3416
3300
  profileNames: [],
3417
3301
  selectedProfile: null,
3418
3302
  loading: false,
@@ -3817,7 +3701,7 @@ import { useEffect as useEffect15, useRef as useRef10, useState as useState12 }
3817
3701
  import { Box as Box26, Text as Text28 } from "ink";
3818
3702
 
3819
3703
  // src/stores/cleanup-store.ts
3820
- import { create as create10 } from "zustand";
3704
+ import { create as create9 } from "zustand";
3821
3705
 
3822
3706
  // src/lib/cleanup/cleanup-analyzer.ts
3823
3707
  import { execFile } from "child_process";
@@ -3898,7 +3782,7 @@ async function analyzeCleanup(isPro, formulae, leaves) {
3898
3782
  }
3899
3783
 
3900
3784
  // src/stores/cleanup-store.ts
3901
- var useCleanupStore = create10((set, get) => ({
3785
+ var useCleanupStore = create9((set, get) => ({
3902
3786
  summary: null,
3903
3787
  selected: /* @__PURE__ */ new Set(),
3904
3788
  loading: false,
@@ -4091,12 +3975,12 @@ import { useEffect as useEffect16, useState as useState13, useMemo as useMemo5 }
4091
3975
  import { Box as Box27, Text as Text29 } from "ink";
4092
3976
 
4093
3977
  // src/stores/history-store.ts
4094
- import { create as create11 } from "zustand";
3978
+ import { create as create10 } from "zustand";
4095
3979
  function getStrongIsPro() {
4096
3980
  const { license, status } = useLicenseStore.getState();
4097
3981
  return verifyPro(license, status);
4098
3982
  }
4099
- var useHistoryStore = create11((set) => ({
3983
+ var useHistoryStore = create10((set) => ({
4100
3984
  entries: [],
4101
3985
  loading: false,
4102
3986
  error: null,
@@ -4668,7 +4552,7 @@ function AccountView() {
4668
4552
  status === "pro" || status === "team" || status === "expired" ? `v ${t("hint_revalidate")} ` : "",
4669
4553
  revalidating ? t("account_revalidating") : "",
4670
4554
  " ",
4671
- t("app_version", { version: "2.2.2" })
4555
+ t("app_version", { version: "2.3.0" })
4672
4556
  ] }) })
4673
4557
  ] });
4674
4558
  }
@@ -4678,7 +4562,7 @@ import { useCallback as useCallback3, useEffect as useEffect18, useRef as useRef
4678
4562
  import { Box as Box30, Text as Text32 } from "ink";
4679
4563
 
4680
4564
  // src/stores/rollback-store.ts
4681
- import { create as create12 } from "zustand";
4565
+ import { create as create11 } from "zustand";
4682
4566
 
4683
4567
  // src/lib/rollback/rollback-engine.ts
4684
4568
  import { readdir as readdir2 } from "fs/promises";
@@ -4857,7 +4741,7 @@ async function* executeRollbackPlan(plan, isPro) {
4857
4741
  }
4858
4742
 
4859
4743
  // src/stores/rollback-store.ts
4860
- var useRollbackStore = create12((set) => ({
4744
+ var useRollbackStore = create11((set) => ({
4861
4745
  snapshots: [],
4862
4746
  loading: false,
4863
4747
  error: null,
@@ -6176,7 +6060,7 @@ async function reportError(err, context = {}) {
6176
6060
  const config = await resolveConfig();
6177
6061
  if (!config.enabled || !config.endpoint) return;
6178
6062
  const machineId = await getMachineId();
6179
- const version = true ? "2.2.2" : "unknown";
6063
+ const version = true ? "2.3.0" : "unknown";
6180
6064
  await postReport(buildReport("error", err, context, machineId, version), config);
6181
6065
  }
6182
6066
  async function installCrashReporter() {
@@ -6185,7 +6069,7 @@ async function installCrashReporter() {
6185
6069
  if (!config.enabled || !config.endpoint) return;
6186
6070
  _installed = true;
6187
6071
  const machineId = await getMachineId();
6188
- const version = true ? "2.2.2" : "unknown";
6072
+ const version = true ? "2.3.0" : "unknown";
6189
6073
  process.on("uncaughtException", (err) => {
6190
6074
  void postReport(buildReport("fatal", err, { kind: "uncaughtException" }, machineId, version), config);
6191
6075
  });
@@ -6200,7 +6084,18 @@ import { jsx as jsx39 } from "react/jsx-runtime";
6200
6084
  var [, , command, arg] = process.argv;
6201
6085
  async function runCli() {
6202
6086
  if (command === "--version" || command === "-v" || command === "version") {
6203
- process.stdout.write("2.2.2\n");
6087
+ const cliVersion = "2.3.0";
6088
+ process.stdout.write(cliVersion + "\n");
6089
+ if (process.platform === "darwin") {
6090
+ try {
6091
+ const { readBrewTUIBarVersion } = await import("./version-check-3JMI6HOO.js");
6092
+ const appVersion = await readBrewTUIBarVersion();
6093
+ if (appVersion && appVersion !== cliVersion) {
6094
+ process.stderr.write(t("cli_versionMismatchWarning", { installed: appVersion, expected: cliVersion }) + "\n");
6095
+ }
6096
+ } catch {
6097
+ }
6098
+ }
6204
6099
  return;
6205
6100
  }
6206
6101
  await ensureDataDirs();
@@ -6308,7 +6203,7 @@ Snapshots: ${snapshots.length} (latest: ${latest ? formatDate(latest.capturedAt)
6308
6203
  } catch {
6309
6204
  }
6310
6205
  try {
6311
- const { loadBrewfile: loadBrewfile2, computeDrift: computeDrift2 } = await import("./brewfile-manager-HWTPBXPO.js");
6206
+ const { loadBrewfile: loadBrewfile2, computeDrift: computeDrift2 } = await import("./brewfile-manager-DNRM6CQ7.js");
6312
6207
  const schema = await loadBrewfile2();
6313
6208
  if (schema) {
6314
6209
  const drift = await computeDrift2(schema);
@@ -6317,7 +6212,7 @@ Snapshots: ${snapshots.length} (latest: ${latest ? formatDate(latest.capturedAt)
6317
6212
  } catch {
6318
6213
  }
6319
6214
  try {
6320
- const { loadSyncConfig: loadSyncConfig2 } = await import("./sync-engine-G5ML7TJ5.js");
6215
+ const { loadSyncConfig: loadSyncConfig2 } = await import("./sync-engine-KTH4K3NG.js");
6321
6216
  const syncConfig = await loadSyncConfig2();
6322
6217
  if (syncConfig?.lastSync) {
6323
6218
  console.log(`Sync: last sync ${formatDate(syncConfig.lastSync)}`);
@@ -6341,7 +6236,7 @@ Snapshots: ${snapshots.length} (latest: ${latest ? formatDate(latest.capturedAt)
6341
6236
  if (command === "install-brewbar") {
6342
6237
  console.warn(t("cli_brewtuibarLegacyAlias", { legacy: command, current: "install-brew-tui-bar" }));
6343
6238
  }
6344
- const { installBrewTUIBar } = await import("./brew-tui-bar-installer-GTV4OEZW.js");
6239
+ const { installBrewTUIBar } = await import("./brew-tui-bar-installer-LS6N5D5P.js");
6345
6240
  try {
6346
6241
  console.log(t("cli_brewtuibarInstalling"));
6347
6242
  await installBrewTUIBar(false, arg === "--force");
@@ -6356,7 +6251,7 @@ Snapshots: ${snapshots.length} (latest: ${latest ? formatDate(latest.capturedAt)
6356
6251
  if (command === "uninstall-brewbar") {
6357
6252
  console.warn(t("cli_brewtuibarLegacyAlias", { legacy: command, current: "uninstall-brew-tui-bar" }));
6358
6253
  }
6359
- const { uninstallBrewTUIBar } = await import("./brew-tui-bar-installer-GTV4OEZW.js");
6254
+ const { uninstallBrewTUIBar } = await import("./brew-tui-bar-installer-LS6N5D5P.js");
6360
6255
  try {
6361
6256
  await uninstallBrewTUIBar();
6362
6257
  console.log(t("cli_brewtuibarUninstalled"));
@@ -6366,6 +6261,11 @@ Snapshots: ${snapshots.length} (latest: ${latest ? formatDate(latest.capturedAt)
6366
6261
  }
6367
6262
  return;
6368
6263
  }
6264
+ if (command === "doctor") {
6265
+ const { runDoctor } = await import("./doctor-VRBE2VXF.js");
6266
+ await runDoctor();
6267
+ return;
6268
+ }
6369
6269
  if (command === "delete-account") {
6370
6270
  const rl = createInterface({ input: process.stdin, output: process.stdout });
6371
6271
  const answer = await rl.question(t("delete_account_confirm") + " (y/N): ");
@@ -6386,7 +6286,7 @@ Snapshots: ${snapshots.length} (latest: ${latest ? formatDate(latest.capturedAt)
6386
6286
  async function ensureBrewTUIBarRunning() {
6387
6287
  if (process.platform !== "darwin") return;
6388
6288
  await useLicenseStore.getState().initialize();
6389
- const { syncAndLaunchBrewTUIBar } = await import("./brew-tui-bar-installer-GTV4OEZW.js");
6289
+ const { syncAndLaunchBrewTUIBar } = await import("./brew-tui-bar-installer-LS6N5D5P.js");
6390
6290
  await syncAndLaunchBrewTUIBar();
6391
6291
  }
6392
6292
  runCli().catch((err) => {