diff options
Diffstat (limited to 'crates/phone-opus/src/mcp/service.rs')
| -rw-r--r-- | crates/phone-opus/src/mcp/service.rs | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/crates/phone-opus/src/mcp/service.rs b/crates/phone-opus/src/mcp/service.rs index 378ce43..d42c0a0 100644 --- a/crates/phone-opus/src/mcp/service.rs +++ b/crates/phone-opus/src/mcp/service.rs @@ -14,7 +14,8 @@ use crate::mcp::output::{ ToolOutput, fallback_detailed_tool_output, split_presentation, tool_success, }; use crate::mcp::protocol::{ - CLAUDE_BIN_ENV, CLAUDE_EFFORT, CLAUDE_MODEL, CLAUDE_TOOLSET, EMPTY_MCP_CONFIG, + CLAUDE_BIN_ENV, CLAUDE_CONSULT_PREFIX, CLAUDE_EFFORT, CLAUDE_MODEL, CLAUDE_TOOLSET, + EMPTY_MCP_CONFIG, }; pub(crate) fn run_worker(generation: u64) -> Result<(), Box<dyn std::error::Error>> { @@ -138,18 +139,28 @@ impl ConsultRequest { } #[derive(Debug, Clone)] -struct PromptText(String); +struct PromptText { + original: String, + rendered: String, +} impl PromptText { fn parse(raw: String) -> Result<Self, ConsultRequestError> { if raw.trim().is_empty() { return Err(ConsultRequestError::EmptyPrompt); } - Ok(Self(raw)) + Ok(Self { + rendered: format!("{CLAUDE_CONSULT_PREFIX}\n\n{raw}"), + original: raw, + }) } fn as_str(&self) -> &str { - self.0.as_str() + self.original.as_str() + } + + fn rendered(&self) -> &str { + self.rendered.as_str() } } @@ -364,7 +375,7 @@ fn invoke_claude(request: &ConsultRequest) -> Result<ConsultResponse, ConsultInv } let output = command .current_dir(request.cwd.as_path()) - .arg(request.prompt.as_str()) + .arg(request.prompt.rendered()) .output() .map_err(ConsultInvocationError::Spawn)?; let stdout = String::from_utf8_lossy(&output.stdout).trim().to_owned(); @@ -445,6 +456,7 @@ fn consult_output( "cwd": response.cwd.display(), "session_mode": request.session_mode(), "requested_session_id": request.requested_session_id(), + "prompt_prefix_injected": true, "model": response.model_name(), "duration_ms": response.duration_ms, "num_turns": response.num_turns, @@ -457,6 +469,8 @@ fn consult_output( "response": response.result, "cwd": response.cwd.display(), "prompt": request.prompt.as_str(), + "prompt_prefix": CLAUDE_CONSULT_PREFIX, + "effective_prompt": request.prompt.rendered(), "max_turns": request.max_turns.map(TurnLimit::get), "session_mode": request.session_mode(), "requested_session_id": request.requested_session_id(), |