d3816a29fa
- Add DI container (src/services/) with AgentExecutionService, ConfigLoaderService, and ExploitationCheckerService — pure domain logic with no Temporal dependencies - Introduce Result<T, E> type and ErrorCode enum for code-based error classification in classifyErrorForTemporal, replacing scattered string matching - Consolidate billing/spending cap detection into utils/billing-detection.ts with shared pattern lists across message-handlers, claude-executor, and error-handling - Extract LogStream abstraction for append-only logging with backpressure, used by both AgentLogger and WorkflowLogger - Simplify activities.ts from inline lifecycle logic to thin wrappers delegating to services, with heartbeat and error classification - Expand config-parser with human-readable AJV errors, security validation, and rule type-specific checks
69 lines
1.9 KiB
TypeScript
69 lines
1.9 KiB
TypeScript
import { defineQuery } from '@temporalio/workflow';
|
|
|
|
// Re-export AgentMetrics from central types location
|
|
export type { AgentMetrics } from '../types/metrics.js';
|
|
import type { AgentMetrics } from '../types/metrics.js';
|
|
|
|
// === Types ===
|
|
|
|
export interface PipelineInput {
|
|
webUrl: string;
|
|
repoPath: string;
|
|
configPath?: string;
|
|
outputPath?: string;
|
|
pipelineTestingMode?: boolean;
|
|
workflowId?: string; // Added by client, used for audit correlation
|
|
sessionId?: string; // Workspace directory name (distinct from workflowId for named workspaces)
|
|
resumeFromWorkspace?: string; // Workspace name to resume from
|
|
terminatedWorkflows?: string[]; // Workflows terminated during resume
|
|
}
|
|
|
|
export interface ResumeState {
|
|
workspaceName: string;
|
|
originalUrl: string;
|
|
completedAgents: string[];
|
|
checkpointHash: string;
|
|
originalWorkflowId: string;
|
|
}
|
|
|
|
export interface PipelineSummary {
|
|
totalCostUsd: number;
|
|
totalDurationMs: number; // Wall-clock time (end - start)
|
|
totalTurns: number;
|
|
agentCount: number;
|
|
}
|
|
|
|
export interface PipelineState {
|
|
status: 'running' | 'completed' | 'failed';
|
|
currentPhase: string | null;
|
|
currentAgent: string | null;
|
|
completedAgents: string[];
|
|
failedAgent: string | null;
|
|
error: string | null;
|
|
startTime: number;
|
|
agentMetrics: Record<string, AgentMetrics>;
|
|
summary: PipelineSummary | null;
|
|
}
|
|
|
|
// Extended state returned by getProgress query (includes computed fields)
|
|
export interface PipelineProgress extends PipelineState {
|
|
workflowId: string;
|
|
elapsedMs: number;
|
|
}
|
|
|
|
// Result from a single vuln→exploit pipeline
|
|
export interface VulnExploitPipelineResult {
|
|
vulnType: string;
|
|
vulnMetrics: AgentMetrics | null;
|
|
exploitMetrics: AgentMetrics | null;
|
|
exploitDecision: {
|
|
shouldExploit: boolean;
|
|
vulnerabilityCount: number;
|
|
} | null;
|
|
error: string | null;
|
|
}
|
|
|
|
// === Queries ===
|
|
|
|
export const getProgress = defineQuery<PipelineProgress>('getProgress');
|