Skip to content

v0.32.3

Choose a tag to compare

@DavidsonGomes DavidsonGomes released this 25 Apr 16:49
· 7 commits to main since this release

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.handleClick now has explicit open / close branches instead of a blind setExpanded(prev => !prev) toggle that was vulnerable to any re-trigger flipping a freshly-opened folder back closed.
  • Workspace.tsx keeps a knownDirsRef so 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
  • DetachedInstanceError fix

Full Changelog: v0.32.2...v0.32.3