@framers/agentos-ext-github 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/LICENSE +23 -0
  2. package/dist/GitHubService.d.ts +15 -0
  3. package/dist/GitHubService.d.ts.map +1 -0
  4. package/dist/GitHubService.js +28 -0
  5. package/dist/GitHubService.js.map +1 -0
  6. package/dist/index.d.ts +48 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +84 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/tools/fileRead.d.ts +45 -0
  11. package/dist/tools/fileRead.d.ts.map +1 -0
  12. package/dist/tools/fileRead.js +75 -0
  13. package/dist/tools/fileRead.js.map +1 -0
  14. package/dist/tools/gistCreate.d.ts +43 -0
  15. package/dist/tools/gistCreate.d.ts.map +1 -0
  16. package/dist/tools/gistCreate.js +53 -0
  17. package/dist/tools/gistCreate.js.map +1 -0
  18. package/dist/tools/issueCreate.d.ts +61 -0
  19. package/dist/tools/issueCreate.d.ts.map +1 -0
  20. package/dist/tools/issueCreate.js +59 -0
  21. package/dist/tools/issueCreate.js.map +1 -0
  22. package/dist/tools/issueList.d.ts +51 -0
  23. package/dist/tools/issueList.d.ts.map +1 -0
  24. package/dist/tools/issueList.js +59 -0
  25. package/dist/tools/issueList.js.map +1 -0
  26. package/dist/tools/prCreate.d.ts +60 -0
  27. package/dist/tools/prCreate.d.ts.map +1 -0
  28. package/dist/tools/prCreate.js +54 -0
  29. package/dist/tools/prCreate.js.map +1 -0
  30. package/dist/tools/prList.d.ts +56 -0
  31. package/dist/tools/prList.d.ts.map +1 -0
  32. package/dist/tools/prList.js +61 -0
  33. package/dist/tools/prList.js.map +1 -0
  34. package/dist/tools/search.d.ts +41 -0
  35. package/dist/tools/search.d.ts.map +1 -0
  36. package/dist/tools/search.js +102 -0
  37. package/dist/tools/search.js.map +1 -0
  38. package/manifest.json +25 -0
  39. package/package.json +50 -0
package/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Framers
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @fileoverview Octokit wrapper for the GitHub extension.
3
+ * Manages token-based authentication and provides the Octokit client.
4
+ */
5
+ import { Octokit } from '@octokit/rest';
6
+ export declare class GitHubService {
7
+ private octokit;
8
+ private readonly token;
9
+ private username;
10
+ constructor(token: string);
11
+ initialize(): Promise<void>;
12
+ getOctokit(): Octokit;
13
+ getUsername(): string;
14
+ }
15
+ //# sourceMappingURL=GitHubService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubService.d.ts","sourceRoot":"","sources":["../src/GitHubService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAM;gBAEV,KAAK,EAAE,MAAM;IAInB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC,UAAU,IAAI,OAAO;IAKrB,WAAW,IAAI,MAAM;CAGtB"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @fileoverview Octokit wrapper for the GitHub extension.
3
+ * Manages token-based authentication and provides the Octokit client.
4
+ */
5
+ import { Octokit } from '@octokit/rest';
6
+ export class GitHubService {
7
+ octokit = null;
8
+ token;
9
+ username = '';
10
+ constructor(token) {
11
+ this.token = token;
12
+ }
13
+ async initialize() {
14
+ this.octokit = new Octokit({ auth: this.token });
15
+ // Validate token with a lightweight call
16
+ const { data } = await this.octokit.rest.users.getAuthenticated();
17
+ this.username = data.login;
18
+ }
19
+ getOctokit() {
20
+ if (!this.octokit)
21
+ throw new Error('GitHubService not initialized');
22
+ return this.octokit;
23
+ }
24
+ getUsername() {
25
+ return this.username;
26
+ }
27
+ }
28
+ //# sourceMappingURL=GitHubService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubService.js","sourceRoot":"","sources":["../src/GitHubService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,OAAO,aAAa;IAChB,OAAO,GAAmB,IAAI,CAAC;IACtB,KAAK,CAAS;IACvB,QAAQ,GAAG,EAAE,CAAC;IAEtB,YAAY,KAAa;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACjD,yCAAyC;QACzC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAClE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @fileoverview GitHub Extension for AgentOS.
3
+ *
4
+ * Provides GitHub API tools for searching, managing issues/PRs,
5
+ * reading files, and creating gists.
6
+ *
7
+ * @module @framers/agentos-ext-github
8
+ */
9
+ import { GitHubSearchTool } from './tools/search.js';
10
+ import { GitHubIssueListTool } from './tools/issueList.js';
11
+ import { GitHubIssueCreateTool } from './tools/issueCreate.js';
12
+ import { GitHubPrListTool } from './tools/prList.js';
13
+ import { GitHubPrCreateTool } from './tools/prCreate.js';
14
+ import { GitHubFileReadTool } from './tools/fileRead.js';
15
+ import { GitHubGistCreateTool } from './tools/gistCreate.js';
16
+ export interface GitHubExtensionOptions {
17
+ token?: string;
18
+ priority?: number;
19
+ }
20
+ export declare function createExtensionPack(context: {
21
+ options?: Record<string, unknown>;
22
+ secrets?: Record<string, string>;
23
+ logger?: {
24
+ info: (...args: unknown[]) => void;
25
+ };
26
+ [key: string]: unknown;
27
+ }): {
28
+ name: string;
29
+ version: string;
30
+ descriptors: {
31
+ id: string;
32
+ kind: "tool";
33
+ priority: number;
34
+ payload: GitHubSearchTool | GitHubIssueListTool | GitHubIssueCreateTool | GitHubPrListTool | GitHubPrCreateTool | GitHubFileReadTool | GitHubGistCreateTool;
35
+ }[];
36
+ onActivate: () => Promise<void>;
37
+ onDeactivate: () => Promise<void>;
38
+ };
39
+ export { GitHubService } from './GitHubService.js';
40
+ export { GitHubSearchTool } from './tools/search.js';
41
+ export { GitHubIssueListTool } from './tools/issueList.js';
42
+ export { GitHubIssueCreateTool } from './tools/issueCreate.js';
43
+ export { GitHubPrListTool } from './tools/prList.js';
44
+ export { GitHubPrCreateTool } from './tools/prCreate.js';
45
+ export { GitHubFileReadTool } from './tools/fileRead.js';
46
+ export { GitHubGistCreateTool } from './tools/gistCreate.js';
47
+ export default createExtensionPack;
48
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA6BD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAAC;IAChD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;;;;;;;;;;;EAqCA;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,eAAe,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @fileoverview GitHub Extension for AgentOS.
3
+ *
4
+ * Provides GitHub API tools for searching, managing issues/PRs,
5
+ * reading files, and creating gists.
6
+ *
7
+ * @module @framers/agentos-ext-github
8
+ */
9
+ import { execSync } from 'node:child_process';
10
+ import { GitHubService } from './GitHubService.js';
11
+ import { GitHubSearchTool } from './tools/search.js';
12
+ import { GitHubIssueListTool } from './tools/issueList.js';
13
+ import { GitHubIssueCreateTool } from './tools/issueCreate.js';
14
+ import { GitHubPrListTool } from './tools/prList.js';
15
+ import { GitHubPrCreateTool } from './tools/prCreate.js';
16
+ import { GitHubFileReadTool } from './tools/fileRead.js';
17
+ import { GitHubGistCreateTool } from './tools/gistCreate.js';
18
+ function resolveToken(options, secrets) {
19
+ if (options.token)
20
+ return options.token;
21
+ if (secrets?.['github.token'])
22
+ return secrets['github.token'];
23
+ if (process.env.GITHUB_TOKEN)
24
+ return process.env.GITHUB_TOKEN;
25
+ if (process.env.GH_TOKEN)
26
+ return process.env.GH_TOKEN;
27
+ // Fallback: try gh CLI auth
28
+ try {
29
+ const token = execSync('gh auth token', {
30
+ encoding: 'utf8',
31
+ timeout: 5000,
32
+ stdio: ['pipe', 'pipe', 'pipe'],
33
+ }).trim();
34
+ if (token)
35
+ return token;
36
+ }
37
+ catch {
38
+ // gh not installed or not authenticated
39
+ }
40
+ throw new Error('GitHub token not found. Provide via options.token, secrets["github.token"], ' +
41
+ 'GITHUB_TOKEN env var, or authenticate with `gh auth login`.');
42
+ }
43
+ export function createExtensionPack(context) {
44
+ const options = (context.options ?? {});
45
+ const token = resolveToken(options, options.secrets ?? context.secrets);
46
+ const service = new GitHubService(token);
47
+ const priority = options.priority ?? 30;
48
+ const tools = [
49
+ new GitHubSearchTool(service),
50
+ new GitHubIssueListTool(service),
51
+ new GitHubIssueCreateTool(service),
52
+ new GitHubPrListTool(service),
53
+ new GitHubPrCreateTool(service),
54
+ new GitHubFileReadTool(service),
55
+ new GitHubGistCreateTool(service),
56
+ ];
57
+ return {
58
+ name: '@framers/agentos-ext-github',
59
+ version: '0.1.0',
60
+ descriptors: tools.map((tool) => ({
61
+ id: tool.name,
62
+ kind: 'tool',
63
+ priority,
64
+ payload: tool,
65
+ })),
66
+ onActivate: async () => {
67
+ await service.initialize();
68
+ context.logger?.info(`[GitHub] Extension activated (user: ${service.getUsername()})`);
69
+ },
70
+ onDeactivate: async () => {
71
+ context.logger?.info('[GitHub] Extension deactivated');
72
+ },
73
+ };
74
+ }
75
+ export { GitHubService } from './GitHubService.js';
76
+ export { GitHubSearchTool } from './tools/search.js';
77
+ export { GitHubIssueListTool } from './tools/issueList.js';
78
+ export { GitHubIssueCreateTool } from './tools/issueCreate.js';
79
+ export { GitHubPrListTool } from './tools/prList.js';
80
+ export { GitHubPrCreateTool } from './tools/prCreate.js';
81
+ export { GitHubFileReadTool } from './tools/fileRead.js';
82
+ export { GitHubGistCreateTool } from './tools/gistCreate.js';
83
+ export default createExtensionPack;
84
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAO7D,SAAS,YAAY,CACnB,OAA+B,EAC/B,OAAgC;IAEhC,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC;IACxC,IAAI,OAAO,EAAE,CAAC,cAAc,CAAC;QAAE,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC;IAC9D,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC9D,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAEtD,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,EAAE;YACtC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;IAC1C,CAAC;IAED,MAAM,IAAI,KAAK,CACb,8EAA8E;QAC9E,6DAA6D,CAC9D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAKnC;IACC,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAErC,CAAC;IACF,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IAExC,MAAM,KAAK,GAAG;QACZ,IAAI,gBAAgB,CAAC,OAAO,CAAC;QAC7B,IAAI,mBAAmB,CAAC,OAAO,CAAC;QAChC,IAAI,qBAAqB,CAAC,OAAO,CAAC;QAClC,IAAI,gBAAgB,CAAC,OAAO,CAAC;QAC7B,IAAI,kBAAkB,CAAC,OAAO,CAAC;QAC/B,IAAI,kBAAkB,CAAC,OAAO,CAAC;QAC/B,IAAI,oBAAoB,CAAC,OAAO,CAAC;KAClC,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChC,EAAE,EAAE,IAAI,CAAC,IAAI;YACb,IAAI,EAAE,MAAe;YACrB,QAAQ;YACR,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,UAAU,EAAE,KAAK,IAAI,EAAE;YACrB,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,uCAAuC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACxF,CAAC;QAED,YAAY,EAAE,KAAK,IAAI,EAAE;YACvB,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACzD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @fileoverview GitHub File Read tool — read file contents from a repository.
3
+ */
4
+ import type { GitHubService } from '../GitHubService.js';
5
+ export declare class GitHubFileReadTool {
6
+ private readonly service;
7
+ readonly name = "github_file_read";
8
+ readonly description = "Read the contents of a file from a GitHub repository. Returns decoded UTF-8 text.";
9
+ readonly category = "developer";
10
+ readonly hasSideEffects = false;
11
+ readonly inputSchema: {
12
+ type: "object";
13
+ required: readonly ["owner", "repo", "path"];
14
+ properties: {
15
+ owner: {
16
+ type: "string";
17
+ description: string;
18
+ };
19
+ repo: {
20
+ type: "string";
21
+ description: string;
22
+ };
23
+ path: {
24
+ type: "string";
25
+ description: string;
26
+ };
27
+ ref: {
28
+ type: "string";
29
+ description: string;
30
+ };
31
+ };
32
+ };
33
+ constructor(service: GitHubService);
34
+ execute(args: {
35
+ owner: string;
36
+ repo: string;
37
+ path: string;
38
+ ref?: string;
39
+ }): Promise<{
40
+ success: boolean;
41
+ data?: unknown;
42
+ error?: string;
43
+ }>;
44
+ }
45
+ //# sourceMappingURL=fileRead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileRead.d.ts","sourceRoot":"","sources":["../../src/tools/fileRead.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,kBAAkB;IAiBjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhBpC,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,WAAW,uFAAuF;IAC3G,QAAQ,CAAC,QAAQ,eAAe;IAChC,QAAQ,CAAC,cAAc,SAAS;IAEhC,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;MASlB;gBAE2B,OAAO,EAAE,aAAa;IAE7C,OAAO,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAqDlE"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @fileoverview GitHub File Read tool — read file contents from a repository.
3
+ */
4
+ export class GitHubFileReadTool {
5
+ service;
6
+ name = 'github_file_read';
7
+ description = 'Read the contents of a file from a GitHub repository. Returns decoded UTF-8 text.';
8
+ category = 'developer';
9
+ hasSideEffects = false;
10
+ inputSchema = {
11
+ type: 'object',
12
+ required: ['owner', 'repo', 'path'],
13
+ properties: {
14
+ owner: { type: 'string', description: 'Repository owner (user or org)' },
15
+ repo: { type: 'string', description: 'Repository name' },
16
+ path: { type: 'string', description: 'File path within the repository' },
17
+ ref: { type: 'string', description: 'Branch, tag, or commit SHA (default: default branch)' },
18
+ },
19
+ };
20
+ constructor(service) {
21
+ this.service = service;
22
+ }
23
+ async execute(args) {
24
+ try {
25
+ const octokit = this.service.getOctokit();
26
+ const { data } = await octokit.rest.repos.getContent({
27
+ owner: args.owner,
28
+ repo: args.repo,
29
+ path: args.path,
30
+ ref: args.ref,
31
+ });
32
+ // getContent can return a file or directory listing
33
+ if (Array.isArray(data)) {
34
+ return {
35
+ success: true,
36
+ data: {
37
+ type: 'directory',
38
+ entries: data.map((e) => ({
39
+ name: e.name,
40
+ path: e.path,
41
+ type: e.type,
42
+ size: e.size,
43
+ })),
44
+ },
45
+ };
46
+ }
47
+ if (data.type === 'file' && 'content' in data) {
48
+ const content = Buffer.from(data.content, 'base64').toString('utf8');
49
+ return {
50
+ success: true,
51
+ data: {
52
+ type: 'file',
53
+ path: data.path,
54
+ size: data.size,
55
+ encoding: 'utf-8',
56
+ content,
57
+ sha: data.sha,
58
+ },
59
+ };
60
+ }
61
+ return {
62
+ success: true,
63
+ data: {
64
+ type: data.type,
65
+ path: data.path,
66
+ size: data.size,
67
+ },
68
+ };
69
+ }
70
+ catch (err) {
71
+ return { success: false, error: err instanceof Error ? err.message : String(err) };
72
+ }
73
+ }
74
+ }
75
+ //# sourceMappingURL=fileRead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileRead.js","sourceRoot":"","sources":["../../src/tools/fileRead.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @fileoverview GitHub Gist Create tool — create a new gist.
3
+ */
4
+ import type { GitHubService } from '../GitHubService.js';
5
+ export declare class GitHubGistCreateTool {
6
+ private readonly service;
7
+ readonly name = "github_gist_create";
8
+ readonly description = "Create a new GitHub gist with one or more files.";
9
+ readonly category = "developer";
10
+ readonly hasSideEffects = true;
11
+ readonly inputSchema: {
12
+ type: "object";
13
+ required: readonly ["files"];
14
+ properties: {
15
+ description: {
16
+ type: "string";
17
+ description: string;
18
+ };
19
+ files: {
20
+ type: "object";
21
+ description: string;
22
+ additionalProperties: {
23
+ type: "string";
24
+ };
25
+ };
26
+ public: {
27
+ type: "boolean";
28
+ description: string;
29
+ };
30
+ };
31
+ };
32
+ constructor(service: GitHubService);
33
+ execute(args: {
34
+ description?: string;
35
+ files: Record<string, string>;
36
+ public?: boolean;
37
+ }): Promise<{
38
+ success: boolean;
39
+ data?: unknown;
40
+ error?: string;
41
+ }>;
42
+ }
43
+ //# sourceMappingURL=gistCreate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gistCreate.d.ts","sourceRoot":"","sources":["../../src/tools/gistCreate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,oBAAoB;IAoBnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAnBpC,QAAQ,CAAC,IAAI,wBAAwB;IACrC,QAAQ,CAAC,WAAW,sDAAsD;IAC1E,QAAQ,CAAC,QAAQ,eAAe;IAChC,QAAQ,CAAC,cAAc,QAAQ;IAE/B,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;MAYlB;gBAE2B,OAAO,EAAE,aAAa;IAE7C,OAAO,CAAC,IAAI,EAAE;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CA2BlE"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @fileoverview GitHub Gist Create tool — create a new gist.
3
+ */
4
+ export class GitHubGistCreateTool {
5
+ service;
6
+ name = 'github_gist_create';
7
+ description = 'Create a new GitHub gist with one or more files.';
8
+ category = 'developer';
9
+ hasSideEffects = true;
10
+ inputSchema = {
11
+ type: 'object',
12
+ required: ['files'],
13
+ properties: {
14
+ description: { type: 'string', description: 'Gist description' },
15
+ files: {
16
+ type: 'object',
17
+ description: 'Map of filename to content. Example: {"main.py": "print(\'hello\')"}',
18
+ additionalProperties: { type: 'string' },
19
+ },
20
+ public: { type: 'boolean', description: 'Whether the gist is public (default: false)' },
21
+ },
22
+ };
23
+ constructor(service) {
24
+ this.service = service;
25
+ }
26
+ async execute(args) {
27
+ try {
28
+ const octokit = this.service.getOctokit();
29
+ const gistFiles = {};
30
+ for (const [name, content] of Object.entries(args.files)) {
31
+ gistFiles[name] = { content };
32
+ }
33
+ const { data } = await octokit.rest.gists.create({
34
+ description: args.description ?? '',
35
+ public: args.public ?? false,
36
+ files: gistFiles,
37
+ });
38
+ return {
39
+ success: true,
40
+ data: {
41
+ id: data.id,
42
+ url: data.html_url,
43
+ files: Object.keys(data.files ?? {}),
44
+ public: data.public,
45
+ },
46
+ };
47
+ }
48
+ catch (err) {
49
+ return { success: false, error: err instanceof Error ? err.message : String(err) };
50
+ }
51
+ }
52
+ }
53
+ //# sourceMappingURL=gistCreate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gistCreate.js","sourceRoot":"","sources":["../../src/tools/gistCreate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,OAAO,oBAAoB;IAoBF;IAnBpB,IAAI,GAAG,oBAAoB,CAAC;IAC5B,WAAW,GAAG,kDAAkD,CAAC;IACjE,QAAQ,GAAG,WAAW,CAAC;IACvB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,QAAQ,EAAE,CAAC,OAAO,CAAU;QAC5B,UAAU,EAAE;YACV,WAAW,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,kBAAkB,EAAE;YACzE,KAAK,EAAE;gBACL,IAAI,EAAE,QAAiB;gBACvB,WAAW,EAAE,sEAAsE;gBACnF,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;aAClD;YACD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,WAAW,EAAE,6CAA6C,EAAE;SACjG;KACF,CAAC;IAEF,YAA6B,OAAsB;QAAtB,YAAO,GAAP,OAAO,CAAe;IAAG,CAAC;IAEvD,KAAK,CAAC,OAAO,CAAC,IAIb;QACC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAwC,EAAE,CAAC;YAC1D,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;YAChC,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC/C,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;gBACnC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;gBAC5B,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,GAAG,EAAE,IAAI,CAAC,QAAQ;oBAClB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBACpC,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACrF,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @fileoverview GitHub Issue Create tool — create a new issue.
3
+ */
4
+ import type { GitHubService } from '../GitHubService.js';
5
+ export declare class GitHubIssueCreateTool {
6
+ private readonly service;
7
+ readonly name = "github_issue_create";
8
+ readonly description = "Create a new issue in a GitHub repository.";
9
+ readonly category = "developer";
10
+ readonly hasSideEffects = true;
11
+ readonly inputSchema: {
12
+ type: "object";
13
+ required: readonly ["owner", "repo", "title"];
14
+ properties: {
15
+ owner: {
16
+ type: "string";
17
+ description: string;
18
+ };
19
+ repo: {
20
+ type: "string";
21
+ description: string;
22
+ };
23
+ title: {
24
+ type: "string";
25
+ description: string;
26
+ };
27
+ body: {
28
+ type: "string";
29
+ description: string;
30
+ };
31
+ labels: {
32
+ type: "array";
33
+ items: {
34
+ type: "string";
35
+ };
36
+ description: string;
37
+ };
38
+ assignees: {
39
+ type: "array";
40
+ items: {
41
+ type: "string";
42
+ };
43
+ description: string;
44
+ };
45
+ };
46
+ };
47
+ constructor(service: GitHubService);
48
+ execute(args: {
49
+ owner: string;
50
+ repo: string;
51
+ title: string;
52
+ body?: string;
53
+ labels?: string[];
54
+ assignees?: string[];
55
+ }): Promise<{
56
+ success: boolean;
57
+ data?: unknown;
58
+ error?: string;
59
+ }>;
60
+ }
61
+ //# sourceMappingURL=issueCreate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issueCreate.d.ts","sourceRoot":"","sources":["../../src/tools/issueCreate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,qBAAqB;IA2BpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IA1BpC,QAAQ,CAAC,IAAI,yBAAyB;IACtC,QAAQ,CAAC,WAAW,gDAAgD;IACpE,QAAQ,CAAC,QAAQ,eAAe;IAChC,QAAQ,CAAC,cAAc,QAAQ;IAE/B,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmBlB;gBAE2B,OAAO,EAAE,aAAa;IAE7C,OAAO,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAyBlE"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @fileoverview GitHub Issue Create tool — create a new issue.
3
+ */
4
+ export class GitHubIssueCreateTool {
5
+ service;
6
+ name = 'github_issue_create';
7
+ description = 'Create a new issue in a GitHub repository.';
8
+ category = 'developer';
9
+ hasSideEffects = true;
10
+ inputSchema = {
11
+ type: 'object',
12
+ required: ['owner', 'repo', 'title'],
13
+ properties: {
14
+ owner: { type: 'string', description: 'Repository owner (user or org)' },
15
+ repo: { type: 'string', description: 'Repository name' },
16
+ title: { type: 'string', description: 'Issue title' },
17
+ body: { type: 'string', description: 'Issue body (Markdown supported)' },
18
+ labels: {
19
+ type: 'array',
20
+ items: { type: 'string' },
21
+ description: 'Labels to apply',
22
+ },
23
+ assignees: {
24
+ type: 'array',
25
+ items: { type: 'string' },
26
+ description: 'GitHub usernames to assign',
27
+ },
28
+ },
29
+ };
30
+ constructor(service) {
31
+ this.service = service;
32
+ }
33
+ async execute(args) {
34
+ try {
35
+ const octokit = this.service.getOctokit();
36
+ const { data } = await octokit.rest.issues.create({
37
+ owner: args.owner,
38
+ repo: args.repo,
39
+ title: args.title,
40
+ body: args.body,
41
+ labels: args.labels,
42
+ assignees: args.assignees,
43
+ });
44
+ return {
45
+ success: true,
46
+ data: {
47
+ number: data.number,
48
+ title: data.title,
49
+ url: data.html_url,
50
+ state: data.state,
51
+ },
52
+ };
53
+ }
54
+ catch (err) {
55
+ return { success: false, error: err instanceof Error ? err.message : String(err) };
56
+ }
57
+ }
58
+ }
59
+ //# sourceMappingURL=issueCreate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issueCreate.js","sourceRoot":"","sources":["../../src/tools/issueCreate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,OAAO,qBAAqB;IA2BH;IA1BpB,IAAI,GAAG,qBAAqB,CAAC;IAC7B,WAAW,GAAG,4CAA4C,CAAC;IAC3D,QAAQ,GAAG,WAAW,CAAC;IACvB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAU;QAC7C,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,gCAAgC,EAAE;YACjF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE;YACjE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,aAAa,EAAE;YAC9D,IAAI,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,iCAAiC,EAAE;YACjF,MAAM,EAAE;gBACN,IAAI,EAAE,OAAgB;gBACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;gBAClC,WAAW,EAAE,iBAAiB;aAC/B;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,OAAgB;gBACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;gBAClC,WAAW,EAAE,4BAA4B;aAC1C;SACF;KACF,CAAC;IAEF,YAA6B,OAAsB;QAAtB,YAAO,GAAP,OAAO,CAAe;IAAG,CAAC;IAEvD,KAAK,CAAC,OAAO,CAAC,IAOb;QACC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBAChD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,GAAG,EAAE,IAAI,CAAC,QAAQ;oBAClB,KAAK,EAAE,IAAI,CAAC,KAAK;iBAClB;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACrF,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @fileoverview GitHub Issue List tool — list issues for a repository.
3
+ */
4
+ import type { GitHubService } from '../GitHubService.js';
5
+ export declare class GitHubIssueListTool {
6
+ private readonly service;
7
+ readonly name = "github_issue_list";
8
+ readonly description = "List issues for a GitHub repository. Supports filtering by state and labels.";
9
+ readonly category = "developer";
10
+ readonly hasSideEffects = false;
11
+ readonly inputSchema: {
12
+ type: "object";
13
+ required: readonly ["owner", "repo"];
14
+ properties: {
15
+ owner: {
16
+ type: "string";
17
+ description: string;
18
+ };
19
+ repo: {
20
+ type: "string";
21
+ description: string;
22
+ };
23
+ state: {
24
+ type: "string";
25
+ enum: readonly ["open", "closed", "all"];
26
+ description: string;
27
+ };
28
+ labels: {
29
+ type: "string";
30
+ description: string;
31
+ };
32
+ per_page: {
33
+ type: "number";
34
+ description: string;
35
+ };
36
+ };
37
+ };
38
+ constructor(service: GitHubService);
39
+ execute(args: {
40
+ owner: string;
41
+ repo: string;
42
+ state?: string;
43
+ labels?: string;
44
+ per_page?: number;
45
+ }): Promise<{
46
+ success: boolean;
47
+ data?: unknown;
48
+ error?: string;
49
+ }>;
50
+ }
51
+ //# sourceMappingURL=issueList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issueList.d.ts","sourceRoot":"","sources":["../../src/tools/issueList.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,mBAAmB;IAsBlB,OAAO,CAAC,QAAQ,CAAC,OAAO;IArBpC,QAAQ,CAAC,IAAI,uBAAuB;IACpC,QAAQ,CAAC,WAAW,kFAAkF;IACtG,QAAQ,CAAC,QAAQ,eAAe;IAChC,QAAQ,CAAC,cAAc,SAAS;IAEhC,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;MAclB;gBAE2B,OAAO,EAAE,aAAa;IAE7C,OAAO,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CA8BlE"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @fileoverview GitHub Issue List tool — list issues for a repository.
3
+ */
4
+ export class GitHubIssueListTool {
5
+ service;
6
+ name = 'github_issue_list';
7
+ description = 'List issues for a GitHub repository. Supports filtering by state and labels.';
8
+ category = 'developer';
9
+ hasSideEffects = false;
10
+ inputSchema = {
11
+ type: 'object',
12
+ required: ['owner', 'repo'],
13
+ properties: {
14
+ owner: { type: 'string', description: 'Repository owner (user or org)' },
15
+ repo: { type: 'string', description: 'Repository name' },
16
+ state: {
17
+ type: 'string',
18
+ enum: ['open', 'closed', 'all'],
19
+ description: 'Issue state filter (default: open)',
20
+ },
21
+ labels: { type: 'string', description: 'Comma-separated label names to filter by' },
22
+ per_page: { type: 'number', description: 'Results per page (max 30, default 10)' },
23
+ },
24
+ };
25
+ constructor(service) {
26
+ this.service = service;
27
+ }
28
+ async execute(args) {
29
+ try {
30
+ const octokit = this.service.getOctokit();
31
+ const { data } = await octokit.rest.issues.listForRepo({
32
+ owner: args.owner,
33
+ repo: args.repo,
34
+ state: args.state ?? 'open',
35
+ labels: args.labels,
36
+ per_page: Math.min(args.per_page ?? 10, 30),
37
+ });
38
+ return {
39
+ success: true,
40
+ data: data
41
+ .filter((i) => !i.pull_request) // Exclude PRs (GitHub API returns them too)
42
+ .map((i) => ({
43
+ number: i.number,
44
+ title: i.title,
45
+ state: i.state,
46
+ author: i.user?.login,
47
+ labels: i.labels.map((l) => (typeof l === 'string' ? l : l.name)),
48
+ comments: i.comments,
49
+ created_at: i.created_at,
50
+ url: i.html_url,
51
+ })),
52
+ };
53
+ }
54
+ catch (err) {
55
+ return { success: false, error: err instanceof Error ? err.message : String(err) };
56
+ }
57
+ }
58
+ }
59
+ //# sourceMappingURL=issueList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issueList.js","sourceRoot":"","sources":["../../src/tools/issueList.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,OAAO,mBAAmB;IAsBD;IArBpB,IAAI,GAAG,mBAAmB,CAAC;IAC3B,WAAW,GAAG,8EAA8E,CAAC;IAC7F,QAAQ,GAAG,WAAW,CAAC;IACvB,cAAc,GAAG,KAAK,CAAC;IAEvB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAU;QACpC,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,gCAAgC,EAAE;YACjF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE;YACjE,KAAK,EAAE;gBACL,IAAI,EAAE,QAAiB;gBACvB,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAU;gBACxC,WAAW,EAAE,oCAAoC;aAClD;YACD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,0CAA0C,EAAE;YAC5F,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,uCAAuC,EAAE;SAC5F;KACF,CAAC;IAEF,YAA6B,OAAsB;QAAtB,YAAO,GAAP,OAAO,CAAe;IAAG,CAAC;IAEvD,KAAK,CAAC,OAAO,CAAC,IAMb;QACC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBACrD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAG,IAAI,CAAC,KAAmC,IAAI,MAAM;gBAC1D,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,EAAE,CAAC;aAC5C,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,IAAI;qBACP,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,4CAA4C;qBAChF,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;oBAChB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK;oBACrB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACtE,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,GAAG,EAAE,CAAC,CAAC,QAAQ;iBAChB,CAAC,CAAC;aACN,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACrF,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @fileoverview GitHub PR Create tool — create a new pull request.
3
+ */
4
+ import type { GitHubService } from '../GitHubService.js';
5
+ export declare class GitHubPrCreateTool {
6
+ private readonly service;
7
+ readonly name = "github_pr_create";
8
+ readonly description = "Create a new pull request in a GitHub repository.";
9
+ readonly category = "developer";
10
+ readonly hasSideEffects = true;
11
+ readonly inputSchema: {
12
+ type: "object";
13
+ required: readonly ["owner", "repo", "title", "head", "base"];
14
+ properties: {
15
+ owner: {
16
+ type: "string";
17
+ description: string;
18
+ };
19
+ repo: {
20
+ type: "string";
21
+ description: string;
22
+ };
23
+ title: {
24
+ type: "string";
25
+ description: string;
26
+ };
27
+ head: {
28
+ type: "string";
29
+ description: string;
30
+ };
31
+ base: {
32
+ type: "string";
33
+ description: string;
34
+ };
35
+ body: {
36
+ type: "string";
37
+ description: string;
38
+ };
39
+ draft: {
40
+ type: "boolean";
41
+ description: string;
42
+ };
43
+ };
44
+ };
45
+ constructor(service: GitHubService);
46
+ execute(args: {
47
+ owner: string;
48
+ repo: string;
49
+ title: string;
50
+ head: string;
51
+ base: string;
52
+ body?: string;
53
+ draft?: boolean;
54
+ }): Promise<{
55
+ success: boolean;
56
+ data?: unknown;
57
+ error?: string;
58
+ }>;
59
+ }
60
+ //# sourceMappingURL=prCreate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prCreate.d.ts","sourceRoot":"","sources":["../../src/tools/prCreate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,kBAAkB;IAoBjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAnBpC,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,WAAW,uDAAuD;IAC3E,QAAQ,CAAC,QAAQ,eAAe;IAChC,QAAQ,CAAC,cAAc,QAAQ;IAE/B,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAYlB;gBAE2B,OAAO,EAAE,aAAa;IAE7C,OAAO,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CA2BlE"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @fileoverview GitHub PR Create tool — create a new pull request.
3
+ */
4
+ export class GitHubPrCreateTool {
5
+ service;
6
+ name = 'github_pr_create';
7
+ description = 'Create a new pull request in a GitHub repository.';
8
+ category = 'developer';
9
+ hasSideEffects = true;
10
+ inputSchema = {
11
+ type: 'object',
12
+ required: ['owner', 'repo', 'title', 'head', 'base'],
13
+ properties: {
14
+ owner: { type: 'string', description: 'Repository owner (user or org)' },
15
+ repo: { type: 'string', description: 'Repository name' },
16
+ title: { type: 'string', description: 'PR title' },
17
+ head: { type: 'string', description: 'Head branch name (source)' },
18
+ base: { type: 'string', description: 'Base branch name (target, e.g. "main")' },
19
+ body: { type: 'string', description: 'PR description (Markdown supported)' },
20
+ draft: { type: 'boolean', description: 'Create as draft PR (default: false)' },
21
+ },
22
+ };
23
+ constructor(service) {
24
+ this.service = service;
25
+ }
26
+ async execute(args) {
27
+ try {
28
+ const octokit = this.service.getOctokit();
29
+ const { data } = await octokit.rest.pulls.create({
30
+ owner: args.owner,
31
+ repo: args.repo,
32
+ title: args.title,
33
+ head: args.head,
34
+ base: args.base,
35
+ body: args.body,
36
+ draft: args.draft ?? false,
37
+ });
38
+ return {
39
+ success: true,
40
+ data: {
41
+ number: data.number,
42
+ title: data.title,
43
+ url: data.html_url,
44
+ state: data.state,
45
+ draft: data.draft,
46
+ },
47
+ };
48
+ }
49
+ catch (err) {
50
+ return { success: false, error: err instanceof Error ? err.message : String(err) };
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=prCreate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prCreate.js","sourceRoot":"","sources":["../../src/tools/prCreate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,OAAO,kBAAkB;IAoBA;IAnBpB,IAAI,GAAG,kBAAkB,CAAC;IAC1B,WAAW,GAAG,mDAAmD,CAAC;IAClE,QAAQ,GAAG,WAAW,CAAC;IACvB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAU;QAC7D,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,gCAAgC,EAAE;YACjF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE;YACjE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,UAAU,EAAE;YAC3D,IAAI,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,2BAA2B,EAAE;YAC3E,IAAI,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,wCAAwC,EAAE;YACxF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,qCAAqC,EAAE;YACrF,KAAK,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,WAAW,EAAE,qCAAqC,EAAE;SACxF;KACF,CAAC;IAEF,YAA6B,OAAsB;QAAtB,YAAO,GAAP,OAAO,CAAe;IAAG,CAAC;IAEvD,KAAK,CAAC,OAAO,CAAC,IAQb;QACC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC/C,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK;aAC3B,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,GAAG,EAAE,IAAI,CAAC,QAAQ;oBAClB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;iBAClB;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACrF,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @fileoverview GitHub PR List tool — list pull requests for a repository.
3
+ */
4
+ import type { GitHubService } from '../GitHubService.js';
5
+ export declare class GitHubPrListTool {
6
+ private readonly service;
7
+ readonly name = "github_pr_list";
8
+ readonly description = "List pull requests for a GitHub repository. Supports filtering by state, head, and base branch.";
9
+ readonly category = "developer";
10
+ readonly hasSideEffects = false;
11
+ readonly inputSchema: {
12
+ type: "object";
13
+ required: readonly ["owner", "repo"];
14
+ properties: {
15
+ owner: {
16
+ type: "string";
17
+ description: string;
18
+ };
19
+ repo: {
20
+ type: "string";
21
+ description: string;
22
+ };
23
+ state: {
24
+ type: "string";
25
+ enum: readonly ["open", "closed", "all"];
26
+ description: string;
27
+ };
28
+ head: {
29
+ type: "string";
30
+ description: string;
31
+ };
32
+ base: {
33
+ type: "string";
34
+ description: string;
35
+ };
36
+ per_page: {
37
+ type: "number";
38
+ description: string;
39
+ };
40
+ };
41
+ };
42
+ constructor(service: GitHubService);
43
+ execute(args: {
44
+ owner: string;
45
+ repo: string;
46
+ state?: string;
47
+ head?: string;
48
+ base?: string;
49
+ per_page?: number;
50
+ }): Promise<{
51
+ success: boolean;
52
+ data?: unknown;
53
+ error?: string;
54
+ }>;
55
+ }
56
+ //# sourceMappingURL=prList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prList.d.ts","sourceRoot":"","sources":["../../src/tools/prList.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,gBAAgB;IAuBf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAtBpC,QAAQ,CAAC,IAAI,oBAAoB;IACjC,QAAQ,CAAC,WAAW,qGAAqG;IACzH,QAAQ,CAAC,QAAQ,eAAe;IAChC,QAAQ,CAAC,cAAc,SAAS;IAEhC,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAelB;gBAE2B,OAAO,EAAE,aAAa;IAE7C,OAAO,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CA+BlE"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @fileoverview GitHub PR List tool — list pull requests for a repository.
3
+ */
4
+ export class GitHubPrListTool {
5
+ service;
6
+ name = 'github_pr_list';
7
+ description = 'List pull requests for a GitHub repository. Supports filtering by state, head, and base branch.';
8
+ category = 'developer';
9
+ hasSideEffects = false;
10
+ inputSchema = {
11
+ type: 'object',
12
+ required: ['owner', 'repo'],
13
+ properties: {
14
+ owner: { type: 'string', description: 'Repository owner (user or org)' },
15
+ repo: { type: 'string', description: 'Repository name' },
16
+ state: {
17
+ type: 'string',
18
+ enum: ['open', 'closed', 'all'],
19
+ description: 'PR state filter (default: open)',
20
+ },
21
+ head: { type: 'string', description: 'Filter by head branch (user:branch format)' },
22
+ base: { type: 'string', description: 'Filter by base branch' },
23
+ per_page: { type: 'number', description: 'Results per page (max 30, default 10)' },
24
+ },
25
+ };
26
+ constructor(service) {
27
+ this.service = service;
28
+ }
29
+ async execute(args) {
30
+ try {
31
+ const octokit = this.service.getOctokit();
32
+ const { data } = await octokit.rest.pulls.list({
33
+ owner: args.owner,
34
+ repo: args.repo,
35
+ state: args.state ?? 'open',
36
+ head: args.head,
37
+ base: args.base,
38
+ per_page: Math.min(args.per_page ?? 10, 30),
39
+ });
40
+ return {
41
+ success: true,
42
+ data: data.map((pr) => ({
43
+ number: pr.number,
44
+ title: pr.title,
45
+ state: pr.state,
46
+ draft: pr.draft,
47
+ author: pr.user?.login,
48
+ head: pr.head.ref,
49
+ base: pr.base.ref,
50
+ created_at: pr.created_at,
51
+ url: pr.html_url,
52
+ mergeable_state: pr.mergeable_state,
53
+ })),
54
+ };
55
+ }
56
+ catch (err) {
57
+ return { success: false, error: err instanceof Error ? err.message : String(err) };
58
+ }
59
+ }
60
+ }
61
+ //# sourceMappingURL=prList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prList.js","sourceRoot":"","sources":["../../src/tools/prList.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,OAAO,gBAAgB;IAuBE;IAtBpB,IAAI,GAAG,gBAAgB,CAAC;IACxB,WAAW,GAAG,iGAAiG,CAAC;IAChH,QAAQ,GAAG,WAAW,CAAC;IACvB,cAAc,GAAG,KAAK,CAAC;IAEvB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAU;QACpC,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,gCAAgC,EAAE;YACjF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE;YACjE,KAAK,EAAE;gBACL,IAAI,EAAE,QAAiB;gBACvB,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAU;gBACxC,WAAW,EAAE,iCAAiC;aAC/C;YACD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,4CAA4C,EAAE;YAC5F,IAAI,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,uBAAuB,EAAE;YACvE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,uCAAuC,EAAE;SAC5F;KACF,CAAC;IAEF,YAA6B,OAAsB;QAAtB,YAAO,GAAP,OAAO,CAAe;IAAG,CAAC;IAEvD,KAAK,CAAC,OAAO,CAAC,IAOb;QACC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC7C,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAG,IAAI,CAAC,KAAmC,IAAI,MAAM;gBAC1D,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,EAAE,CAAC;aAC5C,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC;oBAC3B,MAAM,EAAE,EAAE,CAAC,MAAM;oBACjB,KAAK,EAAE,EAAE,CAAC,KAAK;oBACf,KAAK,EAAE,EAAE,CAAC,KAAK;oBACf,KAAK,EAAE,EAAE,CAAC,KAAK;oBACf,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK;oBACtB,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG;oBACjB,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG;oBACjB,UAAU,EAAE,EAAE,CAAC,UAAU;oBACzB,GAAG,EAAE,EAAE,CAAC,QAAQ;oBAChB,eAAe,EAAE,EAAE,CAAC,eAAe;iBACpC,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACrF,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @fileoverview GitHub Search tool — search repos, code, issues, or users.
3
+ */
4
+ import type { GitHubService } from '../GitHubService.js';
5
+ export declare class GitHubSearchTool {
6
+ private readonly service;
7
+ readonly name = "github_search";
8
+ readonly description = "Search GitHub repositories, code, issues, or users. Returns top results with key metadata.";
9
+ readonly category = "developer";
10
+ readonly hasSideEffects = false;
11
+ readonly inputSchema: {
12
+ type: "object";
13
+ required: readonly ["query"];
14
+ properties: {
15
+ query: {
16
+ type: "string";
17
+ description: string;
18
+ };
19
+ type: {
20
+ type: "string";
21
+ enum: readonly ["repositories", "code", "issues", "users"];
22
+ description: string;
23
+ };
24
+ per_page: {
25
+ type: "number";
26
+ description: string;
27
+ };
28
+ };
29
+ };
30
+ constructor(service: GitHubService);
31
+ execute(args: {
32
+ query: string;
33
+ type?: string;
34
+ per_page?: number;
35
+ }): Promise<{
36
+ success: boolean;
37
+ data?: unknown;
38
+ error?: string;
39
+ }>;
40
+ }
41
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,gBAAgB;IAoBf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAnBpC,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,WAAW,gGAAgG;IACpH,QAAQ,CAAC,QAAQ,eAAe;IAChC,QAAQ,CAAC,cAAc,SAAS;IAEhC,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;MAYlB;gBAE2B,OAAO,EAAE,aAAa;IAE7C,OAAO,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAChF,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CA+EH"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * @fileoverview GitHub Search tool — search repos, code, issues, or users.
3
+ */
4
+ export class GitHubSearchTool {
5
+ service;
6
+ name = 'github_search';
7
+ description = 'Search GitHub repositories, code, issues, or users. Returns top results with key metadata.';
8
+ category = 'developer';
9
+ hasSideEffects = false;
10
+ inputSchema = {
11
+ type: 'object',
12
+ required: ['query'],
13
+ properties: {
14
+ query: { type: 'string', description: 'Search query (GitHub search syntax supported)' },
15
+ type: {
16
+ type: 'string',
17
+ enum: ['repositories', 'code', 'issues', 'users'],
18
+ description: 'Search type (default: repositories)',
19
+ },
20
+ per_page: { type: 'number', description: 'Results per page (max 30, default 10)' },
21
+ },
22
+ };
23
+ constructor(service) {
24
+ this.service = service;
25
+ }
26
+ async execute(args) {
27
+ try {
28
+ const octokit = this.service.getOctokit();
29
+ const perPage = Math.min(args.per_page ?? 10, 30);
30
+ const searchType = args.type ?? 'repositories';
31
+ if (searchType === 'repositories') {
32
+ const { data } = await octokit.rest.search.repos({ q: args.query, per_page: perPage });
33
+ return {
34
+ success: true,
35
+ data: {
36
+ total_count: data.total_count,
37
+ items: data.items.map((r) => ({
38
+ full_name: r.full_name,
39
+ description: r.description,
40
+ stars: r.stargazers_count,
41
+ language: r.language,
42
+ url: r.html_url,
43
+ updated_at: r.updated_at,
44
+ })),
45
+ },
46
+ };
47
+ }
48
+ if (searchType === 'code') {
49
+ const { data } = await octokit.rest.search.code({ q: args.query, per_page: perPage });
50
+ return {
51
+ success: true,
52
+ data: {
53
+ total_count: data.total_count,
54
+ items: data.items.map((c) => ({
55
+ name: c.name,
56
+ path: c.path,
57
+ repository: c.repository.full_name,
58
+ url: c.html_url,
59
+ })),
60
+ },
61
+ };
62
+ }
63
+ if (searchType === 'issues') {
64
+ const { data } = await octokit.rest.search.issuesAndPullRequests({ q: args.query, per_page: perPage });
65
+ return {
66
+ success: true,
67
+ data: {
68
+ total_count: data.total_count,
69
+ items: data.items.map((i) => ({
70
+ title: i.title,
71
+ number: i.number,
72
+ state: i.state,
73
+ repository_url: i.repository_url,
74
+ url: i.html_url,
75
+ created_at: i.created_at,
76
+ labels: i.labels.map((l) => (typeof l === 'string' ? l : l.name)),
77
+ })),
78
+ },
79
+ };
80
+ }
81
+ if (searchType === 'users') {
82
+ const { data } = await octokit.rest.search.users({ q: args.query, per_page: perPage });
83
+ return {
84
+ success: true,
85
+ data: {
86
+ total_count: data.total_count,
87
+ items: data.items.map((u) => ({
88
+ login: u.login,
89
+ type: u.type,
90
+ url: u.html_url,
91
+ })),
92
+ },
93
+ };
94
+ }
95
+ return { success: false, error: `Unknown search type: ${searchType}` };
96
+ }
97
+ catch (err) {
98
+ return { success: false, error: err instanceof Error ? err.message : String(err) };
99
+ }
100
+ }
101
+ }
102
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
package/manifest.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://agentos.sh/schemas/extension-manifest-v1.json",
3
+ "id": "com.framers.integrations.github",
4
+ "name": "GitHub Extension",
5
+ "version": "0.1.0",
6
+ "description": "GitHub API tools — search repos/code, manage issues/PRs, read files, create gists.",
7
+ "categories": ["tool", "developer"],
8
+ "extensions": [
9
+ { "kind": "tool", "id": "githubSearch", "displayName": "GitHub Search" },
10
+ { "kind": "tool", "id": "githubIssueList", "displayName": "List GitHub Issues" },
11
+ { "kind": "tool", "id": "githubIssueCreate", "displayName": "Create GitHub Issue" },
12
+ { "kind": "tool", "id": "githubPrList", "displayName": "List GitHub PRs" },
13
+ { "kind": "tool", "id": "githubPrCreate", "displayName": "Create GitHub PR" },
14
+ { "kind": "tool", "id": "githubFileRead", "displayName": "Read GitHub File" },
15
+ { "kind": "tool", "id": "githubGistCreate", "displayName": "Create GitHub Gist" }
16
+ ],
17
+ "requiredSecrets": ["github.token"],
18
+ "features": [
19
+ "Repository, code, and issue search",
20
+ "Issue listing and creation",
21
+ "Pull request listing and creation",
22
+ "File content reading from repos",
23
+ "Gist creation"
24
+ ]
25
+ }
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@framers/agentos-ext-github",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "GitHub API tools for AgentOS — search repos/code, manage issues/PRs, read files, create gists",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "keywords": [
9
+ "agentos",
10
+ "extension",
11
+ "github",
12
+ "octokit",
13
+ "developer"
14
+ ],
15
+ "author": {
16
+ "name": "Framers AI",
17
+ "url": "https://frame.dev"
18
+ },
19
+ "license": "MIT",
20
+ "files": [
21
+ "dist",
22
+ "manifest.json"
23
+ ],
24
+ "dependencies": {
25
+ "@octokit/rest": "^21.0.0"
26
+ },
27
+ "peerDependencies": {
28
+ "@framers/agentos": "^0.1.0"
29
+ },
30
+ "devDependencies": {
31
+ "@types/node": "^20.0.0",
32
+ "typescript": "^5.0.0",
33
+ "vitest": "^1.0.0",
34
+ "@framers/agentos": "0.1.6"
35
+ },
36
+ "engines": {
37
+ "node": ">=18.0.0"
38
+ },
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "https://github.com/framersai/agentos-extensions",
42
+ "directory": "registry/curated/integrations/github"
43
+ },
44
+ "scripts": {
45
+ "build": "tsc",
46
+ "dev": "tsc --watch",
47
+ "test": "vitest run",
48
+ "clean": "rm -rf dist"
49
+ }
50
+ }