Files
ds2api/internal/toolstream/tool_sieve_xml_scan.go
CJACK 2d5d211a7a refactor: unify Go/Node XML tool markup scanning and expand DSML alias support
- 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>
2026-04-27 17:53:59 +08:00

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
}