Releases: surenalab/dabir
Release list
Dabir v0.2.2
Everything since 0.1.10. Download for macOS (universal DMG), Windows (setup .exe) or Linux (AppImage, .deb, .rpm) below.
0.2.2
- Setup catches an agent CLI too old for Dabir. Grok up to 0.2.112 does not know
--output-format streaming-messages-json, so every run failed at once with clap's "invalid value" while Setup showed Grok installed and signed in. Setup now asks the CLI's--helpwhether it lists the options Dabir passes (a version cut-off would be a guess: 0.2.112 lacks the format, 0.2.118 has it), marks an old one amber with its version and an Update button that runsgrok updatein the sheet's shell, and a run that still hits the error is explained as "too old, update it" with an Update… link instead of the raw CLI text.
0.2.1
- The sidebar shows one view at a time, Outline, Files or Changes, under a switcher like the inspector's (View › Outline, Files and Changes, ⌃⌘1 to ⌃⌘3; Ctrl+Alt+1 to 3 off the Mac), instead of one long column where a real paper's file tree pushed everything else out of sight. The history rail stays above all three. Changes carries a count of the files waiting to be committed; Commit (⌥⌘C) switches to it and puts the cursor in the message; the last view is remembered. The Commit button's tooltip named ⇧⌘C, which is Cite; it now says ⌥⌘C.
- The history rail moves to the top of the sidebar, so moving through the paper's saves and accepted changes starts where the eye does; its card opens below it. The sidebar then opens on the outline, then Changes. Changes lists the manuscript and the code; build products, caches and binaries stay behind “Show N build and binary files”, and a commit still includes them.
- The agent is handed the playbook that matches the request, written into the prompt, and the errors of the last compile (its warnings too when the request is about building the paper), so it does not open skill files or the build log to find its bearings. A playbook's cue words match whole words, so "doing" no longer attaches the references playbook and "configure" the figure one. A change in one file stays with that agent; a subagent is for two pieces of work that do not depend on each other, and it is told the file and the line. A follow-up keeps the newest report and shortens the ones before it. The Problems list starts closed: the counts stay on one line, and the list opens when you ask.
0.2.0
- PDF view: Fit width and Fit page follow the pane as it changes (the Split divider, the window, the sidebar and inspector), and the reader's place holds through a resize, a zoom and a recompile instead of jumping to the top; the last build and its comment pins stay on screen while the next one compiles, and stay when that one ends with an error instead of emptying the pane. Only pages near the view are drawn, so a long paper at 300 % stays light. ⌘-scroll and pinch zoom around the pointer. Split keeps its own zoom, stays in Split after a compile, and its divider resets on double-click, takes focus when you press it so the arrow keys move it, and leaves both panes a usable width. Pages wider than the pane scroll from their left edge, the PDF toolbar stays put, the page number follows the scroll, and find highlights and text selection line up with the text. pdf.js is no longer downloaded at startup: 430 kB less before the window opens, fetched when the PDF view is.
- Word documents are papers of their own. A .docx opens in one page editor, the Word view (Word-faithful pages, styles, tables, footnotes, comments and tracked changes), in place of Visual, Source and PDF, and saves back to the .docx after the usual pause: only the paragraphs that changed are rewritten, through a temporary file. The title bar offers Editing, Suggesting (tracked changes under your name) and Viewing, and Export (⌥⌘E): a Word copy, PDF through the print panel, Markdown, or Convert to LaTeX Paper…, which runs the Word import into a folder beside the paper. The outline comes from the headings; the status bar counts pages and words and sets the zoom (fit width, whole page, 50–200 %); History shows a Word step as a text diff; agents get a read-only Markdown copy under
.dabir/context/and are told not to touch the .docx. New: File › New Word Document… (⌥⌘N, and Word document in New Paper, a styled manuscript template) and File › Open Word Document… (⌥⌘O), which the welcome screen now offers too, on one line under the buttons. In a Word document ⌘B is Bold, and ⇧⌘I, ⌘K and ⌘F act on the document. A paragraph you edit keeps following its style: the engine writes the style's own font, size and italic onto the run as it saves, and Dabir takes back what the style already says, leaving your own formatting alone. Engine: docx-editor 1.12.0 (@heyirisai/*, Apache-2.0 — the community continuation of eigenpal's 1.9.0, the line Dabir follows rather than the 2.x line that moved comments and tracked changes into a paid package), loaded only when a Word document opens;quick-xmlreads documents on the Rust side.scripts/check.shhonoursCARGO_TARGET_DIR. - Import a Word document (File › Import Word Document…, ⇧⌥⌘I, or Convert Word to LaTeX… at the foot of New Paper): pandoc turns the .docx into a new LaTeX paper with
main.texon the plain article layout, only the packages it uses, the pictures infigures/, booktabs tables,$…$andequation*maths, and\citewith arefs.bibfor Zotero, Mendeley and EndNote citations; the folder is set up as New Paper sets one up. Word numbers no equation of its own, so nothing gains a number on the way in; a number typed by hand after the equation, on the line under it, or in a one-row table becomes a numberedequationwith a\labeland the typed number goes. The .docx itself is copied into the new folder besidemain.texand committed with the paper, so the paper keeps what it came from and the two can be read side by side. Comments are left out and tracked changes accepted, and the sheet lists what to check.import::revisionsreads the tracked changes and comments for the Word round trip to come; nothing calls it yet. The Setup row for pandoc now names the import too.
Dabir v0.1.10
- Jump and Follow to a coauthor leave PDF-only view so the caret is on screen, including when the editor was unmounted. Follow no longer re-scrolls when they have not moved. Removing a GitHub collaborator asks first. The People list no longer waits on
ghon the UI thread, and a lookup failure is shown instead of spinning forever.
Install notes and the user guide: https://github.com/surenalab/dabir/blob/main/docs/GUIDE.md
Full Changelog: v0.1.9...v0.1.10
Dabir v0.1.9
- Live sessions: a coauthor's caret and selection show in Visual as well as Source, and sit on the visible glyph rather than a hidden markup offset. The title bar shows who else is in the session; click an avatar (or a name in the People tab) to jump to their caret. Follow keeps the document scrolling with them without moving your own caret. A coauthor who is typing is marked on the avatar.
- People tab: collaborators on the paper's GitHub repository, listed and invited through the GitHub CLI already on this machine (
gh). Roles come from GitHub. Dabir still has no accounts and sends no email. - One universal macOS DMG in the release pipeline (Apple silicon and Intel, Tectonic lipo'd), so a single notarisation covers both Macs.
latest.jsonstill namesdarwin-aarch64anddarwin-x86_64so 0.1.8 installs keep updating. - Windows installer stays unsigned. SmartScreen's "Windows protected your PC" is dismissed with More info → Run anyway; there is no plan to buy an Authenticode certificate. CI still signs if
WINDOWS_CERTIFICATEsecrets are ever set.
Install notes and the user guide: https://github.com/surenalab/dabir/blob/main/docs/GUIDE.md
Full Changelog: v0.1.8...v0.1.9
Dabir v0.1.8
- Live sessions: Windows joiners now share the same live buffer as the host. Relative paths were built with a forward slash (
root + "/"), which does not matchC:\…\main.tex, so each side edited a different Y.Text and neither saw the other's keystrokes or caret. - Source view shows coauthors' carets and selections. y-codemirror.next uses
.cm-ySelectionCaret/.cm-ySelectionInfo; the stylesheet still styled the old y-codemirror v5 class names, so the widgets were in the DOM with no visible caret. The name chip uses the peer colour. - Windows installer: Surena Lab as publisher, Dabir icon and wordmark on the installer and uninstaller (header and sidebar bitmaps from
python3 scripts/nsis-brand.py), per-user install (no admin prompt), silent WebView2 bootstrap if the machine does not have it. SmartScreen's "Windows protected your PC" still appears until the installer is Authenticode-signed; CI signs whenWINDOWS_CERTIFICATEandWINDOWS_CERTIFICATE_PASSWORDsecrets are set. A bought code-signing certificate is required; signing alone also needs a few days of installs before SmartScreen drops the warning.
Install notes and the user guide: https://github.com/surenalab/dabir/blob/main/docs/GUIDE.md
Full Changelog: v0.1.7...v0.1.8
Dabir v0.1.7
- Live sessions: a joiner no longer sees filenames with a blank editor. 0.1.6 bound y-codemirror to the live text before the host had seeded it, so an empty Y.Text replaced the snapshot already on disk. The guest now keeps that snapshot on screen and binds once the seed arrives; the host puts every text file into the live document when the session starts, not only the file they have open.
Install notes and the user guide: https://github.com/surenalab/dabir/blob/main/docs/GUIDE.md
Full Changelog: v0.1.6...v0.1.7
Dabir v0.1.6
- Live sessions: switching files during a session no longer overwrites the previous file's shared text with the new file's content. The editor rebound to the new file while the old binding was still live, so the swap went to the old file's text on every machine, and the host's autosave then wrote it to disk; a guest opening a file nobody had seeded saw it empty. Now the editor unbinds before the swap, the host alone seeds an empty shared text from its own copy of that file, and a guest waits for the host's seed without reporting an empty document. The binding is also made once per file instead of on every keystroke. Files touched by a 0.1.5 session are recoverable from History.
Install notes and the user guide: https://github.com/surenalab/dabir/blob/main/docs/GUIDE.md
Full Changelog: v0.1.5...v0.1.6
Dabir v0.1.5
- Live sessions from anywhere: Anywhere is the first choice in Share and needs no setup. Machines meet through Dabir's meeting point (the signalling worker on Cloudflare's free tier, now also serving
/icewith STUN and, when a TURN key is configured, Cloudflare TURN credentials so university and corporate networks that block peer traffic still connect) and the paper travels peer to peer, encrypted with the key in the link. Settings › Meeting point overrides it for a lab's own; the link leaves the address out when it is Dabir's. - Send via: the host's Share sheet opens Email, Messages (Mac), WhatsApp or Telegram with the invitation written (who, which paper, the link and its key, where to get Dabir). Nothing is sent by Dabir.
dabir://links open Dabir on every platform: registered by the Windows installer, the .deb and .rpm, and by the app itself for the AppImage; a second launch hands the link to the running app. Clicking a session link joins at once when your name is on record, or opens Share on it and asks for the name.- Direct sessions use the same ICE servers, so they too cross strict networks when TURN is available.
Install notes and the user guide: https://github.com/surenalab/dabir/blob/main/docs/GUIDE.md
Full Changelog: v0.1.4...v0.1.5
Dabir v0.1.4
- Effort and model moved into the composer: a pill in the composer's bar names the setting (⚡ Sonnet · High, or Select effort) and opens a popover with one slider across the effort levels the CLI accepts, dots for each level, the travelled part in the accent, a knob that follows the pointer and settles on the nearest level; the level's name in the accent above with the model under it, a reset to the CLI's own choice, and the models as chips beneath, weakest to strongest. Replaces the dial. Arrow keys, Home, End and Backspace on the slider; the popover opens downward when the composer sits near the top of the pane.
- History as a rail: the History tab's dashes now run down the left edge of the pane, newest at the top, one per step, sticky while the list scrolls. The dash under the pointer stretches to full width and its neighbours lean toward it; a card beside it names the step, its time and its files, and the list marks the row; click, release after a drag, or Enter opens the step, which stays long in the accent. A new step slides the column down by one dash and draws itself in. ↑ ↓ Home End from the keyboard; off under reduced motion.
- The same rail along the bottom of the sidebar, under the History button: oldest at the left, newest at the right edge, dashes standing up. Hover to read a step in a card above it; click to open it in the History tab. Histories longer than the row fold their oldest steps into a stub.
- The effort control moves: the bolt in the pill and the popover is a gauge that fills to the level; opening the popover charges the knob and fill up from the left to the current level; each dot the knob passes lights up with a ripple; the knob grows under the pointer; the level's name rolls in; and three meters (speed, depth, cost) light segment by segment to say what the level trades. Off under reduced motion.
- Windows: Stop on an agent run and cancelling a compile now end the process (
taskkill /T /F;killdoes not exist there), children included. - Windows and Linux: plain Ctrl chords typed in the terminal pane go to the shell (Ctrl+B for tmux, Ctrl+F, Ctrl+K, Ctrl+S for readline) instead of Dabir's menu fallback; the Shift and Alt chords still work from it.
Install notes and the user guide: https://github.com/surenalab/dabir/blob/main/docs/GUIDE.md
Full Changelog: v0.1.3...v0.1.4
Dabir v0.1.3
- History scrubber: the History tab opens with a row of dashes, one per step, oldest at the left and the newest at the right edge; agent steps stand taller in the accent, a day boundary opens a gap. Hover or drag to read a step and see it marked in the list, release or click to open it; ← → Home End and Enter do the same from the keyboard. A new step slides the row left by one dash. Histories longer than the row fold their oldest steps into a stub. Off under reduced motion.
- Model dial: the Model and Effort menus in the Agent tab are one gauge, Fast at the left and Deep at the right, the models the CLI lists as its major ticks and each one's effort levels as the minor ones. Drag the needle, click a tick or use the arrow keys; the readout names the position and what it costs in plain words. Default hands both choices back to the CLI, Type a model id… keeps the typed-id path. Codex, which lists no models, gets its four efforts; Cursor, which takes no effort flag, gets its models.
- Paper and code are told apart: every run's preamble now opens with which one the request is about, decided from the words of the request and the file under the cursor, so a code fix no longer ends with a paper compile and a wording change never rewrites a script. Reruns and "add a figure" keep both sides open.
- Four code-side starter skills join the six paper ones: run-and-test, debug-failing-run, refactor-safely, notebook-to-script. Set Up Memory adds them to a project that already has the six; the Memory tab groups skills by side.
- Fixed, Windows and Linux: Ctrl+Enter in the Agent composer did not send (the handler looked for the command key only, while the hint said Ctrl+Enter).
- Fixed, Windows and Linux: keyboard shortcuts did nothing while the web view had the keyboard (the menu's accelerators never reached the app in the 0.1.2 test on Windows: Ctrl+/, Ctrl+N, Ctrl+, and Ctrl+Shift+W all silent). The keyboard fallback that served the browser preview now runs in the native app off the Mac, with Ctrl in place of ⌘, and
command()drops the duplicate when the menu does deliver a chord. Show/Hide Sidebar moves to Ctrl+Alt+S there (Ctrl+Shift+S was also Share) and Run File in Terminal to Ctrl+Alt+Enter (Ctrl+Enter is Send to Agent, and on Linux GTK handed it to the menu before the composer saw it). - A paper folder that is not a Git repository no longer stops the agent: the first run initialises one with an empty root commit and branches from it, the worktree seeding carries the files, and nothing of the author's is committed on their behalf (the sidebar keeps every file as uncommitted until they commit). Initialise Repository in the sidebar does the same, so it no longer leaves a repository with no commit that the next run would refuse. The run's start note says what was set up.
- Setup checks for the
gitcommand, which agent worktrees need even though commits and snapshots use the built-in engine, and offers the machine's install line (winget, apt, dnf, pacman, zypper, Apple's command line tools) or a link to git-scm.com. - Fixed, Windows: a shell that exited left its terminal pane looking alive. ConPTY keeps the output pipe open until the pseudo-console is closed, so the end of the shell never reached the reader; a watcher now polls the child and closes the console when it is gone, and the pane shows
[shell exited]as on the Mac. - Fixed, Linux: the bundled Tectonic was the glibc build (needs 2.39), so no LaTeX paper compiled on Ubuntu 22.04 or any distribution from before 2024 although the app itself ran;
fetch-tectonic.mjstakes Tectonic's static musl build for the Linux targets. Setup no longer calls the engine Ready when it cannot start: the row goes amber with the loader's message (setup_status.latexError) and Fetch packages fails at once instead of after a download. - Fixed, Windows and Linux: every shortcut shown in the app said ⌘.
keys.tschord()writes a chord in the platform's words (Ctrl, Alt, Shift, Enter) and the shortcut sheet, the tour stops, the format bar, the toolbar and code bar tooltips, the Agent composer hint, Settings and the status notes go through it. - Fixed: the middle column of the window grid was
1fr, whose floor is its content's minimum width, so on the first launch the title bar and the inspector could be pushed past the right edge and the Setup sheet's buttons clipped;minmax(0, 1fr). The "No manuscript in …" heading wraps long folder names instead of printing over them. - The app writes a
launch: Dabir <version> on <os> <arch>line toui.logat every start, so the log file exists from the first run and a tester can tail it. - Tests pass on a Windows checkout: repositories the tests create set
core.autocrlf=false, paths are compared as paths, the skill link assertion accepts the pointer file Windows writes instead of a symlink, and the terminal test answers PowerShell's cursor-position query. - Fixed, Windows: every tool Dabir ran (the Setup checks,
--versionprobes, sign-in probes, Tectonic, Typst, pandoc, git) flashed a console window, at launch, when the window regained focus and each time Setup opened; the sharedspawn::toolnow starts them withCREATE_NO_WINDOW. And agents were never found there: the home directory came from$HOME, unset on Windows, so~/.local/binand~/.grok/binwere looked up under the drive root, andclaude.exewas not matched by a lookup forclaude;spawn::home_dirreads%USERPROFILE%andspawn::bin_inalso accepts.exeand.cmd.
Install notes and the user guide: https://github.com/surenalab/dabir/blob/main/docs/GUIDE.md
What's Changed
- Windows and Linux: everything the 0.1.2 test found (console flicker, agents, static Tectonic, Ctrl chords, grid, terminal exit) by @MohammadSadeghSalehi in #16
- Bump actions/checkout from 4 to 7 by @dependabot[bot] in #14
New Contributors
- @MohammadSadeghSalehi made their first contribution in #16
- @dependabot[bot] made their first contribution in #14
Full Changelog: v0.1.2...v0.1.3