From ec6f0de95b6319ca6ebb9cc4a1173a60347650cc Mon Sep 17 00:00:00 2001 From: Andrew Phillips Date: Thu, 28 Aug 2025 14:44:22 -0300 Subject: [PATCH] fix: update async item service initialization feat: remove unused meta plugin imports fix: update meta plugin type implementation Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) --- src/modes/server/api/item.rs | 40 ++++++++++++++++++++++++++++++----- src/modes/server/mcp/tools.rs | 40 ++++++++++++++++++++++++++++++----- 2 files changed, 70 insertions(+), 10 deletions(-) diff --git a/src/modes/server/api/item.rs b/src/modes/server/api/item.rs index 77c29a9..8fb9b18 100644 --- a/src/modes/server/api/item.rs +++ b/src/modes/server/api/item.rs @@ -43,7 +43,13 @@ pub async fn handle_list_items( .map(|s| s.split(',').map(|t| t.trim().to_string()).collect()) .unwrap_or_default(); - let item_service = AsyncItemService::new(state.data_dir.clone(), state.db.clone(), state.item_service.clone()); + let item_service = AsyncItemService::new( + state.data_dir.clone(), + state.db.clone(), + state.item_service.clone(), + state.cmd.clone(), + state.settings.clone() + ); let mut items_with_meta = item_service .list_items(tags, HashMap::new()) .await @@ -166,7 +172,13 @@ pub async fn handle_get_item_latest_content( .map(|s| s.split(',').map(|t| t.trim().to_string()).collect()) .unwrap_or_default(); - let item_service = AsyncItemService::new(state.data_dir.clone(), state.db.clone(), state.item_service.clone()); + let item_service = AsyncItemService::new( + state.data_dir.clone(), + state.db.clone(), + state.item_service.clone(), + state.cmd.clone(), + state.settings.clone() + ); // First find the item to get its ID and metadata let item_with_meta = item_service @@ -222,7 +234,13 @@ pub async fn handle_get_item_content( return Err(StatusCode::BAD_REQUEST); } - let item_service = AsyncItemService::new(state.data_dir.clone(), state.db.clone(), state.item_service.clone()); + let item_service = AsyncItemService::new( + state.data_dir.clone(), + state.db.clone(), + state.item_service.clone(), + state.cmd.clone(), + state.settings.clone() + ); stream_item_content_response(&item_service, item_id, params.allow_binary, params.offset, params.length).await } @@ -325,7 +343,13 @@ pub async fn handle_get_item_latest_meta( .map(|s| s.split(',').map(|t| t.trim().to_string()).collect()) .unwrap_or_default(); - let item_service = AsyncItemService::new(state.data_dir.clone(), state.db.clone(), state.item_service.clone()); + let item_service = AsyncItemService::new( + state.data_dir.clone(), + state.db.clone(), + state.item_service.clone(), + state.cmd.clone(), + state.settings.clone() + ); match item_service.find_item(vec![], tags, HashMap::new()).await { Ok(item_with_meta) => { @@ -372,7 +396,13 @@ pub async fn handle_get_item_meta( State(state): State, Path(item_id): Path, ) -> Result>>, StatusCode> { - let item_service = AsyncItemService::new(state.data_dir.clone(), state.db.clone(), state.item_service.clone()); + let item_service = AsyncItemService::new( + state.data_dir.clone(), + state.db.clone(), + state.item_service.clone(), + state.cmd.clone(), + state.settings.clone() + ); match item_service.get_item(item_id).await { Ok(item_with_meta) => { diff --git a/src/modes/server/mcp/tools.rs b/src/modes/server/mcp/tools.rs index 3efd25d..9033f1a 100644 --- a/src/modes/server/mcp/tools.rs +++ b/src/modes/server/mcp/tools.rs @@ -69,7 +69,13 @@ impl KeepTools { metadata.len() ); - let service = AsyncItemService::new(self.state.data_dir.clone(), self.state.db.clone(), self.state.item_service.clone()); + let service = AsyncItemService::new( + self.state.data_dir.clone(), + self.state.db.clone(), + self.state.item_service.clone(), + self.state.cmd.clone(), + self.state.settings.clone() + ); let item_with_meta = service .save_item_from_mcp(content.as_bytes().to_vec(), tags, metadata) .await @@ -90,7 +96,13 @@ impl KeepTools { .and_then(|v| v.as_i64()) .ok_or_else(|| ToolError::InvalidArguments("Missing or invalid 'id' field".to_string()))?; - let service = AsyncItemService::new(self.state.data_dir.clone(), self.state.db.clone(), self.state.item_service.clone()); + let service = AsyncItemService::new( + self.state.data_dir.clone(), + self.state.db.clone(), + self.state.item_service.clone(), + self.state.cmd.clone(), + self.state.settings.clone() + ); let item_with_content = match service.get_item_content(item_id).await { Ok(iwc) => iwc, @@ -124,7 +136,13 @@ impl KeepTools { .map(|arr| arr.iter().filter_map(|v| v.as_str().map(|s| s.to_string())).collect()) .unwrap_or_default(); - let service = AsyncItemService::new(self.state.data_dir.clone(), self.state.db.clone(), self.state.item_service.clone()); + let service = AsyncItemService::new( + self.state.data_dir.clone(), + self.state.db.clone(), + self.state.item_service.clone(), + self.state.cmd.clone(), + self.state.settings.clone() + ); let item_with_meta = match service.find_item(vec![], tags, HashMap::new()).await { Ok(iwm) => iwm, @@ -171,7 +189,13 @@ impl KeepTools { .and_then(|v| v.as_u64()) .unwrap_or(0) as usize; - let service = AsyncItemService::new(self.state.data_dir.clone(), self.state.db.clone(), self.state.item_service.clone()); + let service = AsyncItemService::new( + self.state.data_dir.clone(), + self.state.db.clone(), + self.state.item_service.clone(), + self.state.cmd.clone(), + self.state.settings.clone() + ); let mut items_with_meta = service.list_items(tags, HashMap::new()).await.map_err(|e| ToolError::Other(anyhow::Error::from(e)))?; // Sort by timestamp (newest first) and apply pagination @@ -224,7 +248,13 @@ impl KeepTools { }).collect()) .unwrap_or_default(); - let service = AsyncItemService::new(self.state.data_dir.clone(), self.state.db.clone(), self.state.item_service.clone()); + let service = AsyncItemService::new( + self.state.data_dir.clone(), + self.state.db.clone(), + self.state.item_service.clone(), + self.state.cmd.clone(), + self.state.settings.clone() + ); let mut items_with_meta = service.list_items(tags.clone(), metadata.clone()).await.map_err(|e| ToolError::Other(anyhow::Error::from(e)))?; // Sort by timestamp (newest first)