feat: add undo/redo (Cmd+Z/Cmd+Shift+Z) and SVG file drag-and-drop

- Undo walks to parent node in history tree, redo follows
  last-active-child for correct branch tracking after forks
- HistoryTree tracks branch recency via last_active_child field,
  updated on push() and checkout() path transitions
- SVG files can be dragged from Finder onto the canvas window
- Edit menu with Undo/Redo items, command palette entries
- 3 new tests: undo, redo, redo-after-fork branch behavior
- 29 tests passing, clippy clean
This commit is contained in:
David Ibia
2026-02-10 00:23:41 +01:00
parent ce2079ad95
commit 1929023409
6 changed files with 331 additions and 32 deletions

View File

@@ -8,7 +8,10 @@ use tools::AgCanvasServer;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
#[derive(Parser)]
#[command(name = "agcanvas-mcp", about = "MCP server bridge for Augmented Canvas")]
#[command(
name = "agcanvas-mcp",
about = "MCP server bridge for Augmented Canvas"
)]
struct Cli {
#[arg(long, default_value = "9876")]
port: u16,
@@ -26,7 +29,10 @@ async fn main() -> Result<()> {
let cli = Cli::parse();
let ws_url = format!("ws://127.0.0.1:{}", cli.port);
tracing::info!("Starting Augmented Canvas MCP server, connecting to {}", ws_url);
tracing::info!(
"Starting Augmented Canvas MCP server, connecting to {}",
ws_url
);
let server = AgCanvasServer::new(ws_url);
let service = server.serve(rmcp::transport::stdio()).await?;