@loopstack/github-module 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/README.md +86 -5
  2. package/dist/tools/actions/github-get-workflow-run.tool.d.ts +11 -9
  3. package/dist/tools/actions/github-get-workflow-run.tool.d.ts.map +1 -1
  4. package/dist/tools/actions/github-get-workflow-run.tool.js +13 -18
  5. package/dist/tools/actions/github-get-workflow-run.tool.js.map +1 -1
  6. package/dist/tools/actions/github-list-workflow-runs.tool.d.ts +29 -12
  7. package/dist/tools/actions/github-list-workflow-runs.tool.d.ts.map +1 -1
  8. package/dist/tools/actions/github-list-workflow-runs.tool.js +33 -38
  9. package/dist/tools/actions/github-list-workflow-runs.tool.js.map +1 -1
  10. package/dist/tools/actions/github-trigger-workflow.tool.d.ts +13 -11
  11. package/dist/tools/actions/github-trigger-workflow.tool.d.ts.map +1 -1
  12. package/dist/tools/actions/github-trigger-workflow.tool.js +15 -20
  13. package/dist/tools/actions/github-trigger-workflow.tool.js.map +1 -1
  14. package/dist/tools/content/github-create-or-update-file.tool.d.ts +15 -13
  15. package/dist/tools/content/github-create-or-update-file.tool.d.ts.map +1 -1
  16. package/dist/tools/content/github-create-or-update-file.tool.js +17 -22
  17. package/dist/tools/content/github-create-or-update-file.tool.js.map +1 -1
  18. package/dist/tools/content/github-get-commit.tool.d.ts +11 -9
  19. package/dist/tools/content/github-get-commit.tool.d.ts.map +1 -1
  20. package/dist/tools/content/github-get-commit.tool.js +13 -18
  21. package/dist/tools/content/github-get-commit.tool.js.map +1 -1
  22. package/dist/tools/content/github-get-file-content.tool.d.ts +12 -10
  23. package/dist/tools/content/github-get-file-content.tool.d.ts.map +1 -1
  24. package/dist/tools/content/github-get-file-content.tool.js +14 -19
  25. package/dist/tools/content/github-get-file-content.tool.js.map +1 -1
  26. package/dist/tools/content/github-list-directory.tool.d.ts +12 -10
  27. package/dist/tools/content/github-list-directory.tool.d.ts.map +1 -1
  28. package/dist/tools/content/github-list-directory.tool.js +14 -19
  29. package/dist/tools/content/github-list-directory.tool.js.map +1 -1
  30. package/dist/tools/issues/github-create-issue-comment.tool.d.ts +12 -10
  31. package/dist/tools/issues/github-create-issue-comment.tool.d.ts.map +1 -1
  32. package/dist/tools/issues/github-create-issue-comment.tool.js +14 -19
  33. package/dist/tools/issues/github-create-issue-comment.tool.js.map +1 -1
  34. package/dist/tools/issues/github-create-issue.tool.d.ts +14 -12
  35. package/dist/tools/issues/github-create-issue.tool.d.ts.map +1 -1
  36. package/dist/tools/issues/github-create-issue.tool.js +16 -21
  37. package/dist/tools/issues/github-create-issue.tool.js.map +1 -1
  38. package/dist/tools/issues/github-get-issue.tool.d.ts +11 -9
  39. package/dist/tools/issues/github-get-issue.tool.d.ts.map +1 -1
  40. package/dist/tools/issues/github-get-issue.tool.js +13 -18
  41. package/dist/tools/issues/github-get-issue.tool.js.map +1 -1
  42. package/dist/tools/issues/github-list-issues.tool.d.ts +19 -13
  43. package/dist/tools/issues/github-list-issues.tool.d.ts.map +1 -1
  44. package/dist/tools/issues/github-list-issues.tool.js +17 -22
  45. package/dist/tools/issues/github-list-issues.tool.js.map +1 -1
  46. package/dist/tools/pull-requests/github-create-pull-request.tool.d.ts +15 -13
  47. package/dist/tools/pull-requests/github-create-pull-request.tool.d.ts.map +1 -1
  48. package/dist/tools/pull-requests/github-create-pull-request.tool.js +17 -22
  49. package/dist/tools/pull-requests/github-create-pull-request.tool.js.map +1 -1
  50. package/dist/tools/pull-requests/github-get-pull-request.tool.d.ts +11 -9
  51. package/dist/tools/pull-requests/github-get-pull-request.tool.d.ts.map +1 -1
  52. package/dist/tools/pull-requests/github-get-pull-request.tool.js +13 -18
  53. package/dist/tools/pull-requests/github-get-pull-request.tool.js.map +1 -1
  54. package/dist/tools/pull-requests/github-list-pr-reviews.tool.d.ts +11 -9
  55. package/dist/tools/pull-requests/github-list-pr-reviews.tool.d.ts.map +1 -1
  56. package/dist/tools/pull-requests/github-list-pr-reviews.tool.js +13 -18
  57. package/dist/tools/pull-requests/github-list-pr-reviews.tool.js.map +1 -1
  58. package/dist/tools/pull-requests/github-list-pull-requests.tool.d.ts +18 -12
  59. package/dist/tools/pull-requests/github-list-pull-requests.tool.d.ts.map +1 -1
  60. package/dist/tools/pull-requests/github-list-pull-requests.tool.js +16 -21
  61. package/dist/tools/pull-requests/github-list-pull-requests.tool.js.map +1 -1
  62. package/dist/tools/pull-requests/github-merge-pull-request.tool.d.ts +18 -12
  63. package/dist/tools/pull-requests/github-merge-pull-request.tool.d.ts.map +1 -1
  64. package/dist/tools/pull-requests/github-merge-pull-request.tool.js +16 -21
  65. package/dist/tools/pull-requests/github-merge-pull-request.tool.js.map +1 -1
  66. package/dist/tools/repos/github-create-repo.tool.d.ts +12 -10
  67. package/dist/tools/repos/github-create-repo.tool.d.ts.map +1 -1
  68. package/dist/tools/repos/github-create-repo.tool.js +14 -19
  69. package/dist/tools/repos/github-create-repo.tool.js.map +1 -1
  70. package/dist/tools/repos/github-get-repo.tool.d.ts +10 -8
  71. package/dist/tools/repos/github-get-repo.tool.d.ts.map +1 -1
  72. package/dist/tools/repos/github-get-repo.tool.js +12 -17
  73. package/dist/tools/repos/github-get-repo.tool.js.map +1 -1
  74. package/dist/tools/repos/github-list-branches.tool.d.ts +11 -9
  75. package/dist/tools/repos/github-list-branches.tool.d.ts.map +1 -1
  76. package/dist/tools/repos/github-list-branches.tool.js +13 -18
  77. package/dist/tools/repos/github-list-branches.tool.js.map +1 -1
  78. package/dist/tools/repos/github-list-repos.tool.d.ts +21 -10
  79. package/dist/tools/repos/github-list-repos.tool.d.ts.map +1 -1
  80. package/dist/tools/repos/github-list-repos.tool.js +14 -19
  81. package/dist/tools/repos/github-list-repos.tool.js.map +1 -1
  82. package/dist/tools/search/github-search-code.tool.d.ts +11 -9
  83. package/dist/tools/search/github-search-code.tool.d.ts.map +1 -1
  84. package/dist/tools/search/github-search-code.tool.js +13 -18
  85. package/dist/tools/search/github-search-code.tool.js.map +1 -1
  86. package/dist/tools/search/github-search-issues.tool.d.ts +20 -10
  87. package/dist/tools/search/github-search-issues.tool.d.ts.map +1 -1
  88. package/dist/tools/search/github-search-issues.tool.js +16 -21
  89. package/dist/tools/search/github-search-issues.tool.js.map +1 -1
  90. package/dist/tools/search/github-search-repos.tool.d.ts +17 -10
  91. package/dist/tools/search/github-search-repos.tool.d.ts.map +1 -1
  92. package/dist/tools/search/github-search-repos.tool.js +14 -19
  93. package/dist/tools/search/github-search-repos.tool.js.map +1 -1
  94. package/dist/tools/users/github-get-authenticated-user.tool.d.ts +7 -5
  95. package/dist/tools/users/github-get-authenticated-user.tool.d.ts.map +1 -1
  96. package/dist/tools/users/github-get-authenticated-user.tool.js +7 -12
  97. package/dist/tools/users/github-get-authenticated-user.tool.js.map +1 -1
  98. package/dist/tools/users/github-list-user-orgs.tool.d.ts +9 -7
  99. package/dist/tools/users/github-list-user-orgs.tool.d.ts.map +1 -1
  100. package/dist/tools/users/github-list-user-orgs.tool.js +11 -16
  101. package/dist/tools/users/github-list-user-orgs.tool.js.map +1 -1
  102. package/package.json +2 -2
  103. package/src/tools/actions/github-get-workflow-run.tool.ts +16 -22
  104. package/src/tools/actions/github-list-workflow-runs.tool.ts +36 -45
  105. package/src/tools/actions/github-trigger-workflow.tool.ts +18 -26
  106. package/src/tools/content/github-create-or-update-file.tool.ts +20 -30
  107. package/src/tools/content/github-get-commit.tool.ts +16 -22
  108. package/src/tools/content/github-get-file-content.tool.ts +17 -24
  109. package/src/tools/content/github-list-directory.tool.ts +17 -24
  110. package/src/tools/issues/github-create-issue-comment.tool.ts +17 -24
  111. package/src/tools/issues/github-create-issue.tool.ts +19 -28
  112. package/src/tools/issues/github-get-issue.tool.ts +16 -22
  113. package/src/tools/issues/github-list-issues.tool.ts +20 -30
  114. package/src/tools/pull-requests/github-create-pull-request.tool.ts +20 -30
  115. package/src/tools/pull-requests/github-get-pull-request.tool.ts +16 -22
  116. package/src/tools/pull-requests/github-list-pr-reviews.tool.ts +16 -22
  117. package/src/tools/pull-requests/github-list-pull-requests.tool.ts +19 -28
  118. package/src/tools/pull-requests/github-merge-pull-request.tool.ts +19 -28
  119. package/src/tools/repos/github-create-repo.tool.ts +17 -24
  120. package/src/tools/repos/github-get-repo.tool.ts +15 -20
  121. package/src/tools/repos/github-list-branches.tool.ts +16 -22
  122. package/src/tools/repos/github-list-repos.tool.ts +17 -24
  123. package/src/tools/search/github-search-code.tool.ts +16 -22
  124. package/src/tools/search/github-search-issues.tool.ts +19 -26
  125. package/src/tools/search/github-search-repos.tool.ts +17 -24
  126. package/src/tools/users/github-get-authenticated-user.tool.ts +10 -12
  127. package/src/tools/users/github-list-user-orgs.tool.ts +14 -18
@@ -1,39 +1,33 @@
1
1
  import { Inject, Logger } from '@nestjs/common';
2
2
  import { z } from 'zod';
3
- import { Input, RunContext, Tool, ToolInterface, ToolResult } from '@loopstack/common';
3
+ import { BaseTool, Tool, ToolResult } from '@loopstack/common';
4
4
  import { OAuthTokenStore } from '@loopstack/oauth-module';
5
5
 
6
- export type GitHubListBranchesArgs = {
7
- owner: string;
8
- repo: string;
9
- perPage?: number;
10
- };
6
+ const inputSchema = z
7
+ .object({
8
+ owner: z.string(),
9
+ repo: z.string(),
10
+ perPage: z.number().default(30),
11
+ })
12
+ .strict();
13
+
14
+ export type GitHubListBranchesArgs = z.input<typeof inputSchema>;
11
15
 
12
16
  @Tool({
13
- config: {
17
+ uiConfig: {
14
18
  description:
15
19
  'Lists branches for a GitHub repository. Returns { error: "unauthorized" } if no valid token is available.',
16
20
  },
21
+ schema: inputSchema,
17
22
  })
18
- export class GitHubListBranchesTool implements ToolInterface {
23
+ export class GitHubListBranchesTool extends BaseTool {
19
24
  private readonly logger = new Logger(GitHubListBranchesTool.name);
20
25
 
21
26
  @Inject()
22
27
  private tokenStore: OAuthTokenStore;
23
28
 
24
- @Input({
25
- schema: z
26
- .object({
27
- owner: z.string(),
28
- repo: z.string(),
29
- perPage: z.number().default(30),
30
- })
31
- .strict(),
32
- })
33
- args: GitHubListBranchesArgs;
34
-
35
- async execute(args: GitHubListBranchesArgs, ctx: RunContext): Promise<ToolResult> {
36
- const accessToken = await this.tokenStore.getValidAccessToken(ctx.userId, 'github');
29
+ async call(args: GitHubListBranchesArgs): Promise<ToolResult> {
30
+ const accessToken = await this.tokenStore.getValidAccessToken(this.ctx.context.userId, 'github');
37
31
 
38
32
  if (!accessToken) {
39
33
  return {
@@ -58,7 +52,7 @@ export class GitHubListBranchesTool implements ToolInterface {
58
52
  });
59
53
 
60
54
  if (response.status === 401 || response.status === 403) {
61
- this.logger.warn(`GitHub API returned ${response.status} for user ${ctx.userId}`);
55
+ this.logger.warn(`GitHub API returned ${response.status} for user ${this.ctx.context.userId}`);
62
56
  return {
63
57
  data: {
64
58
  error: '401',
@@ -1,41 +1,34 @@
1
1
  import { Inject, Logger } from '@nestjs/common';
2
2
  import { z } from 'zod';
3
- import { Input, RunContext, Tool, ToolInterface, ToolResult } from '@loopstack/common';
3
+ import { BaseTool, Tool, ToolResult } from '@loopstack/common';
4
4
  import { OAuthTokenStore } from '@loopstack/oauth-module';
5
5
 
6
- export type GitHubListReposArgs = {
7
- visibility?: string;
8
- sort?: string;
9
- perPage?: number;
10
- page?: number;
11
- };
6
+ const inputSchema = z
7
+ .object({
8
+ visibility: z.enum(['all', 'public', 'private']).default('all'),
9
+ sort: z.enum(['created', 'updated', 'pushed', 'full_name']).default('updated'),
10
+ perPage: z.number().default(30),
11
+ page: z.number().default(1),
12
+ })
13
+ .strict();
14
+
15
+ export type GitHubListReposArgs = z.input<typeof inputSchema>;
12
16
 
13
17
  @Tool({
14
- config: {
18
+ uiConfig: {
15
19
  description:
16
20
  'Lists repositories for the authenticated GitHub user. Returns { error: "unauthorized" } if no valid token is available.',
17
21
  },
22
+ schema: inputSchema,
18
23
  })
19
- export class GitHubListReposTool implements ToolInterface {
24
+ export class GitHubListReposTool extends BaseTool {
20
25
  private readonly logger = new Logger(GitHubListReposTool.name);
21
26
 
22
27
  @Inject()
23
28
  private tokenStore: OAuthTokenStore;
24
29
 
25
- @Input({
26
- schema: z
27
- .object({
28
- visibility: z.enum(['all', 'public', 'private']).default('all'),
29
- sort: z.enum(['created', 'updated', 'pushed', 'full_name']).default('updated'),
30
- perPage: z.number().default(30),
31
- page: z.number().default(1),
32
- })
33
- .strict(),
34
- })
35
- args: GitHubListReposArgs;
36
-
37
- async execute(args: GitHubListReposArgs, ctx: RunContext): Promise<ToolResult> {
38
- const accessToken = await this.tokenStore.getValidAccessToken(ctx.userId, 'github');
30
+ async call(args: GitHubListReposArgs): Promise<ToolResult> {
31
+ const accessToken = await this.tokenStore.getValidAccessToken(this.ctx.context.userId, 'github');
39
32
 
40
33
  if (!accessToken) {
41
34
  return {
@@ -62,7 +55,7 @@ export class GitHubListReposTool implements ToolInterface {
62
55
  });
63
56
 
64
57
  if (response.status === 401 || response.status === 403) {
65
- this.logger.warn(`GitHub API returned ${response.status} for user ${ctx.userId}`);
58
+ this.logger.warn(`GitHub API returned ${response.status} for user ${this.ctx.context.userId}`);
66
59
  return {
67
60
  data: {
68
61
  error: '401',
@@ -1,39 +1,33 @@
1
1
  import { Inject, Logger } from '@nestjs/common';
2
2
  import { z } from 'zod';
3
- import { Input, RunContext, Tool, ToolInterface, ToolResult } from '@loopstack/common';
3
+ import { BaseTool, Tool, ToolResult } from '@loopstack/common';
4
4
  import { OAuthTokenStore } from '@loopstack/oauth-module';
5
5
 
6
- export type GitHubSearchCodeArgs = {
7
- query: string;
8
- perPage?: number;
9
- page?: number;
10
- };
6
+ const inputSchema = z
7
+ .object({
8
+ query: z.string(),
9
+ perPage: z.number().default(30),
10
+ page: z.number().default(1),
11
+ })
12
+ .strict();
13
+
14
+ export type GitHubSearchCodeArgs = z.input<typeof inputSchema>;
11
15
 
12
16
  @Tool({
13
- config: {
17
+ uiConfig: {
14
18
  description:
15
19
  'Searches for code across GitHub repositories using the GitHub search syntax. Returns { error: "unauthorized" } if no valid token is available.',
16
20
  },
21
+ schema: inputSchema,
17
22
  })
18
- export class GitHubSearchCodeTool implements ToolInterface {
23
+ export class GitHubSearchCodeTool extends BaseTool {
19
24
  private readonly logger = new Logger(GitHubSearchCodeTool.name);
20
25
 
21
26
  @Inject()
22
27
  private tokenStore: OAuthTokenStore;
23
28
 
24
- @Input({
25
- schema: z
26
- .object({
27
- query: z.string(),
28
- perPage: z.number().default(30),
29
- page: z.number().default(1),
30
- })
31
- .strict(),
32
- })
33
- args: GitHubSearchCodeArgs;
34
-
35
- async execute(args: GitHubSearchCodeArgs, ctx: RunContext): Promise<ToolResult> {
36
- const accessToken = await this.tokenStore.getValidAccessToken(ctx.userId, 'github');
29
+ async call(args: GitHubSearchCodeArgs): Promise<ToolResult> {
30
+ const accessToken = await this.tokenStore.getValidAccessToken(this.ctx.context.userId, 'github');
37
31
 
38
32
  if (!accessToken) {
39
33
  return {
@@ -59,7 +53,7 @@ export class GitHubSearchCodeTool implements ToolInterface {
59
53
  });
60
54
 
61
55
  if (response.status === 401 || response.status === 403) {
62
- this.logger.warn(`GitHub API returned ${response.status} for user ${ctx.userId}`);
56
+ this.logger.warn(`GitHub API returned ${response.status} for user ${this.ctx.context.userId}`);
63
57
  return {
64
58
  data: {
65
59
  error: '401',
@@ -1,43 +1,36 @@
1
1
  import { Inject, Logger } from '@nestjs/common';
2
2
  import { z } from 'zod';
3
- import { Input, RunContext, Tool, ToolInterface, ToolResult } from '@loopstack/common';
3
+ import { BaseTool, Tool, ToolResult } from '@loopstack/common';
4
4
  import { OAuthTokenStore } from '@loopstack/oauth-module';
5
5
 
6
- export type GitHubSearchIssuesArgs = {
7
- query: string;
8
- sort?: string;
9
- perPage?: number;
10
- page?: number;
11
- };
6
+ const inputSchema = z
7
+ .object({
8
+ query: z.string(),
9
+ sort: z
10
+ .enum(['comments', 'reactions', 'reactions-+1', 'reactions--1', 'interactions', 'created', 'updated'])
11
+ .optional(),
12
+ perPage: z.number().default(30),
13
+ page: z.number().default(1),
14
+ })
15
+ .strict();
16
+
17
+ export type GitHubSearchIssuesArgs = z.input<typeof inputSchema>;
12
18
 
13
19
  @Tool({
14
- config: {
20
+ uiConfig: {
15
21
  description:
16
22
  'Searches for issues and pull requests across GitHub using the GitHub search syntax. Returns { error: "unauthorized" } if no valid token is available.',
17
23
  },
24
+ schema: inputSchema,
18
25
  })
19
- export class GitHubSearchIssuesTool implements ToolInterface {
26
+ export class GitHubSearchIssuesTool extends BaseTool {
20
27
  private readonly logger = new Logger(GitHubSearchIssuesTool.name);
21
28
 
22
29
  @Inject()
23
30
  private tokenStore: OAuthTokenStore;
24
31
 
25
- @Input({
26
- schema: z
27
- .object({
28
- query: z.string(),
29
- sort: z
30
- .enum(['comments', 'reactions', 'reactions-+1', 'reactions--1', 'interactions', 'created', 'updated'])
31
- .optional(),
32
- perPage: z.number().default(30),
33
- page: z.number().default(1),
34
- })
35
- .strict(),
36
- })
37
- args: GitHubSearchIssuesArgs;
38
-
39
- async execute(args: GitHubSearchIssuesArgs, ctx: RunContext): Promise<ToolResult> {
40
- const accessToken = await this.tokenStore.getValidAccessToken(ctx.userId, 'github');
32
+ async call(args: GitHubSearchIssuesArgs): Promise<ToolResult> {
33
+ const accessToken = await this.tokenStore.getValidAccessToken(this.ctx.context.userId, 'github');
41
34
 
42
35
  if (!accessToken) {
43
36
  return {
@@ -65,7 +58,7 @@ export class GitHubSearchIssuesTool implements ToolInterface {
65
58
  });
66
59
 
67
60
  if (response.status === 401 || response.status === 403) {
68
- this.logger.warn(`GitHub API returned ${response.status} for user ${ctx.userId}`);
61
+ this.logger.warn(`GitHub API returned ${response.status} for user ${this.ctx.context.userId}`);
69
62
  return {
70
63
  data: {
71
64
  error: '401',
@@ -1,41 +1,34 @@
1
1
  import { Inject, Logger } from '@nestjs/common';
2
2
  import { z } from 'zod';
3
- import { Input, RunContext, Tool, ToolInterface, ToolResult } from '@loopstack/common';
3
+ import { BaseTool, Tool, ToolResult } from '@loopstack/common';
4
4
  import { OAuthTokenStore } from '@loopstack/oauth-module';
5
5
 
6
- export type GitHubSearchReposArgs = {
7
- query: string;
8
- sort?: string;
9
- perPage?: number;
10
- page?: number;
11
- };
6
+ const inputSchema = z
7
+ .object({
8
+ query: z.string(),
9
+ sort: z.enum(['stars', 'forks', 'help-wanted-issues', 'updated']).optional(),
10
+ perPage: z.number().default(30),
11
+ page: z.number().default(1),
12
+ })
13
+ .strict();
14
+
15
+ export type GitHubSearchReposArgs = z.input<typeof inputSchema>;
12
16
 
13
17
  @Tool({
14
- config: {
18
+ uiConfig: {
15
19
  description:
16
20
  'Searches for repositories on GitHub using the GitHub search syntax. Returns { error: "unauthorized" } if no valid token is available.',
17
21
  },
22
+ schema: inputSchema,
18
23
  })
19
- export class GitHubSearchReposTool implements ToolInterface {
24
+ export class GitHubSearchReposTool extends BaseTool {
20
25
  private readonly logger = new Logger(GitHubSearchReposTool.name);
21
26
 
22
27
  @Inject()
23
28
  private tokenStore: OAuthTokenStore;
24
29
 
25
- @Input({
26
- schema: z
27
- .object({
28
- query: z.string(),
29
- sort: z.enum(['stars', 'forks', 'help-wanted-issues', 'updated']).optional(),
30
- perPage: z.number().default(30),
31
- page: z.number().default(1),
32
- })
33
- .strict(),
34
- })
35
- args: GitHubSearchReposArgs;
36
-
37
- async execute(args: GitHubSearchReposArgs, ctx: RunContext): Promise<ToolResult> {
38
- const accessToken = await this.tokenStore.getValidAccessToken(ctx.userId, 'github');
30
+ async call(args: GitHubSearchReposArgs): Promise<ToolResult> {
31
+ const accessToken = await this.tokenStore.getValidAccessToken(this.ctx.context.userId, 'github');
39
32
 
40
33
  if (!accessToken) {
41
34
  return {
@@ -63,7 +56,7 @@ export class GitHubSearchReposTool implements ToolInterface {
63
56
  });
64
57
 
65
58
  if (response.status === 401 || response.status === 403) {
66
- this.logger.warn(`GitHub API returned ${response.status} for user ${ctx.userId}`);
59
+ this.logger.warn(`GitHub API returned ${response.status} for user ${this.ctx.context.userId}`);
67
60
  return {
68
61
  data: {
69
62
  error: '401',
@@ -1,29 +1,27 @@
1
1
  import { Inject, Logger } from '@nestjs/common';
2
2
  import { z } from 'zod';
3
- import { Input, RunContext, Tool, ToolInterface, ToolResult } from '@loopstack/common';
3
+ import { BaseTool, Tool, ToolResult } from '@loopstack/common';
4
4
  import { OAuthTokenStore } from '@loopstack/oauth-module';
5
5
 
6
- export type GitHubGetAuthenticatedUserArgs = Record<string, never>;
6
+ const inputSchema = z.object({}).strict();
7
+
8
+ export type GitHubGetAuthenticatedUserArgs = z.infer<typeof inputSchema>;
7
9
 
8
10
  @Tool({
9
- config: {
11
+ uiConfig: {
10
12
  description:
11
13
  'Gets the profile of the currently authenticated GitHub user. Returns { error: "unauthorized" } if no valid token is available.',
12
14
  },
15
+ schema: inputSchema,
13
16
  })
14
- export class GitHubGetAuthenticatedUserTool implements ToolInterface {
17
+ export class GitHubGetAuthenticatedUserTool extends BaseTool {
15
18
  private readonly logger = new Logger(GitHubGetAuthenticatedUserTool.name);
16
19
 
17
20
  @Inject()
18
21
  private tokenStore: OAuthTokenStore;
19
22
 
20
- @Input({
21
- schema: z.object({}).strict(),
22
- })
23
- args: GitHubGetAuthenticatedUserArgs;
24
-
25
- async execute(_args: GitHubGetAuthenticatedUserArgs, ctx: RunContext): Promise<ToolResult> {
26
- const accessToken = await this.tokenStore.getValidAccessToken(ctx.userId, 'github');
23
+ async call(_args: GitHubGetAuthenticatedUserArgs): Promise<ToolResult> {
24
+ const accessToken = await this.tokenStore.getValidAccessToken(this.ctx.context.userId, 'github');
27
25
 
28
26
  if (!accessToken) {
29
27
  return {
@@ -43,7 +41,7 @@ export class GitHubGetAuthenticatedUserTool implements ToolInterface {
43
41
  });
44
42
 
45
43
  if (response.status === 401 || response.status === 403) {
46
- this.logger.warn(`GitHub API returned ${response.status} for user ${ctx.userId}`);
44
+ this.logger.warn(`GitHub API returned ${response.status} for user ${this.ctx.context.userId}`);
47
45
  return {
48
46
  data: {
49
47
  error: '401',
@@ -1,35 +1,31 @@
1
1
  import { Inject, Logger } from '@nestjs/common';
2
2
  import { z } from 'zod';
3
- import { Input, RunContext, Tool, ToolInterface, ToolResult } from '@loopstack/common';
3
+ import { BaseTool, Tool, ToolResult } from '@loopstack/common';
4
4
  import { OAuthTokenStore } from '@loopstack/oauth-module';
5
5
 
6
- export type GitHubListUserOrgsArgs = {
7
- perPage?: number;
8
- };
6
+ const inputSchema = z
7
+ .object({
8
+ perPage: z.number().default(30),
9
+ })
10
+ .strict();
11
+
12
+ export type GitHubListUserOrgsArgs = z.input<typeof inputSchema>;
9
13
 
10
14
  @Tool({
11
- config: {
15
+ uiConfig: {
12
16
  description:
13
17
  'Lists organizations for the authenticated GitHub user. Returns { error: "unauthorized" } if no valid token is available.',
14
18
  },
19
+ schema: inputSchema,
15
20
  })
16
- export class GitHubListUserOrgsTool implements ToolInterface {
21
+ export class GitHubListUserOrgsTool extends BaseTool {
17
22
  private readonly logger = new Logger(GitHubListUserOrgsTool.name);
18
23
 
19
24
  @Inject()
20
25
  private tokenStore: OAuthTokenStore;
21
26
 
22
- @Input({
23
- schema: z
24
- .object({
25
- perPage: z.number().default(30),
26
- })
27
- .strict(),
28
- })
29
- args: GitHubListUserOrgsArgs;
30
-
31
- async execute(args: GitHubListUserOrgsArgs, ctx: RunContext): Promise<ToolResult> {
32
- const accessToken = await this.tokenStore.getValidAccessToken(ctx.userId, 'github');
27
+ async call(args: GitHubListUserOrgsArgs): Promise<ToolResult> {
28
+ const accessToken = await this.tokenStore.getValidAccessToken(this.ctx.context.userId, 'github');
33
29
 
34
30
  if (!accessToken) {
35
31
  return {
@@ -53,7 +49,7 @@ export class GitHubListUserOrgsTool implements ToolInterface {
53
49
  });
54
50
 
55
51
  if (response.status === 401 || response.status === 403) {
56
- this.logger.warn(`GitHub API returned ${response.status} for user ${ctx.userId}`);
52
+ this.logger.warn(`GitHub API returned ${response.status} for user ${this.ctx.context.userId}`);
57
53
  return {
58
54
  data: {
59
55
  error: '401',