@bretwardjames/ghp-cli 0.1.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 (94) hide show
  1. package/README.md +176 -0
  2. package/dist/branch-linker.d.ts +15 -0
  3. package/dist/branch-linker.d.ts.map +1 -0
  4. package/dist/branch-linker.js +60 -0
  5. package/dist/branch-linker.js.map +1 -0
  6. package/dist/commands/add-issue.d.ts +11 -0
  7. package/dist/commands/add-issue.d.ts.map +1 -0
  8. package/dist/commands/add-issue.js +228 -0
  9. package/dist/commands/add-issue.js.map +1 -0
  10. package/dist/commands/assign.d.ts +6 -0
  11. package/dist/commands/assign.d.ts.map +1 -0
  12. package/dist/commands/assign.js +44 -0
  13. package/dist/commands/assign.js.map +1 -0
  14. package/dist/commands/auth.d.ts +6 -0
  15. package/dist/commands/auth.d.ts.map +1 -0
  16. package/dist/commands/auth.js +31 -0
  17. package/dist/commands/auth.js.map +1 -0
  18. package/dist/commands/comment.d.ts +6 -0
  19. package/dist/commands/comment.d.ts.map +1 -0
  20. package/dist/commands/comment.js +83 -0
  21. package/dist/commands/comment.js.map +1 -0
  22. package/dist/commands/config.d.ts +5 -0
  23. package/dist/commands/config.d.ts.map +1 -0
  24. package/dist/commands/config.js +94 -0
  25. package/dist/commands/config.js.map +1 -0
  26. package/dist/commands/done.d.ts +2 -0
  27. package/dist/commands/done.d.ts.map +1 -0
  28. package/dist/commands/done.js +54 -0
  29. package/dist/commands/done.js.map +1 -0
  30. package/dist/commands/link-branch.d.ts +2 -0
  31. package/dist/commands/link-branch.d.ts.map +1 -0
  32. package/dist/commands/link-branch.js +44 -0
  33. package/dist/commands/link-branch.js.map +1 -0
  34. package/dist/commands/move.d.ts +2 -0
  35. package/dist/commands/move.d.ts.map +1 -0
  36. package/dist/commands/move.js +53 -0
  37. package/dist/commands/move.js.map +1 -0
  38. package/dist/commands/open.d.ts +6 -0
  39. package/dist/commands/open.d.ts.map +1 -0
  40. package/dist/commands/open.js +189 -0
  41. package/dist/commands/open.js.map +1 -0
  42. package/dist/commands/plan.d.ts +2 -0
  43. package/dist/commands/plan.d.ts.map +1 -0
  44. package/dist/commands/plan.js +403 -0
  45. package/dist/commands/plan.js.map +1 -0
  46. package/dist/commands/pr.d.ts +7 -0
  47. package/dist/commands/pr.d.ts.map +1 -0
  48. package/dist/commands/pr.js +102 -0
  49. package/dist/commands/pr.js.map +1 -0
  50. package/dist/commands/set-field.d.ts +2 -0
  51. package/dist/commands/set-field.d.ts.map +1 -0
  52. package/dist/commands/set-field.js +69 -0
  53. package/dist/commands/set-field.js.map +1 -0
  54. package/dist/commands/slice.d.ts +8 -0
  55. package/dist/commands/slice.d.ts.map +1 -0
  56. package/dist/commands/slice.js +85 -0
  57. package/dist/commands/slice.js.map +1 -0
  58. package/dist/commands/start.d.ts +7 -0
  59. package/dist/commands/start.d.ts.map +1 -0
  60. package/dist/commands/start.js +153 -0
  61. package/dist/commands/start.js.map +1 -0
  62. package/dist/commands/switch.d.ts +2 -0
  63. package/dist/commands/switch.d.ts.map +1 -0
  64. package/dist/commands/switch.js +44 -0
  65. package/dist/commands/switch.js.map +1 -0
  66. package/dist/commands/unlink-branch.d.ts +2 -0
  67. package/dist/commands/unlink-branch.d.ts.map +1 -0
  68. package/dist/commands/unlink-branch.js +28 -0
  69. package/dist/commands/unlink-branch.js.map +1 -0
  70. package/dist/commands/work.d.ts +9 -0
  71. package/dist/commands/work.d.ts.map +1 -0
  72. package/dist/commands/work.js +118 -0
  73. package/dist/commands/work.js.map +1 -0
  74. package/dist/config.d.ts +44 -0
  75. package/dist/config.d.ts.map +1 -0
  76. package/dist/config.js +88 -0
  77. package/dist/config.js.map +1 -0
  78. package/dist/git-utils.d.ts +55 -0
  79. package/dist/git-utils.d.ts.map +1 -0
  80. package/dist/git-utils.js +140 -0
  81. package/dist/git-utils.js.map +1 -0
  82. package/dist/github-api.d.ts +110 -0
  83. package/dist/github-api.d.ts.map +1 -0
  84. package/dist/github-api.js +579 -0
  85. package/dist/github-api.js.map +1 -0
  86. package/dist/index.d.ts +3 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +149 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/types.d.ts +37 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +2 -0
  93. package/dist/types.js.map +1 -0
  94. package/package.json +48 -0
@@ -0,0 +1,579 @@
1
+ import { graphql } from '@octokit/graphql';
2
+ import { exec } from 'child_process';
3
+ import { promisify } from 'util';
4
+ const execAsync = promisify(exec);
5
+ export class GitHubAPI {
6
+ graphqlWithAuth = null;
7
+ username = null;
8
+ /**
9
+ * Get token from gh CLI or environment variable
10
+ */
11
+ async getToken() {
12
+ // First try environment variable
13
+ if (process.env.GITHUB_TOKEN) {
14
+ return process.env.GITHUB_TOKEN;
15
+ }
16
+ if (process.env.GH_TOKEN) {
17
+ return process.env.GH_TOKEN;
18
+ }
19
+ // Try gh CLI
20
+ try {
21
+ const { stdout } = await execAsync('gh auth token');
22
+ return stdout.trim();
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ /**
29
+ * Authenticate with GitHub
30
+ */
31
+ async authenticate() {
32
+ const token = await this.getToken();
33
+ if (!token) {
34
+ return false;
35
+ }
36
+ this.graphqlWithAuth = graphql.defaults({
37
+ headers: {
38
+ authorization: `token ${token}`,
39
+ },
40
+ });
41
+ // Get current user
42
+ try {
43
+ const response = await this.graphqlWithAuth(`
44
+ query {
45
+ viewer {
46
+ login
47
+ }
48
+ }
49
+ `);
50
+ this.username = response.viewer.login;
51
+ return true;
52
+ }
53
+ catch {
54
+ this.graphqlWithAuth = null;
55
+ return false;
56
+ }
57
+ }
58
+ get isAuthenticated() {
59
+ return this.graphqlWithAuth !== null;
60
+ }
61
+ /**
62
+ * Get projects linked to a repository
63
+ */
64
+ async getProjects(repo) {
65
+ if (!this.graphqlWithAuth)
66
+ throw new Error('Not authenticated');
67
+ const response = await this.graphqlWithAuth(`
68
+ query($owner: String!, $name: String!) {
69
+ repository(owner: $owner, name: $name) {
70
+ projectsV2(first: 20) {
71
+ nodes {
72
+ id
73
+ title
74
+ number
75
+ url
76
+ }
77
+ }
78
+ }
79
+ }
80
+ `, {
81
+ owner: repo.owner,
82
+ name: repo.name,
83
+ });
84
+ return response.repository.projectsV2.nodes;
85
+ }
86
+ /**
87
+ * Get items from a project
88
+ */
89
+ async getProjectItems(projectId, projectTitle) {
90
+ if (!this.graphqlWithAuth)
91
+ throw new Error('Not authenticated');
92
+ const response = await this.graphqlWithAuth(`
93
+ query($projectId: ID!) {
94
+ node(id: $projectId) {
95
+ ... on ProjectV2 {
96
+ items(first: 100) {
97
+ nodes {
98
+ id
99
+ fieldValues(first: 20) {
100
+ nodes {
101
+ __typename
102
+ ... on ProjectV2ItemFieldSingleSelectValue {
103
+ name
104
+ field { ... on ProjectV2SingleSelectField { name } }
105
+ }
106
+ ... on ProjectV2ItemFieldTextValue {
107
+ text
108
+ field { ... on ProjectV2Field { name } }
109
+ }
110
+ ... on ProjectV2ItemFieldNumberValue {
111
+ number
112
+ field { ... on ProjectV2Field { name } }
113
+ }
114
+ ... on ProjectV2ItemFieldDateValue {
115
+ date
116
+ field { ... on ProjectV2Field { name } }
117
+ }
118
+ ... on ProjectV2ItemFieldIterationValue {
119
+ title
120
+ field { ... on ProjectV2IterationField { name } }
121
+ }
122
+ }
123
+ }
124
+ content {
125
+ __typename
126
+ ... on Issue {
127
+ title
128
+ number
129
+ url
130
+ issueType { name }
131
+ assignees(first: 5) { nodes { login } }
132
+ labels(first: 10) { nodes { name color } }
133
+ repository { name }
134
+ }
135
+ ... on PullRequest {
136
+ title
137
+ number
138
+ url
139
+ assignees(first: 5) { nodes { login } }
140
+ labels(first: 10) { nodes { name color } }
141
+ repository { name }
142
+ }
143
+ ... on DraftIssue {
144
+ title
145
+ }
146
+ }
147
+ }
148
+ }
149
+ }
150
+ }
151
+ }
152
+ `, { projectId });
153
+ return response.node.items.nodes
154
+ .filter(item => item.content)
155
+ .map(item => {
156
+ const content = item.content;
157
+ // Extract all field values into a map
158
+ const fields = {};
159
+ for (const fv of item.fieldValues.nodes) {
160
+ const fieldName = fv.field?.name;
161
+ if (!fieldName)
162
+ continue;
163
+ if (fv.__typename === 'ProjectV2ItemFieldSingleSelectValue' && fv.name) {
164
+ fields[fieldName] = fv.name;
165
+ }
166
+ else if (fv.__typename === 'ProjectV2ItemFieldTextValue' && fv.text) {
167
+ fields[fieldName] = fv.text;
168
+ }
169
+ else if (fv.__typename === 'ProjectV2ItemFieldNumberValue' && fv.number !== undefined) {
170
+ fields[fieldName] = fv.number.toString();
171
+ }
172
+ else if (fv.__typename === 'ProjectV2ItemFieldDateValue' && fv.date) {
173
+ fields[fieldName] = fv.date;
174
+ }
175
+ else if (fv.__typename === 'ProjectV2ItemFieldIterationValue' && fv.title) {
176
+ fields[fieldName] = fv.title;
177
+ }
178
+ }
179
+ let type = 'draft';
180
+ if (content.__typename === 'Issue')
181
+ type = 'issue';
182
+ else if (content.__typename === 'PullRequest')
183
+ type = 'pull_request';
184
+ return {
185
+ id: item.id,
186
+ title: content.title || 'Untitled',
187
+ number: content.number || null,
188
+ type,
189
+ issueType: content.issueType?.name || null,
190
+ status: fields['Status'] || null,
191
+ assignees: content.assignees?.nodes.map(a => a.login) || [],
192
+ labels: content.labels?.nodes || [],
193
+ repository: content.repository?.name || null,
194
+ url: content.url || null,
195
+ projectId,
196
+ projectTitle,
197
+ fields,
198
+ };
199
+ });
200
+ }
201
+ /**
202
+ * Get the Status field info for a project
203
+ */
204
+ async getStatusField(projectId) {
205
+ if (!this.graphqlWithAuth)
206
+ throw new Error('Not authenticated');
207
+ const response = await this.graphqlWithAuth(`
208
+ query($projectId: ID!) {
209
+ node(id: $projectId) {
210
+ ... on ProjectV2 {
211
+ fields(first: 20) {
212
+ nodes {
213
+ __typename
214
+ ... on ProjectV2SingleSelectField {
215
+ id
216
+ name
217
+ options { id name }
218
+ }
219
+ }
220
+ }
221
+ }
222
+ }
223
+ }
224
+ `, { projectId });
225
+ const statusField = response.node.fields.nodes.find(f => f.__typename === 'ProjectV2SingleSelectField' && f.name === 'Status');
226
+ if (!statusField || !statusField.options)
227
+ return null;
228
+ return {
229
+ fieldId: statusField.id,
230
+ options: statusField.options,
231
+ };
232
+ }
233
+ /**
234
+ * Update an item's status
235
+ */
236
+ async updateItemStatus(projectId, itemId, fieldId, optionId) {
237
+ if (!this.graphqlWithAuth)
238
+ throw new Error('Not authenticated');
239
+ try {
240
+ await this.graphqlWithAuth(`
241
+ mutation($projectId: ID!, $itemId: ID!, $fieldId: ID!, $optionId: String!) {
242
+ updateProjectV2ItemFieldValue(input: {
243
+ projectId: $projectId
244
+ itemId: $itemId
245
+ fieldId: $fieldId
246
+ value: { singleSelectOptionId: $optionId }
247
+ }) {
248
+ projectV2Item { id }
249
+ }
250
+ }
251
+ `, { projectId, itemId, fieldId, optionId });
252
+ return true;
253
+ }
254
+ catch (error) {
255
+ console.error('Failed to update status:', error);
256
+ return false;
257
+ }
258
+ }
259
+ /**
260
+ * Find an item by issue number across all projects for this repo
261
+ */
262
+ async findItemByNumber(repo, issueNumber) {
263
+ const projects = await this.getProjects(repo);
264
+ for (const project of projects) {
265
+ const items = await this.getProjectItems(project.id, project.title);
266
+ const item = items.find(i => i.number === issueNumber);
267
+ if (item)
268
+ return item;
269
+ }
270
+ return null;
271
+ }
272
+ /**
273
+ * Get all fields for a project
274
+ */
275
+ async getProjectFields(projectId) {
276
+ if (!this.graphqlWithAuth)
277
+ throw new Error('Not authenticated');
278
+ const response = await this.graphqlWithAuth(`
279
+ query($projectId: ID!) {
280
+ node(id: $projectId) {
281
+ ... on ProjectV2 {
282
+ fields(first: 30) {
283
+ nodes {
284
+ __typename
285
+ ... on ProjectV2Field {
286
+ id
287
+ name
288
+ }
289
+ ... on ProjectV2SingleSelectField {
290
+ id
291
+ name
292
+ options { id name }
293
+ }
294
+ ... on ProjectV2IterationField {
295
+ id
296
+ name
297
+ }
298
+ }
299
+ }
300
+ }
301
+ }
302
+ }
303
+ `, { projectId });
304
+ return response.node.fields.nodes.map(f => ({
305
+ id: f.id,
306
+ name: f.name,
307
+ type: f.__typename.replace('ProjectV2', '').replace('Field', ''),
308
+ options: f.options,
309
+ }));
310
+ }
311
+ /**
312
+ * Set a field value on a project item
313
+ */
314
+ async setFieldValue(projectId, itemId, fieldId, value) {
315
+ if (!this.graphqlWithAuth)
316
+ throw new Error('Not authenticated');
317
+ try {
318
+ await this.graphqlWithAuth(`
319
+ mutation($projectId: ID!, $itemId: ID!, $fieldId: ID!, $value: ProjectV2FieldValue!) {
320
+ updateProjectV2ItemFieldValue(input: {
321
+ projectId: $projectId
322
+ itemId: $itemId
323
+ fieldId: $fieldId
324
+ value: $value
325
+ }) {
326
+ projectV2Item { id }
327
+ }
328
+ }
329
+ `, { projectId, itemId, fieldId, value });
330
+ return true;
331
+ }
332
+ catch (error) {
333
+ console.error('Failed to set field value:', error);
334
+ return false;
335
+ }
336
+ }
337
+ /**
338
+ * Create a new issue
339
+ */
340
+ async createIssue(repo, title, body) {
341
+ if (!this.graphqlWithAuth)
342
+ throw new Error('Not authenticated');
343
+ try {
344
+ // First get the repository ID
345
+ const repoResponse = await this.graphqlWithAuth(`
346
+ query($owner: String!, $name: String!) {
347
+ repository(owner: $owner, name: $name) {
348
+ id
349
+ }
350
+ }
351
+ `, { owner: repo.owner, name: repo.name });
352
+ const response = await this.graphqlWithAuth(`
353
+ mutation($repositoryId: ID!, $title: String!, $body: String) {
354
+ createIssue(input: {
355
+ repositoryId: $repositoryId
356
+ title: $title
357
+ body: $body
358
+ }) {
359
+ issue {
360
+ id
361
+ number
362
+ }
363
+ }
364
+ }
365
+ `, {
366
+ repositoryId: repoResponse.repository.id,
367
+ title,
368
+ body: body || '',
369
+ });
370
+ return response.createIssue.issue;
371
+ }
372
+ catch (error) {
373
+ console.error('Failed to create issue:', error);
374
+ return null;
375
+ }
376
+ }
377
+ /**
378
+ * Add an issue to a project
379
+ */
380
+ async addToProject(projectId, contentId) {
381
+ if (!this.graphqlWithAuth)
382
+ throw new Error('Not authenticated');
383
+ try {
384
+ const response = await this.graphqlWithAuth(`
385
+ mutation($projectId: ID!, $contentId: ID!) {
386
+ addProjectV2ItemById(input: {
387
+ projectId: $projectId
388
+ contentId: $contentId
389
+ }) {
390
+ item { id }
391
+ }
392
+ }
393
+ `, { projectId, contentId });
394
+ return response.addProjectV2ItemById.item.id;
395
+ }
396
+ catch (error) {
397
+ console.error('Failed to add to project:', error);
398
+ return null;
399
+ }
400
+ }
401
+ /**
402
+ * Get full issue details including body and comments
403
+ */
404
+ async getIssueDetails(repo, issueNumber) {
405
+ if (!this.graphqlWithAuth)
406
+ throw new Error('Not authenticated');
407
+ try {
408
+ const response = await this.graphqlWithAuth(`
409
+ query($owner: String!, $name: String!, $number: Int!) {
410
+ repository(owner: $owner, name: $name) {
411
+ issueOrPullRequest(number: $number) {
412
+ __typename
413
+ ... on Issue {
414
+ title
415
+ body
416
+ state
417
+ createdAt
418
+ author { login }
419
+ labels(first: 10) { nodes { name color } }
420
+ comments(first: 50) {
421
+ totalCount
422
+ nodes {
423
+ author { login }
424
+ body
425
+ createdAt
426
+ }
427
+ }
428
+ }
429
+ ... on PullRequest {
430
+ title
431
+ body
432
+ state
433
+ createdAt
434
+ author { login }
435
+ labels(first: 10) { nodes { name color } }
436
+ comments(first: 50) {
437
+ totalCount
438
+ nodes {
439
+ author { login }
440
+ body
441
+ createdAt
442
+ }
443
+ }
444
+ }
445
+ }
446
+ }
447
+ }
448
+ `, {
449
+ owner: repo.owner,
450
+ name: repo.name,
451
+ number: issueNumber,
452
+ });
453
+ const issue = response.repository.issueOrPullRequest;
454
+ if (!issue)
455
+ return null;
456
+ return {
457
+ title: issue.title,
458
+ body: issue.body,
459
+ state: issue.state,
460
+ type: issue.__typename === 'PullRequest' ? 'pull_request' : 'issue',
461
+ createdAt: issue.createdAt,
462
+ author: issue.author?.login || 'unknown',
463
+ labels: issue.labels.nodes,
464
+ comments: issue.comments.nodes.map(c => ({
465
+ author: c.author?.login || 'unknown',
466
+ body: c.body,
467
+ createdAt: c.createdAt,
468
+ })),
469
+ totalComments: issue.comments.totalCount,
470
+ };
471
+ }
472
+ catch (error) {
473
+ console.error('Failed to get issue details:', error);
474
+ return null;
475
+ }
476
+ }
477
+ /**
478
+ * Add a comment to an issue or PR
479
+ */
480
+ async addComment(repo, issueNumber, body) {
481
+ if (!this.graphqlWithAuth)
482
+ throw new Error('Not authenticated');
483
+ try {
484
+ // First get the issue/PR node ID
485
+ const issueResponse = await this.graphqlWithAuth(`
486
+ query($owner: String!, $name: String!, $number: Int!) {
487
+ repository(owner: $owner, name: $name) {
488
+ issueOrPullRequest(number: $number) {
489
+ ... on Issue { id }
490
+ ... on PullRequest { id }
491
+ }
492
+ }
493
+ }
494
+ `, {
495
+ owner: repo.owner,
496
+ name: repo.name,
497
+ number: issueNumber,
498
+ });
499
+ const subjectId = issueResponse.repository.issueOrPullRequest?.id;
500
+ if (!subjectId) {
501
+ console.error('Issue not found');
502
+ return false;
503
+ }
504
+ await this.graphqlWithAuth(`
505
+ mutation($subjectId: ID!, $body: String!) {
506
+ addComment(input: { subjectId: $subjectId, body: $body }) {
507
+ commentEdge {
508
+ node { id }
509
+ }
510
+ }
511
+ }
512
+ `, { subjectId, body });
513
+ return true;
514
+ }
515
+ catch (error) {
516
+ console.error('Failed to add comment:', error);
517
+ return false;
518
+ }
519
+ }
520
+ /**
521
+ * Get repository collaborators (for @ mention suggestions)
522
+ */
523
+ async getCollaborators(repo) {
524
+ if (!this.graphqlWithAuth)
525
+ throw new Error('Not authenticated');
526
+ try {
527
+ const response = await this.graphqlWithAuth(`
528
+ query($owner: String!, $name: String!) {
529
+ repository(owner: $owner, name: $name) {
530
+ collaborators(first: 50) {
531
+ nodes { login name }
532
+ }
533
+ assignableUsers(first: 50) {
534
+ nodes { login name }
535
+ }
536
+ }
537
+ }
538
+ `, { owner: repo.owner, name: repo.name });
539
+ // Use collaborators if available, fall back to assignable users
540
+ const users = response.repository.collaborators?.nodes
541
+ || response.repository.assignableUsers.nodes
542
+ || [];
543
+ return users.map(u => ({ login: u.login, name: u.name }));
544
+ }
545
+ catch {
546
+ // Collaborators might not be accessible, return empty
547
+ return [];
548
+ }
549
+ }
550
+ /**
551
+ * Get recent issues (for # reference suggestions)
552
+ */
553
+ async getRecentIssues(repo, limit = 20) {
554
+ if (!this.graphqlWithAuth)
555
+ throw new Error('Not authenticated');
556
+ try {
557
+ const response = await this.graphqlWithAuth(`
558
+ query($owner: String!, $name: String!, $limit: Int!) {
559
+ repository(owner: $owner, name: $name) {
560
+ issues(first: $limit, orderBy: { field: UPDATED_AT, direction: DESC }) {
561
+ nodes {
562
+ number
563
+ title
564
+ state
565
+ }
566
+ }
567
+ }
568
+ }
569
+ `, { owner: repo.owner, name: repo.name, limit });
570
+ return response.repository.issues.nodes;
571
+ }
572
+ catch {
573
+ return [];
574
+ }
575
+ }
576
+ }
577
+ // Singleton instance
578
+ export const api = new GitHubAPI();
579
+ //# sourceMappingURL=github-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-api.js","sourceRoot":"","sources":["../src/github-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}