* fix: add WSL path normalization for JetBrains plugin matching
When running Serena MCP server inside WSL2 with JetBrains IDE on Windows,
the plugin returns paths like `//wsl.localhost/Ubuntu-24.04/home/user/...`
while Serena expects `/home/user/...`. This causes `ServerNotFoundError`
because the paths don't match despite pointing to the same location.
This commit adds `_normalize_wsl_path()` method that converts WSL UNC
paths to standard Linux paths before comparison, enabling seamless
integration between WSL-based Claude Code and Windows-based JetBrains IDEs.
Fixes#912
Add support for Free Pascal/Lazarus projects using pasls.
Features:
- Auto-download pasls binary for Linux, macOS, and Windows
- Platform detection for x64 and arm64 architectures
- Support for FPC environment variables (PP, FPCDIR)
CI: Add FPC compiler installation (fpc-ootb for Windows)
Includes test repository and unit tests.
The linux-arm64 platform entry was missing required fields (jre_home_path,
jre_path, lombok_jar_path, jdtls_launcher_jar_path, jdtls_readonly_config_path)
causing a KeyError when activating Java projects on ARM64 Linux systems.
Fixes#486
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace .yml extension check with proper file existence check
- Check if path exists as a file first before treating as name
- Raise FileNotFoundError for paths that look like files but don't exist
(contains path separators or ends with .yml/.yaml)
- Improves error messages when file paths are invalid
- Convert relative ELM_HOME to absolute path based on repository root,
fixing package discovery when devbox uses relative paths like '.elm'
- Wait for textDocument/publishDiagnostics before marking server ready,
ensuring workspace is fully scanned before accepting LSP requests
- Use shutil.which() for elm tool paths in initialization options
Fixes 'No Elm workspace contains' errors when elm-language-server
starts before workspace indexing completes.
Co-authored-by: Jordan Munch O'Hare <git@jordan.munchohare.com>
The get_platform_id() function was generating "linux-arm64-musl" but the
PlatformId enum expects "linux-musl-arm64". This caused a ValueError on
musl-based Linux systems (e.g., Alpine Linux on arm64).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: mhaynie <mhaynie@pazer.us>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* Mark the tool as optional (disabled by default)
* Enable the tool if the dashboard is enabled, not opened and the GUI is off
* Improve factorisation and return value/error handling
This provides an alternative for users who want to disable automatic
browser opening (web_dashboard_open_on_launch: False) but still have
easy access to the dashboard through AI assistance.
Changes:
- Add OpenDashboardTool in config_tools.py
- Add open_dashboard() and get_dashboard_url() methods to SerenaAgent
- Store dashboard URL in _dashboard_url field
- Update documentation with new tool and configuration option
- Update config template comment to mention the tool
Closes#875
The test was using SerenaMCPFactorySingleProcess and _instantiate_agent()
which were removed when process isolation was removed from the codebase.
Updated to use SerenaMCPFactory and _create_serena_agent() instead.
This fixes the CI pipeline which was failing on all test runs.
This reverts commit 7ad44edd18.
Listen address 0.0.0.0 is necessary for docker, because port forwarding for Docker
is just NAT, so port forwarding alone is not sufficient
Fixes#879
Compact version and support for depth>0 and filtering out imports.
Backwards compatible (previous plugin versions won't crash),
but users have to update to 2023.2.3 to benefit from the change
Add readOnlyHint, destructiveHint, and title annotations to all tools
to help LLMs better understand tool behavior and make safer decisions.
Changes:
- Added destructiveHint: true to tools that modify data
- Added title annotations for human-readable display (e.g., "Find Symbol")
- Fixed memory tools (WriteMemoryTool, DeleteMemoryTool, EditMemoryTool)
to correctly inherit ToolMarkerCanEdit, ensuring they get destructiveHint: true
This improves tool safety metadata for MCP clients by:
- Helping LLMs distinguish read-only from destructive operations
- Providing human-readable titles for tool display
- Correctly categorizing all memory-modifying tools as destructive
Co-Authored-By: Claude <noreply@anthropic.com>
The grouping by type and the removing of the per-symbol-repeated name_path leads to a huge reduction in output size while the same information is retained!
From
{"symbols": [{"name_path": "collections", "type": "Py:IMPORT_ELEMENT"}, ...
To
{"symbols": {"Py:IMPORT_ELEMENT": ["collections", ...