Skip to main content
Version: v0.1.7

v0.0.73 — Agent Hub, Agent Deployments, Scenarios Batch I

Released: 2026-05-16. Fourteen commits.

Three big tracks land together: Agent Hub (#9), Agent Deployments (Batch G), and Scenarios Batch I — the four-tab scenario detail page plus Reporters framework and three new step types.

Agent Hub (#9)

Slice 1 — Library endpoint + landing surface

GET /api/agents/library returns {enterprise, project, recent_conversations}. Enterprise = chat_agent assets with is_public=true (org-wide); project = scoped to the caller's current project. Both filter status != 'archived'. Recent conversations come from chat_sessions, capped via limit_conversations.

New AgentHubPage at /agent-hub: left rail with Recent conversations + Start new + Create new agent; main area shows two grouped sections of agent cards. Picking an agent navigates to /chat?agent=<key>; picking a conversation navigates to /chat?session=<id>. Sidebar gains an Agent Hub entry above Chat & SQL.

V2 — Sources / Activities / Downloads right rail

Closes the audit gap from slice 1 — agent answers were visible but not inspectable. Toggling Trace in the ChatPage header opens a 320px right rail with three tabs over the current session's tool executions:

  • Sources — retrieval-style spans (knowledge_search / dataset_lookup / sql_query / document_search / vector_search / rag_query).
  • Activities — every span in chronological order.
  • Downloads — spans that produced an artifact (document_generate / dataset_insert / dataset_update / file_export / report_generate).

Each span expands inline to show arguments, result preview, error, latency, tokens, cost. Reads from the existing /api/traces/sessions/{sid} endpoint — no new backend.

V2 — Quick access pins

Pinning a chat_agent surfaces it in the AgentHubPage left rail's new Quick access section above Recent conversations, and stars it in the main agent-card grid. Migration add_agent_pins.sql: composite PK (user_id, agent_id). POST /api/agents/{id}/pin is ON CONFLICT DO NOTHING (re-pinning is a no-op); DELETE is scoped to caller's user_id so users can't clear each other's pins. Cross-org returns 404 via _assert_agent_in_org probe.

Agent Deployments (Batch G)

New honeyframe.agent_deployments table captures every set_active_version call (from_versionto_version + deployed_by + change_note + ts). GET /api/publish/assets/{id}/deployments (most recent first, 50 limit) backs a Deploy history footer in AgentVersionPicker dropdown (top 5 entries, re-fetches on every flip).

Org-wide monitor view

GET /api/publish/agent-deployments returns one row per chat_agent asset with current/active version, latest deploy event, and 24h activity from agent_tool_executions (exec count, error count, total tokens). Powers a new admin-only AgentDeploymentsPage at /agent-deployments with a single-table view + error-rate color band (≥5% red, >0 amber). Sidebar entry added under the Agents group (admin-only — endpoint requires org.admin).

Agent versioning — VersionDiffDrawer

GET /api/publish/assets/{id}/versions/{a}/diff/{b} returns both configs plus a path-by-path diff (added / removed / changed) so the frontend stays pure rendering. A Diff button on each row in AgentVersionPicker opens VersionDiffDrawer side-by-side against the pinned active version (or latest).

The diff endpoint also returns theme_diff separately from diff; the drawer gains a Config/Theme tab toggle with per-tab change counts.

Scenarios Batch I — capability #21

Capability #21 from docs/dataiku-parity-roadmap.md. Four slices land together.

4-tab detail page

New ScenarioDetailPage with Settings / Steps / Last runs / History tabs at /projects/<slug>/scenarios/:scenarioId. List rows get an Open link. Nav group renamed Operate → Automation (EN + ID).

Reporters framework

New honeyframe.scenario_reporters table + rollback migration. services/reporter_dsl.py is a predicate evaluator (==, !=, >, <, &&, ||, parens, ${var}) + template interpolator — a strict subset of the DSS formula DSL. services/reporters/ package: mail, slack, webhook. fire_reporters wires into both scheduler.execute_scenario (cron) and the manual-run path; reporter failures never affect scenario outcome.

CRUD lives under routers/scenario_reporters.py (list / create / update / delete + test-send). Every endpoint enters via require_scenario_access; predicates are parse-checked at save time, not run time. ScenarioReportersSection.tsx mounts on the Settings tab with a per-kind editor (mail recipients / Slack webhook / generic HTTP) + Test button.

Two new step kinds + one new trigger

  • dbt_run — honeyframe-native (Dataiku has no equivalent). Wraps paas/scripts/dbt_wrapper.py so existing per-tenant fan-out, anomaly detection, orphan cleanup, and pipeline_logger entries are reused. Config: select / all_tenants / project_slug / project_id / org_id. Unlocks collapsing dbt-run.timer into daily_data_pipeline as a step.
  • verify_rules — wires the data_quality_rules service into a step. Config: rule_ids / source / fail_on (any | critical | none). Surfaces failing-rule count so a Slack reporter with outcome != 'SUCCESS' fires automatically. Unlocks migrating alert_monitor off custom_script.
  • clear_dataset — TRUNCATEs the physical table backing a registered dataset. Looks up schema + name from honeyframe.datasets, scopes to project_id, identifier-quotes both halves, supports CASCADE.
  • compute_metrics — placeholder until the metric layer ships (Batch B). Reports result=deferred so the step exists in the palette without blocking scenarios that include it.
  • dataset_modified trigger — scheduler poll fires when the watched dataset's COALESCE(last_sync_at, updated_at) advances past last_checked_at. Update-first ordering (mirrors folder_change) so slow runs don't double-fire across ticks.

build_dataset UI toggles + Last-runs polish

The build_dataset step now honors Dataiku-equivalent toggles: build_mode (only / upstream / downstream / full_lineage → dbt --select +/− decoration), force_build (--full-refresh), outcome_on_warnings (warning | success). Selectors with explicit + are left undecorated.

Frontend: structured form for build_dataset config (replaces raw JSON), expandable Last runs rows with per-step status / duration / rows / error chips, and a View log modal pulling /pipeline/jobs/{id}/log.

Trigger column promotion + python trigger UI

The 2026-04-30 view cutover migrated honeyframe.scenarios into a view over (scenario_templatesscenario_enabled) but never exposed trigger_python — so post-cutover both the python and dataset_modified triggers had no write path. Migration 2026-05-16_promote_trigger_python_and_dataset_name.sql adds trigger_python + trigger_dataset_name to scenario_templates, recreates the view, updates the INSTEAD OF INSERT/UPDATE trigger functions, and re-extends the trigger_type CHECK to include python + dataset_modified.

The Settings tab trigger picker gains the python option (sandboxed-expression textarea) and the dataset_modified option (dataset-name input).

alert_monitor also picks up a mail reporter firing on outcome != 'SUCCESS' so script crashes no longer silently swallow alerts.