openclaw-channel-github 0.1.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 (46) hide show
  1. package/README.md +578 -0
  2. package/config.example.json +33 -0
  3. package/dist/index.d.ts +14 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +44 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/src/auth/auth.d.ts +22 -0
  8. package/dist/src/auth/auth.d.ts.map +1 -0
  9. package/dist/src/auth/auth.js +112 -0
  10. package/dist/src/auth/auth.js.map +1 -0
  11. package/dist/src/config/config.d.ts +60 -0
  12. package/dist/src/config/config.d.ts.map +1 -0
  13. package/dist/src/config/config.js +184 -0
  14. package/dist/src/config/config.js.map +1 -0
  15. package/dist/src/events/events.d.ts +234 -0
  16. package/dist/src/events/events.d.ts.map +1 -0
  17. package/dist/src/events/events.js +53 -0
  18. package/dist/src/events/events.js.map +1 -0
  19. package/dist/src/main.d.ts +2 -0
  20. package/dist/src/main.d.ts.map +1 -0
  21. package/dist/src/main.js +115 -0
  22. package/dist/src/main.js.map +1 -0
  23. package/dist/src/normalizer/normalizer.d.ts +94 -0
  24. package/dist/src/normalizer/normalizer.d.ts.map +1 -0
  25. package/dist/src/normalizer/normalizer.js +486 -0
  26. package/dist/src/normalizer/normalizer.js.map +1 -0
  27. package/dist/src/outbound/outbound.d.ts +24 -0
  28. package/dist/src/outbound/outbound.d.ts.map +1 -0
  29. package/dist/src/outbound/outbound.js +125 -0
  30. package/dist/src/outbound/outbound.js.map +1 -0
  31. package/dist/src/routing/routing.d.ts +22 -0
  32. package/dist/src/routing/routing.d.ts.map +1 -0
  33. package/dist/src/routing/routing.js +97 -0
  34. package/dist/src/routing/routing.js.map +1 -0
  35. package/dist/src/server/server.d.ts +20 -0
  36. package/dist/src/server/server.d.ts.map +1 -0
  37. package/dist/src/server/server.js +283 -0
  38. package/dist/src/server/server.js.map +1 -0
  39. package/dist/src/state/state.d.ts +17 -0
  40. package/dist/src/state/state.d.ts.map +1 -0
  41. package/dist/src/state/state.js +49 -0
  42. package/dist/src/state/state.js.map +1 -0
  43. package/docs/api.md +450 -0
  44. package/docs/usage.md +393 -0
  45. package/openclaw.plugin.json +104 -0
  46. package/package.json +81 -0
@@ -0,0 +1,486 @@
1
+ "use strict";
2
+ // Package normalizer converts GitHub webhook events into normalized OpenClaw messages.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.TriggerKind = exports.MessageType = exports.ThreadType = exports.Provider = void 0;
5
+ exports.normalizeIssueOpened = normalizeIssueOpened;
6
+ exports.normalizeIssueComment = normalizeIssueComment;
7
+ exports.normalizePullRequestOpened = normalizePullRequestOpened;
8
+ exports.normalizePullRequestReview = normalizePullRequestReview;
9
+ exports.normalizePullRequestReviewComment = normalizePullRequestReviewComment;
10
+ exports.normalizeIssueEdited = normalizeIssueEdited;
11
+ exports.normalizeIssueClosed = normalizeIssueClosed;
12
+ exports.normalizeIssueReopened = normalizeIssueReopened;
13
+ exports.normalizeIssueLabeled = normalizeIssueLabeled;
14
+ exports.normalizeIssueCommentEdited = normalizeIssueCommentEdited;
15
+ exports.normalizePullRequestEdited = normalizePullRequestEdited;
16
+ exports.normalizePullRequestClosed = normalizePullRequestClosed;
17
+ exports.normalizePullRequestSynchronize = normalizePullRequestSynchronize;
18
+ exports.normalizePullRequestLabeled = normalizePullRequestLabeled;
19
+ exports.normalizeDiscussionCreated = normalizeDiscussionCreated;
20
+ exports.normalizeDiscussionComment = normalizeDiscussionComment;
21
+ exports.normalizeCheckRun = normalizeCheckRun;
22
+ exports.normalizeWorkflowRun = normalizeWorkflowRun;
23
+ exports.Provider = 'github';
24
+ // --- Thread types ---
25
+ exports.ThreadType = {
26
+ Issue: 'issue',
27
+ PullRequest: 'pull_request',
28
+ Discussion: 'discussion',
29
+ };
30
+ // --- Message types ---
31
+ exports.MessageType = {
32
+ Comment: 'comment',
33
+ IssueBody: 'issue_body',
34
+ PRBody: 'pr_body',
35
+ Review: 'review',
36
+ ReviewComment: 'review_comment',
37
+ DiscussionBody: 'discussion_body',
38
+ ContextUpdate: 'context_update',
39
+ CIStatus: 'ci_status',
40
+ };
41
+ // --- Trigger kinds ---
42
+ exports.TriggerKind = {
43
+ Mention: 'mention',
44
+ Command: 'command',
45
+ Label: 'label',
46
+ Auto: 'auto',
47
+ None: '',
48
+ };
49
+ // --- Normalization functions ---
50
+ function normalizeIssueOpened(e) {
51
+ return {
52
+ provider: exports.Provider,
53
+ repository: e.repository.full_name,
54
+ thread: {
55
+ type: exports.ThreadType.Issue,
56
+ number: e.issue.number,
57
+ title: e.issue.title,
58
+ url: e.issue.html_url,
59
+ },
60
+ message: {
61
+ type: exports.MessageType.IssueBody,
62
+ id: formatIssueID(e.repository.full_name, e.issue.number),
63
+ text: e.issue.body,
64
+ createdAt: e.issue.created_at,
65
+ },
66
+ sender: senderFromUser(e.sender),
67
+ trigger: { kind: exports.TriggerKind.None },
68
+ };
69
+ }
70
+ function normalizeIssueComment(e) {
71
+ return {
72
+ provider: exports.Provider,
73
+ repository: e.repository.full_name,
74
+ thread: {
75
+ type: threadTypeFromIssue(e.issue),
76
+ number: e.issue.number,
77
+ title: e.issue.title,
78
+ url: e.issue.html_url,
79
+ },
80
+ message: {
81
+ type: exports.MessageType.Comment,
82
+ id: formatCommentID(e.comment.id),
83
+ text: e.comment.body,
84
+ createdAt: e.comment.created_at,
85
+ },
86
+ sender: senderFromUser(e.sender),
87
+ trigger: { kind: exports.TriggerKind.None },
88
+ };
89
+ }
90
+ function normalizePullRequestOpened(e) {
91
+ return {
92
+ provider: exports.Provider,
93
+ repository: e.repository.full_name,
94
+ thread: {
95
+ type: exports.ThreadType.PullRequest,
96
+ number: e.pull_request.number,
97
+ title: e.pull_request.title,
98
+ url: e.pull_request.html_url,
99
+ },
100
+ message: {
101
+ type: exports.MessageType.PRBody,
102
+ id: formatPRID(e.repository.full_name, e.pull_request.number),
103
+ text: e.pull_request.body,
104
+ createdAt: e.pull_request.created_at,
105
+ },
106
+ sender: senderFromUser(e.sender),
107
+ trigger: { kind: exports.TriggerKind.None },
108
+ };
109
+ }
110
+ function normalizePullRequestReview(e) {
111
+ return {
112
+ provider: exports.Provider,
113
+ repository: e.repository.full_name,
114
+ thread: {
115
+ type: exports.ThreadType.PullRequest,
116
+ number: e.pull_request.number,
117
+ title: e.pull_request.title,
118
+ url: e.pull_request.html_url,
119
+ },
120
+ message: {
121
+ type: exports.MessageType.Review,
122
+ id: formatReviewID(e.review.id),
123
+ text: e.review.body,
124
+ createdAt: e.review.submitted_at,
125
+ },
126
+ sender: senderFromUser(e.sender),
127
+ trigger: { kind: exports.TriggerKind.None },
128
+ };
129
+ }
130
+ function normalizePullRequestReviewComment(e) {
131
+ return {
132
+ provider: exports.Provider,
133
+ repository: e.repository.full_name,
134
+ thread: {
135
+ type: exports.ThreadType.PullRequest,
136
+ number: e.pull_request.number,
137
+ title: e.pull_request.title,
138
+ url: e.pull_request.html_url,
139
+ },
140
+ message: {
141
+ type: exports.MessageType.ReviewComment,
142
+ id: formatCommentID(e.comment.id),
143
+ text: e.comment.body,
144
+ createdAt: e.comment.created_at,
145
+ },
146
+ sender: senderFromUser(e.sender),
147
+ trigger: { kind: exports.TriggerKind.None },
148
+ context: {
149
+ filePath: e.comment.path,
150
+ line: e.comment.line,
151
+ reviewThreadId: e.comment.pull_request_review_id,
152
+ },
153
+ };
154
+ }
155
+ function normalizeIssueEdited(e) {
156
+ return {
157
+ provider: exports.Provider,
158
+ repository: e.repository.full_name,
159
+ thread: {
160
+ type: exports.ThreadType.Issue,
161
+ number: e.issue.number,
162
+ title: e.issue.title,
163
+ url: e.issue.html_url,
164
+ },
165
+ message: {
166
+ type: exports.MessageType.ContextUpdate,
167
+ id: formatIssueID(e.repository.full_name, e.issue.number) + ':edited',
168
+ text: e.issue.body,
169
+ createdAt: e.issue.updated_at,
170
+ },
171
+ sender: senderFromUser(e.sender),
172
+ trigger: { kind: exports.TriggerKind.None },
173
+ context: issueContext(e),
174
+ };
175
+ }
176
+ function normalizeIssueClosed(e) {
177
+ return {
178
+ provider: exports.Provider,
179
+ repository: e.repository.full_name,
180
+ thread: {
181
+ type: exports.ThreadType.Issue,
182
+ number: e.issue.number,
183
+ title: e.issue.title,
184
+ url: e.issue.html_url,
185
+ },
186
+ message: {
187
+ type: exports.MessageType.ContextUpdate,
188
+ id: formatIssueID(e.repository.full_name, e.issue.number) + ':closed',
189
+ text: 'Issue closed',
190
+ createdAt: e.issue.updated_at,
191
+ },
192
+ sender: senderFromUser(e.sender),
193
+ trigger: { kind: exports.TriggerKind.None },
194
+ context: issueContext(e),
195
+ };
196
+ }
197
+ function normalizeIssueReopened(e) {
198
+ return {
199
+ provider: exports.Provider,
200
+ repository: e.repository.full_name,
201
+ thread: {
202
+ type: exports.ThreadType.Issue,
203
+ number: e.issue.number,
204
+ title: e.issue.title,
205
+ url: e.issue.html_url,
206
+ },
207
+ message: {
208
+ type: exports.MessageType.ContextUpdate,
209
+ id: formatIssueID(e.repository.full_name, e.issue.number) + ':reopened',
210
+ text: 'Issue reopened',
211
+ createdAt: e.issue.updated_at,
212
+ },
213
+ sender: senderFromUser(e.sender),
214
+ trigger: { kind: exports.TriggerKind.None },
215
+ context: issueContext(e),
216
+ };
217
+ }
218
+ function normalizeIssueLabeled(e) {
219
+ const labelName = e.label?.name ?? '';
220
+ return {
221
+ provider: exports.Provider,
222
+ repository: e.repository.full_name,
223
+ thread: {
224
+ type: exports.ThreadType.Issue,
225
+ number: e.issue.number,
226
+ title: e.issue.title,
227
+ url: e.issue.html_url,
228
+ },
229
+ message: {
230
+ type: exports.MessageType.ContextUpdate,
231
+ id: formatIssueID(e.repository.full_name, e.issue.number) + ':labeled:' + labelName,
232
+ text: 'Label added: ' + labelName,
233
+ createdAt: e.issue.updated_at,
234
+ },
235
+ sender: senderFromUser(e.sender),
236
+ trigger: { kind: exports.TriggerKind.None },
237
+ context: issueContext(e),
238
+ };
239
+ }
240
+ function normalizeIssueCommentEdited(e) {
241
+ return {
242
+ provider: exports.Provider,
243
+ repository: e.repository.full_name,
244
+ thread: {
245
+ type: threadTypeFromIssue(e.issue),
246
+ number: e.issue.number,
247
+ title: e.issue.title,
248
+ url: e.issue.html_url,
249
+ },
250
+ message: {
251
+ type: exports.MessageType.ContextUpdate,
252
+ id: formatCommentID(e.comment.id) + ':edited',
253
+ text: e.comment.body,
254
+ createdAt: e.comment.updated_at,
255
+ },
256
+ sender: senderFromUser(e.sender),
257
+ trigger: { kind: exports.TriggerKind.None },
258
+ };
259
+ }
260
+ function normalizePullRequestEdited(e) {
261
+ return {
262
+ provider: exports.Provider,
263
+ repository: e.repository.full_name,
264
+ thread: {
265
+ type: exports.ThreadType.PullRequest,
266
+ number: e.pull_request.number,
267
+ title: e.pull_request.title,
268
+ url: e.pull_request.html_url,
269
+ },
270
+ message: {
271
+ type: exports.MessageType.ContextUpdate,
272
+ id: formatPRID(e.repository.full_name, e.pull_request.number) + ':edited',
273
+ text: e.pull_request.body,
274
+ createdAt: e.pull_request.updated_at,
275
+ },
276
+ sender: senderFromUser(e.sender),
277
+ trigger: { kind: exports.TriggerKind.None },
278
+ context: prContext(e),
279
+ };
280
+ }
281
+ function normalizePullRequestClosed(e) {
282
+ const text = e.pull_request.merged ? 'Pull request merged' : 'Pull request closed';
283
+ return {
284
+ provider: exports.Provider,
285
+ repository: e.repository.full_name,
286
+ thread: {
287
+ type: exports.ThreadType.PullRequest,
288
+ number: e.pull_request.number,
289
+ title: e.pull_request.title,
290
+ url: e.pull_request.html_url,
291
+ },
292
+ message: {
293
+ type: exports.MessageType.ContextUpdate,
294
+ id: formatPRID(e.repository.full_name, e.pull_request.number) + ':closed',
295
+ text,
296
+ createdAt: e.pull_request.updated_at,
297
+ },
298
+ sender: senderFromUser(e.sender),
299
+ trigger: { kind: exports.TriggerKind.None },
300
+ context: prContext(e),
301
+ };
302
+ }
303
+ function normalizePullRequestSynchronize(e) {
304
+ return {
305
+ provider: exports.Provider,
306
+ repository: e.repository.full_name,
307
+ thread: {
308
+ type: exports.ThreadType.PullRequest,
309
+ number: e.pull_request.number,
310
+ title: e.pull_request.title,
311
+ url: e.pull_request.html_url,
312
+ },
313
+ message: {
314
+ type: exports.MessageType.ContextUpdate,
315
+ id: formatPRID(e.repository.full_name, e.pull_request.number) +
316
+ ':synchronize:' +
317
+ e.pull_request.head.sha.slice(0, 8),
318
+ text: 'New commits pushed to ' + e.pull_request.head.ref,
319
+ createdAt: e.pull_request.updated_at,
320
+ },
321
+ sender: senderFromUser(e.sender),
322
+ trigger: { kind: exports.TriggerKind.None },
323
+ context: prContext(e),
324
+ };
325
+ }
326
+ function normalizePullRequestLabeled(e) {
327
+ const labelName = e.label?.name ?? '';
328
+ return {
329
+ provider: exports.Provider,
330
+ repository: e.repository.full_name,
331
+ thread: {
332
+ type: exports.ThreadType.PullRequest,
333
+ number: e.pull_request.number,
334
+ title: e.pull_request.title,
335
+ url: e.pull_request.html_url,
336
+ },
337
+ message: {
338
+ type: exports.MessageType.ContextUpdate,
339
+ id: formatPRID(e.repository.full_name, e.pull_request.number) + ':labeled:' + labelName,
340
+ text: 'Label added: ' + labelName,
341
+ createdAt: e.pull_request.updated_at,
342
+ },
343
+ sender: senderFromUser(e.sender),
344
+ trigger: { kind: exports.TriggerKind.None },
345
+ context: prContext(e),
346
+ };
347
+ }
348
+ function normalizeDiscussionCreated(e) {
349
+ return {
350
+ provider: exports.Provider,
351
+ repository: e.repository.full_name,
352
+ thread: {
353
+ type: exports.ThreadType.Discussion,
354
+ number: e.discussion.number,
355
+ title: e.discussion.title,
356
+ url: e.discussion.html_url,
357
+ },
358
+ message: {
359
+ type: exports.MessageType.DiscussionBody,
360
+ id: formatDiscussionID(e.repository.full_name, e.discussion.number),
361
+ text: e.discussion.body,
362
+ createdAt: e.discussion.created_at,
363
+ },
364
+ sender: senderFromUser(e.sender),
365
+ trigger: { kind: exports.TriggerKind.None },
366
+ context: { discussionCategory: e.discussion.category.name },
367
+ };
368
+ }
369
+ function normalizeDiscussionComment(e) {
370
+ return {
371
+ provider: exports.Provider,
372
+ repository: e.repository.full_name,
373
+ thread: {
374
+ type: exports.ThreadType.Discussion,
375
+ number: e.discussion.number,
376
+ title: e.discussion.title,
377
+ url: e.discussion.html_url,
378
+ },
379
+ message: {
380
+ type: exports.MessageType.Comment,
381
+ id: formatDiscussionCommentID(e.comment.id),
382
+ text: e.comment.body,
383
+ createdAt: e.comment.created_at,
384
+ },
385
+ sender: senderFromUser(e.sender),
386
+ trigger: { kind: exports.TriggerKind.None },
387
+ context: { discussionCategory: e.discussion.category.name },
388
+ };
389
+ }
390
+ function normalizeCheckRun(e) {
391
+ const threadNum = e.check_run.check_suite.pull_requests?.length > 0
392
+ ? e.check_run.check_suite.pull_requests[0].number
393
+ : 0;
394
+ return {
395
+ provider: exports.Provider,
396
+ repository: e.repository.full_name,
397
+ thread: { type: exports.ThreadType.PullRequest, number: threadNum, title: '', url: '' },
398
+ message: {
399
+ type: exports.MessageType.CIStatus,
400
+ id: `check-run-${e.check_run.id}`,
401
+ text: `Check run '${e.check_run.name}': ${e.check_run.status} (${e.check_run.conclusion})`,
402
+ createdAt: e.check_run.started_at,
403
+ },
404
+ sender: senderFromUser(e.sender),
405
+ trigger: { kind: exports.TriggerKind.None },
406
+ context: {
407
+ ciStatus: e.check_run.status,
408
+ ciConclusion: e.check_run.conclusion,
409
+ eventAction: e.action,
410
+ },
411
+ };
412
+ }
413
+ function normalizeWorkflowRun(e) {
414
+ const threadNum = e.workflow_run.pull_requests?.length > 0 ? e.workflow_run.pull_requests[0].number : 0;
415
+ return {
416
+ provider: exports.Provider,
417
+ repository: e.repository.full_name,
418
+ thread: { type: exports.ThreadType.PullRequest, number: threadNum, title: '', url: '' },
419
+ message: {
420
+ type: exports.MessageType.CIStatus,
421
+ id: `workflow-run-${e.workflow_run.id}`,
422
+ text: `Workflow '${e.workflow_run.name}': ${e.workflow_run.status} (${e.workflow_run.conclusion})`,
423
+ createdAt: e.workflow_run.created_at,
424
+ },
425
+ sender: senderFromUser(e.sender),
426
+ trigger: { kind: exports.TriggerKind.None },
427
+ context: {
428
+ ciStatus: e.workflow_run.status,
429
+ ciConclusion: e.workflow_run.conclusion,
430
+ eventAction: e.action,
431
+ },
432
+ };
433
+ }
434
+ // --- Helpers ---
435
+ function issueContext(e) {
436
+ return {
437
+ state: e.issue.state,
438
+ eventAction: e.action,
439
+ labels: (e.issue.labels ?? []).map((l) => l.name),
440
+ assignees: (e.issue.assignees ?? []).map((a) => a.login),
441
+ };
442
+ }
443
+ function prContext(e) {
444
+ return {
445
+ state: e.pull_request.state,
446
+ merged: e.pull_request.merged,
447
+ headRef: e.pull_request.head.ref,
448
+ baseRef: e.pull_request.base.ref,
449
+ eventAction: e.action,
450
+ labels: (e.pull_request.labels ?? []).map((l) => l.name),
451
+ assignees: (e.pull_request.assignees ?? []).map((a) => a.login),
452
+ };
453
+ }
454
+ function senderFromUser(u) {
455
+ return {
456
+ id: `github:${u.id}`,
457
+ login: u.login,
458
+ isBot: u.type === 'Bot',
459
+ };
460
+ }
461
+ /** Determine if an issue is actually a PR by checking the HTML URL for "/pull/". */
462
+ function threadTypeFromIssue(issue) {
463
+ if (issue.html_url && issue.html_url.includes('/pull/')) {
464
+ return exports.ThreadType.PullRequest;
465
+ }
466
+ return exports.ThreadType.Issue;
467
+ }
468
+ function formatIssueID(repo, number) {
469
+ return `${repo}:issue:${number}`;
470
+ }
471
+ function formatPRID(repo, number) {
472
+ return `${repo}:pr:${number}`;
473
+ }
474
+ function formatCommentID(id) {
475
+ return `comment-${id}`;
476
+ }
477
+ function formatReviewID(id) {
478
+ return `review-${id}`;
479
+ }
480
+ function formatDiscussionID(repo, number) {
481
+ return `${repo}:discussion:${number}`;
482
+ }
483
+ function formatDiscussionCommentID(id) {
484
+ return `discussion-comment-${id}`;
485
+ }
486
+ //# sourceMappingURL=normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.js","sourceRoot":"","sources":["../../../src/normalizer/normalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { NormalizedEvent } from '../normalizer/normalizer';
2
+ export interface ReviewCommentBody {
3
+ path: string;
4
+ line?: number;
5
+ side?: string;
6
+ body: string;
7
+ }
8
+ export declare class OutboundSender {
9
+ private baseURL;
10
+ private outboundMarker;
11
+ constructor(baseURL?: string);
12
+ setOutboundMarker(marker: string): void;
13
+ hasOutboundMarker(text: string): boolean;
14
+ private wrapWithMarker;
15
+ /** Send a comment to an issue or PR thread. */
16
+ sendComment(token: string, event: NormalizedEvent, body: string): Promise<void>;
17
+ /** Create a PR review. action: "APPROVE" | "COMMENT" | "REQUEST_CHANGES" */
18
+ sendReview(token: string, repo: string, prNumber: number, body: string, action: string, comments?: ReviewCommentBody[]): Promise<void>;
19
+ /** Add a reaction to a comment. */
20
+ addReaction(token: string, repo: string, commentID: number, reaction: string): Promise<void>;
21
+ /** Perform an authenticated POST request to the GitHub API. */
22
+ private doPost;
23
+ }
24
+ //# sourceMappingURL=outbound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbound.d.ts","sourceRoot":"","sources":["../../../src/outbound/outbound.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAMhE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAS;gBAEnB,OAAO,CAAC,EAAE,MAAM;IAK5B,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIvC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC,OAAO,CAAC,cAAc;IAKtB,+CAA+C;IACzC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrF,4EAA4E;IACtE,UAAU,CACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,iBAAiB,EAAE,GAC7B,OAAO,CAAC,IAAI,CAAC;IAUhB,mCAAmC;IAC7B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlG,+DAA+D;IAC/D,OAAO,CAAC,MAAM;CA6Cf"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ // Package outbound provides functionality for sending messages back to GitHub.
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.OutboundSender = void 0;
38
+ const http = __importStar(require("http"));
39
+ const https = __importStar(require("https"));
40
+ const url_1 = require("url");
41
+ const GITHUB_API_BASE_URL = 'https://api.github.com';
42
+ const MAX_COMMENT_LENGTH = 65536;
43
+ const DEFAULT_OUTBOUND_MARKER = '<!-- openclaw-outbound -->';
44
+ class OutboundSender {
45
+ baseURL;
46
+ outboundMarker;
47
+ constructor(baseURL) {
48
+ this.baseURL = baseURL || GITHUB_API_BASE_URL;
49
+ this.outboundMarker = DEFAULT_OUTBOUND_MARKER;
50
+ }
51
+ setOutboundMarker(marker) {
52
+ this.outboundMarker = marker;
53
+ }
54
+ hasOutboundMarker(text) {
55
+ return this.outboundMarker !== '' && text.includes(this.outboundMarker);
56
+ }
57
+ wrapWithMarker(body) {
58
+ if (!this.outboundMarker)
59
+ return body;
60
+ return body + '\n' + this.outboundMarker;
61
+ }
62
+ /** Send a comment to an issue or PR thread. */
63
+ async sendComment(token, event, body) {
64
+ body = this.wrapWithMarker(body);
65
+ if (body.length > MAX_COMMENT_LENGTH) {
66
+ body = body.slice(0, MAX_COMMENT_LENGTH - 3) + '...';
67
+ }
68
+ const url = `${this.baseURL}/repos/${event.repository}/issues/${event.thread.number}/comments`;
69
+ await this.doPost(token, url, { body });
70
+ }
71
+ /** Create a PR review. action: "APPROVE" | "COMMENT" | "REQUEST_CHANGES" */
72
+ async sendReview(token, repo, prNumber, body, action, comments) {
73
+ body = this.wrapWithMarker(body);
74
+ if (body.length > MAX_COMMENT_LENGTH) {
75
+ body = body.slice(0, MAX_COMMENT_LENGTH - 3) + '...';
76
+ }
77
+ const url = `${this.baseURL}/repos/${repo}/pulls/${prNumber}/reviews`;
78
+ await this.doPost(token, url, { body, event: action, comments: comments ?? [] });
79
+ }
80
+ /** Add a reaction to a comment. */
81
+ async addReaction(token, repo, commentID, reaction) {
82
+ const url = `${this.baseURL}/repos/${repo}/issues/comments/${commentID}/reactions`;
83
+ await this.doPost(token, url, { content: reaction });
84
+ }
85
+ /** Perform an authenticated POST request to the GitHub API. */
86
+ doPost(token, urlStr, body) {
87
+ return new Promise((resolve, reject) => {
88
+ const data = JSON.stringify(body);
89
+ const parsed = new url_1.URL(urlStr);
90
+ const isHTTPS = parsed.protocol === 'https:';
91
+ const transport = isHTTPS ? https : http;
92
+ const req = transport.request({
93
+ hostname: parsed.hostname,
94
+ port: parsed.port || (isHTTPS ? 443 : 80),
95
+ path: parsed.pathname + parsed.search,
96
+ method: 'POST',
97
+ headers: {
98
+ Authorization: `Bearer ${token}`,
99
+ Accept: 'application/vnd.github+json',
100
+ 'Content-Type': 'application/json',
101
+ 'X-GitHub-Api-Version': '2022-11-28',
102
+ 'Content-Length': Buffer.byteLength(data),
103
+ },
104
+ }, (res) => {
105
+ let responseBody = '';
106
+ res.on('data', (chunk) => {
107
+ responseBody += chunk.toString();
108
+ });
109
+ res.on('end', () => {
110
+ if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
111
+ resolve();
112
+ }
113
+ else {
114
+ reject(new Error(`GitHub API error (status ${res.statusCode}): ${responseBody}`));
115
+ }
116
+ });
117
+ });
118
+ req.on('error', (err) => reject(new Error(`sending request: ${err.message}`)));
119
+ req.write(data);
120
+ req.end();
121
+ });
122
+ }
123
+ }
124
+ exports.OutboundSender = OutboundSender;
125
+ //# sourceMappingURL=outbound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbound.js","sourceRoot":"","sources":["../../../src/outbound/outbound.ts"],"names":[],"mappings":"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"}