Why: The product needs a session mode and a place to show tool arguments on a confirmation card without inventing a second card type. Evidence: GOWORK=off go test . passed. New fields use omitempty, so existing golden JSON stays the same. Impact: Empty permission mode still means the profile policy. Clients that ignore unknown fields keep working. Refs: feature/permission-hooks Co-authored-by: Cursor <cursoragent@cursor.com>
57 lines
2.3 KiB
Go
57 lines
2.3 KiB
Go
package core
|
||
|
||
import "encoding/json"
|
||
|
||
// 工具契约(4.8):内置、声明式 HTTP、插件工具统一走 ToolProvider 形态。
|
||
// Parameters 是 JSON Schema(draft-07 子集即可),调用参数按其校验。
|
||
|
||
type SourceKind string
|
||
|
||
const (
|
||
SourceBuiltin SourceKind = "builtin"
|
||
SourcePlugin SourceKind = "plugin"
|
||
SourceUser SourceKind = "user"
|
||
)
|
||
|
||
type ToolDesc struct {
|
||
Name string `json:"name"`
|
||
Description string `json:"description"`
|
||
Parameters json.RawMessage `json:"parameters,omitempty"`
|
||
Source SourceKind `json:"source"`
|
||
PluginID string `json:"pluginId,omitempty"`
|
||
HTTP *HTTPToolSpec `json:"http,omitempty"` // 声明式 HTTP 工具(无代码)
|
||
// Hidden 预留能力形态:默认不对模型与 /api/tools 列表可见,须运行时开关
|
||
// (如 runtime.fsTools)或管理动作开启后可用(提案 2026-09-30-file-preview-and-reserved-capabilities)。
|
||
Hidden bool `json:"hidden,omitempty"`
|
||
// ReadOnly、Edits、Risk 是工具注册时的权限声明。Risk 取 low、medium、high。
|
||
ReadOnly bool `json:"readOnly,omitempty"`
|
||
Edits bool `json:"edits,omitempty"`
|
||
Risk string `json:"risk,omitempty"`
|
||
}
|
||
|
||
// HTTPToolSpec:无代码自定义工具(4.8)。模板变量 {{param.x}} 从调用参数注入。
|
||
type HTTPToolSpec struct {
|
||
Method string `json:"method"`
|
||
URL string `json:"url"`
|
||
Headers map[string]string `json:"headers,omitempty"`
|
||
BodyTemplate string `json:"bodyTemplate,omitempty"` // JSON 模板
|
||
AuthRef string `json:"authRef,omitempty"` // 设置中的密钥引用(settings key)
|
||
TimeoutMs int `json:"timeoutMs,omitempty"`
|
||
// ResultPath 从响应 JSON 中裁剪(jq 点路径);空取整个响应。
|
||
ResultPath string `json:"resultPath,omitempty"`
|
||
}
|
||
|
||
type ToolCallRequest struct {
|
||
CallID string `json:"callId"`
|
||
Name string `json:"name"`
|
||
Arguments json.RawMessage `json:"arguments,omitempty"`
|
||
}
|
||
|
||
type ToolCallResult struct {
|
||
CallID string `json:"callId"`
|
||
Status string `json:"status"` // ok | error
|
||
Output string `json:"output,omitempty"`
|
||
Truncated bool `json:"truncated,omitempty"`
|
||
Artifact *Artifact `json:"artifact,omitempty"` // 超长转工件
|
||
}
|