Commit Graph
3303 Commits
Author SHA1 Message Date
Dominik Jain 93ec043105 Updated interprompt sync commit identifiers (push) 2026-08-14 20:50:47 +02:00
Dominik Jain 1814fc9a0f interprompt edbee70392dca692d36d136c47a61513f4a2b222
commit edbee70392dca692d36d136c47a61513f4a2b222
  Author: Dominik Jain <dominik.jain@outlook.com>
  Date:   Fri Aug 14 20:49:45 2026 +0200

      Sync reframer

        commit 8f0e933cca9481a57ccabf1ef9419815274cdfa1
        Author: Dominik Jain <dominik.jain@outlook.com>
        Date:   Fri Aug 14 19:56:51 2026 +0200

            Allow to configure name of generated class

        reframer/interprompt/prompt_factory.py

        commit 7eb3472cec8179a19e1f127ecbdeadf50becab01
        Author: Dominik Jain <dominik.jain@outlook.com>
        Date:   Fri Aug 14 19:48:49 2026 +0200

            Allow to configure interprompt package name and fix imports in generated code (must include PromptList)

        reframer/interprompt/prompt_factory.py

        commit 015781ed2b6b0e2311d9938788403e0b33b19e17
        Author: Dominik Jain <dominik.jain@outlook.com>
        Date:   Fri Aug 14 19:36:07 2026 +0200

            Fix: Language code was read at the wrong level

        reframer/interprompt/multilang_prompt.py

        commit 487e9eed63d435257ee03eda03e668b4e7a73019
        Author: Dominik Jain <dominik.jain@outlook.com>
        Date:   Fri Aug 14 19:08:18 2026 +0200

            Use relative imports

        reframer/interprompt/jinja_template.py

  src/interprompt/jinja_template.py
  src/interprompt/multilang_prompt.py
  src/interprompt/prompt_factory.py
2026-08-14 20:50:47 +02:00
Dominik Jain 3ad624f511 Merge branch 'main' of github.com:oraios/serena 2026-08-14 15:57:04 +02:00
Dominik Jain 36e5e981e7 Updated interprompt sync commit identifiers (pull) 2026-08-14 15:56:20 +02:00
Dominik Jain 17e39c9655 Fix duplicate section 2026-08-14 15:46:51 +02:00
Jia Tianzhao 27644053ad fix(dart): handle analyzer status notifications (#1863)
The Dart analysis server emits $/analyzerStatus while it analyzes a workspace.
The Dart adapter did not register this server-specific notification, so the
generic notification dispatcher logged every event as an unhandled-method
warning even though no client action is required.

Register the method with the adapter's existing no-op notification handler,
keeping the global behavior for genuinely unknown notifications unchanged. Add
a startup regression test that sends the notification through the production
dispatcher, and document the fix in the changelog.

Fixes #1855
2026-08-13 22:39:50 +02:00
Dominik Jain 25610cb280 Improve docstrings 2026-08-13 13:10:37 +02:00
Eshin KunishimaandClaude Opus 5 7067f566c0 Remove redundant dotenv dependency (#1844)
`dotenv` was added in 605bca19 together with the `from dotenv import
load_dotenv` call in `src/serena/agno.py`, six days after `python-dotenv` had
already been added in 276f6a84. The `dotenv` module that the code imports is
provided by `python-dotenv`. The separately named `dotenv` distribution on PyPI
is an unrelated, deprecated project by another author, republished as a
metadata-only stub whose only content is `Requires-Dist: python-dotenv`; its
wheel ships no Python module at all, so the dependency has never contributed
anything at runtime.

The redundancy survived the bulk pinning pass in 45cd8ca1, which mechanically
rewrote `dotenv>=0.9.9` to `dotenv==0.9.9`.

Dropping it removes a third-party PyPI name from the set of distributions
trusted at install time, with no behavioural change. Verified that `from dotenv
import load_dotenv` resolves with only `python-dotenv==1.2.2` installed.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-13 12:36:34 +02:00
Dominik Jain 8a4d116c13 Fix: Parallel agents auto-registering projects could overwrite each other's changes
to the global project list in `serena_config.yml`

Fixes #1850
2026-08-13 12:21:45 +02:00
Merlin Hughes a9f99c679b Scala: wait for Metals' reported work, not a fixed 5 seconds (#1859)
Cross-file queries waited 5s after the first file was opened. On a cold Metals
that is long before it has imported the build, indexed, and — crucially —
compiled: references come from SemanticDB, which the build server writes as it
compiles, so a query made in between returns some of the references rather than
none, with nothing to mark it partial. Against a ~700-file Scala 3 build the
first find-references returned 124 of 242.

Metals already reports all of this as work-done progress; Serena did not declare
`window.workDoneProgress`, so none of it arrived. Declare it, track the tokens,
and wait for them before the first cross-file query — the same event-based shape
as TypeScript's indexing wait (#1639), whose hooks this uses.

Readiness is "nothing outstanding for a moment", not "nothing outstanding":
Metals hands off between its phases rather than overlapping them, so the token
set empties for around a second between the import ending and indexing starting,
and a plain drain returns in that gap. Measured on the same build, the first
find-references now returns all 242, taking 32s rather than 22s.
2026-08-13 11:43:24 +02:00
Merlin Hughes 5107b11fb3 Merge pull request #1847 from merlinorg/scala-document-project-root-settings
docs: document the three Scala settings the configuration page omitted
2026-08-12 15:06:48 +02:00
Dominik Jain f1d78a88ce Update docstring of web_dashboard_interface 2026-08-10 19:02:05 +02:00
Dr. Dominik Jain 946ad98178 Merge pull request #1836 from oraios/release-1.7
Release v1.7.0
2026-08-09 20:37:45 +02:00
Dominik Jain 2cb9d87227 Set version to v1.7.1.dev0 2026-08-09 20:14:38 +02:00
Dominik Jain 949a27ef1e Release v1.7.0 2026-08-09 20:14:37 +02:00
Dominik Jain be5cf4e41e Merge remote-tracking branch 'origin/main' into release-1.7 2026-08-09 20:13:17 +02:00
Dr. Dominik Jain 3c8e9854f6 Improve identification of container/low-level symbols (#1834)
This affects results returned for request_containing_symbol,
some tests were adjusted accordingly.
2026-08-09 20:12:51 +02:00
Dominik Jain bad11d825c Update news item 2026-08-09 17:51:16 +02:00
Dominik Jain 140d0b03ee Merge branch 'main' into release-1.7 2026-08-09 17:42:14 +02:00
Dr. Dominik Jain 281e9db2eb Merge pull request #1823 from AmirF194/fix/1818-process-group-cleanup-without-enumeration 2026-08-09 17:37:16 +02:00
Dominik Jain bd86cf840a Introduce ManagedSubprocess to encapsulate subprocess lifecycle management
The knowledge that a process launched with start_new_session=True is its own
group leader (and thus that its PGID equals its PID) was previously held by
StdioLanguageServer, i.e. the consumer had to know how the launcher works in
order to terminate the process correctly.

ManagedSubprocess now owns the process group ID alongside the Popen instance,
deriving it at construction time, and provides the termination logic; the
launcher returns instances of it. StdioLanguageServer merely holds one and
accesses the process through its interface.

LanguageServerSubprocessLauncher now returns ManagedSubprocess instances and
is renamed to ManagedSubprocessLauncher accordingly.
2026-08-09 17:09:57 +02:00
xor c9f0ab80f1 SolidLSP: admit Struct, Interface and Constant symbols as reference containers (#1831)
find_referencing_symbols degraded to file-level attribution for any
reference located inside a Go struct body, interface body or const
group: request_containing_symbol found no admissible container, so
request_referencing_symbols logged "Could not find containing symbol
... Returning file symbol instead" and fell back to the file symbol,
losing the answer the tool exists to give.

Root cause: the candidate-container filter admitted only Python's
container kinds {Method, Function, Class} (plus Variable via the
one-liner-exempt path). The language server is not at fault:
hierarchicalDocumentSymbolSupport is declared and the DocumentSymbol
tree is complete, but Go structs arrive as SymbolKind.Struct,
interfaces as Interface and const-group members as Constant - none of
which were admitted, so every candidate was rejected.

Fix, mirroring the existing structure of the filter:
- Struct and Interface join the multi-line container whitelist,
- Constant joins Variable on the one-liner-exempt path (const-group
  members are one-liners by nature, exactly like the module-level
  variables that path already serves).

The Python suite shows no attribution change
(test/solidlsp/python/test_symbol_retrieval.py: 80 passed). Languages
whose containers use the added kinds (e.g. Rust and C structs,
TypeScript interfaces) get the same admission; verified for Go and
Python only.

Regression coverage: new Go fixture containment_sample.go with a
const-iota group, a struct field and an interface method all
referencing a named type; four tests assert containing-symbol and
referencing-symbol attribution, and all four fail against the
pre-change ls.py (verified). Full go-marker suite: 21 passed,
1 skipped.
2026-08-09 16:07:20 +02:00
xor bdc9a2de2d CI: cache npm dependencies for web test fixtures (#1698) 2026-08-09 16:00:55 +02:00
Amir Fathi ec18c48202 Fix: LSP process-group cleanup no longer requires process-table enumeration
An independently-started LSP process is already its own POSIX process group leader
(start_new_session=True), so cleanup can signal that known group directly via os.killpg
instead of walking the tree with psutil.Process.children(recursive=True), which requires
system-wide process-table enumeration that can be denied even for processes we started
and own (#1818).
2026-08-09 12:13:14 +00:00
Dominik Jain e663ccb584 Add news item for v1.7.0 release 2026-08-09 13:54:14 +02:00
Dominik Jain b030baf544 Add 'Security' section to changelog 2026-08-09 13:54:03 +02:00
Dominik Jain 600dda1fdf Use <code> tag for commands in news 2026-08-09 13:53:54 +02:00
Dominik Jain d3441d3e23 Merge remote-tracking branch 'origin/main' into release-1.7
Conflicts:
  CHANGELOG.md
2026-08-09 13:53:19 +02:00
Dominik Jain c3f5aab59e Improve project health-check : Disable symbol groupers, remove flawed pattern search test
Resolves #1826
2026-08-09 13:48:41 +02:00
1b459899ca Add Wolfram Language support via official LSPServer paclet (#1108)
Adds support for Wolfram Language (.wl, .wls files) using the official
WolframResearch LSPServer paclet, which communicates via stdio.
Requires Wolfram Mathematica 13.0+ or Wolfram Engine 12.1+.
The WolframKernel is located via WOLFRAM_PATH, the system PATH, common
install locations, or ls_path in ls_specific_settings.

Includes language server implementation, test repo, test suite
(skipped gracefully when WolframKernel is unavailable), and
documentation updates.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-08-09 13:31:30 +02:00
Amir Fathi c687e751af fix(gitignore): escape directory names before interpolating into pattern position (#1809)
* fix(gitignore): escape directory names before interpolating into pattern position

GitignoreParser rescopes patterns from nested .gitignore files by prefixing the
containing directory's relative path, but interpolates that path into pattern
position without escaping it. A directory whose name contains a gitignore
metacharacter (*, ?, [, ], !, #) is then read as glob syntax instead of a
literal name, so a directory like a stray "***" venv can turn a scoped
pattern into one matching most or all of the project.

Fixes #1806

* fix(gitignore): build patterns with '/' only, never os.sep/os.path.join

The escaping added in the prior commit inserts literal backslash escape
characters before pattern metacharacters. On Windows, os.sep is also
backslash, so os.path.join(rel_dir_pattern, line) mixed path-separator
backslashes with escape backslashes, and the pre-existing trailing
`.replace(os.sep, "/")` normalization step then converted ALL of them
indiscriminately -- turning an escaped 'a\[1\]' into 'a/[1/]', which no
longer matches the literal directory name.

Verified with ntpath (Windows path semantics) on this Linux session:
simulating a Windows relpath through the old os.sep/os.path.join/replace
chain produces 'a/[1/]/mod.py', which pathspec does not match against
'a[1]/mod.py'; the new '/'-only construction produces 'a\[1\]/mod.py',
which matches. Fixed by normalizing rel_dir to '/' immediately and joining
every pattern component with a literal '/', removing the now-unneeded (and
on Windows actively harmful) blanket separator replace.

Also marks the two directory-creation regression tests that use '*'/'?'
literally in a directory name as Windows-skipped (those characters are
illegal in Windows filenames, so the directories cannot be created there --
a platform limitation of the test, not the fix), and adds a pure-function
test for _escape_gitignore_path_component so the '*'/'?' escaping logic
still has cross-platform coverage.

Found via this PR's own Windows CI run (jobs 91787560091/91787560092/91787560183
on run 30843966565), which failed test_gitignore_dir_name_with_metachars_anchored_pattern
with an assertion failure (not the OSError the other two tests hit), before any
maintainer had looked at the PR.
2026-08-09 13:26:18 +02:00
Evangelos KaratzasandClaude Opus 5 8ebb247dae Force the Nextflow server's deferred workspace scan before finding references (#1832)
The Nextflow language server does not scan the workspace when it says it does.
`LanguageService.initialize` -- which the "Initializing" progress notification we
wait for wraps -- only marks the workspace as unscanned and clears the AST cache.
The scan itself happens in `LanguageService.update0`, behind a 1s debounce, and
only on a round that finds no pending file change; a round that does find one
re-defers it via `updateLater`. The first `didOpen` of a session therefore pushes
the scan out by at least one further round, so a references request issued right
after it sees an AST cache holding nothing but the file it just opened and answers
with an empty list.

Force the scan rather than waiting for it. `completion` is one of the two requests
that call `updateNow` before consulting their provider, and
`DebouncingExecutor.executeNow` cancels the pending debounce and runs the update
synchronously on the request thread, so the response is not sent until that round
has finished. Two rounds suffice whatever the workspace size: the first drains the
pending file changes -- which is what re-defers the scan -- and the second finds
nothing pending, so it compiles the whole workspace before replying.

Polling the workspace symbol index instead would be unsound: `LanguageService.symbol`
neither awaits the update nor holds the monitor that `update` synchronises on. On a
generated 1050-file workspace, polling it made the server raise
`java.util.ConcurrentModificationException` from inside the scan, non-deterministically
(6, 3 and 0 times across three runs).

The existing cross-file reference test did not catch the empty results because the
`language_server` fixture is module-scoped: earlier tests in the class had already
opened main.nf and forced the server to compile it, so the assertion passed for a
reason that does not hold in a real session. Run alone, it failed. The added test
starts its own server and opens nothing but the defining file.

Verified on the 1050-file workspace, where the symbol has exactly 100 references:
without the fix 0 are found, with it all 100, in 2.5s.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-09 13:24:43 +02:00
Dominik Jain 430fc62e72 Improve tray manager handling, particularly on macOS #1825
* On shutdown, message tray manager before lengthy project shutdown
* When dead ports are found, explicitly update the menu
2026-08-08 22:17:29 +02:00
Dr. Dominik Jain 9f9700a503 Merge pull request #1827 from oraios/memory-cleanup 2026-08-08 21:51:41 +02:00
Dominik Jain b2de2c8f97 Improve instructions on prompt templates, adding link to new docs section
Improve other docstrings in templates and add missing key `fixed_tools`
2026-08-08 21:50:13 +02:00
dependabot[bot] bfd4738e2b chore(deps): bump the uv group across 1 directory with 5 updates
Bumps the uv group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [cryptography](https://github.com/pyca/cryptography) | `48.0.1` | `50.0.0` |
| [pyasn1](https://github.com/pyasn1/pyasn1) | `0.6.3` | `0.6.4` |
| [gitpython](https://github.com/gitpython-developers/GitPython) | `3.1.46` | `3.1.58` |
| [h2](https://github.com/python-hyper/h2) | `4.3.0` | `4.4.1` |
| [setuptools](https://github.com/pypa/setuptools) | `82.0.1` | `83.0.0` |



Updates `cryptography` from 48.0.1 to 50.0.0
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/48.0.1...50.0.0)

Updates `pyasn1` from 0.6.3 to 0.6.4
- [Release notes](https://github.com/pyasn1/pyasn1/releases)
- [Changelog](https://github.com/pyasn1/pyasn1/blob/main/CHANGES.rst)
- [Commits](https://github.com/pyasn1/pyasn1/compare/v0.6.3...v0.6.4)

Updates `gitpython` from 3.1.46 to 3.1.58
- [Release notes](https://github.com/gitpython-developers/GitPython/releases)
- [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES)
- [Commits](https://github.com/gitpython-developers/GitPython/compare/3.1.46...3.1.58)

Updates `h2` from 4.3.0 to 4.4.1
- [Changelog](https://github.com/python-hyper/h2/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/python-hyper/h2/compare/v4.3.0...v4.4.1)

Updates `setuptools` from 82.0.1 to 83.0.0
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v82.0.1...v83.0.0)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 50.0.0
  dependency-type: direct:production
  dependency-group: uv
- dependency-name: pyasn1
  dependency-version: 0.6.4
  dependency-type: direct:production
  dependency-group: uv
- dependency-name: gitpython
  dependency-version: 3.1.58
  dependency-type: indirect
  dependency-group: uv
- dependency-name: h2
  dependency-version: 4.4.1
  dependency-type: indirect
  dependency-group: uv
- dependency-name: setuptools
  dependency-version: 83.0.0
  dependency-type: indirect
  dependency-group: uv
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-08 19:53:53 +02:00
weiconghe 1d44e9cfab feat: add Gleam language support via the Gleam compiler's bundled gleam lsp (#1765) 2026-08-08 19:44:27 +02:00
Merlin Hughes 8c1f3bcc98 Scala: give Metals the build roots rather than the repository root (#1767)
Metals serves one build per workspace folder, and Serena sends only the
repository root. Where the builds live below the root, Metals falls back to
its own search (BuildTools.searchForBuildTool), which looks one level down
and takes the *first* match — so in a monorepo every build but that one is
served with no build target, and cross-file references silently come back
empty.

Detect the build roots instead and send them all, one Metals service each.
`ls_specific_settings.scala.project_roots` names them explicitly where the
detection guesses wrong, `project_root_scan_depth` bounds the search.

The configured `ls_workspace_folders` are not usable for this: they are about
what SolidLSP indexes and are shared by every language server of a project, so
in a polyglot monorepo no single value suits both Metals and, say, tsserver.

Where the repository root is itself a build root, nothing changes.
2026-08-08 19:33:42 +02:00
xor 88d71530ab Test speed optimization, svelte: remove unused dependencies (#1707) 2026-08-08 19:05:31 +02:00
Evangelos Karatzas 76b94f3274 Add Nextflow language server support (#1815)
The Nextflow language server schedules a debounced (1s) AST update on every
didOpen/didChange, and LanguageService.references is the only request that does
not await it -- documentSymbol, codeLens, documentLink and semanticTokensFull
all do. A references request issued inside that window races the recompile of
the file it asks about and can return an empty list, which is what the macOS CI
runner hit. Send a documentSymbol request for the same file first, which blocks
server-side until the pending update has been applied.

Also compare reference paths using the platform separator in the tests, since
relativePath is OS-native and the hardcoded forward slashes failed on Windows.
2026-08-08 18:58:46 +02:00
Michael Panchenko 27d7d0e0ec Merge pull request #1778 from shiersa/feat/deno-language-server
feat: add Deno language server support
2026-08-08 18:50:38 +02:00
dependabot[bot] de2f1a658a Bump pillow from 12.2.0 to 12.3.0 in the uv group across 1 directory
Bumps the uv group with 1 update in the / directory: [pillow](https://github.com/python-pillow/Pillow).


Updates `pillow` from 12.2.0 to 12.3.0
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-version: 12.3.0
  dependency-type: indirect
  dependency-group: uv
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-08 18:44:45 +02:00
Kobi Hikri 436fbe4ac3 ci: attach provenance and SBOM attestations to the published image (#1775) 2026-08-08 18:44:10 +02:00
Dominik Jain c9fa15741e Add documentation on prompt templating in Serena 2026-08-08 17:57:21 +02:00
Dominik Jain 69d14891ca Minor refactoring: Rename _format_prompt to _render_prompt, adding docstring 2026-08-08 17:48:37 +02:00
Dominik Jain bb06ed05dd Support embed_memory function in prompt templates
Apply it in Serena's own project prompt
2026-08-08 17:43:13 +02:00
Dominik Jain 91ebba1c8c Merge remote-tracking branch 'origin/Main' into memory-cleanup 2026-08-08 17:18:05 +02:00
Dominik Jain ed401769b5 ProjectServer: Use general headless mode config overrides 2026-08-08 16:57:40 +02:00
Dr. Dominik Jain f90d488309 Merge pull request #1828 from oraios/prompt-tags 2026-08-08 16:53:39 +02:00
Dominik Jain d3a8e9b565 Improve project activation message 2026-08-08 16:49:42 +02:00