@flower-f/afk-pipelines-official
v0.5.1
Published
Built-in workflow pipelines for afk-dev.
Maintainers
Readme
@flower-f/afk-pipelines-official-official
Official built-in workflow pipelines for afk-dev.
Pipelines
feedback-loop— iterative implement → verify → decide → apply loop.stage-sequence— ordered stage execution with diff/check propagation.
Usage
import { builtInWorkflowPipelines } from "@flower-f/afk-pipelines-official";
import { createWorkflowPipelineRegistry } from "@flower-f/afk-core";
const registry = createWorkflowPipelineRegistry(builtInWorkflowPipelines);This package is used by @flower-f/afk-node to assemble the default pipeline registry.
Custom pipelines
WorkflowPipeline is the public extension seam for custom workflow execution. A pipeline implementation owns its workflow contract: stage requirements, pipeline option validation, run behavior, progress events, metrics, and artifacts. Callers pass pipeline.* values generically; the selected pipeline owns their meaning.
import {
WorkflowPipeline,
createWorkflowPipelineRegistry,
type WorkflowPipelineValidationInput,
type WorkflowRunInput,
type WorkflowRunResult,
type WorkflowRuntimeContext,
} from "@flower-f/afk-core";
import { builtInWorkflowPipelines } from "@flower-f/afk-pipelines-official";
import { runAfkWorkflow, runDoctor } from "@flower-f/afk-node";
class DocsGeneratorPipeline extends WorkflowPipeline {
readonly name = "docs-generator";
override validate({ workflow }: WorkflowPipelineValidationInput): void {
if (!workflow.stages.draft) {
throw new Error(`Workflow '${workflow.name}' must define a draft stage.`);
}
}
override async run(
input: WorkflowRunInput,
_runtimes: WorkflowRuntimeContext,
): Promise<WorkflowRunResult> {
const startedAt = new Date().toISOString();
const completedAt = new Date().toISOString();
return {
pipeline: this.name,
task: input.task,
startedAt,
completedAt,
stopReason: "completed",
sessions: {},
metrics: [],
artifacts: [{ key: "report", kind: "report", filename: "report.json", format: "json" }],
buildArtifacts: () => [
{
key: "report",
kind: "report",
filename: "report.json",
format: "json",
content: { task: input.task },
},
],
};
}
}
const workflowPipelineRegistry = createWorkflowPipelineRegistry([
...builtInWorkflowPipelines,
new DocsGeneratorPipeline(),
]);
await runDoctor({ workflowPipelineRegistry });
await runAfkWorkflow({ task, overrides, workflowPipelineRegistry });The CLI starts with the built-in registry and extends it with pipelines declared by enabled plugins. Programmatic Node callers can also inject a registry into runDoctor and runAfkWorkflow; plugin-declared pipelines are merged into that same registry before workflow selection, doctor validation, and execution.
Stage-sequence prompt variables
stage-sequence stage prompts can use {{task}}, {{stageName}}, {{stageLabel}}, {{diff}}, {{checksJson}}, {{previousStagesJson}}, {{previousOutputs}}, {{sharedStateJson}}, and {{contextJson}}. A stage can pass state to later stages by outputting a JSON object in a fenced afk-shared-state block. The same variable list is exported as STAGE_SEQUENCE_PROMPT_VARIABLES.
See examples/custom-pipeline-plugin for a minimal plugin-provided pipeline.
