swarm repositories / source
aboutsummaryrefslogtreecommitdiff
path: root/crates/phone-opus/src/mcp/service.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/phone-opus/src/mcp/service.rs')
-rw-r--r--crates/phone-opus/src/mcp/service.rs24
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(),