Skip to content

fix(plugin): survive missing Xcode git and ship 2.1.0 - #8

Merged
autogame-17 merged 2 commits into
mainfrom
cursor/fix-plugin-load-git-ce9b
Aug 18, 2026
Merged

fix(plugin): survive missing Xcode git and ship 2.1.0#8
autogame-17 merged 2 commits into
mainfrom
cursor/fix-plugin-load-git-ce9b

Conversation

@autogame-17

Copy link
Copy Markdown
Contributor

Touches hot-path: yes
Phase: fix
Risk vector: reverse

Summary

Cursor showed Error loading plugin on Evolver because the installer runs git -c credential.interactive=false -c core.fsmonitor=false init, and on macOS without Xcode Command Line Tools /usr/bin/git is a stub that prints xcode-select: No developer tools were found.

This release (manifest 2.1.0) makes the plugin's own hooks survive that environment and ships the missing settings/MCP surface so a refresh is a real upgrade, not just a version bump.

  • Repo detection is filesystem-only (walk for .git). Hooks never spawn Apple's git stub; Homebrew git is used when present.
  • runGit refuses init / clone / daemon, including Cursor's -c … init argv shape.
  • Session-start no longer tells the agent to run git init (that string was an actionable command). Missing-repo and unusable-git notices are separate.
  • Plugins → Configure variables: Node ID (leave blank), Hub URL, proxy port, strategy — wired into mcp.json.
  • MCP: free-text query on evolver_search_assets; new evolver_report_reuse; fetch responses actually include the reuse nudge on data.
  • sessionEnd alias for the same recorder as stop (deduped).
  • README troubleshooting for the exact load banner; tests + CI.

Cursor's installer still needs a working git to copy the plugin into ~/.cursor/plugins/cache. After xcode-select --install or brew install git, reinstall/refresh. The plugin will no longer re-trigger the CLT dialog from its hooks.

Scope and cuts

Who can now do what: a Cursor user on macOS without CLT can keep Evolver loaded (hooks + MCP + commands) instead of seeing a hard plugin-load failure from our git spawns; once real git is installed, recall/record works as before; Hub settings are configurable in the plugin UI; agents can search with a natural-language query and credit reused assets.

nothing cut — GitHub Release/tag v2.1.0 is created from this branch's version bump after merge (marketplace clients pick up the new plugin.json version). Cursor's own git init during cache install cannot be replaced from plugin code; the README states the installer-side CLT/Homebrew step.

Module boundary

Cursor plugin only (evolver-cursor-plugin): hooks, MCP bridge, manifest, commands/skill copy. No engine (@evomap/evolver) or Hub changes.

Alternative considered

Restructure the repo into plugins/evolver/ like the official template so team-marketplace source is a subdirectory. Rejected: this is a single-plugin repo already consumed at the root; moving it would break existing marketplace imports. Changed source from ./ to . only.

Leaving MCP/settings for a follow-up was rejected: AGENTS.md treats the settings surface and failure path as part of a complete plugin delivery.

Validation

  • node --test test/*.test.js — 16 passed locally (path/git guards, MCP tools/list + empty search, manifest/variables, session-start nongit notice).
  • CI workflow .github/workflows/test.yml runs the same command on PRs.

Rollback / recovery

Revert this PR / pin marketplace to the previous commit. Manifest version returns to 2.0.0. No data migration. Local ~/.evolver memory graphs are unchanged.

Open in Web Open in Cursor 

cursoragent and others added 2 commits August 18, 2026 05:33
Cursor's plugin page showed Error loading plugin because macOS without
Command Line Tools turns /usr/bin/git into a stub that fails git init.
Hooks now detect repos on the filesystem, refuse init/clone, and never
spawn that stub. Also add Configure variables, search query,
evolver_report_reuse, and tests.

Co-authored-by: autogame-17 <autogame-17@users.noreply.github.com>
Empty or literal ${EVOMAP_PROXY_PORT} from plugin variables must not
become the Proxy port; fall back to 19820.

Co-authored-by: autogame-17 <autogame-17@users.noreply.github.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 42aeae5. Configure here.

Comment thread hooks/session-end.js
const reason = diff.isRepo
? 'no changes detected this session'
: 'not a git workspace';
: 'git unavailable or not a git workspace';

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Session-end dedupe race

Medium Severity

stop and sessionEnd now both launch session-end.js as separate processes, but claimSessionRecord still does a non-atomic read-modify-write on session-end-state.json with no locking. Concurrent firings can both observe an empty claim and both append the same outcome to the memory graph, so the new dual-hook wiring does not reliably dedupe.

Additional Locations (1)
Fix in Cursor Fix in Web

Triggered by team rule: Mandatory review after completing all tasks

Reviewed by Cursor Bugbot for commit 42aeae5. Configure here.

Comment thread mcp/evolver-proxy.mjs
typeof raw === 'string' && raw.length > 0 && !raw.includes('${')
? raw
: '19820';
return `http://127.0.0.1:${port}`;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Configure env vars unused

Medium Severity

Plugin Configure ships EVOMAP_HUB_URL, EVOMAP_NODE_ID, and EVOLVE_STRATEGY into the MCP process via mcp.json, but the bridge only ever reads EVOMAP_PROXY_PORT. Those three settings are dead for the MCP server, so Configure does not actually steer Hub identity or strategy through the bridge the release claims to wire up.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 42aeae5. Configure here.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left a non-blocking comment and did not approve: Cursor Bugbot found 2 unresolved medium-severity issues that need human review. Assigned a reviewer for the hooks and MCP findings. Cursor Security Agent was not running on this PR.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@cursor
cursor Bot requested a review from bjw9808 August 18, 2026 05:41

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left a non-blocking comment: Cursor Bugbot skipped after reporting two unresolved findings, so this run is not approving. Assigned bjw9808 for human review.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@autogame-17
autogame-17 merged commit 9aca5f2 into main Aug 18, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants