* Apply in FSharpLanguageServer and CSharpLanguageServer
* CSharpLanguageServer: Disabled auto-install of .NET (does not work reliably)
and remove corresponding test
* Remove TestFSharpLanguageServerSetup
Marksman returns all headings (h1-h6) with SymbolKind.String (15), which
causes them to be treated as low-level symbols and filtered out of
get_symbols_overview results.
Override request_document_symbols in Marksman to remap SymbolKind.String
to SymbolKind.Namespace, which is semantically appropriate for headings
(named sections containing other content) and ensures they appear in
symbol overviews.
The server allows arbitrary tools to be called remotely,
spawning language servers dynamically for each requested project.
This implements #1086 for LSP users.
These tools allow to query information from other projects (without activation)
by allowing tools to be executed in the respective project context.
LSP tools are not supported, as this would require language servers to be
spawned and managed, but when using the JetBrains backend, symbolic
access is fully supported for all projects, for which an IDE is open.
This thus implements #1086 for users of the JetBrains language backend.
The tools are optional. Mode 'query-projects' enables them.
Modes could not activate optional tools, because optional tools were not in the base toolset.
Base toolset computation was fully refactored, now considering all initial modes in the sense
that their inclusions are definitely part of the base toolset.
Dynamic mode changes after agent creation are still subject to the constraint that they
can essentially only disable tools; while they can technically also enable tools,
enabling is not effective unless the tools were also in the exposed toolset (as clients
otherwise cannot "see" them).
Fixes#1105
Replace the automatic timed banner rotation with a random initial banner
selection and small, manually operated arrow buttons for navigation.
Previous behavior can be restored by setting BannerRotation.automaticRotationEnabled to true.
The original slides used position:absolute + opacity for transitions.
This was changed to display:none/block because absolutely positioned
children don't contribute to their parent container's dimensions, causing
the banner containers to collapse to zero width/height. The arrow buttons
(position:absolute, top:50%) need a parent with real dimensions to
center correctly. With display:none/block, the active slide determines
the container's natural size.
The fixed height:60px on .gold-banner was removed for the same reason —
it clipped banner images that are taller than 60px.
An explicit height was added to .header-banner to ensure the arrow
buttons can vertically center via top:50% within the platinum banner area.
The test wrote two values to a file and relied on a 3-second sleep for
the filesystem mtime to advance, which fails when both writes land in
the same second (ext4/tmpfs have 1-second mtime granularity).
Fix: use os.utime() to explicitly bump mtime after the second write.
This is deterministic, instant, and tests the actual cache invalidation
logic (mtime comparison) rather than hoping the clock advances.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add "Per-Project Configuration" section to JetBrains plugin docs
with cross-reference anchor for linking from other pages
- Add language_backend to project configuration feature list in workflow docs
- Add cross-reference from global config docs to per-project override
- Move language_backend field from ProjectConfig to SharedConfig,
following the same pattern as symbol_info_budget (review feedback)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>