名称: ctx-journal-normalize
描述: “将日记源Markdown标准化以实现清晰渲染。在ctx journal site显示渲染问题后使用:代码块嵌套、元数据格式、列表损坏。”
从剥离的纯文本重建干净的Markdown日记条目。
标准化前准备
- 先导出:运行
ctx recall export --all(或make journal) 以便有日记文件可进行标准化 - 检查是否需要:如果日记站点渲染清晰,则跳过此步骤
何时使用
- 在
ctx journal site显示渲染问题后 - 当日记条目存在代码块嵌套问题(无代码高亮)
- 当元数据块渲染为原始
**键**: 值而非表格时 - 在运行
/ctx-journal-enrich之前(干净的Markdown可改进提取)
何时不使用
- 对已标准化的条目(检查
.state.json) - 当站点渲染正确时(不要修复未损坏的内容)
- 对非日记Markdown文件(此技能特定于日记)
使用示例
/ctx-journal-normalize
/ctx-journal-normalize twinkly-stirring-kettle
/ctx-journal-normalize --compact
架构
ctx journal site从站点副本中剥离所有代码块标记,
消除嵌套冲突。结果是可读的纯文本,并保留了结构标记。
此技能更进一步:它在源文件中重建适当的Markdown,
以便站点渲染时具有代码高亮和正确的格式。
输入格式
源日记条目具有以下结构标记:
- 回合边界:
### N. 角色 (HH:MM:SS) - 工具调用:
工具名称: 参数(单独一行) - 工具输出:跟随工具输出回合标题的块
- 章节分隔:
--- - 前置元数据:文件开头的
---分隔符之间的YAML
输出规则
- 代码块:始终使用反引号块,而非波浪号。 最内层代码使用3个反引号。每个嵌套级别增加1个。 切勿嵌套相同数量的块。
- 元数据:
**键**: 值块变为折叠的<details>包含<table>。摘要来自日期/持续时间/回合数/模型。 - 工具输出:当> 10行时,折叠为
<details><summary>N行</summary>。 - 列表:每级缩进2个空格。续行与列表项缩进匹配。
- 不发明内容:输出中的每个词都必须追溯到输入。 仅更改结构。
模式
默认(无损):仅重新格式化。保留所有内容。
紧凑模式(当用户请求--compact或“compact”时):
可以总结> 50行的工具输出;保留前/后5行,并带有
... (省略N行)。在继续之前向用户标记此操作。
处理流程
- 先备份:
cp -r .context/journal/ .context/journal.bak/- 在修改前始终备份;文件可能包含用户编辑
- 告诉用户备份位置
- 识别要标准化的文件:
- 如果用户指定文件/模式,则使用该文件
- 否则,扫描
.context/journal/*.md - 跳过已标准化的文件:通过检查状态文件:
或直接读取ctx journal mark --check <文件名> normalized.context/journal/.state.json并跳过 设置了normalized日期的条目。
- 逐回合处理文件(不要一次性处理整个文件;
大文件会超出上下文):
- 根据输出规则修复代码块嵌套、元数据、列表
- 写回修复后的文件
- 在状态文件中标记为已标准化:
在验证代码块嵌套正确后,也标记代码块:ctx journal mark <文件名> normalizedctx journal mark <文件名> fences_verified - 重新生成站点:
ctx journal site --build - 报告更改内容并提醒用户备份位置
幂等性
处理状态在.context/journal/.state.json中跟踪(不在
行内HTML注释标记中)。两个阶段:
- normalized:元数据表格完成。在重新运行时跳过元数据转换。
- fences_verified:代码块重建完成。
ctx journal site中的stripFences仅跳过设置了此阶段的文件。
没有fences_verified的文件在站点副本中会剥离所有代码块
(可读但无代码高亮)。在验证代码块嵌套正确后标记此阶段。
范围
- 操作源文件(
.context/journal/) - 更改持久化;无需重复标准化
- 保留所有实质性内容;仅修复格式