mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
Merge pull request #2420 from lahuman/docs/tool-escape-semantics
docs(tool): use provider-agnostic JSON escaping guidance
This commit is contained in:
@@ -254,6 +254,22 @@ func TestDecodeToolCallArguments_ObjectJSON(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDecodeToolCallArguments_ObjectJSON_NewlineEscape(t *testing.T) {
|
||||||
|
raw := json.RawMessage(`{"content":"line1\nline2"}`)
|
||||||
|
args := DecodeToolCallArguments(raw, "write_file")
|
||||||
|
if args["content"] != "line1\nline2" {
|
||||||
|
t.Errorf("content = %q, want newline-expanded string", args["content"])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDecodeToolCallArguments_ObjectJSON_LiteralBackslashN(t *testing.T) {
|
||||||
|
raw := json.RawMessage(`{"content":"line1\\nline2"}`)
|
||||||
|
args := DecodeToolCallArguments(raw, "write_file")
|
||||||
|
if args["content"] != `line1\nline2` {
|
||||||
|
t.Errorf("content = %q, want literal backslash-n", args["content"])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestDecodeToolCallArguments_StringJSON(t *testing.T) {
|
func TestDecodeToolCallArguments_StringJSON(t *testing.T) {
|
||||||
raw := json.RawMessage(`"{\"city\":\"SF\"}"`)
|
raw := json.RawMessage(`"{\"city\":\"SF\"}"`)
|
||||||
args := DecodeToolCallArguments(raw, "test")
|
args := DecodeToolCallArguments(raw, "test")
|
||||||
|
|||||||
+5
-5
@@ -29,7 +29,7 @@ func (t *EditFileTool) Name() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *EditFileTool) Description() string {
|
func (t *EditFileTool) Description() string {
|
||||||
return "Edit a file by replacing old_text with new_text. The old_text must exist exactly in the file. In `function.arguments`, use \\n for newline and \\\\n for literal backslash-n."
|
return "Edit a file by replacing old_text with new_text. The old_text must exist exactly in the file. Standard JSON escaping applies: \\n for newline and \\\\n for literal backslash-n."
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *EditFileTool) Parameters() map[string]any {
|
func (t *EditFileTool) Parameters() map[string]any {
|
||||||
@@ -42,11 +42,11 @@ func (t *EditFileTool) Parameters() map[string]any {
|
|||||||
},
|
},
|
||||||
"old_text": map[string]any{
|
"old_text": map[string]any{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "The exact text to find and replace. In `function.arguments`, use \\n for newline and \\\\n for literal backslash-n.",
|
"description": "The exact text to find and replace. Standard JSON escaping applies: \\n for newline and \\\\n for literal backslash-n.",
|
||||||
},
|
},
|
||||||
"new_text": map[string]any{
|
"new_text": map[string]any{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "The text to replace with. In `function.arguments`, use \\n for newline and \\\\n for literal backslash-n.",
|
"description": "The text to replace with. Standard JSON escaping applies: \\n for newline and \\\\n for literal backslash-n.",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"required": []string{"path", "old_text", "new_text"},
|
"required": []string{"path", "old_text", "new_text"},
|
||||||
@@ -92,7 +92,7 @@ func (t *AppendFileTool) Name() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *AppendFileTool) Description() string {
|
func (t *AppendFileTool) Description() string {
|
||||||
return "Append content to the end of a file. In `function.arguments`, use \\n for newline and \\\\n for literal backslash-n."
|
return "Append content to the end of a file. Standard JSON escaping applies: \\n for newline and \\\\n for literal backslash-n."
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *AppendFileTool) Parameters() map[string]any {
|
func (t *AppendFileTool) Parameters() map[string]any {
|
||||||
@@ -105,7 +105,7 @@ func (t *AppendFileTool) Parameters() map[string]any {
|
|||||||
},
|
},
|
||||||
"content": map[string]any{
|
"content": map[string]any{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "The content to append. In `function.arguments`, use \\n for newline and \\\\n for literal backslash-n.",
|
"description": "The content to append. Standard JSON escaping applies: \\n for newline and \\\\n for literal backslash-n.",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"required": []string{"path", "content"},
|
"required": []string{"path", "content"},
|
||||||
|
|||||||
@@ -870,7 +870,7 @@ func (t *WriteFileTool) Name() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *WriteFileTool) Description() string {
|
func (t *WriteFileTool) Description() string {
|
||||||
return "Write content to a file. In `function.arguments`, use \\n for a newline and \\\\n for a literal backslash-n sequence. Content is written byte-for-byte after argument decoding. If the file already exists, you must set overwrite=true to replace it."
|
return "Write content to a file. Content is written byte-for-byte after argument decoding. Standard JSON escaping applies: \\n for newline and \\\\n for a literal backslash-n sequence. If the file already exists, you must set overwrite=true to replace it."
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *WriteFileTool) Parameters() map[string]any {
|
func (t *WriteFileTool) Parameters() map[string]any {
|
||||||
@@ -883,7 +883,7 @@ func (t *WriteFileTool) Parameters() map[string]any {
|
|||||||
},
|
},
|
||||||
"content": map[string]any{
|
"content": map[string]any{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Content to write to the file. In `function.arguments`, use \\n for newline and \\\\n for literal backslash-n.",
|
"description": "Content to write to the file. Standard JSON escaping applies: \\n for newline and \\\\n for literal backslash-n.",
|
||||||
},
|
},
|
||||||
"overwrite": map[string]any{
|
"overwrite": map[string]any{
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
|
|||||||
Reference in New Issue
Block a user