n8n-nodes-github-copilot 1.0.7 → 1.0.8
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.
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
2
|
export declare class GitHubApi implements ICredentialType {
|
|
3
3
|
name: string;
|
|
4
4
|
displayName: string;
|
|
5
|
+
extends: string[];
|
|
5
6
|
documentationUrl: string;
|
|
6
7
|
properties: INodeProperties[];
|
|
7
|
-
authenticate: IAuthenticateGeneric;
|
|
8
|
-
test: ICredentialTestRequest;
|
|
9
8
|
}
|
|
@@ -4,36 +4,47 @@ exports.GitHubApi = void 0;
|
|
|
4
4
|
class GitHubApi {
|
|
5
5
|
constructor() {
|
|
6
6
|
this.name = 'gitHubApi';
|
|
7
|
-
this.displayName = 'GitHub API';
|
|
8
|
-
this.
|
|
7
|
+
this.displayName = 'GitHub OAuth2 API';
|
|
8
|
+
this.extends = ['oAuth2Api'];
|
|
9
|
+
this.documentationUrl = 'https://docs.github.com/en/developers/apps/building-oauth-apps/authorizing-oauth-apps';
|
|
9
10
|
this.properties = [
|
|
10
11
|
{
|
|
11
|
-
displayName: '
|
|
12
|
-
name: '
|
|
13
|
-
type: '
|
|
14
|
-
|
|
15
|
-
password: true,
|
|
16
|
-
},
|
|
17
|
-
default: '',
|
|
18
|
-
required: true,
|
|
19
|
-
description: 'GitHub OAuth Token (gho_...) for GitHub Copilot CLI. Generate via: gh auth login --web. Required for Copilot CLI access.',
|
|
12
|
+
displayName: 'Grant Type',
|
|
13
|
+
name: 'grantType',
|
|
14
|
+
type: 'hidden',
|
|
15
|
+
default: 'authorizationCode',
|
|
20
16
|
},
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
{
|
|
18
|
+
displayName: 'Authorization URL',
|
|
19
|
+
name: 'authUrl',
|
|
20
|
+
type: 'hidden',
|
|
21
|
+
default: 'https://github.com/login/oauth/authorize',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
displayName: 'Access Token URL',
|
|
25
|
+
name: 'accessTokenUrl',
|
|
26
|
+
type: 'hidden',
|
|
27
|
+
default: 'https://github.com/login/oauth/access_token',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
displayName: 'Scope',
|
|
31
|
+
name: 'scope',
|
|
32
|
+
type: 'hidden',
|
|
33
|
+
default: 'copilot read:org repo user',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
displayName: 'Auth URI Query Parameters',
|
|
37
|
+
name: 'authQueryParameters',
|
|
38
|
+
type: 'hidden',
|
|
39
|
+
default: '',
|
|
28
40
|
},
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
method: 'GET',
|
|
41
|
+
{
|
|
42
|
+
displayName: 'Authentication',
|
|
43
|
+
name: 'authentication',
|
|
44
|
+
type: 'hidden',
|
|
45
|
+
default: 'header',
|
|
35
46
|
},
|
|
36
|
-
|
|
47
|
+
];
|
|
37
48
|
}
|
|
38
49
|
}
|
|
39
50
|
exports.GitHubApi = GitHubApi;
|
|
@@ -5,6 +5,45 @@ const n8n_workflow_1 = require("n8n-workflow");
|
|
|
5
5
|
const child_process_1 = require("child_process");
|
|
6
6
|
const util_1 = require("util");
|
|
7
7
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
8
|
+
function filterCopilotOutput(rawOutput) {
|
|
9
|
+
const lines = rawOutput.split('\n');
|
|
10
|
+
let startIndex = -1;
|
|
11
|
+
const endIndex = lines.length;
|
|
12
|
+
for (let i = 0; i < lines.length; i++) {
|
|
13
|
+
const line = lines[i].trim();
|
|
14
|
+
if (line.includes('# Explanation:') ||
|
|
15
|
+
line.includes('# Suggestion:') ||
|
|
16
|
+
line.includes('# Command:') ||
|
|
17
|
+
line.includes('# Code:') ||
|
|
18
|
+
(line.startsWith('•') && i > 5)) {
|
|
19
|
+
startIndex = i;
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (startIndex === -1) {
|
|
24
|
+
for (let i = 0; i < lines.length; i++) {
|
|
25
|
+
const line = lines[i].trim();
|
|
26
|
+
if (line.includes('version ') && line.includes('(') && line.includes(')')) {
|
|
27
|
+
startIndex = i + 3;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (startIndex === -1) {
|
|
33
|
+
for (let i = 0; i < lines.length; i++) {
|
|
34
|
+
const line = lines[i].trim();
|
|
35
|
+
if (line.length > 10 && !line.includes('Welcome to') && !line.includes('powered by AI')) {
|
|
36
|
+
startIndex = i;
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (startIndex >= 0) {
|
|
42
|
+
const filteredLines = lines.slice(startIndex, endIndex);
|
|
43
|
+
return filteredLines.join('\n').trim();
|
|
44
|
+
}
|
|
45
|
+
return rawOutput.trim();
|
|
46
|
+
}
|
|
8
47
|
class GitHubCopilot {
|
|
9
48
|
constructor() {
|
|
10
49
|
this.description = {
|
|
@@ -66,6 +105,13 @@ class GitHubCopilot {
|
|
|
66
105
|
placeholder: 'Enter your request...',
|
|
67
106
|
description: 'What you want GitHub Copilot to help with',
|
|
68
107
|
},
|
|
108
|
+
{
|
|
109
|
+
displayName: 'Filter Output',
|
|
110
|
+
name: 'filterOutput',
|
|
111
|
+
type: 'boolean',
|
|
112
|
+
default: true,
|
|
113
|
+
description: 'Remove GitHub Copilot CLI header and footer, keeping only the useful response',
|
|
114
|
+
},
|
|
69
115
|
{
|
|
70
116
|
displayName: 'Language',
|
|
71
117
|
name: 'language',
|
|
@@ -175,10 +221,11 @@ class GitHubCopilot {
|
|
|
175
221
|
default:
|
|
176
222
|
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Unknown operation: ${operation}`);
|
|
177
223
|
}
|
|
224
|
+
const accessToken = credentials.accessToken;
|
|
178
225
|
const { stdout, stderr } = await execAsync(command, {
|
|
179
226
|
env: {
|
|
180
227
|
...process.env,
|
|
181
|
-
GH_TOKEN:
|
|
228
|
+
GH_TOKEN: accessToken,
|
|
182
229
|
HOME: '/opt/n8n-source/packages/cli/bin',
|
|
183
230
|
},
|
|
184
231
|
timeout: 30000,
|
|
@@ -187,6 +234,11 @@ class GitHubCopilot {
|
|
|
187
234
|
if (stderr && !stdout) {
|
|
188
235
|
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `GitHub Copilot CLI error: ${stderr}`);
|
|
189
236
|
}
|
|
237
|
+
const filterOutput = this.getNodeParameter('filterOutput', i, true);
|
|
238
|
+
let processedOutput = stdout;
|
|
239
|
+
if (filterOutput) {
|
|
240
|
+
processedOutput = filterCopilotOutput(stdout);
|
|
241
|
+
}
|
|
190
242
|
returnData.push({
|
|
191
243
|
json: {
|
|
192
244
|
operation,
|
|
@@ -194,6 +246,7 @@ class GitHubCopilot {
|
|
|
194
246
|
context: context || undefined,
|
|
195
247
|
language: operation === 'suggest' ? this.getNodeParameter('language', i) : undefined,
|
|
196
248
|
commandType: operation === 'shell' ? this.getNodeParameter('commandType', i) : undefined,
|
|
249
|
+
output: processedOutput,
|
|
197
250
|
cliRawOutput: stdout,
|
|
198
251
|
timestamp: new Date().toISOString(),
|
|
199
252
|
},
|
package/package.json
CHANGED