CSS: added comprehensive zoom compensation for ALL modal-content variants (memory, tasks, preset, doclib, gallery, notes-pane, research, compare, email-lib) and a safety net for user-resized windows carrying inline height styles. JS (windowResize.js): _uiZoom() helper reads computed zoom from :root. Restore path divides saved localStorage dimensions by zoom factor. Resize-move viewport clamps use zoom-adjusted vh/vw so dragging never pushes the window beyond the visible area. Also added docs/improvement-tasks.md as the Ulysses task board.
4.2 KiB
Ulysses Improvement Tasks
Last updated: 2026-07-07
Priority: HIGH
-
Floating windows overflow viewport after zoom/font changes — unreachable controls
:root.ui-scale-125 { zoom: 1.25 }renders all content 25% larger, butwindow.innerHeightdoesn't change withzoom(CSS rendering only, not DOM). ThewindowResize.jssaved-size restore at line 224 clamps towindow.innerHeight, which after zoom makes windows 1.25× the visible viewport — pushing headers, close buttons, and top resize handles off-screen. The user literally can't close or move them. Fix: (a) divide restored height by zoom factor in the restore path; (b) add a general safety net — any.modal-contenton open should clamp tocalc(100dvh / var(--ui-zoom, 1) - 40px). AlsowindowResize.jsline 134if (top + height > vh)needs zoom-awarevh. Current zoom compensation rules (line 181-196) only cover.modal-content,.cal-modal-content,.settings-modal-content,#theme-popup,#cookbook-modal, and.pdf-export-overlay— many windows lack the divisor. -
Fix manage_documents tool schema — missing "read" action
Themanage_documentsfunction-calling schema intool_schemas.pyhas"enum": ["list", "delete", "tidy"]but the handler indocument_tools.pysupports"read", "view", "open", "get". The model can't read documents through function calling. Fix: add read/view/open/get to enum, adddocument_id/offset/limitparams, update description to mention reading. -
Add "Send to Chat" button to document editor
Button left of the Save button in#doc-actions-footer. Sends a document reference (title + doc_id + snippet) to the active chat, similar to how Cursor injects file references. Must NOT paste full content — just a reference the agent can resolve. Backend needs an endpoint or the existingopen_panel: documentsUI action may be enough. Requires:POST /api/document/<id>/referenceor use existingui_controlwith a new action. Frontend: insert button indocument.js_buildPaneHTML()at line ~4598, wire JS handler.
Priority: MEDIUM
-
Bolster Library/Documents CRUD via MCP or native tools
Current document tools are solid but disjointed from agent-mode workflow. The agent has filesystem access (read_file,write_file,edit_file,glob,ls,grep,bash) but these tools operate on disk files, not Ulysses library documents. Need to bridge the gap: the agent should be able to list, read, grep, and edit library documents as naturally as files. Consider:- A unified
read_documenttool distinct frommanage_documents(which is an admin-style multi-action tool) - A
grep_documentsorsearch_documentstool for semantic/fulltext search - Auto-inject active document content into agent context when relevant
- A unified
-
First-party document support in agent mode
Documents feel "disjointed from the agent." The agent creates documents fine but can't easily discover or reference existing ones contextually. Ideas:- "Agent workspace" awareness — automatically surface relevant documents based on chat context
- Document references in chat that are clickable and auto-expand
- The "Send to Chat" button (HIGH priority) is step 1; step 2 is making the agent proactively aware of library contents
-
Improve
create_documentschema description
Current description is verbose and overlaps withedit_file/write_filedisambiguation. Models sometimes usecreate_documentfor disk files. Add a clear leading signal: "DOCUMENT PANEL (not disk)" prefix like the existing "FILESYSTEM TOOL (not memory)" pattern.
Priority: LOW
-
Document library: batch operations
Multi-select, bulk delete, bulk export. Currently only single-document operations. -
Document version diff view
The version history panel shows versions but doesn't offer a side-by-side diff view between versions. -
Auto-language detection on document open
The editor auto-detects language on typing but not on initial document open from the library. Opening a Python file saved as "markdown" should suggest the language switch.