Skip to content

Commit e1fef70

Browse files
YAML frontmatter: emit models_used and service_tiers as sequences
Store list fields as lists in _session_frontmatter_dict and serialize them as YAML block sequences in _append_yaml_value instead of comma-joined strings that consumers cannot parse as arrays.
1 parent eaa4a0d commit e1fef70

2 files changed

Lines changed: 24 additions & 2 deletions

File tree

tests/test_md_exporter_yaml.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,16 @@ def test_tab_and_hash_in_title(self):
9292
md = session_to_markdown(session)
9393
assert _extract_frontmatter_dict(md)["title"] == "tab\there # not a comment"
9494

95+
def test_models_used_serializes_as_yaml_sequence(self):
96+
session = _base_session(
97+
metadata={"models_used": ["claude-sonnet-4", "claude-opus-4"]},
98+
)
99+
md = session_to_markdown(session)
100+
frontmatter = _extract_frontmatter_dict(md)
101+
assert frontmatter["models_used"] == ["claude-sonnet-4", "claude-opus-4"]
102+
assert "models_used:\n" in md.split("---")[1] or "models_used:" in md.split("---")[1]
103+
assert ' - "claude-sonnet-4"' in md.split("---")[1]
104+
95105

96106
@FUZZ_SETTINGS
97107
@given(st.text())

utils/md_exporter.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def _session_frontmatter_dict(session: SessionDict) -> dict[str, Any]:
5050
if meta.get("last_timestamp"):
5151
data["updated"] = meta["last_timestamp"]
5252
if meta.get("models_used"):
53-
data["models_used"] = ", ".join(meta["models_used"])
53+
data["models_used"] = list(meta["models_used"])
5454
if meta.get("total_cache_creation_tokens", 0) > 0:
5555
data["total_cache_creation_tokens"] = meta["total_cache_creation_tokens"]
5656
if meta.get("tool_call_counts"):
@@ -68,7 +68,7 @@ def _session_frontmatter_dict(session: SessionDict) -> dict[str, Any]:
6868
if meta.get("permission_mode"):
6969
data["permission_mode"] = meta["permission_mode"]
7070
if meta.get("service_tiers"):
71-
data["service_tiers"] = ", ".join(meta["service_tiers"])
71+
data["service_tiers"] = list(meta["service_tiers"])
7272
if meta.get("compactions", 0) > 0:
7373
data["compactions"] = meta["compactions"]
7474
if meta.get("api_errors", 0) > 0:
@@ -517,6 +517,18 @@ def _append_yaml_value(lines: list[str], key: str, value: Any, *, indent: int =
517517
indent=indent + 1,
518518
)
519519
return
520+
if isinstance(value, list):
521+
lines.append(f"{prefix}{key}:")
522+
for item in value:
523+
if isinstance(item, str):
524+
lines.append(f"{prefix} - {_escape_yaml(item)}")
525+
elif isinstance(item, int):
526+
lines.append(f"{prefix} - {item}")
527+
else:
528+
raise TypeError(
529+
f"unsupported frontmatter sequence item type: {type(item).__name__}"
530+
)
531+
return
520532
if isinstance(value, int):
521533
lines.append(f"{prefix}{key}: {value}")
522534
return

0 commit comments

Comments
 (0)