Commit Graph

28 Commits

Author SHA1 Message Date
lucaronin
ec3f90e865 feat: add vault ai guidance restore flow 2026-04-14 14:16:55 +02:00
lucaronin
2356afdc42 style: format vault command wrappers 2026-04-14 12:56:16 +02:00
lucaronin
9154a8153f fix: refresh default vault agents guidance 2026-04-14 12:52:32 +02:00
lucaronin
0c9bfb14c3 fix: format async delete command 2026-04-14 10:57:32 +02:00
lucaronin
48d2246f0b fix: make note deletion non-blocking 2026-04-14 10:53:08 +02:00
lucaronin
1ac6bd887b fix: format alpha build label parser 2026-04-13 23:52:13 +02:00
lucaronin
f31f827a4f fix: restore alpha build label 2026-04-13 23:48:19 +02:00
lucaronin
d540d76f73 feat: support selectable cli ai agents 2026-04-13 19:37:59 +02:00
lucaronin
a4397d48de fix: split alpha and stable release channels 2026-04-12 22:14:53 +02:00
lucaronin
e2745d96eb refactor: remove github auth integration 2026-04-12 17:08:07 +02:00
lucaronin
b1bc056afb refactor: unify shortcut command routing 2026-04-11 10:39:08 +02:00
lucaronin
968c4d05a9 feat: add breadcrumb filename rename controls 2026-04-10 17:59:21 +02:00
lucaronin
8218bcf558 feat: show deleted notes as restorable changes 2026-04-07 20:09:04 +02:00
lucaronin
9c87eca226 feat: auto-rename untitled notes + Rust title resolution tests
- Add auto_rename_untitled Rust command: one-shot rename of untitled-*
  files based on H1 heading, with collision handling (-2, -3)
- Wire auto-rename into frontend save flow (useAppSave.ts)
- Update Rust tests: extract_title now uses H1 > frontmatter > filename
- Add extract_h1_title tests

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 13:14:43 +02:00
lucaronin
d0c3a6b889 refactor: remove Trash system — delete is now permanent with confirm modal
Remove all vestiges of the abandoned Trash system: trashed/trashedAt fields
from types, frontmatter parsing, sidebar filtering, editor banners, inspector
components, mock data, and all related tests. Delete is already permanent via
useDeleteActions with a confirmation dialog. Notes with trashed:true in
existing vault frontmatter are now treated as normal notes (the flag is
ignored by the parser).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 12:21:56 +02:00
lucaronin
a3da859c06 feat: add per-file discard changes in Changes view
Right-click a file in the Changes view to discard its uncommitted changes.
Shows a confirmation dialog before executing. Handles modified (git checkout),
untracked (delete), and deleted (git restore) files. Includes path traversal
safety checks in the Rust backend.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 18:16:52 +02:00
lucaronin
ee3415cece feat: redesign welcome screen with three vault options
Shows "Create a new vault" (empty + git init), "Open existing vault"
(folder picker), and "Get started with a template" (Getting Started
vault). Adds create_empty_vault Rust command for the new-vault flow.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 14:25:52 +02:00
lucaronin
55352c0afd feat: normalize system properties to _archived, _trashed, _trashed_at
Write operations now use underscore-prefixed canonical keys (_archived,
_trashed, _trashed_at). Read operations accept both old keys (Archived,
archived, Trashed, trashed, Trashed at, trashed_at) and new keys via
serde aliases, ensuring backward compatibility without migration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 19:32:48 +02:00
lucaronin
a34274db25 feat: add custom views backend — YAML parser, filter engine, Tauri commands
Introduce `.laputa/views/*.yml` for user-defined filtered note lists.
Rust backend: serde_yaml parsing, recursive AND/OR filter evaluation
with 10 operators (equals, contains, any_of, is_empty, before/after,
etc.), wikilink stem matching, and file CRUD. Three Tauri commands:
list_views, save_view_cmd, delete_view_cmd.

ADR 0040 documents the architecture.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 15:57:22 +02:00
lucaronin
37f32de292 fix: rustfmt formatting for create_vault_folder
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:33:13 +02:00
lucaronin
01fdadf425 fix: address folder tree QA feedback — recursive filtering, folder creation, path display, remove flatten banner
1. Folder selection now recursively includes notes from subfolders
2. + button creates a new folder with inline rename (Tauri command + UI)
3. Note list items show full path when note is in a subdirectory
4. Remove flat vault migration banner and all related code (Rust commands,
   hook, component, smoke test) — subfolders are now first-class

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:29:24 +02:00
lucaronin
4022129481 style: cargo fmt — fix pre-existing Rust formatting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:54:18 +02:00
lucaronin
93b83007eb feat: detect external file renames and offer wikilink update via banner
When the app regains focus, checks git diff for renames (--diff-filter=R).
If renamed .md files are found, shows a non-blocking banner with "Update
wikilinks" and "Ignore" buttons. The update reuses the existing vault-wide
wikilink replacement logic from rename.rs.

New Tauri commands: detect_renames, update_wikilinks_for_renames.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 11:58:32 +02:00
lucaronin
e693ac2b21 feat: show blocking modal when vault has no git repo, offer auto-init
When opening a vault without a .git directory, a blocking modal prevents
app use until the user either creates a repository (git init + add +
commit) or chooses another vault. The check runs via is_git_repo Tauri
command; browser mode fails open.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 11:30:39 +02:00
lucaronin
5fe18c017c feat: scan subdirectories and expose folder tree for sidebar
Extend the Rust vault scanner to index .md files in all visible
subdirectories (hidden dirs excluded). Add FolderNode struct and
list_vault_folders Tauri command that returns the directory tree.
On the frontend, add FolderNode type, extend SidebarSelection with
{ kind: 'folder'; path: string }, and add isInFolder() filtering
in noteListHelpers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 11:06:11 +02:00
lucaronin
9df41c3287 refactor: remove Anthropic API integration, CLI agent only (ADR-0028)
Remove AIChatPanel, useAIChat hook, Rust ai_chat command, and
anthropic_key from settings. AI is now exclusively via Claude CLI
subprocess (AiPanel). Simplifies codebase and eliminates API key
management for users. ADR-0027 superseded.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 15:05:56 +02:00
lucaronin
334ad09089 refactor: extract github.rs from git.rs, move tests to vault.rs
Completes the commands/ module split: GitHub commands now live in
github.rs (88 lines) instead of bloating git.rs (318→233). Vault
and frontmatter tests moved from mod.rs to vault.rs where they
belong (mod.rs 254→93 lines, CodeScene 9.24→9.84). Deduplicated
batch_archive/trash test setup with a shared temp_note helper.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 10:03:42 +02:00
lucaronin
80fbf15b7f refactor: split commands.rs into commands/ module (ai, git, system, vault, mod)
937-line monolith split into focused modules:
- commands/ai.rs — AI chat commands
- commands/git.rs — git/vault sync commands
- commands/system.rs — system/window commands
- commands/vault.rs — vault CRUD commands
- commands/mod.rs — re-exports
2026-03-29 09:53:35 +02:00