mirror of
https://github.com/andrepimenta/claude-code-chat.git
synced 2025-12-08 20:19:43 +00:00
Compare commits
4 Commits
683148c4cf
...
2f792e7158
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2f792e7158 | ||
|
|
97920395d1 | ||
|
|
2e640fa20a | ||
|
|
5136985474 |
32
CHANGELOG.md
32
CHANGELOG.md
@@ -4,6 +4,38 @@ All notable changes to the "claude-code-chat" extension will be documented in th
|
|||||||
|
|
||||||
Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
|
Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
|
||||||
|
|
||||||
|
## [1.1.0] - 2025-12-06
|
||||||
|
|
||||||
|
### 🚀 Features Added
|
||||||
|
- **Install Modal**: Added installation flow for users without Claude Code CLI
|
||||||
|
- Auto-detects when Claude Code is not installed
|
||||||
|
- One-click installation with progress indicator
|
||||||
|
- Platform-specific installation commands
|
||||||
|
- **Diff Viewer Improvements**:
|
||||||
|
- Show full diff in Edit, MultiEdit, and Write tool use messages
|
||||||
|
- Add "Open Diff" button to open VS Code's native side-by-side diff editor
|
||||||
|
- Add truncation with expand button for long diffs
|
||||||
|
- Optimize diff storage and improve Open Diff button behavior
|
||||||
|
- **Processing Indicator**: New morphing orange dot animation while Claude is working
|
||||||
|
- **Subscription Detection**: Added usage badge to status bar showing plan type (Pro, Max) or API cost
|
||||||
|
- **Conversation Compacting**: Handle `/compact` command in chat with status messages and token reset
|
||||||
|
- **Permission System**: Migrated from MCP file-based to stdio-based permission prompts
|
||||||
|
- **Plan Mode**: Now uses native `--permission-mode plan` CLI flag for cleaner implementation
|
||||||
|
|
||||||
|
### 🐛 Bug Fixes
|
||||||
|
- Fixed diff line alignment by removing ::before pseudo-elements
|
||||||
|
- Fixed auto-scroll for diff tool results
|
||||||
|
- Strip tool_use_error tags from error messages
|
||||||
|
- Improved process termination handling
|
||||||
|
|
||||||
|
### 🔧 Technical Improvements
|
||||||
|
- Run /compact command in chat instead of spawning terminal
|
||||||
|
- Improved terminal and UI experience
|
||||||
|
- Updated diff icon colors
|
||||||
|
|
||||||
|
### 📊 Analytics
|
||||||
|
- Added Umami analytics events to track install flow (modal shown, started, success/failed)
|
||||||
|
|
||||||
## [1.0.7] - 2025-10-01
|
## [1.0.7] - 2025-10-01
|
||||||
|
|
||||||
### 🚀 Features Added
|
### 🚀 Features Added
|
||||||
|
|||||||
@@ -47,6 +47,13 @@ Ditch the command line and experience Claude Code like never before. This extens
|
|||||||
- Real-time cost and token tracking
|
- Real-time cost and token tracking
|
||||||
- Session statistics and performance metrics
|
- Session statistics and performance metrics
|
||||||
|
|
||||||
|
### 📝 **Inline Diff Viewer** ⭐ **NEW IN V1.1**
|
||||||
|
- **Full Diff Display** - See complete file changes directly in Edit, MultiEdit, and Write messages
|
||||||
|
- **Open in VS Code Diff** - One-click button to open VS Code's native side-by-side diff editor
|
||||||
|
- **Smart Truncation** - Long diffs are truncated with an expand button for better readability
|
||||||
|
- **Syntax Highlighting** - Proper code highlighting in diff views
|
||||||
|
- **Visual Change Indicators** - Clear green/red highlighting for additions and deletions
|
||||||
|
|
||||||
### 🔌 **MCP Server Management** ⭐ **NEW IN V1.0**
|
### 🔌 **MCP Server Management** ⭐ **NEW IN V1.0**
|
||||||
- **Popular Servers Gallery** - One-click installation of common MCP servers
|
- **Popular Servers Gallery** - One-click installation of common MCP servers
|
||||||
- **Custom Server Creation** - Build and configure your own MCP servers
|
- **Custom Server Creation** - Build and configure your own MCP servers
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "claude-code-chat",
|
"name": "claude-code-chat",
|
||||||
"displayName": "Chat for Claude Code",
|
"displayName": "Chat for Claude Code",
|
||||||
"description": "Beautiful Claude Code Chat Interface for VS Code",
|
"description": "Beautiful Claude Code Chat Interface for VS Code",
|
||||||
"version": "1.0.7",
|
"version": "1.1.0",
|
||||||
"publisher": "AndrePimenta",
|
"publisher": "AndrePimenta",
|
||||||
"author": "Andre Pimenta",
|
"author": "Andre Pimenta",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|||||||
@@ -463,11 +463,8 @@ class ClaudeChatProvider {
|
|||||||
const configThink = vscode.workspace.getConfiguration('claudeCodeChat');
|
const configThink = vscode.workspace.getConfiguration('claudeCodeChat');
|
||||||
const thinkingIntensity = configThink.get<string>('thinking.intensity', 'think');
|
const thinkingIntensity = configThink.get<string>('thinking.intensity', 'think');
|
||||||
|
|
||||||
// Prepend mode instructions if enabled
|
// Prepend thinking mode instructions if enabled
|
||||||
let actualMessage = message;
|
let actualMessage = message;
|
||||||
if (planMode) {
|
|
||||||
actualMessage = 'PLAN FIRST FOR THIS MESSAGE ONLY: Plan first before making any changes. Show me in detail what you will change and wait for my explicit approval in a separate message before proceeding. Do not implement anything until I confirm. This planning requirement applies ONLY to this current message. \n\n' + message;
|
|
||||||
}
|
|
||||||
if (thinkingMode) {
|
if (thinkingMode) {
|
||||||
let thinkingPrompt = '';
|
let thinkingPrompt = '';
|
||||||
const thinkingMesssage = ' THROUGH THIS STEP BY STEP: \n'
|
const thinkingMesssage = ' THROUGH THIS STEP BY STEP: \n'
|
||||||
@@ -548,6 +545,11 @@ class ClaudeChatProvider {
|
|||||||
args.push('--mcp-config', this.convertToWSLPath(mcpConfigPath));
|
args.push('--mcp-config', this.convertToWSLPath(mcpConfigPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add plan mode if enabled
|
||||||
|
if (planMode) {
|
||||||
|
args.push('--permission-mode', 'plan');
|
||||||
|
}
|
||||||
|
|
||||||
// Add model selection if not using default
|
// Add model selection if not using default
|
||||||
if (this._selectedModel && this._selectedModel !== 'default') {
|
if (this._selectedModel && this._selectedModel !== 'default') {
|
||||||
args.push('--model', this._selectedModel);
|
args.push('--model', this._selectedModel);
|
||||||
@@ -2714,17 +2716,29 @@ class ClaudeChatProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _openUsageTerminal(usageType: string): void {
|
private _openUsageTerminal(usageType: string): void {
|
||||||
|
// Get WSL configuration
|
||||||
|
const config = vscode.workspace.getConfiguration('claudeCodeChat');
|
||||||
|
const wslEnabled = config.get<boolean>('wsl.enabled', false);
|
||||||
|
const wslDistro = config.get<string>('wsl.distro', 'Ubuntu');
|
||||||
|
|
||||||
const terminal = vscode.window.createTerminal({
|
const terminal = vscode.window.createTerminal({
|
||||||
name: 'Claude Usage',
|
name: 'Claude Usage',
|
||||||
location: { viewColumn: vscode.ViewColumn.One }
|
location: { viewColumn: vscode.ViewColumn.One }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let command: string;
|
||||||
if (usageType === 'plan') {
|
if (usageType === 'plan') {
|
||||||
// Plan users get live usage view
|
// Plan users get live usage view
|
||||||
terminal.sendText('npx -y ccusage blocks --live');
|
command = 'npx -y ccusage blocks --live';
|
||||||
} else {
|
} else {
|
||||||
// API users get recent usage history
|
// API users get recent usage history
|
||||||
terminal.sendText('npx -y ccusage blocks --recent --order desc');
|
command = 'npx -y ccusage blocks --recent --order desc';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wslEnabled) {
|
||||||
|
terminal.sendText(`wsl -d ${wslDistro} bash -ic "${command}"`);
|
||||||
|
} else {
|
||||||
|
terminal.sendText(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
terminal.show();
|
terminal.show();
|
||||||
|
|||||||
@@ -1613,6 +1613,8 @@ const getScript = (isTelemetryEnabled: boolean) => `<script>
|
|||||||
if (main) main.style.display = 'flex';
|
if (main) main.style.display = 'flex';
|
||||||
if (progress) progress.style.display = 'none';
|
if (progress) progress.style.display = 'none';
|
||||||
if (success) success.style.display = 'none';
|
if (success) success.style.display = 'none';
|
||||||
|
|
||||||
|
sendStats('Install modal shown');
|
||||||
}
|
}
|
||||||
|
|
||||||
function hideInstallModal() {
|
function hideInstallModal() {
|
||||||
@@ -1620,6 +1622,8 @@ const getScript = (isTelemetryEnabled: boolean) => `<script>
|
|||||||
}
|
}
|
||||||
|
|
||||||
function startInstallation() {
|
function startInstallation() {
|
||||||
|
sendStats('Install started');
|
||||||
|
|
||||||
// Hide main content, show progress
|
// Hide main content, show progress
|
||||||
document.getElementById('installMain').style.display = 'none';
|
document.getElementById('installMain').style.display = 'none';
|
||||||
document.getElementById('installProgress').style.display = 'flex';
|
document.getElementById('installProgress').style.display = 'flex';
|
||||||
@@ -1637,9 +1641,11 @@ const getScript = (isTelemetryEnabled: boolean) => `<script>
|
|||||||
successEl.style.display = 'flex';
|
successEl.style.display = 'flex';
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
|
sendStats('Install success');
|
||||||
successEl.querySelector('.install-success-text').textContent = 'Installed';
|
successEl.querySelector('.install-success-text').textContent = 'Installed';
|
||||||
successEl.querySelector('.install-success-hint').textContent = 'Send a message to get started';
|
successEl.querySelector('.install-success-hint').textContent = 'Send a message to get started';
|
||||||
} else {
|
} else {
|
||||||
|
sendStats('Install failed');
|
||||||
// Show error state
|
// Show error state
|
||||||
successEl.querySelector('.install-check').style.display = 'none';
|
successEl.querySelector('.install-check').style.display = 'none';
|
||||||
successEl.querySelector('.install-success-text').textContent = 'Installation failed';
|
successEl.querySelector('.install-success-text').textContent = 'Installation failed';
|
||||||
|
|||||||
Reference in New Issue
Block a user