@rv404/mcp-launchpad 1.0.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 (139) hide show
  1. package/.env.example +29 -0
  2. package/README.md +248 -0
  3. package/dist/backends/clickup.d.ts +3 -0
  4. package/dist/backends/clickup.d.ts.map +1 -0
  5. package/dist/backends/clickup.js +1550 -0
  6. package/dist/backends/clickup.js.map +1 -0
  7. package/dist/backends/email.d.ts +9 -0
  8. package/dist/backends/email.d.ts.map +1 -0
  9. package/dist/backends/email.js +452 -0
  10. package/dist/backends/email.js.map +1 -0
  11. package/dist/backends/firecrawl.d.ts +3 -0
  12. package/dist/backends/firecrawl.d.ts.map +1 -0
  13. package/dist/backends/firecrawl.js +297 -0
  14. package/dist/backends/firecrawl.js.map +1 -0
  15. package/dist/backends/gemini.d.ts +3 -0
  16. package/dist/backends/gemini.d.ts.map +1 -0
  17. package/dist/backends/gemini.js +702 -0
  18. package/dist/backends/gemini.js.map +1 -0
  19. package/dist/backends/github.d.ts +3 -0
  20. package/dist/backends/github.d.ts.map +1 -0
  21. package/dist/backends/github.js +2129 -0
  22. package/dist/backends/github.js.map +1 -0
  23. package/dist/backends/index.d.ts +2 -0
  24. package/dist/backends/index.d.ts.map +1 -0
  25. package/dist/backends/index.js +27 -0
  26. package/dist/backends/index.js.map +1 -0
  27. package/dist/backends/kie.d.ts +3 -0
  28. package/dist/backends/kie.d.ts.map +1 -0
  29. package/dist/backends/kie.js +399 -0
  30. package/dist/backends/kie.js.map +1 -0
  31. package/dist/backends/n8n.d.ts +3 -0
  32. package/dist/backends/n8n.d.ts.map +1 -0
  33. package/dist/backends/n8n.js +414 -0
  34. package/dist/backends/n8n.js.map +1 -0
  35. package/dist/backends/notion.d.ts +3 -0
  36. package/dist/backends/notion.d.ts.map +1 -0
  37. package/dist/backends/notion.js +375 -0
  38. package/dist/backends/notion.js.map +1 -0
  39. package/dist/backends/quickbooks.d.ts +3 -0
  40. package/dist/backends/quickbooks.d.ts.map +1 -0
  41. package/dist/backends/quickbooks.js +2183 -0
  42. package/dist/backends/quickbooks.js.map +1 -0
  43. package/dist/backends/slack.d.ts +3 -0
  44. package/dist/backends/slack.d.ts.map +1 -0
  45. package/dist/backends/slack.js +1725 -0
  46. package/dist/backends/slack.js.map +1 -0
  47. package/dist/backends/youtube.d.ts +3 -0
  48. package/dist/backends/youtube.d.ts.map +1 -0
  49. package/dist/backends/youtube.js +936 -0
  50. package/dist/backends/youtube.js.map +1 -0
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +150 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/router.d.ts +36 -0
  56. package/dist/router.d.ts.map +1 -0
  57. package/dist/router.js +283 -0
  58. package/dist/router.js.map +1 -0
  59. package/dist/types.d.ts +103 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +65 -0
  62. package/dist/types.js.map +1 -0
  63. package/lib/mcp-file-output/dist/index.d.ts +99 -0
  64. package/lib/mcp-file-output/dist/index.d.ts.map +1 -0
  65. package/lib/mcp-file-output/dist/index.js +215 -0
  66. package/lib/mcp-file-output/dist/index.js.map +1 -0
  67. package/lib/mcp-file-output/node_modules/@types/node/LICENSE +21 -0
  68. package/lib/mcp-file-output/node_modules/@types/node/README.md +15 -0
  69. package/lib/mcp-file-output/node_modules/@types/node/assert/strict.d.ts +8 -0
  70. package/lib/mcp-file-output/node_modules/@types/node/assert.d.ts +1062 -0
  71. package/lib/mcp-file-output/node_modules/@types/node/async_hooks.d.ts +605 -0
  72. package/lib/mcp-file-output/node_modules/@types/node/buffer.buffer.d.ts +471 -0
  73. package/lib/mcp-file-output/node_modules/@types/node/buffer.d.ts +1936 -0
  74. package/lib/mcp-file-output/node_modules/@types/node/child_process.d.ts +1475 -0
  75. package/lib/mcp-file-output/node_modules/@types/node/cluster.d.ts +577 -0
  76. package/lib/mcp-file-output/node_modules/@types/node/compatibility/disposable.d.ts +16 -0
  77. package/lib/mcp-file-output/node_modules/@types/node/compatibility/index.d.ts +9 -0
  78. package/lib/mcp-file-output/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
  79. package/lib/mcp-file-output/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  80. package/lib/mcp-file-output/node_modules/@types/node/console.d.ts +452 -0
  81. package/lib/mcp-file-output/node_modules/@types/node/constants.d.ts +21 -0
  82. package/lib/mcp-file-output/node_modules/@types/node/crypto.d.ts +4590 -0
  83. package/lib/mcp-file-output/node_modules/@types/node/dgram.d.ts +597 -0
  84. package/lib/mcp-file-output/node_modules/@types/node/diagnostics_channel.d.ts +578 -0
  85. package/lib/mcp-file-output/node_modules/@types/node/dns/promises.d.ts +479 -0
  86. package/lib/mcp-file-output/node_modules/@types/node/dns.d.ts +871 -0
  87. package/lib/mcp-file-output/node_modules/@types/node/domain.d.ts +170 -0
  88. package/lib/mcp-file-output/node_modules/@types/node/events.d.ts +977 -0
  89. package/lib/mcp-file-output/node_modules/@types/node/fs/promises.d.ts +1270 -0
  90. package/lib/mcp-file-output/node_modules/@types/node/fs.d.ts +4375 -0
  91. package/lib/mcp-file-output/node_modules/@types/node/globals.d.ts +172 -0
  92. package/lib/mcp-file-output/node_modules/@types/node/globals.typedarray.d.ts +38 -0
  93. package/lib/mcp-file-output/node_modules/@types/node/http.d.ts +2049 -0
  94. package/lib/mcp-file-output/node_modules/@types/node/http2.d.ts +2631 -0
  95. package/lib/mcp-file-output/node_modules/@types/node/https.d.ts +578 -0
  96. package/lib/mcp-file-output/node_modules/@types/node/index.d.ts +93 -0
  97. package/lib/mcp-file-output/node_modules/@types/node/inspector.generated.d.ts +3966 -0
  98. package/lib/mcp-file-output/node_modules/@types/node/module.d.ts +539 -0
  99. package/lib/mcp-file-output/node_modules/@types/node/net.d.ts +1012 -0
  100. package/lib/mcp-file-output/node_modules/@types/node/os.d.ts +506 -0
  101. package/lib/mcp-file-output/node_modules/@types/node/package.json +140 -0
  102. package/lib/mcp-file-output/node_modules/@types/node/path.d.ts +200 -0
  103. package/lib/mcp-file-output/node_modules/@types/node/perf_hooks.d.ts +961 -0
  104. package/lib/mcp-file-output/node_modules/@types/node/process.d.ts +1957 -0
  105. package/lib/mcp-file-output/node_modules/@types/node/punycode.d.ts +117 -0
  106. package/lib/mcp-file-output/node_modules/@types/node/querystring.d.ts +152 -0
  107. package/lib/mcp-file-output/node_modules/@types/node/readline/promises.d.ts +162 -0
  108. package/lib/mcp-file-output/node_modules/@types/node/readline.d.ts +589 -0
  109. package/lib/mcp-file-output/node_modules/@types/node/repl.d.ts +430 -0
  110. package/lib/mcp-file-output/node_modules/@types/node/sea.d.ts +153 -0
  111. package/lib/mcp-file-output/node_modules/@types/node/stream/consumers.d.ts +38 -0
  112. package/lib/mcp-file-output/node_modules/@types/node/stream/promises.d.ts +90 -0
  113. package/lib/mcp-file-output/node_modules/@types/node/stream/web.d.ts +533 -0
  114. package/lib/mcp-file-output/node_modules/@types/node/stream.d.ts +1675 -0
  115. package/lib/mcp-file-output/node_modules/@types/node/string_decoder.d.ts +67 -0
  116. package/lib/mcp-file-output/node_modules/@types/node/test.d.ts +1787 -0
  117. package/lib/mcp-file-output/node_modules/@types/node/timers/promises.d.ts +108 -0
  118. package/lib/mcp-file-output/node_modules/@types/node/timers.d.ts +286 -0
  119. package/lib/mcp-file-output/node_modules/@types/node/tls.d.ts +1255 -0
  120. package/lib/mcp-file-output/node_modules/@types/node/trace_events.d.ts +197 -0
  121. package/lib/mcp-file-output/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
  122. package/lib/mcp-file-output/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
  123. package/lib/mcp-file-output/node_modules/@types/node/ts5.6/index.d.ts +93 -0
  124. package/lib/mcp-file-output/node_modules/@types/node/tty.d.ts +208 -0
  125. package/lib/mcp-file-output/node_modules/@types/node/url.d.ts +964 -0
  126. package/lib/mcp-file-output/node_modules/@types/node/util.d.ts +2331 -0
  127. package/lib/mcp-file-output/node_modules/@types/node/v8.d.ts +809 -0
  128. package/lib/mcp-file-output/node_modules/@types/node/vm.d.ts +1001 -0
  129. package/lib/mcp-file-output/node_modules/@types/node/wasi.d.ts +181 -0
  130. package/lib/mcp-file-output/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
  131. package/lib/mcp-file-output/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  132. package/lib/mcp-file-output/node_modules/@types/node/web-globals/events.d.ts +97 -0
  133. package/lib/mcp-file-output/node_modules/@types/node/web-globals/fetch.d.ts +46 -0
  134. package/lib/mcp-file-output/node_modules/@types/node/worker_threads.d.ts +715 -0
  135. package/lib/mcp-file-output/node_modules/@types/node/zlib.d.ts +540 -0
  136. package/lib/mcp-file-output/package.json +19 -0
  137. package/lib/mcp-file-output/src/index.ts +309 -0
  138. package/lib/mcp-file-output/tsconfig.json +20 -0
  139. package/package.json +64 -0
@@ -0,0 +1,2129 @@
1
+ import { Octokit } from '@octokit/rest';
2
+ const GITHUB_TOKEN = process.env.GITHUB_PERSONAL_ACCESS_TOKEN || '';
3
+ const octokit = new Octokit({ auth: GITHUB_TOKEN });
4
+ const actions = [
5
+ // Repository actions
6
+ {
7
+ name: 'search_repositories',
8
+ description: 'Search for GitHub repositories',
9
+ params: [
10
+ { name: 'query', type: 'string', required: true, description: 'Search query (GitHub search syntax)' },
11
+ { name: 'page', type: 'number', required: false, description: 'Page number (default: 1)' },
12
+ { name: 'perPage', type: 'number', required: false, description: 'Results per page (max: 100)' },
13
+ ],
14
+ },
15
+ {
16
+ name: 'create_repository',
17
+ description: 'Create a new GitHub repository',
18
+ params: [
19
+ { name: 'name', type: 'string', required: true, description: 'Repository name' },
20
+ { name: 'description', type: 'string', required: false, description: 'Repository description' },
21
+ { name: 'private', type: 'boolean', required: false, description: 'Make repository private' },
22
+ { name: 'autoInit', type: 'boolean', required: false, description: 'Initialize with README' },
23
+ ],
24
+ },
25
+ {
26
+ name: 'fork_repository',
27
+ description: 'Fork a repository',
28
+ params: [
29
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
30
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
31
+ { name: 'organization', type: 'string', required: false, description: 'Organization to fork to' },
32
+ ],
33
+ },
34
+ // File actions
35
+ {
36
+ name: 'get_file_contents',
37
+ description: 'Get contents of a file or directory',
38
+ params: [
39
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
40
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
41
+ { name: 'path', type: 'string', required: true, description: 'File path' },
42
+ { name: 'branch', type: 'string', required: false, description: 'Branch name' },
43
+ ],
44
+ },
45
+ {
46
+ name: 'create_or_update_file',
47
+ description: 'Create or update a file',
48
+ params: [
49
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
50
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
51
+ { name: 'path', type: 'string', required: true, description: 'File path' },
52
+ { name: 'content', type: 'string', required: true, description: 'File content' },
53
+ { name: 'message', type: 'string', required: true, description: 'Commit message' },
54
+ { name: 'branch', type: 'string', required: true, description: 'Branch name' },
55
+ { name: 'sha', type: 'string', required: false, description: 'SHA of file to update' },
56
+ ],
57
+ },
58
+ {
59
+ name: 'push_files',
60
+ description: 'Push multiple files in a single commit',
61
+ params: [
62
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
63
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
64
+ { name: 'branch', type: 'string', required: true, description: 'Branch name' },
65
+ { name: 'files', type: 'array', required: true, description: 'Array of {path, content} objects' },
66
+ { name: 'message', type: 'string', required: true, description: 'Commit message' },
67
+ ],
68
+ },
69
+ // Branch actions
70
+ {
71
+ name: 'create_branch',
72
+ description: 'Create a new branch',
73
+ params: [
74
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
75
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
76
+ { name: 'branch', type: 'string', required: true, description: 'New branch name' },
77
+ { name: 'from_branch', type: 'string', required: false, description: 'Source branch' },
78
+ ],
79
+ },
80
+ {
81
+ name: 'list_commits',
82
+ description: 'List commits on a branch',
83
+ params: [
84
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
85
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
86
+ { name: 'sha', type: 'string', required: false, description: 'Branch/commit SHA' },
87
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
88
+ { name: 'perPage', type: 'number', required: false, description: 'Results per page' },
89
+ ],
90
+ },
91
+ // Issue actions
92
+ {
93
+ name: 'create_issue',
94
+ description: 'Create a new issue',
95
+ params: [
96
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
97
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
98
+ { name: 'title', type: 'string', required: true, description: 'Issue title' },
99
+ { name: 'body', type: 'string', required: false, description: 'Issue body' },
100
+ { name: 'labels', type: 'array', required: false, description: 'Labels array' },
101
+ { name: 'assignees', type: 'array', required: false, description: 'Assignees array' },
102
+ ],
103
+ },
104
+ {
105
+ name: 'get_issue',
106
+ description: 'Get issue details',
107
+ params: [
108
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
109
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
110
+ { name: 'issue_number', type: 'number', required: true, description: 'Issue number' },
111
+ ],
112
+ },
113
+ {
114
+ name: 'list_issues',
115
+ description: 'List repository issues',
116
+ params: [
117
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
118
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
119
+ { name: 'state', type: 'string', required: false, description: 'State: open, closed, all' },
120
+ { name: 'labels', type: 'array', required: false, description: 'Filter by labels' },
121
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
122
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
123
+ ],
124
+ },
125
+ {
126
+ name: 'update_issue',
127
+ description: 'Update an issue',
128
+ params: [
129
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
130
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
131
+ { name: 'issue_number', type: 'number', required: true, description: 'Issue number' },
132
+ { name: 'title', type: 'string', required: false, description: 'New title' },
133
+ { name: 'body', type: 'string', required: false, description: 'New body' },
134
+ { name: 'state', type: 'string', required: false, description: 'State: open, closed' },
135
+ { name: 'labels', type: 'array', required: false, description: 'Labels' },
136
+ { name: 'assignees', type: 'array', required: false, description: 'Assignees' },
137
+ ],
138
+ },
139
+ {
140
+ name: 'add_issue_comment',
141
+ description: 'Add a comment to an issue',
142
+ params: [
143
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
144
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
145
+ { name: 'issue_number', type: 'number', required: true, description: 'Issue number' },
146
+ { name: 'body', type: 'string', required: true, description: 'Comment body' },
147
+ ],
148
+ },
149
+ {
150
+ name: 'search_issues',
151
+ description: 'Search issues and pull requests',
152
+ params: [
153
+ { name: 'q', type: 'string', required: true, description: 'Search query' },
154
+ { name: 'sort', type: 'string', required: false, description: 'Sort field' },
155
+ { name: 'order', type: 'string', required: false, description: 'Order: asc, desc' },
156
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
157
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
158
+ ],
159
+ },
160
+ // Pull request actions
161
+ {
162
+ name: 'create_pull_request',
163
+ description: 'Create a pull request',
164
+ params: [
165
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
166
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
167
+ { name: 'title', type: 'string', required: true, description: 'PR title' },
168
+ { name: 'head', type: 'string', required: true, description: 'Head branch' },
169
+ { name: 'base', type: 'string', required: true, description: 'Base branch' },
170
+ { name: 'body', type: 'string', required: false, description: 'PR body' },
171
+ { name: 'draft', type: 'boolean', required: false, description: 'Create as draft' },
172
+ ],
173
+ },
174
+ {
175
+ name: 'get_pull_request',
176
+ description: 'Get pull request details',
177
+ params: [
178
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
179
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
180
+ { name: 'pull_number', type: 'number', required: true, description: 'PR number' },
181
+ ],
182
+ },
183
+ {
184
+ name: 'list_pull_requests',
185
+ description: 'List pull requests',
186
+ params: [
187
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
188
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
189
+ { name: 'state', type: 'string', required: false, description: 'State: open, closed, all' },
190
+ { name: 'head', type: 'string', required: false, description: 'Filter by head' },
191
+ { name: 'base', type: 'string', required: false, description: 'Filter by base' },
192
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
193
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
194
+ ],
195
+ },
196
+ {
197
+ name: 'merge_pull_request',
198
+ description: 'Merge a pull request',
199
+ params: [
200
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
201
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
202
+ { name: 'pull_number', type: 'number', required: true, description: 'PR number' },
203
+ { name: 'commit_title', type: 'string', required: false, description: 'Merge commit title' },
204
+ { name: 'commit_message', type: 'string', required: false, description: 'Merge commit message' },
205
+ { name: 'merge_method', type: 'string', required: false, description: 'Method: merge, squash, rebase' },
206
+ ],
207
+ },
208
+ {
209
+ name: 'get_pull_request_files',
210
+ description: 'Get files changed in a PR',
211
+ params: [
212
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
213
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
214
+ { name: 'pull_number', type: 'number', required: true, description: 'PR number' },
215
+ ],
216
+ },
217
+ {
218
+ name: 'get_pull_request_status',
219
+ description: 'Get combined status checks for a PR',
220
+ params: [
221
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
222
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
223
+ { name: 'pull_number', type: 'number', required: true, description: 'PR number' },
224
+ ],
225
+ },
226
+ {
227
+ name: 'get_pull_request_comments',
228
+ description: 'Get review comments on a PR',
229
+ params: [
230
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
231
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
232
+ { name: 'pull_number', type: 'number', required: true, description: 'PR number' },
233
+ ],
234
+ },
235
+ {
236
+ name: 'get_pull_request_reviews',
237
+ description: 'Get reviews on a PR',
238
+ params: [
239
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
240
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
241
+ { name: 'pull_number', type: 'number', required: true, description: 'PR number' },
242
+ ],
243
+ },
244
+ {
245
+ name: 'create_pull_request_review',
246
+ description: 'Create a review on a PR',
247
+ params: [
248
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
249
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
250
+ { name: 'pull_number', type: 'number', required: true, description: 'PR number' },
251
+ { name: 'body', type: 'string', required: true, description: 'Review body' },
252
+ { name: 'event', type: 'string', required: true, description: 'Event: APPROVE, REQUEST_CHANGES, COMMENT' },
253
+ { name: 'comments', type: 'array', required: false, description: 'Review comments' },
254
+ ],
255
+ },
256
+ {
257
+ name: 'update_pull_request_branch',
258
+ description: 'Update PR branch with base branch changes',
259
+ params: [
260
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
261
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
262
+ { name: 'pull_number', type: 'number', required: true, description: 'PR number' },
263
+ ],
264
+ },
265
+ // Search actions
266
+ {
267
+ name: 'search_code',
268
+ description: 'Search code across GitHub',
269
+ params: [
270
+ { name: 'q', type: 'string', required: true, description: 'Search query' },
271
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
272
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
273
+ ],
274
+ },
275
+ {
276
+ name: 'search_users',
277
+ description: 'Search GitHub users',
278
+ params: [
279
+ { name: 'q', type: 'string', required: true, description: 'Search query' },
280
+ { name: 'sort', type: 'string', required: false, description: 'Sort: followers, repositories, joined' },
281
+ { name: 'order', type: 'string', required: false, description: 'Order: asc, desc' },
282
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
283
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
284
+ ],
285
+ },
286
+ // Collaborator actions
287
+ {
288
+ name: 'add_collaborator',
289
+ description: 'Add a collaborator to a repository',
290
+ params: [
291
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
292
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
293
+ { name: 'username', type: 'string', required: true, description: 'GitHub username to add' },
294
+ { name: 'permission', type: 'string', required: false, description: 'Permission level: pull, push, admin, maintain, triage (default: push)' },
295
+ ],
296
+ },
297
+ {
298
+ name: 'remove_collaborator',
299
+ description: 'Remove a collaborator from a repository',
300
+ params: [
301
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
302
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
303
+ { name: 'username', type: 'string', required: true, description: 'GitHub username to remove' },
304
+ ],
305
+ },
306
+ {
307
+ name: 'list_collaborators',
308
+ description: 'List collaborators on a repository',
309
+ params: [
310
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
311
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
312
+ ],
313
+ },
314
+ // Repository Management
315
+ {
316
+ name: 'get_repository',
317
+ description: 'Get repository details',
318
+ params: [
319
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
320
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
321
+ ],
322
+ },
323
+ {
324
+ name: 'update_repository',
325
+ description: 'Update repository settings',
326
+ params: [
327
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
328
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
329
+ { name: 'description', type: 'string', required: false, description: 'New description' },
330
+ { name: 'homepage', type: 'string', required: false, description: 'Homepage URL' },
331
+ { name: 'private', type: 'boolean', required: false, description: 'Make private' },
332
+ { name: 'has_issues', type: 'boolean', required: false, description: 'Enable issues' },
333
+ { name: 'has_wiki', type: 'boolean', required: false, description: 'Enable wiki' },
334
+ { name: 'has_projects', type: 'boolean', required: false, description: 'Enable projects' },
335
+ { name: 'default_branch', type: 'string', required: false, description: 'Default branch' },
336
+ { name: 'archived', type: 'boolean', required: false, description: 'Archive repository' },
337
+ ],
338
+ },
339
+ {
340
+ name: 'delete_repository',
341
+ description: 'Delete a repository (DESTRUCTIVE)',
342
+ params: [
343
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
344
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
345
+ ],
346
+ },
347
+ {
348
+ name: 'list_user_repositories',
349
+ description: 'List repositories for a user',
350
+ params: [
351
+ { name: 'username', type: 'string', required: false, description: 'Username (default: authenticated user)' },
352
+ { name: 'type', type: 'string', required: false, description: 'Type: all, owner, member' },
353
+ { name: 'sort', type: 'string', required: false, description: 'Sort: created, updated, pushed, full_name' },
354
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
355
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
356
+ ],
357
+ },
358
+ {
359
+ name: 'list_branches',
360
+ description: 'List branches in a repository',
361
+ params: [
362
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
363
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
364
+ { name: 'protected', type: 'boolean', required: false, description: 'Only protected branches' },
365
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
366
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
367
+ ],
368
+ },
369
+ {
370
+ name: 'get_branch',
371
+ description: 'Get branch details including protection status',
372
+ params: [
373
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
374
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
375
+ { name: 'branch', type: 'string', required: true, description: 'Branch name' },
376
+ ],
377
+ },
378
+ {
379
+ name: 'delete_branch',
380
+ description: 'Delete a branch',
381
+ params: [
382
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
383
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
384
+ { name: 'branch', type: 'string', required: true, description: 'Branch name' },
385
+ ],
386
+ },
387
+ {
388
+ name: 'list_tags',
389
+ description: 'List repository tags',
390
+ params: [
391
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
392
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
393
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
394
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
395
+ ],
396
+ },
397
+ {
398
+ name: 'get_readme',
399
+ description: 'Get repository README',
400
+ params: [
401
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
402
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
403
+ { name: 'ref', type: 'string', required: false, description: 'Branch/tag/commit' },
404
+ ],
405
+ },
406
+ {
407
+ name: 'list_topics',
408
+ description: 'List repository topics',
409
+ params: [
410
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
411
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
412
+ ],
413
+ },
414
+ {
415
+ name: 'update_topics',
416
+ description: 'Replace all repository topics',
417
+ params: [
418
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
419
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
420
+ { name: 'topics', type: 'array', required: true, description: 'Array of topic names' },
421
+ ],
422
+ },
423
+ {
424
+ name: 'list_languages',
425
+ description: 'List repository languages',
426
+ params: [
427
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
428
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
429
+ ],
430
+ },
431
+ {
432
+ name: 'list_contributors',
433
+ description: 'List repository contributors',
434
+ params: [
435
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
436
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
437
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
438
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
439
+ ],
440
+ },
441
+ // Releases
442
+ {
443
+ name: 'list_releases',
444
+ description: 'List repository releases',
445
+ params: [
446
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
447
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
448
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
449
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
450
+ ],
451
+ },
452
+ {
453
+ name: 'get_release',
454
+ description: 'Get a specific release',
455
+ params: [
456
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
457
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
458
+ { name: 'release_id', type: 'number', required: true, description: 'Release ID' },
459
+ ],
460
+ },
461
+ {
462
+ name: 'get_latest_release',
463
+ description: 'Get the latest release',
464
+ params: [
465
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
466
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
467
+ ],
468
+ },
469
+ {
470
+ name: 'get_release_by_tag',
471
+ description: 'Get release by tag name',
472
+ params: [
473
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
474
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
475
+ { name: 'tag', type: 'string', required: true, description: 'Tag name' },
476
+ ],
477
+ },
478
+ {
479
+ name: 'create_release',
480
+ description: 'Create a new release',
481
+ params: [
482
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
483
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
484
+ { name: 'tag_name', type: 'string', required: true, description: 'Tag name for release' },
485
+ { name: 'name', type: 'string', required: false, description: 'Release name' },
486
+ { name: 'body', type: 'string', required: false, description: 'Release notes' },
487
+ { name: 'draft', type: 'boolean', required: false, description: 'Create as draft' },
488
+ { name: 'prerelease', type: 'boolean', required: false, description: 'Mark as prerelease' },
489
+ { name: 'target_commitish', type: 'string', required: false, description: 'Target branch/commit' },
490
+ { name: 'generate_release_notes', type: 'boolean', required: false, description: 'Auto-generate notes' },
491
+ ],
492
+ },
493
+ {
494
+ name: 'update_release',
495
+ description: 'Update a release',
496
+ params: [
497
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
498
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
499
+ { name: 'release_id', type: 'number', required: true, description: 'Release ID' },
500
+ { name: 'tag_name', type: 'string', required: false, description: 'Tag name' },
501
+ { name: 'name', type: 'string', required: false, description: 'Release name' },
502
+ { name: 'body', type: 'string', required: false, description: 'Release notes' },
503
+ { name: 'draft', type: 'boolean', required: false, description: 'Draft status' },
504
+ { name: 'prerelease', type: 'boolean', required: false, description: 'Prerelease status' },
505
+ ],
506
+ },
507
+ {
508
+ name: 'delete_release',
509
+ description: 'Delete a release',
510
+ params: [
511
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
512
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
513
+ { name: 'release_id', type: 'number', required: true, description: 'Release ID' },
514
+ ],
515
+ },
516
+ {
517
+ name: 'list_release_assets',
518
+ description: 'List release assets',
519
+ params: [
520
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
521
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
522
+ { name: 'release_id', type: 'number', required: true, description: 'Release ID' },
523
+ ],
524
+ },
525
+ // Labels
526
+ {
527
+ name: 'list_labels',
528
+ description: 'List repository labels',
529
+ params: [
530
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
531
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
532
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
533
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
534
+ ],
535
+ },
536
+ {
537
+ name: 'create_label',
538
+ description: 'Create a label',
539
+ params: [
540
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
541
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
542
+ { name: 'name', type: 'string', required: true, description: 'Label name' },
543
+ { name: 'color', type: 'string', required: true, description: 'Color hex (without #)' },
544
+ { name: 'description', type: 'string', required: false, description: 'Label description' },
545
+ ],
546
+ },
547
+ {
548
+ name: 'update_label',
549
+ description: 'Update a label',
550
+ params: [
551
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
552
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
553
+ { name: 'name', type: 'string', required: true, description: 'Current label name' },
554
+ { name: 'new_name', type: 'string', required: false, description: 'New label name' },
555
+ { name: 'color', type: 'string', required: false, description: 'New color hex' },
556
+ { name: 'description', type: 'string', required: false, description: 'New description' },
557
+ ],
558
+ },
559
+ {
560
+ name: 'delete_label',
561
+ description: 'Delete a label',
562
+ params: [
563
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
564
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
565
+ { name: 'name', type: 'string', required: true, description: 'Label name' },
566
+ ],
567
+ },
568
+ // Milestones
569
+ {
570
+ name: 'list_milestones',
571
+ description: 'List repository milestones',
572
+ params: [
573
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
574
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
575
+ { name: 'state', type: 'string', required: false, description: 'State: open, closed, all' },
576
+ { name: 'sort', type: 'string', required: false, description: 'Sort: due_on, completeness' },
577
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
578
+ ],
579
+ },
580
+ {
581
+ name: 'create_milestone',
582
+ description: 'Create a milestone',
583
+ params: [
584
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
585
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
586
+ { name: 'title', type: 'string', required: true, description: 'Milestone title' },
587
+ { name: 'description', type: 'string', required: false, description: 'Description' },
588
+ { name: 'due_on', type: 'string', required: false, description: 'Due date (ISO 8601)' },
589
+ { name: 'state', type: 'string', required: false, description: 'State: open, closed' },
590
+ ],
591
+ },
592
+ {
593
+ name: 'update_milestone',
594
+ description: 'Update a milestone',
595
+ params: [
596
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
597
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
598
+ { name: 'milestone_number', type: 'number', required: true, description: 'Milestone number' },
599
+ { name: 'title', type: 'string', required: false, description: 'New title' },
600
+ { name: 'description', type: 'string', required: false, description: 'New description' },
601
+ { name: 'due_on', type: 'string', required: false, description: 'New due date' },
602
+ { name: 'state', type: 'string', required: false, description: 'New state' },
603
+ ],
604
+ },
605
+ {
606
+ name: 'delete_milestone',
607
+ description: 'Delete a milestone',
608
+ params: [
609
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
610
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
611
+ { name: 'milestone_number', type: 'number', required: true, description: 'Milestone number' },
612
+ ],
613
+ },
614
+ // GitHub Actions
615
+ {
616
+ name: 'list_workflows',
617
+ description: 'List repository workflows',
618
+ params: [
619
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
620
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
621
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
622
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
623
+ ],
624
+ },
625
+ {
626
+ name: 'get_workflow',
627
+ description: 'Get a workflow',
628
+ params: [
629
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
630
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
631
+ { name: 'workflow_id', type: 'string', required: true, description: 'Workflow ID or filename' },
632
+ ],
633
+ },
634
+ {
635
+ name: 'list_workflow_runs',
636
+ description: 'List workflow runs',
637
+ params: [
638
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
639
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
640
+ { name: 'workflow_id', type: 'string', required: false, description: 'Workflow ID (optional)' },
641
+ { name: 'branch', type: 'string', required: false, description: 'Filter by branch' },
642
+ { name: 'status', type: 'string', required: false, description: 'Status: completed, in_progress, queued' },
643
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
644
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
645
+ ],
646
+ },
647
+ {
648
+ name: 'get_workflow_run',
649
+ description: 'Get a workflow run',
650
+ params: [
651
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
652
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
653
+ { name: 'run_id', type: 'number', required: true, description: 'Workflow run ID' },
654
+ ],
655
+ },
656
+ {
657
+ name: 'rerun_workflow',
658
+ description: 'Re-run a workflow',
659
+ params: [
660
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
661
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
662
+ { name: 'run_id', type: 'number', required: true, description: 'Workflow run ID' },
663
+ ],
664
+ },
665
+ {
666
+ name: 'cancel_workflow_run',
667
+ description: 'Cancel a workflow run',
668
+ params: [
669
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
670
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
671
+ { name: 'run_id', type: 'number', required: true, description: 'Workflow run ID' },
672
+ ],
673
+ },
674
+ {
675
+ name: 'list_workflow_jobs',
676
+ description: 'List jobs for a workflow run',
677
+ params: [
678
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
679
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
680
+ { name: 'run_id', type: 'number', required: true, description: 'Workflow run ID' },
681
+ ],
682
+ },
683
+ {
684
+ name: 'trigger_workflow',
685
+ description: 'Trigger a workflow dispatch event',
686
+ params: [
687
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
688
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
689
+ { name: 'workflow_id', type: 'string', required: true, description: 'Workflow ID or filename' },
690
+ { name: 'ref', type: 'string', required: true, description: 'Branch or tag ref' },
691
+ { name: 'inputs', type: 'object', required: false, description: 'Workflow inputs' },
692
+ ],
693
+ },
694
+ // Gists
695
+ {
696
+ name: 'list_gists',
697
+ description: 'List gists for authenticated user',
698
+ params: [
699
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
700
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
701
+ ],
702
+ },
703
+ {
704
+ name: 'create_gist',
705
+ description: 'Create a gist',
706
+ params: [
707
+ { name: 'files', type: 'object', required: true, description: 'Files object {filename: {content}}' },
708
+ { name: 'description', type: 'string', required: false, description: 'Gist description' },
709
+ { name: 'public', type: 'boolean', required: false, description: 'Make public' },
710
+ ],
711
+ },
712
+ {
713
+ name: 'get_gist',
714
+ description: 'Get a gist',
715
+ params: [
716
+ { name: 'gist_id', type: 'string', required: true, description: 'Gist ID' },
717
+ ],
718
+ },
719
+ {
720
+ name: 'update_gist',
721
+ description: 'Update a gist',
722
+ params: [
723
+ { name: 'gist_id', type: 'string', required: true, description: 'Gist ID' },
724
+ { name: 'files', type: 'object', required: false, description: 'Files to update' },
725
+ { name: 'description', type: 'string', required: false, description: 'New description' },
726
+ ],
727
+ },
728
+ {
729
+ name: 'delete_gist',
730
+ description: 'Delete a gist',
731
+ params: [
732
+ { name: 'gist_id', type: 'string', required: true, description: 'Gist ID' },
733
+ ],
734
+ },
735
+ // Stars and Watch
736
+ {
737
+ name: 'star_repository',
738
+ description: 'Star a repository',
739
+ params: [
740
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
741
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
742
+ ],
743
+ },
744
+ {
745
+ name: 'unstar_repository',
746
+ description: 'Unstar a repository',
747
+ params: [
748
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
749
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
750
+ ],
751
+ },
752
+ {
753
+ name: 'list_stargazers',
754
+ description: 'List repository stargazers',
755
+ params: [
756
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
757
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
758
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
759
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
760
+ ],
761
+ },
762
+ {
763
+ name: 'list_watchers',
764
+ description: 'List repository watchers',
765
+ params: [
766
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
767
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
768
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
769
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
770
+ ],
771
+ },
772
+ // User
773
+ {
774
+ name: 'get_authenticated_user',
775
+ description: 'Get authenticated user details',
776
+ params: [],
777
+ },
778
+ {
779
+ name: 'get_user',
780
+ description: 'Get a user profile',
781
+ params: [
782
+ { name: 'username', type: 'string', required: true, description: 'GitHub username' },
783
+ ],
784
+ },
785
+ {
786
+ name: 'list_user_orgs',
787
+ description: 'List organizations for authenticated user',
788
+ params: [
789
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
790
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
791
+ ],
792
+ },
793
+ // Organizations
794
+ {
795
+ name: 'get_organization',
796
+ description: 'Get organization details',
797
+ params: [
798
+ { name: 'org', type: 'string', required: true, description: 'Organization name' },
799
+ ],
800
+ },
801
+ {
802
+ name: 'list_org_repositories',
803
+ description: 'List organization repositories',
804
+ params: [
805
+ { name: 'org', type: 'string', required: true, description: 'Organization name' },
806
+ { name: 'type', type: 'string', required: false, description: 'Type: all, public, private, forks, sources, member' },
807
+ { name: 'sort', type: 'string', required: false, description: 'Sort: created, updated, pushed, full_name' },
808
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
809
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
810
+ ],
811
+ },
812
+ {
813
+ name: 'list_org_members',
814
+ description: 'List organization members',
815
+ params: [
816
+ { name: 'org', type: 'string', required: true, description: 'Organization name' },
817
+ { name: 'role', type: 'string', required: false, description: 'Role: all, admin, member' },
818
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
819
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
820
+ ],
821
+ },
822
+ // Webhooks
823
+ {
824
+ name: 'list_webhooks',
825
+ description: 'List repository webhooks',
826
+ params: [
827
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
828
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
829
+ ],
830
+ },
831
+ {
832
+ name: 'create_webhook',
833
+ description: 'Create a webhook',
834
+ params: [
835
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
836
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
837
+ { name: 'url', type: 'string', required: true, description: 'Webhook URL' },
838
+ { name: 'events', type: 'array', required: false, description: 'Events to trigger (default: push)' },
839
+ { name: 'content_type', type: 'string', required: false, description: 'Content type: json, form' },
840
+ { name: 'secret', type: 'string', required: false, description: 'Webhook secret' },
841
+ { name: 'active', type: 'boolean', required: false, description: 'Active status' },
842
+ ],
843
+ },
844
+ {
845
+ name: 'delete_webhook',
846
+ description: 'Delete a webhook',
847
+ params: [
848
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
849
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
850
+ { name: 'hook_id', type: 'number', required: true, description: 'Webhook ID' },
851
+ ],
852
+ },
853
+ // Notifications
854
+ {
855
+ name: 'list_notifications',
856
+ description: 'List notifications for authenticated user',
857
+ params: [
858
+ { name: 'all', type: 'boolean', required: false, description: 'Include read notifications' },
859
+ { name: 'participating', type: 'boolean', required: false, description: 'Only participating' },
860
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
861
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
862
+ ],
863
+ },
864
+ {
865
+ name: 'mark_notifications_read',
866
+ description: 'Mark all notifications as read',
867
+ params: [
868
+ { name: 'last_read_at', type: 'string', required: false, description: 'Timestamp (ISO 8601)' },
869
+ ],
870
+ },
871
+ // Commits
872
+ {
873
+ name: 'get_commit',
874
+ description: 'Get a specific commit',
875
+ params: [
876
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
877
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
878
+ { name: 'ref', type: 'string', required: true, description: 'Commit SHA or ref' },
879
+ ],
880
+ },
881
+ {
882
+ name: 'compare_commits',
883
+ description: 'Compare two commits',
884
+ params: [
885
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
886
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
887
+ { name: 'base', type: 'string', required: true, description: 'Base commit' },
888
+ { name: 'head', type: 'string', required: true, description: 'Head commit' },
889
+ ],
890
+ },
891
+ // Issue Comments
892
+ {
893
+ name: 'list_issue_comments',
894
+ description: 'List comments on an issue',
895
+ params: [
896
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
897
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
898
+ { name: 'issue_number', type: 'number', required: true, description: 'Issue number' },
899
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
900
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
901
+ ],
902
+ },
903
+ {
904
+ name: 'update_issue_comment',
905
+ description: 'Update an issue comment',
906
+ params: [
907
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
908
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
909
+ { name: 'comment_id', type: 'number', required: true, description: 'Comment ID' },
910
+ { name: 'body', type: 'string', required: true, description: 'New comment body' },
911
+ ],
912
+ },
913
+ {
914
+ name: 'delete_issue_comment',
915
+ description: 'Delete an issue comment',
916
+ params: [
917
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
918
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
919
+ { name: 'comment_id', type: 'number', required: true, description: 'Comment ID' },
920
+ ],
921
+ },
922
+ // PR additional actions
923
+ {
924
+ name: 'update_pull_request',
925
+ description: 'Update a pull request',
926
+ params: [
927
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
928
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
929
+ { name: 'pull_number', type: 'number', required: true, description: 'PR number' },
930
+ { name: 'title', type: 'string', required: false, description: 'New title' },
931
+ { name: 'body', type: 'string', required: false, description: 'New body' },
932
+ { name: 'state', type: 'string', required: false, description: 'State: open, closed' },
933
+ { name: 'base', type: 'string', required: false, description: 'New base branch' },
934
+ ],
935
+ },
936
+ {
937
+ name: 'request_reviewers',
938
+ description: 'Request reviewers for a PR',
939
+ params: [
940
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
941
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
942
+ { name: 'pull_number', type: 'number', required: true, description: 'PR number' },
943
+ { name: 'reviewers', type: 'array', required: false, description: 'Usernames to request' },
944
+ { name: 'team_reviewers', type: 'array', required: false, description: 'Team slugs to request' },
945
+ ],
946
+ },
947
+ // Check runs
948
+ {
949
+ name: 'list_check_runs',
950
+ description: 'List check runs for a ref',
951
+ params: [
952
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
953
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
954
+ { name: 'ref', type: 'string', required: true, description: 'Commit SHA, branch, or tag' },
955
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
956
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
957
+ ],
958
+ },
959
+ // Forks
960
+ {
961
+ name: 'list_forks',
962
+ description: 'List repository forks',
963
+ params: [
964
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
965
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
966
+ { name: 'sort', type: 'string', required: false, description: 'Sort: newest, oldest, stargazers, watchers' },
967
+ { name: 'page', type: 'number', required: false, description: 'Page number' },
968
+ { name: 'per_page', type: 'number', required: false, description: 'Results per page' },
969
+ ],
970
+ },
971
+ // Traffic
972
+ {
973
+ name: 'get_traffic_views',
974
+ description: 'Get repository traffic views',
975
+ params: [
976
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
977
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
978
+ { name: 'per', type: 'string', required: false, description: 'Per day or week' },
979
+ ],
980
+ },
981
+ {
982
+ name: 'get_traffic_clones',
983
+ description: 'Get repository clone traffic',
984
+ params: [
985
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
986
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
987
+ { name: 'per', type: 'string', required: false, description: 'Per day or week' },
988
+ ],
989
+ },
990
+ {
991
+ name: 'get_top_referrers',
992
+ description: 'Get top traffic referrers',
993
+ params: [
994
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
995
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
996
+ ],
997
+ },
998
+ {
999
+ name: 'get_top_paths',
1000
+ description: 'Get top traffic paths',
1001
+ params: [
1002
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
1003
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
1004
+ ],
1005
+ },
1006
+ ];
1007
+ // Implementation functions
1008
+ async function searchRepositories(params) {
1009
+ const response = await octokit.search.repos({
1010
+ q: params.query,
1011
+ page: Number(params.page) || 1,
1012
+ per_page: Math.min(Number(params.perPage) || 30, 100),
1013
+ });
1014
+ return response.data;
1015
+ }
1016
+ async function createRepository(params) {
1017
+ const response = await octokit.repos.createForAuthenticatedUser({
1018
+ name: params.name,
1019
+ description: params.description,
1020
+ private: params.private,
1021
+ auto_init: params.autoInit,
1022
+ });
1023
+ return response.data;
1024
+ }
1025
+ async function forkRepository(params) {
1026
+ const response = await octokit.repos.createFork({
1027
+ owner: params.owner,
1028
+ repo: params.repo,
1029
+ organization: params.organization,
1030
+ });
1031
+ return response.data;
1032
+ }
1033
+ async function getFileContents(params) {
1034
+ const response = await octokit.repos.getContent({
1035
+ owner: params.owner,
1036
+ repo: params.repo,
1037
+ path: params.path,
1038
+ ref: params.branch,
1039
+ });
1040
+ return response.data;
1041
+ }
1042
+ async function createOrUpdateFile(params) {
1043
+ const response = await octokit.repos.createOrUpdateFileContents({
1044
+ owner: params.owner,
1045
+ repo: params.repo,
1046
+ path: params.path,
1047
+ message: params.message,
1048
+ content: Buffer.from(params.content).toString('base64'),
1049
+ branch: params.branch,
1050
+ sha: params.sha,
1051
+ });
1052
+ return response.data;
1053
+ }
1054
+ async function pushFiles(params) {
1055
+ const owner = params.owner;
1056
+ const repo = params.repo;
1057
+ const branch = params.branch;
1058
+ const files = params.files;
1059
+ const message = params.message;
1060
+ // Get the current commit SHA
1061
+ const { data: ref } = await octokit.git.getRef({
1062
+ owner,
1063
+ repo,
1064
+ ref: `heads/${branch}`,
1065
+ });
1066
+ const currentCommitSha = ref.object.sha;
1067
+ // Get the tree SHA
1068
+ const { data: commit } = await octokit.git.getCommit({
1069
+ owner,
1070
+ repo,
1071
+ commit_sha: currentCommitSha,
1072
+ });
1073
+ const treeSha = commit.tree.sha;
1074
+ // Create blobs for each file
1075
+ const blobs = await Promise.all(files.map(async (file) => {
1076
+ const { data: blob } = await octokit.git.createBlob({
1077
+ owner,
1078
+ repo,
1079
+ content: Buffer.from(file.content).toString('base64'),
1080
+ encoding: 'base64',
1081
+ });
1082
+ return { path: file.path, sha: blob.sha, mode: '100644', type: 'blob' };
1083
+ }));
1084
+ // Create a new tree
1085
+ const { data: newTree } = await octokit.git.createTree({
1086
+ owner,
1087
+ repo,
1088
+ base_tree: treeSha,
1089
+ tree: blobs,
1090
+ });
1091
+ // Create a new commit
1092
+ const { data: newCommit } = await octokit.git.createCommit({
1093
+ owner,
1094
+ repo,
1095
+ message,
1096
+ tree: newTree.sha,
1097
+ parents: [currentCommitSha],
1098
+ });
1099
+ // Update the reference
1100
+ await octokit.git.updateRef({
1101
+ owner,
1102
+ repo,
1103
+ ref: `heads/${branch}`,
1104
+ sha: newCommit.sha,
1105
+ });
1106
+ return { commit: newCommit, files: files.map((f) => f.path) };
1107
+ }
1108
+ async function createBranch(params) {
1109
+ const owner = params.owner;
1110
+ const repo = params.repo;
1111
+ const branch = params.branch;
1112
+ const fromBranch = params.from_branch;
1113
+ // Get SHA of source branch
1114
+ const { data: sourceRef } = await octokit.git.getRef({
1115
+ owner,
1116
+ repo,
1117
+ ref: `heads/${fromBranch || 'main'}`,
1118
+ });
1119
+ // Create new branch
1120
+ const response = await octokit.git.createRef({
1121
+ owner,
1122
+ repo,
1123
+ ref: `refs/heads/${branch}`,
1124
+ sha: sourceRef.object.sha,
1125
+ });
1126
+ return response.data;
1127
+ }
1128
+ async function listCommits(params) {
1129
+ const response = await octokit.repos.listCommits({
1130
+ owner: params.owner,
1131
+ repo: params.repo,
1132
+ sha: params.sha,
1133
+ page: Number(params.page) || undefined,
1134
+ per_page: Number(params.perPage) || undefined,
1135
+ });
1136
+ return response.data;
1137
+ }
1138
+ async function createIssue(params) {
1139
+ const response = await octokit.issues.create({
1140
+ owner: params.owner,
1141
+ repo: params.repo,
1142
+ title: params.title,
1143
+ body: params.body,
1144
+ labels: params.labels,
1145
+ assignees: params.assignees,
1146
+ });
1147
+ return response.data;
1148
+ }
1149
+ async function getIssue(params) {
1150
+ const response = await octokit.issues.get({
1151
+ owner: params.owner,
1152
+ repo: params.repo,
1153
+ issue_number: Number(params.issue_number),
1154
+ });
1155
+ return response.data;
1156
+ }
1157
+ async function listIssues(params) {
1158
+ const response = await octokit.issues.listForRepo({
1159
+ owner: params.owner,
1160
+ repo: params.repo,
1161
+ state: params.state,
1162
+ labels: params.labels?.join(','),
1163
+ page: Number(params.page) || undefined,
1164
+ per_page: Number(params.per_page) || undefined,
1165
+ });
1166
+ return response.data;
1167
+ }
1168
+ async function updateIssue(params) {
1169
+ const response = await octokit.issues.update({
1170
+ owner: params.owner,
1171
+ repo: params.repo,
1172
+ issue_number: Number(params.issue_number),
1173
+ title: params.title,
1174
+ body: params.body,
1175
+ state: params.state,
1176
+ labels: params.labels,
1177
+ assignees: params.assignees,
1178
+ });
1179
+ return response.data;
1180
+ }
1181
+ async function addIssueComment(params) {
1182
+ const response = await octokit.issues.createComment({
1183
+ owner: params.owner,
1184
+ repo: params.repo,
1185
+ issue_number: Number(params.issue_number),
1186
+ body: params.body,
1187
+ });
1188
+ return response.data;
1189
+ }
1190
+ async function searchIssues(params) {
1191
+ const response = await octokit.search.issuesAndPullRequests({
1192
+ q: params.q,
1193
+ sort: params.sort,
1194
+ order: params.order,
1195
+ page: Number(params.page) || undefined,
1196
+ per_page: Number(params.per_page) || undefined,
1197
+ });
1198
+ return response.data;
1199
+ }
1200
+ async function createPullRequest(params) {
1201
+ const response = await octokit.pulls.create({
1202
+ owner: params.owner,
1203
+ repo: params.repo,
1204
+ title: params.title,
1205
+ head: params.head,
1206
+ base: params.base,
1207
+ body: params.body,
1208
+ draft: params.draft,
1209
+ });
1210
+ return response.data;
1211
+ }
1212
+ async function getPullRequest(params) {
1213
+ const response = await octokit.pulls.get({
1214
+ owner: params.owner,
1215
+ repo: params.repo,
1216
+ pull_number: Number(params.pull_number),
1217
+ });
1218
+ return response.data;
1219
+ }
1220
+ async function listPullRequests(params) {
1221
+ const response = await octokit.pulls.list({
1222
+ owner: params.owner,
1223
+ repo: params.repo,
1224
+ state: params.state,
1225
+ head: params.head,
1226
+ base: params.base,
1227
+ page: Number(params.page) || undefined,
1228
+ per_page: Number(params.per_page) || undefined,
1229
+ });
1230
+ return response.data;
1231
+ }
1232
+ async function mergePullRequest(params) {
1233
+ const response = await octokit.pulls.merge({
1234
+ owner: params.owner,
1235
+ repo: params.repo,
1236
+ pull_number: Number(params.pull_number),
1237
+ commit_title: params.commit_title,
1238
+ commit_message: params.commit_message,
1239
+ merge_method: params.merge_method,
1240
+ });
1241
+ return response.data;
1242
+ }
1243
+ async function getPullRequestFiles(params) {
1244
+ const response = await octokit.pulls.listFiles({
1245
+ owner: params.owner,
1246
+ repo: params.repo,
1247
+ pull_number: Number(params.pull_number),
1248
+ });
1249
+ return response.data;
1250
+ }
1251
+ async function getPullRequestStatus(params) {
1252
+ // First get the PR to get the head SHA
1253
+ const { data: pr } = await octokit.pulls.get({
1254
+ owner: params.owner,
1255
+ repo: params.repo,
1256
+ pull_number: Number(params.pull_number),
1257
+ });
1258
+ const response = await octokit.repos.getCombinedStatusForRef({
1259
+ owner: params.owner,
1260
+ repo: params.repo,
1261
+ ref: pr.head.sha,
1262
+ });
1263
+ return response.data;
1264
+ }
1265
+ async function getPullRequestComments(params) {
1266
+ const response = await octokit.pulls.listReviewComments({
1267
+ owner: params.owner,
1268
+ repo: params.repo,
1269
+ pull_number: Number(params.pull_number),
1270
+ });
1271
+ return response.data;
1272
+ }
1273
+ async function getPullRequestReviews(params) {
1274
+ const response = await octokit.pulls.listReviews({
1275
+ owner: params.owner,
1276
+ repo: params.repo,
1277
+ pull_number: Number(params.pull_number),
1278
+ });
1279
+ return response.data;
1280
+ }
1281
+ async function createPullRequestReview(params) {
1282
+ const response = await octokit.pulls.createReview({
1283
+ owner: params.owner,
1284
+ repo: params.repo,
1285
+ pull_number: Number(params.pull_number),
1286
+ body: params.body,
1287
+ event: params.event,
1288
+ comments: params.comments,
1289
+ });
1290
+ return response.data;
1291
+ }
1292
+ async function updatePullRequestBranch(params) {
1293
+ const response = await octokit.pulls.updateBranch({
1294
+ owner: params.owner,
1295
+ repo: params.repo,
1296
+ pull_number: Number(params.pull_number),
1297
+ });
1298
+ return response.data;
1299
+ }
1300
+ async function searchCode(params) {
1301
+ const response = await octokit.search.code({
1302
+ q: params.q,
1303
+ page: Number(params.page) || undefined,
1304
+ per_page: Number(params.per_page) || undefined,
1305
+ });
1306
+ return response.data;
1307
+ }
1308
+ async function searchUsers(params) {
1309
+ const response = await octokit.search.users({
1310
+ q: params.q,
1311
+ sort: params.sort,
1312
+ order: params.order,
1313
+ page: Number(params.page) || undefined,
1314
+ per_page: Number(params.per_page) || undefined,
1315
+ });
1316
+ return response.data;
1317
+ }
1318
+ async function addCollaborator(params) {
1319
+ const response = await octokit.repos.addCollaborator({
1320
+ owner: params.owner,
1321
+ repo: params.repo,
1322
+ username: params.username,
1323
+ permission: params.permission || 'push',
1324
+ });
1325
+ return response.data || { message: `Invitation sent to ${params.username}` };
1326
+ }
1327
+ async function removeCollaborator(params) {
1328
+ await octokit.repos.removeCollaborator({
1329
+ owner: params.owner,
1330
+ repo: params.repo,
1331
+ username: params.username,
1332
+ });
1333
+ return { message: `Removed ${params.username} from ${params.owner}/${params.repo}` };
1334
+ }
1335
+ async function listCollaborators(params) {
1336
+ const response = await octokit.repos.listCollaborators({
1337
+ owner: params.owner,
1338
+ repo: params.repo,
1339
+ });
1340
+ return response.data;
1341
+ }
1342
+ // Repository Management
1343
+ async function getRepository(params) {
1344
+ const response = await octokit.repos.get({
1345
+ owner: params.owner,
1346
+ repo: params.repo,
1347
+ });
1348
+ return response.data;
1349
+ }
1350
+ async function updateRepository(params) {
1351
+ const response = await octokit.repos.update({
1352
+ owner: params.owner,
1353
+ repo: params.repo,
1354
+ description: params.description,
1355
+ homepage: params.homepage,
1356
+ private: params.private,
1357
+ has_issues: params.has_issues,
1358
+ has_wiki: params.has_wiki,
1359
+ has_projects: params.has_projects,
1360
+ default_branch: params.default_branch,
1361
+ archived: params.archived,
1362
+ });
1363
+ return response.data;
1364
+ }
1365
+ async function deleteRepository(params) {
1366
+ await octokit.repos.delete({
1367
+ owner: params.owner,
1368
+ repo: params.repo,
1369
+ });
1370
+ return { message: `Deleted repository ${params.owner}/${params.repo}` };
1371
+ }
1372
+ async function listUserRepositories(params) {
1373
+ if (params.username) {
1374
+ const response = await octokit.repos.listForUser({
1375
+ username: params.username,
1376
+ type: params.type,
1377
+ sort: params.sort,
1378
+ page: Number(params.page) || undefined,
1379
+ per_page: Number(params.per_page) || undefined,
1380
+ });
1381
+ return response.data;
1382
+ }
1383
+ const response = await octokit.repos.listForAuthenticatedUser({
1384
+ type: params.type,
1385
+ sort: params.sort,
1386
+ page: Number(params.page) || undefined,
1387
+ per_page: Number(params.per_page) || undefined,
1388
+ });
1389
+ return response.data;
1390
+ }
1391
+ async function listBranches(params) {
1392
+ const response = await octokit.repos.listBranches({
1393
+ owner: params.owner,
1394
+ repo: params.repo,
1395
+ protected: params.protected,
1396
+ page: Number(params.page) || undefined,
1397
+ per_page: Number(params.per_page) || undefined,
1398
+ });
1399
+ return response.data;
1400
+ }
1401
+ async function getBranch(params) {
1402
+ const response = await octokit.repos.getBranch({
1403
+ owner: params.owner,
1404
+ repo: params.repo,
1405
+ branch: params.branch,
1406
+ });
1407
+ return response.data;
1408
+ }
1409
+ async function deleteBranch(params) {
1410
+ await octokit.git.deleteRef({
1411
+ owner: params.owner,
1412
+ repo: params.repo,
1413
+ ref: `heads/${params.branch}`,
1414
+ });
1415
+ return { message: `Deleted branch ${params.branch}` };
1416
+ }
1417
+ async function listTags(params) {
1418
+ const response = await octokit.repos.listTags({
1419
+ owner: params.owner,
1420
+ repo: params.repo,
1421
+ page: Number(params.page) || undefined,
1422
+ per_page: Number(params.per_page) || undefined,
1423
+ });
1424
+ return response.data;
1425
+ }
1426
+ async function getReadme(params) {
1427
+ const response = await octokit.repos.getReadme({
1428
+ owner: params.owner,
1429
+ repo: params.repo,
1430
+ ref: params.ref,
1431
+ });
1432
+ return response.data;
1433
+ }
1434
+ async function listTopics(params) {
1435
+ const response = await octokit.repos.getAllTopics({
1436
+ owner: params.owner,
1437
+ repo: params.repo,
1438
+ });
1439
+ return response.data;
1440
+ }
1441
+ async function updateTopics(params) {
1442
+ const response = await octokit.repos.replaceAllTopics({
1443
+ owner: params.owner,
1444
+ repo: params.repo,
1445
+ names: params.topics,
1446
+ });
1447
+ return response.data;
1448
+ }
1449
+ async function listLanguages(params) {
1450
+ const response = await octokit.repos.listLanguages({
1451
+ owner: params.owner,
1452
+ repo: params.repo,
1453
+ });
1454
+ return response.data;
1455
+ }
1456
+ async function listContributors(params) {
1457
+ const response = await octokit.repos.listContributors({
1458
+ owner: params.owner,
1459
+ repo: params.repo,
1460
+ page: Number(params.page) || undefined,
1461
+ per_page: Number(params.per_page) || undefined,
1462
+ });
1463
+ return response.data;
1464
+ }
1465
+ // Releases
1466
+ async function listReleases(params) {
1467
+ const response = await octokit.repos.listReleases({
1468
+ owner: params.owner,
1469
+ repo: params.repo,
1470
+ page: Number(params.page) || undefined,
1471
+ per_page: Number(params.per_page) || undefined,
1472
+ });
1473
+ return response.data;
1474
+ }
1475
+ async function getRelease(params) {
1476
+ const response = await octokit.repos.getRelease({
1477
+ owner: params.owner,
1478
+ repo: params.repo,
1479
+ release_id: Number(params.release_id),
1480
+ });
1481
+ return response.data;
1482
+ }
1483
+ async function getLatestRelease(params) {
1484
+ const response = await octokit.repos.getLatestRelease({
1485
+ owner: params.owner,
1486
+ repo: params.repo,
1487
+ });
1488
+ return response.data;
1489
+ }
1490
+ async function getReleaseByTag(params) {
1491
+ const response = await octokit.repos.getReleaseByTag({
1492
+ owner: params.owner,
1493
+ repo: params.repo,
1494
+ tag: params.tag,
1495
+ });
1496
+ return response.data;
1497
+ }
1498
+ async function createRelease(params) {
1499
+ const response = await octokit.repos.createRelease({
1500
+ owner: params.owner,
1501
+ repo: params.repo,
1502
+ tag_name: params.tag_name,
1503
+ name: params.name,
1504
+ body: params.body,
1505
+ draft: params.draft,
1506
+ prerelease: params.prerelease,
1507
+ target_commitish: params.target_commitish,
1508
+ generate_release_notes: params.generate_release_notes,
1509
+ });
1510
+ return response.data;
1511
+ }
1512
+ async function updateRelease(params) {
1513
+ const response = await octokit.repos.updateRelease({
1514
+ owner: params.owner,
1515
+ repo: params.repo,
1516
+ release_id: Number(params.release_id),
1517
+ tag_name: params.tag_name,
1518
+ name: params.name,
1519
+ body: params.body,
1520
+ draft: params.draft,
1521
+ prerelease: params.prerelease,
1522
+ });
1523
+ return response.data;
1524
+ }
1525
+ async function deleteRelease(params) {
1526
+ await octokit.repos.deleteRelease({
1527
+ owner: params.owner,
1528
+ repo: params.repo,
1529
+ release_id: Number(params.release_id),
1530
+ });
1531
+ return { message: `Deleted release ${params.release_id}` };
1532
+ }
1533
+ async function listReleaseAssets(params) {
1534
+ const response = await octokit.repos.listReleaseAssets({
1535
+ owner: params.owner,
1536
+ repo: params.repo,
1537
+ release_id: Number(params.release_id),
1538
+ });
1539
+ return response.data;
1540
+ }
1541
+ // Labels
1542
+ async function listLabels(params) {
1543
+ const response = await octokit.issues.listLabelsForRepo({
1544
+ owner: params.owner,
1545
+ repo: params.repo,
1546
+ page: Number(params.page) || undefined,
1547
+ per_page: Number(params.per_page) || undefined,
1548
+ });
1549
+ return response.data;
1550
+ }
1551
+ async function createLabel(params) {
1552
+ const response = await octokit.issues.createLabel({
1553
+ owner: params.owner,
1554
+ repo: params.repo,
1555
+ name: params.name,
1556
+ color: params.color,
1557
+ description: params.description,
1558
+ });
1559
+ return response.data;
1560
+ }
1561
+ async function updateLabel(params) {
1562
+ const response = await octokit.issues.updateLabel({
1563
+ owner: params.owner,
1564
+ repo: params.repo,
1565
+ name: params.name,
1566
+ new_name: params.new_name,
1567
+ color: params.color,
1568
+ description: params.description,
1569
+ });
1570
+ return response.data;
1571
+ }
1572
+ async function deleteLabel(params) {
1573
+ await octokit.issues.deleteLabel({
1574
+ owner: params.owner,
1575
+ repo: params.repo,
1576
+ name: params.name,
1577
+ });
1578
+ return { message: `Deleted label ${params.name}` };
1579
+ }
1580
+ // Milestones
1581
+ async function listMilestones(params) {
1582
+ const response = await octokit.issues.listMilestones({
1583
+ owner: params.owner,
1584
+ repo: params.repo,
1585
+ state: params.state,
1586
+ sort: params.sort,
1587
+ page: Number(params.page) || undefined,
1588
+ });
1589
+ return response.data;
1590
+ }
1591
+ async function createMilestone(params) {
1592
+ const response = await octokit.issues.createMilestone({
1593
+ owner: params.owner,
1594
+ repo: params.repo,
1595
+ title: params.title,
1596
+ description: params.description,
1597
+ due_on: params.due_on,
1598
+ state: params.state,
1599
+ });
1600
+ return response.data;
1601
+ }
1602
+ async function updateMilestone(params) {
1603
+ const response = await octokit.issues.updateMilestone({
1604
+ owner: params.owner,
1605
+ repo: params.repo,
1606
+ milestone_number: Number(params.milestone_number),
1607
+ title: params.title,
1608
+ description: params.description,
1609
+ due_on: params.due_on,
1610
+ state: params.state,
1611
+ });
1612
+ return response.data;
1613
+ }
1614
+ async function deleteMilestone(params) {
1615
+ await octokit.issues.deleteMilestone({
1616
+ owner: params.owner,
1617
+ repo: params.repo,
1618
+ milestone_number: Number(params.milestone_number),
1619
+ });
1620
+ return { message: `Deleted milestone ${params.milestone_number}` };
1621
+ }
1622
+ // GitHub Actions
1623
+ async function listWorkflows(params) {
1624
+ const response = await octokit.actions.listRepoWorkflows({
1625
+ owner: params.owner,
1626
+ repo: params.repo,
1627
+ page: Number(params.page) || undefined,
1628
+ per_page: Number(params.per_page) || undefined,
1629
+ });
1630
+ return response.data;
1631
+ }
1632
+ async function getWorkflow(params) {
1633
+ const response = await octokit.actions.getWorkflow({
1634
+ owner: params.owner,
1635
+ repo: params.repo,
1636
+ workflow_id: params.workflow_id,
1637
+ });
1638
+ return response.data;
1639
+ }
1640
+ async function listWorkflowRuns(params) {
1641
+ if (params.workflow_id) {
1642
+ const response = await octokit.actions.listWorkflowRuns({
1643
+ owner: params.owner,
1644
+ repo: params.repo,
1645
+ workflow_id: params.workflow_id,
1646
+ branch: params.branch,
1647
+ status: params.status,
1648
+ page: Number(params.page) || undefined,
1649
+ per_page: Number(params.per_page) || undefined,
1650
+ });
1651
+ return response.data;
1652
+ }
1653
+ const response = await octokit.actions.listWorkflowRunsForRepo({
1654
+ owner: params.owner,
1655
+ repo: params.repo,
1656
+ branch: params.branch,
1657
+ status: params.status,
1658
+ page: Number(params.page) || undefined,
1659
+ per_page: Number(params.per_page) || undefined,
1660
+ });
1661
+ return response.data;
1662
+ }
1663
+ async function getWorkflowRun(params) {
1664
+ const response = await octokit.actions.getWorkflowRun({
1665
+ owner: params.owner,
1666
+ repo: params.repo,
1667
+ run_id: Number(params.run_id),
1668
+ });
1669
+ return response.data;
1670
+ }
1671
+ async function rerunWorkflow(params) {
1672
+ await octokit.actions.reRunWorkflow({
1673
+ owner: params.owner,
1674
+ repo: params.repo,
1675
+ run_id: Number(params.run_id),
1676
+ });
1677
+ return { message: `Re-running workflow ${params.run_id}` };
1678
+ }
1679
+ async function cancelWorkflowRun(params) {
1680
+ await octokit.actions.cancelWorkflowRun({
1681
+ owner: params.owner,
1682
+ repo: params.repo,
1683
+ run_id: Number(params.run_id),
1684
+ });
1685
+ return { message: `Cancelled workflow run ${params.run_id}` };
1686
+ }
1687
+ async function listWorkflowJobs(params) {
1688
+ const response = await octokit.actions.listJobsForWorkflowRun({
1689
+ owner: params.owner,
1690
+ repo: params.repo,
1691
+ run_id: Number(params.run_id),
1692
+ });
1693
+ return response.data;
1694
+ }
1695
+ async function triggerWorkflow(params) {
1696
+ await octokit.actions.createWorkflowDispatch({
1697
+ owner: params.owner,
1698
+ repo: params.repo,
1699
+ workflow_id: params.workflow_id,
1700
+ ref: params.ref,
1701
+ inputs: params.inputs,
1702
+ });
1703
+ return { message: `Triggered workflow ${params.workflow_id}` };
1704
+ }
1705
+ // Gists
1706
+ async function listGists(params) {
1707
+ const response = await octokit.gists.list({
1708
+ page: Number(params.page) || undefined,
1709
+ per_page: Number(params.per_page) || undefined,
1710
+ });
1711
+ return response.data;
1712
+ }
1713
+ async function createGist(params) {
1714
+ const response = await octokit.gists.create({
1715
+ files: params.files,
1716
+ description: params.description,
1717
+ public: params.public,
1718
+ });
1719
+ return response.data;
1720
+ }
1721
+ async function getGist(params) {
1722
+ const response = await octokit.gists.get({
1723
+ gist_id: params.gist_id,
1724
+ });
1725
+ return response.data;
1726
+ }
1727
+ async function updateGist(params) {
1728
+ const response = await octokit.gists.update({
1729
+ gist_id: params.gist_id,
1730
+ files: params.files,
1731
+ description: params.description,
1732
+ });
1733
+ return response.data;
1734
+ }
1735
+ async function deleteGist(params) {
1736
+ await octokit.gists.delete({
1737
+ gist_id: params.gist_id,
1738
+ });
1739
+ return { message: `Deleted gist ${params.gist_id}` };
1740
+ }
1741
+ // Stars and Watch
1742
+ async function starRepository(params) {
1743
+ await octokit.activity.starRepoForAuthenticatedUser({
1744
+ owner: params.owner,
1745
+ repo: params.repo,
1746
+ });
1747
+ return { message: `Starred ${params.owner}/${params.repo}` };
1748
+ }
1749
+ async function unstarRepository(params) {
1750
+ await octokit.activity.unstarRepoForAuthenticatedUser({
1751
+ owner: params.owner,
1752
+ repo: params.repo,
1753
+ });
1754
+ return { message: `Unstarred ${params.owner}/${params.repo}` };
1755
+ }
1756
+ async function listStargazers(params) {
1757
+ const response = await octokit.activity.listStargazersForRepo({
1758
+ owner: params.owner,
1759
+ repo: params.repo,
1760
+ page: Number(params.page) || undefined,
1761
+ per_page: Number(params.per_page) || undefined,
1762
+ });
1763
+ return response.data;
1764
+ }
1765
+ async function listWatchers(params) {
1766
+ const response = await octokit.activity.listWatchersForRepo({
1767
+ owner: params.owner,
1768
+ repo: params.repo,
1769
+ page: Number(params.page) || undefined,
1770
+ per_page: Number(params.per_page) || undefined,
1771
+ });
1772
+ return response.data;
1773
+ }
1774
+ // User
1775
+ async function getAuthenticatedUser() {
1776
+ const response = await octokit.users.getAuthenticated();
1777
+ return response.data;
1778
+ }
1779
+ async function getUser(params) {
1780
+ const response = await octokit.users.getByUsername({
1781
+ username: params.username,
1782
+ });
1783
+ return response.data;
1784
+ }
1785
+ async function listUserOrgs(params) {
1786
+ const response = await octokit.orgs.listForAuthenticatedUser({
1787
+ page: Number(params.page) || undefined,
1788
+ per_page: Number(params.per_page) || undefined,
1789
+ });
1790
+ return response.data;
1791
+ }
1792
+ // Organizations
1793
+ async function getOrganization(params) {
1794
+ const response = await octokit.orgs.get({
1795
+ org: params.org,
1796
+ });
1797
+ return response.data;
1798
+ }
1799
+ async function listOrgRepositories(params) {
1800
+ const response = await octokit.repos.listForOrg({
1801
+ org: params.org,
1802
+ type: params.type,
1803
+ sort: params.sort,
1804
+ page: Number(params.page) || undefined,
1805
+ per_page: Number(params.per_page) || undefined,
1806
+ });
1807
+ return response.data;
1808
+ }
1809
+ async function listOrgMembers(params) {
1810
+ const response = await octokit.orgs.listMembers({
1811
+ org: params.org,
1812
+ role: params.role,
1813
+ page: Number(params.page) || undefined,
1814
+ per_page: Number(params.per_page) || undefined,
1815
+ });
1816
+ return response.data;
1817
+ }
1818
+ // Webhooks
1819
+ async function listWebhooks(params) {
1820
+ const response = await octokit.repos.listWebhooks({
1821
+ owner: params.owner,
1822
+ repo: params.repo,
1823
+ });
1824
+ return response.data;
1825
+ }
1826
+ async function createWebhook(params) {
1827
+ const response = await octokit.repos.createWebhook({
1828
+ owner: params.owner,
1829
+ repo: params.repo,
1830
+ config: {
1831
+ url: params.url,
1832
+ content_type: params.content_type || 'json',
1833
+ secret: params.secret,
1834
+ },
1835
+ events: params.events || ['push'],
1836
+ active: params.active ?? true,
1837
+ });
1838
+ return response.data;
1839
+ }
1840
+ async function deleteWebhook(params) {
1841
+ await octokit.repos.deleteWebhook({
1842
+ owner: params.owner,
1843
+ repo: params.repo,
1844
+ hook_id: Number(params.hook_id),
1845
+ });
1846
+ return { message: `Deleted webhook ${params.hook_id}` };
1847
+ }
1848
+ // Notifications
1849
+ async function listNotifications(params) {
1850
+ const response = await octokit.activity.listNotificationsForAuthenticatedUser({
1851
+ all: params.all,
1852
+ participating: params.participating,
1853
+ page: Number(params.page) || undefined,
1854
+ per_page: Number(params.per_page) || undefined,
1855
+ });
1856
+ return response.data;
1857
+ }
1858
+ async function markNotificationsRead(params) {
1859
+ await octokit.activity.markNotificationsAsRead({
1860
+ last_read_at: params.last_read_at,
1861
+ });
1862
+ return { message: 'Marked notifications as read' };
1863
+ }
1864
+ // Commits
1865
+ async function getCommit(params) {
1866
+ const response = await octokit.repos.getCommit({
1867
+ owner: params.owner,
1868
+ repo: params.repo,
1869
+ ref: params.ref,
1870
+ });
1871
+ return response.data;
1872
+ }
1873
+ async function compareCommits(params) {
1874
+ const response = await octokit.repos.compareCommits({
1875
+ owner: params.owner,
1876
+ repo: params.repo,
1877
+ base: params.base,
1878
+ head: params.head,
1879
+ });
1880
+ return response.data;
1881
+ }
1882
+ // Issue Comments
1883
+ async function listIssueComments(params) {
1884
+ const response = await octokit.issues.listComments({
1885
+ owner: params.owner,
1886
+ repo: params.repo,
1887
+ issue_number: Number(params.issue_number),
1888
+ page: Number(params.page) || undefined,
1889
+ per_page: Number(params.per_page) || undefined,
1890
+ });
1891
+ return response.data;
1892
+ }
1893
+ async function updateIssueComment(params) {
1894
+ const response = await octokit.issues.updateComment({
1895
+ owner: params.owner,
1896
+ repo: params.repo,
1897
+ comment_id: Number(params.comment_id),
1898
+ body: params.body,
1899
+ });
1900
+ return response.data;
1901
+ }
1902
+ async function deleteIssueComment(params) {
1903
+ await octokit.issues.deleteComment({
1904
+ owner: params.owner,
1905
+ repo: params.repo,
1906
+ comment_id: Number(params.comment_id),
1907
+ });
1908
+ return { message: `Deleted comment ${params.comment_id}` };
1909
+ }
1910
+ // PR additional actions
1911
+ async function updatePullRequest(params) {
1912
+ const response = await octokit.pulls.update({
1913
+ owner: params.owner,
1914
+ repo: params.repo,
1915
+ pull_number: Number(params.pull_number),
1916
+ title: params.title,
1917
+ body: params.body,
1918
+ state: params.state,
1919
+ base: params.base,
1920
+ });
1921
+ return response.data;
1922
+ }
1923
+ async function requestReviewers(params) {
1924
+ const response = await octokit.pulls.requestReviewers({
1925
+ owner: params.owner,
1926
+ repo: params.repo,
1927
+ pull_number: Number(params.pull_number),
1928
+ reviewers: params.reviewers,
1929
+ team_reviewers: params.team_reviewers,
1930
+ });
1931
+ return response.data;
1932
+ }
1933
+ // Check runs
1934
+ async function listCheckRuns(params) {
1935
+ const response = await octokit.checks.listForRef({
1936
+ owner: params.owner,
1937
+ repo: params.repo,
1938
+ ref: params.ref,
1939
+ page: Number(params.page) || undefined,
1940
+ per_page: Number(params.per_page) || undefined,
1941
+ });
1942
+ return response.data;
1943
+ }
1944
+ // Forks
1945
+ async function listForks(params) {
1946
+ const response = await octokit.repos.listForks({
1947
+ owner: params.owner,
1948
+ repo: params.repo,
1949
+ sort: params.sort,
1950
+ page: Number(params.page) || undefined,
1951
+ per_page: Number(params.per_page) || undefined,
1952
+ });
1953
+ return response.data;
1954
+ }
1955
+ // Traffic
1956
+ async function getTrafficViews(params) {
1957
+ const response = await octokit.repos.getViews({
1958
+ owner: params.owner,
1959
+ repo: params.repo,
1960
+ per: params.per,
1961
+ });
1962
+ return response.data;
1963
+ }
1964
+ async function getTrafficClones(params) {
1965
+ const response = await octokit.repos.getClones({
1966
+ owner: params.owner,
1967
+ repo: params.repo,
1968
+ per: params.per,
1969
+ });
1970
+ return response.data;
1971
+ }
1972
+ async function getTopReferrers(params) {
1973
+ const response = await octokit.repos.getTopReferrers({
1974
+ owner: params.owner,
1975
+ repo: params.repo,
1976
+ });
1977
+ return response.data;
1978
+ }
1979
+ async function getTopPaths(params) {
1980
+ const response = await octokit.repos.getTopPaths({
1981
+ owner: params.owner,
1982
+ repo: params.repo,
1983
+ });
1984
+ return response.data;
1985
+ }
1986
+ export const githubBackend = {
1987
+ name: 'github',
1988
+ description: 'GitHub API: repositories, files, branches, issues, pull requests, reviews, and search',
1989
+ actions,
1990
+ async execute(action, params) {
1991
+ switch (action) {
1992
+ // Search
1993
+ case 'search_repositories': return searchRepositories(params);
1994
+ case 'search_code': return searchCode(params);
1995
+ case 'search_users': return searchUsers(params);
1996
+ case 'search_issues': return searchIssues(params);
1997
+ // Repository
1998
+ case 'create_repository': return createRepository(params);
1999
+ case 'get_repository': return getRepository(params);
2000
+ case 'update_repository': return updateRepository(params);
2001
+ case 'delete_repository': return deleteRepository(params);
2002
+ case 'list_user_repositories': return listUserRepositories(params);
2003
+ case 'fork_repository': return forkRepository(params);
2004
+ case 'list_forks': return listForks(params);
2005
+ // Files
2006
+ case 'get_file_contents': return getFileContents(params);
2007
+ case 'create_or_update_file': return createOrUpdateFile(params);
2008
+ case 'push_files': return pushFiles(params);
2009
+ case 'get_readme': return getReadme(params);
2010
+ // Branches
2011
+ case 'create_branch': return createBranch(params);
2012
+ case 'list_branches': return listBranches(params);
2013
+ case 'get_branch': return getBranch(params);
2014
+ case 'delete_branch': return deleteBranch(params);
2015
+ case 'list_tags': return listTags(params);
2016
+ // Commits
2017
+ case 'list_commits': return listCommits(params);
2018
+ case 'get_commit': return getCommit(params);
2019
+ case 'compare_commits': return compareCommits(params);
2020
+ // Topics & Languages
2021
+ case 'list_topics': return listTopics(params);
2022
+ case 'update_topics': return updateTopics(params);
2023
+ case 'list_languages': return listLanguages(params);
2024
+ case 'list_contributors': return listContributors(params);
2025
+ // Issues
2026
+ case 'create_issue': return createIssue(params);
2027
+ case 'get_issue': return getIssue(params);
2028
+ case 'list_issues': return listIssues(params);
2029
+ case 'update_issue': return updateIssue(params);
2030
+ case 'add_issue_comment': return addIssueComment(params);
2031
+ case 'list_issue_comments': return listIssueComments(params);
2032
+ case 'update_issue_comment': return updateIssueComment(params);
2033
+ case 'delete_issue_comment': return deleteIssueComment(params);
2034
+ // Pull Requests
2035
+ case 'create_pull_request': return createPullRequest(params);
2036
+ case 'get_pull_request': return getPullRequest(params);
2037
+ case 'list_pull_requests': return listPullRequests(params);
2038
+ case 'update_pull_request': return updatePullRequest(params);
2039
+ case 'merge_pull_request': return mergePullRequest(params);
2040
+ case 'get_pull_request_files': return getPullRequestFiles(params);
2041
+ case 'get_pull_request_status': return getPullRequestStatus(params);
2042
+ case 'get_pull_request_comments': return getPullRequestComments(params);
2043
+ case 'get_pull_request_reviews': return getPullRequestReviews(params);
2044
+ case 'create_pull_request_review': return createPullRequestReview(params);
2045
+ case 'update_pull_request_branch': return updatePullRequestBranch(params);
2046
+ case 'request_reviewers': return requestReviewers(params);
2047
+ // Releases
2048
+ case 'list_releases': return listReleases(params);
2049
+ case 'get_release': return getRelease(params);
2050
+ case 'get_latest_release': return getLatestRelease(params);
2051
+ case 'get_release_by_tag': return getReleaseByTag(params);
2052
+ case 'create_release': return createRelease(params);
2053
+ case 'update_release': return updateRelease(params);
2054
+ case 'delete_release': return deleteRelease(params);
2055
+ case 'list_release_assets': return listReleaseAssets(params);
2056
+ // Labels
2057
+ case 'list_labels': return listLabels(params);
2058
+ case 'create_label': return createLabel(params);
2059
+ case 'update_label': return updateLabel(params);
2060
+ case 'delete_label': return deleteLabel(params);
2061
+ // Milestones
2062
+ case 'list_milestones': return listMilestones(params);
2063
+ case 'create_milestone': return createMilestone(params);
2064
+ case 'update_milestone': return updateMilestone(params);
2065
+ case 'delete_milestone': return deleteMilestone(params);
2066
+ // GitHub Actions
2067
+ case 'list_workflows': return listWorkflows(params);
2068
+ case 'get_workflow': return getWorkflow(params);
2069
+ case 'list_workflow_runs': return listWorkflowRuns(params);
2070
+ case 'get_workflow_run': return getWorkflowRun(params);
2071
+ case 'rerun_workflow': return rerunWorkflow(params);
2072
+ case 'cancel_workflow_run': return cancelWorkflowRun(params);
2073
+ case 'list_workflow_jobs': return listWorkflowJobs(params);
2074
+ case 'trigger_workflow': return triggerWorkflow(params);
2075
+ // Gists
2076
+ case 'list_gists': return listGists(params);
2077
+ case 'create_gist': return createGist(params);
2078
+ case 'get_gist': return getGist(params);
2079
+ case 'update_gist': return updateGist(params);
2080
+ case 'delete_gist': return deleteGist(params);
2081
+ // Stars & Watch
2082
+ case 'star_repository': return starRepository(params);
2083
+ case 'unstar_repository': return unstarRepository(params);
2084
+ case 'list_stargazers': return listStargazers(params);
2085
+ case 'list_watchers': return listWatchers(params);
2086
+ // User
2087
+ case 'get_authenticated_user': return getAuthenticatedUser();
2088
+ case 'get_user': return getUser(params);
2089
+ case 'list_user_orgs': return listUserOrgs(params);
2090
+ // Organizations
2091
+ case 'get_organization': return getOrganization(params);
2092
+ case 'list_org_repositories': return listOrgRepositories(params);
2093
+ case 'list_org_members': return listOrgMembers(params);
2094
+ // Collaborators
2095
+ case 'add_collaborator': return addCollaborator(params);
2096
+ case 'remove_collaborator': return removeCollaborator(params);
2097
+ case 'list_collaborators': return listCollaborators(params);
2098
+ // Webhooks
2099
+ case 'list_webhooks': return listWebhooks(params);
2100
+ case 'create_webhook': return createWebhook(params);
2101
+ case 'delete_webhook': return deleteWebhook(params);
2102
+ // Notifications
2103
+ case 'list_notifications': return listNotifications(params);
2104
+ case 'mark_notifications_read': return markNotificationsRead(params);
2105
+ // Check runs
2106
+ case 'list_check_runs': return listCheckRuns(params);
2107
+ // Traffic
2108
+ case 'get_traffic_views': return getTrafficViews(params);
2109
+ case 'get_traffic_clones': return getTrafficClones(params);
2110
+ case 'get_top_referrers': return getTopReferrers(params);
2111
+ case 'get_top_paths': return getTopPaths(params);
2112
+ default:
2113
+ throw new Error(`Unknown action: ${action}`);
2114
+ }
2115
+ },
2116
+ async healthCheck() {
2117
+ if (!GITHUB_TOKEN) {
2118
+ return { status: 'unavailable', latency_ms: 0, error: 'GITHUB_PERSONAL_ACCESS_TOKEN not configured' };
2119
+ }
2120
+ try {
2121
+ await octokit.users.getAuthenticated();
2122
+ return { status: 'healthy', latency_ms: 0 };
2123
+ }
2124
+ catch (error) {
2125
+ return { status: 'unavailable', latency_ms: 0, error: error instanceof Error ? error.message : String(error) };
2126
+ }
2127
+ },
2128
+ };
2129
+ //# sourceMappingURL=github.js.map