import type { WorkspaceConfig } from '../config/config-types.js'; import { type RdStandardGate } from './standards-diagnostic.js'; import { runStrategicStage, type RunStrategicInput } from './strategic-stage.js'; import { runTacticalStage, type RunTacticalInput } from './tactical-stage.js'; /** * Plan 3 — sub-stage entry points (strategic + tactical). * The existing `createRdSwarmPlan` / swarm-planner surface is unchanged; * these thin re-exports give callers a single-import path into the * strategic + tactical sub-stages. */ export declare const runStrategic: typeof runStrategicStage; export declare const runTactical: typeof runTacticalStage; export type { RunStrategicInput, RunTacticalInput }; export type RdSkill = 'rd'; export type RdWaveName = 'discovery' | 'planning' | 'implementation candidates' | 'unit-test execution' | 'quality gates' | 'reducer'; export type RdModelRole = 'strongest' | 'execution'; export type RdSwarmPlanRequest = { skill: RdSkill; /** * It is no longer used for filesystem routing (the session-axis * `getSessionDir` is the canonical authority), but it is retained * on the request type for trace correlation and to avoid sweeping * the 30+ test fixtures that pass it. */ sessionId: string; goal: string; maxWorkers: number; dryRun: true; swarmMode?: boolean; artifactWorkspacePath?: string; workspace?: WorkspaceConfig; requiresTechApproval?: boolean; executionModelId?: string; projectRoot?: string; /** Opt-in strict mode: hard-fail when project-local standards are missing. */ strictStandards?: boolean; }; export type RdTask = { taskId: string; wave: RdWaveName; workerKind: string; purpose: string; modelRole: RdModelRole; modelId: string; inputs: string[]; outputs: [string, ...string[]]; dependsOn: string[]; conflictGroup: string; targetArea: string; expectedEvidence: string; }; export type RdWave = { name: RdWaveName; taskIds: string[]; }; export type RdConflictGroup = { groupId: string; ownedPaths: string[]; parallelismPolicy: string; reason: string; }; export type RdPlanResult = { available: true; /** * It is no longer emitted in the planner envelope at runtime, but * retained on the result type for trace correlation and to avoid * breaking 30+ tests that assert against it. */ sessionId: string; goal: string; swarmMode: boolean; workerTarget: number; waves: RdWave[]; tasks: RdTask[]; conflictGroups: RdConflictGroup[]; artifactRoot: string; outputs: { taskGraph: string; waveManifests: string[]; workerBriefs: string[]; reducerReport: string; }; gateStatus: { techApprovalRequired: boolean; techStatus: string; skipReason?: string; /** Gate list (code-review / security / performance) reflecting standards availability. */ standardsGates?: ReadonlyArray; standardsDiagnostic?: string; /** When `--strict-standards` is on AND standards are missing, the stable error code. */ standardsErrorCode?: typeof import('./standards-diagnostic.js').EPEAKS_NO_STANDARDS; }; blockedReasons: string[]; nextActions: string[]; } | { available: false; behavior: 'preview' | 'blocked'; reason: string; swarmMode: boolean; workerTarget: number; waves: RdWave[]; tasks: RdTask[]; conflictGroups: RdConflictGroup[]; artifactRoot: string; outputs: { taskGraph: string; waveManifests: string[]; workerBriefs: string[]; reducerReport: string; }; gateStatus: { techApprovalRequired: boolean; techStatus: string; skipReason?: string; /** Gate list (code-review / security / performance) reflecting standards availability. */ standardsGates?: ReadonlyArray; standardsDiagnostic?: string; /** When `--strict-standards` is on AND standards are missing, the stable error code. */ standardsErrorCode?: typeof import('./standards-diagnostic.js').EPEAKS_NO_STANDARDS; }; blockedReasons: string[]; nextActions: string[]; }; export declare function createRdSwarmPlan(request: RdSwarmPlanRequest): RdPlanResult;