/** * Workflow Capability Handler - GitHub Actions YAML Generation * * Generates GitHub Actions workflow files for CI/CD automation. * Supports multiple workflow types: CI, deployment, testing, release. * * @module strategies/cross-cutting/workflow-handler * @see {@link https://github.com/Anselmoo/mcp-ai-agent-guidelines/blob/development/plan-v0.13.x/specs/SPEC-001-output-strategy-layer.md SPEC-001} §5.2 */ import type { CrossCuttingArtifact } from "../output-strategy.js"; import { CrossCuttingCapability } from "../output-strategy.js"; import type { CapabilityContext, CapabilityHandler } from "./types.js"; /** * WorkflowCapabilityHandler generates GitHub Actions workflow YAML files. * * Detects workflow type from domain results and generates appropriate * workflow configurations for CI/CD automation. * * Workflow type detection follows a well-defined priority so callers can * intentionally influence which workflow is generated: * * 1. {@link metadata}.workflowType – If present and one of `"ci"`, `"deploy"`, * `"test"`, or `"release"`, it is used directly. * 2. Deployment fields – If the domain result contains deployment-related * hints (for example keys like `deploy`, `deployment`, or `environment`), * `"deploy"` is selected. * 3. Release fields – If the domain result contains release-related hints * (for example `release`, `version`, or `tag`), `"release"` is selected. * 4. Test fields – If the domain result is dominated by testing concerns * (for example `tests`, `coverage`, or `testing`), `"test"` is selected. * 5. Fallback – If none of the above apply, `"ci"` is used as a safe * default workflow type. * * This means that you can explicitly steer workflow generation by setting * `metadata.workflowType`: * * @example * ```ts * const handler = new WorkflowCapabilityHandler(); * const artifact = handler.generate({ * domainResult, * metadata: { * workflowType: "deploy", // forces deployment workflow * nodeVersion: "22", * }, * }); * // artifact.name => ".github/workflows/deploy.yml" * ``` * * If `metadata.workflowType` is provided but not one of the supported * workflow types, it is ignored and the handler falls back to inspecting * the domain result and finally to the `"ci"` default. * * @implements {CapabilityHandler} */ export declare class WorkflowCapabilityHandler implements CapabilityHandler { /** The capability this handler implements */ readonly capability = CrossCuttingCapability.WORKFLOW; /** * Generate a GitHub Actions workflow artifact. * * @param context - The context for artifact generation * @returns A workflow artifact with YAML content, or null if not applicable */ generate(context: CapabilityContext): CrossCuttingArtifact | null; /** * Check if this handler supports the given domain type. * * @param domainType - The domain type identifier * @returns True if workflows can be generated for this domain type */ supports(domainType: string): boolean; /** * Detect the workflow type from domain result and metadata. * * @param result - The domain result * @param metadata - Optional metadata hints * @returns The detected workflow type * @private */ private detectWorkflowType; /** * Type guard for workflow type validation. * * @param type - The type to check * @returns True if the type is a valid workflow type * @private */ private isValidWorkflowType; /** * Generate workflow YAML content based on type. * * @param type - The workflow type * @param metadata - Optional metadata for customization * @returns The workflow YAML content * @private */ private generateWorkflowYaml; /** * Generate CI workflow template. * * @param metadata - Optional metadata for customization * @returns CI workflow YAML * @private */ private generateCIWorkflow; /** * Generate deployment workflow template. * * @param metadata - Optional metadata for customization * @returns Deployment workflow YAML * @private */ private generateDeployWorkflow; /** * Generate test workflow template. * * @param metadata - Optional metadata for customization * @returns Test workflow YAML * @private */ private generateTestWorkflow; /** * Generate release workflow template. * * @param metadata - Optional metadata for customization * @returns Release workflow YAML * @private */ private generateReleaseWorkflow; } //# sourceMappingURL=workflow-handler.d.ts.map