You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
claude-code/src/main/java/com/claudecode/tool/Tool.java

72 lines
2.0 KiB

package com.claudecode.tool;
import java.util.Map;
/**
* 工具协议接口 —— 对应 claude-code/src/Tool.ts 中的 Tool 类型定义。
* <p>
* 每个工具是一个完整的协议实现,包含:
* <ul>
* <li>工具定义(name、description、inputSchema)—— 告知 LLM 如何调用</li>
* <li>执行逻辑(execute)—— 实际运行</li>
* <li>权限检查(checkPermission)—— 安全前置检查</li>
* <li>特性门控(isEnabled)—— 条件注册</li>
* <li>活动描述(activityDescription)—— 人类可读的进度</li>
* </ul>
*/
public interface Tool {
/** 工具唯一名称标识 */
String name();
/** 给 LLM 看的工具描述 */
String description();
/**
* 输入参数的 JSON Schema 定义。
* <p>
* 示例:
* <pre>{@code
* {
* "type": "object",
* "properties": {
* "command": { "type": "string", "description": "Shell command to execute" }
* },
* "required": ["command"]
* }
* }</pre>
*/
String inputSchema();
/**
* 执行工具。
*
* @param input JSON 解析后的输入参数
* @param context 执行上下文(工作目录、会话状态等)
* @return 执行结果文本
*/
String execute(Map<String, Object> input, ToolContext context);
/**
* 权限前置检查,在 execute 之前调用。
* 默认放行。
*/
default PermissionResult checkPermission(Map<String, Object> input, ToolContext context) {
return PermissionResult.ALLOW;
}
/** 工具是否启用(特性门控),返回 false 则不注册 */
default boolean isEnabled() {
return true;
}
/** 是否为只读操作 */
default boolean isReadOnly() {
return false;
}
/** 人类可读的活动描述,用于 UI 显示执行进度 */
default String activityDescription(Map<String, Object> input) {
return "Running " + name() + "...";
}
}