xiantong 文档

自动应用规则

使用正则表达式模式自动为会话添加标签

自动应用规则会自动扫描用户消息,并应用带有提取值的标签。只需在任意标签上配置正则表达式模式即可触发自动标记 —— 无需人工操作。例如,粘贴 Linear 问题 URL,会话就会自动添加对应的问题键标签。提到一个金额,预算标签就会出现。

配置#

labels/config.json 中的任意标签里添加 autoRules

{
 "id": "linear-issue",
 "name": "Linear Issue",
 "color": "purple",
 "valueType": "string",
 "autoRules": [
 {
 "pattern": "linear\\.app/[\\w-]+/issue/([A-Z]+-\\d+)",
 "valueTemplate": "$1",
 "description": "匹配 Linear 问题 URL"
 },
 {
 "pattern": "\\b([A-Z]{2,5}-\\d+)\\b",
 "valueTemplate": "$1",
 "description": "匹配像 CRA-123 这样的裸问题键"
 }
 ]
}

规则属性#

属性类型是否必需说明
patternstring带捕获组的正则表达式。使用 JavaScript 正则语法。
flagsstring正则标志(默认:gi —— 全局、忽略大小写)。g 永远强制启用。
valueTemplatestring使用 $1$2 等捕获组进行替换的模板。如果省略,则使用第一个捕获组。
descriptionstring用于描述此规则匹配内容的人类可读说明。

正则表达式模式#

规则使用带捕获组的 JavaScript 正则表达式:

{
 "pattern": "github\\.com/([\\w-]+/[\\w-]+)/pull/(\\d+)",
 "valueTemplate": "$1#$2",
 "description": "匹配 GitHub PR URL → repo#number"
}
  • 捕获组$1$2 等将在 valueTemplate 中被匹配的组取代
  • 全局匹配g 标志始终强制启用,因此会在一条消息中查找所有出现
  • 多次匹配"CRA-1 and CRA-2" 会在同一标签上生成两个标签项

评估行为#

规则什么时候会被评估?

规则会在用户发送消息时运行(包括新消息和排队消息)。只会扫描用户消息 —— 助手的输出和工具结果不参与。

代码块剥离#

在评估前,会移除围栏代码块(```)和行内代码(`)中的内容,防止在代码示例中误匹配。

去重#

相同的标签+取值组合不会重复添加到会话中。如果 linear-issue::CRA-123 已存在,再次提到 CRA-123 不会产生任何操作。

匹配限制#

每条消息最多匹配 10 个结果,以防从粘贴的数据(例如包含数百个问题键的日志文件)中触发大量标签。

同一标签的多条规则#

每个标签上的所有规则都会被评估。会收集所有规则中的所有匹配项并应用。

错误处理#

无效的正则表达式会在运行时跳过并记录为警告。配置保存时也会进行验证。

值规范化#

提取的值会根据标签的 valueType 进行规范化:

valueType原始捕获规范化结果
stringCRA-123CRA-123(保持原样)
number$45,00045000(去除符号与逗号)
number1.5M1500000(扩展后缀)
number50k50000(扩展后缀)
date2026-01-302026-01-30(保持原样)

完整示例#

一个自动标记 Linear 问题、截止日期、联系人和预算的工作区:

{
 "version": 1,
 "labels": [
 {
 "id": "linear-issue",
 "name": "Linear Issue",
 "color": "purple",
 "valueType": "string",
 "autoRules": [
 {
 "pattern": "linear\\.app/[\\w-]+/issue/([A-Z]+-\\d+)",
 "valueTemplate": "$1",
 "description": "Linear URL"
 },
 {
 "pattern": "\\b([A-Z]{2,5}-\\d+)\\b",
 "valueTemplate": "$1",
 "description": "裸问题键"
 }
 ]
 },
 {
 "id": "deadline",
 "name": "Deadline",
 "color": "orange",
 "valueType": "date",
 "autoRules": [
 {
 "pattern": "(\\d{4}-\\d{2}-\\d{2})",
 "valueTemplate": "$1",
 "description": "ISO 日期(YYYY-MM-DD)"
 }
 ]
 },
 {
 "id": "contact",
 "name": "Contact",
 "color": "blue",
 "valueType": "string",
 "autoRules": [
 {
 "pattern": "([\\w.+-]+@[\\w.-]+\\.[a-zA-Z]{2,})",
 "valueTemplate": "$1",
 "description": "电子邮件地址"
 }
 ]
 },
 {
 "id": "budget",
 "name": "Budget",
 "color": "green",
 "valueType": "number",
 "autoRules": [
 {
 "pattern": "\\$([\\d,.]+[kKmMbB]?)",
 "valueTemplate": "$1",
 "description": "美元金额"
 }
 ]
 }
 ]
}

使用此配置:

  • 粘贴 https://linear.app/team/issue/CRA-456 会添加 linear-issue::CRA-456
  • 输入 deadline is 2026-03-15 会添加 deadline::2026-03-15
  • 提到 reach out to alice@example.com 会添加 contact::alice@example.com
  • 写下 budget is $50k 会添加 budget::50000

验证#

创建或编辑自动规则后请务必验证。保存时会拒绝无效的正则表达式(包括存在 ReDoS 风险的模式)。

config_validate({ target: "labels" })