mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
feat(mcp): per server deferred mode (#1654)
* feat(mcp): per server deferred mode * fix deferred behavior
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
// PicoClaw - Ultra-lightweight personal AI agent
|
||||
// Inspired by and based on nanobot: https://github.com/HKUDS/nanobot
|
||||
// License: MIT
|
||||
//
|
||||
// Copyright (c) 2026 PicoClaw contributors
|
||||
|
||||
package agent
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/sipeed/picoclaw/pkg/config"
|
||||
)
|
||||
|
||||
func boolPtr(b bool) *bool { return &b }
|
||||
|
||||
func TestServerIsDeferred(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
discoveryEnabled bool
|
||||
serverDeferred *bool
|
||||
want bool
|
||||
}{
|
||||
// --- global false always wins: per-server deferred is ignored ---
|
||||
{
|
||||
name: "global false: per-server deferred=true is ignored",
|
||||
discoveryEnabled: false,
|
||||
serverDeferred: boolPtr(true),
|
||||
want: false,
|
||||
},
|
||||
{
|
||||
name: "global false: per-server deferred=false stays false",
|
||||
discoveryEnabled: false,
|
||||
serverDeferred: boolPtr(false),
|
||||
want: false,
|
||||
},
|
||||
// --- global true: per-server override applies ---
|
||||
{
|
||||
name: "global true: per-server deferred=false opts out",
|
||||
discoveryEnabled: true,
|
||||
serverDeferred: boolPtr(false),
|
||||
want: false,
|
||||
},
|
||||
{
|
||||
name: "global true: per-server deferred=true stays true",
|
||||
discoveryEnabled: true,
|
||||
serverDeferred: boolPtr(true),
|
||||
want: true,
|
||||
},
|
||||
// --- no per-server override: fall back to global ---
|
||||
{
|
||||
name: "no per-server field, global discovery enabled",
|
||||
discoveryEnabled: true,
|
||||
serverDeferred: nil,
|
||||
want: true,
|
||||
},
|
||||
{
|
||||
name: "no per-server field, global discovery disabled",
|
||||
discoveryEnabled: false,
|
||||
serverDeferred: nil,
|
||||
want: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
serverCfg := config.MCPServerConfig{Deferred: tt.serverDeferred}
|
||||
got := serverIsDeferred(tt.discoveryEnabled, serverCfg)
|
||||
if got != tt.want {
|
||||
t.Errorf("serverIsDeferred(discoveryEnabled=%v, deferred=%v) = %v, want %v",
|
||||
tt.discoveryEnabled, tt.serverDeferred, got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user