@opentabs-dev/opentabs-plugin-github 0.0.76 → 0.0.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -129
- package/dist/adapter.iife.js +1149 -663
- package/dist/adapter.iife.js.map +4 -4
- package/dist/github-api.d.ts +16 -10
- package/dist/github-api.d.ts.map +1 -1
- package/dist/github-api.js +314 -112
- package/dist/github-api.js.map +1 -1
- package/dist/tools/add-reaction.d.ts +5 -9
- package/dist/tools/add-reaction.d.ts.map +1 -1
- package/dist/tools/add-reaction.js +29 -31
- package/dist/tools/add-reaction.js.map +1 -1
- package/dist/tools/compare-commits.d.ts +2 -8
- package/dist/tools/compare-commits.d.ts.map +1 -1
- package/dist/tools/compare-commits.js +32 -34
- package/dist/tools/compare-commits.js.map +1 -1
- package/dist/tools/create-comment.d.ts +1 -8
- package/dist/tools/create-comment.d.ts.map +1 -1
- package/dist/tools/create-comment.js +21 -5
- package/dist/tools/create-comment.js.map +1 -1
- package/dist/tools/create-issue.d.ts +0 -2
- package/dist/tools/create-issue.d.ts.map +1 -1
- package/dist/tools/create-issue.js +32 -15
- package/dist/tools/create-issue.js.map +1 -1
- package/dist/tools/create-label.d.ts.map +1 -1
- package/dist/tools/create-label.js +20 -12
- package/dist/tools/create-label.js.map +1 -1
- package/dist/tools/create-or-update-file.d.ts +1 -4
- package/dist/tools/create-or-update-file.d.ts.map +1 -1
- package/dist/tools/create-or-update-file.js +23 -23
- package/dist/tools/create-or-update-file.js.map +1 -1
- package/dist/tools/create-pull-request.d.ts.map +1 -1
- package/dist/tools/create-pull-request.js +37 -16
- package/dist/tools/create-pull-request.js.map +1 -1
- package/dist/tools/create-release.d.ts.map +1 -1
- package/dist/tools/create-release.js +29 -19
- package/dist/tools/create-release.js.map +1 -1
- package/dist/tools/create-repo.d.ts.map +1 -1
- package/dist/tools/create-repo.js +33 -18
- package/dist/tools/create-repo.js.map +1 -1
- package/dist/tools/delete-file.d.ts +1 -6
- package/dist/tools/delete-file.d.ts.map +1 -1
- package/dist/tools/delete-file.js +8 -25
- package/dist/tools/delete-file.js.map +1 -1
- package/dist/tools/get-file-content.d.ts.map +1 -1
- package/dist/tools/get-file-content.js +5 -9
- package/dist/tools/get-file-content.js.map +1 -1
- package/dist/tools/get-issue.d.ts.map +1 -1
- package/dist/tools/get-issue.js +25 -4
- package/dist/tools/get-issue.js.map +1 -1
- package/dist/tools/get-pull-request-diff.d.ts.map +1 -1
- package/dist/tools/get-pull-request-diff.js +19 -5
- package/dist/tools/get-pull-request-diff.js.map +1 -1
- package/dist/tools/get-pull-request.d.ts.map +1 -1
- package/dist/tools/get-pull-request.js +32 -3
- package/dist/tools/get-pull-request.js.map +1 -1
- package/dist/tools/get-repo.d.ts.map +1 -1
- package/dist/tools/get-repo.js +21 -4
- package/dist/tools/get-repo.js.map +1 -1
- package/dist/tools/get-user-profile.d.ts.map +1 -1
- package/dist/tools/get-user-profile.js +15 -2
- package/dist/tools/get-user-profile.js.map +1 -1
- package/dist/tools/get-workflow-run.d.ts.map +1 -1
- package/dist/tools/get-workflow-run.js +28 -5
- package/dist/tools/get-workflow-run.js.map +1 -1
- package/dist/tools/list-branches.d.ts +0 -2
- package/dist/tools/list-branches.d.ts.map +1 -1
- package/dist/tools/list-branches.js +3 -9
- package/dist/tools/list-branches.js.map +1 -1
- package/dist/tools/list-comments.d.ts +0 -2
- package/dist/tools/list-comments.d.ts.map +1 -1
- package/dist/tools/list-comments.js +33 -10
- package/dist/tools/list-comments.js.map +1 -1
- package/dist/tools/list-commits.d.ts +0 -2
- package/dist/tools/list-commits.d.ts.map +1 -1
- package/dist/tools/list-commits.js +8 -13
- package/dist/tools/list-commits.js.map +1 -1
- package/dist/tools/list-issues.d.ts +2 -2
- package/dist/tools/list-issues.d.ts.map +1 -1
- package/dist/tools/list-issues.js +43 -16
- package/dist/tools/list-issues.js.map +1 -1
- package/dist/tools/list-labels.d.ts +0 -2
- package/dist/tools/list-labels.d.ts.map +1 -1
- package/dist/tools/list-labels.js +18 -10
- package/dist/tools/list-labels.js.map +1 -1
- package/dist/tools/list-notifications.d.ts +1 -6
- package/dist/tools/list-notifications.d.ts.map +1 -1
- package/dist/tools/list-notifications.js +30 -23
- package/dist/tools/list-notifications.js.map +1 -1
- package/dist/tools/list-org-members.d.ts +0 -3
- package/dist/tools/list-org-members.d.ts.map +1 -1
- package/dist/tools/list-org-members.js +24 -18
- package/dist/tools/list-org-members.js.map +1 -1
- package/dist/tools/list-pull-request-files.d.ts +0 -3
- package/dist/tools/list-pull-request-files.d.ts.map +1 -1
- package/dist/tools/list-pull-request-files.js +6 -28
- package/dist/tools/list-pull-request-files.js.map +1 -1
- package/dist/tools/list-pull-requests.d.ts +2 -4
- package/dist/tools/list-pull-requests.d.ts.map +1 -1
- package/dist/tools/list-pull-requests.js +34 -18
- package/dist/tools/list-pull-requests.js.map +1 -1
- package/dist/tools/list-releases.d.ts +0 -2
- package/dist/tools/list-releases.d.ts.map +1 -1
- package/dist/tools/list-releases.js +37 -10
- package/dist/tools/list-releases.js.map +1 -1
- package/dist/tools/list-repos.d.ts +0 -7
- package/dist/tools/list-repos.d.ts.map +1 -1
- package/dist/tools/list-repos.js +18 -23
- package/dist/tools/list-repos.js.map +1 -1
- package/dist/tools/list-workflow-runs.d.ts +0 -21
- package/dist/tools/list-workflow-runs.d.ts.map +1 -1
- package/dist/tools/list-workflow-runs.js +32 -43
- package/dist/tools/list-workflow-runs.js.map +1 -1
- package/dist/tools/merge-pull-request.d.ts +1 -3
- package/dist/tools/merge-pull-request.d.ts.map +1 -1
- package/dist/tools/merge-pull-request.js +11 -15
- package/dist/tools/merge-pull-request.js.map +1 -1
- package/dist/tools/request-pull-request-review.d.ts +1 -21
- package/dist/tools/request-pull-request-review.d.ts.map +1 -1
- package/dist/tools/request-pull-request-review.js +17 -10
- package/dist/tools/request-pull-request-review.js.map +1 -1
- package/dist/tools/schemas.d.ts +130 -38
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +140 -52
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/search-issues.d.ts +0 -13
- package/dist/tools/search-issues.d.ts.map +1 -1
- package/dist/tools/search-issues.js +23 -17
- package/dist/tools/search-issues.js.map +1 -1
- package/dist/tools/search-repos.d.ts +0 -10
- package/dist/tools/search-repos.d.ts.map +1 -1
- package/dist/tools/search-repos.js +7 -12
- package/dist/tools/search-repos.js.map +1 -1
- package/dist/tools/update-issue.d.ts +2 -18
- package/dist/tools/update-issue.d.ts.map +1 -1
- package/dist/tools/update-issue.js +19 -16
- package/dist/tools/update-issue.js.map +1 -1
- package/dist/tools/update-pull-request.d.ts +2 -24
- package/dist/tools/update-pull-request.d.ts.map +1 -1
- package/dist/tools/update-pull-request.js +28 -20
- package/dist/tools/update-pull-request.js.map +1 -1
- package/dist/tools.json +70 -747
- package/package.json +10 -4
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { ToolError, fetchText } from '@opentabs-dev/plugin-sdk';
|
|
1
2
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
3
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
4
|
+
import { isAuthenticated } from '../github-api.js';
|
|
5
|
+
import { notificationSchema } from './schemas.js';
|
|
5
6
|
export const listNotifications = defineTool({
|
|
6
7
|
name: 'list_notifications',
|
|
7
8
|
displayName: 'List Notifications',
|
|
@@ -9,31 +10,37 @@ export const listNotifications = defineTool({
|
|
|
9
10
|
summary: 'List notifications for the authenticated user',
|
|
10
11
|
icon: 'bell',
|
|
11
12
|
group: 'Users',
|
|
12
|
-
input: z.object({
|
|
13
|
-
all: z.boolean().optional().describe('Show all notifications including read ones (default: false)'),
|
|
14
|
-
participating: z
|
|
15
|
-
.boolean()
|
|
16
|
-
.optional()
|
|
17
|
-
.describe('Only show notifications where the user is directly participating (default: false)'),
|
|
18
|
-
per_page: z.number().int().min(1).max(100).optional().describe('Results per page (default 30, max 100)'),
|
|
19
|
-
page: z.number().int().min(1).optional().describe('Page number (default 1)'),
|
|
20
|
-
}),
|
|
13
|
+
input: z.object({}),
|
|
21
14
|
output: z.object({
|
|
22
15
|
notifications: z.array(notificationSchema).describe('List of notifications'),
|
|
23
16
|
}),
|
|
24
|
-
handle: async (
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
query.all = params.all;
|
|
31
|
-
if (params.participating !== undefined)
|
|
32
|
-
query.participating = params.participating;
|
|
33
|
-
const data = await api('/notifications', {
|
|
34
|
-
query,
|
|
17
|
+
handle: async () => {
|
|
18
|
+
if (!isAuthenticated())
|
|
19
|
+
throw ToolError.auth('Not authenticated — please log in to GitHub.');
|
|
20
|
+
// Fetch the notifications page and parse from HTML
|
|
21
|
+
const html = await fetchText('/notifications', {
|
|
22
|
+
headers: { 'X-Requested-With': 'XMLHttpRequest' },
|
|
35
23
|
});
|
|
36
|
-
|
|
24
|
+
const doc = new DOMParser().parseFromString(html, 'text/html');
|
|
25
|
+
const items = doc.querySelectorAll('.notifications-list-item, .notification-list-item-link');
|
|
26
|
+
const notifications = [];
|
|
27
|
+
for (const item of items) {
|
|
28
|
+
const titleEl = item.querySelector('.markdown-title, .notification-list-item-link');
|
|
29
|
+
const repoEl = item.querySelector('.notification-list-item-repo, .text-small');
|
|
30
|
+
const timeEl = item.querySelector('relative-time, time');
|
|
31
|
+
const typeEl = item.querySelector('.type-icon');
|
|
32
|
+
notifications.push({
|
|
33
|
+
id: item.getAttribute('data-notification-id') ?? '',
|
|
34
|
+
reason: '',
|
|
35
|
+
unread: item.classList.contains('notification-unread'),
|
|
36
|
+
subject_title: titleEl?.textContent?.trim() ?? '',
|
|
37
|
+
subject_type: typeEl?.getAttribute('aria-label') ?? '',
|
|
38
|
+
subject_url: '',
|
|
39
|
+
repository_full_name: repoEl?.textContent?.trim() ?? '',
|
|
40
|
+
updated_at: timeEl?.getAttribute('datetime') ?? '',
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return { notifications };
|
|
37
44
|
},
|
|
38
45
|
});
|
|
39
46
|
//# sourceMappingURL=list-notifications.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-notifications.js","sourceRoot":"","sources":["../../src/tools/list-notifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-notifications.js","sourceRoot":"","sources":["../../src/tools/list-notifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;IAC1C,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,+FAA+F;IAC5G,OAAO,EAAE,+CAA+C;IACxD,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KAC7E,CAAC;IACF,MAAM,EAAE,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC,eAAe,EAAE;YAAE,MAAM,SAAS,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAE7F,mDAAmD;QACnD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,gBAAgB,EAAE;YAC7C,OAAO,EAAE,EAAE,kBAAkB,EAAE,gBAAgB,EAAE;SAClD,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,wDAAwD,CAAC,CAAC;QAC7F,MAAM,aAAa,GAAG,EAAE,CAAC;QAEzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,+CAA+C,CAAC,CAAC;YACpF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,2CAA2C,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAEhD,aAAa,CAAC,IAAI,CAAC;gBACjB,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,IAAI,EAAE;gBACnD,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACtD,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;gBACjD,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE;gBACtD,WAAW,EAAE,EAAE;gBACf,oBAAoB,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;gBACvD,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE;aACnD,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,aAAa,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare const listOrgMembers: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
3
|
org: z.ZodString;
|
|
4
|
-
per_page: z.ZodOptional<z.ZodNumber>;
|
|
5
|
-
page: z.ZodOptional<z.ZodNumber>;
|
|
6
4
|
}, z.core.$strip>, z.ZodObject<{
|
|
7
5
|
members: z.ZodArray<z.ZodObject<{
|
|
8
6
|
login: z.ZodString;
|
|
9
|
-
id: z.ZodNumber;
|
|
10
7
|
avatar_url: z.ZodString;
|
|
11
8
|
html_url: z.ZodString;
|
|
12
9
|
}, z.core.$strip>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-org-members.d.ts","sourceRoot":"","sources":["../../src/tools/list-org-members.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list-org-members.d.ts","sourceRoot":"","sources":["../../src/tools/list-org-members.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,cAAc;;;;;;;;kBA+CzB,CAAC"}
|
|
@@ -1,42 +1,48 @@
|
|
|
1
|
+
import { ToolError, fetchText } from '@opentabs-dev/plugin-sdk';
|
|
1
2
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
3
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
+
import { isAuthenticated } from '../github-api.js';
|
|
4
5
|
export const listOrgMembers = defineTool({
|
|
5
6
|
name: 'list_org_members',
|
|
6
7
|
displayName: 'List Organization Members',
|
|
7
|
-
description: 'List
|
|
8
|
+
description: 'List members of a GitHub organization.',
|
|
8
9
|
summary: 'List members of an organization',
|
|
9
10
|
icon: 'users',
|
|
10
11
|
group: 'Users',
|
|
11
12
|
input: z.object({
|
|
12
13
|
org: z.string().min(1).describe('Organization name'),
|
|
13
|
-
per_page: z.number().int().min(1).max(100).optional().describe('Results per page (default 30, max 100)'),
|
|
14
|
-
page: z.number().int().min(1).optional().describe('Page number (default 1)'),
|
|
15
14
|
}),
|
|
16
15
|
output: z.object({
|
|
17
16
|
members: z
|
|
18
17
|
.array(z.object({
|
|
19
18
|
login: z.string().describe('Username'),
|
|
20
|
-
id: z.number().describe('User ID'),
|
|
21
19
|
avatar_url: z.string().describe('Avatar URL'),
|
|
22
20
|
html_url: z.string().describe('Profile URL'),
|
|
23
21
|
}))
|
|
24
22
|
.describe('List of organization members'),
|
|
25
23
|
}),
|
|
26
24
|
handle: async (params) => {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
25
|
+
if (!isAuthenticated())
|
|
26
|
+
throw ToolError.auth('Not authenticated — please log in to GitHub.');
|
|
27
|
+
const html = await fetchText(`/orgs/${params.org}/people`, {
|
|
28
|
+
headers: { 'X-Requested-With': 'XMLHttpRequest' },
|
|
29
|
+
});
|
|
30
|
+
const doc = new DOMParser().parseFromString(html, 'text/html');
|
|
31
|
+
const memberEls = doc.querySelectorAll('.member-list-item, [data-bulk-actions-id]');
|
|
32
|
+
const members = [];
|
|
33
|
+
for (const el of memberEls) {
|
|
34
|
+
const linkEl = el.querySelector('a[data-hovercard-type="user"]');
|
|
35
|
+
const imgEl = el.querySelector('img.avatar');
|
|
36
|
+
const login = linkEl?.textContent?.trim() ?? '';
|
|
37
|
+
if (!login)
|
|
38
|
+
continue;
|
|
39
|
+
members.push({
|
|
40
|
+
login,
|
|
41
|
+
avatar_url: imgEl?.getAttribute('src') ?? '',
|
|
42
|
+
html_url: `https://github.com/${login}`,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return { members };
|
|
40
46
|
},
|
|
41
47
|
});
|
|
42
48
|
//# sourceMappingURL=list-org-members.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-org-members.js","sourceRoot":"","sources":["../../src/tools/list-org-members.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-org-members.js","sourceRoot":"","sources":["../../src/tools/list-org-members.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,2BAA2B;IACxC,WAAW,EAAE,wCAAwC;IACrD,OAAO,EAAE,iCAAiC;IAC1C,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KACrD,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC;aACP,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;SAC7C,CAAC,CACH;aACA,QAAQ,CAAC,8BAA8B,CAAC;KAC5C,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,IAAI,CAAC,eAAe,EAAE;YAAE,MAAM,SAAS,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAE7F,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,MAAM,CAAC,GAAG,SAAS,EAAE;YACzD,OAAO,EAAE,EAAE,kBAAkB,EAAE,gBAAgB,EAAE;SAClD,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,GAAG,CAAC,gBAAgB,CAAC,2CAA2C,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,+BAA+B,CAAC,CAAC;YACjE,MAAM,KAAK,GAAG,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK;gBAAE,SAAS;YAErB,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK;gBACL,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE;gBAC5C,QAAQ,EAAE,sBAAsB,KAAK,EAAE;aACxC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -3,8 +3,6 @@ export declare const listPullRequestFiles: import("@opentabs-dev/plugin-sdk").To
|
|
|
3
3
|
owner: z.ZodString;
|
|
4
4
|
repo: z.ZodString;
|
|
5
5
|
pull_number: z.ZodNumber;
|
|
6
|
-
per_page: z.ZodOptional<z.ZodNumber>;
|
|
7
|
-
page: z.ZodOptional<z.ZodNumber>;
|
|
8
6
|
}, z.core.$strip>, z.ZodObject<{
|
|
9
7
|
files: z.ZodArray<z.ZodObject<{
|
|
10
8
|
filename: z.ZodString;
|
|
@@ -12,7 +10,6 @@ export declare const listPullRequestFiles: import("@opentabs-dev/plugin-sdk").To
|
|
|
12
10
|
additions: z.ZodNumber;
|
|
13
11
|
deletions: z.ZodNumber;
|
|
14
12
|
changes: z.ZodNumber;
|
|
15
|
-
patch: z.ZodString;
|
|
16
13
|
}, z.core.$strip>>;
|
|
17
14
|
}, z.core.$strip>>;
|
|
18
15
|
//# sourceMappingURL=list-pull-request-files.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-pull-request-files.d.ts","sourceRoot":"","sources":["../../src/tools/list-pull-request-files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"list-pull-request-files.d.ts","sourceRoot":"","sources":["../../src/tools/list-pull-request-files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;kBAuB/B,CAAC"}
|
|
@@ -1,22 +1,7 @@
|
|
|
1
1
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
filename: z.string().describe('File path'),
|
|
6
|
-
status: z.string().describe('File status: added, removed, modified, renamed, copied, changed, unchanged'),
|
|
7
|
-
additions: z.number().describe('Number of lines added'),
|
|
8
|
-
deletions: z.number().describe('Number of lines deleted'),
|
|
9
|
-
changes: z.number().describe('Total number of line changes'),
|
|
10
|
-
patch: z.string().describe('Unified diff patch text (may be empty for binary files)'),
|
|
11
|
-
});
|
|
12
|
-
const mapPrFile = (f) => ({
|
|
13
|
-
filename: f.filename ?? '',
|
|
14
|
-
status: f.status ?? '',
|
|
15
|
-
additions: f.additions ?? 0,
|
|
16
|
-
deletions: f.deletions ?? 0,
|
|
17
|
-
changes: f.changes ?? 0,
|
|
18
|
-
patch: f.patch ?? '',
|
|
19
|
-
});
|
|
3
|
+
import { pageEmbeddedData } from '../github-api.js';
|
|
4
|
+
import { fileDiffSchema, mapFileDiff } from './schemas.js';
|
|
20
5
|
export const listPullRequestFiles = defineTool({
|
|
21
6
|
name: 'list_pull_request_files',
|
|
22
7
|
displayName: 'List Pull Request Files',
|
|
@@ -28,21 +13,14 @@ export const listPullRequestFiles = defineTool({
|
|
|
28
13
|
owner: z.string().min(1).describe('Repository owner (user or org)'),
|
|
29
14
|
repo: z.string().min(1).describe('Repository name'),
|
|
30
15
|
pull_number: z.number().int().min(1).describe('Pull request number'),
|
|
31
|
-
per_page: z.number().int().min(1).max(100).optional().describe('Results per page (default 30, max 100)'),
|
|
32
|
-
page: z.number().int().min(1).optional().describe('Page number (default 1)'),
|
|
33
16
|
}),
|
|
34
17
|
output: z.object({
|
|
35
|
-
files: z.array(
|
|
18
|
+
files: z.array(fileDiffSchema).describe('List of changed files'),
|
|
36
19
|
}),
|
|
37
20
|
handle: async (params) => {
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
};
|
|
42
|
-
const data = await api(`/repos/${params.owner}/${params.repo}/pulls/${params.pull_number}/files`, {
|
|
43
|
-
query,
|
|
44
|
-
});
|
|
45
|
-
return { files: (data ?? []).map(mapPrFile) };
|
|
21
|
+
const data = await pageEmbeddedData(`/${params.owner}/${params.repo}/pull/${params.pull_number}/files`);
|
|
22
|
+
const summaries = data.pullRequestsChangesRoute?.diffSummaries ?? [];
|
|
23
|
+
return { files: summaries.map(mapFileDiff) };
|
|
46
24
|
},
|
|
47
25
|
});
|
|
48
26
|
//# sourceMappingURL=list-pull-request-files.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-pull-request-files.js","sourceRoot":"","sources":["../../src/tools/list-pull-request-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-pull-request-files.js","sourceRoot":"","sources":["../../src/tools/list-pull-request-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAoB,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAQ7E,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EAAE,yBAAyB;IACtC,WAAW,EACT,yGAAyG;IAC3G,OAAO,EAAE,sCAAsC;IAC/C,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,eAAe;IACtB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACnE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACnD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KACrE,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KACjE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,gBAAgB,CACjC,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,SAAS,MAAM,CAAC,WAAW,QAAQ,CACnE,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,wBAAwB,EAAE,aAAa,IAAI,EAAE,CAAC;QACrE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;IAC/C,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -3,8 +3,8 @@ export declare const listPullRequests: import("@opentabs-dev/plugin-sdk").ToolDe
|
|
|
3
3
|
owner: z.ZodString;
|
|
4
4
|
repo: z.ZodString;
|
|
5
5
|
state: z.ZodOptional<z.ZodEnum<{
|
|
6
|
-
open: "open";
|
|
7
6
|
closed: "closed";
|
|
7
|
+
open: "open";
|
|
8
8
|
all: "all";
|
|
9
9
|
}>>;
|
|
10
10
|
sort: z.ZodOptional<z.ZodEnum<{
|
|
@@ -14,11 +14,9 @@ export declare const listPullRequests: import("@opentabs-dev/plugin-sdk").ToolDe
|
|
|
14
14
|
"long-running": "long-running";
|
|
15
15
|
}>>;
|
|
16
16
|
direction: z.ZodOptional<z.ZodEnum<{
|
|
17
|
-
asc: "asc";
|
|
18
17
|
desc: "desc";
|
|
18
|
+
asc: "asc";
|
|
19
19
|
}>>;
|
|
20
|
-
head: z.ZodOptional<z.ZodString>;
|
|
21
|
-
base: z.ZodOptional<z.ZodString>;
|
|
22
20
|
per_page: z.ZodOptional<z.ZodNumber>;
|
|
23
21
|
page: z.ZodOptional<z.ZodNumber>;
|
|
24
22
|
}, z.core.$strip>, z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-pull-requests.d.ts","sourceRoot":"","sources":["../../src/tools/list-pull-requests.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"list-pull-requests.d.ts","sourceRoot":"","sources":["../../src/tools/list-pull-requests.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkBxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0D3B,CAAC"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
import { mapPullRequest, pullRequestSchema } from './schemas.js';
|
|
3
|
+
import { discoverQueryId, graphql } from '../github-api.js';
|
|
4
|
+
import { mapPullRequest, pullRequestSchema, relayNodeToRaw } from './schemas.js';
|
|
5
|
+
// IssueIndexPageQuery is the Relay query used by the issues/PR list page.
|
|
6
|
+
// Its query ID is discovered at runtime from embedded page data.
|
|
7
|
+
const ISSUE_INDEX_QUERY_NAME = 'IssueIndexPageQuery';
|
|
5
8
|
export const listPullRequests = defineTool({
|
|
6
9
|
name: 'list_pull_requests',
|
|
7
10
|
displayName: 'List Pull Requests',
|
|
@@ -18,28 +21,41 @@ export const listPullRequests = defineTool({
|
|
|
18
21
|
.optional()
|
|
19
22
|
.describe('Sort field (default: created)'),
|
|
20
23
|
direction: z.enum(['asc', 'desc']).optional().describe('Sort direction (default: desc)'),
|
|
21
|
-
|
|
22
|
-
base: z.string().optional().describe('Filter by base branch name'),
|
|
23
|
-
per_page: z.number().int().min(1).max(100).optional().describe('Results per page (default 30, max 100)'),
|
|
24
|
+
per_page: z.number().int().min(1).max(100).optional().describe('Results per page (default 25)'),
|
|
24
25
|
page: z.number().int().min(1).optional().describe('Page number (default 1)'),
|
|
25
26
|
}),
|
|
26
27
|
output: z.object({
|
|
27
28
|
pull_requests: z.array(pullRequestSchema).describe('List of pull requests'),
|
|
28
29
|
}),
|
|
29
30
|
handle: async (params) => {
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
31
|
+
const state = params.state ?? 'open';
|
|
32
|
+
const sort = params.sort === 'popularity' ? 'reactions' : (params.sort ?? 'created');
|
|
33
|
+
const dir = params.direction ?? 'desc';
|
|
34
|
+
const perPage = params.per_page ?? 25;
|
|
35
|
+
const page = params.page ?? 1;
|
|
36
|
+
// Build the search query for IssueIndexPageQuery
|
|
37
|
+
const stateFilter = state === 'all' ? '' : `is:${state}`;
|
|
38
|
+
const sortFilter = `sort:${sort}-${dir}`;
|
|
39
|
+
const query = `is:pr ${stateFilter} repo:${params.owner}/${params.repo} ${sortFilter}`.trim();
|
|
40
|
+
// Discover the persisted query ID for IssueIndexPageQuery
|
|
41
|
+
const queryId = await discoverQueryId(ISSUE_INDEX_QUERY_NAME, `/${params.owner}/${params.repo}/issues`, {
|
|
42
|
+
type: 'pr',
|
|
43
|
+
q: 'is:pr is:open',
|
|
44
|
+
});
|
|
45
|
+
const skip = (page - 1) * perPage;
|
|
46
|
+
const data = await graphql(queryId, {
|
|
47
|
+
owner: params.owner,
|
|
48
|
+
name: params.repo,
|
|
49
|
+
query,
|
|
50
|
+
skip,
|
|
51
|
+
includeReactions: false,
|
|
52
|
+
});
|
|
53
|
+
const edges = data?.repository?.search?.edges ?? [];
|
|
54
|
+
const pullRequests = edges
|
|
55
|
+
.map(e => relayNodeToRaw(e.node))
|
|
56
|
+
.filter((n) => n.__typename === 'PullRequest')
|
|
57
|
+
.map(n => mapPullRequest(n, { owner: params.owner, repo: params.repo }));
|
|
58
|
+
return { pull_requests: pullRequests };
|
|
43
59
|
},
|
|
44
60
|
});
|
|
45
61
|
//# sourceMappingURL=list-pull-requests.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-pull-requests.js","sourceRoot":"","sources":["../../src/tools/list-pull-requests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-pull-requests.js","sourceRoot":"","sources":["../../src/tools/list-pull-requests.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,6 @@ import { z } from 'zod';
|
|
|
2
2
|
export declare const listReleases: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
3
|
owner: z.ZodString;
|
|
4
4
|
repo: z.ZodString;
|
|
5
|
-
per_page: z.ZodOptional<z.ZodNumber>;
|
|
6
|
-
page: z.ZodOptional<z.ZodNumber>;
|
|
7
5
|
}, z.core.$strip>, z.ZodObject<{
|
|
8
6
|
releases: z.ZodArray<z.ZodObject<{
|
|
9
7
|
id: z.ZodNumber;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-releases.d.ts","sourceRoot":"","sources":["../../src/tools/list-releases.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list-releases.d.ts","sourceRoot":"","sources":["../../src/tools/list-releases.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;kBAuDvB,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { ToolError, fetchText } from '@opentabs-dev/plugin-sdk';
|
|
1
2
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
3
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
4
|
+
import { isAuthenticated } from '../github-api.js';
|
|
5
|
+
import { releaseSchema } from './schemas.js';
|
|
5
6
|
export const listReleases = defineTool({
|
|
6
7
|
name: 'list_releases',
|
|
7
8
|
displayName: 'List Releases',
|
|
@@ -12,19 +13,45 @@ export const listReleases = defineTool({
|
|
|
12
13
|
input: z.object({
|
|
13
14
|
owner: z.string().min(1).describe('Repository owner (user or org)'),
|
|
14
15
|
repo: z.string().min(1).describe('Repository name'),
|
|
15
|
-
per_page: z.number().int().min(1).max(100).optional().describe('Results per page (default 30, max 100)'),
|
|
16
|
-
page: z.number().int().min(1).optional().describe('Page number (default 1)'),
|
|
17
16
|
}),
|
|
18
17
|
output: z.object({
|
|
19
18
|
releases: z.array(releaseSchema).describe('List of releases'),
|
|
20
19
|
}),
|
|
21
20
|
handle: async (params) => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
if (!isAuthenticated())
|
|
22
|
+
throw ToolError.auth('Not authenticated — please log in to GitHub.');
|
|
23
|
+
const html = await fetchText(`/${params.owner}/${params.repo}/releases`, {
|
|
24
|
+
headers: { 'X-Requested-With': 'XMLHttpRequest' },
|
|
25
|
+
});
|
|
26
|
+
const doc = new DOMParser().parseFromString(html, 'text/html');
|
|
27
|
+
// Parse releases from the HTML page
|
|
28
|
+
const releaseCards = doc.querySelectorAll('[data-testid="release-card"], .release, section');
|
|
29
|
+
const releases = [];
|
|
30
|
+
for (const card of releaseCards) {
|
|
31
|
+
const tagEl = card.querySelector('[data-testid="release-card-tag"], .release-tag, a[href*="tag"]');
|
|
32
|
+
const titleEl = card.querySelector('[data-testid="release-card-title"], .release-title, h2 a');
|
|
33
|
+
const bodyEl = card.querySelector('.markdown-body');
|
|
34
|
+
const timeEl = card.querySelector('relative-time, time');
|
|
35
|
+
const authorEl = card.querySelector('a[data-hovercard-type="user"]');
|
|
36
|
+
const isDraft = card.textContent?.includes('Draft') ?? false;
|
|
37
|
+
const isPrerelease = card.textContent?.includes('Pre-release') ?? false;
|
|
38
|
+
const tagName = tagEl?.textContent?.trim() ?? '';
|
|
39
|
+
if (!tagName)
|
|
40
|
+
continue;
|
|
41
|
+
releases.push({
|
|
42
|
+
id: 0,
|
|
43
|
+
tag_name: tagName,
|
|
44
|
+
name: titleEl?.textContent?.trim() ?? tagName,
|
|
45
|
+
body: bodyEl?.textContent?.trim() ?? '',
|
|
46
|
+
draft: isDraft,
|
|
47
|
+
prerelease: isPrerelease,
|
|
48
|
+
created_at: timeEl?.getAttribute('datetime') ?? '',
|
|
49
|
+
published_at: timeEl?.getAttribute('datetime') ?? '',
|
|
50
|
+
html_url: `https://github.com/${params.owner}/${params.repo}/releases/tag/${tagName}`,
|
|
51
|
+
author_login: authorEl?.textContent?.trim() ?? '',
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return { releases };
|
|
28
55
|
},
|
|
29
56
|
});
|
|
30
57
|
//# sourceMappingURL=list-releases.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-releases.js","sourceRoot":"","sources":["../../src/tools/list-releases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-releases.js","sourceRoot":"","sources":["../../src/tools/list-releases.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare const listRepos: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
3
|
owner: z.ZodOptional<z.ZodString>;
|
|
4
|
-
type: z.ZodOptional<z.ZodEnum<{
|
|
5
|
-
owner: "owner";
|
|
6
|
-
private: "private";
|
|
7
|
-
all: "all";
|
|
8
|
-
public: "public";
|
|
9
|
-
member: "member";
|
|
10
|
-
}>>;
|
|
11
4
|
sort: z.ZodOptional<z.ZodEnum<{
|
|
12
5
|
full_name: "full_name";
|
|
13
6
|
created: "created";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-repos.d.ts","sourceRoot":"","sources":["../../src/tools/list-repos.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"list-repos.d.ts","sourceRoot":"","sources":["../../src/tools/list-repos.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;kBAyCpB,CAAC"}
|
package/dist/tools/list-repos.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
3
|
+
import { getLogin, pageJson } from '../github-api.js';
|
|
4
4
|
import { mapRepository, repositorySchema } from './schemas.js';
|
|
5
5
|
export const listRepos = defineTool({
|
|
6
6
|
name: 'list_repos',
|
|
@@ -11,10 +11,6 @@ export const listRepos = defineTool({
|
|
|
11
11
|
group: 'Repositories',
|
|
12
12
|
input: z.object({
|
|
13
13
|
owner: z.string().optional().describe('Username or org name — defaults to the authenticated user'),
|
|
14
|
-
type: z
|
|
15
|
-
.enum(['all', 'owner', 'public', 'private', 'member'])
|
|
16
|
-
.optional()
|
|
17
|
-
.describe('Type filter for user repos (default: all)'),
|
|
18
14
|
sort: z.enum(['created', 'updated', 'pushed', 'full_name']).optional().describe('Sort field (default: updated)'),
|
|
19
15
|
per_page: z.number().int().min(1).max(100).optional().describe('Results per page (default 30, max 100)'),
|
|
20
16
|
page: z.number().int().min(1).optional().describe('Page number (default 1)'),
|
|
@@ -24,25 +20,24 @@ export const listRepos = defineTool({
|
|
|
24
20
|
}),
|
|
25
21
|
handle: async (params) => {
|
|
26
22
|
const owner = params.owner ?? getLogin();
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
const sort = params.sort ?? 'updated';
|
|
24
|
+
// Use same-origin /search endpoint which works for private repos
|
|
25
|
+
const sortMap = {
|
|
26
|
+
updated: 'updated',
|
|
27
|
+
created: 'created',
|
|
28
|
+
pushed: 'updated',
|
|
29
|
+
full_name: 'repositories',
|
|
30
|
+
};
|
|
31
|
+
const data = await pageJson('/search', {
|
|
32
|
+
type: 'repositories',
|
|
33
|
+
q: `user:${owner}`,
|
|
34
|
+
s: sortMap[sort] ?? 'updated',
|
|
35
|
+
o: 'desc',
|
|
36
|
+
p: params.page ?? 1,
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
repositories: (data.results ?? []).map(r => mapRepository(r)),
|
|
32
40
|
};
|
|
33
|
-
let endpoint;
|
|
34
|
-
if (isOrg) {
|
|
35
|
-
endpoint = `/users/${owner}/repos`;
|
|
36
|
-
if (params.type)
|
|
37
|
-
query.type = params.type;
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
endpoint = '/user/repos';
|
|
41
|
-
if (params.type)
|
|
42
|
-
query.type = params.type;
|
|
43
|
-
}
|
|
44
|
-
const data = await api(endpoint, { query });
|
|
45
|
-
return { repositories: (data ?? []).map(mapRepository) };
|
|
46
41
|
},
|
|
47
42
|
});
|
|
48
43
|
//# sourceMappingURL=list-repos.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-repos.js","sourceRoot":"","sources":["../../src/tools/list-repos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-repos.js","sourceRoot":"","sources":["../../src/tools/list-repos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAgB,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAO7E,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;IAClC,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,mBAAmB;IAChC,WAAW,EACT,sHAAsH;IACxH,OAAO,EAAE,8CAA8C;IACvD,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;QAClG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAChH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QACxG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KAC7E,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KACzE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC;QAEtC,iEAAiE;QACjE,MAAM,OAAO,GAA2B;YACtC,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,cAAc;SAC1B,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAgB,SAAS,EAAE;YACpD,IAAI,EAAE,cAAc;YACpB,CAAC,EAAE,QAAQ,KAAK,EAAE;YAClB,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS;YAC7B,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC;SACpB,CAAC,CAAC;QAEH,OAAO;YACL,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SAC9D,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -2,28 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
export declare const listWorkflowRuns: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
3
|
owner: z.ZodString;
|
|
4
4
|
repo: z.ZodString;
|
|
5
|
-
workflow_id: z.ZodOptional<z.ZodString>;
|
|
6
|
-
branch: z.ZodOptional<z.ZodString>;
|
|
7
|
-
status: z.ZodOptional<z.ZodEnum<{
|
|
8
|
-
success: "success";
|
|
9
|
-
completed: "completed";
|
|
10
|
-
action_required: "action_required";
|
|
11
|
-
cancelled: "cancelled";
|
|
12
|
-
failure: "failure";
|
|
13
|
-
neutral: "neutral";
|
|
14
|
-
skipped: "skipped";
|
|
15
|
-
stale: "stale";
|
|
16
|
-
timed_out: "timed_out";
|
|
17
|
-
in_progress: "in_progress";
|
|
18
|
-
queued: "queued";
|
|
19
|
-
requested: "requested";
|
|
20
|
-
waiting: "waiting";
|
|
21
|
-
pending: "pending";
|
|
22
|
-
}>>;
|
|
23
|
-
per_page: z.ZodOptional<z.ZodNumber>;
|
|
24
|
-
page: z.ZodOptional<z.ZodNumber>;
|
|
25
5
|
}, z.core.$strip>, z.ZodObject<{
|
|
26
|
-
total_count: z.ZodNumber;
|
|
27
6
|
workflow_runs: z.ZodArray<z.ZodObject<{
|
|
28
7
|
id: z.ZodNumber;
|
|
29
8
|
name: z.ZodString;
|