codekin 0.2.2 → 0.3.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.
- package/dist/assets/index-B4rYTSlV.css +1 -0
- package/dist/assets/index-CWc3yfPn.js +181 -0
- package/dist/index.html +2 -2
- package/package.json +8 -5
- package/server/dist/approval-manager.d.ts +71 -0
- package/server/dist/approval-manager.js +249 -0
- package/server/dist/approval-manager.js.map +1 -0
- package/server/dist/auth-routes.d.ts +11 -0
- package/server/dist/auth-routes.js +11 -0
- package/server/dist/auth-routes.js.map +1 -1
- package/server/dist/claude-process.js +2 -1
- package/server/dist/claude-process.js.map +1 -1
- package/server/dist/config.d.ts +1 -2
- package/server/dist/config.js +16 -4
- package/server/dist/config.js.map +1 -1
- package/server/dist/crypto-utils.d.ts +16 -1
- package/server/dist/crypto-utils.js +44 -1
- package/server/dist/crypto-utils.js.map +1 -1
- package/server/dist/docs-routes.d.ts +16 -0
- package/server/dist/docs-routes.js +141 -0
- package/server/dist/docs-routes.js.map +1 -0
- package/server/dist/session-manager.d.ts +37 -84
- package/server/dist/session-manager.js +89 -472
- package/server/dist/session-manager.js.map +1 -1
- package/server/dist/session-naming.d.ts +35 -0
- package/server/dist/session-naming.js +168 -0
- package/server/dist/session-naming.js.map +1 -0
- package/server/dist/session-persistence.d.ts +30 -0
- package/server/dist/session-persistence.js +93 -0
- package/server/dist/session-persistence.js.map +1 -0
- package/server/dist/session-routes.d.ts +2 -1
- package/server/dist/session-routes.js +11 -8
- package/server/dist/session-routes.js.map +1 -1
- package/server/dist/stepflow-handler.d.ts +3 -9
- package/server/dist/stepflow-handler.js +19 -54
- package/server/dist/stepflow-handler.js.map +1 -1
- package/server/dist/types.d.ts +3 -0
- package/server/dist/upload-routes.js +6 -3
- package/server/dist/upload-routes.js.map +1 -1
- package/server/dist/webhook-github.d.ts +23 -5
- package/server/dist/webhook-github.js +23 -5
- package/server/dist/webhook-github.js.map +1 -1
- package/server/dist/webhook-handler-base.d.ts +45 -0
- package/server/dist/webhook-handler-base.js +86 -0
- package/server/dist/webhook-handler-base.js.map +1 -0
- package/server/dist/webhook-handler.d.ts +3 -10
- package/server/dist/webhook-handler.js +6 -46
- package/server/dist/webhook-handler.js.map +1 -1
- package/server/dist/webhook-workspace.d.ts +8 -1
- package/server/dist/webhook-workspace.js +71 -47
- package/server/dist/webhook-workspace.js.map +1 -1
- package/server/dist/workflow-config.d.ts +2 -0
- package/server/dist/workflow-config.js +1 -1
- package/server/dist/workflow-config.js.map +1 -1
- package/server/dist/workflow-loader.d.ts +2 -0
- package/server/dist/workflow-loader.js +13 -9
- package/server/dist/workflow-loader.js.map +1 -1
- package/server/dist/workflow-routes.js +3 -2
- package/server/dist/workflow-routes.js.map +1 -1
- package/server/dist/ws-server.js +77 -16
- package/server/dist/ws-server.js.map +1 -1
- package/server/workflows/repo-health.weekly.md +111 -0
- package/dist/assets/index-CQdQ4FhF.css +0 -1
- package/dist/assets/index-D6pRORYQ.js +0 -115
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base class for webhook handlers (GitHub, Stepflow, etc.).
|
|
3
|
+
*
|
|
4
|
+
* Encapsulates the infrastructure that is identical across all webhook-style
|
|
5
|
+
* handlers:
|
|
6
|
+
* - In-memory event ring buffer (recordEvent / getEvents / getEvent)
|
|
7
|
+
* - Processing watchdog that marks stuck events as 'error'
|
|
8
|
+
* - Status update helper
|
|
9
|
+
* - Graceful shutdown of the watchdog interval
|
|
10
|
+
*
|
|
11
|
+
* Subclasses provide:
|
|
12
|
+
* - The concrete event type (WebhookEvent, StepflowEvent, …)
|
|
13
|
+
* - The concrete status type (WebhookEventStatus, StepflowEventStatus, …)
|
|
14
|
+
* - All domain-specific logic (signature verification, async processing, etc.)
|
|
15
|
+
*/
|
|
16
|
+
const DEFAULT_MAX_EVENTS = 100;
|
|
17
|
+
export class WebhookHandlerBase {
|
|
18
|
+
logPrefix;
|
|
19
|
+
events = [];
|
|
20
|
+
_processingWatchdog = null;
|
|
21
|
+
maxEventHistory;
|
|
22
|
+
/**
|
|
23
|
+
* @param logPrefix Label used in watchdog console output, e.g. `'webhook'` or `'stepflow'`.
|
|
24
|
+
* @param timeoutMs How long an event may remain in `'processing'` before
|
|
25
|
+
* the watchdog marks it as `'error'`.
|
|
26
|
+
* @param maxEventHistory Maximum number of events stored in the ring buffer.
|
|
27
|
+
*/
|
|
28
|
+
constructor(logPrefix, timeoutMs, maxEventHistory = DEFAULT_MAX_EVENTS) {
|
|
29
|
+
this.logPrefix = logPrefix;
|
|
30
|
+
this.maxEventHistory = maxEventHistory;
|
|
31
|
+
this._processingWatchdog = setInterval(() => {
|
|
32
|
+
const cutoff = Date.now() - timeoutMs;
|
|
33
|
+
for (const event of this.events) {
|
|
34
|
+
if (event.status === 'processing' && new Date(event.receivedAt).getTime() < cutoff) {
|
|
35
|
+
console.warn(`[${this.logPrefix}] Watchdog: event ${event.id} stuck in 'processing' for >${Math.round(timeoutMs / 60_000)}min, marking error`);
|
|
36
|
+
this.updateEventStatus(event.id, 'error', 'Processing timed out (watchdog)');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}, 60_000);
|
|
40
|
+
if (this._processingWatchdog.unref)
|
|
41
|
+
this._processingWatchdog.unref();
|
|
42
|
+
}
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Event ring buffer
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
/** Append an event to the in-memory ring buffer, trimming the oldest entry when full. */
|
|
47
|
+
recordEvent(event) {
|
|
48
|
+
this.events.push(event);
|
|
49
|
+
if (this.events.length > this.maxEventHistory) {
|
|
50
|
+
this.events = this.events.slice(-this.maxEventHistory);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** Mutate an event's status in-place. */
|
|
54
|
+
updateEventStatus(eventId, status, error) {
|
|
55
|
+
const event = this.events.find(e => e.id === eventId);
|
|
56
|
+
if (event) {
|
|
57
|
+
event.status = status;
|
|
58
|
+
if (error)
|
|
59
|
+
event.error = error;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
getEvents() {
|
|
63
|
+
return [...this.events];
|
|
64
|
+
}
|
|
65
|
+
getEvent(id) {
|
|
66
|
+
return this.events.find(e => e.id === id);
|
|
67
|
+
}
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// Protected helpers for subclasses
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
/** Return events currently in a given status (useful for concurrency cap checks). */
|
|
72
|
+
countByStatus(status) {
|
|
73
|
+
return this.events.filter(e => e.status === status).length;
|
|
74
|
+
}
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
// Lifecycle
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
/** Stop the processing watchdog interval. Subclasses should call `super.shutdown()`. */
|
|
79
|
+
shutdown() {
|
|
80
|
+
if (this._processingWatchdog) {
|
|
81
|
+
clearInterval(this._processingWatchdog);
|
|
82
|
+
this._processingWatchdog = null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=webhook-handler-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-handler-base.js","sourceRoot":"","sources":["../webhook-handler-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,15 +17,14 @@
|
|
|
17
17
|
* concurrency cap from leaking on partial failures.
|
|
18
18
|
*/
|
|
19
19
|
import type { SessionManager } from './session-manager.js';
|
|
20
|
-
import type { WebhookConfig, WebhookEvent } from './webhook-types.js';
|
|
20
|
+
import type { WebhookConfig, WebhookEvent, WebhookEventStatus } from './webhook-types.js';
|
|
21
21
|
import type { FullWebhookConfig } from './webhook-config.js';
|
|
22
|
-
|
|
22
|
+
import { WebhookHandlerBase } from './webhook-handler-base.js';
|
|
23
|
+
export declare class WebhookHandler extends WebhookHandlerBase<WebhookEvent, WebhookEventStatus> {
|
|
23
24
|
private config;
|
|
24
25
|
private sessions;
|
|
25
26
|
private dedup;
|
|
26
|
-
private events;
|
|
27
27
|
private ghHealthy;
|
|
28
|
-
private _processingWatchdog;
|
|
29
28
|
constructor(config: FullWebhookConfig, sessions: SessionManager);
|
|
30
29
|
/**
|
|
31
30
|
* Run gh CLI health check. Must be called on startup.
|
|
@@ -58,12 +57,6 @@ export declare class WebhookHandler {
|
|
|
58
57
|
* display the incoming webhook badge regardless of which session is active.
|
|
59
58
|
*/
|
|
60
59
|
private broadcastWebhookEvent;
|
|
61
|
-
/** Append an event to the in-memory ring buffer, trimming the oldest entry when full. */
|
|
62
|
-
private recordEvent;
|
|
63
|
-
/** Mutate an event's status in-place. Called from both the async path and the session-exit callback. */
|
|
64
|
-
private updateEventStatus;
|
|
65
|
-
getEvents(): WebhookEvent[];
|
|
66
|
-
getEvent(id: string): WebhookEvent | undefined;
|
|
67
60
|
getConfig(): WebhookConfig;
|
|
68
61
|
shutdown(): void;
|
|
69
62
|
}
|
|
@@ -22,17 +22,16 @@ import { WebhookDedup, computeIdempotencyKey } from './webhook-dedup.js';
|
|
|
22
22
|
import { checkGhHealth, fetchFailedLogs, fetchJobs, fetchAnnotations, fetchCommitMessage, fetchPRTitle } from './webhook-github.js';
|
|
23
23
|
import { buildPrompt } from './webhook-prompt.js';
|
|
24
24
|
import { createWorkspace, cleanupWorkspace } from './webhook-workspace.js';
|
|
25
|
-
|
|
25
|
+
import { WebhookHandlerBase } from './webhook-handler-base.js';
|
|
26
26
|
/** How long an event can stay in 'processing' before the watchdog marks it as error. */
|
|
27
27
|
const PROCESSING_TIMEOUT_MS = 5 * 60 * 1000;
|
|
28
|
-
export class WebhookHandler {
|
|
28
|
+
export class WebhookHandler extends WebhookHandlerBase {
|
|
29
29
|
config;
|
|
30
30
|
sessions;
|
|
31
31
|
dedup;
|
|
32
|
-
events = [];
|
|
33
32
|
ghHealthy = false;
|
|
34
|
-
_processingWatchdog = null;
|
|
35
33
|
constructor(config, sessions) {
|
|
34
|
+
super('webhook', PROCESSING_TIMEOUT_MS);
|
|
36
35
|
this.config = config;
|
|
37
36
|
this.sessions = sessions;
|
|
38
37
|
this.dedup = new WebhookDedup();
|
|
@@ -44,7 +43,7 @@ export class WebhookHandler {
|
|
|
44
43
|
return; // Don't update status — Claude will retry
|
|
45
44
|
// Match any non-terminal status — covers both 'processing' (if Claude
|
|
46
45
|
// exits before status reaches 'session_created') and 'session_created'.
|
|
47
|
-
const event = this.
|
|
46
|
+
const event = this.getEvents().find(e => e.sessionId === sessionId && (e.status === 'session_created' || e.status === 'processing'));
|
|
48
47
|
if (event) {
|
|
49
48
|
const status = (code === 0) ? 'completed' : 'error';
|
|
50
49
|
this.updateEventStatus(event.id, status, code !== 0 ? `Claude exited with code ${code}` : undefined);
|
|
@@ -53,19 +52,6 @@ export class WebhookHandler {
|
|
|
53
52
|
cleanupWorkspace(sessionId);
|
|
54
53
|
}
|
|
55
54
|
});
|
|
56
|
-
// Watchdog: mark 'processing' events as 'error' if stuck for >5 minutes.
|
|
57
|
-
// Prevents permanently inflated concurrency counts from failed async processing.
|
|
58
|
-
this._processingWatchdog = setInterval(() => {
|
|
59
|
-
const cutoff = Date.now() - PROCESSING_TIMEOUT_MS;
|
|
60
|
-
for (const event of this.events) {
|
|
61
|
-
if (event.status === 'processing' && new Date(event.receivedAt).getTime() < cutoff) {
|
|
62
|
-
console.warn(`[webhook] Watchdog: event ${event.id} stuck in 'processing' for >5min, marking error`);
|
|
63
|
-
this.updateEventStatus(event.id, 'error', 'Processing timed out (watchdog)');
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}, 60_000);
|
|
67
|
-
if (this._processingWatchdog.unref)
|
|
68
|
-
this._processingWatchdog.unref();
|
|
69
55
|
}
|
|
70
56
|
/**
|
|
71
57
|
* Run gh CLI health check. Must be called on startup.
|
|
@@ -176,7 +162,7 @@ export class WebhookHandler {
|
|
|
176
162
|
// (session not yet created) to prevent concurrent webhooks from bypassing the
|
|
177
163
|
// cap during the async setup window (gh API calls, workspace cloning, etc.).
|
|
178
164
|
const activeWebhookSessions = this.sessions.list().filter(s => s.source === 'webhook' && s.active).length;
|
|
179
|
-
const processingEvents = this.
|
|
165
|
+
const processingEvents = this.countByStatus('processing');
|
|
180
166
|
const effectiveConcurrency = activeWebhookSessions + processingEvents;
|
|
181
167
|
if (effectiveConcurrency >= this.config.maxConcurrentSessions) {
|
|
182
168
|
this.recordEvent({
|
|
@@ -327,29 +313,6 @@ export class WebhookHandler {
|
|
|
327
313
|
}
|
|
328
314
|
}
|
|
329
315
|
}
|
|
330
|
-
// --- Event history management ---
|
|
331
|
-
/** Append an event to the in-memory ring buffer, trimming the oldest entry when full. */
|
|
332
|
-
recordEvent(event) {
|
|
333
|
-
this.events.push(event);
|
|
334
|
-
if (this.events.length > MAX_EVENT_HISTORY) {
|
|
335
|
-
this.events = this.events.slice(-MAX_EVENT_HISTORY);
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
/** Mutate an event's status in-place. Called from both the async path and the session-exit callback. */
|
|
339
|
-
updateEventStatus(eventId, status, error) {
|
|
340
|
-
const event = this.events.find(e => e.id === eventId);
|
|
341
|
-
if (event) {
|
|
342
|
-
event.status = status;
|
|
343
|
-
if (error)
|
|
344
|
-
event.error = error;
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
getEvents() {
|
|
348
|
-
return [...this.events];
|
|
349
|
-
}
|
|
350
|
-
getEvent(id) {
|
|
351
|
-
return this.events.find(e => e.id === id);
|
|
352
|
-
}
|
|
353
316
|
getConfig() {
|
|
354
317
|
return {
|
|
355
318
|
enabled: this.config.enabled,
|
|
@@ -358,10 +321,7 @@ export class WebhookHandler {
|
|
|
358
321
|
};
|
|
359
322
|
}
|
|
360
323
|
shutdown() {
|
|
361
|
-
|
|
362
|
-
clearInterval(this._processingWatchdog);
|
|
363
|
-
this._processingWatchdog = null;
|
|
364
|
-
}
|
|
324
|
+
super.shutdown();
|
|
365
325
|
this.dedup.shutdown();
|
|
366
326
|
}
|
|
367
327
|
}
|
|
@@ -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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"}
|
|
@@ -2,10 +2,17 @@
|
|
|
2
2
|
* Create an isolated workspace for a webhook session.
|
|
3
3
|
* Clones from the bare mirror and checks out the target branch.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* @param sessionId - Unique session ID, used as the workspace directory name.
|
|
6
|
+
* @param repo - GitHub repo in `owner/name` format.
|
|
7
|
+
* @param cloneUrl - HTTPS clone URL for git remote (must be a github.com URL).
|
|
8
|
+
* @param branch - Branch name to check out.
|
|
9
|
+
* @param headSha - Exact commit SHA to pin the workspace to.
|
|
10
|
+
* @returns The absolute path to the created workspace directory.
|
|
6
11
|
*/
|
|
7
12
|
export declare function createWorkspace(sessionId: string, repo: string, cloneUrl: string, branch: string, headSha: string): Promise<string>;
|
|
8
13
|
/**
|
|
9
14
|
* Remove a workspace directory when a session closes.
|
|
15
|
+
*
|
|
16
|
+
* @param sessionId - Session ID whose workspace should be cleaned up.
|
|
10
17
|
*/
|
|
11
18
|
export declare function cleanupWorkspace(sessionId: string): void;
|
|
@@ -59,63 +59,87 @@ async function ensureBareMirrorImpl(repo) {
|
|
|
59
59
|
* Create an isolated workspace for a webhook session.
|
|
60
60
|
* Clones from the bare mirror and checks out the target branch.
|
|
61
61
|
*
|
|
62
|
-
*
|
|
62
|
+
* @param sessionId - Unique session ID, used as the workspace directory name.
|
|
63
|
+
* @param repo - GitHub repo in `owner/name` format.
|
|
64
|
+
* @param cloneUrl - HTTPS clone URL for git remote (must be a github.com URL).
|
|
65
|
+
* @param branch - Branch name to check out.
|
|
66
|
+
* @param headSha - Exact commit SHA to pin the workspace to.
|
|
67
|
+
* @returns The absolute path to the created workspace directory.
|
|
63
68
|
*/
|
|
64
69
|
export async function createWorkspace(sessionId, repo, cloneUrl, branch, headSha) {
|
|
65
70
|
const mirrorPath = await ensureBareMirror(repo);
|
|
66
71
|
const workspacePath = join(WORKSPACES_DIR, sessionId);
|
|
67
72
|
mkdirSync(workspacePath, { recursive: true });
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
let setupComplete = false;
|
|
74
|
+
try {
|
|
75
|
+
// Clone from local mirror
|
|
76
|
+
console.log(`[webhook-workspace] Cloning workspace for session ${sessionId}...`);
|
|
77
|
+
await execFileAsync('git', ['clone', mirrorPath, workspacePath], {
|
|
78
|
+
timeout: GIT_TIMEOUT_MS,
|
|
79
|
+
});
|
|
80
|
+
// Validate cloneUrl — only allow HTTPS GitHub URLs
|
|
81
|
+
if (!/^https:\/\/github\.com\/[\w.-]+\/[\w.-]+(?:\.git)?$/.test(cloneUrl)) {
|
|
82
|
+
throw new Error(`Invalid clone URL: ${cloneUrl}`);
|
|
83
|
+
}
|
|
84
|
+
// Validate branch name — only safe characters
|
|
85
|
+
if (!/^[a-zA-Z0-9/_.-]+$/.test(branch)) {
|
|
86
|
+
throw new Error(`Invalid branch name: ${branch}`);
|
|
87
|
+
}
|
|
88
|
+
// Set up remote to point to the real repo for pushes
|
|
89
|
+
await execFileAsync('git', ['remote', 'set-url', 'origin', cloneUrl], {
|
|
90
|
+
cwd: workspacePath,
|
|
91
|
+
timeout: GIT_TIMEOUT_MS,
|
|
92
|
+
});
|
|
93
|
+
// Fetch the specific branch
|
|
94
|
+
await execFileAsync('git', ['fetch', 'origin', `+refs/heads/${branch}:refs/remotes/origin/${branch}`], { cwd: workspacePath, timeout: GIT_TIMEOUT_MS });
|
|
95
|
+
// Check out the branch (not detached HEAD) so Claude can commit and push fixes
|
|
96
|
+
console.log(`[webhook-workspace] Checking out branch ${branch}`);
|
|
97
|
+
await execFileAsync('git', ['checkout', '-B', branch, `origin/${branch}`], {
|
|
98
|
+
cwd: workspacePath,
|
|
99
|
+
timeout: GIT_TIMEOUT_MS,
|
|
100
|
+
});
|
|
101
|
+
// Pin to the exact commit that triggered the failure, so Claude works on the
|
|
102
|
+
// right code even if the branch has advanced since the webhook was sent.
|
|
103
|
+
console.log(`[webhook-workspace] Pinning to commit ${headSha.slice(0, 7)}`);
|
|
104
|
+
await execFileAsync('git', ['reset', '--hard', headSha], {
|
|
105
|
+
cwd: workspacePath,
|
|
106
|
+
timeout: GIT_TIMEOUT_MS,
|
|
107
|
+
});
|
|
108
|
+
// Set git author for webhook commits
|
|
109
|
+
await execFileAsync('git', ['config', 'user.name', 'Claude (Webhook)'], {
|
|
110
|
+
cwd: workspacePath,
|
|
111
|
+
timeout: GIT_TIMEOUT_MS,
|
|
112
|
+
});
|
|
113
|
+
await execFileAsync('git', ['config', 'user.email', 'claude-webhook@codekin.local'], {
|
|
114
|
+
cwd: workspacePath,
|
|
115
|
+
timeout: GIT_TIMEOUT_MS,
|
|
116
|
+
});
|
|
117
|
+
// Ensure gh credential helper is available for push
|
|
118
|
+
await execFileAsync('git', ['config', 'credential.helper', '!/usr/bin/gh auth git-credential'], {
|
|
119
|
+
cwd: workspacePath,
|
|
120
|
+
timeout: GIT_TIMEOUT_MS,
|
|
121
|
+
});
|
|
122
|
+
setupComplete = true;
|
|
123
|
+
return workspacePath;
|
|
76
124
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
125
|
+
finally {
|
|
126
|
+
// Clean up partial workspace on setup failure to prevent disk exhaustion
|
|
127
|
+
// and exposure of cloned source code from private repositories.
|
|
128
|
+
if (!setupComplete && existsSync(workspacePath)) {
|
|
129
|
+
try {
|
|
130
|
+
rmSync(workspacePath, { recursive: true, force: true });
|
|
131
|
+
console.warn(`[webhook-workspace] Cleaned up partial workspace for session ${sessionId} after setup failure`);
|
|
132
|
+
}
|
|
133
|
+
catch (cleanupErr) {
|
|
134
|
+
console.warn(`[webhook-workspace] Failed to clean up partial workspace ${workspacePath}:`, cleanupErr);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
80
137
|
}
|
|
81
|
-
// Set up remote to point to the real repo for pushes
|
|
82
|
-
await execFileAsync('git', ['remote', 'set-url', 'origin', cloneUrl], {
|
|
83
|
-
cwd: workspacePath,
|
|
84
|
-
timeout: GIT_TIMEOUT_MS,
|
|
85
|
-
});
|
|
86
|
-
// Fetch the specific branch
|
|
87
|
-
await execFileAsync('git', ['fetch', 'origin', `+refs/heads/${branch}:refs/remotes/origin/${branch}`], { cwd: workspacePath, timeout: GIT_TIMEOUT_MS });
|
|
88
|
-
// Check out the branch (not detached HEAD) so Claude can commit and push fixes
|
|
89
|
-
console.log(`[webhook-workspace] Checking out branch ${branch}`);
|
|
90
|
-
await execFileAsync('git', ['checkout', '-B', branch, `origin/${branch}`], {
|
|
91
|
-
cwd: workspacePath,
|
|
92
|
-
timeout: GIT_TIMEOUT_MS,
|
|
93
|
-
});
|
|
94
|
-
// Pin to the exact commit that triggered the failure, so Claude works on the
|
|
95
|
-
// right code even if the branch has advanced since the webhook was sent.
|
|
96
|
-
console.log(`[webhook-workspace] Pinning to commit ${headSha.slice(0, 7)}`);
|
|
97
|
-
await execFileAsync('git', ['reset', '--hard', headSha], {
|
|
98
|
-
cwd: workspacePath,
|
|
99
|
-
timeout: GIT_TIMEOUT_MS,
|
|
100
|
-
});
|
|
101
|
-
// Set git author for webhook commits
|
|
102
|
-
await execFileAsync('git', ['config', 'user.name', 'Claude (Webhook)'], {
|
|
103
|
-
cwd: workspacePath,
|
|
104
|
-
timeout: GIT_TIMEOUT_MS,
|
|
105
|
-
});
|
|
106
|
-
await execFileAsync('git', ['config', 'user.email', 'claude-webhook@codekin.local'], {
|
|
107
|
-
cwd: workspacePath,
|
|
108
|
-
timeout: GIT_TIMEOUT_MS,
|
|
109
|
-
});
|
|
110
|
-
// Ensure gh credential helper is available for push
|
|
111
|
-
await execFileAsync('git', ['config', 'credential.helper', '!/usr/bin/gh auth git-credential'], {
|
|
112
|
-
cwd: workspacePath,
|
|
113
|
-
timeout: GIT_TIMEOUT_MS,
|
|
114
|
-
});
|
|
115
|
-
return workspacePath;
|
|
116
138
|
}
|
|
117
139
|
/**
|
|
118
140
|
* Remove a workspace directory when a session closes.
|
|
141
|
+
*
|
|
142
|
+
* @param sessionId - Session ID whose workspace should be cleaned up.
|
|
119
143
|
*/
|
|
120
144
|
export function cleanupWorkspace(sessionId) {
|
|
121
145
|
const workspacePath = join(WORKSPACES_DIR, sessionId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-workspace.js","sourceRoot":"","sources":["../webhook-workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAEhC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;AACzC,MAAM,cAAc,GAAG,OAAO,CAAA;AAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAA;AAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;AACzC,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AAEnD,iFAAiF;AACjF,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAA;AAEtD;;;;;;GAMG;AACH,KAAK,UAAU,gBAAgB,CAAC,IAAY;IAC1C,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QACtD,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IACF,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC9B,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAY;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,MAAM,CAAC,CAAA;IAEjD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,oBAAoB;QACpB,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE;gBACxD,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,cAAc;aACxB,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,mDAAmD,IAAI,GAAG,EAAE,GAAG,CAAC,CAAA;YAC7E,0DAA0D;QAC5D,CAAC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,qBAAqB;IACrB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACrD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEzC,aAAa;IACb,OAAO,CAAC,GAAG,CAAC,gDAAgD,IAAI,KAAK,CAAC,CAAA;IACtE,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;QAC7E,OAAO,EAAE,cAAc;KACxB,CAAC,CAAA;IAEF,OAAO,UAAU,CAAA;AACnB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"webhook-workspace.js","sourceRoot":"","sources":["../webhook-workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,8 @@ export interface ReviewRepoConfig {
|
|
|
13
13
|
/** Workflow kind to run. Defaults to 'code-review.daily'. */
|
|
14
14
|
kind?: string;
|
|
15
15
|
customPrompt?: string;
|
|
16
|
+
/** Claude model to use for this workflow (e.g. 'claude-sonnet-4-6'). Omit for system default. */
|
|
17
|
+
model?: string;
|
|
16
18
|
}
|
|
17
19
|
export interface WorkflowConfig {
|
|
18
20
|
reviewRepos: ReviewRepoConfig[];
|
|
@@ -31,7 +31,7 @@ export function saveWorkflowConfig(config) {
|
|
|
31
31
|
if (!existsSync(CONFIG_DIR)) {
|
|
32
32
|
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
33
33
|
}
|
|
34
|
-
writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), 'utf-8');
|
|
34
|
+
writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), { encoding: 'utf-8', mode: 0o600 });
|
|
35
35
|
}
|
|
36
36
|
// ---------------------------------------------------------------------------
|
|
37
37
|
// CRUD helpers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-config.js","sourceRoot":"","sources":["../workflow-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"workflow-config.js","sourceRoot":"","sources":["../workflow-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* outputDir: .codekin/reports/code-review
|
|
21
21
|
* filenameSuffix: _code-review-daily.md
|
|
22
22
|
* commitMessage: chore: code review
|
|
23
|
+
* model: claude-sonnet-4-6 # optional — defaults to system default
|
|
23
24
|
* ---
|
|
24
25
|
* You are performing a daily automated code review...
|
|
25
26
|
*
|
|
@@ -41,6 +42,7 @@ export interface WorkflowDef {
|
|
|
41
42
|
outputDir: string;
|
|
42
43
|
filenameSuffix: string;
|
|
43
44
|
commitMessage: string;
|
|
45
|
+
model?: string;
|
|
44
46
|
prompt: string;
|
|
45
47
|
}
|
|
46
48
|
/**
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* outputDir: .codekin/reports/code-review
|
|
21
21
|
* filenameSuffix: _code-review-daily.md
|
|
22
22
|
* commitMessage: chore: code review
|
|
23
|
+
* model: claude-sonnet-4-6 # optional — defaults to system default
|
|
23
24
|
* ---
|
|
24
25
|
* You are performing a daily automated code review...
|
|
25
26
|
*
|
|
@@ -27,9 +28,9 @@
|
|
|
27
28
|
* Files whose `kind` matches a built-in override that built-in's prompt.
|
|
28
29
|
* Files with a new `kind` register as standalone workflows for that repo.
|
|
29
30
|
*/
|
|
30
|
-
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'fs';
|
|
31
|
-
import {
|
|
32
|
-
import { dirname, join,
|
|
31
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, writeFileSync } from 'fs';
|
|
32
|
+
import { execFileSync } from 'child_process';
|
|
33
|
+
import { dirname, join, sep } from 'path';
|
|
33
34
|
import { REPOS_ROOT } from './config.js';
|
|
34
35
|
import { fileURLToPath } from 'url';
|
|
35
36
|
// ---------------------------------------------------------------------------
|
|
@@ -61,6 +62,7 @@ function parseMdWorkflow(content, sourcePath) {
|
|
|
61
62
|
outputDir: meta.outputDir,
|
|
62
63
|
filenameSuffix: meta.filenameSuffix,
|
|
63
64
|
commitMessage: meta.commitMessage,
|
|
65
|
+
model: meta.model,
|
|
64
66
|
prompt,
|
|
65
67
|
};
|
|
66
68
|
}
|
|
@@ -158,15 +160,15 @@ function registerWorkflow(engine, sessions, def) {
|
|
|
158
160
|
const repoPath = input.repoPath;
|
|
159
161
|
if (!repoPath)
|
|
160
162
|
throw new Error('Missing repoPath in workflow input');
|
|
161
|
-
|
|
162
|
-
|
|
163
|
+
if (!existsSync(repoPath))
|
|
164
|
+
throw new Error(`Repository path does not exist: ${repoPath}`);
|
|
165
|
+
const resolvedPath = realpathSync(repoPath);
|
|
166
|
+
if (!resolvedPath.startsWith(REPOS_ROOT + sep)) {
|
|
163
167
|
throw new Error(`Repository path ${resolvedPath} is outside REPOS_ROOT`);
|
|
164
168
|
}
|
|
165
|
-
if (!existsSync(resolvedPath))
|
|
166
|
-
throw new Error(`Repository path does not exist: ${resolvedPath}`);
|
|
167
169
|
try {
|
|
168
|
-
const branch =
|
|
169
|
-
const lastCommit =
|
|
170
|
+
const branch = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd: repoPath, timeout: 5000 }).toString().trim();
|
|
171
|
+
const lastCommit = execFileSync('git', ['log', '-1', '--oneline'], { cwd: repoPath, timeout: 5000 }).toString().trim();
|
|
170
172
|
const sinceTimestamp = input.sinceTimestamp;
|
|
171
173
|
if (sinceTimestamp) {
|
|
172
174
|
const newCommits = execFileSync('git', ['log', `--since=${sinceTimestamp}`, '--oneline'], { cwd: repoPath, timeout: 5000 }).toString().trim();
|
|
@@ -191,9 +193,11 @@ function registerWorkflow(engine, sessions, def) {
|
|
|
191
193
|
handler: async (input, ctx) => {
|
|
192
194
|
const repoPath = input.repoPath;
|
|
193
195
|
const repoName = input.repoName || repoPath.split('/').pop() || 'unknown';
|
|
196
|
+
const model = input.model || def.model;
|
|
194
197
|
const session = sessions.create(`${def.sessionPrefix}:${repoName}`, repoPath, {
|
|
195
198
|
source: 'workflow',
|
|
196
199
|
groupDir: repoPath,
|
|
200
|
+
model,
|
|
197
201
|
});
|
|
198
202
|
console.log(`[workflow:${def.kind}] Created session ${session.id} for ${repoName} (run ${ctx.runId})`);
|
|
199
203
|
return { sessionId: session.id, repoPath, repoName, branch: input.branch, lastCommit: input.lastCommit };
|