A project's .openidea/settings.toml could loosen what coding agents do without asking: auto-approve commands, empty the blocked list, pick the mode new tasks start in, and add MCP servers every agent session starts. Project settings can no longer set agentSecurity.allowedCommands or agents.defaults (user settings only, like mcpServer), and a project's agentSecurity.blockedCommands adds to the user's list instead of replacing it. Workspace MCP servers start only once the user has turned that exact definition on in Settings › Agents › External MCP Servers; servers saved there count as turned on, servers imported or changed in the file stay off until turned on. The Command Execution Policy page drops its Global / This project switch.
Co-authored-by: rohitdanda <10144914+rohitdanda@users.noreply.github.com>
Environment variables set for an agent (built-in, custom or imported from acp.json), typically API keys, were written as plain text into <config>/agents/<id>.toml. Their values now go to the OS credential store like the other saved passwords; the agent file keeps only the names. Values already in agent files move there the next time they are read. Without a credential store (a headless Linux host) a value is kept in an owner-only file in the user's data and the user is told.
Co-authored-by: rohitdanda <10144914+rohitdanda@users.noreply.github.com>
The Command Execution Policy and the permission card treated any request titled `Run …` as a shell command, but the title is free text the agent writes: a Codex request for wider sandbox access titled `Run git status` was approved by an allow entry `git status`. Only a tool call of kind `execute` now counts as a command, and only its structured `rawInput.command` is evaluated and shown; other requests ask with their own title. A command approval that also grants network access can still be blocked but is never auto-approved. Permission entries carry the command, so the card no longer parses the title; the native Codex driver puts the resolved command and any network context into rawInput.
Co-authored-by: rohitdanda <10144914+rohitdanda@users.noreply.github.com>
Inside a <dependency>'s <groupId>, <artifactId> or <version> in pom.xml the editor suggests the coordinates installed in the local repository (Settings › Maven's, else ~/.m2/repository) and, behind them, Maven Central's: the search endpoint's groups and artifacts and the artifact's published versions, cached for the session.
The local repository answers at once; Central gets one second and otherwise finishes in the background for the next request, so an unreachable Central never holds completion. Suggestions keep their order (installed first, newest versions first), and a version counts as installed only with its .pom or a .jar, not the .lastUpdated files a failed download leaves.
Fixes#2968
Co-authored-by: Inf1mum <8135225+Inf1mum@users.noreply.github.com>
PowerShell's cls left old output in the terminal's scrollback. With shell integration on (plain Windows PowerShell / PowerShell 7 starts only), Clear-Host now also writes an explicit OpenIDEA marker, which the terminal turns into a full clear (CSI 2J + 3J) in output order. Ordinary ED 2 clears, ConPTY resize repaints and other shells keep their history.
Co-authored-by: ffgenius <106022674+ffgenius@users.noreply.github.com>
Snowflake is a built-in data source kind: connection dialog, key-pair, browser single sign-on, password or token sign-in, the database tree, SQL consoles, and Snowflake-aware SQL assistance and syntax colours. The driver speaks Snowflake's session protocol over the existing reqwest + rustls stack, with no JDBC/ODBC or native library and no new package. Metadata is read with SHOW / DESCRIBE, which need no running warehouse; introspected names are kept on disk for completion.
Co-authored-by: vvnadolskyy <12991410+vvnadolskyy@users.noreply.github.com>
A plugin's [[contributes.secrets]] were listed only on its details page under Plugins; its own settings page, where users look for an API key, now lists them too, with the same fields.
Co-authored-by: lifeir <132877455+lifeir@users.noreply.github.com>
vcsChanged fires for every repository under the project, and the Changes pane re-read the task's changes (walking base..HEAD when grouped by commit) for each one. It now refreshes only when the event's root is the task's cwd or contains it.
Co-authored-by: panda-student <71381346+panda-student@users.noreply.github.com>
Console rows are virtualized and absolutely placed, and such rows widen the
scroll area only while they are mounted. Scrolling a long line out of the
rendered range removed the horizontal scrollbar, and where scrollbars take
layout space (Windows) the taller viewport moved the range back, so the end
of a finished run flickered and its scrollbar jumped.
The widest line, measured incrementally in monospace columns (tabs to their
stop, CJK and emoji as two), now sets the content's minimum width. The same
applies to the Build and Debug consoles, which place their rows the same way.
Fixes#2933
Tools › Start SSH Session ran the system `ssh -t` in a terminal, which never
used the password saved in the SSH configuration and, on Windows, could not
take a typed password either.
The session now opens a login shell over the IDE's SSH connection: the
terminal manager can attach a channel (here an SSH shell) next to local PTYs,
with the same output batching, UTF-8 decoding and exit events. A password or
passphrase that isn't saved is asked for in a dialog, and an unknown host key
asks to be trusted, before reconnecting. Closing the tab hangs the shell up.
Also: a remote process closed by this side now ends without waiting for a
close that russh never forwards, and each connection attempt gets its own IPC
channel, since a failed attempt invalidates the one it was given.
Fixes#2874
Switching a theme with several windows open flickered for seconds: the plugin theme is shared by every window, and each window put back the theme its own settings named whenever it changed, before those settings caught up. Windows now act on the plugin theme only when their own selection changes, and applying the theme already shown keeps its stylesheet instead of replacing it.
Theme previews in the gear menu, Quick Switch and Settings waited 500 ms, and on themes written with hsl() or color-mix() the terminal took up to a second to read its colours: each token was resolved through a new element inserted under the root, restyling the whole page every time. Previews now show at once, and token colours resolve through one element kept for it.
The built-in One Light and One Dark themes are removed in favour of the One Dark Pro plugin; settings naming them read as Islands Light and Islands Dark.
jdtls reports a $/progress task on almost every edit, save, search and diagnostics publish, most lasting 0-20 ms, so the status bar's language-server dot kept switching to busy and back. A running server now shows busy only after it has been busy for 500 ms, the delay background tasks already use. Other statuses and the switch back to running still show at once; only the status bar display is delayed.
A workspace member attached to a project resolved its Python interpreter only from its own settings and folder, so a member with no Python of its own ran on the PATH python while the status widget named the primary project's interpreter. Members now inherit the primary project's interpreter when they have none (explicit setting, then virtualenv or pin, as a module without its own SDK inherits the project SDK), sdk_python_effective answers with the same chain, and the status widget asks about the open file's member.
A configured interpreter whose executable was deleted is skipped during resolution, so runs fall back to the project virtualenv or the inherited interpreter. Settings mark it Invalid (decided from what the backend resolves, so working custom paths are not flagged), the status widget warns when nothing resolves, and starting a Python configuration on a missing path names the cause.
Co-authored-by: muutot <92625353+muutot@users.noreply.github.com>
Completing an XML tag inserts the server's snippet <tag>$1</tag>$0. Enter moved to the next snippet field in every snippet, so it jumped to the end of the line instead of splitting the tag. Enter now moves between fields only in live templates and Emmet; in a completion's snippet Tab does and Enter inserts a line break.
Closes#2951
A worktree task's Changes pane only listed the cumulative diff since the task started, so work the agent committed was mixed into the current changes. It now groups the task's work: uncommitted files compared with HEAD, and each commit made since the task started with the files it changed against its first parent. Double-clicking a commit or one of its files opens the parent-to-commit diff; commit files are history and are not rolled back. Rollback in this view restores files to HEAD. Accept still brings over the task's whole work, committed or not. View Options > Group By > Commit switches back to the flat since-start list; tasks in the project's own checkout keep that list.
Co-authored-by: panda-student <71381346+panda-student@users.noreply.github.com>
A chmod-only change is a real modification: git status lists it and a commit records the new mode, so status keeps reporting it (core.fileMode=false still hides it). The diff viewer used to show "Contents are identical" with no explanation; when both texts are equal but the git modes differ it now says "File mode changed: 100644 → 100755". The modes come from a new vcs_file_mode command (index/tree entry mode for revisions, worktree permissions for the working copy).
Closes#2853
Co-authored-by: a-rookie-of-C-language <186315048+a-rookie-of-C-language@users.noreply.github.com>
With tabs placed left or right, the tab column was sized to its longest label (140–260 px) and never shrank, so in a narrow split group a long file name left the editor almost no room. The column is now capped at 40% of its group; long labels truncate and keep the full path in the tooltip. Top and bottom placement are unchanged.
Co-authored-by: Mr0Bread <55754540+Mr0Bread@users.noreply.github.com>
WebKit maps Home / End in a text box to scrolling and leaves the caret where it is, so they did nothing in the agent composer on macOS. The composer now moves the caret to the start or end of the visual line (Shift extends the selection); with ⌘, Ctrl or Alt the keys keep their native behaviour, and other platforms are unchanged.
Co-authored-by: EjaYF <9842286+EjaYF@users.noreply.github.com>
A Maven project outside the opened root can be linked explicitly: Add Maven Projects accepts an external pom.xml, and Project Structure › Modules › Import Module from Existing Sources (also on the project root's context menu) imports a directory with a pom.xml. The linked project becomes an extra project-tree root and an independent Maven project with its own working directory and wrapper; links are stored as canonical paths, survive reloads and reopening, and unlinking removes only the association. The opened project's jdtls gets the external directory as an extra workspace folder, keeping automatic discovery under the opened root. Neither POM is edited.
Merged with main's aggregation fix: a project an aggregator lists later becomes its module only when the aggregator lies inside the opened root and is not on the same chain, so a linked sibling does not take over the opened project.
Closes#2884
Co-authored-by: hwlLL0703 <94688503+hwlLL0703@users.noreply.github.com>
The HTTP Client tool window opened only once a response arrived, so slow requests looked unanswered. It now opens as the request is sent, and the response pane shows the request line, a progress indicator and Stop Request until the response replaces it.
Fixes#2937
The New Project dialog gets a resize grip and remembers its size; the template list and settings pane grow with it. It opens at the same default size as before.
Part of #2903
Prisma schema files get highlighting, structure view and folding from the bundled tree-sitter-prisma-io grammar, a file icon, and code insight from @prisma/language-server (installable from the IDE). The language definition provides the `prisma` settings section the server reads before each validation; without it the server crashed.
Closes#2926
With the modal commit interface, Commit… (⌘K) and Commit and Push… invoked from Local Changes include just the selected files, and the commit message field takes focus. Invoked elsewhere, the dialog starts with the default inclusion instead of the previous dialog's leftovers.
Fixes#2923
Run code cleanup applied one source.fixAll action, so in TypeScript files vtsls's won and ESLint's was dropped; fix-all now runs once per server that offers it, each asked again after the previous edit. ESLint rejected every fix-all request because the built-in settings lacked codeActionOnSave; all language files attaching eslint now send { mode = "all", rules = [] }. Failed save actions are logged.
Fixes#2927Fixes#2928
Matches in the Find in Files and Search Everywhere preview use the editor scheme's search result background (IntelliJ's SEARCH_RESULT_ATTRIBUTES, new token --bg-search-result with values for every built-in theme) instead of the lists' SearchMatch yellow, as a background only so syntax colours stay readable. SEARCH_RESULT_ATTRIBUTES now imports into the new token; --bg-search-match keeps coming from SearchMatch.
Closes#2858
Co-authored-by: formiat <29867335+formiat@users.noreply.github.com>
CodeMirror leaves the caret before an inserted snippet that has no fields, so accepting a field like `val` at `root.` put the caret before it. LSP snippets without tab stops, choices or unresolved variables now get a final ${0} stop; SQL functions without parameters had the same problem and get one too. Snippets with fields keep their selection.
Closes#2936
Co-authored-by: jiejie1133 <116809768+jiejie1133@users.noreply.github.com>
A file added to the index and then deleted from disk is listed nowhere in the Commit view, but it stayed in the index copy the commit is made from, so committing other files committed it too. Such staged entries are now excluded like unchecked staged files.
Fixes#2908
Near the window edge CodeMirror caps the hover tooltip's height, but the documentation section kept its own 380px maximum and ran past the popup's border. The tooltip is now a flex column whose sections shrink and scroll within it.
Fixes#2910
Javadoc, KDoc, JSDoc, rustdoc and other /** and /// comments can be drawn in place as formatted documentation and switched back to source: globally (Settings › Editor › General › Appearance › Render documentation comments, off by default), per file (View › Active Editor › Render Documentation Comments, gutter menu, editor.toggleRenderedDocs) and per comment (gutter icon on hover, editor.toggleRenderedView at the caret). Comments are rescanned only once typing pauses and the Markdown renderer loads on first use.
Co-authored-by: Clarence404 <36807519+Clarence404@users.noreply.github.com>
The Services tool window's stripe button shows how many listed services are running: one per configuration (a run and its attached debugger count once), leaving out types not added, Docker kinds and hidden configurations; hidden at zero. The run provider keeps the count in a shared store, so the Services feature renders it without importing the run feature.
Co-authored-by: qtvbwfn <5848026+qtvbwfn@users.noreply.github.com>
Java Debug launches through java-debug in jdtls, which bypasses the Run process that echoes its command line. Debug now prints the equivalent java … -cp … Main … command after the build and classpath resolution, so Debug and Run output stay comparable.
Co-authored-by: kradme <17811095+kradme@users.noreply.github.com>
With several Git repositories, each repository node in the Commit tool window now shows its current branch as a dimmed hint after the name (the short HEAD commit when detached), with the branch widget's branch / commit icon, from the heads the VCS store already loads.
Closes#2912
Co-authored-by: mansur-akhmadi <10739460+mansur-akhmadi@users.noreply.github.com>
Settings said the language server JDK needs "jdtls 21+", but recent jdtls bundles an Eclipse platform that needs JDK 25, so a JDK 21 chosen there was rejected at launch. The requirement is now read from the installed jdtls (new jdtls_required_java command, the same bundle scan as the launch check): the hint states it, flags a too-old selection, the JDK picker marks too-old JDKs, and Download JDK preselects that version.
Run and Debug consoles can colour whole lines by detected log level (ERROR, WARN, INFO, DEBUG, TRACE), reusing the log editor mode's level vocabulary; ANSI colours the program prints win. Settings › Build, Execution, Deployment › Console has the toggle and one colour per level (scheme tokens by default). Off by default, since IDEA's console doesn't colour lines by level.
Co-authored-by: qtvbwfn <5848026+qtvbwfn@users.noreply.github.com>
On macOS ⌃N / ⌃P are line down / up in text, so with the lookup open they moved the caret instead of the selection. With a lookup open they now move its selection, as ↓ / ↑ do.
Fixes#2905
The debug console used the UI mono font and size instead of the console font the Run window resolves from Tools › Terminal › Font (or Editor › Font). Both consoles now take family, size and row height from a shared useConsoleFont() hook, the debug console re-measures its rows when the size changes, and its evaluate input uses the same font.
Closes#2844
Co-authored-by: a-rookie-of-C-language <186315048+a-rookie-of-C-language@users.noreply.github.com>
A plugin indexer batch that failed left its paths dirty forever, so every later Find Usages and rename failed with "Plugin indexes are still updating". Failed paths are now retried before the next usages or refactoring; usages go ahead with a "may be incomplete" note while an index is not up to date, and refactoring refuses with a message that says the index failed.
Fixes#2913
A blank console row rendered a U+200B text node to keep its height, and selections and Copy took that node as content. Blank rows now get their height from the row box (minHeight = rowHeight) and render no text.
Closes#2878
Co-authored-by: aconeshana <52204454+aconeshana@users.noreply.github.com>
Repaint the pane when its selection changes, so a shrinking selection
leaves no stripe between blocks, and clamp a double or triple click
selection to the pane before it is painted into the next field.
- Commit panel: the action row wraps at narrow widths, so "Commit and Push…"
moves to its own line instead of being cut to "Commit ..."; its tooltip
names the action as well as the shortcut.
- Console Colors preview: four short lines, so the bright colors no longer
run past the preview's right edge.
- Language server and debugger install hints are plain text: drop the
Markdown backticks that showed up literally.
- Appearance: "Accent color", matching the rest of the UI.
Backspace, Delete and the arrow keys treated any @path or /command under the caret
as one tag, so backspacing while typing a path removed the whole path. The tag being
typed (or a folder entered with Tab) now edits character by character; a completed
reference still deletes as a unit.
Deciding whether < starts a generic list in Kotlin/C# walked every token from the file start and sliced the text to the caret on each keystroke (quadratic); it now resolves the token before the caret's spaces directly.
Go to Declaration / Implementation kept "Finding navigation target…" only while the server was asked, so a quick answer followed by the chooser's row preparation showed nothing for up to ~100 ms, and Go to Implementation dropped the hint when its first results arrived. The hint now lasts until the editor reaches the target or the chooser opens.
Run File configurations for TypeScript/JavaScript run with Bun now debug through bun-dap, a DAP adapter for Bun registered as a built-in debugger (TCP, installed by the user). Adds a Bun run configuration type (run/test, script, arguments, working directory) with its icon; the bun-dap launch takes the program and its arguments from the `bun run <file> …` command line. Bun configurations using js-debug still explain why they can't be debugged.
Co-authored-by: morf-bls <141532471+morf-bls@users.noreply.github.com>
Plugins can subscribe to committed local edits of open project documents with subscribe-paths("document-changed", globs) and receive versioned UTF-16 replacements. editor.document-at and editor.apply-edits-at read and edit an explicitly named open project document from background events; stale versions are rejected without changing the editor, and these edits are non-undoable and not re-emitted as local changes.
document-changed is delivered only for named paths and only to plugins granted project.read and editor.read. Also delivers websocket-ready events to plugins from the frontend runtime. API 1.6.
Co-authored-by: SorPuti <56741582+SorPuti@users.noreply.github.com>