Obsidian's view containers use CSS properties like `contain: strict` that
create a new containing block for `position: fixed` elements. This caused
the menu to be clipped within the view boundary, making it invisible when
views were stacked vertically.
Solution: Use ReactDOM.createPortal to render the menu at document.body,
bypassing the view container's CSS constraints.
Enable multiple independent agent sessions in separate ChatViews.
Each view manages its own AcpAdapter and agent process.
- Adapter management: singleton → Map<viewId, AcpAdapter>
- Settings Menu for agent switching and new view creation
- Keybinds target last active view only
- Rename activeAgentId → defaultAgentId (with migration)Enable multiple independent agent sessions in separate ChatViews.
Each view manages its own AcpAdapter and agent process.
- Adapter management: singleton → Map<viewId, AcpAdapter>
- Settings Menu for agent switching and new view creation
- Keybinds target last active view only
- Rename activeAgentId → defaultAgentId (with migration)
Add "Show emojis" toggle in Display settings (default: ON).
When disabled, emoji icons are hidden from tool calls, thoughts,
plans, terminals, and permission results.
Plan entries now use text styles to indicate status regardless of
emoji setting: completed items show strikethrough, in-progress
items are bold.
- Create ConfirmDeleteModal using Obsidian Modal
- Show session title in confirmation message
- Prevent accidental deletion from misclicks
- Update onDeleteSession callback type to void (sync modal open)
- Combine canLoad/canResume into canRestore flag
- Merge loadSession/resumeSession into restoreSession method
- Uses load if available (with history replay)
- Falls back to resume (with local storage restore)
- Simplify UI with single Restore button (play icon)
- Update DebugForm to show Restore/Fork buttons only
- Rename CSS class from resume-icon to restore-icon
- Add deleteSession method to useSessionHistory hook
- Add Delete button to all session items (always visible)
- Change early return for restoration non-supporting agents to warning banner
- Show locally saved sessions for all agents (for deletion)
- Add warning banner and delete button styles
Moved session history UI logic from SessionHistoryModal to a new SessionHistoryContent React component. The modal now acts as a thin wrapper, delegating rendering and state management to React. Also removed unused session header styles and some hover/transition effects from styles.css.
Updated all session history related CSS class names in both TypeScript and CSS files to use the 'agent-client-session-history-' prefix for improved consistency and maintainability.
Introduces local session saving, retrieval, and deletion in settings-store and exposes these methods via ISettingsAccess. Updates ChatView and useChat to save session metadata on first message, and useSessionHistory to fallback to local sessions when agent session/list is unsupported. SessionHistoryModal now displays a banner when showing local sessions. Updates plugin settings schema and styles for local session support.
Reworks session management to use explicit capability flags for list, load, resume, and fork operations, removing legacy methods and session rename/delete. Updates ACP adapter, domain models, ports, and hooks to support new session management API. Refactors ChatView and SessionHistoryModal to use new capability-driven UI and callbacks, and adds debug mode for manual session operations.
- Convert Resume/Fork buttons to icon-only buttons (play, git-branch)
- Add editable session title in main chat header with pencil icon
- Add comprehensive CSS for session history modal layout
- Fix action buttons to display horizontally instead of stacking
- Add hover states with semantic colors (blue for actions, yellow for rename, red for delete)
- Revert incomplete folder mentions feature to fix TypeScript errors
Renamed all diff-related CSS classes and their usage in ToolCallRenderer.tsx to use the 'agent-client-' prefix. This change avoids potential class name collisions and improves maintainability by clearly scoping styles to the agent-client components.
Renamed the CSS class from 'agent-client-markdown-rendered' to 'markdown-rendered' in both the MarkdownTextRenderer component and the stylesheet for improved consistency and maintainability.
Renamed all CSS class names in chat-related React components and styles.css to use the 'agent-client-' prefix. This improves style encapsulation and prevents class name collisions with other plugins or global styles.
Refactored image attachment logic in ChatInput to support drag-and-drop image uploads in addition to paste. Added visual feedback for drag-over state and updated styles for the input box and auto-mention display.
The image remove button in ImagePreviewStrip now uses the Obsidian 'x' icon via setIcon instead of a text character. Corresponding CSS updates adjust the button's background, color, and icon size for better visual integration.
This update introduces support for attaching images to chat messages, including image validation, preview strip in the input area, and rendering of images in chat history. The domain model is extended with PromptContent types for text and images, and the message sending pipeline is refactored to handle multi-part prompts. UI components and styles are updated to support image previews and horizontal scrolling for image groups.
Added an effect to scroll the selected suggestion into view in the dropdown when navigating. Also set a max-height for the dropdown to enable scrolling when there are many items.
Introduced a help link to the documentation in the AgentClientSettingTab for easier user access. Added corresponding CSS styles for the documentation link container and anchor element.
Introduces support for selecting AI models per session, including new types and UI for model selection. Updates the domain model, agent client port, and adapter to handle available models and current model state. Adds a model selector dropdown to the chat input, updates the session hook for model changes, and styles the new selector.
Refactors the ChatInput component to use CSS classes and variables for dynamic textarea height adjustment instead of directly setting the style property. Adds corresponding CSS for .textarea-auto-height and .textarea-expanded to styles.css. Also removes an unused import from useAgentSession.ts.
Refactored the chat input area to use a new .chat-input-box container for improved layout and styling. Simplified textarea height adjustment logic and removed unused dynamic class management. Cleaned up debug and console logging from ChatInput and useAgentSession hooks. Updated styles for input area, textarea, and related elements to improve appearance and maintainability.
Introduces support for agent session modes, allowing users to select and switch between different agent operating modes in the chat UI. Updates the domain model, agent client port, and AcpAdapter to handle session modes, and adds a mode selector dropdown to ChatInput. The useAgentSession hook now manages mode state and provides callbacks for updating and setting the current mode. Styles are updated to accommodate the new mode selector.
Adds support for displaying file locations associated with tool calls in the chat UI, showing relative paths based on the vault path. Updates the ACP adapter to pass location data, introduces a utility for path conversion, and styles the new location display.