jay-code
Version:
Streamlined AI CLI orchestration engine with mathematical rigor and enterprise-grade reliability
387 lines (343 loc) • 10.6 kB
text/typescript
export interface MaestroSpec {
name: string;
description: string;
version: string;
goals: string[];
workflow: WorkflowPhase[];
}
export interface WorkflowPhase {
step: string;
agent: string; // Name of the sub-agent
input?: string;
input_from?: string; // Reference to previous step's output
input_transform?: string;
output_format: string;
next_step_on_success?: string;
parallel_tasks?: Array<{ task: string; agent: string; input: string }>;
environment?: string;
on_failure?: string;
}
export interface TaskItem {
id: string;
description: string;
status: 'pending' | 'in-progress' | 'completed' | 'failed';
assignedAgent?: string;
dependencies?: string[];
priority: number;
metadata?: Record<string, any>;
}
export interface AgentProfile {
id: string;
name: string;
type: string;
capabilities: string[];
maxConcurrentTasks: number;
priority: number;
}
export interface SteeringContext {
domain: string;
guidelines: string;
constraints: string[];
examples?: string[];
}
export type WorkflowPhase =
| 'Requirements Clarification'
| 'Research & Design'
| 'Implementation Planning'
| 'Task Execution'
| 'Completed';
export interface MaestroWorkflowState {
featureName: string;
currentPhase: WorkflowPhase;
currentTaskIndex: number;
status: 'idle' | 'running' | 'paused' | 'completed' | 'failed';
lastActivity: Date;
history: Array<{ phase: WorkflowPhase; status: 'completed' | 'failed' | 'in-progress' | 'approved'; timestamp: Date; output?: any; error?: string }>;
// Add more state as needed, e.g., for human-in-the-loop gates
}
// ===== KIRO ENHANCEMENT TYPES =====
export interface KiroEnhancedSpec extends MaestroSpec {
livingDocumentation: LivingDocumentationConfig;
agentHooks: AgentHookConfig[];
consensusRequirements: ConsensusRequirements;
patternLearning: PatternLearningConfig;
enhancedMetadata: SpecMetadata;
}
export interface LivingDocumentationConfig {
enabled: boolean;
syncMode: 'bidirectional' | 'spec-to-code' | 'code-to-spec';
autoUpdateThreshold: number; // 0-1, how much change triggers auto-update
conflictResolution: 'manual' | 'spec-wins' | 'code-wins' | 'merge';
versionTracking: boolean;
changeDetectionGranularity: 'file' | 'function' | 'line';
realTimeSync: boolean;
watchPatterns: string[]; // File patterns to watch
excludePatterns: string[]; // File patterns to exclude
}
export interface AgentHookConfig {
type: 'file-change' | 'code-quality' | 'documentation' | 'testing' | 'deployment';
trigger: HookTrigger;
actions: HookAction[];
conditions: HookCondition[];
priority: number;
enabled: boolean;
agentTypes: string[]; // Which agent types should handle this hook
metadata: Record<string, any>;
}
export interface HookTrigger {
event: 'file-modified' | 'file-created' | 'file-deleted' | 'git-commit' | 'test-failed' | 'build-failed';
patterns: string[]; // File patterns or other patterns
debounceMs: number; // Debounce multiple triggers
batchingEnabled: boolean;
conditions?: string[]; // Additional trigger conditions
}
export interface HookAction {
type: 'spawn-agent' | 'update-spec' | 'run-tests' | 'generate-docs' | 'quality-check';
agentType: string;
parameters: Record<string, any>;
timeout: number;
retryCount: number;
background: boolean;
}
export interface HookCondition {
type: 'file-size' | 'file-age' | 'git-status' | 'test-status' | 'custom';
operator: 'eq' | 'ne' | 'gt' | 'lt' | 'contains' | 'matches';
value: any;
negate?: boolean;
}
export interface ConsensusRequirements {
enabled: boolean;
algorithm: 'simple-majority' | 'weighted-vote' | 'byzantine-fault-tolerant' | 'raft';
minimumAgents: number;
quorumPercentage: number; // 0-1, what percentage needed for consensus
timeoutMs: number;
retryCount: number;
validatorAgentTypes: string[];
consensusScope: 'design-phase' | 'implementation-phase' | 'all-phases';
conflictResolution: 'revote' | 'escalate' | 'fallback-to-human';
}
export interface PatternLearningConfig {
enabled: boolean;
learningMode: 'passive' | 'active' | 'hybrid';
dataCollection: {
specHistory: boolean;
designDecisions: boolean;
implementationOutcomes: boolean;
userFeedback: boolean;
};
modelType: 'rule-based' | 'ml-based' | 'hybrid';
adaptationThreshold: number; // How much data before adapting
confidenceThreshold: number; // Minimum confidence for suggestions
}
export interface SpecMetadata {
createdAt: Date;
lastModified: Date;
version: string;
contributors: string[];
reviewers: string[];
approvalStatus: 'draft' | 'under-review' | 'approved' | 'deprecated';
tags: string[];
relatedSpecs: string[];
implementationStatus: {
phase: string;
progress: number; // 0-1
quality: number; // 0-1
testCoverage: number; // 0-1
};
metrics: {
cycleTime: number; // ms from spec to implementation
defectRate: number;
changeFrequency: number;
stakeholderSatisfaction: number; // 0-1
};
}
// ===== ENHANCED WORKFLOW TYPES =====
export interface EnhancedWorkflowPhase extends WorkflowPhase {
hooks: AgentHookConfig[];
consensusRequired: boolean;
livingDocSync: boolean;
patternLearningEnabled: boolean;
qualityGates: QualityGate[];
parallelExecution: boolean;
backgroundMonitoring: boolean;
}
export interface QualityGate {
id: string;
name: string;
type: 'automated' | 'manual' | 'hybrid';
criteria: QualityCriteria[];
threshold: number; // 0-1
blocking: boolean; // Does failure block progression?
agentTypes: string[]; // Which agents can validate this gate
}
export interface QualityCriteria {
metric: string;
operator: 'eq' | 'ne' | 'gt' | 'lt' | 'gte' | 'lte';
value: number;
weight: number; // 0-1, importance of this criteria
source: 'automated-test' | 'code-analysis' | 'human-review' | 'consensus';
}
// ===== LIVING DOCUMENTATION TYPES =====
export interface LivingDocumentationState {
specVersion: string;
codeVersion: string;
lastSyncTimestamp: Date;
syncStatus: 'in-sync' | 'diverged' | 'syncing' | 'conflict';
changesSinceLastSync: DocumentationChange[];
conflicts: SyncConflict[];
automatedSyncEnabled: boolean;
}
export interface DocumentationChange {
id: string;
type: 'spec-change' | 'code-change';
file: string;
section?: string;
oldValue: string;
newValue: string;
timestamp: Date;
author: string;
confidence: number; // 0-1, how confident we are about this change
}
export interface SyncConflict {
id: string;
type: 'content-conflict' | 'structural-conflict' | 'semantic-conflict';
specSection: string;
codeSection: string;
description: string;
resolutionStrategy: 'manual' | 'spec-wins' | 'code-wins' | 'merge';
priority: 'low' | 'medium' | 'high';
createdAt: Date;
}
// ===== CONSENSUS SYSTEM TYPES =====
export interface ConsensusSession {
id: string;
topic: string;
participants: ConsensusParticipant[];
status: 'pending' | 'active' | 'completed' | 'failed' | 'timeout';
startedAt: Date;
completedAt?: Date;
result?: ConsensusResult;
rounds: ConsensusRound[];
metadata: Record<string, any>;
}
export interface ConsensusParticipant {
agentId: string;
agentType: string;
weight: number; // Voting weight based on expertise
reliability: number; // 0-1, historical reliability
expertise: Record<string, number>; // Domain expertise scores
availability: boolean;
}
export interface ConsensusRound {
round: number;
votes: ConsensusVote[];
result: 'consensus' | 'no-consensus' | 'timeout';
timestamp: Date;
convergenceMetric: number; // How close to consensus
}
export interface ConsensusVote {
agentId: string;
option: string;
confidence: number; // 0-1
reasoning: string;
timestamp: Date;
metadata?: Record<string, any>;
}
export interface ConsensusResult {
decision: string;
confidence: number; // 0-1
unanimity: boolean;
participationRate: number; // 0-1
qualityScore: number; // 0-1
dissents: ConsensusDissent[];
metadata: Record<string, any>;
}
export interface ConsensusDissent {
agentId: string;
reason: string;
alternativeProposal?: string;
severity: 'low' | 'medium' | 'high';
}
// ===== AGENT HOOK SYSTEM TYPES =====
export interface AgentHookEvent {
id: string;
type: string;
source: string;
timestamp: Date;
data: Record<string, any>;
processed: boolean;
processingResults?: HookProcessingResult[];
}
export interface HookProcessingResult {
hookId: string;
agentId: string;
status: 'success' | 'failed' | 'timeout';
result?: any;
error?: string;
processingTime: number; // ms
timestamp: Date;
}
// ===== PATTERN LEARNING TYPES =====
export interface PatternLearningData {
specificationPatterns: SpecPattern[];
designPatterns: DesignPattern[];
implementationPatterns: ImplementationPattern[];
outcomePatterns: OutcomePattern[];
}
export interface SpecPattern {
id: string;
domain: string;
pattern: string;
frequency: number;
successRate: number;
contexts: string[];
examples: string[];
}
export interface DesignPattern {
id: string;
architecture: string;
components: string[];
relationships: string[];
applicability: string[];
pros: string[];
cons: string[];
usage_frequency: number;
}
export interface ImplementationPattern {
id: string;
language: string;
framework: string;
pattern_code: string;
complexity: 'low' | 'medium' | 'high';
maintainability: number; // 0-1
performance: number; // 0-1
}
export interface OutcomePattern {
id: string;
inputs: Record<string, any>;
outputs: Record<string, any>;
quality: number; // 0-1
timeline: number; // actual time taken
stakeholder_satisfaction: number; // 0-1
lessons_learned: string[];
}
// ===== ENHANCED ORCHESTRATOR STATE =====
export interface KiroEnhancedWorkflowState extends MaestroWorkflowState {
livingDocState: LivingDocumentationState;
activeHooks: string[]; // Active hook IDs
consensusSessions: ConsensusSession[];
patternLearningData: PatternLearningData;
qualityMetrics: QualityMetrics;
backgroundAgents: string[]; // Background monitoring agents
enhancedMetadata: Record<string, any>;
}
export interface QualityMetrics {
codeQuality: number; // 0-1
documentationQuality: number; // 0-1
testCoverage: number; // 0-1
specCompleteness: number; // 0-1
implementationFidelity: number; // 0-1, how well code matches spec
consensusReliability: number; // 0-1
cycletime: number; // ms
defectDensity: number; // defects per KLOC
}