feat: add tool group definitions for policy-based filtering
Define DefaultToolGroups mapping group references (e.g. "group:fs", "group:web") to concrete tool names, and ResolveToolNames to expand group refs into deduplicated tool name lists. This is the foundation for per-agent tool policies in Phase 2.
This commit is contained in:
parent
660a70c24e
commit
148623f07e
1 changed files with 39 additions and 0 deletions
39
pkg/tools/groups.go
Normal file
39
pkg/tools/groups.go
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
package tools
|
||||
|
||||
// DefaultToolGroups maps group references (e.g. "group:fs") to tool names.
|
||||
// Groups provide a convenient shorthand for tool policies so operators
|
||||
// can allow/deny entire categories without listing every tool name.
|
||||
var DefaultToolGroups = map[string][]string{
|
||||
"group:fs": {"read_file", "write_file", "edit_file", "append_file", "list_dir"},
|
||||
"group:web": {"web_search", "web_fetch"},
|
||||
"group:exec": {"exec"},
|
||||
"group:hw": {"i2c", "spi"},
|
||||
"group:comms": {"message", "spawn"},
|
||||
"group:agents": {"blackboard", "handoff", "list_agents"},
|
||||
}
|
||||
|
||||
// ResolveToolNames expands group refs (e.g. "group:fs") and individual tool
|
||||
// names into a deduplicated list of concrete tool names.
|
||||
// Unknown group refs are treated as individual tool names (pass-through).
|
||||
func ResolveToolNames(refs []string) []string {
|
||||
seen := make(map[string]struct{}, len(refs))
|
||||
result := make([]string, 0, len(refs))
|
||||
|
||||
for _, ref := range refs {
|
||||
if tools, ok := DefaultToolGroups[ref]; ok {
|
||||
for _, name := range tools {
|
||||
if _, dup := seen[name]; !dup {
|
||||
seen[name] = struct{}{}
|
||||
result = append(result, name)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if _, dup := seen[ref]; !dup {
|
||||
seen[ref] = struct{}{}
|
||||
result = append(result, ref)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue