v0.32.3
EvoNexus v0.32.3 — Workspace folder navigation fix + share link reuse
Patch release fixing a long-standing Workspace UI bug where folders refused to open and the dev console flooded with 400 Path is a directory requests on every click. Plus a small UX win on the file share dialog (reuse existing share links instead of generating a new token every time). Also includes the upstream PR #51 (private-repo plugin update flow + ClickUp webhook compat + DetachedInstanceError).
What's New
Workspace folder click no longer remounts the page
The SectionBoundary in App.tsx was keyed on location.key || location.pathname, so every navigate({replace:true}) inside /workspace/*, /agents/:name, /tickets/:id, /skills/:name and /docs produced a new key and React tore down + remounted the entire page. In the Workspace this wiped selectedPath, the expanded state in every TreeItem, and component refs on every folder click — folders never stayed open and the URL→state effect re-fired the file probe (GET /api/workspace/file?path=workspace/development → 400) on every mount.
The fix collapses subpaths within the same section into a single stable routeKey so the boundary doesn't remount between intra-section navigations. The boundary still resets between sections (so error state still clears when you leave a broken page).
Smaller follow-ups in the same area:
FileTree.handleClicknow has explicit open / close branches instead of a blindsetExpanded(prev => !prev)toggle that was vulnerable to any re-trigger flipping a freshly-opened folder back closed.Workspace.tsxkeeps aknownDirsRefso the URL→state deep-link effect can skip the redundant file probe when the path is already known to be a directory.
Share link reuse
Clicking the share button on a file used to mint a new token every single time, polluting file_shares with duplicates and leaving stale links live until they expired. The dialog now probes the new GET /api/shares/by-path?path=X endpoint on open and, if there's already an active share (enabled + non-expired) for that file, displays the existing link with formatted expiry and a view counter — reusing the same URL. A destructive Revoke and regenerate action is available when you actually want to rotate the link (e.g. it leaked).
The new by-path endpoint inherits the same permission gate (workspace.manage) and folder-access check as POST /api/shares.
Included from PR #51
- Private-repo plugin update flow
- ClickUp webhook compatibility
DetachedInstanceErrorfix
Full Changelog: v0.32.2...v0.32.3