generated from nhcarrigan/template
style: fix prettier formatting issues
- Format RELEASE_NOTES_v0.3.0.md
- Format AttachmentPreview.svelte
- Format InputBar.svelte
All checks now passing! ✨
This commit is contained in:
@@ -0,0 +1,74 @@
|
|||||||
|
# Hikari Desktop v0.3.0 Release Notes
|
||||||
|
|
||||||
|
## New Features
|
||||||
|
|
||||||
|
### AskUserQuestion Tool Support (#51)
|
||||||
|
|
||||||
|
- Claude can now ask you questions with multiple choice options during conversations
|
||||||
|
- A dedicated modal appears with answer choices and support for custom responses
|
||||||
|
- Answers are seamlessly integrated back into the conversation context
|
||||||
|
|
||||||
|
### Slash Commands
|
||||||
|
|
||||||
|
- `/cd <path>` - Change the working directory while preserving conversation context (#55)
|
||||||
|
- `/search <query>` - Search and highlight matches within the conversation (#32)
|
||||||
|
- `/skill <name> [data]` - Invoke Claude Code skills from `~/.claude/skills/` (#57)
|
||||||
|
- `/new`, `/clear`, `/rename`, `/help` commands for conversation management (#6)
|
||||||
|
|
||||||
|
### Auto-Update Checker (#17)
|
||||||
|
|
||||||
|
- Automatically checks for new releases on startup
|
||||||
|
- Notification appears when a newer version is available
|
||||||
|
- Can be disabled in settings
|
||||||
|
|
||||||
|
### Font Size & Zoom (#19)
|
||||||
|
|
||||||
|
- Adjust font size with keyboard shortcuts: `Ctrl++`, `Ctrl+-`, `Ctrl+0`
|
||||||
|
- Font size slider in settings (10-24px range)
|
||||||
|
- Preference persists between sessions
|
||||||
|
|
||||||
|
### Resizable Character Panel (#10)
|
||||||
|
|
||||||
|
- Drag the divider between the character panel and terminal to resize
|
||||||
|
- Panel width is saved and restored on app restart
|
||||||
|
- Sprite now uses full height for better proportions
|
||||||
|
|
||||||
|
### Input History Navigation (#13)
|
||||||
|
|
||||||
|
- Use up/down arrows to navigate through previous messages and commands
|
||||||
|
- Arrow keys only navigate history when input is empty - otherwise they move the cursor (#58)
|
||||||
|
|
||||||
|
### Keyboard Shortcuts (#21)
|
||||||
|
|
||||||
|
- `Ctrl+N` - New conversation
|
||||||
|
- `Ctrl+W` - Close current tab
|
||||||
|
- `Ctrl+Tab` / `Ctrl+Shift+Tab` - Switch between tabs
|
||||||
|
- `Ctrl+L` - Clear conversation
|
||||||
|
- `Ctrl+,` - Open settings
|
||||||
|
|
||||||
|
### Always On Top Toggle (#28)
|
||||||
|
|
||||||
|
- Pin the window to stay above other applications
|
||||||
|
- Toggle in settings
|
||||||
|
|
||||||
|
## Improvements
|
||||||
|
|
||||||
|
### UI/UX
|
||||||
|
|
||||||
|
- Resizable chat input with drag handle (expands upward)
|
||||||
|
- Send button properly aligned with input field
|
||||||
|
- Markdown rendering with syntax-highlighted code blocks (#31, #33)
|
||||||
|
- Light mode text colors improved for better readability
|
||||||
|
- Scroll position persists per conversation tab when switching
|
||||||
|
- Confirmation modal when closing connected tabs
|
||||||
|
- Links in chat now open in default browser (#54)
|
||||||
|
- Spaces allowed when renaming tabs (#52)
|
||||||
|
|
||||||
|
### State Management
|
||||||
|
|
||||||
|
- Stats (tokens, cost) persist across session changes and only reset on disconnect (#59)
|
||||||
|
- Multiple tabs can now request permissions simultaneously without conflicts
|
||||||
|
|
||||||
|
## Closed Issues
|
||||||
|
|
||||||
|
#6, #10, #13, #17, #19, #21, #28, #31, #32, #33, #51, #52, #54, #55, #57, #58, #59
|
||||||
@@ -29,7 +29,9 @@
|
|||||||
{#if attachments.length > 0}
|
{#if attachments.length > 0}
|
||||||
<div class="attachment-preview-container">
|
<div class="attachment-preview-container">
|
||||||
<div class="attachment-header">
|
<div class="attachment-header">
|
||||||
<span class="attachment-count">{attachments.length} attachment{attachments.length !== 1 ? "s" : ""}</span>
|
<span class="attachment-count"
|
||||||
|
>{attachments.length} attachment{attachments.length !== 1 ? "s" : ""}</span
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="attachment-list">
|
<div class="attachment-list">
|
||||||
{#each attachments as attachment (attachment.id)}
|
{#each attachments as attachment (attachment.id)}
|
||||||
@@ -189,7 +191,10 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transition: opacity 0.2s, background 0.2s, color 0.2s;
|
transition:
|
||||||
|
opacity 0.2s,
|
||||||
|
background 0.2s,
|
||||||
|
color 0.2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.attachment-item:hover .remove-button {
|
.attachment-item:hover .remove-button {
|
||||||
|
|||||||
@@ -215,9 +215,7 @@
|
|||||||
let messageWithAttachments = formattedMessage;
|
let messageWithAttachments = formattedMessage;
|
||||||
if (currentAttachments.length > 0) {
|
if (currentAttachments.length > 0) {
|
||||||
const attachmentPaths = currentAttachments.map((a) => a.path).join("\n");
|
const attachmentPaths = currentAttachments.map((a) => a.path).join("\n");
|
||||||
const attachmentPrefix = formattedMessage
|
const attachmentPrefix = formattedMessage ? `${formattedMessage}\n\n` : "";
|
||||||
? `${formattedMessage}\n\n`
|
|
||||||
: "";
|
|
||||||
messageWithAttachments = `${attachmentPrefix}[Attached files - please read these files to see their contents:]\n${attachmentPaths}`;
|
messageWithAttachments = `${attachmentPrefix}[Attached files - please read these files to see their contents:]\n${attachmentPaths}`;
|
||||||
|
|
||||||
// Log attached files to the output
|
// Log attached files to the output
|
||||||
@@ -725,12 +723,7 @@ User: ${formattedMessage}`;
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="button-wrapper">
|
<div class="button-wrapper">
|
||||||
<button
|
<button type="button" onclick={handleFilePicker} class="attach-button" title="Attach files">
|
||||||
type="button"
|
|
||||||
onclick={handleFilePicker}
|
|
||||||
class="attach-button"
|
|
||||||
title="Attach files"
|
|
||||||
>
|
|
||||||
<svg
|
<svg
|
||||||
width="20"
|
width="20"
|
||||||
height="20"
|
height="20"
|
||||||
@@ -759,7 +752,9 @@ User: ${formattedMessage}`;
|
|||||||
{:else}
|
{:else}
|
||||||
<button
|
<button
|
||||||
type="submit"
|
type="submit"
|
||||||
disabled={!isConnected || isSubmitting || (!inputValue.trim() && attachments.length === 0)}
|
disabled={!isConnected ||
|
||||||
|
isSubmitting ||
|
||||||
|
(!inputValue.trim() && attachments.length === 0)}
|
||||||
class="send-button bg-[var(--accent-primary)] hover:bg-[var(--accent-secondary)]
|
class="send-button bg-[var(--accent-primary)] hover:bg-[var(--accent-secondary)]
|
||||||
disabled:opacity-50 disabled:cursor-not-allowed"
|
disabled:opacity-50 disabled:cursor-not-allowed"
|
||||||
>
|
>
|
||||||
@@ -780,7 +775,9 @@ User: ${formattedMessage}`;
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
position: relative;
|
position: relative;
|
||||||
transition: border-color 0.2s, background 0.2s;
|
transition:
|
||||||
|
border-color 0.2s,
|
||||||
|
background 0.2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-bar.is-dragging {
|
.input-bar.is-dragging {
|
||||||
|
|||||||
Reference in New Issue
Block a user