MCPcopy Create free account
hub / github.com/ChrisFeldmeier/OpenCodeRust / execute

Method execute

crates/opencode-tool/src/task.rs:80–157  ·  view source on GitHub ↗
(
        &self,
        args: serde_json::Value,
        ctx: ToolContext,
    )

Source from the content-addressed store, hash-verified

78 }
79
80 async fn execute(
81 &self,
82 args: serde_json::Value,
83 ctx: ToolContext,
84 ) -> Result<ToolResult, ToolError> {
85 let input: TaskInput =
86 serde_json::from_value(args).map_err(|e| ToolError::InvalidArguments(e.to_string()))?;
87
88 let bypass_check = ctx
89 .extra
90 .get("bypassAgentCheck")
91 .and_then(|v| v.as_bool())
92 .unwrap_or(false);
93
94 if !bypass_check {
95 ctx.ask_permission(
96 PermissionRequest::new("task")
97 .with_pattern(&input.subagent_type)
98 .with_metadata("description", serde_json::json!(&input.description))
99 .with_metadata("subagent_type", serde_json::json!(&input.subagent_type))
100 .always_allow(),
101 )
102 .await?;
103 }
104
105 let agent = get_agent(&input.subagent_type);
106 let disabled_tools = get_disabled_tools(agent.as_ref(), input.load_skills.as_ref());
107 let preferred_model = if let Some(model) = agent.as_ref().and_then(|a| {
108 a.model
109 .as_ref()
110 .map(|m| format!("{}:{}", m.provider_id, m.model_id))
111 }) {
112 Some(model)
113 } else {
114 ctx.do_get_last_model().await
115 };
116
117 let session_id = if let Some(task_id) = &input.task_id {
118 task_id.clone()
119 } else {
120 ctx.do_create_subsession(
121 input.subagent_type.clone(),
122 Some(input.description.clone()),
123 preferred_model.clone(),
124 disabled_tools.clone(),
125 )
126 .await?
127 };
128
129 let title = input.description.clone();
130 let result_text = ctx
131 .do_prompt_subsession(session_id.clone(), input.prompt.clone())
132 .await?;
133 let model = parse_model_ref(preferred_model.as_deref());
134
135 let output = format!(
136 "task_id: {} (for resuming to continue this task if needed)\n\n<task_result>\n{}\n</task_result>",
137 session_id,

Calls 13

newFunction · 0.85
get_agentFunction · 0.85
get_disabled_toolsFunction · 0.85
ask_permissionMethod · 0.80
always_allowMethod · 0.80
with_metadataMethod · 0.80
with_patternMethod · 0.80
do_get_last_modelMethod · 0.80
do_create_subsessionMethod · 0.80
do_prompt_subsessionMethod · 0.80
parse_model_refFunction · 0.70
getMethod · 0.45

Tested by

no test coverage detected