@@ -7,6 +7,7 @@ mod now_tool;
mod path_search_tool;
mod read_file_tool;
mod regex_search;
+mod thinking_tool;
use assistant_tool::ToolRegistry;
use gpui::App;
@@ -20,6 +21,7 @@ use crate::now_tool::NowTool;
use crate::path_search_tool::PathSearchTool;
use crate::read_file_tool::ReadFileTool;
use crate::regex_search::RegexSearchTool;
+use crate::thinking_tool::ThinkingTool;
pub fn init(cx: &mut App) {
assistant_tool::init(cx);
@@ -35,4 +37,5 @@ pub fn init(cx: &mut App) {
registry.register_tool(PathSearchTool);
registry.register_tool(ReadFileTool);
registry.register_tool(RegexSearchTool);
+ registry.register_tool(ThinkingTool);
}
@@ -0,0 +1,47 @@
+use std::sync::Arc;
+
+use anyhow::{anyhow, Result};
+use assistant_tool::Tool;
+use gpui::{App, Entity, Task};
+use language_model::LanguageModelRequestMessage;
+use project::Project;
+use schemars::JsonSchema;
+use serde::{Deserialize, Serialize};
+
+#[derive(Debug, Serialize, Deserialize, JsonSchema)]
+pub struct ThinkingToolInput {
+ /// Content to think about. This should be a description of what to think about or
+ /// a problem to solve.
+ content: String,
+}
+
+pub struct ThinkingTool;
+
+impl Tool for ThinkingTool {
+ fn name(&self) -> String {
+ "thinking".to_string()
+ }
+
+ fn description(&self) -> String {
+ include_str!("./thinking_tool/description.md").to_string()
+ }
+
+ fn input_schema(&self) -> serde_json::Value {
+ let schema = schemars::schema_for!(ThinkingToolInput);
+ serde_json::to_value(&schema).unwrap()
+ }
+
+ fn run(
+ self: Arc<Self>,
+ input: serde_json::Value,
+ _messages: &[LanguageModelRequestMessage],
+ _project: Entity<Project>,
+ _cx: &mut App,
+ ) -> Task<Result<String>> {
+ // This tool just "thinks out loud" and doesn't perform any actions.
+ Task::ready(match serde_json::from_value::<ThinkingToolInput>(input) {
+ Ok(_input) => Ok("Finished thinking.".to_string()),
+ Err(err) => Err(anyhow!(err)),
+ })
+ }
+}
@@ -0,0 +1 @@
+A tool for thinking through problems, brainstorming ideas, or planning without executing any actions. Use this tool when you need to work through complex problems, develop strategies, or outline approaches before taking action.