Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.5.2] - 2026-06-16

### Fixed

- 📋 **Artifact cards no longer stretch or clip text.** The small preview cards that appear when the AI creates a file now have a consistent, fixed height. Long titles and previews are properly truncated instead of pushing the card taller or overflowing.

## [0.5.1] - 2026-06-16

### Added
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ Bring your own API key. Works with OpenAI, Anthropic, Ollama, or any OpenAI-comp
| | |
|---|---|
| 💬 **Chat** | Built-in AI with streaming responses and tool calling. Not just conversation: it can act. |
| 🎙️ **Voice mode** | Talk to the AI hands-free. It listens, responds, and reads the answer back to you. The mic re-arms so you can have a real conversation. |
| 🎙️ **Voice mode** | Talk to your computer hands-free. It listens, responds, and reads the answer back to you. The mic re-arms so you can have a real conversation. |
| 🔊 **Text-to-speech** | AI responses read aloud, sentence by sentence. Works with any OpenAI-compatible TTS API. |
| 💭 **Reasoning** | See what the AI is thinking. Models like o3 and Claude show their chain of thought as expandable sections. |
| 🔧 **File tools** | AI reads, writes, edits, and searches your codebase directly. |
Expand Down
18 changes: 10 additions & 8 deletions cptr/frontend/src/lib/components/chat/AssistantMessage.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -373,11 +373,11 @@
{@const artifact = displayItem.item}
{@const preview = (artifact.content || '').replace(/^#.*\n*/m, '').trim()}
<button
class="w-full min-w-0 overflow-hidden text-left my-2 rounded-xl cursor-pointer
class="block w-full min-w-0 overflow-hidden text-left my-2 rounded-xl cursor-pointer
border border-gray-200 dark:border-white/8
hover:border-gray-300 dark:hover:border-white/12
hover:bg-gray-50/50 dark:hover:bg-white/[0.03]
transition-colors duration-150"
transition-colors duration-150 {preview ? 'h-[70px]' : 'h-[38px]'}"
onclick={() => {
const ws = get(currentWorkspace);
if (ws && artifact.path) {
Expand All @@ -386,17 +386,19 @@
}
}}
>
<div class="min-w-0 px-3 py-2.5">
<div class="h-full min-w-0 overflow-hidden px-3 py-2.5">
<div
class="line-clamp-1 max-h-4 text-xs leading-4 font-medium text-gray-800 dark:text-gray-100 [overflow-wrap:anywhere]"
class="h-4 truncate text-xs leading-4 font-medium text-gray-800 dark:text-gray-100"
>
{artifact.title || $t('chat.artifact')}
</div>
{#if preview}
<div
class="line-clamp-2 max-h-8 text-[10px] leading-4 font-normal text-gray-400 dark:text-gray-500 [overflow-wrap:anywhere]"
>
{preview}
<div class="h-8 overflow-hidden">
<div
class="line-clamp-2 break-words text-[10px] leading-4 font-normal text-gray-400 dark:text-gray-500"
>
{preview}
</div>
</div>
{/if}
</div>
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "cptr"
version = "0.5.1"
version = "0.5.2"
description = "Your computer, from anywhere. Code, manage, and control your machine from the web."
license = {file = "LICENSE"}
readme = "README.md"
Expand Down
Loading