feat: Implement daemon-only architecture for query operations

This commit implements the daemon-only architecture where all query
operations (functions, strings, decompile, memory, summary, xrefs)
must go through the persistent daemon instead of spawning new Ghidra
processes per command.

Key changes:
- Wire IPC client in main.rs to route queries through daemon
- Add requires_daemon() to determine which commands need daemon
- Add execute_via_daemon() to translate CLI commands to IPC calls
- Deprecate HeadlessExecutor with migration notice
- Fix filter.pest hex number parsing order (hex before number)
- Add #[allow(dead_code)] to infrastructure modules for future use
- Mark E2E tests requiring daemon as #[ignore]

Architecture benefits:
- Faster queries: Ghidra stays loaded, no 5-30s startup per command
- Simpler code: One execution path instead of two
- Better UX: Clear daemon requirement with helpful error messages

When daemon is not running, users see:
  Error: This command requires the daemon to be running.
  Start the daemon with: ghidra daemon start --project <name>

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Alexander Kiselev
2026-01-25 03:06:08 -08:00
co-authored by Claude Opus 4.5
parent 2fe77ac4a2
commit 33dc10dcca
25 changed files with 263 additions and 62 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ edition = "2021"
authors = ["Alexander Kiselev"]
description = "Rust CLI to run Ghidra headless for reverse engineering with Claude Code and other agents"
license = "GPL-3.0"
repository = "http://127.0.0.1:62915/git/akiselev/ghidra-cli"
repository = "https://github.com/akiselev/ghidra-cli"
[dependencies]
# CLI framework