feat: add host-driven GitHub Actions CI watcher (Level 3)
Replace LLM-per-tick polling with direct `gh api` calls for GitHub Actions watchers. New `ci_provider` discriminator column routes tasks to either the host-driven path (zero LLM tokens) or the existing generic LLM path. GitHub watchers poll at 15s intervals (min 10s) via `checkGitHubActionsRun()` in the scheduler, with completion messages sent directly to chat on terminal state. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,17 +1,34 @@
|
||||
export const DEFAULT_WATCH_CI_INTERVAL_SECONDS = 60;
|
||||
export const MIN_WATCH_CI_INTERVAL_SECONDS = 30;
|
||||
export const DEFAULT_GITHUB_WATCH_CI_INTERVAL_SECONDS = 15;
|
||||
export const MIN_GITHUB_WATCH_CI_INTERVAL_SECONDS = 10;
|
||||
export const MAX_WATCH_CI_INTERVAL_SECONDS = 3600;
|
||||
export const DEFAULT_WATCH_CI_CONTEXT_MODE = 'isolated';
|
||||
|
||||
export interface NormalizeWatchCiIntervalOptions {
|
||||
ciProvider?: 'github';
|
||||
}
|
||||
|
||||
export interface BuildCiWatchPromptArgs {
|
||||
taskId: string;
|
||||
target: string;
|
||||
checkInstructions: string;
|
||||
}
|
||||
|
||||
export function normalizeWatchCiIntervalSeconds(seconds?: number): number {
|
||||
export function normalizeWatchCiIntervalSeconds(
|
||||
seconds?: number,
|
||||
options?: NormalizeWatchCiIntervalOptions,
|
||||
): number {
|
||||
const isGitHub = options?.ciProvider === 'github';
|
||||
const defaultSeconds = isGitHub
|
||||
? DEFAULT_GITHUB_WATCH_CI_INTERVAL_SECONDS
|
||||
: DEFAULT_WATCH_CI_INTERVAL_SECONDS;
|
||||
const minSeconds = isGitHub
|
||||
? MIN_GITHUB_WATCH_CI_INTERVAL_SECONDS
|
||||
: MIN_WATCH_CI_INTERVAL_SECONDS;
|
||||
|
||||
if (seconds === undefined) {
|
||||
return DEFAULT_WATCH_CI_INTERVAL_SECONDS;
|
||||
return defaultSeconds;
|
||||
}
|
||||
|
||||
if (!Number.isInteger(seconds)) {
|
||||
@@ -19,11 +36,11 @@ export function normalizeWatchCiIntervalSeconds(seconds?: number): number {
|
||||
}
|
||||
|
||||
if (
|
||||
seconds < MIN_WATCH_CI_INTERVAL_SECONDS ||
|
||||
seconds < minSeconds ||
|
||||
seconds > MAX_WATCH_CI_INTERVAL_SECONDS
|
||||
) {
|
||||
throw new Error(
|
||||
`poll_interval_seconds must be between ${MIN_WATCH_CI_INTERVAL_SECONDS} and ${MAX_WATCH_CI_INTERVAL_SECONDS}.`,
|
||||
`poll_interval_seconds must be between ${minSeconds} and ${MAX_WATCH_CI_INTERVAL_SECONDS}.`,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user