Commit Graph
1657 Commits
Author SHA1 Message Date
l0ng-ai fc75b15519 perf(editor): find a type's overridden methods with one subtype walk (#2680)
The gutter's "is implemented / overridden" markers sent one implementation request per visible method, and jdtls builds the type hierarchy again for each, so a large interface in a big project kept it busy long enough to hold up navigation. When outline names carry the signature (jdtls), a type's methods are now resolved from one walk of its subtypes and their outlines, as the super-method markers are; used only while it takes fewer requests than it replaces, and a method whose name a subtype reuses with another signature (generic overloads) still gets its own request.

Refs #2314
2026-11-11 16:04:10 +08:00
arookieofc 8798c2a542 fix(remote): sync outside-root classpath entries for SSH Java launches (#2641) (#2669) 2026-11-11 15:55:30 +08:00
Deng Liuanddengliu 8ea2787490 fix(editor): keep selection within its own row when font glyphs exceed line height (#2674)
With a font whose glyph box is taller than the line height (e.g. font size 18–20 with the default 22px line height), selecting text on one line also painted the rows above and below: growToLineBoxes probed the rows at the glyph box's top and bottom edges, which then fell in the neighbouring rows, and .cm-openidea-selected painted an unclipped inline background at glyph height. Outer rows are now resolved at each marker's vertical midpoint and row seams align to the line boxes (block widgets and zero-width trailing markers handled), and the inline selection background is capped at 1lh in the editor, notebook cells and diff/merge viewers, with a plain colour fallback where lh is unsupported.

Co-authored-by: dengliu <5108773+dengliu@users.noreply.github.com>
2026-11-11 15:54:26 +08:00
l0ng-ai dc4e8403de fix(java): keep a language server JDK that ran usable while it is unchanged (#2679)
A JDK whose java -version succeeded was probed again every 10 seconds; on a busy machine one probe could time out and the working JDK was reported as "cannot run on this machine". A successful probe now stays valid while the executable's size, modification time and permissions are unchanged; failed probes are still retried after 10 seconds, and a java that hangs on its first probe is still rejected.

Fixes #2470
2026-11-11 15:50:10 +08:00
l0ng-ai 4a0efbae25 fix(agents): keep a run or turn the reader opened open across remounts
A run's open state lived in its row, so it closed when the row remounted: when a
finished turn folded its work away, or when a run grew from one call to two.
Opened runs and turns are now remembered by their first entry for the
conversation's lifetime.
2026-11-11 15:36:22 +08:00
l0ng-ai cb3c0bafd7 fix(boot): count the startup timeout only while the window shows
A window behind others or on another Space gets no animation frames, and the
splash waits for two of them before startup finishes. The 30-second timeout kept
running meanwhile and reported a healthy but slow start, such as a cold dev
build, as "OpenIDEA could not start". It now pauses while the document is hidden
and resumes with the time left.
2026-11-11 15:34:30 +08:00
l0ng-ai 71072dbe4b fix(agents): pace streaming reasoning, cut only between graphemes, cap at 60 Hz
- Reasoning in view streams at the reply's pace instead of in bursts.
- The painted end of a streaming text falls between graphemes (Intl.Segmenter):
  an emoji with joiners or a skin tone, a flag or a letter with combining marks
  no longer flashes in parts. A chunk ending mid-cluster holds that fragment back
  until the rest arrives.
- The reveal commits at most at 60 Hz, so a 120 Hz display doesn't re-render the
  Markdown twice as often.
2026-11-11 15:33:53 +08:00
l0ng-ai 18b286e7e0 fix(agents): one spinner per conversation, counts on one line
Work in progress shimmers on its label (a run's counts and current call, a
running tool, "Thinking") instead of showing a spinner beside it; the working
row at the conversation's end is the only spinner. A run's counts keep their
line, and what runs now ellipsizes in the space left.
2026-11-11 15:32:40 +08:00
l0ng-ai 9474af4de1 fix(agents): steadier tool-call runs, working row in the stream, selection and scroll fixes
- Reasoning and tool calls fold into one run including running calls, so a run
  keeps its place while a call finishes. Its summary names what runs now; it no
  longer leads with "Reasoning". A folded thought shows its first line. An open
  run is bounded and follows its latest call.
- The working / starting / retrying row with its timer ends the conversation
  instead of sitting above the composer, for sessions and subagents alike.
- Selecting text no longer pops up a Quote button; Quote stays in the context menu.
- A selection clamped to the conversation ends in its last selectable text, not on
  its edge: WebKit painted a selection ending there into the composer, as a
  triple-click on the last paragraph showed.
- Sending a message while scrolled up returns to the end, where it shows.
2026-11-11 15:20:09 +08:00
arookieofc 8044d99ea0 feat(build): compile single Java files and skip unchanged Maven builds (#2476) (#2646)
* feat(build): compile a single Java file with javac (#2476)

* feat(build): add Compile File action for single Java sources (#2476)

* feat(build): skip unchanged Maven menu builds via fingerprint records (#2476)

* fix(build): drop shadowed fixture model in unix-only classpath test (#2476)

* fix(build): pass cancel into shared executeBuild helper (#2476)

* chore: retrigger CI after mass-cancel wave (#2646)

* chore: probe CI queue recovery (#2646)
2026-11-11 15:03:42 +08:00
Charlie.Weiandcharli117 0abaf6c777 fix(plugins): keep plugin settings that match their defaults (#2619)
Choosing a plugin setting's default value deleted the override, so in a project the global value showed through instead of the user's choice. The setting control now always writes the chosen value.

Co-authored-by: charli117 <24435100+charli117@users.noreply.github.com>
2026-11-11 14:45:40 +08:00
LU XIANGRUIandwildcatDownstairs 0d9b08ac8c fix(color-scheme): import WebStorm JavaScript and TypeScript colours from .icls (#2634)
WebStorm stores JavaScript and TypeScript colours under JS.* / TS.* keys, which the .icls importer did not map, and DEFAULT_SEMICOLON / _COMMA / _DOT all mapped to Braces and Operators, so a scheme recolouring semicolons painted every brace and paren. JS.* and TS.* now map onto the Language Defaults attributes with TS > JS > PY > defaults precedence, and the separator keys are no longer mapped.

Co-authored-by: wildcatDownstairs <26499420+wildcatDownstairs@users.noreply.github.com>
2026-11-11 14:45:32 +08:00
Maskerandzed1995 e54580265d fix(agents): show Codex ACP collaboration mode in the composer (#2631)
codex-acp reports its Default/Plan choice as a collaboration_mode config option, which the composer dropped because it only rendered model, mode, permissions, approval and thought_level. collaboration_mode is now one of the composer's ordered settings, so a Codex session can switch to Plan.

Co-authored-by: zed1995 <16059724+zed1995@users.noreply.github.com>
2026-11-11 14:45:24 +08:00
LU XIANGRUIandwildcatDownstairs 4fa700b337 fix(editor): collapse the bookmark gutter fully in files without bookmarks (#2632)
The bookmark gutter's 2px side padding applied to the empty spacer element too, so the column kept 4px in files without bookmarks. The padding now applies only to elements that hold a marker, so the column is 0px until the file has a bookmark.

Co-authored-by: wildcatDownstairs <26499420+wildcatDownstairs@users.noreply.github.com>
2026-11-11 14:45:16 +08:00
DrPepperandmakise2060 173d5edcdc fix(run): render the Run console with the terminal font (#2615)
The Run console hard-coded the --font-mono stack and --fs-code, so Settings › Tools › Terminal › Font (family, fallback, size, or Use editor font) never reached process output. resolveMonoFont() now resolves the terminal font choice for both xterm and the DOM console, and the console's virtual row height follows the font size (round(size × 1.5), 20px at the default 13px) so rows don't overlap.

Co-authored-by: makise2060 <263516586+makise2060@users.noreply.github.com>
2026-11-11 14:43:59 +08:00
Gabriel Gondim 4d60921f24 feat(database): list all databases on a SQL Server host (#2629)
SQL Server data sources without single-database mode now show a database level in the tree, like PostgreSQL: every online database the login can access, each expanding to its schemas, with the Schemas tab database picker and the Single database mode option. The backend already listed them; listsDatabases() only enabled the level for Postgres. A failed connect shows an error under the node instead of leaving it on Loading, and saving Properties reloads what the tree had loaded for that source so expanded nodes don't stay on Loading.

Closes #2600

Co-authored-by: GGVidal <52431033+GGVidal@users.noreply.github.com>
2026-11-11 14:40:52 +08:00
Paulem 7784f3cdef fix(dialog): fall back to a GTK file chooser on Linux when no portal or zenity is available (#2394)
On Linux sessions with neither an xdg-desktop-portal nor zenity (antiX), rfd's xdg-portal backend returned nothing and every Open / Save picker silently did nothing. All pickers now go through src/platform/dialog.ts; on Linux the backend checks once for a reachable portal or zenity and otherwise shows a GTK FileChooserDialog. Other platforms and sessions keep the desktop's dialog. dialog.test.ts keeps every picker (including Move Worktree, keymap import, Mermaid export and library sources) on the wrapper.

Fixes #2386

Co-authored-by: Paulem79 <66211574+Paulem79@users.noreply.github.com>
2026-11-11 14:25:03 +08:00
misswellandmisswell b010397711 fix(lsp): mark progress tasks that stop reporting (#757)
A $/progress task that reports nothing for 3 minutes (jdtls's Maven import waiting on a repository that never answers) kept the server Busy forever, which also held wait_idle and ReferencesIncomplete::Indexing. Such a task now stays open with its last message and fraction, marked "no progress for 180 s", and no longer counts as busy; a late report clears the mark and the same task finishes normally.

Co-authored-by: misswell <28730815+misswell@users.noreply.github.com>
2026-11-11 14:18:16 +08:00
arookieofc 108da537f4 feat(agents): list and import sessions started outside OpenIDEA (#2640)
* feat(agents): list and import sessions started outside OpenIDEA

Sessions started in a terminal, another editor or the CLIs never showed
up in OpenIDEA, so users had to re-explain their work (#312). The agent
history popup now lists them under Sessions from other apps: Claude Code
transcripts and Codex rollouts on this machine, with title, working
directory and age. Importing one creates a task whose first turn loads
and replays the transcript through the existing session/load path.

* i18n: add zh translation for 'Sessions from other apps'
v0.1.41
2026-11-11 12:42:01 +08:00
Deng Liuanddengliu c658b6e59f feat(terminal): highlight visible occurrences of selected text (#2638)
Selecting text in the terminal highlights its other occurrences in the visible rows, like the editor's identifier-under-caret highlight. Only the viewport (plus a few rows of margin) is scanned, matches are cached per logical line and drawn in one overlay layer, recomputation is coalesced to one pass per animation frame, and highlights are cleared during heavy output and redrawn once it settles. Wrapped lines and wide characters map to the right cells; multi-line, very short or whitespace-only selections, the alternate buffer and Find-bar selections are skipped. Settings › Tools › Terminal › Highlight occurrences of selected text turns it off.

Co-authored-by: dengliu <5108773+dengliu@users.noreply.github.com>
2026-11-11 12:41:33 +08:00
Deng Liuanddengliu 990a1c7a87 feat(agent): retry session setup after ACP authenticate on auth error (#2637)
When session/load or session/new fails with an authentication error and the agent advertises a non-terminal `agent` authentication method in `initialize`, the IDE now calls ACP `authenticate` with that method once per session setup and retries the failed call before falling back to the sign-in error. Terminal-login methods (`_meta.terminal-auth`) keep using the existing sign-in guidance.

Co-authored-by: dengliu <5108773+dengliu@users.noreply.github.com>
2026-11-11 12:37:34 +08:00
l0ng-ai a58a7a0b8c fix(project): keep the project root icon outside workspaces (#2657)
Project type detection only runs for workspace members. A single project
root no longer takes the icon of its first matching build marker, which
labelled a Cargo + Vite repository as a Vite project.
2026-11-11 12:36:12 +08:00
arookieofc c4b47da9d1 fix(maven): link Windows path variants and warn on outside-root picks (#2639)
* fix(maven): link Windows path variants and warn on outside-root picks

The Add Maven Projects dialog hands back whatever form Windows uses:
drive-letter case may differ from the stored root and long paths come
back \?\ -prefixed, so in-root picks were silently dropped and the
button looked dead (#2626). Normalize both sides before comparing
(case-insensitively on Windows) and notify which picks were skipped
because Maven only links POMs inside the open project.

* i18n: tag Maven outside-root notice with tx and add zh entries
2026-11-11 12:33:15 +08:00
l0ng-ai 9d64134b68 fix(agents): keep list selection unbroken in agent replies (#2655)
Draw list markers as non-selectable pseudo-elements instead of native
markers. WebKit paints a selection box around each native marker, which
left a broken stripe down the list gutter when a reply was selected.
2026-11-11 12:32:27 +08:00
l0ng-ai ca945b13d2 feat(plugins): show available updates on the Installed tab (#2654)
Installed plugins with a newer, loadable marketplace version get an Update
badge in the list and an "Update to x.y.z" button in their details, which
installs it from the marketplace.
2026-11-11 12:32:22 +08:00
l0ng-ai 97c58cc808 fix(agents): keep a conversation drag-selection out of the composer (#2653)
Dragging a selection from the last message down past the conversation
highlighted the composer's text field. During such a drag everything outside
the conversation is made unselectable, but WebKit keeps editable text
selectable regardless of user-select, so the selection reached the textarea.
Text fields outside the selection scope now also drop out of hit testing while
the drag lasts.
2026-11-11 12:32:17 +08:00
l0ng-ai e158658afb fix(agents): drop the status bar's Changes toggle (#2652)
The session status bar ended with a Changes toggle that did the same as the
"N changed files" chip right below it. The chip opens and closes the Changes
pane and also shows the line counts, the pane has its own hide button, and the
status-bar toggle was disabled whenever there were no changes, so the status
bar now keeps only the Terminal button. The unused "Show changes" string goes
from the locale catalogs.
2026-11-11 12:32:12 +08:00
l0ng-ai db4bb52694 fix(agents): drop the running tool's name from the working row (#2645)
The tool in progress already shows as the last card of the conversation, and
next to it the row's elapsed time read as that tool's duration rather than the
turn's. The row now shows Working… with the turn's elapsed time, and still
shows retries and the starting state.
2026-11-11 12:31:37 +08:00
l0ng-ai 65bb39e08c test(plugins): give the official examples test a longer command budget (#2643)
The plugin_data_tools harness caps plugin commands at 250 ms to test interruption; the official examples' first command compiles and scans the project and ran over that on Windows runners. That test now uses a 10 s budget.
2026-11-11 12:08:25 +08:00
arookieofc 14e4881418 fix(debug): load run configuration .env files for debug launches (#2633)
Debug launches only copied the explicit env map into the DAP launch
arguments and dropped the configuration's .env files, which Run loads
via ide_run::envfile. Add a run_env_files command that loads the files
with the same loader over the system environment, and merge the result
under the explicit variables when building debug launches (generic,
plugin-hosted and java-debug paths); explicit variables still win and a
missing file fails the launch with the same error Run reports.

Fixes #753 (comment): .env applied in Run but ignored in Debug.
2026-11-11 10:41:16 +08:00
l0ng-ai 55bc093fe5 chore: v0.1.41 2026-11-11 09:51:47 +08:00
l0ng-ai 37ba544733 fix(run): run JUnit configurations with the build's JDK (#2627)
JUnit configurations in Maven and Gradle projects ran their build command without the project JDK, so with no JAVA_HOME the build failed with "Unable to locate a Java Runtime". apply_to_run_configs now gives junit configurations the Maven runner or Gradle build environment (JDK, MAVEN_OPTS, settings) without changing the command line, and ide-host applies it to junit configurations.
2026-11-11 09:42:19 +08:00
l0ng-ai 0fde75411a fix(search): show the results list when the preview is off (#2625)
Without the preview, `.content` has no definite height and the results pane's `flex: 1` (0% basis) collapsed it to its padding in the system WebKit of macOS 15, so Search Everywhere and Go to File showed no rows. The pane now uses an `auto` basis.
2026-11-11 09:39:59 +08:00
l0ng-ai c96206ce0c fix(agents): stop listing the ACP adapters of Claude Code and Codex; square quote button
- Settings › Coding Agents and the provider picker no longer list `claude-acp` and
  `codex-acp`: the native Claude Code and Codex drivers cover them. They still launch,
  and are listed again when an agent file customizes them or a task already uses them.
- The Quote button over a selection in a conversation sits in a small rounded-square
  toolbar instead of a round bubble.
2026-11-11 09:08:05 +08:00
Sergei Melnikov 2e4e5bb088 feat(vcs): show branch and incoming/outgoing commits beside repository roots (#2605)
Settings > Version Control > Git > "Show branch and incoming/outgoing commits
in the Project view" (off by default) shows each repository root's branch and
its outgoing/incoming commit counts beside the root in the Project view. Git is
queried only after a change inside .git or when the set of roots changes, one
round at a time.

Co-authored-by: pdasilem <74730932+pdasilem@users.noreply.github.com>
2026-11-11 08:46:16 +08:00
l0ng-ai fe69210ef0 fix(agents): clarify the MCP settings pages, their server form and import
- Rename the two MCP pages under Agents to IDE MCP Server (OpenIDEA's own
  server for outside clients) and External MCP Servers (servers coding
  agents use), and point the docs at Settings › Agents.
- Lay the Add/Configure MCP Server dialog out as a label column with
  padded, framed fields; the page's styles now use existing tokens, so
  text areas get a frame and text the right size and colour.
- Import is now Import from Project and reports how many servers it
  added from .mcp.json and .vscode/mcp.json, or that it found none.
2026-11-11 08:41:03 +08:00
l0ng-ai 0cfe0c82fe fix(settings): move plugin formatter choices into Code Style › Formatter (#2616)
Languages & Frameworks had a standalone Plugin Formatters page that, with no
plugin providing a formatter, only showed a Format on save toggle duplicating
Tools > Actions on Save and Editor > General. The per-language plugin
formatter choice now lives in Editor > Code Style > Formatter, appears only
when an enabled plugin provides a formatter, and follows the Code Style
scheme (Copy to Project / Copy to IDE include it). Docs and the plugin README
point to the new location.
2026-11-11 08:36:34 +08:00
l0ng-ai f21d895924 fix(window): zoom the window in one step instead of animating it (#2614)
Double-clicking the title bar stepped the window frame over 350 ms, waiting
for the webview to present each step; every step re-laid out the whole IDE,
so the window grew in visible jumps. It now moves to the work area, or back
to its remembered frame, in one non-animated resize. Restoring across
restarts and the AppKit unmaximize fallback are unchanged.
2026-11-11 08:29:13 +08:00
l0ng-ai e593d07405 fix(vcs): list files in the Compare tool window and open each diff in the editor (#2611)
The Compare tool window rendered the side-by-side diff inline next to the file
tree; in a sidebar the file names were cut off and the diff was a few pixels
tall. It now lists only the changed files, and double-click or Show Diff
opens the diff in an editor tab. Swap Sides and Jump to Source are
unchanged; the Changes Between dialog keeps its inline diff.
2026-11-11 08:26:29 +08:00
Sergei Melnikov daa7f96f7e feat(terminal): change the font size with Ctrl/Command+mouse wheel (#2604)
Ctrl/Command+mouse wheel in the terminal now steps its font size, like in
the editor, when Settings > Editor > General > "Change font size with
Ctrl/Command+Mouse Wheel" is on; with it off the wheel goes to the terminal.

Co-authored-by: pdasilem <74730932+pdasilem@users.noreply.github.com>
2026-11-11 08:24:18 +08:00
l0ng-ai 4f78a0f3c3 fix(tools): restart a tool's language servers in every open project after installing it (#2613)
Installing or updating a language server restarted it only in the project
the Settings window belongs to; other open projects kept the old version
running (e.g. jdtls 1.55 with 1.63 installed). A new lsp_restart_named
command restarts the servers of that name in every open project.

Refs #2507
2026-11-11 08:19:43 +08:00
l0ng-ai 7079e48716 fix(java): say why a Maven module has no code intelligence when a build plugin doesn't resolve (#2612)
When m2e cannot compute a module's build plan because a build plugin does
not resolve (e.g. a default plugin version a company mirror lacks), the module
is imported without its Java configuration and navigation finds nothing, with
only a pom.xml marker in Project Errors. jdtls now raises a one-time error
notification naming the pom and the plugin, what stops working, and the fix.

Refs #2542
2026-11-11 08:12:28 +08:00
SunZhiQiang 3e90b20d8d feat(agents): quote a mouse selection with a floating Quote button (#2519)
Ending a mouse selection in an agent conversation now shows a small floating
Quote button above it. It takes no focus, so Ctrl+C still copies, and it goes
away when the selection is cleared, the conversation scrolls, Escape is
pressed or something else is clicked. It runs the same agents.quoteReply
action as the context menu, which is unchanged.

Co-authored-by: panda-student <71381346+panda-student@users.noreply.github.com>
2026-11-11 08:05:35 +08:00
l0ng-ai 9bd38ddca6 fix(http): read environment files in the encoding the editor detects (#2609)
Environment files that were not valid UTF-8 (Notepad ANSI/GBK, UTF-16)
were skipped silently, leaving only No Environment. They are now decoded with
the editor's detection (ide_vfs::load_text); only a missing file is skipped,
other read errors are reported.

Refs #2435
2026-11-11 07:47:19 +08:00
l0ng-ai c99a22c49c fix(java): rebuild when a launch's output folders were deleted outside the IDE (#2608)
Deleting a module's output folder outside the IDE (mvn clean in a terminal or
by an agent) left JDT's incremental build state current, so the build before
a launch compiled nothing and Run failed with NoClassDefFoundError. After the
incremental build, the launch classpath is checked for folders inside the
project that no longer exist; if any, the workspace is built fully once and
the classpath resolved again. Folders still missing afterwards are remembered
so later launches don't rebuild for them.

Refs #2476
2026-11-11 07:44:28 +08:00
l0ng-ai 41262a2878 test(e2e): give the streaming agent scroll tests the slow-test timeout (#2607)
The streaming tests run close to the 30 s test timeout on CI runners and
failed E2E on unrelated PRs; they now use test.slow().
2026-11-11 07:33:54 +08:00
l0ng-ai 31f84f1261 fix(plugins): find a program named with its extension on Windows (#2602)
resolve_program appended each PATHEXT extension to the name, so a name that
already carried one ("cargo.exe") was looked up as "cargo.exe.EXE" and never
found on Windows. A name with a PATHEXT extension is now also looked up as
written.
2026-11-11 07:33:03 +08:00
梁胜峰andVeng0923 9921ff759b feat(vcs): complete the push target branch from the remote's branches (#1680)
The Push dialog's target branch field was free text only. It now completes
from the branches the chosen remote already has (typing, Up/Down, click; a
typed origin/ prefix is accepted). Prefix matches come first, then other
contiguous matches, then looser ones. Enter only takes a row once one was
chosen, free text still creates a new branch, and the "New" hint shows only
for a name the remote doesn't have. The list widens to the longest name up
to 640px, with the full name as a tooltip beyond that.

Co-authored-by: Veng0923 <+Veng0923@users.noreply.github.com>
2026-11-11 07:07:40 +08:00
Andrea Basileandandreabasile 18744b530d feat(remote): forward ports of Compose services from forwardPorts (#2603)
A dev container's forwardPorts may name a port of another Compose service
("selenium:4444"). Those entries were skipped; they are now forwarded like the
container's own ports: the relay in the container connects to the service by
name, forwards are keyed by (host, port), and the Ports window shows them as
selenium:4444 -> localhost:4444. Service ports aren't saved with the ports added
by hand, since forwardPorts forwards them on every connection.

Refs #1083

Co-authored-by: andreabasile <7715018+andreabasile@users.noreply.github.com>
2026-11-11 06:59:53 +08:00
l0ng-ai f7eeaa4459 test(i18n): JUnit stays JUnit in every locale (#2601)
The JUnit run configuration type is called JUnit in every locale, a product
name like Docker; the catalog check that Chinese and Korean texts differ from
English now allows it.
2026-11-11 06:53:41 +08:00