@generacy-ai/generacy-plugin-github-issues 0.0.0-preview-20260304013206
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/LICENSE +191 -0
- package/dist/auth/auth-factory.d.ts +44 -0
- package/dist/auth/auth-factory.d.ts.map +1 -0
- package/dist/auth/auth-factory.js +85 -0
- package/dist/auth/auth-factory.js.map +1 -0
- package/dist/auth/env.d.ts +32 -0
- package/dist/auth/env.d.ts.map +1 -0
- package/dist/auth/env.js +88 -0
- package/dist/auth/env.js.map +1 -0
- package/dist/auth/github-app.d.ts +69 -0
- package/dist/auth/github-app.d.ts.map +1 -0
- package/dist/auth/github-app.js +191 -0
- package/dist/auth/github-app.js.map +1 -0
- package/dist/auth/index.d.ts +10 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +10 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/token-cache.d.ts +70 -0
- package/dist/auth/token-cache.d.ts.map +1 -0
- package/dist/auth/token-cache.js +112 -0
- package/dist/auth/token-cache.js.map +1 -0
- package/dist/auth/types.d.ts +119 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +27 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/client.d.ts +101 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +197 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/operations/comments.d.ts +46 -0
- package/dist/operations/comments.d.ts.map +1 -0
- package/dist/operations/comments.js +127 -0
- package/dist/operations/comments.js.map +1 -0
- package/dist/operations/issues.d.ts +46 -0
- package/dist/operations/issues.d.ts.map +1 -0
- package/dist/operations/issues.js +188 -0
- package/dist/operations/issues.js.map +1 -0
- package/dist/operations/labels.d.ts +46 -0
- package/dist/operations/labels.d.ts.map +1 -0
- package/dist/operations/labels.js +132 -0
- package/dist/operations/labels.js.map +1 -0
- package/dist/operations/pull-requests.d.ts +41 -0
- package/dist/operations/pull-requests.d.ts.map +1 -0
- package/dist/operations/pull-requests.js +162 -0
- package/dist/operations/pull-requests.js.map +1 -0
- package/dist/plugin.d.ts +181 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +324 -0
- package/dist/plugin.js.map +1 -0
- package/dist/types/config.d.ts +126 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +22 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/events.d.ts +72 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +2 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/issues.d.ts +178 -0
- package/dist/types/issues.d.ts.map +1 -0
- package/dist/types/issues.js +29 -0
- package/dist/types/issues.js.map +1 -0
- package/dist/types/responses.d.ts +61 -0
- package/dist/types/responses.d.ts.map +1 -0
- package/dist/types/responses.js +5 -0
- package/dist/types/responses.js.map +1 -0
- package/dist/utils/errors.d.ts +69 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +123 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/validation.d.ts +33 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +69 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/webhooks/handler.d.ts +66 -0
- package/dist/webhooks/handler.d.ts.map +1 -0
- package/dist/webhooks/handler.js +176 -0
- package/dist/webhooks/handler.js.map +1 -0
- package/dist/webhooks/parser.d.ts +36 -0
- package/dist/webhooks/parser.d.ts.map +1 -0
- package/dist/webhooks/parser.js +220 -0
- package/dist/webhooks/parser.js.map +1 -0
- package/dist/webhooks/triggers.d.ts +25 -0
- package/dist/webhooks/triggers.d.ts.map +1 -0
- package/dist/webhooks/triggers.js +119 -0
- package/dist/webhooks/triggers.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { isIssuesEvent, isIssueCommentEvent, } from './parser.js';
|
|
2
|
+
/**
|
|
3
|
+
* Default resume patterns
|
|
4
|
+
*/
|
|
5
|
+
const DEFAULT_RESUME_PATTERNS = [
|
|
6
|
+
/@agent\s+continue/i,
|
|
7
|
+
/@autodev\s+continue/i,
|
|
8
|
+
/\/continue/i,
|
|
9
|
+
];
|
|
10
|
+
/**
|
|
11
|
+
* Create a no-action result
|
|
12
|
+
*/
|
|
13
|
+
function noAction(reason) {
|
|
14
|
+
return { type: 'no_action', reason };
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create a queue-for-processing action
|
|
18
|
+
*/
|
|
19
|
+
function queueForProcessing(issueNumber, priority = 'normal') {
|
|
20
|
+
return { type: 'queue_for_processing', issueNumber, priority };
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create a start-workflow action
|
|
24
|
+
*/
|
|
25
|
+
function startWorkflow(issueNumber, workflowType) {
|
|
26
|
+
return { type: 'start_workflow', issueNumber, workflowType };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Create a resume-workflow action
|
|
30
|
+
*/
|
|
31
|
+
function resumeWorkflow(issueNumber, triggeredBy) {
|
|
32
|
+
return { type: 'resume_workflow', issueNumber, triggeredBy };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Evaluate an issues event for workflow triggers
|
|
36
|
+
*/
|
|
37
|
+
function evaluateIssuesEvent(payload, config) {
|
|
38
|
+
const { action, issue, assignee, label } = payload;
|
|
39
|
+
const { agentAccount, triggerLabels = [] } = config;
|
|
40
|
+
// Check for agent assignment
|
|
41
|
+
if (action === 'assigned' && agentAccount) {
|
|
42
|
+
if (assignee?.login === agentAccount) {
|
|
43
|
+
return queueForProcessing(issue.number, 'normal');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Check for trigger label
|
|
47
|
+
if (action === 'labeled' && label) {
|
|
48
|
+
if (triggerLabels.includes(label.name)) {
|
|
49
|
+
return startWorkflow(issue.number);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Check for ready label (common pattern)
|
|
53
|
+
if (action === 'labeled' && label) {
|
|
54
|
+
if (label.name === 'autodev:ready' || label.name === 'ready') {
|
|
55
|
+
return startWorkflow(issue.number);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Issue opened - could be a signal to start work
|
|
59
|
+
if (action === 'opened') {
|
|
60
|
+
// Check if already assigned to agent
|
|
61
|
+
if (agentAccount && issue.assignees.some((a) => a.login === agentAccount)) {
|
|
62
|
+
return queueForProcessing(issue.number, 'normal');
|
|
63
|
+
}
|
|
64
|
+
// Check if has trigger label
|
|
65
|
+
for (const triggerLabel of triggerLabels) {
|
|
66
|
+
if (issue.labels.some((l) => l.name === triggerLabel)) {
|
|
67
|
+
return startWorkflow(issue.number);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return noAction(`No trigger matched for issues.${action}`);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Evaluate an issue_comment event for workflow triggers
|
|
75
|
+
*/
|
|
76
|
+
function evaluateIssueCommentEvent(payload, config) {
|
|
77
|
+
const { action, issue, comment } = payload;
|
|
78
|
+
const { resumePatterns = DEFAULT_RESUME_PATTERNS } = config;
|
|
79
|
+
// Only process new comments
|
|
80
|
+
if (action !== 'created') {
|
|
81
|
+
return noAction(`Comment action '${action}' does not trigger workflows`);
|
|
82
|
+
}
|
|
83
|
+
// Check for resume patterns in comment body
|
|
84
|
+
for (const pattern of resumePatterns) {
|
|
85
|
+
if (pattern.test(comment.body)) {
|
|
86
|
+
return resumeWorkflow(issue.number, 'comment');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return noAction('No resume pattern matched in comment');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Evaluate a webhook event against trigger configuration
|
|
93
|
+
*/
|
|
94
|
+
export function evaluateTriggers(event, config) {
|
|
95
|
+
if (isIssuesEvent(event)) {
|
|
96
|
+
return evaluateIssuesEvent(event.payload, config);
|
|
97
|
+
}
|
|
98
|
+
if (isIssueCommentEvent(event)) {
|
|
99
|
+
return evaluateIssueCommentEvent(event.payload, config);
|
|
100
|
+
}
|
|
101
|
+
// Pull request events don't directly trigger workflows in this implementation
|
|
102
|
+
return noAction('Pull request events do not trigger workflows');
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Check if an action requires workflow processing
|
|
106
|
+
*/
|
|
107
|
+
export function requiresProcessing(action) {
|
|
108
|
+
return action.type !== 'no_action';
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get the issue number from a workflow action
|
|
112
|
+
*/
|
|
113
|
+
export function getActionIssueNumber(action) {
|
|
114
|
+
if (action.type === 'no_action') {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
return action.issueNumber;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=triggers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triggers.js","sourceRoot":"","sources":["../../src/webhooks/triggers.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAgBrB;;GAEG;AACH,MAAM,uBAAuB,GAAG;IAC9B,oBAAoB;IACpB,sBAAsB;IACtB,aAAa;CACd,CAAC;AAEF;;GAEG;AACH,SAAS,QAAQ,CAAC,MAAc;IAC9B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,WAAmB,EACnB,WAAsC,QAAQ;IAE9C,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,WAAmB,EAAE,YAAqB;IAC/D,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,WAAmB,EACnB,WAAgC;IAEhC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,OAA2B,EAC3B,MAAqB;IAErB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACnD,MAAM,EAAE,YAAY,EAAE,aAAa,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAEpD,6BAA6B;IAC7B,IAAI,MAAM,KAAK,UAAU,IAAI,YAAY,EAAE,CAAC;QAC1C,IAAI,QAAQ,EAAE,KAAK,KAAK,YAAY,EAAE,CAAC;YACrC,OAAO,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,EAAE,CAAC;QAClC,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,OAAO,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7D,OAAO,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,qCAAqC;QACrC,IAAI,YAAY,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,EAAE,CAAC;YAC1E,OAAO,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpD,CAAC;QAED,6BAA6B;QAC7B,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;gBACtD,OAAO,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAChC,OAAiC,EACjC,MAAqB;IAErB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC3C,MAAM,EAAE,cAAc,GAAG,uBAAuB,EAAE,GAAG,MAAM,CAAC;IAE5D,4BAA4B;IAC5B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,QAAQ,CAAC,mBAAmB,MAAM,8BAA8B,CAAC,CAAC;IAC3E,CAAC;IAED,4CAA4C;IAC5C,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,sCAAsC,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAwB,EACxB,MAAqB;IAErB,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,yBAAyB,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,8EAA8E;IAC9E,OAAO,QAAQ,CAAC,8CAA8C,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAsB;IACvD,OAAO,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAsB;IACzD,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC;AAC5B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@generacy-ai/generacy-plugin-github-issues",
|
|
3
|
+
"version": "0.0.0-preview-20260304013206",
|
|
4
|
+
"description": "GitHub Issues integration plugin for Generacy",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"keywords": [
|
|
18
|
+
"generacy",
|
|
19
|
+
"github",
|
|
20
|
+
"issues",
|
|
21
|
+
"plugin",
|
|
22
|
+
"automation"
|
|
23
|
+
],
|
|
24
|
+
"author": "Generacy AI",
|
|
25
|
+
"license": "Apache-2.0",
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+https://github.com/generacy-ai/generacy.git",
|
|
29
|
+
"directory": "packages/github-issues"
|
|
30
|
+
},
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=20.0.0"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@generacy-ai/latency": "^0.1.0",
|
|
36
|
+
"@generacy-ai/latency-plugin-issue-tracker": "^0.1.0",
|
|
37
|
+
"@octokit/auth-app": "^7.1.1",
|
|
38
|
+
"@octokit/rest": "^21.0.2",
|
|
39
|
+
"@octokit/webhooks": "^13.4.1",
|
|
40
|
+
"@octokit/types": "^13.6.2",
|
|
41
|
+
"zod": "^3.23.8"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@types/node": "^22.10.2",
|
|
45
|
+
"typescript": "^5.7.2",
|
|
46
|
+
"vitest": "^3.2.4"
|
|
47
|
+
},
|
|
48
|
+
"peerDependencies": {},
|
|
49
|
+
"peerDependenciesMeta": {},
|
|
50
|
+
"publishConfig": {
|
|
51
|
+
"access": "public"
|
|
52
|
+
},
|
|
53
|
+
"scripts": {
|
|
54
|
+
"build": "tsc",
|
|
55
|
+
"test": "vitest run",
|
|
56
|
+
"test:watch": "vitest",
|
|
57
|
+
"test:coverage": "vitest run --coverage",
|
|
58
|
+
"lint": "eslint src",
|
|
59
|
+
"typecheck": "tsc --noEmit",
|
|
60
|
+
"clean": "rm -rf dist"
|
|
61
|
+
}
|
|
62
|
+
}
|