create-evlog-enricher
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCreate evlog Enricher
创建evlog增强器
Add a new built-in enricher to evlog. Every enricher follows the same architecture. This skill walks through all 6 touchpoints. Every single touchpoint is mandatory -- do not skip any.
为evlog添加一个新的内置增强器。每个增强器都遵循相同的架构。本指南将带你走完全部6个环节。每个环节都是强制性的——请勿跳过任何一个。
PR Title
PR标题
Recommended format for the pull request title:
feat: add {name} enricherThe exact wording may vary depending on the enricher (e.g., , ), but it should always follow the conventional commit prefix.
feat: add user agent enricherfeat: add geo enricherfeat:拉取请求标题的推荐格式:
feat: add {name} enricher具体措辞可根据增强器类型调整(例如、),但必须始终遵循的约定式提交前缀。
feat: add user agent enricherfeat: add geo enricherfeat:Touchpoints Checklist
环节检查清单
| # | File | Action |
|---|---|---|
| 1 | | Add enricher source |
| 2 | | Add tests |
| 3 | | Add enricher to built-in docs |
| 4 | | Add enricher to overview cards |
| 5 | | Add enricher to the "Built-in Enrichers" table |
| 6 | | Add enricher to README enrichers section |
Important: Do NOT consider the task complete until all 6 touchpoints have been addressed.
| 序号 | 文件 | 操作 |
|---|---|---|
| 1 | | 添加增强器源代码 |
| 2 | | 添加测试用例 |
| 3 | | 在内置文档中添加该增强器的说明 |
| 4 | | 在概览卡片中添加该增强器 |
| 5 | | 在“内置增强器”表格中添加该增强器 |
| 6 | | 在README的增强器部分添加该增强器 |
重要提示:只有完成全部6个环节,才算任务完成。
Naming Conventions
命名规范
Use these placeholders consistently:
| Placeholder | Example (UserAgent) | Usage |
|---|---|---|
| | camelCase for event field key |
| | PascalCase in function/interface names |
| | Human-readable display name |
请统一使用以下占位符:
| 占位符 | 示例(UserAgent) | 用途 |
|---|---|---|
| | 事件字段键名,采用小驼峰命名 |
| | 函数/接口名称,采用大驼峰命名 |
| | 人类可读的显示名称 |
Step 1: Enricher Source
步骤1:增强器源代码
Add the enricher to .
packages/evlog/src/enrichers/index.tsRead references/enricher-template.md for the full annotated template.
Key architecture rules:
- Info interface -- define the shape of the enricher output (e.g., ,
UserAgentInfo)GeoInfo - Factory function -- returns
create{Name}Enricher(options?: EnricherOptions)(ctx: EnrichContext) => void - Uses -- accepts
EnricherOptionsto control merge behavior{ overwrite?: boolean } - Uses -- merge computed data with existing event fields, respecting
mergeEventField()overwrite - Uses -- case-insensitive header lookup helper
getHeader() - Sets a single event field --
ctx.event.{name} = mergedValue - Early return -- skip enrichment if required headers are missing
- No side effects -- enrichers only mutate , never throw or log
ctx.event
将增强器添加至。
packages/evlog/src/enrichers/index.ts请阅读references/enricher-template.md获取完整的带注释模板。
核心架构规则:
- 信息接口——定义增强器输出的结构(例如、
UserAgentInfo)GeoInfo - 工厂函数——返回
create{Name}Enricher(options?: EnricherOptions)(ctx: EnrichContext) => void - 使用——接受
EnricherOptions参数以控制合并行为{ overwrite?: boolean } - 使用——将计算得到的数据与现有事件字段合并,尊重
mergeEventField()配置overwrite - 使用——大小写不敏感的头信息查找工具函数
getHeader() - 设置单个事件字段——
ctx.event.{name} = mergedValue - 提前返回——如果缺少必要的头信息则跳过增强处理
- 无副作用——增强器仅修改,不会抛出异常或记录日志
ctx.event
Step 2: Tests
步骤2:测试用例
Add tests to .
packages/evlog/test/enrichers.test.tsRequired test categories:
- Sets field from headers -- verify the enricher populates the event field correctly
- Skips when header missing -- verify no field is set when the required header is absent
- Preserves existing data -- verify (default) doesn't replace user-provided fields
overwrite: false - Overwrites when requested -- verify replaces existing fields
overwrite: true - Handles edge cases -- empty strings, malformed values, case-insensitive header names
Follow the existing test structure in -- each enricher has its own block.
enrichers.test.tsdescribe将测试用例添加至。
packages/evlog/test/enrichers.test.ts需要覆盖的测试类别:
- 从请求头设置字段——验证增强器能否正确填充事件字段
- 缺少请求头时跳过处理——验证当必要头信息缺失时不会设置字段
- 保留现有数据——验证默认的不会替换用户提供的字段
overwrite: false - 按配置覆盖数据——验证会替换现有字段
overwrite: true - 处理边缘情况——空字符串、格式错误的值、大小写不敏感的头名称
请遵循中已有的测试结构——每个增强器都有自己的块。
enrichers.test.tsdescribeStep 3: Update Built-in Docs
步骤3:更新内置文档
Edit to add a new section for the enricher.
apps/docs/content/4.enrichers/2.built-in.mdEach enricher section follows this structure:
markdown
undefined编辑,为该增强器添加新的章节。
apps/docs/content/4.enrichers/2.built-in.md每个增强器章节遵循以下结构:
markdown
undefined{DISPLAY}
{DISPLAY}
[One-sentence description of what the enricher does.]
Sets:
event.{name}```typescript
const enrich = create{Name}Enricher()
```
Output shape:
```typescript
interface {Name}Info {
// fields
}
```
Example output:
```json
{
"{name}": {
// example values
}
}
```
Add any relevant callouts for platform-specific notes or limitations.[一句话描述该增强器的功能。]
设置字段:
event.{name}```typescript
const enrich = create{Name}Enricher()
```
输出结构:
```typescript
interface {Name}Info {
// 字段
}
```
示例输出:
```json
{
"{name}": {
// 示例值
}
}
```
可添加任何与平台相关的注意事项或限制说明。Step 4: Update Overview Page
步骤4:更新概览页面
Edit to add a card for the new enricher in the section (before the Custom card):
apps/docs/content/4.enrichers/1.overview.md::card-groupmarkdown
:::card
---
icon: i-lucide-{icon}
title: {DISPLAY}
to: /enrichers/built-in#{anchor}
---
[Short description.]
:::编辑,在部分(Custom卡片之前)为新增强器添加一张卡片:
apps/docs/content/4.enrichers/1.overview.md::card-groupmarkdown
:::card
---
icon: i-lucide-{icon}
title: {DISPLAY}
to: /enrichers/built-in#{anchor}
---
[简短描述。]
:::Step 5: Update AGENTS.md
步骤5:更新AGENTS.md
Add the new enricher to the "Built-in Enrichers" table in the root file, in the "Event Enrichment" section:
AGENTS.mdmarkdown
| {DISPLAY} | `evlog/enrichers` | `{name}` | [Description] |在根目录的文件的“内置增强器”表格中,将新增强器添加至“事件增强”部分:
AGENTS.mdmarkdown
| {DISPLAY} | `evlog/enrichers` | `{name}` | [描述] |Step 6: Update READMEs
步骤6:更新README文件
Add the enricher to the enrichers section in both and . Both files should list all built-in enrichers with their event fields and output shapes.
README.mdpackages/evlog/README.md在和的增强器部分添加该增强器。两个文件都应列出所有内置增强器及其事件字段和输出结构。
README.mdpackages/evlog/README.mdVerification
验证
After completing all steps, run:
bash
cd packages/evlog
bun run build # Verify build succeeds
bun run test # Verify tests pass完成所有步骤后,运行以下命令:
bash
cd packages/evlog
bun run build # 验证构建成功
bun run test # 验证测试通过