fix(config): disable remote exec by default
This commit is contained in:
parent
0f700a6bf0
commit
30d2ee7c52
4 changed files with 28 additions and 10 deletions
|
|
@ -384,10 +384,10 @@ func TestDefaultConfig_OpenAIWebSearchEnabled(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDefaultConfig_ExecAllowRemoteEnabled(t *testing.T) {
|
func TestDefaultConfig_ExecAllowRemoteDisabled(t *testing.T) {
|
||||||
cfg := DefaultConfig()
|
cfg := DefaultConfig()
|
||||||
if !cfg.Tools.Exec.AllowRemote {
|
if cfg.Tools.Exec.AllowRemote {
|
||||||
t.Fatal("DefaultConfig().Tools.Exec.AllowRemote should be true")
|
t.Fatal("DefaultConfig().Tools.Exec.AllowRemote should be false")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -407,7 +407,7 @@ func TestLoadConfig_OpenAIWebSearchDefaultsTrueWhenUnset(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLoadConfig_ExecAllowRemoteDefaultsTrueWhenUnset(t *testing.T) {
|
func TestLoadConfig_ExecAllowRemoteDefaultsFalseWhenUnset(t *testing.T) {
|
||||||
dir := t.TempDir()
|
dir := t.TempDir()
|
||||||
configPath := filepath.Join(dir, "config.json")
|
configPath := filepath.Join(dir, "config.json")
|
||||||
if err := os.WriteFile(configPath, []byte(`{"tools":{"exec":{"enable_deny_patterns":true}}}`), 0o600); err != nil {
|
if err := os.WriteFile(configPath, []byte(`{"tools":{"exec":{"enable_deny_patterns":true}}}`), 0o600); err != nil {
|
||||||
|
|
@ -418,8 +418,8 @@ func TestLoadConfig_ExecAllowRemoteDefaultsTrueWhenUnset(t *testing.T) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("LoadConfig() error: %v", err)
|
t.Fatalf("LoadConfig() error: %v", err)
|
||||||
}
|
}
|
||||||
if !cfg.Tools.Exec.AllowRemote {
|
if cfg.Tools.Exec.AllowRemote {
|
||||||
t.Fatal("tools.exec.allow_remote should remain true when unset in config file")
|
t.Fatal("tools.exec.allow_remote should remain false when unset in config file")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -449,7 +449,7 @@ func DefaultConfig() *Config {
|
||||||
Enabled: true,
|
Enabled: true,
|
||||||
},
|
},
|
||||||
EnableDenyPatterns: true,
|
EnableDenyPatterns: true,
|
||||||
AllowRemote: true,
|
AllowRemote: false,
|
||||||
TimeoutSeconds: 60,
|
TimeoutSeconds: 60,
|
||||||
},
|
},
|
||||||
Skills: SkillsToolsConfig{
|
Skills: SkillsToolsConfig{
|
||||||
|
|
|
||||||
|
|
@ -290,7 +290,7 @@ func TestConvertToPicoClaw(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestToStandardConfig_ExecAllowRemoteDefaultsTrue(t *testing.T) {
|
func TestToStandardConfig_ExecAllowRemoteDefaultsFalse(t *testing.T) {
|
||||||
cfg := (&PicoClawConfig{
|
cfg := (&PicoClawConfig{
|
||||||
Tools: ToolsConfig{
|
Tools: ToolsConfig{
|
||||||
Exec: ExecConfig{
|
Exec: ExecConfig{
|
||||||
|
|
@ -299,8 +299,8 @@ func TestToStandardConfig_ExecAllowRemoteDefaultsTrue(t *testing.T) {
|
||||||
},
|
},
|
||||||
}).ToStandardConfig()
|
}).ToStandardConfig()
|
||||||
|
|
||||||
if !cfg.Tools.Exec.AllowRemote {
|
if cfg.Tools.Exec.AllowRemote {
|
||||||
t.Fatal("ToStandardConfig() should preserve the default tools.exec.allow_remote=true")
|
t.Fatal("ToStandardConfig() should preserve the default tools.exec.allow_remote=false")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -322,6 +322,24 @@ func TestShellTool_RemoteChannelBlockedByDefault(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestShellTool_DefaultConfigBlocksRemoteChannels(t *testing.T) {
|
||||||
|
cfg := config.DefaultConfig()
|
||||||
|
|
||||||
|
tool, err := NewExecToolWithConfig("", false, cfg)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("NewExecToolWithConfig() error: %v", err)
|
||||||
|
}
|
||||||
|
ctx := WithToolContext(context.Background(), "telegram", "chat-1")
|
||||||
|
result := tool.Execute(ctx, map[string]any{"command": "echo hi"})
|
||||||
|
|
||||||
|
if !result.IsError {
|
||||||
|
t.Fatal("expected remote-channel exec to be blocked by default config")
|
||||||
|
}
|
||||||
|
if !strings.Contains(result.ForLLM, "restricted to internal channels") {
|
||||||
|
t.Errorf("expected 'restricted to internal channels' message, got: %s", result.ForLLM)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TestShellTool_InternalChannelAllowed verifies exec is allowed for internal channels
|
// TestShellTool_InternalChannelAllowed verifies exec is allowed for internal channels
|
||||||
func TestShellTool_InternalChannelAllowed(t *testing.T) {
|
func TestShellTool_InternalChannelAllowed(t *testing.T) {
|
||||||
cfg := &config.Config{}
|
cfg := &config.Config{}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue