@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,50 +1,48 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ToolError, defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
3
|
+
import { getMutationId, graphql } from '../github-api.js';
|
|
4
|
+
// Map from user-friendly names to GitHub GraphQL ReactionContent enum values
|
|
5
|
+
const REACTION_MAP = {
|
|
6
|
+
'+1': 'THUMBS_UP',
|
|
7
|
+
'-1': 'THUMBS_DOWN',
|
|
8
|
+
laugh: 'LAUGH',
|
|
9
|
+
confused: 'CONFUSED',
|
|
10
|
+
heart: 'HEART',
|
|
11
|
+
hooray: 'HOORAY',
|
|
12
|
+
rocket: 'ROCKET',
|
|
13
|
+
eyes: 'EYES',
|
|
14
|
+
};
|
|
4
15
|
export const addReaction = defineTool({
|
|
5
16
|
name: 'add_reaction',
|
|
6
17
|
displayName: 'Add Reaction',
|
|
7
|
-
description: 'Add a reaction to an issue, pull request, or comment.',
|
|
18
|
+
description: 'Add a reaction to an issue, pull request, or comment. Requires the node ID of the subject (e.g., from get_issue or get_pull_request).',
|
|
8
19
|
summary: 'Add a reaction to an issue or comment',
|
|
9
20
|
icon: 'smile-plus',
|
|
10
21
|
group: 'Reactions',
|
|
11
22
|
input: z.object({
|
|
12
|
-
|
|
13
|
-
|
|
23
|
+
subject_id: z
|
|
24
|
+
.string()
|
|
25
|
+
.min(1)
|
|
26
|
+
.describe('Node ID of the issue, PR, or comment to react to (e.g., "I_kwDOBPD3oc7y2-NQ", "IC_kwDOBPD3oc7xkPTu")'),
|
|
14
27
|
content: z
|
|
15
28
|
.enum(['+1', '-1', 'laugh', 'confused', 'heart', 'hooray', 'rocket', 'eyes'])
|
|
16
29
|
.describe('Reaction emoji name'),
|
|
17
|
-
issue_number: z
|
|
18
|
-
.number()
|
|
19
|
-
.int()
|
|
20
|
-
.min(1)
|
|
21
|
-
.optional()
|
|
22
|
-
.describe('Issue or PR number — provide this OR comment_id, not both'),
|
|
23
|
-
comment_id: z.number().int().min(1).optional().describe('Comment ID — provide this OR issue_number, not both'),
|
|
24
30
|
}),
|
|
25
31
|
output: z.object({
|
|
26
|
-
|
|
27
|
-
content: z.string().describe('Reaction emoji name'),
|
|
32
|
+
success: z.boolean().describe('Whether the reaction was added'),
|
|
28
33
|
}),
|
|
29
34
|
handle: async (params) => {
|
|
30
|
-
|
|
31
|
-
if (
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
const data = await api(endpoint, {
|
|
41
|
-
method: 'POST',
|
|
42
|
-
body: { content: params.content },
|
|
35
|
+
const reactionContent = REACTION_MAP[params.content];
|
|
36
|
+
if (!reactionContent)
|
|
37
|
+
throw ToolError.validation(`Unknown reaction: ${params.content}`);
|
|
38
|
+
const mutationId = await getMutationId('addReactionMutation');
|
|
39
|
+
await graphql(mutationId, {
|
|
40
|
+
input: {
|
|
41
|
+
subjectId: params.subject_id,
|
|
42
|
+
content: reactionContent,
|
|
43
|
+
},
|
|
43
44
|
});
|
|
44
|
-
return {
|
|
45
|
-
id: data.id ?? 0,
|
|
46
|
-
content: data.content ?? '',
|
|
47
|
-
};
|
|
45
|
+
return { success: true };
|
|
48
46
|
},
|
|
49
47
|
});
|
|
50
48
|
//# sourceMappingURL=add-reaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-reaction.js","sourceRoot":"","sources":["../../src/tools/add-reaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"add-reaction.js","sourceRoot":"","sources":["../../src/tools/add-reaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE1D,6EAA6E;AAC7E,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;IACpC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,cAAc;IAC3B,WAAW,EACT,uIAAuI;IACzI,OAAO,EAAE,uCAAuC;IAChD,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,sGAAsG,CAAC;QACnH,OAAO,EAAE,CAAC;aACP,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;aAC5E,QAAQ,CAAC,qBAAqB,CAAC;KACnC,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAChE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe;YAAE,MAAM,SAAS,CAAC,UAAU,CAAC,qBAAqB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAExF,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,qBAAqB,CAAC,CAAC;QAC9D,MAAM,OAAO,CAAC,UAAU,EAAE;YACxB,KAAK,EAAE;gBACL,SAAS,EAAE,MAAM,CAAC,UAAU;gBAC5B,OAAO,EAAE,eAAe;aACzB;SACF,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -4,19 +4,13 @@ export declare const compareCommits: import("@opentabs-dev/plugin-sdk").ToolDefi
|
|
|
4
4
|
repo: z.ZodString;
|
|
5
5
|
basehead: z.ZodString;
|
|
6
6
|
}, z.core.$strip>, z.ZodObject<{
|
|
7
|
-
status: z.ZodString;
|
|
8
|
-
ahead_by: z.ZodNumber;
|
|
9
|
-
behind_by: z.ZodNumber;
|
|
10
|
-
total_commits: z.ZodNumber;
|
|
11
7
|
files: z.ZodArray<z.ZodObject<{
|
|
12
8
|
filename: z.ZodString;
|
|
13
9
|
status: z.ZodString;
|
|
14
10
|
additions: z.ZodNumber;
|
|
15
11
|
deletions: z.ZodNumber;
|
|
12
|
+
changes: z.ZodNumber;
|
|
16
13
|
}, z.core.$strip>>;
|
|
17
|
-
|
|
18
|
-
sha: z.ZodString;
|
|
19
|
-
message: z.ZodString;
|
|
20
|
-
}, z.core.$strip>>;
|
|
14
|
+
total_files: z.ZodNumber;
|
|
21
15
|
}, z.core.$strip>>;
|
|
22
16
|
//# sourceMappingURL=compare-commits.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compare-commits.d.ts","sourceRoot":"","sources":["../../src/tools/compare-commits.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compare-commits.d.ts","sourceRoot":"","sources":["../../src/tools/compare-commits.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;kBAoDzB,CAAC"}
|
|
@@ -1,16 +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
|
-
|
|
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
|
-
});
|
|
10
|
-
const compareCommitSchema = z.object({
|
|
11
|
-
sha: z.string().describe('Full commit SHA'),
|
|
12
|
-
message: z.string().describe('Commit message'),
|
|
13
|
-
});
|
|
4
|
+
import { isAuthenticated, pageEmbeddedData } from '../github-api.js';
|
|
5
|
+
import { fileDiffSchema, mapFileDiff } from './schemas.js';
|
|
14
6
|
export const compareCommits = defineTool({
|
|
15
7
|
name: 'compare_commits',
|
|
16
8
|
displayName: 'Compare Commits',
|
|
@@ -27,31 +19,37 @@ export const compareCommits = defineTool({
|
|
|
27
19
|
.describe('Base and head to compare in "base...head" format (e.g., "main...feature-branch")'),
|
|
28
20
|
}),
|
|
29
21
|
output: z.object({
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
behind_by: z.number().describe('Number of commits head is behind base'),
|
|
33
|
-
total_commits: z.number().describe('Total number of commits in the comparison'),
|
|
34
|
-
files: z.array(compareFileSchema).describe('List of changed files'),
|
|
35
|
-
commits: z.array(compareCommitSchema).describe('List of commits'),
|
|
22
|
+
files: z.array(fileDiffSchema).describe('List of changed files'),
|
|
23
|
+
total_files: z.number().describe('Total number of files changed'),
|
|
36
24
|
}),
|
|
37
25
|
handle: async (params) => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
})
|
|
54
|
-
|
|
26
|
+
if (!isAuthenticated())
|
|
27
|
+
throw ToolError.auth('Not authenticated — please log in to GitHub.');
|
|
28
|
+
// The compare page with embedded data has file diff summaries
|
|
29
|
+
try {
|
|
30
|
+
const data = await pageEmbeddedData(`/${params.owner}/${params.repo}/compare/${params.basehead}`);
|
|
31
|
+
const summaries = data.pullRequestsChangesRoute?.diffSummaries ?? [];
|
|
32
|
+
return {
|
|
33
|
+
files: summaries.map(mapFileDiff),
|
|
34
|
+
total_files: summaries.length,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Compare page might not have embedded data. Parse the HTML instead.
|
|
39
|
+
const html = await fetchText(`/${params.owner}/${params.repo}/compare/${params.basehead}`, {
|
|
40
|
+
headers: { 'X-Requested-With': 'XMLHttpRequest' },
|
|
41
|
+
});
|
|
42
|
+
const doc = new DOMParser().parseFromString(html, 'text/html');
|
|
43
|
+
const fileEls = doc.querySelectorAll('.file-info a, [data-path]');
|
|
44
|
+
const files = [...fileEls].map(el => ({
|
|
45
|
+
filename: el.getAttribute('data-path') ?? el.textContent?.trim() ?? '',
|
|
46
|
+
status: 'modified',
|
|
47
|
+
additions: 0,
|
|
48
|
+
deletions: 0,
|
|
49
|
+
changes: 0,
|
|
50
|
+
}));
|
|
51
|
+
return { files, total_files: files.length };
|
|
52
|
+
}
|
|
55
53
|
},
|
|
56
54
|
});
|
|
57
55
|
//# sourceMappingURL=compare-commits.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compare-commits.js","sourceRoot":"","sources":["../../src/tools/compare-commits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"compare-commits.js","sourceRoot":"","sources":["../../src/tools/compare-commits.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,6 @@ export declare const createComment: import("@opentabs-dev/plugin-sdk").ToolDefin
|
|
|
5
5
|
issue_number: z.ZodNumber;
|
|
6
6
|
body: z.ZodString;
|
|
7
7
|
}, z.core.$strip>, z.ZodObject<{
|
|
8
|
-
|
|
9
|
-
id: z.ZodNumber;
|
|
10
|
-
body: z.ZodString;
|
|
11
|
-
user_login: z.ZodString;
|
|
12
|
-
html_url: z.ZodString;
|
|
13
|
-
created_at: z.ZodString;
|
|
14
|
-
updated_at: z.ZodString;
|
|
15
|
-
}, z.core.$strip>;
|
|
8
|
+
success: z.ZodBoolean;
|
|
16
9
|
}, z.core.$strip>>;
|
|
17
10
|
//# sourceMappingURL=create-comment.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-comment.d.ts","sourceRoot":"","sources":["../../src/tools/create-comment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"create-comment.d.ts","sourceRoot":"","sources":["../../src/tools/create-comment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,aAAa;;;;;;;kBAuCxB,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
import { commentSchema, mapComment } from './schemas.js';
|
|
3
|
+
import { submitPageForm } from '../github-api.js';
|
|
5
4
|
export const createComment = defineTool({
|
|
6
5
|
name: 'create_comment',
|
|
7
6
|
displayName: 'Create Comment',
|
|
@@ -16,11 +15,28 @@ export const createComment = defineTool({
|
|
|
16
15
|
body: z.string().min(1).describe('Comment body in Markdown'),
|
|
17
16
|
}),
|
|
18
17
|
output: z.object({
|
|
19
|
-
|
|
18
|
+
success: z.boolean().describe('Whether the comment was created successfully'),
|
|
20
19
|
}),
|
|
21
20
|
handle: async (params) => {
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
// Determine if this is a PR or issue by trying the PR URL first
|
|
22
|
+
const prPath = `/${params.owner}/${params.repo}/pull/${params.issue_number}`;
|
|
23
|
+
const issuePath = `/${params.owner}/${params.repo}/issues/${params.issue_number}`;
|
|
24
|
+
// Try PR page first, fall back to issue page
|
|
25
|
+
let pagePath;
|
|
26
|
+
try {
|
|
27
|
+
await submitPageForm(prPath, 'form.js-new-comment-form', {
|
|
28
|
+
'comment[body]': params.body,
|
|
29
|
+
});
|
|
30
|
+
return { success: true };
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// If PR page doesn't have the form, try issue page
|
|
34
|
+
pagePath = issuePath;
|
|
35
|
+
}
|
|
36
|
+
await submitPageForm(pagePath, 'form.js-new-comment-form', {
|
|
37
|
+
'comment[body]': params.body,
|
|
38
|
+
});
|
|
39
|
+
return { success: true };
|
|
24
40
|
},
|
|
25
41
|
});
|
|
26
42
|
//# sourceMappingURL=create-comment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-comment.js","sourceRoot":"","sources":["../../src/tools/create-comment.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":"create-comment.js","sourceRoot":"","sources":["../../src/tools/create-comment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;IACtC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,gBAAgB;IAC7B,WAAW,EAAE,4CAA4C;IACzD,OAAO,EAAE,2CAA2C;IACpD,IAAI,EAAE,qBAAqB;IAC3B,KAAK,EAAE,UAAU;IACjB,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,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC9E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAC7D,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;KAC9E,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,gEAAgE;QAChE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,SAAS,MAAM,CAAC,YAAY,EAAE,CAAC;QAC7E,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,WAAW,MAAM,CAAC,YAAY,EAAE,CAAC;QAElF,6CAA6C;QAC7C,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,MAAM,EAAE,0BAA0B,EAAE;gBACvD,eAAe,EAAE,MAAM,CAAC,IAAI;aAC7B,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;YACnD,QAAQ,GAAG,SAAS,CAAC;QACvB,CAAC;QAED,MAAM,cAAc,CAAC,QAAQ,EAAE,0BAA0B,EAAE;YACzD,eAAe,EAAE,MAAM,CAAC,IAAI;SAC7B,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -4,8 +4,6 @@ export declare const createIssue: import("@opentabs-dev/plugin-sdk").ToolDefinit
|
|
|
4
4
|
repo: z.ZodString;
|
|
5
5
|
title: z.ZodString;
|
|
6
6
|
body: z.ZodOptional<z.ZodString>;
|
|
7
|
-
labels: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
8
|
-
assignees: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
9
7
|
}, z.core.$strip>, z.ZodObject<{
|
|
10
8
|
issue: z.ZodObject<{
|
|
11
9
|
number: z.ZodNumber;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-issue.d.ts","sourceRoot":"","sources":["../../src/tools/create-issue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"create-issue.d.ts","sourceRoot":"","sources":["../../src/tools/create-issue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;kBAqDtB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
import { issueSchema
|
|
3
|
+
import { getMutationId, graphql, turboData } from '../github-api.js';
|
|
4
|
+
import { issueSchema } from './schemas.js';
|
|
5
5
|
export const createIssue = defineTool({
|
|
6
6
|
name: 'create_issue',
|
|
7
7
|
displayName: 'Create Issue',
|
|
@@ -14,25 +14,42 @@ export const createIssue = defineTool({
|
|
|
14
14
|
repo: z.string().min(1).describe('Repository name'),
|
|
15
15
|
title: z.string().min(1).describe('Issue title'),
|
|
16
16
|
body: z.string().optional().describe('Issue body in Markdown'),
|
|
17
|
-
labels: z.array(z.string()).optional().describe('Label names to apply'),
|
|
18
|
-
assignees: z.array(z.string()).optional().describe('Logins of users to assign'),
|
|
19
17
|
}),
|
|
20
18
|
output: z.object({
|
|
21
19
|
issue: issueSchema.describe('The created issue'),
|
|
22
20
|
}),
|
|
23
21
|
handle: async (params) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
22
|
+
// Discover the repository's GraphQL node ID via the issues page embedded data
|
|
23
|
+
const { data: repoData } = await turboData(`/${params.owner}/${params.repo}/issues`, { q: 'is:issue is:open' });
|
|
24
|
+
const repoId = repoData?.repository?.id;
|
|
25
|
+
if (!repoId)
|
|
26
|
+
throw new Error('Could not determine repository ID');
|
|
27
|
+
const mutationId = await getMutationId('createIssueMutation');
|
|
28
|
+
const result = await graphql(mutationId, {
|
|
29
|
+
input: {
|
|
30
|
+
repositoryId: repoId,
|
|
31
|
+
title: params.title,
|
|
32
|
+
body: params.body ?? '',
|
|
33
|
+
},
|
|
34
34
|
});
|
|
35
|
-
|
|
35
|
+
const issue = result.createIssue?.issue;
|
|
36
|
+
return {
|
|
37
|
+
issue: {
|
|
38
|
+
number: issue?.number ?? 0,
|
|
39
|
+
title: issue?.title ?? params.title,
|
|
40
|
+
state: 'open',
|
|
41
|
+
body: params.body ?? '',
|
|
42
|
+
html_url: issue?.url ?? `https://github.com/${params.owner}/${params.repo}/issues/${issue?.number ?? 0}`,
|
|
43
|
+
user_login: '',
|
|
44
|
+
labels: [],
|
|
45
|
+
assignees: [],
|
|
46
|
+
comments: 0,
|
|
47
|
+
created_at: new Date().toISOString(),
|
|
48
|
+
updated_at: new Date().toISOString(),
|
|
49
|
+
closed_at: '',
|
|
50
|
+
is_pull_request: false,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
36
53
|
},
|
|
37
54
|
});
|
|
38
55
|
//# sourceMappingURL=create-issue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-issue.js","sourceRoot":"","sources":["../../src/tools/create-issue.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":"create-issue.js","sourceRoot":"","sources":["../../src/tools/create-issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAY3C,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;IACpC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,qCAAqC;IAClD,OAAO,EAAE,oCAAoC;IAC7C,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,QAAQ;IACf,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,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;QAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KAC/D,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KACjD,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,8EAA8E;QAC9E,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,SAAS,CACxC,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,SAAS,EACxC,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAC1B,CAAC;QACF,MAAM,MAAM,GAAG,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAElE,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,qBAAqB,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAoB,UAAU,EAAE;YAC1D,KAAK,EAAE;gBACL,YAAY,EAAE,MAAM;gBACpB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;aACxB;SACF,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC;QACxC,OAAO;YACL,KAAK,EAAE;gBACL,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;gBAC1B,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK;gBACnC,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;gBACvB,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,sBAAsB,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,WAAW,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE;gBACxG,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,EAAE;gBACV,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,CAAC;gBACX,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,SAAS,EAAE,EAAE;gBACb,eAAe,EAAE,KAAK;aACvB;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-label.d.ts","sourceRoot":"","sources":["../../src/tools/create-label.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"create-label.d.ts","sourceRoot":"","sources":["../../src/tools/create-label.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;kBA2CtB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
import { labelSchema
|
|
3
|
+
import { getMutationId, graphql, turboData } from '../github-api.js';
|
|
4
|
+
import { labelSchema } from './schemas.js';
|
|
5
5
|
export const createLabel = defineTool({
|
|
6
6
|
name: 'create_label',
|
|
7
7
|
displayName: 'Create Label',
|
|
@@ -20,18 +20,26 @@ export const createLabel = defineTool({
|
|
|
20
20
|
label: labelSchema.describe('The created label'),
|
|
21
21
|
}),
|
|
22
22
|
handle: async (params) => {
|
|
23
|
-
|
|
23
|
+
// Get repository node ID
|
|
24
|
+
const { data: repoData } = await turboData(`/${params.owner}/${params.repo}/issues`, { q: 'is:issue is:open' });
|
|
25
|
+
const repoId = repoData?.repository?.id;
|
|
26
|
+
if (!repoId)
|
|
27
|
+
throw new Error('Could not determine repository ID');
|
|
28
|
+
const mutationId = await getMutationId('createRepositoryLabelMutation');
|
|
29
|
+
await graphql(mutationId, {
|
|
30
|
+
repositoryId: repoId,
|
|
24
31
|
name: params.name,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
body.color = params.color;
|
|
28
|
-
if (params.description !== undefined)
|
|
29
|
-
body.description = params.description;
|
|
30
|
-
const data = await api(`/repos/${params.owner}/${params.repo}/labels`, {
|
|
31
|
-
method: 'POST',
|
|
32
|
-
body,
|
|
32
|
+
color: params.color ?? 'ededed',
|
|
33
|
+
description: params.description ?? '',
|
|
33
34
|
});
|
|
34
|
-
return {
|
|
35
|
+
return {
|
|
36
|
+
label: {
|
|
37
|
+
id: 0,
|
|
38
|
+
name: params.name,
|
|
39
|
+
color: params.color ?? 'ededed',
|
|
40
|
+
description: params.description ?? '',
|
|
41
|
+
},
|
|
42
|
+
};
|
|
35
43
|
},
|
|
36
44
|
});
|
|
37
45
|
//# sourceMappingURL=create-label.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-label.js","sourceRoot":"","sources":["../../src/tools/create-label.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":"create-label.js","sourceRoot":"","sources":["../../src/tools/create-label.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;IACpC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,qCAAqC;IAClD,OAAO,EAAE,gCAAgC;IACzC,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,QAAQ;IACf,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,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;QAC9F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KACjE,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KACjD,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,yBAAyB;QACzB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,SAAS,CACxC,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,SAAS,EACxC,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAC1B,CAAC;QACF,MAAM,MAAM,GAAG,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAElE,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,+BAA+B,CAAC,CAAC;QACxE,MAAM,OAAO,CAAC,UAAU,EAAE;YACxB,YAAY,EAAE,MAAM;YACpB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,QAAQ;YAC/B,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;SACtC,CAAC,CAAC;QAEH,OAAO;YACL,KAAK,EAAE;gBACL,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,QAAQ;gBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;aACtC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -6,10 +6,7 @@ export declare const createOrUpdateFile: import("@opentabs-dev/plugin-sdk").Tool
|
|
|
6
6
|
content: z.ZodString;
|
|
7
7
|
message: z.ZodString;
|
|
8
8
|
branch: z.ZodOptional<z.ZodString>;
|
|
9
|
-
sha: z.ZodOptional<z.ZodString>;
|
|
10
9
|
}, z.core.$strip>, z.ZodObject<{
|
|
11
|
-
|
|
12
|
-
commit_sha: z.ZodString;
|
|
13
|
-
html_url: z.ZodString;
|
|
10
|
+
success: z.ZodBoolean;
|
|
14
11
|
}, z.core.$strip>>;
|
|
15
12
|
//# sourceMappingURL=create-or-update-file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-or-update-file.d.ts","sourceRoot":"","sources":["../../src/tools/create-or-update-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"create-or-update-file.d.ts","sourceRoot":"","sources":["../../src/tools/create-or-update-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,kBAAkB;;;;;;;;;kBA+C7B,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
3
|
+
import { submitPageForm } from '../github-api.js';
|
|
4
4
|
export const createOrUpdateFile = defineTool({
|
|
5
5
|
name: 'create_or_update_file',
|
|
6
6
|
displayName: 'Create or Update File',
|
|
7
|
-
description: 'Create or update a file in a repository.
|
|
7
|
+
description: 'Create or update a file in a repository. Commits directly to the specified branch.',
|
|
8
8
|
summary: 'Create or update a file in a repository',
|
|
9
9
|
icon: 'file-edit',
|
|
10
10
|
group: 'Repositories',
|
|
@@ -12,35 +12,35 @@ export const createOrUpdateFile = defineTool({
|
|
|
12
12
|
owner: z.string().min(1).describe('Repository owner (user or org)'),
|
|
13
13
|
repo: z.string().min(1).describe('Repository name'),
|
|
14
14
|
path: z.string().min(1).describe('File path relative to repository root'),
|
|
15
|
-
content: z.string().min(1).describe('File content as a UTF-8 string
|
|
15
|
+
content: z.string().min(1).describe('File content as a UTF-8 string'),
|
|
16
16
|
message: z.string().min(1).describe('Commit message'),
|
|
17
17
|
branch: z.string().optional().describe('Branch to commit to (defaults to the default branch)'),
|
|
18
|
-
sha: z.string().optional().describe('SHA of the file being replaced — required when updating an existing file'),
|
|
19
18
|
}),
|
|
20
19
|
output: z.object({
|
|
21
|
-
|
|
22
|
-
commit_sha: z.string().describe('SHA of the commit'),
|
|
23
|
-
html_url: z.string().describe('URL to the file on GitHub'),
|
|
20
|
+
success: z.boolean().describe('Whether the file was created/updated'),
|
|
24
21
|
}),
|
|
25
22
|
handle: async (params) => {
|
|
26
|
-
const
|
|
23
|
+
const branch = params.branch ?? 'main';
|
|
24
|
+
// GitHub's file editor page has a form for creating/updating files.
|
|
25
|
+
// For new files: /:owner/:repo/new/:branch
|
|
26
|
+
// For existing files: /:owner/:repo/edit/:branch/:path
|
|
27
|
+
const fields = {
|
|
28
|
+
value: params.content,
|
|
27
29
|
message: params.message,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
body.sha = params.sha;
|
|
34
|
-
const encodedPath = params.path.split('/').map(encodeURIComponent).join('/');
|
|
35
|
-
const data = await api(`/repos/${params.owner}/${params.repo}/contents/${encodedPath}`, {
|
|
36
|
-
method: 'PUT',
|
|
37
|
-
body,
|
|
38
|
-
});
|
|
39
|
-
return {
|
|
40
|
-
sha: data.content?.sha ?? '',
|
|
41
|
-
commit_sha: data.commit?.sha ?? '',
|
|
42
|
-
html_url: data.content?.html_url ?? '',
|
|
30
|
+
placeholder_message: params.message,
|
|
31
|
+
'commit-choice': 'direct',
|
|
32
|
+
target_branch: branch,
|
|
33
|
+
quick_pull: '',
|
|
34
|
+
filename: params.path.split('/').pop() ?? '',
|
|
43
35
|
};
|
|
36
|
+
// Try the edit path first (for existing files), fall back to new path
|
|
37
|
+
try {
|
|
38
|
+
await submitPageForm(`/${params.owner}/${params.repo}/edit/${branch}/${params.path}`, 'form.js-blob-form', fields);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
await submitPageForm(`/${params.owner}/${params.repo}/new/${branch}`, 'form.js-blob-form', fields);
|
|
42
|
+
}
|
|
43
|
+
return { success: true };
|
|
44
44
|
},
|
|
45
45
|
});
|
|
46
46
|
//# sourceMappingURL=create-or-update-file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-or-update-file.js","sourceRoot":"","sources":["../../src/tools/create-or-update-file.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":"create-or-update-file.js","sourceRoot":"","sources":["../../src/tools/create-or-update-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;IAC3C,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,uBAAuB;IACpC,WAAW,EAAE,oFAAoF;IACjG,OAAO,EAAE,yCAAyC;IAClD,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,cAAc;IACrB,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,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QACzE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACrE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACrD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;KAC/F,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KACtE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC;QAEvC,oEAAoE;QACpE,2CAA2C;QAC3C,uDAAuD;QACvD,MAAM,MAAM,GAA2B;YACrC,KAAK,EAAE,MAAM,CAAC,OAAO;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,mBAAmB,EAAE,MAAM,CAAC,OAAO;YACnC,eAAe,EAAE,QAAQ;YACzB,aAAa,EAAE,MAAM;YACrB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE;SAC7C,CAAC;QAEF,sEAAsE;QACtE,IAAI,CAAC;YACH,MAAM,cAAc,CAClB,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,SAAS,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,EAC/D,mBAAmB,EACnB,MAAM,CACP,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,cAAc,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,QAAQ,MAAM,EAAE,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;QACrG,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-pull-request.d.ts","sourceRoot":"","sources":["../../src/tools/create-pull-request.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"create-pull-request.d.ts","sourceRoot":"","sources":["../../src/tools/create-pull-request.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4D5B,CAAC"}
|