agentscope-ai / agentscope-ai/agentscope-java

[Bug]: Improve skill YAML frontmatter parsing tolerance for unquoted colons in scalar values

Đang mở
#1,442 2 bình luận 0 reaction 1 người được giao Được @hexly666 nhận Xem trên GitHub
area/core/tool bug
Ngôn ngữ chính
Java
Star
5.6k
Fork
1.3k
Merge trung bình
4 ngày 12 giờ
Pull request đã merge (30 ngày)
77

Mô tả

**AgentScope-Java is an open-source project. To involve a broader community, we recommend asking your questions in English.**

**Describe the bug**

When loading a skill via `FileSystemSkillRepository`, the `MarkdownSkillParser` fails to parse YAML frontmatter if the `description` field contains unquoted `: ` (colon followed by space) patterns. SnakeYAML interprets `: ` as a key-value separator, causing a `ScannerException`.

**To Reproduce**
When loading a skill via `FileSystemSkillRepository`, the `MarkdownSkillParser` fails to parse YAML frontmatter if the `description` field contains unquoted `: ` (colon followed by space) patterns. SnakeYAML interprets `: ` as a key-value separator, causing a `ScannerException`.

**Example problematic SKILL.md:**

```yaml
---
name: testskils
description: 测试skills, node: 无法找到EDI Partner、EDI Partner不存在、Partner配置错误、850订单没有生成SO、850订单报错、Can't find the EDI Customer setup in the EDI partner function、查不到850订单。处理EDI 850订单中无法找到EDI Partner的问题,当850报错包含Can't find the EDI Customer setup in the EDI partner function时使用此skill。
---
# Skill Content

**Expected behavior**
A clear and concise description of what you expected to happen.

**Error messages**
Detailed error messages.

**Environment (please complete the following information):**

- AgentScope-Java Version: 1.0.12
- Java Version: 21
- OS: macos

**Additional context**
org.yaml.snakeyaml.scanner.ScannerException: mapping values are not allowed here
in 'string', line 2, column 28:
description: 测试skills, node: 无法找到EDI Partner、EDI Partner不存在 ...
^

at org.yaml.snakeyaml.scanner.ScannerImpl.fetchValue(ScannerImpl.java:917)
at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:406)
at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:239)
at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingKey.produce(ParserImpl.java:637)
at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:161)
at org.yaml.snakeyaml.comments.CommentEventsCollector$1.peek(CommentEventsCollector.java:57)
at org.yaml.snakeyaml.comments.CommentEventsCollector$1.peek(CommentEventsCollector.java:43)
at org.yaml.snakeyaml.comments.CommentEventsCollector.collectEvents(CommentEventsCollector.java:136)
at org.yaml.snakeyaml.comments.CommentEventsCollector.collectEvents(CommentEventsCollector.java:116)
at org.yaml.snakeyaml.composer.Composer.composeScalarNode(Composer.java:249)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:214)
at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:396)
at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:361)
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:329)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:218)
at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:141)
at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:167)
at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:179)
at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:508)
at org.yaml.snakeyaml.Yaml.load(Yaml.java:437)
at io.agentscope.core.skill.util.MarkdownSkillParser.parseYamlMetadata(MarkdownSkillParser.java:155)
at io.agentscope.core.skill.util.MarkdownSkillParser.parse(MarkdownSkillParser.java:113)
at io.agentscope.core.skill.util.SkillUtil.createFrom(SkillUtil.java:91)
at io.agentscope.core.skill.util.SkillFileSystemHelper.loadSkillFromDirectory(SkillFileSystemHelper.java:98)
at io.agentscope.core.skill.util.SkillFileSystemHelper.lambda$getAllSkills$4(SkillFileSystemHelper.java:145)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1939)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
at io.agentscope.core.skill.util.SkillFileSystemHelper.getAllSkills(SkillFileSystemHelper.java:141)
at io.agentscope.core.skill.repository.FileSystemSkillRepository.getAllSkills(FileSystemSkillRepository.java:119)

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.