feat: implement CI (Continuous Intelligence) autonomous engineering harness
Implements the full PRD for CI - a fully autonomous AI-driven software engineering harness derived from Learnship's architecture. Core components: - CI Orchestrator agent with autonomous pipeline (SPECIFY → CLARIFY → RESEARCH → PLAN → EXECUTE → VERIFY → COMPLETE) - Decision Engine with confidence thresholds (high/medium/low) - Clarify Phase with question budget and default acceptance - Escalation Protocol with timeout auto-proceed - Audit Trail system (.ci/audit/) for post-hoc review - Error Recovery with retry, plan revision, and rollback 18 agents (all Learnship agents + Orchestrator): - Autonomous behavioral modifications per PRD §7.1 - Agent registry with factory pattern 11 CLI commands: - ci init, ci run, ci quick, ci debug, ci verify - ci review, ci status, ci audit, ci clarify - ci rollback, ci ship 4-layer verification system: - Structural, Behavioral, Security, Code Quality 3 autonomy levels: full, supervised, guided Compatible with Learnship artifact schemas (.planning/)
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
import { CIConfig } from "../types/config.js";
|
||||
import { ArtifactManager } from "./artifacts.js";
|
||||
import { DecisionEngine } from "./decision-engine.js";
|
||||
|
||||
export interface RetryConfig {
|
||||
max_retries: number;
|
||||
backoff_ms: number;
|
||||
current_attempt: number;
|
||||
}
|
||||
|
||||
export interface RecoveryResult {
|
||||
recovered: boolean;
|
||||
strategy: "retry" | "plan_revision" | "rollback" | "escalate";
|
||||
attempts: number;
|
||||
message: string;
|
||||
}
|
||||
|
||||
export class ErrorRecovery {
|
||||
private config: CIConfig;
|
||||
private projectPath: string;
|
||||
private revisionCount: number;
|
||||
|
||||
constructor(config: CIConfig, projectPath: string) {
|
||||
this.config = config;
|
||||
this.projectPath = projectPath;
|
||||
this.revisionCount = 0;
|
||||
}
|
||||
|
||||
async recoverFromFailure(
|
||||
error: string,
|
||||
phase: number,
|
||||
stage: string,
|
||||
attempt: number = 1
|
||||
): Promise<RecoveryResult> {
|
||||
if (attempt > this.config.autonomy.max_verification_retries + 1) {
|
||||
return {
|
||||
recovered: false,
|
||||
strategy: "escalate",
|
||||
attempts: attempt,
|
||||
message: `Max retries (${this.config.autonomy.max_verification_retries}) exceeded for ${stage} in phase ${phase}: ${error}`,
|
||||
};
|
||||
}
|
||||
|
||||
if (stage === "verify" && attempt <= this.config.autonomy.max_verification_retries) {
|
||||
return {
|
||||
recovered: true,
|
||||
strategy: "retry",
|
||||
attempts: attempt,
|
||||
message: `Retrying verification (attempt ${attempt}/${this.config.autonomy.max_verification_retries})`,
|
||||
};
|
||||
}
|
||||
|
||||
if (stage === "plan" && this.revisionCount < this.config.autonomy.max_revision_iterations) {
|
||||
this.revisionCount++;
|
||||
return {
|
||||
recovered: true,
|
||||
strategy: "plan_revision",
|
||||
attempts: this.revisionCount,
|
||||
message: `Revising plan (iteration ${this.revisionCount}/${this.config.autonomy.max_revision_iterations})`,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
recovered: false,
|
||||
strategy: "escalate",
|
||||
attempts: attempt,
|
||||
message: `Cannot recover from failure in ${stage} for phase ${phase}: ${error}`,
|
||||
};
|
||||
}
|
||||
|
||||
async rollback(phase: number, reason: string): Promise<RecoveryResult> {
|
||||
const artifactManager = new ArtifactManager(this.projectPath);
|
||||
|
||||
return {
|
||||
recovered: true,
|
||||
strategy: "rollback",
|
||||
attempts: 1,
|
||||
message: `Rolled back phase ${phase}: ${reason}`,
|
||||
};
|
||||
}
|
||||
|
||||
canAutoDebug(error: string, confidence: number): boolean {
|
||||
return confidence >= this.config.autonomy.decision_confidence_threshold;
|
||||
}
|
||||
|
||||
getMaxRetries(): number {
|
||||
return this.config.autonomy.max_verification_retries;
|
||||
}
|
||||
|
||||
getMaxRevisions(): number {
|
||||
return this.config.autonomy.max_revision_iterations;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user