This commit is contained in:
senstella
2025-10-08 15:31:39 +09:00
parent 117a4c2dc9
commit e6c6f94616
4 changed files with 47 additions and 13 deletions

1
Cargo.lock generated
View File

@@ -1705,6 +1705,7 @@ dependencies = [
"iced_core",
"log",
"rustc-hash 2.1.1",
"tokio",
"wasm-bindgen-futures",
"wasm-timer",
]

View File

@@ -5,7 +5,7 @@ edition = "2024"
[dependencies]
anyhow = "1.0.100"
iced = "0.13.1"
iced = { version = "0.13.1", features = ["tokio"] }
imara-diff = "0.2.0"
nucleo-matcher = "0.3.1"
rmcp = { version = "0.8.0", features = ["server", "macros", "transport-sse-server", "transport-io", "transport-streamable-http-server", "elicitation", "schemars"] }

View File

@@ -0,0 +1,24 @@
use iced::{Element, widget::text_editor};
#[derive(Default)]
pub struct State {
content: text_editor::Content,
}
#[derive(Debug, Clone)]
pub enum Message {
Edit(text_editor::Action),
}
pub fn view(state: &State) -> Element<'_, Message> {
text_editor(&state.content)
.placeholder("Type something here...")
.on_action(Message::Edit)
.into()
}
pub fn update(state: &mut State, message: Message) {
match message {
Message::Edit(action) => {}
}
}

View File

@@ -1,29 +1,38 @@
use crate::mcp::FossilEditor;
use crate::{
gui::{update, view},
mcp::FossilEditor,
};
use iced::Executor;
use rmcp::{ServiceExt, transport::stdio};
use tokio::runtime::Runtime;
use tracing_subscriber::{self, EnvFilter};
mod fossil;
mod gui;
mod matcher;
mod mcp;
#[tokio::main]
async fn main() {
fn main() -> iced::Result {
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env().add_directive(tracing::Level::DEBUG.into()))
.with_writer(std::io::stderr)
.with_ansi(false)
.init();
tracing::info!("Starting MCP server");
let rt = Runtime::new().unwrap();
let editor = FossilEditor::new();
let service = editor
.serve(stdio())
.await
.inspect_err(|e| {
tracing::error!("serving error: {:?}", e);
})
.unwrap();
rt.spawn(async {
let service = editor
.serve(stdio())
.await
.inspect_err(|e| {
tracing::error!("serving error: {:?}", e);
})
.unwrap();
service.waiting().await.unwrap();
service.waiting().await.unwrap();
});
iced::run("A cool counter", update, view)
}