Lewati ke konten utama
Versi: v0.0.80

v0.0.59 — Recipe I/O contract + agentic chat + BI interop

Released: 2026-05-07. Fourteen commits across four themes.

Recipe I/O contract (Dataiku-style)

flow_recipes now refuses to persist with empty inputs or empty outputs (orphan nodes). Standalone AI utility recipes (embed, agent, rag_search) bind to published assets rather than the dataset DAG and remain exempt.

A new services/recipe_contract.py validator is wired into flow_codegen (save-recipe-steps, python-recipe, notebook-recipe, ai-transform), flow_ai (ai-recipes), dbt_ide (auto-sets output_datasets=[name]), and notebooks (to-recipe now requires inputs[]). A backstop CHECK constraint lands in flow_recipes via migration 2026-05-07_add_recipe_io_contract.sql; the migration deletes pre-existing orphans before VALIDATE.

Dashboard chat — Tier A/B/C

Tier A — action-first system prompt

The v0.0.58 prompt taught the LLM that "tidy up the dashboard" maps to INSIGHTS (text suggestions) instead of SET_LAYOUT (a mutation). Reproduced live: user typed "can u tidy up?" and got a generic prose response — no mutation, no version chip. The prompt is rewritten to:

  • Lead with Default behavior: ACT, don't talk.
  • List mutation actions first; ANSWER and INSIGHTS last with "use sparingly" guidance.
  • Add a Triggers line under each action enumerating natural-language patterns that should fire it. SET_LAYOUT explicitly catches "tidy up / clean up / organize / rearrange".
  • Tighten INSIGHTS to "ONLY when user EXPLICITLY asks for analysis / observations / takeaways / recommendations".
  • Allow clarifying questions via the existing ANSWER schema ({"action":"answer","message":"<question>?"}) — no new action type.

Trigger phrases and worked examples are tenant-agnostic (no customer or vertical-specific terms) — Honeyframe ships to multiple verticals.

  • Project context in prompt. list_project_assets() + format_project_assets_block() pipe up to 50 of the project's datasets / dashboards / data_apis / app_pages / agents into the system prompt. Cross-org/cross-project leak protection: every query filters by both project_id and org_id.
  • Reasoning expander. Every action's JSON response may carry an optional top-level reasoning string. The frontend renders it as a collapsed <details> with summary Reasoning — Figma-Make-style.
  • Artifact card. A sticky card at the top of the chat panel surfaces the dashboard as a versioned citizen of the conversation — Figma-Make's "file card" equivalent. Shows the title + latest revision number; clicks scroll the canvas to the top.
  • @-mention autocomplete. New AssetMentionInput component with GET /api/projects/{id}/assets/search?q=…&limit=20. Keyboard-first nav: ArrowUp/Down highlight, Enter/Tab select, Esc cancels. The chat handler re-validates each mention against list_project_assets (defense-in-depth) and surfaces only authorized ones to the LLM. Unauthorized citations drop silently.
  • Consulted-assets provenance + worked-with footer. A new consulted_assets JSONB column on dashboard_chat_messages aggregates three provenance sources — resolved mentions, SQL inference, LLM self-reported — deduped on (asset_type, asset_id). The chat panel renders a "Worked with N items" footer with AssetCard pills below each assistant turn. The same column powers compliance audit queries ("which assistant turns ever read customer_pii?").

Tier C — agentic multi-step tool loop

An opt-in multi-step agent loop. With Agent mode enabled in the chat panel, the LLM can call read-only tools (search_assets, get_dataset_schema, run_sql_preview) before committing to a final action. Single-shot remains the default — existing clients see no behavior change.

The loop primitive lives in services/agent_runtime.py and is domain-agnostic — Cobuild, the dbt assistant, and the WhatsApp/Twilio agents adopt the same loop without copy-paste; a provider swap (OpenAI ↔ Anthropic ↔ OpenRouter) is a single-file change.

Safety envelope: iteration cap (10), timeout (60 s), validate_sql gate, 20-row clamp on previews, ACL-checked via list_project_assets, oversized results truncated. An Agent trace — N steps expander on assistant turns shows tool name + termination reason + elapsed.

BI interop

DirectionEndpoint / buttonNotes
Honeyframe → SVGGET /api/dashboards/{id}/export-svg + Export menu entryLabeled placeholder rects in the 24-col grid, multi-page stacking. No live chart render — designers redraw in their tool.
Metabase → HoneyframePOST /api/dashboards/import-from-metabase + list-page modalPulls a Metabase dashboard + dashcards via /api/card/:id, scales 18-col → 24-col grid. Lossy: native (raw-SQL) questions carry their query; MBQL questions land as [Skipped] placeholder text cards naming what was lost.
Figma Make → HoneyframePOST /api/dashboards/import-from-figma-make + list-page modalHeuristic JSX parser turns a Figma Make export into a Honeyframe dashboard skeleton with empty SQL. Best-effort — Figma Make has no concept of queries. Skipped-blocks count is surfaced.

Embed via existing public-link URLs (/public/dashboards/{id}?token=…) works in Figma Make / Notion / Confluence iframes — no new infra.

The dashboards list-page Import button is now a dropdown with three entries: JSON file, Metabase, Figma Make. Editor-gated.