gh-manager-cli 1.32.0 → 1.34.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [1.34.0](https://github.com/wiiiimm/gh-manager-cli/compare/v1.33.0...v1.34.0) (2025-09-06)
2
+
3
+
4
+ ### Features
5
+
6
+ * add in-app sponsorship prompts and reminders ([#28](https://github.com/wiiiimm/gh-manager-cli/issues/28)) ([443aa4b](https://github.com/wiiiimm/gh-manager-cli/commit/443aa4bcaf2eb18dc4d4abef1ebe3f14652912bd))
7
+
8
+ # [1.33.0](https://github.com/wiiiimm/gh-manager-cli/compare/v1.32.0...v1.33.0) (2025-09-06)
9
+
10
+
11
+ ### Features
12
+
13
+ * add Buy Me a Coffee sponsorship support ([#27](https://github.com/wiiiimm/gh-manager-cli/issues/27)) ([76ed5dd](https://github.com/wiiiimm/gh-manager-cli/commit/76ed5ddf8a6ec4dd5c2110250858967e7f63b96f))
14
+
1
15
  # [1.32.0](https://github.com/wiiiimm/gh-manager-cli/compare/v1.31.2...v1.32.0) (2025-09-05)
2
16
 
3
17
 
package/README.md CHANGED
@@ -516,6 +516,14 @@ Highlights on deck:
516
516
  - Bulk selection and actions
517
517
  - Repository renaming
518
518
 
519
+ ## Support & Sponsorship
520
+
521
+ If you find gh-manager-cli useful, consider supporting its development:
522
+
523
+ ☕ **[Buy Me a Coffee](https://buymeacoffee.com/wiiiimm)** - Support with coffee donations
524
+
525
+ Your support helps maintain and improve this project. Thank you! 🙏
526
+
519
527
  ## License
520
528
 
521
529
  MIT
package/dist/index.js CHANGED
@@ -31,7 +31,7 @@ var require_package = __commonJS({
31
31
  "package.json"(exports, module) {
32
32
  module.exports = {
33
33
  name: "gh-manager-cli",
34
- version: "1.32.0",
34
+ version: "1.34.0",
35
35
  private: false,
36
36
  description: "TUI terminal app to manage GitHub repos. Clean up your account in 5 minutes. Archive, delete, rename repos with keyboard shortcuts. Alternative to clicking through github.com",
37
37
  license: "MIT",
@@ -1697,6 +1697,8 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1697
1697
  const [ownerContext, setOwnerContext] = useState13("personal");
1698
1698
  const [ownerAffiliations, setOwnerAffiliations] = useState13(["OWNER"]);
1699
1699
  const [orgSwitcherOpen, setOrgSwitcherOpen] = useState13(false);
1700
+ const [operationCount, setOperationCount] = useState13(0);
1701
+ const [showSponsorReminder, setShowSponsorReminder] = useState13(false);
1700
1702
  const [searchItems, setSearchItems] = useState13([]);
1701
1703
  const [searchEndCursor, setSearchEndCursor] = useState13(null);
1702
1704
  const [searchHasNextPage, setSearchHasNextPage] = useState13(false);
@@ -1769,6 +1771,14 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1769
1771
  }
1770
1772
  })();
1771
1773
  }, [initialOrgSlug2, token, prefsLoaded, client, addDebugMessage]);
1774
+ function trackSuccessfulOperation() {
1775
+ const newCount = operationCount + 1;
1776
+ setOperationCount(newCount);
1777
+ if (newCount % 5 === 0) {
1778
+ setShowSponsorReminder(true);
1779
+ setTimeout(() => setShowSponsorReminder(false), 5e3);
1780
+ }
1781
+ }
1772
1782
  function closeArchiveModal() {
1773
1783
  setArchiveMode(false);
1774
1784
  setArchiveTarget(null);
@@ -1856,6 +1866,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1856
1866
  const updateRepo = (r) => r.id === id ? { ...r, isArchived: !isArchived } : r;
1857
1867
  setItems((prev) => prev.map(updateRepo));
1858
1868
  setSearchItems((prev) => prev.map(updateRepo));
1869
+ trackSuccessfulOperation();
1859
1870
  closeArchiveModal();
1860
1871
  } catch (e) {
1861
1872
  setArchiving(false);
@@ -1993,6 +2004,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1993
2004
  if (searchActive) {
1994
2005
  setSearchTotalCount((c) => Math.max(0, c - 1));
1995
2006
  }
2007
+ trackSuccessfulOperation();
1996
2008
  setDeleteMode(false);
1997
2009
  setDeleteTarget(null);
1998
2010
  setTypedCode("");
@@ -2829,6 +2841,11 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2829
2841
  }
2830
2842
  return /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", height: availableHeight, children: [
2831
2843
  headerBar,
2844
+ showSponsorReminder && /* @__PURE__ */ jsx17(Box16, { marginX: 1, marginBottom: 1, children: /* @__PURE__ */ jsx17(Box16, { borderStyle: "single", borderColor: "yellow", paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", alignItems: "center", children: [
2845
+ /* @__PURE__ */ jsx17(Text17, { color: "yellow", children: "\u{1F49A} Thanks for using gh-manager-cli!" }),
2846
+ /* @__PURE__ */ jsx17(Text17, { color: "gray", children: "Your support helps craft more open-source tools" }),
2847
+ /* @__PURE__ */ jsx17(Text17, { color: "cyan", children: "\u2615 buymeacoffee.com/wiiiimm" })
2848
+ ] }) }) }),
2832
2849
  /* @__PURE__ */ jsx17(Box16, { borderStyle: "single", borderColor: modalOpen ? "gray" : "yellow", paddingX: 1, paddingY: 1, marginX: 1, height: contentHeight + containerPadding + 2, flexDirection: "column", children: deleteMode && deleteTarget ? (
2833
2850
  // Centered modal; hide list content while modal is open
2834
2851
  /* @__PURE__ */ jsx17(Box16, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", borderStyle: "round", borderColor: "red", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 80), children: [
@@ -3287,7 +3304,8 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
3287
3304
  /* @__PURE__ */ jsx17(Box16, { width: terminalWidth, justifyContent: "center", children: /* @__PURE__ */ jsx17(Text17, { color: "gray", dimColor: modalOpen ? true : void 0, children: "\u2191\u2193 Navigate \u2022 Ctrl+G Top \u2022 G Bottom \u2022 \u23CE/O Open \u2022 R Refresh" }) }),
3288
3305
  /* @__PURE__ */ jsx17(Box16, { width: terminalWidth, justifyContent: "center", children: /* @__PURE__ */ jsx17(Text17, { color: "gray", dimColor: modalOpen ? true : void 0, children: "/ Search \u2022 S Sort \u2022 D Direction \u2022 T Density \u2022 F Fork Status \u2022 V Visibility" }) }),
3289
3306
  /* @__PURE__ */ jsx17(Box16, { width: terminalWidth, justifyContent: "center", children: /* @__PURE__ */ jsx17(Text17, { color: "gray", dimColor: modalOpen ? true : void 0, children: "I Info \u2022 C Copy URL \u2022 Ctrl+R Rename \u2022 Ctrl+A Un/Archive \u2022 Ctrl+V Change Visibility \u2022 Ctrl+S Sync Fork" }) }),
3290
- /* @__PURE__ */ jsx17(Box16, { width: terminalWidth, justifyContent: "center", children: /* @__PURE__ */ jsx17(Text17, { color: "gray", dimColor: modalOpen ? true : void 0, children: "K Cache Info \u2022 W Org Switch \u2022 Del/Backspace Delete \u2022 Ctrl+L Logout \u2022 Q Quit" }) })
3307
+ /* @__PURE__ */ jsx17(Box16, { width: terminalWidth, justifyContent: "center", children: /* @__PURE__ */ jsx17(Text17, { color: "gray", dimColor: modalOpen ? true : void 0, children: "K Cache Info \u2022 W Org Switch \u2022 Del/Backspace Delete \u2022 Ctrl+L Logout \u2022 Q Quit" }) }),
3308
+ /* @__PURE__ */ jsx17(Box16, { width: terminalWidth, justifyContent: "center", marginTop: 1, children: /* @__PURE__ */ jsx17(Text17, { color: "yellow", dimColor: modalOpen ? true : void 0, children: "\u{1F49A} Support the project: buymeacoffee.com/wiiiimm" }) })
3291
3309
  ] }),
3292
3310
  process.env.GH_MANAGER_DEBUG === "1" && /* @__PURE__ */ jsxs16(Box16, { marginTop: 1, borderStyle: "single", borderColor: "yellow", paddingX: 1, flexDirection: "column", children: [
3293
3311
  /* @__PURE__ */ jsx17(Text17, { bold: true, color: "yellow", children: "Debug Messages:" }),
@@ -3905,9 +3923,25 @@ var handleShutdown = (signal) => {
3905
3923
  });
3906
3924
  process.exit(0);
3907
3925
  };
3926
+ var showSponsorshipMessage = () => {
3927
+ console.log("\n" + "\u2500".repeat(60));
3928
+ console.log("\n\u{1F49A} Thank you for using gh-manager-cli!\n");
3929
+ console.log("If this app saved you time, please consider supporting");
3930
+ console.log("the development of more open-source projects like this:\n");
3931
+ console.log(" \u2615 Buy Me a Coffee: https://buymeacoffee.com/wiiiimm");
3932
+ console.log(" \u{1F680} Visit my site: https://wiiiimm.codes");
3933
+ console.log(" \u{1F4AC} Leave feedback: https://github.com/wiiiimm/gh-manager-cli");
3934
+ console.log("\nYour support and contributions make a difference! \u{1F64F}\n");
3935
+ console.log("\u2500".repeat(60) + "\n");
3936
+ };
3908
3937
  process.on("SIGINT", () => handleShutdown("SIGINT"));
3909
3938
  process.on("SIGTERM", () => handleShutdown("SIGTERM"));
3910
3939
  process.on("exit", (code) => {
3940
+ const isNormalExit = code === 0;
3941
+ const isInteractiveSession = !argv.includes("--version") && !argv.includes("-v") && !argv.includes("--help") && !argv.includes("-h");
3942
+ if (isNormalExit && isInteractiveSession) {
3943
+ showSponsorshipMessage();
3944
+ }
3911
3945
  logger.info("gh-manager-cli exited", {
3912
3946
  exitCode: code,
3913
3947
  uptime: process.uptime()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gh-manager-cli",
3
- "version": "1.32.0",
3
+ "version": "1.34.0",
4
4
  "private": false,
5
5
  "description": "TUI terminal app to manage GitHub repos. Clean up your account in 5 minutes. Archive, delete, rename repos with keyboard shortcuts. Alternative to clicking through github.com",
6
6
  "license": "MIT",