Summary
The installed tools view compares versions and has an Update button UI, but the onUpdate callback is never passed to the tool card/row components, so the button never renders.
What's already implemented
- Version comparison —
getWorkflowStatus() in installed-tools-view.tsx compares caal_registry_version to registry version
- Update button UI — Both
InstalledToolCard and InstalledToolRow render an orange "Update" button when onUpdate is provided and version mismatch exists
- Install/update API —
/api/tools/install already handles re-installing over existing workflows
- Tool detail modal — Update button in the modal IS wired up via
onInstall() and works correctly
What's missing
In installed-tools-view.tsx, onUpdate is not passed to InstalledToolRow or InstalledToolCard:
<InstalledToolRow
key={workflow.id}
workflow={workflow}
status={getWorkflowStatus(workflow)}
onShare={handleShare}
onClick={handleRowClick}
// onUpdate is NOT passed — button never renders
/>
Implementation
- Add a
handleUpdate callback in installed-tools-view.tsx that finds the matching registry tool and opens the tool detail modal (or install modal directly) with that tool
- Pass
onUpdate={handleUpdate} to both InstalledToolRow and InstalledToolCard
- The existing install modal flow handles the rest (substitutes variables, creates workflow in n8n, activates, caches registry info, reloads tools)
Files
frontend/components/tools/installed-tools-view.tsx — wire up onUpdate
frontend/components/tools/installed-tool-card.tsx — button exists, needs callback
frontend/components/tools/installed-tool-row.tsx — button exists, needs callback
Summary
The installed tools view compares versions and has an Update button UI, but the
onUpdatecallback is never passed to the tool card/row components, so the button never renders.What's already implemented
getWorkflowStatus()ininstalled-tools-view.tsxcomparescaal_registry_versionto registry versionInstalledToolCardandInstalledToolRowrender an orange "Update" button whenonUpdateis provided and version mismatch exists/api/tools/installalready handles re-installing over existing workflowsonInstall()and works correctlyWhat's missing
In
installed-tools-view.tsx,onUpdateis not passed toInstalledToolRoworInstalledToolCard:Implementation
handleUpdatecallback ininstalled-tools-view.tsxthat finds the matching registry tool and opens the tool detail modal (or install modal directly) with that toolonUpdate={handleUpdate}to bothInstalledToolRowandInstalledToolCardFiles
frontend/components/tools/installed-tools-view.tsx— wire uponUpdatefrontend/components/tools/installed-tool-card.tsx— button exists, needs callbackfrontend/components/tools/installed-tool-row.tsx— button exists, needs callback