toolpolicy

package
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 26, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Index

Constants

View Source
const (
	GroupSearch      = "group:search"
	GroupCalc        = "group:calc"
	GroupBuilder     = "group:builder"
	GroupMessaging   = "group:messaging"
	GroupRuntime     = "group:runtime"
	GroupSessions    = "group:sessions"
	GroupMemory      = "group:memory"
	GroupWeb         = "group:web"
	GroupMedia       = "group:media"
	GroupUI          = "group:ui"
	GroupAutomation  = "group:automation"
	GroupNodes       = "group:nodes"
	GroupStatus      = "group:status"
	GroupOpenClaw    = "group:openclaw"
	GroupAgentRemote = "group:agentremote"
	GroupAIBridge    = "group:ai-bridge"
	GroupFS          = "group:fs"
)

Tool group constants for policy composition (OpenClaw-style shorthands).

Variables

View Source
var ToolGroups = map[string][]string{
	GroupSearch:    {"web_search"},
	GroupCalc:      {"calculator"},
	GroupBuilder:   {"create_agent", "fork_agent", "edit_agent", "delete_agent", "list_agents", "run_internal_command"},
	GroupMessaging: {"message"},

	GroupSessions:   {"sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status"},
	GroupMemory:     {"memory_search", "memory_get"},
	GroupRuntime:    {"exec", "process"},
	GroupWeb:        {"web_search", "web_fetch"},
	GroupMedia:      {"image", "image_generate", "tts"},
	GroupUI:         {"browser", "canvas"},
	GroupAutomation: {"cron", "gateway"},
	GroupNodes:      {"nodes"},
	GroupStatus:     {"session_status"},

	GroupOpenClaw: {
		"browser",
		"canvas",
		"nodes",
		"cron",
		"message",
		"gateway",
		"agents_list",
		"sessions_list",
		"sessions_history",
		"sessions_send",
		"sessions_spawn",
		"session_status",
		"memory_search",
		"memory_get",
		"web_search",
		"web_fetch",
		"image",
	},

	GroupAgentRemote: agentRemoteExtras,
	GroupAIBridge:    agentRemoteExtras,
	GroupFS:          {"read", "write", "edit", "apply_patch"},
}

ToolGroups maps group names to tool names for policy composition.

View Source
var ToolProfiles = map[ToolProfileID]toolProfilePolicy{
	ProfileSimple: {Allow: []string{"session_status", "web_search"}},

	ProfileCoding: {Allow: []string{GroupFS, GroupRuntime, GroupSessions, GroupMemory, "image"}},

	ProfileMessaging: {Allow: []string{GroupMessaging, "sessions_list", "sessions_history", "sessions_send", "session_status"}},
	ProfileFull:      {},
	ProfileBoss:      {},
}

ToolProfiles define which tool groups each profile allows.

Functions

func ExpandPluginGroups

func ExpandPluginGroups(list []string, groups PluginToolGroups) []string

ExpandPluginGroups expands plugin group shorthands inside a list.

func ExpandToolGroups

func ExpandToolGroups(list []string) []string

ExpandToolGroups expands group shorthands to tool names.

func FilterToolsByPolicy

func FilterToolsByPolicy(names []string, policy *ToolPolicy) []string

FilterToolsByPolicy filters tools by policy.

func IsOwnerOnlyToolName

func IsOwnerOnlyToolName(name string) bool

IsOwnerOnlyToolName reports whether the tool is restricted to owners.

func NormalizeToolList

func NormalizeToolList(list []string) []string

NormalizeToolList normalizes each tool name in a list.

func NormalizeToolName

func NormalizeToolName(name string) string

NormalizeToolName converts to lowercase without accepting legacy aliases.

Types

type EffectiveToolPolicy

type EffectiveToolPolicy struct {
	GlobalPolicy         *ToolPolicy
	GlobalProviderPolicy *ToolPolicy
	AgentPolicy          *ToolPolicy
	AgentProviderPolicy  *ToolPolicy
	Profile              ToolProfileID
	ProviderProfile      ToolProfileID
	ProfileAlsoAllow     []string
	ProviderAlsoAllow    []string
}

EffectiveToolPolicy collects all resolved tool policies for evaluation.

func ResolveEffectiveToolPolicy

func ResolveEffectiveToolPolicy(params struct {
	Global        *GlobalToolPolicyConfig
	Agent         *ToolPolicyConfig
	ModelProvider string
	ModelID       string
}) EffectiveToolPolicy

ResolveEffectiveToolPolicy resolves global and agent policies plus provider overrides.

type GlobalToolPolicyConfig

type GlobalToolPolicyConfig struct {
	ToolPolicyConfig `yaml:",inline"`
	Subagents        *SubagentToolPolicyConfig `json:"subagents,omitempty" yaml:"subagents"`
}

GlobalToolPolicyConfig extends ToolPolicyConfig with subagent defaults.

type PluginToolGroups

type PluginToolGroups struct {
	All      []string
	ByPlugin map[string][]string
}

PluginToolGroups tracks plugin tool groupings.

func BuildPluginToolGroups

func BuildPluginToolGroups[T any](tools []T, toolName func(T) string, toolMeta func(T) (string, bool)) PluginToolGroups

BuildPluginToolGroups groups tools by plugin id.

type SubagentToolPolicyConfig

type SubagentToolPolicyConfig struct {
	Tools *ToolPolicyConfig `json:"tools,omitempty" yaml:"tools"`
}

SubagentToolPolicyConfig configures subagent tool defaults.

type ToolPolicy

type ToolPolicy struct {
	Allow []string `json:"allow,omitempty"`
	Deny  []string `json:"deny,omitempty"`
}

ToolPolicy is a resolved allow/deny policy.

func ExpandPolicyWithPluginGroups

func ExpandPolicyWithPluginGroups(policy *ToolPolicy, groups PluginToolGroups) *ToolPolicy

ExpandPolicyWithPluginGroups expands plugin group shorthands inside a policy.

func MergeAlsoAllow

func MergeAlsoAllow(policy *ToolPolicy, also_allow []string) *ToolPolicy

MergeAlsoAllow appends also_allow into an allowlist if present.

func PickToolPolicy

func PickToolPolicy(config *ToolPolicyConfig) *ToolPolicy

PickToolPolicy merges allow/also_allow/deny into a resolved policy.

func ResolveSubagentToolPolicy

func ResolveSubagentToolPolicy(global *GlobalToolPolicyConfig) *ToolPolicy

ResolveSubagentToolPolicy returns the default subagent policy (deny wins).

func ResolveToolProfilePolicy

func ResolveToolProfilePolicy(profile ToolProfileID) *ToolPolicy

ResolveToolProfilePolicy returns the allow/deny lists for a profile.

func StripPluginOnlyAllowlist

func StripPluginOnlyAllowlist(policy *ToolPolicy, groups PluginToolGroups, coreTools map[string]struct{}) (bool, []string, *ToolPolicy)

StripPluginOnlyAllowlist removes allowlists that only target plugin tools.

type ToolPolicyConfig

type ToolPolicyConfig struct {
	Allow      []string                    `json:"allow,omitempty" yaml:"allow"`
	AlsoAllow  []string                    `json:"also_allow,omitempty" yaml:"also_allow"`
	Deny       []string                    `json:"deny,omitempty" yaml:"deny"`
	Profile    ToolProfileID               `json:"profile,omitempty" yaml:"profile"`
	ByProvider map[string]ToolPolicyConfig `json:"by_provider,omitempty" yaml:"by_provider"`
}

ToolPolicyConfig matches OpenClaw's allow/deny policy (global or per-agent).

func (*ToolPolicyConfig) Clone

func (c *ToolPolicyConfig) Clone() *ToolPolicyConfig

Clone creates a deep copy of ToolPolicyConfig.

type ToolProfileID

type ToolProfileID string

ToolProfileID defines access levels (OpenClaw-style).

const (
	ProfileSimple    ToolProfileID = "simple"
	ProfileCoding    ToolProfileID = "coding"
	ProfileMessaging ToolProfileID = "messaging"
	ProfileFull      ToolProfileID = "full"
	ProfileBoss      ToolProfileID = "boss"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL