n8n-nodes-github-copilot 3.27.6 → 3.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/credentials/GitHubCopilotApi.credentials.d.ts +1 -1
  2. package/dist/credentials/GitHubCopilotApi.credentials.js +19 -19
  3. package/dist/credentials/GitHubCopilotOAuth2Api.credentials.backup.d.ts +1 -1
  4. package/dist/credentials/GitHubCopilotOAuth2Api.credentials.backup.js +71 -71
  5. package/dist/credentials/GitHubCopilotOAuth2Api.credentials.d.ts +1 -1
  6. package/dist/credentials/GitHubCopilotOAuth2Api.credentials.js +67 -67
  7. package/dist/credentials/GitHubCopilotOAuth2Api.credentials.oauth.d.ts +1 -1
  8. package/dist/credentials/GitHubCopilotOAuth2Api.credentials.oauth.js +38 -38
  9. package/dist/nodes/GitHubCopilot/GitHubCopilot.node.d.ts +1 -1
  10. package/dist/nodes/GitHubCopilot/GitHubCopilot.node.js +188 -181
  11. package/dist/nodes/GitHubCopilotChatAPI/GitHubCopilotChatAPI.node.d.ts +1 -1
  12. package/dist/nodes/GitHubCopilotChatAPI/GitHubCopilotChatAPI.node.js +38 -38
  13. package/dist/nodes/GitHubCopilotChatAPI/nodeProperties.d.ts +1 -1
  14. package/dist/nodes/GitHubCopilotChatAPI/nodeProperties.js +97 -97
  15. package/dist/nodes/GitHubCopilotChatAPI/utils/imageProcessor.d.ts +2 -2
  16. package/dist/nodes/GitHubCopilotChatAPI/utils/imageProcessor.js +16 -15
  17. package/dist/nodes/GitHubCopilotChatAPI/utils/index.d.ts +3 -3
  18. package/dist/nodes/GitHubCopilotChatAPI/utils/mediaDetection.d.ts +3 -3
  19. package/dist/nodes/GitHubCopilotChatAPI/utils/mediaDetection.js +20 -26
  20. package/dist/nodes/GitHubCopilotChatAPI/utils/modelCapabilities.d.ts +1 -1
  21. package/dist/nodes/GitHubCopilotChatAPI/utils/modelCapabilities.js +24 -24
  22. package/dist/nodes/GitHubCopilotChatAPI/utils/types.d.ts +4 -4
  23. package/dist/nodes/GitHubCopilotChatModel/GitHubCopilotChatModel.node.d.ts +1 -1
  24. package/dist/nodes/GitHubCopilotChatModel/GitHubCopilotChatModel.node.js +86 -82
  25. package/dist/nodes/GitHubCopilotOpenAI/GitHubCopilotOpenAI.node.d.ts +5 -0
  26. package/dist/nodes/GitHubCopilotOpenAI/GitHubCopilotOpenAI.node.js +142 -0
  27. package/dist/nodes/GitHubCopilotOpenAI/nodeProperties.d.ts +2 -0
  28. package/dist/nodes/GitHubCopilotOpenAI/nodeProperties.js +326 -0
  29. package/dist/nodes/GitHubCopilotOpenAI/utils/index.d.ts +2 -0
  30. package/dist/nodes/GitHubCopilotOpenAI/utils/index.js +24 -0
  31. package/dist/nodes/GitHubCopilotOpenAI/utils/openaiCompat.d.ts +95 -0
  32. package/dist/nodes/GitHubCopilotOpenAI/utils/openaiCompat.js +175 -0
  33. package/dist/nodes/GitHubCopilotOpenAI/utils/types.d.ts +101 -0
  34. package/dist/nodes/GitHubCopilotOpenAI/utils/types.js +2 -0
  35. package/dist/nodes/GitHubCopilotTest/GitHubCopilotTest.node.d.ts +1 -1
  36. package/dist/nodes/GitHubCopilotTest/GitHubCopilotTest.node.js +96 -94
  37. package/package.json +75 -74
@@ -11,12 +11,14 @@ async function listAvailableModels(token, enableRetry = true, maxRetries = 3) {
11
11
  for (let attempt = 1; attempt <= maxRetries + 1; attempt++) {
12
12
  try {
13
13
  const response = await fetch(GitHubCopilotEndpoints_1.GitHubCopilotEndpoints.getModelsUrl(), {
14
- method: 'GET',
14
+ method: "GET",
15
15
  headers: GitHubCopilotEndpoints_1.GitHubCopilotEndpoints.getAuthHeaders(token),
16
16
  });
17
17
  if (!response.ok) {
18
18
  const errorText = await response.text();
19
- if (GitHubCopilotEndpoints_1.GitHubCopilotEndpoints.isTpmQuotaError(response.status) && enableRetry && attempt <= maxRetries) {
19
+ if (GitHubCopilotEndpoints_1.GitHubCopilotEndpoints.isTpmQuotaError(response.status) &&
20
+ enableRetry &&
21
+ attempt <= maxRetries) {
20
22
  const delay = GitHubCopilotEndpoints_1.GitHubCopilotEndpoints.getRetryDelay(attempt);
21
23
  retryInfo.retries.push({
22
24
  attempt: attempt,
@@ -27,12 +29,12 @@ async function listAvailableModels(token, enableRetry = true, maxRetries = 3) {
27
29
  retryInfo.totalDelay += delay;
28
30
  retryInfo.attempts = attempt + 1;
29
31
  console.log(`Attempt ${attempt} failed with 403, retrying in ${delay}ms...`);
30
- await new Promise(resolve => setTimeout(resolve, delay));
32
+ await new Promise((resolve) => setTimeout(resolve, delay));
31
33
  continue;
32
34
  }
33
35
  throw new Error(`API Error ${response.status}: ${errorText}`);
34
36
  }
35
- const data = await response.json();
37
+ const data = (await response.json());
36
38
  const summary = {
37
39
  success: true,
38
40
  timestamp: new Date().toISOString(),
@@ -50,12 +52,12 @@ async function listAvailableModels(token, enableRetry = true, maxRetries = 3) {
50
52
  }
51
53
  catch (error) {
52
54
  if (attempt >= maxRetries + 1 || !enableRetry) {
53
- const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
55
+ const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
54
56
  return {
55
57
  success: false,
56
58
  timestamp: new Date().toISOString(),
57
59
  error: errorMessage,
58
- details: 'Failed to fetch models from GitHub Copilot API',
60
+ details: "Failed to fetch models from GitHub Copilot API",
59
61
  retryInfo: {
60
62
  totalAttempts: retryInfo.attempts,
61
63
  totalRetries: retryInfo.retries.length,
@@ -71,8 +73,8 @@ async function listAvailableModels(token, enableRetry = true, maxRetries = 3) {
71
73
  return {
72
74
  success: false,
73
75
  timestamp: new Date().toISOString(),
74
- error: 'Maximum retry attempts exceeded',
75
- details: 'Failed to fetch models after all retry attempts',
76
+ error: "Maximum retry attempts exceeded",
77
+ details: "Failed to fetch models after all retry attempts",
76
78
  retryInfo: {
77
79
  totalAttempts: retryInfo.attempts,
78
80
  totalRetries: retryInfo.retries.length,
@@ -90,13 +92,13 @@ async function consolidatedModelTest(token, enableRetry = true, maxRetries = 3,
90
92
  let successfulTests = 0;
91
93
  let failedTests = 0;
92
94
  try {
93
- console.log('🧪 Starting Consolidated Model Test...');
95
+ console.log("🧪 Starting Consolidated Model Test...");
94
96
  const modelsResponse = await listAvailableModels(token, enableRetry, maxRetries);
95
97
  if (!modelsResponse.success || !modelsResponse.data) {
96
98
  return {
97
99
  success: false,
98
100
  timestamp: new Date().toISOString(),
99
- error: 'Failed to fetch models list for consolidated test',
101
+ error: "Failed to fetch models list for consolidated test",
100
102
  details: modelsResponse,
101
103
  };
102
104
  }
@@ -110,7 +112,7 @@ async function consolidatedModelTest(token, enableRetry = true, maxRetries = 3,
110
112
  modelInfo: {
111
113
  id: modelId,
112
114
  name: model.name || modelId,
113
- vendor: model.vendor || 'unknown',
115
+ vendor: model.vendor || "unknown",
114
116
  capabilities: model.capabilities || {},
115
117
  },
116
118
  tests: [],
@@ -130,15 +132,15 @@ async function consolidatedModelTest(token, enableRetry = true, maxRetries = 3,
130
132
  modelResults.summary.totalAttempts++;
131
133
  try {
132
134
  const response = await fetch(GitHubCopilotEndpoints_1.GitHubCopilotEndpoints.getChatCompletionsUrl(), {
133
- method: 'POST',
135
+ method: "POST",
134
136
  headers: GitHubCopilotEndpoints_1.GitHubCopilotEndpoints.getAuthHeaders(token),
135
137
  body: JSON.stringify({
136
138
  model: modelId,
137
139
  messages: [
138
140
  {
139
- role: 'user',
140
- content: testMessage
141
- }
141
+ role: "user",
142
+ content: testMessage,
143
+ },
142
144
  ],
143
145
  max_tokens: 10,
144
146
  temperature: 0.1,
@@ -147,7 +149,7 @@ async function consolidatedModelTest(token, enableRetry = true, maxRetries = 3,
147
149
  const testEnd = Date.now();
148
150
  const responseTime = testEnd - testStart;
149
151
  if (response.ok) {
150
- const data = await response.json();
152
+ const data = (await response.json());
151
153
  successfulTests++;
152
154
  modelResults.summary.successful++;
153
155
  const choices = data.choices || [];
@@ -158,9 +160,9 @@ async function consolidatedModelTest(token, enableRetry = true, maxRetries = 3,
158
160
  testNumber: testNum,
159
161
  success: true,
160
162
  responseTime: responseTime,
161
- response: message.content || 'No content',
163
+ response: message.content || "No content",
162
164
  usage: usage || null,
163
- finishReason: firstChoice.finish_reason || 'unknown',
165
+ finishReason: firstChoice.finish_reason || "unknown",
164
166
  timestamp: new Date().toISOString(),
165
167
  };
166
168
  modelResults.tests.push(testResult);
@@ -191,11 +193,11 @@ async function consolidatedModelTest(token, enableRetry = true, maxRetries = 3,
191
193
  testNumber: testNum,
192
194
  success: false,
193
195
  responseTime: responseTime,
194
- error: error instanceof Error ? error.message : 'Unknown error',
196
+ error: error instanceof Error ? error.message : "Unknown error",
195
197
  timestamp: new Date().toISOString(),
196
198
  });
197
199
  }
198
- await new Promise(resolve => setTimeout(resolve, 100));
200
+ await new Promise((resolve) => setTimeout(resolve, 100));
199
201
  }
200
202
  const successfulResponses = modelResults.tests.filter((t) => {
201
203
  const test = t;
@@ -235,14 +237,14 @@ async function consolidatedModelTest(token, enableRetry = true, maxRetries = 3,
235
237
  modelResults: testResults,
236
238
  recommendations: generateTestRecommendations(testResults),
237
239
  };
238
- console.log('✅ Consolidated test completed successfully!');
240
+ console.log("✅ Consolidated test completed successfully!");
239
241
  return consolidatedSummary;
240
242
  }
241
243
  catch (error) {
242
244
  return {
243
245
  success: false,
244
246
  timestamp: new Date().toISOString(),
245
- error: error instanceof Error ? error.message : 'Unknown error in consolidated test',
247
+ error: error instanceof Error ? error.message : "Unknown error in consolidated test",
246
248
  partialResults: testResults,
247
249
  testDuration: Date.now() - testStartTime,
248
250
  };
@@ -262,24 +264,24 @@ function generateTestRecommendations(testResults) {
262
264
  };
263
265
  });
264
266
  const bestModels = modelStats
265
- .filter(m => m.successRate === 100)
267
+ .filter((m) => m.successRate === 100)
266
268
  .sort((a, b) => a.avgResponseTime - b.avgResponseTime)
267
269
  .slice(0, 3);
268
270
  if (bestModels.length > 0) {
269
271
  recommendations.push({
270
- type: 'best_performance',
271
- title: 'Top Performing Models (100% success rate)',
272
+ type: "best_performance",
273
+ title: "Top Performing Models (100% success rate)",
272
274
  models: bestModels,
273
- description: 'These models completed all tests successfully with fastest response times',
275
+ description: "These models completed all tests successfully with fastest response times",
274
276
  });
275
277
  }
276
- const problematicModels = modelStats.filter(m => m.successRate < 80);
278
+ const problematicModels = modelStats.filter((m) => m.successRate < 80);
277
279
  if (problematicModels.length > 0) {
278
280
  recommendations.push({
279
- type: 'attention_needed',
280
- title: 'Models Requiring Attention (< 80% success rate)',
281
+ type: "attention_needed",
282
+ title: "Models Requiring Attention (< 80% success rate)",
281
283
  models: problematicModels,
282
- description: 'These models had reliability issues during testing',
284
+ description: "These models had reliability issues during testing",
283
285
  });
284
286
  }
285
287
  const vendorStats = modelStats.reduce((acc, model) => {
@@ -293,103 +295,103 @@ function generateTestRecommendations(testResults) {
293
295
  stats.avgResponseTime += model.avgResponseTime;
294
296
  return acc;
295
297
  }, {});
296
- Object.keys(vendorStats).forEach(vendor => {
298
+ Object.keys(vendorStats).forEach((vendor) => {
297
299
  const vendorData = vendorStats[vendor];
298
300
  vendorData.avgSuccessRate = Math.round(vendorData.totalSuccessRate / vendorData.count);
299
301
  vendorData.avgResponseTime = Math.round(vendorData.avgResponseTime / vendorData.count);
300
302
  });
301
303
  recommendations.push({
302
- type: 'vendor_analysis',
303
- title: 'Performance by Vendor',
304
+ type: "vendor_analysis",
305
+ title: "Performance by Vendor",
304
306
  vendors: vendorStats,
305
- description: 'Comparative analysis of model performance by vendor',
307
+ description: "Comparative analysis of model performance by vendor",
306
308
  });
307
309
  return recommendations;
308
310
  }
309
311
  class GitHubCopilotTest {
310
312
  constructor() {
311
313
  this.description = {
312
- displayName: 'GitHub Copilot Test',
313
- name: 'gitHubCopilotTest',
314
- icon: 'file:../../shared/icons/copilot.svg',
315
- group: ['AI'],
314
+ displayName: "GitHub Copilot Test",
315
+ name: "gitHubCopilotTest",
316
+ icon: "file:../../shared/icons/copilot.svg",
317
+ group: ["AI"],
316
318
  version: 1,
317
- subtitle: '={{$parameter["testFunction"]}}',
318
- description: 'Test GitHub Copilot API credentials with predefined functions',
319
+ subtitle: "={{$parameter[\"testFunction\"]}}",
320
+ description: "Test GitHub Copilot API credentials with predefined functions",
319
321
  defaults: {
320
- name: 'GitHub Copilot Test',
322
+ name: "GitHub Copilot Test",
321
323
  },
322
324
  inputs: ["main"],
323
325
  outputs: ["main"],
324
326
  credentials: [
325
327
  {
326
- name: 'githubCopilotApi',
328
+ name: "githubCopilotApi",
327
329
  required: true,
328
330
  displayOptions: {
329
331
  show: {
330
- credentialType: ['githubCopilotApi'],
332
+ credentialType: ["githubCopilotApi"],
331
333
  },
332
334
  },
333
335
  },
334
336
  {
335
- name: 'githubCopilotOAuth2Api',
337
+ name: "githubCopilotOAuth2Api",
336
338
  required: true,
337
339
  displayOptions: {
338
340
  show: {
339
- credentialType: ['githubCopilotOAuth2Api'],
341
+ credentialType: ["githubCopilotOAuth2Api"],
340
342
  },
341
343
  },
342
344
  },
343
345
  ],
344
346
  properties: [
345
347
  {
346
- displayName: 'Credential Type',
347
- name: 'credentialType',
348
- type: 'options',
348
+ displayName: "Credential Type",
349
+ name: "credentialType",
350
+ type: "options",
349
351
  options: [
350
352
  {
351
- name: 'GitHub Copilot API (Manual Token)',
352
- value: 'githubCopilotApi',
353
- description: 'Use manual GitHub CLI token',
353
+ name: "GitHub Copilot API (Manual Token)",
354
+ value: "githubCopilotApi",
355
+ description: "Use manual GitHub CLI token",
354
356
  },
355
357
  {
356
- name: 'GitHub Copilot OAuth2 (with Helper)',
357
- value: 'githubCopilotOAuth2Api',
358
- description: 'Use OAuth2 credential with helper script',
358
+ name: "GitHub Copilot OAuth2 (with Helper)",
359
+ value: "githubCopilotOAuth2Api",
360
+ description: "Use OAuth2 credential with helper script",
359
361
  },
360
362
  ],
361
- default: 'githubCopilotApi',
362
- description: 'Type of credential to use for GitHub Copilot authentication',
363
+ default: "githubCopilotApi",
364
+ description: "Type of credential to use for GitHub Copilot authentication",
363
365
  },
364
366
  {
365
- displayName: 'Test Function',
366
- name: 'testFunction',
367
- type: 'options',
367
+ displayName: "Test Function",
368
+ name: "testFunction",
369
+ type: "options",
368
370
  noDataExpression: true,
369
371
  options: [
370
372
  {
371
- name: 'List Available Models',
372
- value: 'listModels',
373
- description: 'Get all models available for your GitHub Copilot subscription',
373
+ name: "List Available Models",
374
+ value: "listModels",
375
+ description: "Get all models available for your GitHub Copilot subscription",
374
376
  },
375
377
  {
376
- name: 'Consolidated Model Test',
377
- value: 'consolidatedTest',
378
- description: 'Test all available models 5 times each and generate comprehensive report ⚠️ This test may take up to 2 minutes to complete',
378
+ name: "Consolidated Model Test",
379
+ value: "consolidatedTest",
380
+ description: "Test all available models 5 times each and generate comprehensive report ⚠️ This test may take up to 2 minutes to complete",
379
381
  },
380
382
  ],
381
- default: 'listModels',
382
- description: 'Select the test function to execute',
383
+ default: "listModels",
384
+ description: "Select the test function to execute",
383
385
  },
384
386
  {
385
- displayName: 'Tests Per Model',
386
- name: 'testsPerModel',
387
- type: 'number',
387
+ displayName: "Tests Per Model",
388
+ name: "testsPerModel",
389
+ type: "number",
388
390
  default: 5,
389
- description: 'Number of times to test each model (affects accuracy of results)',
391
+ description: "Number of times to test each model (affects accuracy of results)",
390
392
  displayOptions: {
391
393
  show: {
392
- testFunction: ['consolidatedTest'],
394
+ testFunction: ["consolidatedTest"],
393
395
  },
394
396
  },
395
397
  typeOptions: {
@@ -398,26 +400,26 @@ class GitHubCopilotTest {
398
400
  },
399
401
  },
400
402
  {
401
- displayName: 'Advanced Options',
402
- name: 'advancedOptions',
403
- type: 'collection',
404
- placeholder: 'Add Option',
403
+ displayName: "Advanced Options",
404
+ name: "advancedOptions",
405
+ type: "collection",
406
+ placeholder: "Add Option",
405
407
  default: {},
406
- description: 'Additional options for the test execution',
408
+ description: "Additional options for the test execution",
407
409
  options: [
408
410
  {
409
- displayName: 'Auto Retry on 403 Error',
410
- name: 'enableRetry',
411
- type: 'boolean',
411
+ displayName: "Auto Retry on 403 Error",
412
+ name: "enableRetry",
413
+ type: "boolean",
412
414
  default: true,
413
- description: 'Automatically retry requests when hitting TPM (Transactions Per Minute) quota limits (HTTP 403)',
415
+ description: "Automatically retry requests when hitting TPM (Transactions Per Minute) quota limits (HTTP 403)",
414
416
  },
415
417
  {
416
- displayName: 'Max Retry Attempts',
417
- name: 'maxRetries',
418
- type: 'number',
418
+ displayName: "Max Retry Attempts",
419
+ name: "maxRetries",
420
+ type: "number",
419
421
  default: 3,
420
- description: 'Maximum number of retry attempts for 403 errors',
422
+ description: "Maximum number of retry attempts for 403 errors",
421
423
  displayOptions: {
422
424
  show: {
423
425
  enableRetry: [true],
@@ -435,14 +437,14 @@ class GitHubCopilotTest {
435
437
  const returnData = [];
436
438
  for (let i = 0; i < items.length; i++) {
437
439
  try {
438
- const testFunction = this.getNodeParameter('testFunction', i);
439
- const advancedOptions = this.getNodeParameter('advancedOptions', i, {});
440
+ const testFunction = this.getNodeParameter("testFunction", i);
441
+ const advancedOptions = this.getNodeParameter("advancedOptions", i, {});
440
442
  const enableRetry = advancedOptions.enableRetry !== false;
441
443
  const maxRetries = advancedOptions.maxRetries || 3;
442
- const testsPerModel = testFunction === 'consolidatedTest'
443
- ? this.getNodeParameter('testsPerModel', i)
444
+ const testsPerModel = testFunction === "consolidatedTest"
445
+ ? this.getNodeParameter("testsPerModel", i)
444
446
  : 5;
445
- const credentialType = this.getNodeParameter('credentialType', i, 'githubCopilotApi');
447
+ const credentialType = this.getNodeParameter("credentialType", i, "githubCopilotApi");
446
448
  const credentials = await this.getCredentials(credentialType, i);
447
449
  const token = (credentials.accessToken ||
448
450
  credentials.access_token ||
@@ -456,10 +458,10 @@ class GitHubCopilotTest {
456
458
  }
457
459
  let result = {};
458
460
  switch (testFunction) {
459
- case 'listModels':
461
+ case "listModels":
460
462
  result = await listAvailableModels(token, enableRetry, maxRetries);
461
463
  break;
462
- case 'consolidatedTest':
464
+ case "consolidatedTest":
463
465
  result = await consolidatedModelTest(token, enableRetry, maxRetries, testsPerModel);
464
466
  break;
465
467
  default:
@@ -471,12 +473,12 @@ class GitHubCopilotTest {
471
473
  });
472
474
  }
473
475
  catch (error) {
474
- const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
476
+ const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
475
477
  if (this.continueOnFail()) {
476
478
  returnData.push({
477
479
  json: {
478
480
  error: errorMessage,
479
- testFunction: this.getNodeParameter('testFunction', i),
481
+ testFunction: this.getNodeParameter("testFunction", i),
480
482
  },
481
483
  pairedItem: { item: i },
482
484
  });
package/package.json CHANGED
@@ -1,74 +1,75 @@
1
- {
2
- "name": "n8n-nodes-github-copilot",
3
- "version": "3.27.6",
4
- "description": "n8n community node for GitHub Copilot with CLI integration, Chat API access, and AI Chat Model for workflows - access GPT-5, Claude, Gemini and more using your Copilot subscription",
5
- "license": "MIT",
6
- "homepage": "https://github.com/sufficit/n8n-nodes-github-copilot",
7
- "author": {
8
- "name": "Sufficit",
9
- "email": "development@sufficit.com.br"
10
- },
11
- "repository": {
12
- "type": "git",
13
- "url": "https://github.com/sufficit/n8n-nodes-github-copilot.git"
14
- },
15
- "main": "index.js",
16
- "scripts": {
17
- "build": "tsc && gulp build:icons",
18
- "dev": "tsc --watch",
19
- "format": "prettier nodes credentials --write",
20
- "lint": "eslint nodes credentials package.json",
21
- "lintfix": "eslint nodes credentials package.json --fix",
22
- "prepublishOnly": "npm run build && npm run lint -s"
23
- },
24
- "files": [
25
- "dist"
26
- ],
27
- "n8n": {
28
- "n8nNodesApiVersion": 1,
29
- "credentials": [
30
- "dist/credentials/GitHubCopilotApi.credentials.js",
31
- "dist/credentials/GitHubCopilotOAuth2Api.credentials.js",
32
- "dist/credentials/GitHubCopilotOAuth2Api.credentials.oauth.js"
33
- ],
34
- "nodes": [
35
- "dist/nodes/GitHubCopilot/GitHubCopilot.node.js",
36
- "dist/nodes/GitHubCopilotChatAPI/GitHubCopilotChatAPI.node.js",
37
- "dist/nodes/GitHubCopilotChatModel/GitHubCopilotChatModel.node.js",
38
- "dist/nodes/GitHubCopilotTest/GitHubCopilotTest.node.js"
39
- ]
40
- },
41
- "keywords": [
42
- "n8n-community-node-package",
43
- "github",
44
- "copilot",
45
- "n8n-ai-agent",
46
- "ai",
47
- "gpt-5",
48
- "claude",
49
- "gemini",
50
- "chat-completion",
51
- "image-analysis",
52
- "audio-transcription",
53
- "code-generation",
54
- "automation"
55
- ],
56
- "engines": {
57
- "node": ">=16.10",
58
- "pnpm": ">=7.1"
59
- },
60
- "packageManager": "pnpm@7.1.0",
61
- "dependencies": {
62
- "@langchain/openai": "^0.6.12",
63
- "n8n-workflow": "*"
64
- },
65
- "devDependencies": {
66
- "@types/node": "^18.16.16",
67
- "@typescript-eslint/eslint-plugin": "^5.45.0",
68
- "@typescript-eslint/parser": "^5.45.0",
69
- "eslint": "^8.28.0",
70
- "gulp": "^4.0.2",
71
- "prettier": "^2.7.1",
72
- "typescript": "^5.9.2"
73
- }
74
- }
1
+ {
2
+ "name": "n8n-nodes-github-copilot",
3
+ "version": "3.28.0",
4
+ "description": "n8n community node for GitHub Copilot with CLI integration, Chat API access, and AI Chat Model for workflows - access GPT-5, Claude, Gemini and more using your Copilot subscription",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/sufficit/n8n-nodes-github-copilot",
7
+ "author": {
8
+ "name": "Sufficit",
9
+ "email": "development@sufficit.com.br"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/sufficit/n8n-nodes-github-copilot.git"
14
+ },
15
+ "main": "index.js",
16
+ "scripts": {
17
+ "build": "tsc && gulp build:icons",
18
+ "dev": "tsc --watch",
19
+ "format": "prettier nodes credentials --write",
20
+ "lint": "eslint nodes credentials package.json",
21
+ "lintfix": "eslint nodes credentials package.json --fix",
22
+ "prepublishOnly": "npm run build && npm run lint -s"
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "n8n": {
28
+ "n8nNodesApiVersion": 1,
29
+ "credentials": [
30
+ "dist/credentials/GitHubCopilotApi.credentials.js",
31
+ "dist/credentials/GitHubCopilotOAuth2Api.credentials.js",
32
+ "dist/credentials/GitHubCopilotOAuth2Api.credentials.oauth.js"
33
+ ],
34
+ "nodes": [
35
+ "dist/nodes/GitHubCopilot/GitHubCopilot.node.js",
36
+ "dist/nodes/GitHubCopilotChatAPI/GitHubCopilotChatAPI.node.js",
37
+ "dist/nodes/GitHubCopilotChatModel/GitHubCopilotChatModel.node.js",
38
+ "dist/nodes/GitHubCopilotOpenAI/GitHubCopilotOpenAI.node.js",
39
+ "dist/nodes/GitHubCopilotTest/GitHubCopilotTest.node.js"
40
+ ]
41
+ },
42
+ "keywords": [
43
+ "n8n-community-node-package",
44
+ "github",
45
+ "copilot",
46
+ "n8n-ai-agent",
47
+ "ai",
48
+ "gpt-5",
49
+ "claude",
50
+ "gemini",
51
+ "chat-completion",
52
+ "image-analysis",
53
+ "audio-transcription",
54
+ "code-generation",
55
+ "automation"
56
+ ],
57
+ "engines": {
58
+ "node": ">=16.10",
59
+ "pnpm": ">=7.1"
60
+ },
61
+ "packageManager": "pnpm@7.1.0",
62
+ "dependencies": {
63
+ "@langchain/openai": "^0.6.12",
64
+ "n8n-workflow": "*"
65
+ },
66
+ "devDependencies": {
67
+ "@types/node": "^18.16.16",
68
+ "@typescript-eslint/eslint-plugin": "^5.45.0",
69
+ "@typescript-eslint/parser": "^5.45.0",
70
+ "eslint": "^8.28.0",
71
+ "gulp": "^4.0.2",
72
+ "prettier": "^2.7.1",
73
+ "typescript": "^5.9.2"
74
+ }
75
+ }