codekin 0.5.4 → 0.6.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 (88) hide show
  1. package/README.md +1 -0
  2. package/dist/assets/index-BvKzbtKg.css +1 -0
  3. package/dist/assets/index-D59Xr9pK.js +182 -0
  4. package/dist/index.html +2 -2
  5. package/package.json +1 -1
  6. package/server/dist/approval-manager.js +2 -3
  7. package/server/dist/approval-manager.js.map +1 -1
  8. package/server/dist/claude-process.d.ts +17 -5
  9. package/server/dist/claude-process.js +56 -66
  10. package/server/dist/claude-process.js.map +1 -1
  11. package/server/dist/coding-process.d.ts +83 -0
  12. package/server/dist/coding-process.js +32 -0
  13. package/server/dist/coding-process.js.map +1 -0
  14. package/server/dist/commit-event-handler.js +1 -0
  15. package/server/dist/commit-event-handler.js.map +1 -1
  16. package/server/dist/config.js +2 -1
  17. package/server/dist/config.js.map +1 -1
  18. package/server/dist/docs-routes.js +22 -1
  19. package/server/dist/docs-routes.js.map +1 -1
  20. package/server/dist/native-permissions.js +3 -2
  21. package/server/dist/native-permissions.js.map +1 -1
  22. package/server/dist/opencode-process.d.ts +104 -0
  23. package/server/dist/opencode-process.js +657 -0
  24. package/server/dist/opencode-process.js.map +1 -0
  25. package/server/dist/orchestrator-children.d.ts +9 -0
  26. package/server/dist/orchestrator-children.js +50 -7
  27. package/server/dist/orchestrator-children.js.map +1 -1
  28. package/server/dist/orchestrator-manager.js +17 -0
  29. package/server/dist/orchestrator-manager.js.map +1 -1
  30. package/server/dist/orchestrator-reports.d.ts +0 -4
  31. package/server/dist/orchestrator-reports.js +6 -12
  32. package/server/dist/orchestrator-reports.js.map +1 -1
  33. package/server/dist/orchestrator-routes.js +8 -1
  34. package/server/dist/orchestrator-routes.js.map +1 -1
  35. package/server/dist/prompt-router.d.ts +95 -0
  36. package/server/dist/prompt-router.js +589 -0
  37. package/server/dist/prompt-router.js.map +1 -0
  38. package/server/dist/session-lifecycle.d.ts +73 -0
  39. package/server/dist/session-lifecycle.js +408 -0
  40. package/server/dist/session-lifecycle.js.map +1 -0
  41. package/server/dist/session-manager.d.ts +42 -60
  42. package/server/dist/session-manager.js +310 -835
  43. package/server/dist/session-manager.js.map +1 -1
  44. package/server/dist/session-persistence.d.ts +1 -0
  45. package/server/dist/session-persistence.js +24 -4
  46. package/server/dist/session-persistence.js.map +1 -1
  47. package/server/dist/session-routes.js +15 -1
  48. package/server/dist/session-routes.js.map +1 -1
  49. package/server/dist/stepflow-handler.d.ts +2 -2
  50. package/server/dist/stepflow-handler.js +4 -4
  51. package/server/dist/stepflow-handler.js.map +1 -1
  52. package/server/dist/tool-labels.d.ts +8 -0
  53. package/server/dist/tool-labels.js +51 -0
  54. package/server/dist/tool-labels.js.map +1 -0
  55. package/server/dist/tsconfig.tsbuildinfo +1 -1
  56. package/server/dist/types.d.ts +27 -8
  57. package/server/dist/types.js +4 -1
  58. package/server/dist/types.js.map +1 -1
  59. package/server/dist/webhook-dedup.d.ts +11 -0
  60. package/server/dist/webhook-dedup.js +23 -0
  61. package/server/dist/webhook-dedup.js.map +1 -1
  62. package/server/dist/webhook-handler.d.ts +20 -4
  63. package/server/dist/webhook-handler.js +256 -20
  64. package/server/dist/webhook-handler.js.map +1 -1
  65. package/server/dist/webhook-pr-cache.d.ts +57 -0
  66. package/server/dist/webhook-pr-cache.js +95 -0
  67. package/server/dist/webhook-pr-cache.js.map +1 -0
  68. package/server/dist/webhook-pr-github.d.ts +68 -0
  69. package/server/dist/webhook-pr-github.js +202 -0
  70. package/server/dist/webhook-pr-github.js.map +1 -0
  71. package/server/dist/webhook-pr-prompt.d.ts +27 -0
  72. package/server/dist/webhook-pr-prompt.js +251 -0
  73. package/server/dist/webhook-pr-prompt.js.map +1 -0
  74. package/server/dist/webhook-types.d.ts +70 -1
  75. package/server/dist/webhook-workspace.js +20 -1
  76. package/server/dist/webhook-workspace.js.map +1 -1
  77. package/server/dist/workflow-config.d.ts +2 -0
  78. package/server/dist/workflow-config.js.map +1 -1
  79. package/server/dist/workflow-loader.js +3 -0
  80. package/server/dist/workflow-loader.js.map +1 -1
  81. package/server/dist/workflow-routes.js +6 -2
  82. package/server/dist/workflow-routes.js.map +1 -1
  83. package/server/dist/ws-message-handler.js +24 -4
  84. package/server/dist/ws-message-handler.js.map +1 -1
  85. package/server/dist/ws-server.js +10 -2
  86. package/server/dist/ws-server.js.map +1 -1
  87. package/dist/assets/index-COGLICp9.js +0 -178
  88. package/dist/assets/index-CjEQkT2b.css +0 -1
@@ -1,9 +1,9 @@
1
1
  /**
2
- * GitHub webhook handler for automated CI failure triage.
2
+ * GitHub webhook handler for automated CI failure triage and PR code review.
3
3
  *
4
- * Processes incoming `workflow_run` webhook events and, for completed+failed
5
- * runs, spawns a Claude session that receives a structured prompt with logs,
6
- * job info, annotations, and commit context.
4
+ * Processes incoming webhook events:
5
+ * - `workflow_run` (completed+failed) → spawns Claude session for CI diagnosis
6
+ * - `pull_request` (opened/synchronize/reopened/ready_for_review) spawns Claude session for code review
7
7
  *
8
8
  * Event lifecycle / state machine:
9
9
  * received → (filtered/duplicate/capped)
@@ -26,6 +26,10 @@ export declare class WebhookHandler extends WebhookHandlerBase<WebhookEvent, Web
26
26
  private dedup;
27
27
  private ghHealthy;
28
28
  constructor(config: FullWebhookConfig, sessions: SessionManager);
29
+ /**
30
+ * Check if we are at the session cap (for reuse across event types).
31
+ */
32
+ private isAtSessionCap;
29
33
  /**
30
34
  * Run gh CLI health check. Must be called on startup.
31
35
  * Sets ghHealthy flag — if false, webhook processing is disabled.
@@ -47,6 +51,7 @@ export declare class WebhookHandler extends WebhookHandlerBase<WebhookEvent, Web
47
51
  statusCode: number;
48
52
  body: Record<string, unknown>;
49
53
  }>;
54
+ private handleWorkflowRunEvent;
50
55
  /**
51
56
  * Async background processing: fetch logs, create workspace, create session, send prompt.
52
57
  */
@@ -57,6 +62,17 @@ export declare class WebhookHandler extends WebhookHandlerBase<WebhookEvent, Web
57
62
  * display the incoming webhook badge regardless of which session is active.
58
63
  */
59
64
  private broadcastWebhookEvent;
65
+ private handlePullRequestEvent;
66
+ /**
67
+ * Handle PR closed/merged — archive or delete the review cache and kill any
68
+ * active review sessions for this PR.
69
+ */
70
+ private handlePrClosed;
71
+ /**
72
+ * Async background processing for PR review: fetch PR context, create workspace,
73
+ * create session, send review prompt.
74
+ */
75
+ private processPrReviewAsync;
60
76
  getConfig(): WebhookConfig;
61
77
  shutdown(): void;
62
78
  }
@@ -1,9 +1,9 @@
1
1
  /**
2
- * GitHub webhook handler for automated CI failure triage.
2
+ * GitHub webhook handler for automated CI failure triage and PR code review.
3
3
  *
4
- * Processes incoming `workflow_run` webhook events and, for completed+failed
5
- * runs, spawns a Claude session that receives a structured prompt with logs,
6
- * job info, annotations, and commit context.
4
+ * Processes incoming webhook events:
5
+ * - `workflow_run` (completed+failed) → spawns Claude session for CI diagnosis
6
+ * - `pull_request` (opened/synchronize/reopened/ready_for_review) spawns Claude session for code review
7
7
  *
8
8
  * Event lifecycle / state machine:
9
9
  * received → (filtered/duplicate/capped)
@@ -18,14 +18,19 @@
18
18
  */
19
19
  import { randomUUID } from 'crypto';
20
20
  import { verifyHmacSignature } from './crypto-utils.js';
21
- import { WebhookDedup, computeIdempotencyKey } from './webhook-dedup.js';
21
+ import { WebhookDedup, computeIdempotencyKey, computePrIdempotencyKey } from './webhook-dedup.js';
22
22
  import { checkGhHealth, fetchFailedLogs, fetchJobs, fetchAnnotations, fetchCommitMessage, fetchPRTitle } from './webhook-github.js';
23
+ import { fetchPrDiff, fetchPrFiles, fetchPrCommits, fetchPrReviewComments, fetchPrReviews, fetchExistingReviewComment } from './webhook-pr-github.js';
24
+ import { buildPrReviewPrompt } from './webhook-pr-prompt.js';
25
+ import { loadPrCache, ensureCacheDir, archivePrCache, deletePrCache } from './webhook-pr-cache.js';
23
26
  import { buildPrompt } from './webhook-prompt.js';
24
27
  import { createWorkspace, cleanupWorkspace } from './webhook-workspace.js';
25
28
  import { WebhookHandlerBase } from './webhook-handler-base.js';
26
29
  import { REPOS_ROOT } from './config.js';
27
30
  /** How long an event can stay in 'processing' before the watchdog marks it as error. */
28
31
  const PROCESSING_TIMEOUT_MS = 5 * 60 * 1000;
32
+ /** Supported pull_request actions for code review. */
33
+ const PR_REVIEW_ACTIONS = ['opened', 'synchronize', 'reopened', 'ready_for_review'];
29
34
  export class WebhookHandler extends WebhookHandlerBase {
30
35
  config;
31
36
  sessions;
@@ -53,6 +58,29 @@ export class WebhookHandler extends WebhookHandlerBase {
53
58
  cleanupWorkspace(sessionId);
54
59
  }
55
60
  });
61
+ // Auto-kill PR review sessions after Claude completes its turn so they don't
62
+ // sit idle waiting for more input and consume memory indefinitely.
63
+ sessions.onSessionResult((sessionId, isError) => {
64
+ if (isError)
65
+ return;
66
+ const event = this.getEvents().find(e => e.sessionId === sessionId && (e.status === 'session_created' || e.status === 'processing'));
67
+ if (!event)
68
+ return;
69
+ this.updateEventStatus(event.id, 'completed');
70
+ console.log(`[webhook] Session ${sessionId} completed review, scheduling cleanup`);
71
+ this.sessions.stopClaude(sessionId); // suppress auto-restart
72
+ setTimeout(() => {
73
+ this.sessions.delete(sessionId);
74
+ }, 2000);
75
+ });
76
+ }
77
+ /**
78
+ * Check if we are at the session cap (for reuse across event types).
79
+ */
80
+ isAtSessionCap() {
81
+ const activeWebhookSessions = this.sessions.list().filter(s => s.source === 'webhook' && s.active).length;
82
+ const processingEvents = this.countByStatus('processing');
83
+ return (activeWebhookSessions + processingEvents) >= this.config.maxConcurrentSessions;
56
84
  }
57
85
  /**
58
86
  * Run gh CLI health check. Must be called on startup.
@@ -105,7 +133,7 @@ export class WebhookHandler extends WebhookHandlerBase {
105
133
  if (!this.verifySignature(rawBody, headers.signature)) {
106
134
  return { statusCode: 401, body: { error: 'Invalid signature' } };
107
135
  }
108
- // --- Parse payload ---
136
+ // --- Parse payload (generic parse, dispatch by event type) ---
109
137
  let payload;
110
138
  try {
111
139
  payload = JSON.parse(rawBody.toString('utf-8'));
@@ -113,14 +141,23 @@ export class WebhookHandler extends WebhookHandlerBase {
113
141
  catch {
114
142
  return { statusCode: 400, body: { error: 'Malformed JSON payload' } };
115
143
  }
116
- // --- Event type filter (Phase 1: workflow_run only) ---
117
- if (headers.event !== 'workflow_run') {
118
- return {
119
- statusCode: 200,
120
- body: { accepted: false, eventId, status: 'filtered', filterReason: `Event type '${headers.event}' not supported (Phase 1: workflow_run only)` },
121
- };
144
+ // --- Event type dispatch ---
145
+ switch (headers.event) {
146
+ case 'workflow_run':
147
+ return this.handleWorkflowRunEvent(payload, eventId, headers);
148
+ case 'pull_request':
149
+ return this.handlePullRequestEvent(payload, eventId, headers);
150
+ default:
151
+ return {
152
+ statusCode: 200,
153
+ body: { accepted: false, eventId, status: 'filtered', filterReason: `Event type '${headers.event}' not supported` },
154
+ };
122
155
  }
123
- // --- Action + conclusion filter ---
156
+ }
157
+ // ---------------------------------------------------------------------------
158
+ // workflow_run handling (existing logic, extracted into its own method)
159
+ // ---------------------------------------------------------------------------
160
+ async handleWorkflowRunEvent(payload, eventId, headers) {
124
161
  const wr = payload.workflow_run;
125
162
  if (!wr) {
126
163
  return { statusCode: 400, body: { error: 'Missing workflow_run in payload' } };
@@ -172,13 +209,7 @@ export class WebhookHandler extends WebhookHandlerBase {
172
209
  };
173
210
  }
174
211
  // --- Session cap check ---
175
- // Count both active webhook sessions AND events still in 'processing' state
176
- // (session not yet created) to prevent concurrent webhooks from bypassing the
177
- // cap during the async setup window (gh API calls, workspace cloning, etc.).
178
- const activeWebhookSessions = this.sessions.list().filter(s => s.source === 'webhook' && s.active).length;
179
- const processingEvents = this.countByStatus('processing');
180
- const effectiveConcurrency = activeWebhookSessions + processingEvents;
181
- if (effectiveConcurrency >= this.config.maxConcurrentSessions) {
212
+ if (this.isAtSessionCap()) {
182
213
  this.recordEvent({
183
214
  id: eventId,
184
215
  idempotencyKey,
@@ -217,6 +248,7 @@ export class WebhookHandler extends WebhookHandlerBase {
217
248
  sessionId,
218
249
  };
219
250
  this.recordEvent(webhookEvent);
251
+ this.dedup.recordProcessed(eventId, idempotencyKey);
220
252
  // Process asynchronously — don't block the 202 response
221
253
  this.processWebhookAsync(payload, webhookEvent, sessionId).catch(err => {
222
254
  console.error('[webhook] Async processing error:', err);
@@ -326,6 +358,210 @@ export class WebhookHandler extends WebhookHandlerBase {
326
358
  }
327
359
  }
328
360
  }
361
+ // ---------------------------------------------------------------------------
362
+ // pull_request handling (PR code review)
363
+ // ---------------------------------------------------------------------------
364
+ async handlePullRequestEvent(payload, eventId,
365
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
366
+ _headers) {
367
+ const pr = payload.pull_request;
368
+ if (!pr) {
369
+ return { statusCode: 400, body: { error: 'Missing pull_request in payload' } };
370
+ }
371
+ // --- Closed/merged handling (cleanup, no review) ---
372
+ if (payload.action === 'closed') {
373
+ return this.handlePrClosed(payload, eventId);
374
+ }
375
+ // --- Action filter ---
376
+ if (!PR_REVIEW_ACTIONS.includes(payload.action)) {
377
+ return {
378
+ statusCode: 200,
379
+ body: {
380
+ accepted: false,
381
+ eventId,
382
+ status: 'filtered',
383
+ filterReason: `PR action '${payload.action}' not supported (only ${PR_REVIEW_ACTIONS.join(', ')})`,
384
+ },
385
+ };
386
+ }
387
+ // --- Draft filter ---
388
+ if (pr.draft) {
389
+ return {
390
+ statusCode: 200,
391
+ body: { accepted: false, eventId, status: 'filtered', filterReason: 'PR is a draft' },
392
+ };
393
+ }
394
+ // --- Actor allowlist ---
395
+ const actorLower = (payload.sender?.login ?? '').toLowerCase();
396
+ if (this.config.actorAllowlist.length > 0 && !this.config.actorAllowlist.some(a => a.toLowerCase() === actorLower)) {
397
+ return {
398
+ statusCode: 200,
399
+ body: { accepted: false, eventId, status: 'filtered', filterReason: `Actor '${payload.sender?.login}' not in allowlist` },
400
+ };
401
+ }
402
+ // --- Deduplication ---
403
+ const headSha = pr.head?.sha ?? '';
404
+ const idempotencyKey = computePrIdempotencyKey(payload.repository.full_name, pr.number, payload.action, headSha);
405
+ if (this.dedup.isDuplicate(eventId, idempotencyKey)) {
406
+ return {
407
+ statusCode: 200,
408
+ body: { accepted: false, eventId, status: 'duplicate' },
409
+ };
410
+ }
411
+ // --- Session cap ---
412
+ if (this.isAtSessionCap()) {
413
+ return {
414
+ statusCode: 429,
415
+ body: { error: 'Max concurrent webhook sessions reached', max: this.config.maxConcurrentSessions },
416
+ };
417
+ }
418
+ // --- Pre-allocate session ID and respond 202 ---
419
+ const sessionId = randomUUID();
420
+ const repo = payload.repository.full_name;
421
+ const webhookEvent = {
422
+ id: eventId,
423
+ idempotencyKey,
424
+ receivedAt: new Date().toISOString(),
425
+ event: 'pull_request',
426
+ action: payload.action,
427
+ repo,
428
+ branch: pr.head?.ref ?? 'unknown',
429
+ workflow: `PR #${pr.number}`,
430
+ runId: pr.number,
431
+ runAttempt: 1,
432
+ conclusion: 'pending',
433
+ status: 'processing',
434
+ sessionId,
435
+ };
436
+ this.recordEvent(webhookEvent);
437
+ this.dedup.recordProcessed(eventId, idempotencyKey);
438
+ // Process asynchronously
439
+ this.processPrReviewAsync(payload, webhookEvent, sessionId).catch(err => {
440
+ console.error('[webhook] PR review async processing error:', err);
441
+ this.updateEventStatus(eventId, 'error', String(err));
442
+ });
443
+ return {
444
+ statusCode: 202,
445
+ body: { accepted: true, eventId, status: 'processing', sessionId },
446
+ };
447
+ }
448
+ /**
449
+ * Handle PR closed/merged — archive or delete the review cache and kill any
450
+ * active review sessions for this PR.
451
+ */
452
+ async handlePrClosed(payload, eventId) {
453
+ const pr = payload.pull_request;
454
+ const repo = payload.repository.full_name;
455
+ const merged = pr.merged ?? false;
456
+ console.log(`[webhook] PR #${pr.number} ${merged ? 'merged' : 'closed'} in ${repo}`);
457
+ // Archive (merged) or delete (closed without merge) the cache
458
+ try {
459
+ if (merged) {
460
+ archivePrCache(repo, pr.number);
461
+ }
462
+ else {
463
+ deletePrCache(repo, pr.number);
464
+ }
465
+ }
466
+ catch (err) {
467
+ console.warn(`[webhook] Failed to clean up PR cache for ${repo}#${pr.number}:`, err);
468
+ }
469
+ // Kill any active review sessions for this PR
470
+ const prLabel = `PR #${pr.number}`;
471
+ const activeEvents = this.getEvents().filter(e => e.repo === repo && e.workflow === prLabel && (e.status === 'processing' || e.status === 'session_created'));
472
+ for (const event of activeEvents) {
473
+ if (event.sessionId) {
474
+ this.sessions.stopClaude(event.sessionId);
475
+ setTimeout(() => this.sessions.delete(event.sessionId), 1000);
476
+ }
477
+ this.updateEventStatus(event.id, 'completed');
478
+ }
479
+ return {
480
+ statusCode: 200,
481
+ body: { accepted: true, eventId, status: 'completed', action: merged ? 'archived' : 'deleted' },
482
+ };
483
+ }
484
+ /**
485
+ * Async background processing for PR review: fetch PR context, create workspace,
486
+ * create session, send review prompt.
487
+ */
488
+ async processPrReviewAsync(payload, event, sessionId) {
489
+ const pr = payload.pull_request;
490
+ const repo = payload.repository.full_name;
491
+ const repoName = payload.repository.name;
492
+ const prNumber = pr.number;
493
+ const headSha = pr.head?.sha ?? '';
494
+ const baseRef = pr.base?.ref ?? 'main';
495
+ console.log(`[webhook] Processing PR review: ${repo}#${prNumber} (${pr.title})`);
496
+ // --- Ensure cache dir ---
497
+ ensureCacheDir(repo, prNumber);
498
+ // --- Load prior review cache ---
499
+ const priorCache = loadPrCache(repo, prNumber);
500
+ // --- Fetch PR context (all calls degrade gracefully) ---
501
+ const [diffResult, files, commits, reviewComments, reviews, existingComment] = await Promise.all([
502
+ fetchPrDiff(repo, prNumber),
503
+ fetchPrFiles(repo, prNumber),
504
+ fetchPrCommits(repo, prNumber),
505
+ fetchPrReviewComments(repo, prNumber),
506
+ fetchPrReviews(repo, prNumber),
507
+ fetchExistingReviewComment(repo, prNumber),
508
+ ]);
509
+ const prContext = {
510
+ repo,
511
+ repoName,
512
+ prNumber,
513
+ prTitle: pr.title,
514
+ prBody: pr.body ?? '',
515
+ prUrl: pr.html_url ?? '',
516
+ author: pr.user?.login ?? 'unknown',
517
+ headBranch: pr.head?.ref ?? 'unknown',
518
+ baseBranch: baseRef,
519
+ headSha,
520
+ baseSha: pr.base?.sha ?? '',
521
+ beforeSha: payload.before,
522
+ action: payload.action,
523
+ changedFiles: pr.changed_files ?? 0,
524
+ additions: pr.additions ?? 0,
525
+ deletions: pr.deletions ?? 0,
526
+ diff: diffResult.diff,
527
+ fileList: files,
528
+ commitMessages: commits,
529
+ reviewComments,
530
+ reviews,
531
+ existingComment: existingComment != null ? String(existingComment) : null,
532
+ priorCache: priorCache ?? null,
533
+ };
534
+ // --- Create workspace ---
535
+ let workspacePath;
536
+ const headRepo = pr.head?.repo?.clone_url ?? payload.repository.clone_url;
537
+ try {
538
+ workspacePath = await createWorkspace(sessionId, repo, headRepo, pr.head?.ref ?? baseRef, headSha);
539
+ }
540
+ catch (err) {
541
+ console.error(`[webhook] Failed to create workspace for PR ${repo}#${prNumber}:`, err);
542
+ this.updateEventStatus(event.id, 'error', `Workspace creation failed: ${err}`);
543
+ return;
544
+ }
545
+ // --- Create session ---
546
+ const groupDir = `${REPOS_ROOT}/${repoName}`;
547
+ const sessionName = `review/${repoName}/PR-${prNumber}`;
548
+ this.sessions.create(sessionName, workspacePath, {
549
+ source: 'webhook',
550
+ id: sessionId,
551
+ groupDir,
552
+ allowedTools: ['Bash(git:*)', 'Bash(gh:*)'],
553
+ });
554
+ console.log(`[webhook] PR review session created: ${sessionName} (${sessionId})`);
555
+ this.updateEventStatus(event.id, 'session_created');
556
+ // Broadcast
557
+ const updatedEvent = this.getEvent(event.id);
558
+ if (updatedEvent)
559
+ this.broadcastWebhookEvent(updatedEvent);
560
+ // --- Build and send prompt ---
561
+ const prompt = buildPrReviewPrompt(prContext, workspacePath);
562
+ this.sessions.sendInput(sessionId, prompt);
563
+ console.log(`[webhook] PR review prompt sent to session ${sessionId}`);
564
+ }
329
565
  getConfig() {
330
566
  return {
331
567
  enabled: this.config.enabled,
@@ -1 +1 @@
1
- {"version":3,"file":"webhook-handler.js","sourceRoot":"","sources":["../webhook-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhook-handler.js","sourceRoot":"","sources":["../webhook-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Per-PR context cache for webhook reviews.
3
+ *
4
+ * Stores Claude's prior review findings and codebase familiarity notes
5
+ * so subsequent reviews of the same PR can build on prior context.
6
+ *
7
+ * Cache location: ~/.codekin/pr-cache/{owner}/{repo}/pr-{number}.json
8
+ */
9
+ /** Structured finding from a PR review. */
10
+ export interface PrFinding {
11
+ severity: 'critical' | 'must-fix' | 'suggestion' | 'minor' | 'nitpick';
12
+ file: string;
13
+ line: number | null;
14
+ description: string;
15
+ status: 'new' | 'open' | 'fixed';
16
+ }
17
+ /** Shape of the cached PR review context. */
18
+ export interface PrCacheData {
19
+ prNumber: number;
20
+ repo: string;
21
+ lastReviewedSha: string;
22
+ timestamp: string;
23
+ priorReviewSummary: string;
24
+ codebaseContext: string;
25
+ reviewFindings: string;
26
+ verdict?: 'approve' | 'request_changes' | 'comment';
27
+ structuredFindings?: PrFinding[];
28
+ author?: string;
29
+ prTitle?: string;
30
+ changedFiles?: number;
31
+ additions?: number;
32
+ deletions?: number;
33
+ }
34
+ /**
35
+ * Return the absolute path for a PR's cache file (pure, no side effects).
36
+ */
37
+ export declare function getCachePath(repo: string, prNumber: number): string;
38
+ /**
39
+ * Ensure the cache directory exists for a given repo, then return the cache file path.
40
+ * Use this when the caller intends to write (or instruct Claude to write) the cache file.
41
+ */
42
+ export declare function ensureCacheDir(repo: string, prNumber: number): string;
43
+ /**
44
+ * Load cached review context for a PR.
45
+ * Returns undefined if the cache doesn't exist, is malformed, or is missing required fields.
46
+ */
47
+ export declare function loadPrCache(repo: string, prNumber: number): PrCacheData | undefined;
48
+ /**
49
+ * Archive a PR's cache file (move to archived/ subdirectory).
50
+ * Used when a PR is merged. No-op if cache doesn't exist.
51
+ */
52
+ export declare function archivePrCache(repo: string, prNumber: number): void;
53
+ /**
54
+ * Delete a PR's cache file.
55
+ * Used when a PR is closed without merging. No-op if cache doesn't exist.
56
+ */
57
+ export declare function deletePrCache(repo: string, prNumber: number): void;
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Per-PR context cache for webhook reviews.
3
+ *
4
+ * Stores Claude's prior review findings and codebase familiarity notes
5
+ * so subsequent reviews of the same PR can build on prior context.
6
+ *
7
+ * Cache location: ~/.codekin/pr-cache/{owner}/{repo}/pr-{number}.json
8
+ */
9
+ import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync } from 'fs';
10
+ import { homedir } from 'os';
11
+ import { join } from 'path';
12
+ const REQUIRED_FIELDS = [
13
+ 'prNumber', 'repo', 'lastReviewedSha', 'timestamp',
14
+ 'priorReviewSummary', 'codebaseContext', 'reviewFindings',
15
+ ];
16
+ /**
17
+ * Return the absolute path for a PR's cache file (pure, no side effects).
18
+ */
19
+ export function getCachePath(repo, prNumber) {
20
+ const [owner, name] = repo.split('/');
21
+ return join(homedir(), '.codekin', 'pr-cache', owner, name, `pr-${prNumber}.json`);
22
+ }
23
+ /**
24
+ * Ensure the cache directory exists for a given repo, then return the cache file path.
25
+ * Use this when the caller intends to write (or instruct Claude to write) the cache file.
26
+ */
27
+ export function ensureCacheDir(repo, prNumber) {
28
+ const [owner, name] = repo.split('/');
29
+ const dir = join(homedir(), '.codekin', 'pr-cache', owner, name);
30
+ mkdirSync(dir, { recursive: true });
31
+ return join(dir, `pr-${prNumber}.json`);
32
+ }
33
+ /**
34
+ * Load cached review context for a PR.
35
+ * Returns undefined if the cache doesn't exist, is malformed, or is missing required fields.
36
+ */
37
+ export function loadPrCache(repo, prNumber) {
38
+ const [owner, name] = repo.split('/');
39
+ const cachePath = join(homedir(), '.codekin', 'pr-cache', owner, name, `pr-${prNumber}.json`);
40
+ if (!existsSync(cachePath))
41
+ return undefined;
42
+ try {
43
+ const raw = readFileSync(cachePath, 'utf-8');
44
+ const data = JSON.parse(raw);
45
+ // Validate required fields
46
+ for (const field of REQUIRED_FIELDS) {
47
+ if (data[field] === undefined || data[field] === null) {
48
+ console.warn(`[pr-cache] Cache for ${repo} PR #${prNumber} missing field '${field}', ignoring`);
49
+ return undefined;
50
+ }
51
+ }
52
+ return data;
53
+ }
54
+ catch (err) {
55
+ console.warn(`[pr-cache] Failed to load cache for ${repo} PR #${prNumber}:`, err);
56
+ return undefined;
57
+ }
58
+ }
59
+ /**
60
+ * Archive a PR's cache file (move to archived/ subdirectory).
61
+ * Used when a PR is merged. No-op if cache doesn't exist.
62
+ */
63
+ export function archivePrCache(repo, prNumber) {
64
+ const source = getCachePath(repo, prNumber);
65
+ if (!existsSync(source))
66
+ return;
67
+ try {
68
+ const [owner, name] = repo.split('/');
69
+ const archivedDir = join(homedir(), '.codekin', 'pr-cache', owner, name, 'archived');
70
+ mkdirSync(archivedDir, { recursive: true });
71
+ const dest = join(archivedDir, `pr-${prNumber}.json`);
72
+ renameSync(source, dest);
73
+ console.log(`[pr-cache] Archived cache for ${repo} PR #${prNumber}`);
74
+ }
75
+ catch (err) {
76
+ console.warn(`[pr-cache] Failed to archive cache for ${repo} PR #${prNumber}:`, err);
77
+ }
78
+ }
79
+ /**
80
+ * Delete a PR's cache file.
81
+ * Used when a PR is closed without merging. No-op if cache doesn't exist.
82
+ */
83
+ export function deletePrCache(repo, prNumber) {
84
+ const path = getCachePath(repo, prNumber);
85
+ if (!existsSync(path))
86
+ return;
87
+ try {
88
+ unlinkSync(path);
89
+ console.log(`[pr-cache] Deleted cache for ${repo} PR #${prNumber}`);
90
+ }
91
+ catch (err) {
92
+ console.warn(`[pr-cache] Failed to delete cache for ${repo} PR #${prNumber}:`, err);
93
+ }
94
+ }
95
+ //# sourceMappingURL=webhook-pr-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-pr-cache.js","sourceRoot":"","sources":["../webhook-pr-cache.ts"],"names":[],"mappings":"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"}