Skip to content

Feature/roadmap now next soon - #16

Merged
bigbansal merged 23 commits into
mainfrom
feature/roadmap-now-next-soon
Jun 18, 2026
Merged

bigbansal merged 23 commits into
mainfrom
feature/roadmap-now-next-soon

Conversation

@bigbansal

Copy link
Copy Markdown
Contributor

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

  • Multi-session history — keep past chats and switch back; New chat clears the transcript
  • Conversation persistence across reloads (per workspace)
  • @-mention file pinning into context (removable chips, persisted)
  • Copy / Insert buttons on every fenced code block
  • Context-usage gauge ("~N ctx") by the model picker
  • Edit with CodeSetu — instruction → native diff preview → apply on accept

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).

bigbansal and others added 23 commits June 10, 2026 14:16
…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>
@bigbansal
bigbansal merged commit 672506e into main Jun 18, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant