From a342d584c5422613b1c5241ccabb89ee3a0d25cc Mon Sep 17 00:00:00 2001 From: toki Date: Sat, 27 Jun 2026 23:03:22 +0900 Subject: [PATCH] =?UTF-8?q?fix(openai):=20Cline=20fallback=EC=97=90=20work?= =?UTF-8?q?space=20root=20=EC=8B=A4=ED=96=89=EC=9D=84=20=EB=AA=85=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/node/internal/adapters/openai_compat/openai_compat.go | 1 + .../node/internal/adapters/openai_compat/openai_compat_test.go | 3 +++ apps/node/internal/adapters/vllm/vllm.go | 1 + apps/node/internal/adapters/vllm/vllm_test.go | 3 +++ 4 files changed, 8 insertions(+) diff --git a/apps/node/internal/adapters/openai_compat/openai_compat.go b/apps/node/internal/adapters/openai_compat/openai_compat.go index 6972476..2470a14 100644 --- a/apps/node/internal/adapters/openai_compat/openai_compat.go +++ b/apps/node/internal/adapters/openai_compat/openai_compat.go @@ -528,6 +528,7 @@ func textToolFallbackInstruction(tools any) (string, bool) { } return "Tool calls must be emitted as plain text because this backend does not support native OpenAI tool calling. When a tool is needed, respond with exactly one tool call and no markdown:\n" + "\n\nJSON_VALUE\n\n\n" + + "run_commands executes from the client workspace root. Do not prepend cd to an absolute workspace path unless the user explicitly asks to operate in a different directory; prefer current-workspace commands such as git status.\n" + "Use valid JSON for each parameter value and follow the supplied parameter schema. Available tools JSON: " + string(encoded), true } diff --git a/apps/node/internal/adapters/openai_compat/openai_compat_test.go b/apps/node/internal/adapters/openai_compat/openai_compat_test.go index 9c0948a..46a2301 100644 --- a/apps/node/internal/adapters/openai_compat/openai_compat_test.go +++ b/apps/node/internal/adapters/openai_compat/openai_compat_test.go @@ -434,6 +434,9 @@ func TestOpenAICompatExecuteFallsBackToTextToolsWhenNativeToolsUnsupported(t *te if first["role"] != "system" || !strings.Contains(first["content"].(string), "") || !strings.Contains(first["content"].(string), "run_commands") { t.Fatalf("fallback system instruction missing tool format/name: %+v", first) } + if !strings.Contains(first["content"].(string), "client workspace root") || !strings.Contains(first["content"].(string), "Do not prepend cd") { + t.Fatalf("fallback system instruction missing workspace-root guidance: %+v", first) + } if !strings.Contains(first["content"].(string), "Existing Cline system prompt.") { t.Fatalf("fallback system instruction did not preserve existing system content: %+v", first) } diff --git a/apps/node/internal/adapters/vllm/vllm.go b/apps/node/internal/adapters/vllm/vllm.go index 8a15b25..bf8d2e9 100644 --- a/apps/node/internal/adapters/vllm/vllm.go +++ b/apps/node/internal/adapters/vllm/vllm.go @@ -463,6 +463,7 @@ func textToolFallbackInstruction(tools any) (string, bool) { } return "Tool calls must be emitted as plain text because this backend does not support native OpenAI tool calling. When a tool is needed, respond with exactly one tool call and no markdown:\n" + "\n\nJSON_VALUE\n\n\n" + + "run_commands executes from the client workspace root. Do not prepend cd to an absolute workspace path unless the user explicitly asks to operate in a different directory; prefer current-workspace commands such as git status.\n" + "Use valid JSON for each parameter value and follow the supplied parameter schema. Available tools JSON: " + string(encoded), true } diff --git a/apps/node/internal/adapters/vllm/vllm_test.go b/apps/node/internal/adapters/vllm/vllm_test.go index 26d266c..5fa549e 100644 --- a/apps/node/internal/adapters/vllm/vllm_test.go +++ b/apps/node/internal/adapters/vllm/vllm_test.go @@ -306,6 +306,9 @@ func TestVllmExecuteFallsBackToTextToolsWhenNativeToolsUnsupported(t *testing.T) if first["role"] != "system" || !strings.Contains(first["content"].(string), "") || !strings.Contains(first["content"].(string), "run_commands") { t.Fatalf("fallback system instruction missing tool format/name: %+v", first) } + if !strings.Contains(first["content"].(string), "client workspace root") || !strings.Contains(first["content"].(string), "Do not prepend cd") { + t.Fatalf("fallback system instruction missing workspace-root guidance: %+v", first) + } if !strings.Contains(first["content"].(string), "Existing Cline system prompt.") { t.Fatalf("fallback system instruction did not preserve existing system content: %+v", first) }