用途:该指南面向 GitHub gh-aw 仓库的开发者,说明如何向 safe-output messages 系统新增一种消息类型,使其在前置元数据(frontmatter)、编译器解析、JavaScript 与打包流程中都能正常工作。消息流转依次经过 frontmatter YAML、JSON Schema、Go 编译器、JavaScript 模块与打包器五个环节。
主要能力与步骤:新增消息类型需依次完成多个改动。第一步在 pkg/parser/schemas/main_workflow_schema.json 的 messages 对象中添加字段定义,字段名用 kebab-case,在 description 中记录所有占位符并提供示例,改完执行 make build。第二步在 pkg/workflow/compiler.go 的 SafeOutputMessagesConfig 结构体中添加 Go 字段,Go 名用 CamelCase,yaml 标签用 kebab-case,json 标签用 camelCase,均加 omitempty。第三步按需在 pkg/workflow/safe_outputs.go 更新解析逻辑,简单字符串字段可能依赖反射无需改动。第四步新建 pkg/workflow/js/messages_<category>.cjs 模块,从 messages_core.cjs 引入 getMessages、renderTemplate、toSnakeCase,提供默认消息模板并支持自定义模板。第五步新建对应测试文件,用 make test-js 运行。后续还需更新 messages_core.cjs 的类型定义与返回值、在 messages.cjs 桶文件中重新导出、在 pkg/workflow/js.go 中添加 go:embed 指令并注册进 GetJavaScriptSources(),并在消费脚本中按需直接引入该模块,最后更新文档。
关键约定:文件名采用 messages_<category>.cjs 的扁平结构;自定义消息通过 GH_AW_SAFE_OUTPUT_MESSAGES 环境变量以 JSON 传入;模板占位符在渲染时同时提供 camelCase 与 snake_case 键。资料中以 close-older-discussion 消息类型为例展示了完整实现。
验证与限制:提交前需确认 Schema、Go 结构体、解析器、JS 模块、测试、类型定义、桶文件、embed 指令、消费脚本与文档均已更新,并确保 make test-js、make build、make lint 通过。该资料未提供实际代码仓库地址以外的运行环境要求、版本兼容范围或各步骤的失败排查说明。