aitable-workflow-cli 0.1.23 → 0.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +1 -6
  2. package/dist/{chunk-IGB6WDLR.js → chunk-UNPV6DTX.js} +1 -1
  3. package/dist/cli.js +47 -47
  4. package/dist/config-set-FBOQBRSJ.js +13 -0
  5. package/dist/{config-ui-server-CORDAOYI.js → config-ui-server-IUSACAOT.js} +1 -1
  6. package/package.json +3 -3
  7. package/dist/config-set-EGLLIMVJ.js +0 -13
  8. package/templates/support-qa/.env.example +0 -16
  9. package/templates/support-qa/aitable-workflow.config.yml +0 -46
  10. package/templates/support-qa/coding-agents.config.json +0 -18
  11. package/templates/support-qa/lib/__tests__/declarative-matcher.test.ts +0 -240
  12. package/templates/support-qa/lib/__tests__/dingtalk-group-membership.test.ts +0 -144
  13. package/templates/support-qa/lib/__tests__/memory-events.test.ts +0 -90
  14. package/templates/support-qa/lib/__tests__/sandbox-agent.test.ts +0 -382
  15. package/templates/support-qa/lib/__tests__/thread-adapter.test.ts +0 -242
  16. package/templates/support-qa/lib/__tests__/thread-observe-step.test.ts +0 -391
  17. package/templates/support-qa/lib/__tests__/thread-observer-handler.test.ts +0 -274
  18. package/templates/support-qa/lib/action-dispatch.ts +0 -262
  19. package/templates/support-qa/lib/contract.ts +0 -253
  20. package/templates/support-qa/lib/declarative-matcher.ts +0 -398
  21. package/templates/support-qa/lib/dingtalk-group-membership.ts +0 -158
  22. package/templates/support-qa/lib/guards.ts +0 -18
  23. package/templates/support-qa/lib/memory-events.ts +0 -113
  24. package/templates/support-qa/lib/owner-resolver.ts +0 -94
  25. package/templates/support-qa/lib/preflight.ts +0 -294
  26. package/templates/support-qa/lib/profile.ts +0 -51
  27. package/templates/support-qa/lib/sandbox-agent.ts +0 -653
  28. package/templates/support-qa/lib/thread-adapter.ts +0 -281
  29. package/templates/support-qa/lib/thread-digest.ts +0 -144
  30. package/templates/support-qa/npmrc +0 -1
  31. package/templates/support-qa/package.json +0 -27
  32. package/templates/support-qa/profiles/aitable/profile/escalation/contacts.json +0 -37
  33. package/templates/support-qa/profiles/aitable/profile/escalation/owner-map.json +0 -18
  34. package/templates/support-qa/profiles/aitable/profile/fastpath/known-answers.yml +0 -561
  35. package/templates/support-qa/profiles/aitable/profile/profile.yml +0 -219
  36. package/templates/support-qa/profiles/aitable/profile/prompts/kb-editor.md +0 -3
  37. package/templates/support-qa/profiles/aitable/profile/prompts/persona.md +0 -49
  38. package/templates/support-qa/profiles/aitable/profile/prompts/troubleshooter.md +0 -5
  39. package/templates/support-qa/profiles/aitable/profile/troubleshoot/classifiers.yml +0 -36
  40. package/templates/support-qa/profiles/aitable/skills/troubleshooting/SKILL.md +0 -58
  41. package/templates/support-qa/profiles/aitable/skills/troubleshooting/aitable-import-troubleshooter/SKILL.md +0 -485
  42. package/templates/support-qa/profiles/aitable/skills/troubleshooting/aitable-openapi-troubleshooter/SKILL.md +0 -183
  43. package/templates/support-qa/profiles/aitable/skills/troubleshooting/import-openapi-e2e-troubleshooter/SKILL.md +0 -459
  44. package/templates/support-qa/profiles/aitable/skills/troubleshooting/notable-datasource-troubleshooter/SKILL.md +0 -1286
  45. package/templates/support-qa/profiles/aitable/skills/troubleshooting/notable-field-troubleshooter/SKILL.md +0 -673
  46. package/templates/support-qa/profiles/aitable/skills/troubleshooting/spreadsheet-datasync-troubleshooter/SKILL.md +0 -322
  47. package/templates/support-qa/profiles/default/profile/fastpath/known-answers.yml +0 -32
  48. package/templates/support-qa/profiles/default/profile/profile.yml +0 -217
  49. package/templates/support-qa/profiles/default/profile/troubleshoot/classifiers.yml +0 -37
  50. package/templates/support-qa/profiles/default/wiki/support//345/270/270/350/247/201/351/227/256/351/242/230.md +0 -10
  51. package/templates/support-qa/tsconfig.json +0 -16
  52. package/templates/support-qa/vitest.config.ts +0 -9
  53. package/templates/support-qa/workflows/admin-kb-update/recipes/kb-refine.recipe.ts +0 -137
  54. package/templates/support-qa/workflows/admin-kb-update/recipes/kb_sync_handler.recipe.ts +0 -119
  55. package/templates/support-qa/workflows/admin-kb-update/workflow.yml +0 -96
  56. package/templates/support-qa/workflows/config-sync/recipes/config_sync.recipe.ts +0 -668
  57. package/templates/support-qa/workflows/config-sync/recipes/config_sync_handler.recipe.ts +0 -16
  58. package/templates/support-qa/workflows/config-sync/workflow.yml +0 -62
  59. package/templates/support-qa/workflows/daily-review/recipes/daily_review.recipe.ts +0 -602
  60. package/templates/support-qa/workflows/daily-review/recipes/daily_review_handler.recipe.ts +0 -26
  61. package/templates/support-qa/workflows/daily-review/workflow.yml +0 -65
  62. package/templates/support-qa/workflows/group-qa/recipes/answer.recipe.ts +0 -231
  63. package/templates/support-qa/workflows/group-qa/recipes/conversation_handler.recipe.ts +0 -394
  64. package/templates/support-qa/workflows/group-qa/recipes/fastpath.recipe.ts +0 -72
  65. package/templates/support-qa/workflows/group-qa/recipes/on-action.recipe.ts +0 -225
  66. package/templates/support-qa/workflows/group-qa/recipes/reply-to-group.recipe.ts +0 -202
  67. package/templates/support-qa/workflows/group-qa/recipes/troubleshoot.recipe.ts +0 -273
  68. package/templates/support-qa/workflows/group-qa/workflow.yml +0 -268
  69. package/templates/support-qa/workflows/thread-observer/README.md +0 -96
  70. package/templates/support-qa/workflows/thread-observer/recipes/thread_observe.recipe.ts +0 -415
  71. package/templates/support-qa/workflows/thread-observer/recipes/thread_observer_handler.recipe.ts +0 -213
  72. package/templates/support-qa/workflows/thread-observer/workflow.yml +0 -185
  73. package/templates/support-qa/workspaces/daily-review/AGENTS.md +0 -233
  74. package/templates/support-qa/workspaces/kb-editor/AGENTS.md +0 -32
  75. package/templates/support-qa/workspaces/support/AGENTS.md +0 -156
  76. package/templates/support-qa/workspaces/thread-observer/AGENTS.md +0 -156
  77. package/templates/support-qa/workspaces/troubleshooter/AGENTS.md +0 -71
@@ -1,219 +0,0 @@
1
- # support-qa Profile v2 — 钉钉 AI 表格业务包
2
- #
3
- # 唯一配置事实源:角色轴(roles.*)+ 工作流轴(workflows.*)
4
- # 完整字段与语义见 docs/plans/2026-07-28-support-qa-profile-config-refactor-spec.md
5
- schema_version: 2
6
-
7
- # 共享知识映射:scaffold / bundle 时按此声明从 _shared/<source>/ 复制到模板目标位置。
8
- shared_knowledge:
9
- wiki/faq-support: aitable-faq
10
-
11
- # ─── 角色轴:完整 role 定义,严格遵循 core roleDefinitionSchema ──
12
- # id 由键名承载;persona 支持 { file: } 引用(core 加载期读文件);
13
- # 原顶层 product / knowledge 段取消:product 折入 support 角色,
14
- # knowledge 折入 knowledge_scope.kb_collections(core 原生字段)。
15
- roles:
16
- support:
17
- name: "钉钉 AI 表格答疑助手"
18
- persona:
19
- file: prompts/persona.md
20
- knowledge_scope:
21
- kb_collections:
22
- - wiki/faq-support
23
- troubleshooter:
24
- name: 问题排查助手
25
- persona:
26
- file: prompts/troubleshooter.md
27
- kb-editor:
28
- name: 知识库编辑
29
- persona:
30
- file: prompts/kb-editor.md
31
- guardrails:
32
- - id: faithful-to-admin
33
- rule: 严格忠实管理员结论,不臆造功能/路径/参数;管理员未提及的不要补充。
34
- severity: warning
35
- - id: output-conclusion-only
36
- rule: 只输出要追加的 Markdown 结论正文,不输出文件名/JSON/前后缀说明。
37
- severity: warning
38
- config-syncer:
39
- name: 配置同步器
40
- persona: 你负责把远程 AI 表格里的群配置与管理员名单固化到本地文件,仅做数据搬运,不作答。
41
- daily-review:
42
- name: 每日复盘
43
- persona: 你负责每日凌晨对各群昨日对话做复盘,仅做归纳整理,不对外发言。
44
- # thread 级分析师(旁路试点)。具体分类与结论口径在 workspaces/thread-observer/AGENTS.md,
45
- # 该文件是可定制的业务口径:换场景只改它,不改代码。
46
- thread-observer:
47
- name: 会话线程分析师
48
- persona: 你只分析已收敛的会话线程并产出结构化结论,不对外发言。
49
-
50
- # ─── 工作流轴:config 按 workflowId → event_sources / steps 组织 ──
51
- workflows:
52
- group-qa:
53
- toolkit_config:
54
- messaging:
55
- # 凭据全部来自群配置表四列(webhookUrl/webhookSecret/appKey/appSecret),
56
- # config-sync 定时拉取后发布到 globalVar,本地不配 .env;加群只改表。
57
- # 首轮 config-sync 完成前为空——webhook 出站会报 configError 阻塞待配置,属预期。
58
- # 群 Webhook 出站凭据(map: groupId → {url, secret})。
59
- webhook_creds: "${globalVar.webhook_creds}"
60
- # 企业机器人凭据(map: appKey → {client_id, client_secret}):
61
- # stream 入站建连与会话内(session)出站共读;启用 stream 时在 workflow.yml 追加
62
- # dingtalk_stream 事件源(robot_refs/robot_creds 同引 globalVar)。
63
- robot_creds: "${globalVar.robot_creds}"
64
- memory: { root_dir: "./.memory" }
65
- event_sources:
66
- 群消息监听:
67
- # dingtalk_event 长连接无轮询,不配 poll_interval_ms。
68
- # all-group:单进程监听全部群,conversation_ids 退化为本地白名单(空名单=全丢弃);
69
- # 内存与群数解耦,名单热更不动进程。退回每群一进程把 kind 改成 group。
70
- kind: all-group
71
- conversation_ids: "${globalVar.group_pull_list}"
72
- image_mode: download
73
- handler_config:
74
- # 群机器人身份与真人名单来源,均由 config-sync 发布
75
- conversation_ids: "${globalVar.group_configs}"
76
- admins: "${globalVar.admins}"
77
- aggregate_window_ms: 5000
78
- steps:
79
- fastpath:
80
- rules: fastpath/known-answers.yml
81
- troubleshoot:
82
- conversation_ids: "${globalVar.group_configs}"
83
- skills_dir: skills/troubleshooting
84
- classifiers: troubleshoot/classifiers.yml
85
- answer:
86
- # coding: { engine: qoder } # 可选:覆写本步 coding 引擎(缺省走全局 coding-agents 配置)
87
- standby: { enabled: false, wait_minutes: 30 }
88
- # 模块→Owner 映射已迁入 AI 表格「功能模块人员配置表」(模块-文本 + 人员-人员字段),
89
- # 由 config-sync 定时拉取并发布 ${globalVar.module_owners},不再在 profile 里维护 escalation 文件
90
- # 处置策略(拍平 action):只配留痕(track)与群里说不说话(group: answer|silent)。
91
- # Owner 尾注不在这里配:bug/feature/kb_gap 且 module 能解析出 Owner 时,Runtime 自动附加;
92
- # kb_gap 默认群内静默但留痕 + 写知识补充通知字段(改 group: answer 即不再静默并自动附 Owner 尾注)
93
- on_action:
94
- # 功能模块人员配置来源(config-sync 发布):bug/feature/kb_gap 升级时据此解析模块 Owner
95
- module_owners: "${globalVar.module_owners}"
96
- # Webhook 群必须配置 corpId 才允许真实 @;缺失时 Owner 尾注降级为花名
97
- group_configs: "${globalVar.group_configs}"
98
- policies:
99
- reply: { track: true, group: answer }
100
- bug: { track: true, group: answer }
101
- feature: { track: true, group: answer }
102
- kb_gap: { track: true, group: silent }
103
- no_question: { track: false, group: silent }
104
- human_handled: { track: false, group: silent }
105
- owner_mentioned: { track: true, group: silent }
106
- safety: { track: true, group: silent }
107
- agent_failure: { track: true, group: silent }
108
- reply_to_group:
109
- messaging: {}
110
- group_configs: "${globalVar.group_configs}" # 按群路由出站方式与 credRef(config-sync 由表内凭据列合成)
111
-
112
- admin-kb-update:
113
- toolkit_config:
114
- file: { base_dir: "${roles.support.knowledge_scope.kb_collections[0]}" }
115
- event_sources:
116
- 管理员更新监听:
117
- source_table: { mode: reference, ref: workflow:group-qa.tracker }
118
- watch_mode: both
119
- poll_interval_ms: 300000
120
- resolve_field_names: true
121
- emit_existing: true
122
- filter: { field: 知识沉淀, equals: 待沉淀 }
123
- handler_config:
124
- admin_field: 管理员更新
125
- question_field: 消息内容
126
- context_field: 对话上下文
127
- steps:
128
- kb_refine:
129
- # coding: { engine: qoder } # 可选:覆写本步 coding 引擎(缺省走全局 coding-agents 配置)
130
- file: { base_dir: "${roles.support.knowledge_scope.kb_collections[0]}" }
131
- kb_file: 钉钉AI表格FAQ.md
132
-
133
- config-sync:
134
- event_sources:
135
- 定时同步:
136
- interval_ms: 300000
137
- fire_immediately: true
138
- event_type: config_sync_tick
139
- steps:
140
- config_sync:
141
- group_table: { baseId: "", tableId: "" }
142
- admin_table: { baseId: "", tableId: "" }
143
- owner_table: { baseId: "", tableId: "" } # 功能模块人员配置表(模块-文本 + 人员-人员):bug/feature/kb_gap 升级时 @ 模块 Owner
144
- group_var: "${globalVar.group_configs}"
145
- pull_list_var: "${globalVar.group_pull_list}"
146
- stream_var: "${globalVar.stream_robot_refs}"
147
- webhook_creds_var: "${globalVar.webhook_creds}" # 群配置表 webhookUrl/webhookSecret 列派生
148
- robot_creds_var: "${globalVar.robot_creds}" # 群配置表 appKey/appSecret 列派生
149
- admin_var: "${globalVar.admins}"
150
- owner_var: "${globalVar.module_owners}"
151
- empty_confirm_rounds: 2 # 空快照门禁:连续读到空达该轮数才真正清空(防读空抖动误清名单);设 1 即即时清空
152
-
153
- daily-review:
154
- toolkit_config:
155
- memory: { root_dir: "./.memory" }
156
- event_sources:
157
- 每日复盘调度:
158
- daily_at: "01:00"
159
- timezone: Asia/Shanghai
160
- event_type: daily_review_trigger
161
- fire_immediately: false
162
- steps:
163
- daily_review:
164
- conversation_ids: "${globalVar.group_configs}"
165
- daily_stats_table: { baseId: "", tableId: "", mode: owned }
166
- product_backlog_table: { baseId: "", tableId: "" }
167
- learning_candidate_table:
168
- baseId: { ref: workflow:group-qa.tracker.base_id }
169
- tableId: { ref: workflow:group-qa.tracker.table_id }
170
- saved_minutes_per_reply: 15
171
- timezone: Asia/Shanghai
172
- learning:
173
- from_admin_replies: true
174
- review: human-approve
175
-
176
- # ─── thread-observer:旁路试点,默认不启用 ────────────────────────────
177
- # 它与 group-qa 并行监听同一个试点群,但**不回复、不调主链、不写 group-qa 的表**,
178
- # 只往自己的观察表写「一条 thread 一行」。目的是用真实群验证 messageId/threadId 归属、
179
- # thread 级 SLA、以及抽取四列是否可用。
180
- #
181
- # 开启方式:把下面 conversation_ids 改成真实的试点群 cid(**建议先只开一个群**)。
182
- # 留空数组 = 不监听任何群,等于本工作流空转。
183
- #
184
- # 成本:R0 刻意**不做事件源 fan-out**,两个工作流各自 poll,同群会多一次 DWS 拉取。
185
- # 单群试点可接受;若未来多群长期并行,再设计 core 事件分发器(P1)。
186
- thread-observer:
187
- event_sources:
188
- 群消息监听:
189
- conversation_ids: [] # ← 填试点群 cid 即启用,如 ["cidXXXX=="]
190
- poll_interval_ms: 12000
191
- # 试点默认关图片:group-qa 已在同群下载过一遍,重复下载只增成本。
192
- # 确需验证「图片 thread」时再改 download。
193
- image_mode: off
194
- handler_config:
195
- bots: "${globalVar.group_configs}" # 取其 botNick;缺失会让机器人消息被当成用户提问
196
- answerers: "${globalVar.admins}" # 缺失时 SLA 标不适用,**不猜** answerer
197
- group_configs: "${globalVar.group_configs}" # 仅用于反查群名(dingtalk_message 源不返回群名)
198
- thread_log_dir: "./.threads" # 不配则完全不碰文件系统(配置即授权);必须与 .memory 分开
199
- thread_log_retain_days: 2
200
- thread_idle_close_min: 30 # 静默多久算收敛;试点想更快看结果可调小
201
- thread_max_open_hour: 6
202
- # 两个归并开关默认关(core 也默认关)。**误合比漏合严重得多**,所以要开就显式开,
203
- # 并盯住「归并复核池」视图里的 low 置信样本;一旦发现明显错合,优先在此关掉。
204
- thread_enable_mention_merge: true # 提问人锚定 + @人名/称呼;外部群机器人 @ 不了真人,只能靠人名文本
205
- thread_enable_heuristic_merge: false # 时间邻近类启发式:准确率未实测,默认不赌
206
- # 称呼模式应与机器人回复所用的称呼模板**同源**,否则机器人应答会被拆成独立 thread
207
- thread_address_patterns: ["Hi {name}"]
208
- steps:
209
- thread_observe:
210
- bots: "${globalVar.group_configs}"
211
- answerers: "${globalVar.admins}"
212
- module_owners: "${globalVar.module_owners}" # 模块字典,与答疑链路口径同源
213
- max_root_retry: 3
214
- max_fail_retry: 3
215
- retry_backoff_ms: 600000
216
- max_per_round: 3
217
- # 试点开关:无真人响应的 thread 也进 LLM 抽取(由 AGENTS.md 口径判类型)。
218
- # 默认 false 控成本;验证抽取链路或想沉淀 bot-only 问答时改 true。
219
- digest_all: false
@@ -1,3 +0,0 @@
1
- # 知识库编辑
2
-
3
- 你是知识库编辑,负责把「管理员的权威结论」提炼成简洁、准确、可检索的 FAQ 条目。忠实于管理员结论(以其为准),不臆造、不添加无依据的信息;语言精炼、结构清晰。
@@ -1,49 +0,0 @@
1
- # 钉钉 AI 表格答疑助手 — 产品人设补充
2
-
3
- > 本段是 support-qa Pattern 基座(闸门规则 / 输出契约 / 去 AI 味 / 安全防护 / 回答流程 / 来源规则 / Owner 引导通用机制)之上的**产品特化补充**,只承载钉钉 AI 表格的业务知识,不重复基座已有规则。
4
-
5
- ## 一、你是谁
6
-
7
- 你是**钉钉 AI 表格答疑助手**,只基于注入的钉钉 AI 表格知识库(wiki/faq-support)与 FAQ 为用户答疑。事实依据只能来自知识库,文档没提到的功能不要断言"不支持"。
8
-
9
- ## 二、关键词 → 文档速查索引
10
-
11
- 收到问题先按关键词用 Grep 在知识库定位候选文章,再 Read 原文;FAQ 文件 `钉钉AI表格FAQ.md` 是社群高频问答,优先匹配。
12
-
13
- | 用户关键词 | 优先查阅方向 |
14
- |-----------|---------------|
15
- | 导入、Excel、csv、模板、行数上限 | 导入指南、常见上限、常见问题 |
16
- | 导出、排序、筛选、分组、填色、行高列宽、历史记录、一表一助理 | 对应操作指南 |
17
- | 字段、字段类型、AI字段、文本生成、信息提取、图像识别、字段编组、冻结列 | 字段类型列表、AI 字段开发指南、字段编组 |
18
- | 表单、收集表、明细表、预填、周期分表 | 表单基础操作、周期分表、明细表、预填默认值 |
19
- | 公式、函数、COUNTIF、ROUND、跨表计算 | 公式函数大全、函数实践、公式错误代码列表 |
20
- | 数据同步、OA审批、考勤、待办、日程、通讯录、跨表同步、共享数据源 | 数据连接中心及各同步指南、跨表同步、组织内共享数据源 |
21
- | 视图、甘特图、日历、看板、画册、透视表、查询页面、分享视图 | 各视图概念文档、数据表与视图关系 |
22
- | 仪表盘、图表、TOP N、智能总结 | 仪表盘使用、仪表盘组件、仪表盘常见问题 |
23
- | 应用模式、按钮、标签页、过滤器、列表组件 | 全新应用模式及各组件概念 |
24
- | 自动化、工作流、触发、webhook、循环、HTTP请求、定时、消息卡片 | 自动化工作流、触发条件与动作一览、自动化常见问题 |
25
- | AI助理、随口说、万能贴 | AI 表格助理、万能贴使用说明 |
26
- | 权限、角色、行权限、列权限 | 高级权限使用、默认角色、行列权限、权限常见问题 |
27
- | 插件、脚本、自定义插件 | 插件中心使用指南、脚本/自定义插件 |
28
- | 误删、恢复、重复标记 | 误删恢复指南、标记重复内容 |
29
- | 更新、升级、公告、版本 | 版本升级通知、升级说明 |
30
-
31
- ## 三、补充话术——按场景附加到 reply
32
-
33
- > 以下链接仅在**对应场景**附加;无关话题严禁附加(附错群/错链接会误导用户)。禁反引号,链接裸文本附上。
34
-
35
- ### 数据源专属群(仅数据源相关问答)
36
-
37
- 适用:数据连接中心、数据同步、共享数据源、跨表同步、OA 审批/考勤/待办/日程/通讯录/AI 听记/表格数据同步、数据源开发等。
38
- 附加场景:数据源问题部分可答(细节需进一步确认)、数据源 Bug 文档无解需引导排查、用户连续围绕数据源追问。
39
- 不附场景:单点事实已答清、命中静默、用户已在群内/已联系数据源同学、**非数据源话题**。
40
-
41
- 群名:**AI 表格数据源服务群**。reply 末尾片段(出处链接前后均可):
42
-
43
- ```
44
- > 💬 如需进一步交流,可加入 AI 表格数据源服务群:https://qr.dingtalk.com/action/joingroup?code=v1,k1,8ViRzL1ql9qPUD38uXa0W8E7hwXMWfZ9wZoLMWu56X2dR7ksupjDEA==&_dt_no_comment=1&origin=11
45
- ```
46
-
47
- ### 定价页(购买 / 收费 / 权益问答)
48
-
49
- 回答付费权益后附定价页:**https://table.dingtalk.com/pricing** 。如需进一步咨询,引导「商业化与版本权益」模块 Owner。
@@ -1,5 +0,0 @@
1
- # 问题排查助手
2
-
3
- 你是一名问题排查助手(support-qa L3 troubleshoot 包)。当某条消息被声明式分类器确定性识别为可排查的问题类型时,你会被调起,读取 profile 的 skills_dir 下的 Skill 完成真实排查,并按 workspaces/troubleshooter/AGENTS.md 的 JSON 契约输出结果。
4
-
5
- 具体产品与排查手段由 profile(skills_dir / classifiers)注入,本 role 只是通用骨架。
@@ -1,36 +0,0 @@
1
- # troubleshoot 声明式分类器(钉钉 AI 表格 profile)
2
- # 把硬编码正则收敛为声明式分类规则。
3
- # 命中 → 由 troubleshoot 排查 Agent 读 skills_dir 的对应 Skill 完成排查;都不命中 → 交语义答疑。
4
-
5
- classifiers:
6
- # AI 字段标准失败模板:四个 ID 标签共现即判定(require_all),extract 供排查 Agent 定位
7
- # module 必须是 AI 表格「功能模块人员配置表」的模块名精确值:未定位异常据此路由到模块 Owner
8
- - issueType: ai_field
9
- module: AI字段
10
- reason: 命中 AI 字段标准失败模板
11
- require_all: true
12
- patterns:
13
- - contains: 'Sheet ID:'
14
- - contains: 'Record ID:'
15
- - contains: 'Field ID:'
16
- - contains: 'Task ID:'
17
- extract:
18
- sheetId: 'Sheet ID:\s*([^\n]+)'
19
- recordId: 'Record ID:\s*([^\n]+)'
20
- fieldId: 'Field ID:\s*([^\n]+)'
21
- taskId: 'Task ID:\s*(\S+)'
22
-
23
- # 数据源问题:docKey 与 时间戳 同时出现(沿用 handoff 严格门槛),extract 结构化线索
24
- - issueType: data_source
25
- module: 数据源
26
- reason: 同时包含 docKey 与时间戳,命中数据源问题规则
27
- require_all: true
28
- patterns:
29
- - contains: docKey
30
- - contains: 时间戳
31
- extract:
32
- docKey: 'docKey\s*[::=]\s*([A-Za-z0-9_-]+)'
33
- timestamp: '时间戳\s*[::=]\s*(\d{10,16})'
34
- syncScene: '同步场景\s*[::=]\s*([^\n]+)'
35
- traceId: 'traceId\s*[::=]\s*([A-Za-z0-9._:/-]+)'
36
- taskId: 'taskId\s*[::=]\s*([A-Fa-f0-9-]{32,36})'
@@ -1,58 +0,0 @@
1
- ---
2
- name: troubleshooting
3
- description: 钉钉 AI 表格、Notable、Lippi 线上问题排查的聚合路由 Skill。用户反馈导入失败、OpenAPI 异常、数据源或钉钉表格同步失败、connector 报错、AI 字段不更新、任务卡住,或提供 traceId、requestId、jobId、importId、docKey 并要求定位根因时使用;必须从本目录选择并加载一个具体排查 Skill 继续执行。
4
- ---
5
-
6
- # AI 表格问题排查路由
7
-
8
- 将问题路由到本目录下最具体的排查 Skill,并真正执行目标 Skill 的工作流。
9
-
10
- <IMPORTANT>
11
- 先完成路由,再查询日志、阅读业务代码、给出结论或追问目标 Skill 要求的字段。
12
-
13
- 路由完成后,必须完整读取目标 `SKILL.md` 并按其指令执行。不要只返回 Skill 名称、文件路径或工作流摘要,也不要同时拼接多个 Skill 的步骤。
14
- </IMPORTANT>
15
-
16
- ## 路由步骤
17
-
18
- 1. 从用户输入识别问题对象、调用入口、同步类型和已有标识符。
19
- 2. 按下表从上到下匹配;命中最具体的场景后停止。
20
- 3. 完整读取目标 `SKILL.md`。其中的相对路径均以目标 Skill 目录为基准。
21
- 4. 按目标 Skill 要求加载 `MEMORY.md`、脚本或其他资源,并执行其前置检查、信息收集、日志查询、代码核对和结果输出流程。
22
- 5. 在内部确认目标 Skill 及依据后继续排查;最终只按工作区 `AGENTS.md` 的 JSON 契约输出,不单独输出路由过程。
23
-
24
- ## 路由表
25
-
26
- | 优先级 | 问题场景 | 识别信号 | 加载 |
27
- | --- | --- | --- | --- |
28
- | 1 | AI 字段执行链路 | AI 字段不更新、LLM 调用失败、字段任务卡住、回写失败、字段状态机异常,或提供 AI 字段 `taskId` | `notable-field-troubleshooter/SKILL.md` |
29
- | 2 | 导入 OpenAPI 端到端排查或大盘 | 同时出现“导入”和 OpenAPI、开放接口、网关、外部开发者、`jobId`、`baseId`;或要求导入成功率、失败分布、导入大盘 | `import-openapi-e2e-troubleshooter/SKILL.md` |
30
- | 3 | 非导入类 OpenAPI 线上错误 | AI 表格/文档 OpenAPI 返回异常、超时、`internalError`,提供 `requestId` 或 `traceId`,且问题不是导入链路 | `aitable-openapi-troubleshooter/SKILL.md` |
31
- | 4 | 普通导入失败 | 前端、MCP 或入口不明的 CSV/XLSX 导入失败,提供 `traceId`、`docKey` 或 `importId`,且未明确属于 OpenAPI | `aitable-import-troubleshooter/SKILL.md` |
32
- | 5 | 钉钉表格数据源同步 | 明确为“钉钉表格同步”、`SPREADSHEET`、`SyncTypeEnum=5`,并出现解析、插行、同步状态异常 | `spreadsheet-datasync-troubleshooter/SKILL.md` |
33
- | 6 | 其他数据源同步链路 | 数据源/connector/iPaaS/MySQL/考勤/OA 审批/AI 表格间/三方数据源/生参同步失败,或同步类型尚不明确 | `notable-datasource-troubleshooter/SKILL.md` |
34
-
35
- ## 冲突判定
36
-
37
- - “导入 + OpenAPI”优先进入导入 OpenAPI 端到端 Skill,不进入通用 OpenAPI Skill。
38
- - 明确“钉钉表格数据源同步”优先进入专用钉钉表格同步 Skill;其他数据源或同步类型不明进入通用数据源同步 Skill。
39
- - `traceId` 可被多个链路使用,不能单独作为路由依据;结合用户描述、入口、错误文案和其他 ID 判断。
40
- - 用户明确指定某个子 Skill 时,直接加载该 Skill,不重新选择。
41
- - 同一请求包含多个独立故障时,先执行最具体且最阻塞的一个;完成后再重新路由下一个,不并行混用工作流。
42
-
43
- ## 信息不足
44
-
45
- 若用户只给出一个无法判定链路的 ID 或“帮我排查”之类描述,先只询问一个能区分场景的问题,例如:这是导入、OpenAPI、数据源同步还是 AI 字段问题?确认后立即继续路由。
46
-
47
- 若确认不属于问题排查域,不要强行选择子 Skill;按工作区 `AGENTS.md` 返回无法定位的结构化结果,由上游决定后续处理。
48
-
49
- ## 执行约束
50
-
51
- - 目标 Skill 的指令优先于本路由;本文件只负责选择和交接。
52
- - 不预先读取全部子 Skill。只加载命中的目标 Skill,减少无关上下文。
53
- - 工具或 MCP 不可用时,遵循目标 Skill 的阻塞规则并明确缺少的依赖;不得虚构日志、代码或调用结果。
54
- - 除非用户只要求分析,否则“排查并修复”类目标 Skill 可以按其授权边界输出或实施修复;不要从“排查”自行扩展为修改生产环境。
55
-
56
- ## 维护
57
-
58
- 新增、删除或重命名问题排查 Skill 时,同步更新本路由表。此文件是本工作区的问题排查入口。