gh-manager-cli 1.34.0 → 1.35.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,29 @@
1
+ ## [1.35.1](https://github.com/wiiiimm/gh-manager-cli/compare/v1.35.0...v1.35.1) (2025-09-09)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * restructure workflow to build after version commit ([0fcba46](https://github.com/wiiiimm/gh-manager-cli/commit/0fcba46039982209e78bab285e205adc96e27c9e))
7
+
8
+ # [1.35.0](https://github.com/wiiiimm/gh-manager-cli/compare/v1.34.0...v1.35.0) (2025-09-09)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * add npm authentication configuration for semantic-release ([d2d5ad0](https://github.com/wiiiimm/gh-manager-cli/commit/d2d5ad0555063d7e949450ff4a923c78d8a305f5))
14
+ * ensure build job fetches updated version from semantic-release ([e8df4ec](https://github.com/wiiiimm/gh-manager-cli/commit/e8df4ec6a3e76c32168803f40a404567a979b530))
15
+ * optimize release workflow to check before building ([5027d45](https://github.com/wiiiimm/gh-manager-cli/commit/5027d45ac564752a7557ee01e9529f9559d09a44))
16
+ * resolve PR Title Manager workflow script loading issue ([5764938](https://github.com/wiiiimm/gh-manager-cli/commit/5764938c00ccaa524ebfac5e6e94ae64254195ab))
17
+ * resolve Windows build failure in release pipeline ([708c0d3](https://github.com/wiiiimm/gh-manager-cli/commit/708c0d321b628ab95ca7b03ca07371059a7a19f1))
18
+ * restore original workflow behavior for release pipeline ([2781719](https://github.com/wiiiimm/gh-manager-cli/commit/278171954e05048374cb756e6a242385c062c863))
19
+ * use --config flag to fully override semantic-release config ([b233b58](https://github.com/wiiiimm/gh-manager-cli/commit/b233b583035e4e078f027147ca1dfb70c472be1f))
20
+ * use minimal config for semantic-release dry-run check ([830d058](https://github.com/wiiiimm/gh-manager-cli/commit/830d0585a24942d1bee66aab55daa9770a0af0bb))
21
+
22
+
23
+ ### Features
24
+
25
+ * add stars mode and star/unstar functionality ([#29](https://github.com/wiiiimm/gh-manager-cli/issues/29)) ([9295dcb](https://github.com/wiiiimm/gh-manager-cli/commit/9295dcb4508bf46d9dff0ffdfbcac35c40d8f994))
26
+
1
27
  # [1.34.0](https://github.com/wiiiimm/gh-manager-cli/compare/v1.33.0...v1.34.0) (2025-09-06)
2
28
 
3
29
 
package/README.md CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  Interactive terminal app to browse and manage your personal GitHub repositories. Built with Ink (React for CLIs) and the GitHub GraphQL API.
14
14
 
15
- 🌐 **Visit our website:** [gh-manager-cli.dev](https://gh-manager-cli.dev) | [Source](https://github.com/wiiiimm/gh-manager-cli-site) | Hosted on [Vercel](https://vercel.com)
15
+ 🌐 **Visit our website:** [gh-manager-cli.dev](https://gh-manager-cli.dev) | [Source](https://github.com/wiiiimm/gh-manager-cli-site)
16
16
 
17
17
  ## 🧹 Clean Up Your GitHub Account in Minutes
18
18
 
@@ -76,7 +76,8 @@ On first run, you'll be prompted to authenticate with GitHub (OAuth recommended)
76
76
  - **Interactive Sorting**: Modal-based sort selection (updated, pushed, name, stars) with modal-based direction selection
77
77
  - **Smart Search**: Server-side search through repository names and descriptions (3+ characters)
78
78
  - **Visibility Filtering**: Modal-based visibility filter (All, Public, Private/Internal for enterprise) with smart filtering
79
- - **Fork Status Tracking**: Toggle display of commits behind upstream for forked repositories
79
+ - **Fork Status Tracking**: Always shows commits behind upstream for forked repositories
80
+ - **Stars Mode**: View and manage starred repositories (personal account only)
80
81
  - **Repository Actions**:
81
82
  - View detailed info (`I`) - Shows repository metadata, language, size, and timestamps
82
83
  - Open in browser (Enter/`O`)
@@ -85,7 +86,8 @@ On first run, you'll be prompted to authenticate with GitHub (OAuth recommended)
85
86
  - Delete repository (`Del` or `Backspace`) with secure two-step confirmation
86
87
  - Archive/unarchive repositories (`Ctrl+A`) with confirmation prompts
87
88
  - Change repository visibility (`Ctrl+V`) - Switch between Public, Private, and Internal (enterprise only)
88
- - Sync forks with upstream (`Ctrl+S`) with automatic conflict detection
89
+ - Star/unstar repositories (`Ctrl+S`) - Toggle star status for any repository
90
+ - Sync forks with upstream (`Ctrl+F`) with automatic conflict detection
89
91
 
90
92
  ### User Interface & Experience
91
93
  - **Keyboard Navigation**: Full keyboard control (arrow keys, PageUp/Down, `Ctrl+G`/`G`)
@@ -266,8 +268,9 @@ Launch the app, then use the keys below:
266
268
  - Stars: Number of stars
267
269
  - **Sort Direction**: `D` to open sort direction modal (ascending/descending)
268
270
  - **Display Density**: `T` to toggle compact/cozy/comfy
269
- - **Fork Status**: `F` to toggle showing commits behind upstream
271
+ - **Fork Status**: Always enabled - shows commits behind upstream for all forks
270
272
  - **Visibility Filter**: `V` opens modal (All, Public, Private/Internal for enterprise)
273
+ - **Stars Mode**: `Shift+S` (personal account only) to view starred repositories
271
274
 
272
275
  ### Navigation & Account
273
276
  - **Open in browser**: Enter or `O`
@@ -284,7 +287,10 @@ Launch the app, then use the keys below:
284
287
  - **Delete repository**: `Del` or `Backspace` (with two-step confirmation modal)
285
288
  - Type confirmation code → confirm (Y/Enter)
286
289
  - Cancel: press `C` or Esc
287
- - **Sync fork**: `Ctrl+S` (for forks only, shows commit status and handles conflicts)
290
+ - **Star/Unstar**: `Ctrl+S` to toggle star status for any repository
291
+ - **Sync fork**: `Ctrl+F` (for forks only, shows commit status and handles conflicts)
292
+ - **Rename repository**: `Ctrl+R` with inline validation
293
+ - **Copy URL**: `C` to copy repository URL to clipboard (SSH/HTTPS options)
288
294
 
289
295
  ### General
290
296
  - **Esc**: Cancels modals, clears search, or returns to normal listing (does not quit)
@@ -396,6 +396,7 @@ async function fetchViewerReposPage(client, first, after, orderBy, includeForkTr
396
396
  isArchived
397
397
  stargazerCount
398
398
  forkCount
399
+ viewerHasStarred
399
400
  primaryLanguage {
400
401
  name
401
402
  color
@@ -403,6 +404,10 @@ async function fetchViewerReposPage(client, first, after, orderBy, includeForkTr
403
404
  updatedAt
404
405
  pushedAt
405
406
  diskUsage
407
+ owner {
408
+ __typename
409
+ login
410
+ }
406
411
  ${includeForkTracking ? `
407
412
  parent {
408
413
  nameWithOwner
@@ -610,6 +615,8 @@ async function fetchViewerReposPageUnified(token, first, after, orderBy, include
610
615
  isArchived
611
616
  stargazerCount
612
617
  forkCount
618
+ viewerHasStarred
619
+ owner { __typename login }
613
620
  primaryLanguage { name color }
614
621
  updatedAt
615
622
  pushedAt
@@ -644,6 +651,8 @@ async function fetchViewerReposPageUnified(token, first, after, orderBy, include
644
651
  isArchived
645
652
  stargazerCount
646
653
  forkCount
654
+ viewerHasStarred
655
+ owner { __typename login }
647
656
  primaryLanguage { name color }
648
657
  updatedAt
649
658
  pushedAt
@@ -727,6 +736,8 @@ async function searchRepositoriesUnified(token, viewer, text, first, after, sort
727
736
  isArchived
728
737
  stargazerCount
729
738
  forkCount
739
+ viewerHasStarred
740
+ owner { __typename login }
730
741
  primaryLanguage { name color }
731
742
  updatedAt
732
743
  pushedAt
@@ -809,6 +820,145 @@ async function deleteRepositoryRest(token, owner, repo) {
809
820
  });
810
821
  throw new Error(msg);
811
822
  }
823
+ async function getStarredRepositories(client, first, after) {
824
+ logger.info("Fetching starred repositories", {
825
+ first,
826
+ after
827
+ });
828
+ const query = (
829
+ /* GraphQL */
830
+ `
831
+ query StarredRepos($first: Int!, $after: String) {
832
+ rateLimit {
833
+ limit
834
+ remaining
835
+ resetAt
836
+ }
837
+ viewer {
838
+ starredRepositories(
839
+ first: $first
840
+ after: $after
841
+ orderBy: { field: STARRED_AT, direction: DESC }
842
+ ) {
843
+ totalCount
844
+ pageInfo {
845
+ endCursor
846
+ hasNextPage
847
+ }
848
+ nodes {
849
+ id
850
+ name
851
+ nameWithOwner
852
+ description
853
+ visibility
854
+ isPrivate
855
+ isFork
856
+ isArchived
857
+ stargazerCount
858
+ forkCount
859
+ viewerHasStarred
860
+ owner {
861
+ __typename
862
+ login
863
+ }
864
+ primaryLanguage {
865
+ name
866
+ color
867
+ }
868
+ updatedAt
869
+ pushedAt
870
+ diskUsage
871
+ parent {
872
+ nameWithOwner
873
+ }
874
+ defaultBranchRef { name }
875
+ }
876
+ }
877
+ }
878
+ }
879
+ `
880
+ );
881
+ try {
882
+ const res = await client(query, {
883
+ first,
884
+ after: after ?? null
885
+ });
886
+ const data = res.viewer.starredRepositories;
887
+ logger.info("Successfully fetched starred repositories", {
888
+ count: data.nodes?.length || 0,
889
+ totalCount: data.totalCount
890
+ });
891
+ return {
892
+ nodes: data.nodes,
893
+ endCursor: data.pageInfo.endCursor,
894
+ hasNextPage: data.pageInfo.hasNextPage,
895
+ totalCount: data.totalCount,
896
+ rateLimit: res.rateLimit
897
+ };
898
+ } catch (error) {
899
+ logger.error("Failed to fetch starred repositories", {
900
+ error: error.message,
901
+ stack: error.stack
902
+ });
903
+ throw error;
904
+ }
905
+ }
906
+ async function starRepository(client, starrableId) {
907
+ logger.info("Starring repository", {
908
+ starrableId
909
+ });
910
+ const mutation = (
911
+ /* GraphQL */
912
+ `
913
+ mutation StarRepo($starrableId: ID!) {
914
+ addStar(input: { starrableId: $starrableId }) {
915
+ clientMutationId
916
+ }
917
+ }
918
+ `
919
+ );
920
+ try {
921
+ await client(mutation, { starrableId });
922
+ logger.info("Successfully starred repository", {
923
+ starrableId
924
+ });
925
+ } catch (error) {
926
+ logger.error("Failed to star repository", {
927
+ starrableId,
928
+ error: error.message,
929
+ stack: error.stack
930
+ });
931
+ throw error;
932
+ }
933
+ }
934
+ async function unstarRepository(client, starrableId) {
935
+ logger.info("Unstarring repository", {
936
+ starrableId
937
+ });
938
+ const mutation = (
939
+ /* GraphQL */
940
+ `
941
+ mutation UnstarRepo($starrableId: ID!) {
942
+ removeStar(input: { starrableId: $starrableId }) {
943
+ clientMutationId
944
+ }
945
+ }
946
+ `
947
+ );
948
+ try {
949
+ await client(mutation, { starrableId });
950
+ logger.info("Successfully unstarred repository", {
951
+ starrableId
952
+ });
953
+ } catch (error) {
954
+ logger.error("Failed to unstar repository", {
955
+ starrableId,
956
+ error: error.message,
957
+ stack: error.stack
958
+ });
959
+ throw error;
960
+ }
961
+ }
812
962
  async function archiveRepositoryById(client, repositoryId) {
813
963
  logger.info("Archiving repository", {
814
964
  repositoryId
@@ -1350,6 +1500,9 @@ export {
1350
1500
  fetchViewerReposPageUnified,
1351
1501
  searchRepositoriesUnified,
1352
1502
  deleteRepositoryRest,
1503
+ getStarredRepositories,
1504
+ starRepository,
1505
+ unstarRepository,
1353
1506
  archiveRepositoryById,
1354
1507
  unarchiveRepositoryById,
1355
1508
  changeRepositoryVisibility,
@@ -10,20 +10,23 @@ import {
10
10
  fetchViewerReposPage,
11
11
  fetchViewerReposPageUnified,
12
12
  getRepositoryFromCache,
13
+ getStarredRepositories,
13
14
  getViewerLogin,
14
15
  inspectCacheStatus,
15
16
  makeClient,
16
17
  purgeApolloCacheFiles,
17
18
  renameRepositoryById,
18
19
  searchRepositoriesUnified,
20
+ starRepository,
19
21
  syncForkWithUpstream,
20
22
  unarchiveRepositoryById,
23
+ unstarRepository,
21
24
  updateCacheAfterArchive,
22
25
  updateCacheAfterDelete,
23
26
  updateCacheAfterRename,
24
27
  updateCacheAfterVisibilityChange,
25
28
  updateCacheWithRepository
26
- } from "./chunk-4A3TGHG7.js";
29
+ } from "./chunk-EZP4YBHA.js";
27
30
  export {
28
31
  archiveRepositoryById,
29
32
  changeRepositoryVisibility,
@@ -35,14 +38,17 @@ export {
35
38
  fetchViewerReposPage,
36
39
  fetchViewerReposPageUnified,
37
40
  getRepositoryFromCache,
41
+ getStarredRepositories,
38
42
  getViewerLogin,
39
43
  inspectCacheStatus,
40
44
  makeClient,
41
45
  purgeApolloCacheFiles,
42
46
  renameRepositoryById,
43
47
  searchRepositoriesUnified,
48
+ starRepository,
44
49
  syncForkWithUpstream,
45
50
  unarchiveRepositoryById,
51
+ unstarRepository,
46
52
  updateCacheAfterArchive,
47
53
  updateCacheAfterDelete,
48
54
  updateCacheAfterRename,