Plugins could show their own content in an editor tab (open-content-tab) but
could open the diff viewer only as the reply to one of that tab's actions. A
review plugin (a merge request's files, say) had no way to show a file's
before and after.
views.open-diff opens two texts in the invoking window's diff viewer, with
optional labels and title and a file name that picks the syntax highlighting;
web views send { op: "open-diff", ... }. The SDK wraps it as host::open_diff
with a mock. The plugin API moves to 1.7.0 (1.6.0 is released) and the checked-in
components are rebuilt.
PluginApi::fetch capped response bodies at 8 MiB after reqwest's transparent decompression, so compact gzip API responses (a Kubernetes Table listing of a large cluster) failed once decompressed. The limit is now 16 MiB, the same as process output and file reads, and the error message follows the constant. Plugin network docs updated.
Co-authored-by: dengliu <5108773+dengliu@users.noreply.github.com>
Tasks in the Agents tool window can be pinned above every group, and put in groups of your own from the context menu or by dropping them on a group header. A group's menu renames or removes it; removing it returns its tasks to their status groups. Pinned tasks keep their group, so unpinning returns them to it. Groups and pins are kept per project in localStorage.
Co-authored-by: panda-student <71381346+panda-student@users.noreply.github.com>
OPENIDEA_CONFIG_DIR, OPENIDEA_DATA_DIR and OPENIDEA_LOG_DIR take an absolute path, like OPENIDEA_LOCAL_DATA_DIR, and the IDE uses <path>/<identifier> under it. Every place that resolved these directories now goes through ide_host::data_dirs (app state, invalidate caches, window zoom and window state, the MCP stdio bridge, logging, the openidea-plugin CLI), and the frontend takes the user data directory from app_info instead of Tauri's appDataDir. A relative path for the configuration or user data shows an error and exits.
Closes#2814
Database result tabs get Close, Close Others, Close All, Rename Tab, Select Next Tab and Select Previous Tab from the right-click menu or Shift+F10. They are actions, so they can also be bound in the keymap. Close, Close Others and Rename act on the clicked tab without selecting it, which keeps its hover look while the menu is open (showContextMenu takes an optional owner element). Navigation starts from the active tab and wraps through Output. Output, consoles and connections are never closed, and a renamed Query Plan keeps its title when the plan is replaced.
Blocking prompts (promptInput, chooseItem, pickItems, message dialogs) now suspend workbench shortcuts while open, so typing in Rename Tab can't edit the query console behind it. In plain text fields, Backspace/Delete with a modifier stays native text deletion.
Co-authored-by: Mr0Bread <55754540+Mr0Bread@users.noreply.github.com>
The code vision author hint showed only the name (`Thomas +2`). It now adds the leading author's last change date in the same compact form as the blame gutter (the Date Formats pattern when the override is on, the system's short date otherwise), and the tooltip gives the full date. Blame without a timestamp keeps the old label.
The line-end ("right") hint is drawn from a zero-width anchor with an absolutely positioned inner box, so a soft-wrapped line can't push it to the next row or grow the line height. It uses the Inline hints colour and the editor size minus 1. Inline blame steps past a hint, including one that appears after the blame. A lens is rebuilt when its position changes in an open editor.
Co-authored-by: muutot <92625353+muutot@users.noreply.github.com>
Closing the active database result selected the rightmost remaining result, jumping away from where the user was. It now selects the left neighbour, then the right one, and Output when none remain. Closing an inactive or missing result keeps the current selection.
Co-authored-by: Mr0Bread <55754540+Mr0Bread@users.noreply.github.com>
Once an agent reports its modes, new tasks start in the mode that approves everything (Claude Code's bypassPermissions, Codex's full-access, which also turns off the sandbox), where the Command Execution Policy never applies. Settings › Agents › Chat › New tasks start (agents.newTaskApprovals: bypass or ask) chooses; the default keeps today's behaviour. With ask, new tasks start in a mode that asks: the agent's reported mode when it isn't a bypass mode, otherwise its default/ask mode, with allow-all permissions off and Cursor approvals set to ask. The setting is user-only (in the settings layer's USER_ONLY list): project files can't set it.
Co-authored-by: rohitdanda <10144914+rohitdanda@users.noreply.github.com>
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>
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>
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.
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
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>
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>
- 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.
Plugins get a host-owned WebSocket resource (net.websocket-connect → websocket with id/send/drain/close; dropping it closes the transport). The connection is bound to the project it was opened for, needs the endpoint's net:<host> grant, uses WSS outside loopback with the shared rustls config, and is capped at eight per plugin. Request headers (secret placeholders expanded) go with the handshake, except the ones the handshake owns; an empty subprotocol requests none; the handshake is bounded by the call's I/O budget. Incoming frames queue in a bounded FIFO, signalled by the websocket-ready event. Checked-in components are rebuilt for API 1.6.
Co-authored-by: SorPuti <56741582+SorPuti@users.noreply.github.com>
jdtls builds launches with ECJ, which rejects some code javac accepts (for example a generic method call used as an if condition), so such a Maven project could not be run from the IDE. Settings › Build, Execution, Deployment › Maven › Delegate IDE build/run actions to Maven makes Automatic and Build (Make) launches of Maven modules compile with Maven, as Rebuild already did. Classes JDT wrote for sources with errors look up to date to Maven's incremental compiler, so a delegated launch JDT reports errors for recompiles everything and javac's result decides whether it starts. Editor diagnostics still come from jdtls. Off by default.
Co-authored-by: GGVidal <52431033+GGVidal@users.noreply.github.com>
Notebook cells had no language server support. Servers that advertise notebookDocumentSync (basedpyright, Ruff) now receive the notebook through LSP 3.17 notebookDocument/didOpen, didChange and didClose, with one vscode-notebook-cell document per cell, so names defined in one cell resolve in the others. Cell editors get completion, hover, diagnostics and go to declaration; a location in another cell scrolls to and selects it in that cell, and cell diagnostics show under the notebook in Problems.
Co-authored-by: rohitdanda <10144914+rohitdanda@users.noreply.github.com>
Edits to .openidea/data-sources.toml and the global data-sources.toml made outside the IDE (git pull, branch switch, a text editor) were only read when the project opened. A notify watcher on the project root, .openidea and the global data directory now reloads both files after a short settle delay, closes connections whose source changed or was removed, and emits DbSourcesChanged so the Database tool window refreshes. Saves from the IDE update the on-disk snapshot so they don't echo back as external changes.
Co-authored-by: brunobelloni <14021404+brunobelloni@users.noreply.github.com>
jdtls' bundled ECJ rejects a generic method call used directly as an if/while/for/do or ternary condition (Type mismatch: cannot convert from Object to boolean) where javac infers boolean; no ECJ release accepts it. Document the case and the workaround (assign to a boolean first) in the Java limitations, en and zh. Refs #2624.
Co-authored-by: Inf1mum <8135225+Inf1mum@users.noreply.github.com>
Deployment servers get two more types next to SFTP and local folders: FTP and
FTPS (explicit AUTH TLS, certificates checked against the system trust store).
The Connection tab takes host, port, user name (empty logs in anonymously) and
passive mode; the password is asked for on connect like an SSH password and is
kept for the session or saved in the OS credential store.
The FTP filesystem backs upload, download, sync, automatic upload, the remote
host browser and remote editing. Listings use MLSD when the server has it, else
LIST with MDTM for exact times, so sync compares timestamps reliably; uploads
keep timestamps with MFMT when "Preserve files timestamps" is on.
Closes#1200
A tool window's Options menu gets a View Mode submenu with Dock Pinned (the default), Dock Unpinned and Undock, as actions `toolwindow.viewMode.dockPinned|dockUnpinned|undock` (category Window). Unpinned and undocked windows hide when focus moves to the editor or another tool window, not to a popup, menu or dialog; an undocked window lies over the editor at its side without resizing it, and its inner edge resizes it. The mode is kept per window in the project layout, saved with Tool Window Layouts and reset by Restore Default Layout.
A menu button in a tool window now takes focus when clicked: WebKit doesn't focus clicked buttons, so the menu returned focus to the editor on close and hid a window just switched to Dock Unpinned or Undock.
Co-authored-by: formiat <29867335+formiat@users.noreply.github.com>
kmp-lsp (tree-sitter based, no JVM or Gradle import, low memory) was only an
alternative for Java. It is now also the last fallback for Kotlin, after
JetBrains' kotlin-lsp and fwcd's kotlin-language-server, so Settings >
Language Servers > Language server for Kotlin can pick it; the managed
install and its jar indexer sidecar are unchanged.
A server that is an alternative for several languages showed only the first
language's picker on its own page; it now shows one picker per language.
Closes#1017
Adds a Django Template language: .html/.txt files in a templates folder of a project with manage.py (new [[framework-files]] detection), a Lezer grammar for tags, variables, filters and comments with HTML mounted between them, block folding/indent/matching, {% %} / {{ }} / {# #} pairing, end-tag insertion and completion, per-line {# #} comments, HTML language server and Emmet in the HTML parts, a banner offering the language for HTML files with Django tags elsewhere, a fixture and docs. The built-in HTML syntax check skips Django templates, whose tags the HTML grammar reports as errors.
Refs #2581
Co-authored-by: andreabasile <7715018+andreabasile@users.noreply.github.com>
Settings no longer lists a Project Structure page; File › Project Structure…
(⌘; / Ctrl+Alt+Shift+S) opens the standalone dialog, which already had the
same sections. Arrow keys in the dialog's sidebar follow its navigation order.
- A plugin quick fix may change or open files in the project's content
roots (a project window group's members, extra Project Structure
folders), still never git's own files; before, it was disabled for
every file outside the primary root.
- `git init` (New Project › Create Git repository) uses the configured
git executable again.
- Mermaid output is cleaned before it is shown: remote image sources,
external `url()`, `@import` and address strings in its CSS are
removed, so `style`/`classDef` values and HTML labels fetch nothing.
- The reply image e2e test loads a web image only after its button is
clicked; the post-checkout hook test runs in a trusted scope.
- Capability docs list `project.write` as high risk.
The Services tool window listed services nobody added: an injected Docker connection, Spring Boot by default and every configuration that had ever run. Now only added types, connections and registries are listed, removal takes effect at once, an untouched injected Docker connection is dropped from older docker.json files, and the detail pane has a single scrollbar with console controls only (Run/Debug/Stop stay on the window toolbar).
Co-authored-by: qtvbwfn <5848026+qtvbwfn@users.noreply.github.com>
With pwsh installed but PSES_BUNDLE_PATH unset, PowerShell Editor Services was launched with a broken path and restarted in a loop with a crash notification each time. Language servers can now declare requires-env; while one of those variables is unset or empty (in the server's env and the IDE's environment) the server counts as missing and shows its install hint instead of starting. powershell.toml declares PSES_BUNDLE_PATH; the field is documented.
Qoder CN appears in the built-in agent list and starts with `qoderclicn --acp` through the existing ACP driver, with sign-in guidance and a row in the agent guides. Its icon is a 16px glyph with a dark-theme variant.
Co-authored-by: happut <2594794+happut@users.noreply.github.com>
Edit Commit Message, Fixup, Squash Into, Drop Commit, Squash Commits and Interactively Rebase from Here are no longer disabled for pushed commits. A rewrite that reaches commits already on the upstream asks for confirmation first (pushing afterwards needs a force push); on a protected branch such a rewrite is refused, while its local commits can still be rewritten. Undo Commit follows the same rule.
Co-authored-by: muutot <92625353+muutot@users.noreply.github.com>
- 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.
- 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.
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.
Oracle data sources now connect through the pure-Rust oracledb thin driver (pinned to 26.0.0-beta.5) instead of ODPI-C, so no Oracle Instant Client, ORACLE_HOME or Instant Client setting is needed; TNS descriptors and tnsnames.ora aliases still work in the Database field. The database tree gains a packages folder for Oracle schemas, and a package's DDL opens as its specification and body. The database guide's Oracle section is rewritten for the thin driver.
Co-authored-by: boenkkk <17746937+boenkkk@users.noreply.github.com>
* docs: remove unreferenced user guides
Drop docs/command-line.md, databases.md, java.md, unity-external-editor.md
and docs/media/debug.jpg. Nothing in the repository links to them.
Plugin, theme and README assets under docs/ stay.
* docs: keep only plugin docs under docs/
Remove docs/themes.md and docs/data-directories.md. Move the upstream
Atom One source revisions into THIRD_PARTY_LICENSES.md, drop the links
to the removed page, and move the README's WeChat QR code to
.github/assets/.
* docs: move plugin docs next to plugins/README.md
docs/plugins/themes.md and indexing.md move to plugins/. Update the
theme doc generator, its test, the plugin template, AGENTS.md and every
link to the new paths.
The fixed probe path could delete existing files, follow symlinks, and race
between launches. Use an exclusively created temporary file instead.
Limit migration instructions to rebuildable local entries so user data stays
in place.
Follow-up to #2373
Python docstrings were highlighted as one flat token, so :param x:, .. note::, @param, Google Args: and NumPy Parameters sections looked like the prose around them. Adds an editor.docstringFormat setting (plain, rest, epytext, google, numpy; default rest) on Languages & Frameworks › Python Interpreter, and the Python highlighter now marks tags and keywords inside docstrings only (first statement of a module, class or function; not other or byte strings), with new Docstring › Tag and Docstring › Keyword colour-scheme attributes wired through the colour scheme, ICLS import, IntelliJ theme import and editor theme tokens.
Co-authored-by: muutot <92625353+muutot@users.noreply.github.com>
- The local data directory (tools, language servers, index caches) is resolved in one place, ide_host::data_dirs::local_data_dir
- The variable must be an absolute path; a missing directory is created, and an unwritable one exits with an error instead of falling back to the system default
- Config and log directories still follow the system
- Add docs/data-directories.md
Co-authored-by: LU XIANGRUI <26499420+wildcatDownstairs@users.noreply.github.com>
The database tree lists routines in one `routines` folder. A Separate Procedures and Functions option in the Database tool window's menu (off by default, remembered across sessions) lists `procedures` and `functions` folders instead, each holding only routines of that kind, with the same overload-aware keys and object filter. Expanded folders carry over when the option is switched either way.
Co-authored-by: boenkkk <17746937+boenkkk@users.noreply.github.com>
When no language server answers a rename (none running, or no rename
support) and the indexed anchor under the caret is a code identifier,
prepare and rename now refuse instead of renaming only the plugin's
anchors, which left the declaration, imports and file name behind.
Anchors in strings, comments, attribute values or files without a
grammar keep their indexed rename.
Closes#2204
Tags inside doc comments looked like the rest of the comment text. They now get their own colours in Java, Kotlin, JavaScript, TypeScript, JSX, TSX and PHP: block and inline tags, tag values such as a `@param` name, KDoc links, and HTML markup from a fixed element list. Plain comments, strings and an `@` inside text get nothing. Colours come from new theme tokens, with entries under Settings > Editor > Color Scheme, in every built-in theme, and through .icls and IntelliJ theme import.
Only comment nodes in the visible ranges are scanned. The Kotlin tokenizer records doc comment state in its parser state, so long comments stay fast and correct.
Co-authored-by: lleviathe <95321986+lleviathe@users.noreply.github.com>
Indexed markers (Edges.markers) were always drawn with the navigation glyph,
so a plugin couldn't tell its marker kinds apart. A [[contributes.markerIcons]]
entry can now claim them by key prefix (`markers`), with an optional
`tooltip` shown above the targets. The host matches the longest prefix and
sends the declaration id with each marker; the editor resolves the icon and
the translated tooltip from the projected declaration. Manifest only, under
the existing API 1.3 gate of markerIcons.
Closes#2194
Sidebar buttons used a larger radius than the rest of the IDE, and their tooltips opened below the button, often over neighbouring stripe buttons.
Stripe buttons now use a 6px radius, and their tooltips open toward the inside of the window, with a dark background in light themes.
Siblings covered: every theme and plugin theme falls back to its base tooltip tokens, long tooltips flip correctly at the window edge, the shortcut hint stays readable, and the More button gets the same tooltip.
Co-authored-by: PLZY <41029728+PLZY@users.noreply.github.com>
Semantic tokens ignored the background, weight, italic and effect set for them in Color Scheme; only syntax tokens honoured them. Semantic roles now use the same attributes as syntax tokens, package references get their own attribute and theme token, and modifier styles keep winning over role styles, including deprecated static fields.
Default rendering changes: semantic constants are italic, as Color Scheme already declared, and package references in the light theme use the editor text colour.
Siblings covered: find matches stay above token backgrounds, and Package reference has a preview sample in Color Scheme.
Co-authored-by: shohruh-genius <7658451+shohruh-genius@users.noreply.github.com>