summaryrefslogtreecommitdiff
path: root/src/Agent.Core/Runtime/StructuredJson.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Agent.Core/Runtime/StructuredJson.cs')
-rw-r--r--src/Agent.Core/Runtime/StructuredJson.cs22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/Agent.Core/Runtime/StructuredJson.cs b/src/Agent.Core/Runtime/StructuredJson.cs
new file mode 100644
index 0000000..e0c1650
--- /dev/null
+++ b/src/Agent.Core/Runtime/StructuredJson.cs
@@ -0,0 +1,22 @@
+namespace Agent.Core.Runtime;
+
+internal static class StructuredJson
+{
+ public static string Unwrap(string content)
+ {
+ string value = content.Trim();
+ int fenceStart = value.IndexOf("```", StringComparison.Ordinal);
+ if (fenceStart < 0) return value;
+ int firstLineEnd = value.IndexOf('\n', fenceStart);
+ if (firstLineEnd < 0) return value;
+ string opening = value[fenceStart..firstLineEnd].TrimEnd('\r');
+ if (!string.Equals(opening, "```", StringComparison.Ordinal) &&
+ !string.Equals(opening, "```json", StringComparison.OrdinalIgnoreCase))
+ return value;
+
+ int fenceEnd = value.IndexOf("```", firstLineEnd + 1, StringComparison.Ordinal);
+ if (fenceEnd < 0 || value.IndexOf("```", fenceEnd + 3, StringComparison.Ordinal) >= 0)
+ return value;
+ return value[(firstLineEnd + 1)..fenceEnd].Trim();
+ }
+}