v0.2.66
v0.2.66 — Google Drive integration, workflow installations, and LLM fallback chains
A new Google Drive integration ships with an example sync workflow, and the "installed" state for workflows moves out of the workflow JSON file and into a new wfInstallations table so install state is org-scoped data rather than file content. Workflows and LLM steps gain a models[] fallback chain that fails over to the next model on transient errors, and a new "Upload configs" entry on the agents and automations pages lets you drop in JSON bundles directly from the UI.
🚀 Features
- Google Drive integration. New first-party connector under
examples/integrations/google_drive/with an OAuth-flavoredconnector.tsand a ready-to-installexamples/workflows/google_drive/sync.jsontemplate. (#1650) - Workflow installations are now first-class data. Whether a workflow is installed for an org now lives in a new
wfInstallationstable (keyed byorganizationId+workflowSlug, withcontentHashandinstalledBy), instead of aninstalled: booleanfield inside the workflow JSON. Workflow JSON also gains arequires.integrations[]block ({ name, operations?, minVersion? }) so a template can declare which integrations it depends on, and the engine now validates those dependencies before scheduling. (#1650) models[]fallback chains for LLM workflow steps. Workflowconfig.modelsand LLM stepconfig.modelsaccept an ordered list of model refs; on a failover-eligible error (transient provider failures, etc.) the engine moves to the next entry, with circuit-breaker tracking on transient failures. Workflow-levelmodelsis inherited by any LLM step that defines neithermodelnormodels— step-level overrides still win.modelandmodelsare mutually exclusive on the same step. Existing single-modelconfigs are unchanged. (#1652)- Upload configs from the dashboard. Agents and Automations pages get a new "Upload configs" entry in their action menus, opening a dialog that parses uploaded JSON bundles into the right destination. (#1651)
🛠 Improvements
- Convex workflow file actions take
organizationIdinstead oforgSlug.readWorkflow,listWorkflows, and related actions now resolve the org slug internally fromorganizationId, keeping callers consistent with the rest of the platform API. (#1650) - Stricter validation when starting workflows from a file. Integration dependencies declared in
requires.integrationsare validated against installed integrations (and minimum versions) before a run is scheduled. (#1650)
🐛 Fixes
- Canvas no longer auto-opens on assistant messages. Code blocks in chat no longer pop the Canvas pane open every time the assistant produces output — opening Canvas is now an explicit user action again. (#1648)
💥 Breaking Changes
installedandenabledare removed from workflow JSON. TheworkflowJsonSchemano longer accepts these fields. "Installed" state is now persisted in thewfInstallationsConvex table;enabledhad no consumers and is gone. Existing workflow files with these fields keep parsing (zod strips unknown keys), but their previous "installed" status will not appear in the UI until you run the backfill migration below. (#1650)
Upgrade
Run tale upgrade to update the CLI, then tale deploy to apply the new version.
Migration Guide (only if you had workflows marked installed: true on v0.2.65 or earlier)
The new wfInstallations table is empty after deploy. To carry over your previously-installed workflows and clean up legacy fields in the JSON files, run the per-org backfill migration once for each org:
bunx convex run migrations/backfill_wf_installations:backfillWfInstallations \
'{ "orgSlug": "<your-org-slug>", "organizationId": "<your-org-id>" }'The migration:
- Inserts a
wfInstallationsrow for every workflow JSON with legacyinstalled: true. - Rewrites those JSON files to drop the legacy
installed/enabledfields (history snapshot is taken first). - Is idempotent and safe to re-run.
It returns a { installed, skipped, rewritten, failed } summary. If you have no previously-installed workflows, you can skip this step entirely.
Contributors
Full Changelog: v0.2.65...v0.2.66