windmill-labs/windmill · error
No pipeline editor is open. Pipeline tools only work on a /p
Error message
No pipeline editor is open. Pipeline tools only work on a /pipeline/<folder> page in edit mode.
What it means
The Windmill AI chat pipeline tools operate on a live pipeline editor instance. The manager injects that instance into the tool helpers only when a /pipeline/<folder> page is open in edit mode; when it is absent, requirePipeline throws this error instead of letting the tool run against nothing.
Source
Thrown at frontend/src/lib/components/copilot/chat/pipeline/core.ts:82
}) => Promise<{ path: string; detectedReads: string[]; detectedWrites: string[] }>
/** Replace an existing node's body, applied as an unsaved draft. Returns the
* re-inferred asset lineage (URIs) so the caller sees the effect of the edit. */
editNode: (
path: string,
content: string
) => Promise<{ detectedReads: string[]; detectedWrites: string[] }>
/** Discard the unsaved draft at a path (undo a build_pipeline_node). */
removeProposedNode: (path: string) => Promise<void>
/** Preview-run a node (draft body preferred). Returns the started job id. */
testNode: (path: string, args?: Record<string, any>) => Promise<string | undefined>
}
/** Helper bag the pipeline tools receive from the manager in global mode. */
export type PipelineToolHelpers = { pipeline?: PipelineAIChatHelpers }
function requirePipeline(helpers: PipelineToolHelpers): PipelineAIChatHelpers {
if (!helpers?.pipeline) {
throw new Error(
'No pipeline editor is open. Pipeline tools only work on a /pipeline/<folder> page in edit mode.'
)
}
return helpers.pipeline
}
const scriptLangSchema = z.enum($ScriptLang.enum)
const outputKindSchema = z
.enum(['none', 'datatable', 'ducklake', 'materialize', 's3_parquet', 's3_object'])
.describe(
'Kind of output asset this node materializes, used to seed the output edge on the canvas before the body is parsed: "materialize"/"ducklake" → a DuckLake table, "datatable" → a Postgres data table, "s3_parquet"/"s3_object" → an S3 file, "none" → side-effect only. Defaults to none.'
)
// ----------------------------------------------------------------------------
// Read tools
// ----------------------------------------------------------------------------
View on GitHub (pinned to e474e8803c)
Solutions
- Open the target pipeline at /pipeline/<folder> and switch it into edit mode before invoking pipeline tools
- Confirm the chat session is connected to the open editor (helpers.pipeline is registered by the editor component on mount)
- Reload the pipeline page if the editor is open but helpers were not injected (stale frontend state)
- Route the request to a chat session scoped to the pipeline editor instead of a global chat
Example fix
// before (global chat, no editor)
await chat.run('test the transform node') // -> throws
// after
// open /pipeline/my-folder in edit mode, then use that page's chat
await chat.run('test the transform node') Defensive patterns
Strategy: validation
Validate before calling
if (!helpers?.pipeline) {
// route the user to open /pipeline/<folder> in edit mode first
return
}
// safe to call pipeline tools Type guard
function hasPipeline(helpers) {
return typeof helpers === 'object' && helpers !== null && 'pipeline' in helpers && helpers.pipeline != null
} Prevention
- Only invoke pipeline tools from a chat attached to a pipeline editor in edit mode
- Check helpers.pipeline presence before dispatching any pipeline tool call
- Prompt users to open the pipeline editor when their request references pipeline operations
When it happens
Trigger: Any pipeline tool (test node, edit pipeline, etc.) invoked while helpers.pipeline is undefined — i.e. the chat is in global/session mode but the user is not on a pipeline editor page in edit mode, or the editor failed to register its helpers.
Common situations: Developer asks the copilot to modify or test a pipeline from another page (script editor, home, flows list); the pipeline tab is open in run/view mode rather than edit mode; the editor component has not mounted its helpers yet when the tool fires.
Related errors
- No script code available to edit. Please ensure you have a s
- No flow available to test step from. Please ensure you have
- Could not start a run for node '${path}'.
- Missing context for draft fetch
- Timed out after ${Math.round(CASCADE_JOB_TIMEOUT_MS / 60000)
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/246f760a6282fa5c.
Report an issue: GitHub.