mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-04 08:25:26 +08:00
- Add shared ToolMarkupTag scanner (toolcalls_scan.go) replacing hardcoded alias tables - Support DSML collapsed tag names (<DSMLtool_calls>, <DSMLinvoke>, <DSMLparameter>) - Parse JSON literal values from parameter bodies (123→number, true→bool, null) - Recover unclosed CDATA in final parse/flush via SanitizeLooseCDATA - Align Go and Node implementations (scanToolMarkupTagAt, findMatchingToolMarkupClose) - Reject bare <invoke> as unsupported syntax, only tool_calls wrapper triggers tool path - Update API.md and toolcall-semantics.md documentation Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
29 lines
713 B
Go
29 lines
713 B
Go
package toolstream
|
|
|
|
import "ds2api/internal/toolcall"
|
|
|
|
func findFirstToolMarkupTagByName(s string, start int, name string) (toolcall.ToolMarkupTag, bool) {
|
|
return findFirstToolMarkupTagByNameFrom(s, start, name, false)
|
|
}
|
|
|
|
func findFirstToolMarkupTagByNameFrom(s string, start int, name string, closing bool) (toolcall.ToolMarkupTag, bool) {
|
|
for pos := maxInt(start, 0); pos < len(s); {
|
|
tag, ok := toolcall.FindToolMarkupTagOutsideIgnored(s, pos)
|
|
if !ok {
|
|
return toolcall.ToolMarkupTag{}, false
|
|
}
|
|
if tag.Name == name && tag.Closing == closing {
|
|
return tag, true
|
|
}
|
|
pos = tag.End + 1
|
|
}
|
|
return toolcall.ToolMarkupTag{}, false
|
|
}
|
|
|
|
func maxInt(a, b int) int {
|
|
if a > b {
|
|
return a
|
|
}
|
|
return b
|
|
}
|