Repository navigation
Feature/roadmap now next soon - #16
Merged
Merged
Conversation
…l API get_diagnostics used DaemonCodeAnalyzerImpl.getHighlights — @ApiStatus.Internal, which the plugin verifier / Marketplace flags as "must not be used outside the platform." Switch to the public DocumentMarkupModel + HighlightInfo.fromRangeHighlighter to read the daemon's highlights. Same behavior; the internal-API usage is removed (verifyPlugin: verdict Compatible, no DaemonCodeAnalyzerImpl usage). Remaining internal/deprecated/experimental warnings are inherited ToolWindowFactory default methods, unavoidable for any tool-window plugin. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Inline FIM completions previously fired a model request on every keystroke with no debounce and no reuse. Add: - a configurable debounce (codesetu.inlineCompletions.debounceMs, default 200ms) that holds briefly and abandons the request the moment VS Code cancels it (a newer keystroke superseding the old one), so a burst of typing costs one request instead of many; - a single-entry cache keyed on the FIM prompt+suffix, so VS Code re-triggering at the same position reuses the last completion with no network round-trip; - the debounce/cancel primitive extracted to a vscode-free module (completionDebounce.ts) with unit tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Each fenced code block in an assistant reply now gets a small toolbar: - **Copy** writes the block to the clipboard via the host (vscode.env.clipboard), which is more reliable than webview clipboard access. - **Insert** drops the code into the editor the user was last in — replacing the current selection if there is one, otherwise inserting at the cursor. Because the chat webview holds focus, we target the tracked last-active editor (new getActiveOrLastEditor accessor in ideContext). Toolbars are attached only when a turn is final (not mid-stream), so they appear on complete code. The block source is read from the rendered <code> textContent, so it's the original un-escaped text. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Type `@` in the chat composer to open a workspace-file picker; selecting a file pins it as primary context. Pinned files render as removable chips above the input, persist across turns (and reloads, via webview state), and ride along on every send. - core: new IdeContextPayload.pinnedFiles, rendered by buildContextMarkdown as its own "Files the user pinned… (treat as primary context)" section — distinct from heuristic relatedSnippets so the model knows these were chosen deliberately. - host: pinnedFiles.ts adds searchWorkspaceFiles (feeds the picker, reusing the same secret/build excludes as auto-context) and readPinnedFiles (bounded reads, skips anything unreadable). The responder attaches pins even when automatic IDE context is turned off, since pinning is explicit. - webview: @-mention menu with keyboard nav, file chips, and per-turn delivery; stale search responses are dropped by request id. Scope note: file pins only for now; folder (@folder) pinning is a planned follow-up. Tests cover the markdown section and the search-glob builder. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…preview New codesetu.editSelection command (context menu on a selection + Command Palette). Flow: prompt for a plain-language instruction, ask the model to rewrite the selection (or the whole file when nothing is selected), preview the result as a native diff, and apply via a WorkspaceEdit only if the user clicks Apply. - editCommand.ts drives the flow and serves the proposed document through an ephemeral codesetu-edit:// TextDocumentContentProvider, so the diff is the real file vs. the proposed full text. The model is told to return raw code; any stray Markdown fence is stripped before applying. - editText.ts holds the vscode-free pure helpers (stripCodeFences, spliceText) with unit tests. This is the lighter middle ground between one-shot chat and full Agent Mode: a surgical, reviewable edit without the agent loop. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Agent Mode can now undo a whole turn's file changes. createCheckpointingHost wraps the AgentHost and snapshots each file's pre-turn content the first time the agent writes it (covering write_file and edit_file, which both funnel through host.writeFile). When a turn edits files, the chat notes how many and points at a new command, "CodeSetu: Revert Last Agent Edits", which restores every captured file — rewriting modified ones and deleting any the agent newly created — after a modal confirm listing the files. Scope: structured edits only. Side effects of `bash` commands are not tracked and are called out as out of scope. Tests cover restore, delete-new, and the empty-checkpoint case against a temp workspace. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The chat transcript was in-memory only, so a window reload lost it. Now the conversation is saved to workspace state after every turn and replayed into the webview when it remounts (via a new "ready" handshake), so users resume where they left off. Tool-call/tool-result turns are skipped on replay — only user and assistant bubbles are restored. Adds a "New chat" action (composer + menu and the "CodeSetu: New Chat" command) that aborts any in-flight turn, clears the stored history, and empties the transcript. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A small "~N ctx" chip next to the model picker shows roughly how many tokens the current turn carries — system prompt + IDE context + rolling history — estimated host-side with a dependency-free ~4-chars/token heuristic and reported to the webview before each send. Especially handy for the self-hosted / Sarvam audience watching their own inference budget. tokenEstimate.ts holds the pure estimator (estimateTokens, estimateTokensForParts, formatTokenCount) with unit tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Record the seven shipped VSCode features in the changelog Unreleased section, and flip the roadmap's Now/Next/Soon tracks to a "Shipped" section with the remaining follow-ups (JetBrains parity, @folder pinning, multi-session history, per-hunk /edit). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an activation test that runs the real extension activate() against an in-memory `vscode` mock (vitest aliases the module), with no Electron/GUI and no provider key. It asserts the extension activates without throwing, every command registers (including newChat, revertLastAgentEdits, editSelection), the codesetu-edit diff content-provider scheme registers, inline completions wire up once, and the package.json command list matches what's registered at runtime — so the manifest and activation can't drift apart. Source keeps type-checking against @types/vscode; the alias only applies under vitest. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rom VSIX The new headless-activation test harness (test-support/, vitest.config.ts) and dist/*.tsbuildinfo were being packaged into the shipped VSIX. Exclude them so the package only carries runtime artifacts (18 files vs 21). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…cache
JetBrains had no inline completion at all; this brings it to parity with the
VS Code provider. Adds:
- CodeSetuProviderClient.completeFim() → OpenAI /completions with prompt+suffix
- CodeSetuInlineCompletionProvider extends the platform
DebouncedInlineCompletionProvider, so a keystroke burst fires one request and
a superseding keystroke cancels the in-flight coroutine; a one-entry cache
serves identical re-requests without a round-trip
- buildFimContext() pure helper (mirrors the VS Code one) + unit tests
- settings: inlineCompletionsEnabled, fimMaxTokens, fim{Prefix,Suffix}Chars,
fimDebounceMs
- registered via the com.intellij.inline.completion.provider extension point
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Hover toolbar on every fenced code block in an assistant message (both the streamed and non-streamed render paths). Copy writes to the clipboard (with a execCommand fallback for webviews without the async clipboard API); Insert posts insertCode to the host, which drops the snippet into the active editor — replacing the selection if there is one, else inserting at the caret via a WriteCommandAction. Mirrors the VS Code chat feature. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Estimate the tokens carried by each turn (system prompt + rolling history, which already folds in the IDE context) with a dependency-free chars/4 heuristic, and show it as a "~N ctx" chip next to the model picker via a new `usage` webview message. Mirrors the VS Code gauge. Adds estimateTokens / estimateTokensForParts with unit tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The chat transcript is now saved per-project (PropertiesComponent, JSON) after each turn and restored when the tool window remounts — so a reload or IDE restart resumes the conversation instead of losing it. A "New chat" row in the composer menu clears the host history and the webview transcript (aborting any in-flight turn). Restore replays only user/assistant bubbles; tool-call/result turns are kept in history for context but not re-rendered. Mirrors VS Code. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wrap the agent host so every file the agent writes during a turn is snapshotted before the write lands; the snapshots are kept after the turn so the whole turn's file changes can be undone in one click via the new "Revert Last Agent Edits" action (Tools → CodeSetu). Restores modified files to their pre-turn contents and deletes files the agent created. Structured edits only (write_file / edit_file); bash side effects aren't tracked. WorkspaceCheckpoint is pure-filesystem with unit tests; the panel refreshes the VFS after a revert. Mirrors the VS Code feature. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Type "@" + a query in the composer to open a workspace-file picker (results
from the host via searchFiles/fileResults). Selecting a file pins it as a chip;
pins ride along on every send and are read into the model context as related
snippets ("Pinned: <path>" sections, now rendered by buildContextMarkdown).
Keyboard nav + click selection, unpin via the chip's ×. Host-side search prunes
excluded dirs (node_modules, build, .git, …) and bounds each pinned file to 12k
chars. Pure helpers (sanitizeFileQuery / searchWorkspaceFiles / readPinnedFiles)
have unit tests. Mirrors the VS Code @-pin feature (pins are per-session here).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
New "Edit with CodeSetu" action (Tools → CodeSetu and the editor right-click menu): prompt for an instruction, ask the model to rewrite the selection (or whole file), show the change in the IDE's diff viewer, and apply it via a WriteCommandAction only if the user accepts. Pure helpers (stripCodeFences, buildEditUserMessage, EDIT_SYSTEM_PROMPT) have unit tests. Mirrors the VS Code /edit command. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Previously the chat kept a single rolling transcript, so "New chat" discarded the prior conversation. Now each conversation is saved as its own session: - New chat starts a fresh session; the previous one is retained, not destroyed - "Chat history…" (composer + menu, and the CodeSetu: Chat History command) opens a picker of past chats — select to switch, trash icon to delete - sessions are titled from the first user message, ordered most-recent-first, capped at 50; a legacy single transcript is migrated into one session chatSessions.ts holds the pure store logic (title/upsert/remove/relativeTime) with unit tests; ChatPanel persists per active session and replays the selected one into the webview. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bump VSCode extension and JetBrains plugin to 0.4.1 and cut the 0.4.1 CHANGELOG section from Unreleased. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Document the 0.4.1 JetBrains release in plugin.xml change-notes so the Marketplace and IDE update dialog show What's New: inline FIM completions, Edit with CodeSetu, @-mention pinning, chat history, Agent Mode checkpoints, and code-block actions + context gauge. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fix the failing CI format check (prettier --check). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Now / Next / Soon — IDE feature batch + 0.4.1 release
Brings the JetBrains plugin to parity with the VSCode extension across the recent feature set, lands several new VSCode capabilities, and cuts the 0.4.1 release.
Highlights
Agent Mode (VSCode + JetBrains) — opt-in composer toggle that turns chat into a tool-calling agent. Tools: read_file, write_file, edit_file, bash, read-only list_dir / glob / grep / todo_write, and IDE-native get_diagnostics (plus find_symbol / find_references in VSCode). Edits and shell commands require approval with a diff preview; read-only tools auto-approve; Stop cancels a run. Project policy via committable .codesetu/agent.json (autoApproveCommands, denyCommands, maxIterations). Per-turn checkpoints power Revert Last Agent Edits.
Chat UX
Completions — inline FIM completions in JetBrains (ghost text); VSCode completions debounced, cancel-on-supersede, and one-entry cached.
Plan Mode, AI Skills, Voice (STT) — file-based SKILL.md runtime with slash palette; Plan Mode toggle; dictation across multiple backends (JetBrains defaults to sarvam since WebSpeech doesn't run in JCEF).