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 +26 -0
- package/README.md +11 -5
- package/dist/{chunk-4A3TGHG7.js → chunk-EZP4YBHA.js} +153 -0
- package/dist/{github-64JCWV7P.js → github-HIF7MTPO.js} +7 -1
- package/dist/index.js +851 -431
- package/package.json +1 -23
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)
|
|
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**:
|
|
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
|
-
-
|
|
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**:
|
|
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
|
-
- **
|
|
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-
|
|
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,
|