feat: improve VS Code dev flow and stabilize sidebar/chat behavior (#754)
* fix: improve session sidebar tooltip and truncation behavior - Keep new-draft tooltip anchored to its trigger button - Fix minimal-mode worktree/group header text truncation - Tune minimal-mode right padding to reduce early label clipping * fix: render reasoning through markdown pipeline - Use Streamdown rendering for reasoning in live chat mode - Remove italic styling from reasoning text - Render expanded reasoning content with MarkdownRenderer * chore: remove legacy electron dependencies - Removed unused Electron packages from root and UI manifests - Deleted obsolete Electron context menu type declaration - Regenerated lockfile after dependency cleanup * fix: handle non-repository folders in git status API - Prevent 500 errors when status is requested outside a valid Git repo - Improve repository detection using `git rev-parse --git-dir` - Reduce noisy server logs for expected non-repo status checks * fix unloaded session chat layout flicker * fix: reduce noisy TTS status polling Cache and dedupe TTS status requests, and only check provider availability when the related voice features are enabled so disabled voice setups stay quiet. * perf: throttle background PR git status refreshes * fix: improve VS Code Explorer file drop mentions in chat - Add Explorer context action to insert selected files as @mentions. - Handle Explorer drag-and-drop to prefill @file mentions instead of attachments. - Prevent duplicate plain-path text when dropping multiple files. * fix: deduplicate recent sessions in VS Code sidebar - Hide sessions from main list when already shown in recent - Apply dedup only in VS Code runtime - Keep session search behavior unchanged * feat: add true HMR dev flow for VS Code extension - Load VS Code webview from Vite dev server with React refresh preamble - Add `vscode:dev` runner that starts watchers and opens Extension Development Host - Update VS Code dev docs and scripts to use the new HMR startup flow * feat: polish VS Code session sidebar and attachment UX - Add resizable sessions sidebar in VS Code layout - Tighten session list spacing and hover behavior in VS Code - Remove bulk file/image attach success toasts while keeping error toasts
This commit is contained in:
committed by
GitHub
parent
ea6d4c4d43
commit
1231fd773e
@@ -269,6 +269,66 @@ export async function activate(context: vscode.ExtensionContext) {
|
||||
})
|
||||
);
|
||||
|
||||
context.subscriptions.push(
|
||||
vscode.commands.registerCommand('openchamber.attachExplorerToChat', async (resource?: vscode.Uri, resources?: vscode.Uri[]) => {
|
||||
const uriCandidates: vscode.Uri[] = [];
|
||||
if (Array.isArray(resources)) {
|
||||
uriCandidates.push(...resources.filter((entry): entry is vscode.Uri => entry instanceof vscode.Uri));
|
||||
}
|
||||
if (resource instanceof vscode.Uri) {
|
||||
uriCandidates.push(resource);
|
||||
}
|
||||
if (uriCandidates.length === 0) {
|
||||
const activeEditorUri = vscode.window.activeTextEditor?.document.uri;
|
||||
if (activeEditorUri) {
|
||||
uriCandidates.push(activeEditorUri);
|
||||
}
|
||||
}
|
||||
|
||||
const uniqueUris = Array.from(new Map(uriCandidates.map((uri) => [uri.toString(), uri])).values());
|
||||
const mentionPaths: string[] = [];
|
||||
const skippedEntries: string[] = [];
|
||||
|
||||
for (const uri of uniqueUris) {
|
||||
if (uri.scheme !== 'file') {
|
||||
skippedEntries.push(uri.toString());
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
const stat = await vscode.workspace.fs.stat(uri);
|
||||
if ((stat.type & vscode.FileType.Directory) !== 0) {
|
||||
skippedEntries.push(vscode.workspace.asRelativePath(uri, false));
|
||||
continue;
|
||||
}
|
||||
} catch {
|
||||
skippedEntries.push(vscode.workspace.asRelativePath(uri, false));
|
||||
continue;
|
||||
}
|
||||
|
||||
const relativePath = vscode.workspace.asRelativePath(uri, false).replace(/\\/g, '/').trim();
|
||||
if (!relativePath) {
|
||||
skippedEntries.push(uri.fsPath || uri.toString());
|
||||
continue;
|
||||
}
|
||||
mentionPaths.push(relativePath);
|
||||
}
|
||||
|
||||
if (mentionPaths.length === 0) {
|
||||
vscode.window.showWarningMessage('OpenChamber: No file selected to mention');
|
||||
return;
|
||||
}
|
||||
|
||||
await vscode.commands.executeCommand('openchamber.openSidebar');
|
||||
await new Promise((resolve) => setTimeout(resolve, 80));
|
||||
chatViewProvider?.addFileMentions(mentionPaths);
|
||||
|
||||
if (skippedEntries.length > 0) {
|
||||
vscode.window.showInformationMessage('OpenChamber: Some selected entries were skipped (folders or unsupported resources)');
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
context.subscriptions.push(
|
||||
vscode.commands.registerCommand('openchamber.explain', async () => {
|
||||
const editor = vscode.window.activeTextEditor;
|
||||
|
||||
Reference in New Issue
Block a user