Release v0.12.5
Release v0.12.5
This release adds code intelligence (completion, hover, diagnostics) to catalog notebooks, makes the generated/exported Python code cleaner through pipeline fusion, and adds connection validation that the AI planner and backend share. It also fixes group-by aggregations for expression-only functions and bundles the demo flows into packaged builds.
Notebook code intelligence (#550)
Catalog notebooks now have a Jedi/LSP bridge served by the kernel.
- Completion, hover, signature help, and diagnostics in notebook cells, exposed through new
/kernels/{id}/lsp/*endpoints that forward to the kernel's Jedi engine - Gated by a runtime feature flag (
FLOWFILE_LSP_ENABLED) with admin endpoints to toggle it live without a restart - When the bridge is disabled or unavailable, the endpoints return empty results and the editor falls back to client-side completions
- Default kernel image bumped to
0.4.0(kernel runtime API0.3.0) to match
Cleaner generated code (#549)
The code generator now collapses linear chains of single-use nodes into piped expressions, keeping named variables only where the graph branches or merges.
- Operation-based variable names at chain boundaries; generated names no longer collide with Python builtins or keywords
- Transparent nodes (a
selectwith nothing selected, UI-onlyexplore_datanodes) are remapped to their input instead of emitting dead code - Join emission fixes: no unnecessary parentheses around semi/anti joins, and joins are only wrapped when post-processing follows
- Broader codegen coverage for joins, transforms, DB/REST/catalog connectors, and user-defined custom nodes, with REST API credentials redacted in the output
- Cleaner
record_idoutput and node-id-based function names for custom Polars nodes
Connection validation for the AI planner (#551)
A single source of truth for source-only node types and connection rules, shared by the backend and the AI tool handlers.
- New
get_source_node_types()and a centralizedvalidate_connection()/ConnectionValidationError - The AI
connecthandler rejects wiring into a source node or creating a cycle at stage time, returning actionable reasons (target_is_source,would_create_cycle) so the planner can self-correct - AI docs, prompts, and error messages reference the current source-node list (now including
rest_api_reader), avoiding drift as new source nodes are added
Fixes & improvements
- Expression-only aggregations (
unique_counts,implode,explode,quantile) ingroup_by().agg()no longer fail with"Could not execute the function"— they fall back to thepolars_codepath, since these exist only as expression methods, not top-level Polars functions (#553) - Demo-catalog flow YAMLs are now bundled by PyInstaller, so demo seeding works in the packaged desktop app instead of failing on a missing-file lookup (#548)
Upgrade notes
- Notebook code intelligence requires the new kernel image
0.4.0(runtime API0.3.0); Docker users should pull the updated image. SetFLOWFILE_LSP_ENABLED=falseto disable the bridge — it degrades gracefully when off. - No database migrations in this release.
Full changelog: v0.12.4...v0.12.5