@rezti/dsh-rez-suite 0.1.50 → 0.1.52

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 (100) hide show
  1. package/CHANGELOG.md +13 -3
  2. package/README.md +3 -3
  3. package/lib/client.d.ts +3 -3
  4. package/lib/client.js +34 -6
  5. package/lib/index.js +11 -8
  6. package/package.json +2 -2
  7. package/src/boss/seed.ts +12 -7
  8. package/src/changelog.ts +30 -0
  9. package/src/client/locales.ts +6 -6
  10. package/src/wecom-cli.ts +1 -1
  11. package/templates/shared/wecom-cli.SOURCE.md +5 -1
  12. package/templates/shared/wecom-office/SKILL.md +3 -2
  13. package/templates/shared/wecomcli-calendar/references/calendar-agenda.md +224 -0
  14. package/templates/shared/wecomcli-calendar/references/calendar-cancel.md +108 -0
  15. package/templates/shared/wecomcli-calendar/references/calendar-create.md +238 -0
  16. package/templates/shared/wecomcli-calendar/references/calendar-freebusy.md +207 -0
  17. package/templates/shared/wecomcli-calendar/references/calendar-meeting-room.md +170 -0
  18. package/templates/shared/wecomcli-calendar/references/calendar-search.md +206 -0
  19. package/templates/shared/wecomcli-calendar/references/calendar-update.md +272 -0
  20. package/templates/shared/wecomcli-doc/references/doc-contents-append.md +20 -0
  21. package/templates/shared/wecomcli-doc/references/doc-contents-overwrite.md +27 -0
  22. package/templates/shared/wecomcli-doc/references/doc-create.md +161 -0
  23. package/templates/shared/wecomcli-doc/scripts/build_docx.py +1375 -0
  24. package/templates/shared/wecomcli-doc-manage/references/doc-members-update.md +24 -0
  25. package/templates/shared/wecomcli-doc-manage/references/doc-names-update.md +20 -0
  26. package/templates/shared/wecomcli-doc-manage/references/doc-rules-update.md +22 -0
  27. package/templates/shared/wecomcli-email/references/forward-mail.md +131 -0
  28. package/templates/shared/wecomcli-email/references/get-mail.md +166 -0
  29. package/templates/shared/wecomcli-email/references/reply-mail.md +138 -0
  30. package/templates/shared/wecomcli-email/references/search-mail.md +111 -0
  31. package/templates/shared/wecomcli-email/references/security.md +53 -0
  32. package/templates/shared/wecomcli-email/references/send-mail.md +186 -0
  33. package/templates/shared/wecomcli-email/references/send-schedule.md +83 -0
  34. package/templates/shared/wecomcli-meeting/references/meeting-cancel.md +113 -0
  35. package/templates/shared/wecomcli-meeting/references/meeting-create.md +167 -0
  36. package/templates/shared/wecomcli-meeting/references/meeting-list.md +226 -0
  37. package/templates/shared/wecomcli-meeting/references/meeting-original-get.md +98 -0
  38. package/templates/shared/wecomcli-meeting/references/meeting-search.md +173 -0
  39. package/templates/shared/wecomcli-meeting/references/meeting-update.md +217 -0
  40. package/templates/shared/wecomcli-sheet/references/sheet-contents-update.md +47 -0
  41. package/templates/shared/wecomcli-sheet/references/sheet-ranges-get.md +45 -0
  42. package/templates/shared/wecomcli-sheet/references/sheet-rows-append.md +45 -0
  43. package/templates/shared/wecomcli-sheet/references/sheet-subsheets-add.md +26 -0
  44. package/templates/shared/wecomcli-sheet/references/sheet-subsheets-delete.md +20 -0
  45. package/templates/shared/wecomcli-smartpage/references/data-driven-pages.md +50 -0
  46. package/templates/shared/wecomcli-smartpage/references/formula/arraylist.md +369 -0
  47. package/templates/shared/wecomcli-smartpage/references/formula/datetime.md +283 -0
  48. package/templates/shared/wecomcli-smartpage/references/formula/logic.md +247 -0
  49. package/templates/shared/wecomcli-smartpage/references/formula/math.md +362 -0
  50. package/templates/shared/wecomcli-smartpage/references/formula/operators.md +246 -0
  51. package/templates/shared/wecomcli-smartpage/references/formula/pageblock.md +76 -0
  52. package/templates/shared/wecomcli-smartpage/references/formula/templates.md +410 -0
  53. package/templates/shared/wecomcli-smartpage/references/formula/text.md +377 -0
  54. package/templates/shared/wecomcli-smartpage/references/formula/user.md +22 -0
  55. package/templates/shared/wecomcli-smartpage/references/formula-reference.md +192 -0
  56. package/templates/shared/wecomcli-smartpage/references/mdx-syntax.md +739 -0
  57. package/templates/shared/wecomcli-smartpage/references/smartpage-edit.md +506 -0
  58. package/templates/shared/wecomcli-smartsheet/assets/templates/README.md +53 -0
  59. package/templates/shared/wecomcli-smartsheet/assets/templates/ai_efficiency.md +709 -0
  60. package/templates/shared/wecomcli-smartsheet/assets/templates/connect_to_app.md +380 -0
  61. package/templates/shared/wecomcli-smartsheet/assets/templates/financial_accounting.md +369 -0
  62. package/templates/shared/wecomcli-smartsheet/assets/templates/hr_and_administration.md +475 -0
  63. package/templates/shared/wecomcli-smartsheet/assets/templates/ledger_records.md +156 -0
  64. package/templates/shared/wecomcli-smartsheet/assets/templates/manufacturing.md +395 -0
  65. package/templates/shared/wecomcli-smartsheet/assets/templates/marketing.md +186 -0
  66. package/templates/shared/wecomcli-smartsheet/assets/templates/office_essentials.md +299 -0
  67. package/templates/shared/wecomcli-smartsheet/assets/templates/personal_efficiency.md +70 -0
  68. package/templates/shared/wecomcli-smartsheet/assets/templates/procurement_logistics.md +325 -0
  69. package/templates/shared/wecomcli-smartsheet/assets/templates/project_management.md +564 -0
  70. package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_customer.md +222 -0
  71. package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_ops.md +105 -0
  72. package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_project.md +109 -0
  73. package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_research.md +92 -0
  74. package/templates/shared/wecomcli-smartsheet/assets/templates/sales_and_operations.md +446 -0
  75. package/templates/shared/wecomcli-smartsheet/assets/templates/store_management.md +431 -0
  76. package/templates/shared/wecomcli-smartsheet/assets/templates/team_tasks.md +274 -0
  77. package/templates/shared/wecomcli-smartsheet/assets/templates/wechat_customer.md +384 -0
  78. package/templates/shared/wecomcli-smartsheet/assets/templates/work_report.md +100 -0
  79. package/templates/shared/wecomcli-smartsheet/references/common.md +143 -0
  80. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-chart-types.md +95 -0
  81. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-edit.md +589 -0
  82. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-field-types.md +438 -0
  83. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-formula.md +845 -0
  84. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-read.md +391 -0
  85. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-record-values.md +201 -0
  86. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-view-types.md +356 -0
  87. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-webhook-examples.md +176 -0
  88. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-webhook.md +169 -0
  89. package/templates/shared/wecomcli-todo/references/todo-create.md +137 -0
  90. package/templates/shared/wecomcli-todo/references/todo-delete.md +63 -0
  91. package/templates/shared/wecomcli-todo/references/todo-finish.md +72 -0
  92. package/templates/shared/wecomcli-todo/references/todo-get.md +66 -0
  93. package/templates/shared/wecomcli-todo/references/todo-list.md +133 -0
  94. package/templates/shared/wecomcli-todo/references/todo-update.md +112 -0
  95. package/templates/staff/ecommerce/.agents/skills/ops-ecommerce/SKILL.md +2 -2
  96. package/templates/staff/ecommerce/AGENTS.md +8 -7
  97. package/templates/staff/ecommerce/SOUL.md +1 -1
  98. package/templates/staff/hr/.agents/skills/staff-onboard-keys/SKILL.md +2 -2
  99. package/templates/staff/publish/.agents/skills/ops-publish/SKILL.md +2 -2
  100. package/templates/staff/publish/AGENTS.md +4 -1
@@ -0,0 +1,226 @@
1
+ # 操作参考:查询会议列表
2
+
3
+ > [!CAUTION]
4
+ > **`meeting get` 单次最多查询 10 个会议**:`meeting_ids` 数组长度上限为 10。超过 10 个 meeting_id 时必须分批多次调用(每批 ≤ 10),分别拿到结果后在 Agent 侧合并;禁止一次性传入 > 10 个 ID(会被服务端拒绝)。例如:拉取了 25 个 meeting_id,需拆成 10 + 10 + 5 三批。
5
+ >
6
+ > **`meeting list` 必须翻页到底**:`meeting list` 返回中只要 `has_more == true`,就必须携带 `next_cursor` 再次调用 list,循环直到 `has_more == false`,否则会漏数据。
7
+
8
+ ## 命令
9
+
10
+ ```bash
11
+ wecom-cli meeting list --json '{...}'
12
+ wecom-cli meeting get --json '{...}'
13
+ ```
14
+
15
+ ## 请求参数(list)
16
+
17
+ | 字段 | 类型 | 必填 | 说明 |
18
+ | ------------ | ------- | ---- | ---------------------------------------------------------------------------------------------- |
19
+ | `begin_time` | string | 否 | 查询区间开始时间, 格式 `YYYY-MM-DD HH:mm:ss`, 与 `end_time` 必须同时提供或同时不提供, 不可只传其一 |
20
+ | `end_time` | string | 否 | 查询区间结束时间, 格式 `YYYY-MM-DD HH:mm:ss`, 与 `begin_time` 必须同时提供或同时不提供, 不可只传其一 |
21
+ | `cursor` | string | 否 | 分页游标, 首次请求不传 |
22
+ | `limit` | integer | 否 | 单次返回数量, 默认 20 |
23
+
24
+ ## 返回字段(list)
25
+
26
+ > 返回结果分为两个列表: `created_meetings`(当前用户创建的会议)和 `attended_meetings`(当前用户参加但非创建的会议),两个列表结构相同。
27
+
28
+ | 字段 | 说明 |
29
+ | ---------------------------------------------- | ---------------------------------------- |
30
+ | `created_meetings[].meeting_id` | 会议唯一标识 |
31
+ | `created_meetings[].sub_meeting_id` | 子会议 ID, 周期会议涉及 |
32
+ | `created_meetings[].subject` | 会议主题 |
33
+ | `created_meetings[].begin_time` | 会议开始时间, 格式 `YYYY-MM-DD HH:mm:ss` |
34
+ | `created_meetings[].end_time` | 会议结束时间, 格式 `YYYY-MM-DD HH:mm:ss` |
35
+ | `created_meetings[].attendee_count` | 参会人数 |
36
+ | `created_meetings[].meeting_room` | 会议室名称 |
37
+ | `created_meetings[].location` | 会议地点 |
38
+ | `created_meetings[].is_repeat_meeting` | 是否为周期性会议 |
39
+ | `created_meetings[].timezone.timezone_id` | 时区 ID, 如 `"Asia/Shanghai"` |
40
+ | `created_meetings[].timezone.timezone_offset` | 时区偏移量(秒), 如 28800 |
41
+ | `attended_meetings[].meeting_id` | 会议唯一标识 |
42
+ | `attended_meetings[].sub_meeting_id` | 子会议 ID, 周期会议涉及 |
43
+ | `attended_meetings[].subject` | 会议主题 |
44
+ | `attended_meetings[].begin_time` | 会议开始时间, 格式 `YYYY-MM-DD HH:mm:ss` |
45
+ | `attended_meetings[].end_time` | 会议结束时间, 格式 `YYYY-MM-DD HH:mm:ss` |
46
+ | `attended_meetings[].attendee_count` | 参会人数 |
47
+ | `attended_meetings[].meeting_room` | 会议室名称 |
48
+ | `attended_meetings[].location` | 会议地点 |
49
+ | `attended_meetings[].is_repeat_meeting` | 是否为周期性会议 |
50
+ | `attended_meetings[].timezone.timezone_id` | 时区 ID, 如 `"Asia/Shanghai"` |
51
+ | `attended_meetings[].timezone.timezone_offset` | 时区偏移量(秒), 如 28800 |
52
+ | `attended_meetings[].creator_name` | 会议创建人名称 |
53
+ | `created_meetings_count` | `created_meetings` 数组元素数量 |
54
+ | `attended_meetings_count` | `attended_meetings` 数组元素数量 |
55
+ | `next_cursor` | 下一页游标, `has_more` 为 true 时有效 |
56
+ | `has_more` | 是否还有更多数据 |
57
+
58
+ ## 请求参数(get)
59
+
60
+ > **输入格式强制要求**:`meeting_ids` 必须使用以下嵌套对象数组结构传入,不可简化为字符串数组:
61
+ > ```json
62
+ > {
63
+ > "meeting_ids": [
64
+ > {
65
+ > "meeting_id": "会议ID",
66
+ > "sub_meeting_id": "子会议ID"
67
+ > }
68
+ > ]
69
+ > }
70
+ > ```
71
+ > 每个元素必须是包含 `meeting_id`(必填)和可选 `sub_meeting_id` 的对象,**不得直接传字符串**。
72
+
73
+ | 字段 | 类型 | 必填 | 说明 |
74
+ | ------------------------------ | ------ | ---- | ---------------------------------------------------- |
75
+ | `meeting_ids` | array | 是 | 会议 ID 列表,最少 1 个,最多 10 个。超过 10 个时必须分批请求,每批不超过 10 个。**每个元素必须是对象(含 `meeting_id` 字段),不可传字符串** |
76
+ | `meeting_ids[].meeting_id` | string | 是 | 会议 ID(长字符串, 如 `mtkSFfCg...`), 非 9 位会议号 |
77
+ | `meeting_ids[].sub_meeting_id` | string | 否 | 子会议 ID, 周期会议需指定 |
78
+
79
+ ## 返回字段(get)
80
+
81
+ | 字段 | 说明 |
82
+ | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
83
+ | `meetings[].meeting_id` | 会议 ID |
84
+ | `meetings[].sub_meeting_id` | 子会议 ID, 周期会议当前子会议 ID |
85
+ | `meetings[].subject` | 会议主题 |
86
+ | `meetings[].begin_time` | 开始时间, 格式 `YYYY-MM-DD HH:mm:ss` |
87
+ | `meetings[].end_time` | 结束时间, 格式 `YYYY-MM-DD HH:mm:ss` |
88
+ | `meetings[].current_user_enter_time` | 当前调用用户的入会时间, 格式 `YYYY-MM-DD HH:mm:ss`, 取最早一次入会时间; **仅会议结束后返回, 未入会时为空** |
89
+ | `meetings[].current_user_quit_time` | 当前调用用户的离会时间, 格式 `YYYY-MM-DD HH:mm:ss`, 取最晚一次离会时间; **仅会议结束后返回, 未入会时为空** |
90
+ | `meetings[].timezone.timezone_id` | 时区 ID, 如 `"Asia/Shanghai"` |
91
+ | `meetings[].timezone.timezone_offset` | 时区偏移量(秒), 如 28800 |
92
+ | `meetings[].meeting_room` | 会议室名称 |
93
+ | `meetings[].location` | 会议地点 |
94
+ | `meetings[].description` | 会议备注描述 |
95
+ | `meetings[].repeat_rule` | 周期规则, 非周期会议为空 |
96
+ | `meetings[].repeat_rule.repeat_type` | 周期类型: `"daily"`-每天, `"weekday"`-每个工作日, `"weekly"`-每周, `"biweekly"`-每两周, `"monthly"`-每月 |
97
+ | `meetings[].repeat_rule.repeat_days` | 重复天数 |
98
+ | `meetings[].repeat_rule.until_type` | 结束方式: `"by_date"`-按日期结束, `"by_times"`-按次数结束 |
99
+ | `meetings[].repeat_rule.until_date` | 周期结束日期, 格式 `YYYY-MM-DD HH:mm:ss`(until_type=`"by_date"` 时有效) |
100
+ | `meetings[].repeat_rule.until_times` | 结束次数(until_type=`"by_times"` 时有效) |
101
+ | `meetings[].repeat_rule.version` | 重复规则版本, 默认 0 |
102
+ | `meetings[].repeat_rule.first_begin_time` | 第一次开始时间, 格式 `YYYY-MM-DD HH:mm:ss` |
103
+ | `meetings[].repeat_rule.first_end_time` | 第一次结束时间, 格式 `YYYY-MM-DD HH:mm:ss` |
104
+ | `meetings[].repeat_rule.repeat_step` | 每 n(天/周/月)重复一次, 与 repeat_type 配合使用; 例如 repeat_step=3, repeat_type=`"daily"` 表示每 3 天重复一次 |
105
+ | `meetings[].meeting_status` | 会议状态: `"init"`-未开始, `"started"`-进行中, `"end"`-已结束(终止态, 不回退) |
106
+ | `meetings[].attendees` | 参会人列表,扁平对象数组,企业内部成员与外部成员混在同一数组,通过 `is_external` 区分 |
107
+ | `meetings[].attendees[].userid` | 成员 userid,内部成员与外部联系人统一用此字段,由 `is_external` 区分(内部 `wo` 前缀、外部 `wm` 前缀) |
108
+ | `meetings[].attendees[].name` | 参会人名称(如 `"zhangsan(张三)"`),展示时**原样取此字段**(完全与接口返回的格式保持一致),禁止展示 userid |
109
+ | `meetings[].attendees[].is_external` | 是否为外部联系人(bool) |
110
+ | `meetings[].attendees[].is_attended` | 是否已入会(bool) |
111
+ | `meetings[].attendees[].duration` | 参会时长(秒) |
112
+ | `meetings[].notes[].note_content` | 智能纪要文字内容(每个媒体房间一条,最多 10 条) |
113
+ | `meetings[].notes[].todo_content` | 智能纪要待办内容 |
114
+ | `meetings[].note_url` | 会议智能纪要 URL(如 `"https://xxx"`)。**仅当用户明确询问会议链接 / 纪要链接时才展示**,其余情况不主动输出;**只要展示链接,就必须用 markdown 跳转链接格式 `[会议主题](链接)`**,`[]` 内放该会议主题(`subject`,如 `[产品评审周会](https://xxx)`),禁止裸贴 URL、禁止用固定文案 |
115
+ | `meetings[].has_note_permission` | 是否有会议纪要权限 |
116
+ | `meetings[].record_url` | 会议录制地址 URL(如 `"https://xxx"`)。**仅当用户明确询问录制链接 / 回放链接时才展示**,其余情况不主动输出;**只要展示链接,就必须用 markdown 跳转链接格式 `[会议主题](链接)`**,`[]` 内放该会议主题(`subject`,如 `[产品评审周会](https://xxx)`),禁止裸贴 URL、禁止用固定文案 |
117
+ | `meetings[].is_except_meet` | 是否是例外(周期会议中被单独修改的子会议) |
118
+ | `meetings_count` | `meetings` 数组元素数量 |
119
+
120
+ ## 约束
121
+
122
+ - `begin_time` 和 `end_time` 必须同时提供或同时不提供,不可只传其中一个
123
+ - `meeting get` 单次传入 1~10 个会议 ID,超出需分批请求
124
+ - `meeting_ids` 必须传入对象数组(每个元素含 `meeting_id` 字段),**禁止简化为字符串数组**,如 `["id1","id2"]` 格式是错误的
125
+ - `meeting_id` 是长字符串(如 `mtkSFfCg...`), 不要误传 9 位数字会议号
126
+ - 参会人 `name` 由接口直接返回,正常无需通讯录反查;`name` 为空时用 `userid` 通过 `读取 wecomcli-contact 技能` 反查姓名,禁止直接展示 userid
127
+ - `notes` 字段包含文字版智能纪要内容,每个媒体房间一条,最多 10 条;`has_note_permission` 为 false 时不展示纪要内容
128
+ - **作为「会议总结」用途时 [REQUIRED]**:**只有用户纯粹地说"总结下 / 讲了啥 / 纪要发我 / 看待办"、不带任何自定义描述时,才走本 get 返回现成内容**;取目标字段——要纪要看 `notes[].note_content`、要待办看 `notes[].todo_content`;`has_note_permission == true` 且目标字段有实质内容时**直接返回该现成内容**(无需再调用转写原文接口);目标字段为空或 `has_note_permission == false` 时,转 [meeting-original-get](meeting-original-get.md) 拉转写原文兜底再总结。**只要用户附带了任何自定义要求/描述**(指定结构/角度/范围/风格/长度等),就跳过本 get、直接走原文加工(详见 [SKILL.md 核心场景 7](../SKILL.md))。
129
+ - **链接展示格式(`note_url` 会议纪要链接、`record_url` 会议录制链接)[CRITICAL]**:
130
+ - **默认不展示**:`note_url` 仅当用户明确询问会议链接 / 纪要链接时才输出;`record_url` 仅当用户明确询问录制链接 / 回放链接时才输出;其余情况一律不主动输出。
131
+ - **展示格式强约束**:**只要要展示这两类链接,就必须用 markdown 跳转链接格式 `[会议主题](链接)`**——`[]` 内放该会议主题(`subject`),`()` 内放对应 URL,如 `[产品评审周会](https://xxx)`。
132
+ - **严禁**:直接裸贴 URL、用「点击查看」等固定文案代替会议主题、或以纯文本形式输出链接。
133
+
134
+ ## 工作流
135
+
136
+ > **模糊查询前置 [REQUIRED]**:若本次是"会 / xx会 / xx会议 / 有什么会 / 最近有哪些会"等模糊查询(见 [SKILL.md 查询消歧](../SKILL.md)),除按下面拉会议 `list` 外,必须同时 `读取 wecomcli-calendar 技能` 用相同时间范围拉日程 `list`,把两边结果合并、分「(会议)」「(日程)」两部分汇总展示(同一场会议按主题 + 时间去重)——不论会议是否查到都要查日程。仅当用户明确指向在线会议(入会链接 / 会议号 / 视频会议等)时才只查会议。
137
+
138
+ ### 正常路径
139
+
140
+ 1. **确认时间范围**:从用户意图提取时间范围。
141
+ - 用户已明确时间(如"今天"、"本周"、"4月15日到4月20日")→ 直接映射为 `begin_time`/`end_time`
142
+ - 用户未明确时间(如"查一下我的会议")→ **使用默认策略:今天起未来 7 天**(无需追问)
143
+ - 用户说"最近"或"近期" → 使用"过去 3 天到未来 7 天"
144
+ - 用户只提供了模糊但有意义的范围(如"上个月")→ 解析为对应日期范围
145
+ 2. **拉取会议列表**:调用 `wecom-cli meeting list --json '{...}'`, 获取 `created_meetings` 和 `attended_meetings`。若 `has_more` 为 true, 携带 `next_cursor` 继续翻页, 直至获取全部 `meeting_id`(用于统计总条数 N)。
146
+ 3. **获取详情**:按开始时间升序排序后,**只对要展示的前 10 条** `meeting_id` 调用 `wecom-cli meeting get --json '{...}'` 反查详情(每批 ≤ 10 个);其余条数计入"还有 N 条",不必逐一取详情。
147
+ 4. **展示参会人名称**:原样使用详情中 `attendees[].name`(完全与接口返回的格式保持一致);`name` 为空时用该参会人 `userid` 通过 `读取 wecomcli-contact 技能` 反查姓名,禁止直接展示 userid。
148
+ 5. **顺序输出**:禁止 markdown 表格,每条会议作为独立条目顺序输出,每个条目只含主题/时间/参会人;超过 10 条只展示前 10 条,末尾告知"还有 N 条,需要查看更多吗?"。
149
+
150
+ ### 异常路径
151
+
152
+ | 异常情况 | 处理方式 |
153
+ |---------|---------|
154
+ | 列表为空 | 不要直接告知"无会议"——企微里「会」有「含在线会议链接的会议」和「日程」两种载体,团队聚一起的会常落在日程而非会议。先主动 `读取 wecomcli-calendar 技能` 用相同时间范围(及用户提及的关键词/参会人)在日程里查一把:命中则一并呈现并说明「这是一条日程,未关联在线会议链接」;日程也无果,再告知用户该时间段内会议和日程均无安排,并建议扩大时间范围 |
155
+ | 翻页过程中出错 | 展示已获取的部分结果, 告知用户可能有更多未加载的数据 |
156
+ | 详情获取失败(部分 ID) | 展示成功获取的会议, 标注获取失败的条目 |
157
+ | 参会人 `name` 字段为空 | 用该参会人 `userid` 通过 `读取 wecomcli-contact 技能` 反查姓名;反查不到再告知该参会人信息暂时无法获取。禁止直接展示 userid |
158
+
159
+ ## 翻页策略
160
+
161
+ - `meeting list` 使用 `cursor`/`next_cursor` + `has_more` 分页
162
+ - `has_more` 为 true 时必须携带 `next_cursor` 继续翻页, 直至获取全部数据
163
+ - 周期会议需同时传入 `sub_meeting_id` 才能获取正确的子会议详情
164
+
165
+ ## 示例请求
166
+
167
+ **list 请求**:
168
+ ```json
169
+ {
170
+ "begin_time": "2026-04-07 00:00:00",
171
+ "end_time": "2026-04-07 23:59:59",
172
+ "limit": 20
173
+ }
174
+ ```
175
+
176
+ **get 请求**:
177
+ ```json
178
+ {
179
+ "meeting_ids": [
180
+ { "meeting_id": "<meeting_id_1>" },
181
+ { "meeting_id": "<meeting_id_2>", "sub_meeting_id": "<sub_meeting_id>" }
182
+ ]
183
+ }
184
+ ```
185
+
186
+ ## 典型场景
187
+
188
+ ### 1. 明确指定时间范围
189
+
190
+ ```
191
+ 用户:帮我看看今天有什么会议
192
+ → 用户已明确"今天",直接映射:begin_time=今天 00:00:00,end_time=今天 23:59:59
193
+ → 调用 meeting list 获取 created_meetings + attended_meetings 列表
194
+ → 按开始时间升序,对前 10 条调用 meeting get 反查参会人姓名
195
+ → 顺序输出每条会议(主题/时间/参会人,禁止 markdown 表格):
196
+
197
+ 1. 项目复盘
198
+ 时间:4月7日(周二)09:00-10:00
199
+ 参会人:赵六、钱七
200
+
201
+ 2. 产品评审
202
+ 时间:4月7日(周二)14:00-15:00
203
+ 参会人:张三、李四、王五
204
+ ```
205
+
206
+ ### 2. 未指定时间范围,使用默认策略
207
+
208
+ ```
209
+ 用户:帮我看看有什么会议
210
+ → 未指定时间范围,直接使用默认策略:今天起未来 7 天
211
+ begin_time = 今天 00:00:00,end_time = 7 天后 23:59:59
212
+ → 调用 meeting list,对前 10 条调用 meeting get 反查参会人姓名
213
+ → 顺序输出每条会议(主题/时间/参会人,禁止 markdown 表格),超过 10 条只展示前 10 条 + "还有 N 条,需要查看更多吗?"
214
+ ```
215
+
216
+ ### 3. 查询结果为空(用日程兜底)
217
+
218
+ ```
219
+ 用户:帮我看看这周有什么会
220
+ → 用户已明确"这周",映射为本周一 00:00:00 ~ 本周日 23:59:59
221
+ → 调用 meeting list → created_meetings 和 attended_meetings 均为空
222
+ → 软性兜底:「会」在企微可能是日程,主动 `读取 wecomcli-calendar 技能` 用同样时间范围在日程里查一把
223
+ - 日程命中 → 一并呈现并说明:在「日程」里找到了本周的安排(这是日程,未关联在线会议链接),随后展示日程列表
224
+ - 日程也无果 → 告知用户:本周(4月7日-4月13日)会议和日程里都没有安排。
225
+ ```
226
+
@@ -0,0 +1,98 @@
1
+ # 操作参考:查询会议转写原文
2
+
3
+ > [!CAUTION]
4
+ > **转写原文 ≠ 智能纪要**:本接口返回的是逐句原始发言记录(`original_data`,含时间戳 + 说话人),**不是** `meeting get` 里经 AI 总结的 `notes`。用户要"纪要 / 要点 / 待办"用 `meeting get`;要"原话 / 逐字记录 / 完整对话 / 转写"才用本接口,二者禁止相互替代。
5
+ >
6
+ > **输出方式取决于调用目的**:用户要的是"原话/逐字记录/转写"时,`original_data` **原样输出**(下方约束的默认要求);但当本接口是被「会议总结」场景调用(get 无现成纪要/待办需兜底,或用户带自定义总结要求,详见 [SKILL.md 核心场景 7](../SKILL.md))时,`original_data` 作为**素材**可按默认或用户指定的结构加工总结,不受"原样输出"约束限制。
7
+ >
8
+ > **必须翻页到底**:返回 `has_more == true` 时,必须携带 `next_cursor` 再次调用,循环直到 `has_more == false`,并把各页 `original_data` 按返回顺序拼接,否则会漏掉后半段转写。
9
+
10
+ ## 命令
11
+
12
+ ```bash
13
+ wecom-cli meeting original get --json '{...}'
14
+ ```
15
+
16
+ ## 请求参数
17
+
18
+ | 字段 | 类型 | 必填 | 说明 |
19
+ | ---------------- | ------- | ---- | ------------------------------------------------------------------------------------------------------------------------ |
20
+ | `meeting_id` | string | 是 | 会议 ID(`mt` 前缀长字符串,如 `mtkSFfCg...`),非 9 位数字会议号 |
21
+ | `sub_meeting_id` | string | 否 | 子会议 ID,周期会议查某一场时指定 |
22
+ | `media_index` | integer | 否 | 媒体索引,指定拉取第几段转写,从 0 开始。**不传则返回全部段的转写**;仅当用户明确要"第 N 段"时才传 `N-1`(第 1 段传 0、第 2 段传 1) |
23
+ | `cursor` | string | 否 | 分页游标,首次请求不传 |
24
+ | `limit` | integer | 否 | 每页数量,默认 100,上限 500 |
25
+
26
+ ## 返回字段
27
+
28
+ | 字段 | 说明 |
29
+ | ------------- | ----------------------------------------------------------------------- |
30
+ | `media_index` | 当前返回的是第几段转写的原文 |
31
+ | `original_data` | 转写原文文本,逐行格式 `序号 时间 说话人(姓名): 内容`,多行以换行符分隔 |
32
+ | `next_cursor` | 下一页游标,`has_more` 为 true 时有效 |
33
+ | `has_more` | 是否还有更多数据 |
34
+
35
+ ## 约束
36
+
37
+ - **前置依赖**:需先通过 `list` / `search` 定位到 `meeting_id`(周期会议还需 `sub_meeting_id`)。
38
+ - **`media_index` 默认不传**:不传时接口返回全部段的转写;**只有用户明确指定"第 N 段"时才传 `N-1`**(从 0 开始计数),禁止在用户未指定时自行传入或主动追问"要哪一段"。
39
+ - `limit` 未传按 100,超过 500 按 500 处理。
40
+ - `meeting_id` 是 `mt` 前缀长字符串,禁止误传 9 位会议号(`meeting_code`)。
41
+ - 无权限 / 无转写等异常由接口返回错误信息,按 SKILL.md 通用错误处理呈现,不静默失败。
42
+
43
+ ## 工作流
44
+
45
+ ### 正常路径
46
+
47
+ 1. **定位会议**:从上下文或 `list` / `search` 取得 `meeting_id`(周期会议带 `sub_meeting_id`)。
48
+ 2. **确定段落**:用户明确指定"第 N 段" → `media_index = N-1`;**未指定 → 不传 `media_index`**(接口返回全部段),不主动追问。
49
+ 3. **拉取转写**:调用 `wecom-cli meeting original get --json '{...}'`。
50
+ 4. **翻页拼接**:`has_more == true` 时携带 `next_cursor` 续拉,直到 `false`,按返回顺序拼接 `original_data`。
51
+ 5. **输出**:
52
+ - **要原话/逐字记录**(默认)→ 保留时间戳 + 说话人的逐行格式,**不改写、不总结、不裁剪**。
53
+ - **作为「会议总结」兜底或带自定义要求**(见 [SKILL.md 核心场景 7](../SKILL.md))→ 以拼接后的 `original_data` 为素材,按默认或用户指定结构加工总结。
54
+
55
+ ### 异常路径
56
+
57
+ | 异常情况 | 处理方式 |
58
+ | --------------- | ---------------------------------------------------------------------------- |
59
+ | 接口返回错误 | 原样呈现错误含义(如无权限 / 会议不存在),并给出可行建议,不静默失败 |
60
+ | `original_data` 为空 | 告知该会议暂无转写原文(可能未开启转写、会议未开始或该段无内容) |
61
+ | 翻页中途出错 | 展示已拼接的部分,并提示内容可能不完整 |
62
+
63
+ ## 翻页策略
64
+
65
+ - 使用 `cursor` / `next_cursor` + `has_more` 分页;`has_more` 为 true 时必须携带 `next_cursor` 续拉,直至 `false`。
66
+ - 各页 `original_data` 按返回顺序拼接为完整转写文本。
67
+
68
+ ## 示例请求
69
+
70
+ **默认(返回全部段转写)**:
71
+ ```json
72
+ { "meeting_id": "<meeting_id>", "limit": 100 }
73
+ ```
74
+
75
+ **指定第 2 段 + 周期会议某场**:
76
+ ```json
77
+ { "meeting_id": "<meeting_id>", "sub_meeting_id": "<sub_meeting_id>", "media_index": 1, "limit": 100 }
78
+ ```
79
+
80
+ ## 典型场景
81
+
82
+ ### 1. 查会议转写原文
83
+
84
+ ```
85
+ 用户:把上午产品评审会说了什么原话发我
86
+ → 先 list/search 定位到该会议 meeting_id
87
+ → 用户未指定段落,不传 media_index(接口返回全部段)
88
+ → 调用 meeting original get,has_more 时带 next_cursor 翻页到底
89
+ → 按序拼接 original_data,原样输出逐行转写(不总结、不改写)
90
+ ```
91
+
92
+ ### 2. 指定第几段
93
+
94
+ ```
95
+ 用户:这个会第二段转写发我
96
+ → 用户明确"第二段" → media_index = 1(从 0 开始)
97
+ → 调用 meeting original get,翻页到底后原样输出
98
+ ```
@@ -0,0 +1,173 @@
1
+ # 操作参考:搜索会议
2
+
3
+ 按关键词搜索会议,支持时间范围过滤和分页。只读操作。
4
+
5
+ ## 命令
6
+
7
+ ```bash
8
+ wecom-cli meeting search --json '{...}'
9
+ ```
10
+
11
+ ## 请求参数
12
+
13
+ | 字段 | 类型 | 必填 | 说明 |
14
+ | ------------ | -------- | ---- | ------------------------------------------------------------------- |
15
+ | `keywords` | string[] | 是 | 搜索关键词数组, 长度 ≤ 10, 用于匹配会议主题、参会人姓名、会议纪要内容、会议室名称等信息, 可与时间范围并用。支持多关键词组合逻辑:**数组多个元素之间 = OR**(命中任意一个即搜索);**单个元素内空格分隔 = AND**(必须同时命中所有词)。示例:`["周会 项目", "评审"]` 表示匹配"同时包含'周会'和'项目'"或"包含'评审'"的会议 |
16
+ | `begin_time` | string | 否 | 搜索的开始时间, 限定搜索范围的起始时间, 格式 `YYYY-MM-DD HH:mm:ss` |
17
+ | `end_time` | string | 否 | 搜索的结束时间, 限定搜索范围的截止时间, 格式 `YYYY-MM-DD HH:mm:ss` |
18
+ | `cursor` | string | 否 | 分页游标, 首次查询不填, 后续翻页使用上次返回的 `next_cursor` |
19
+ | `limit` | number | 否 | 每页数量, 固定传 `20` |
20
+
21
+ ## 返回字段
22
+
23
+ | 字段 | 说明 |
24
+ | --------------------------- | ---------------------------------------- |
25
+ | `meetings[].meeting_id` | 会议 ID |
26
+ | `meetings[].sub_meeting_id` | 子会议 ID, 周期会议涉及 |
27
+ | `meetings[].subject` | 会议主题 |
28
+ | `meetings[].begin_time` | 会议开始时间 |
29
+ | `meetings[].end_time` | 会议结束时间 |
30
+ | `meetings[].attendee_count` | 参会人数量 |
31
+ | `meetings[].meeting_room` | 会议室名称 |
32
+ | `meetings[].location` | 地点 |
33
+ | `next_cursor` | 下一页游标, 传入下次请求的 `cursor` 字段 |
34
+ | `has_more` | 是否还有更多数据, `true` 表示可继续翻页 |
35
+ | `meetings_count` | `meetings` 数组元素数量 |
36
+
37
+ > 每次固定返回 20 条数据(`limit` 固定传 `20`)。
38
+
39
+ ## 约束
40
+
41
+ - 有关键词时不追问补全时间, 直接搜索
42
+ - `keywords` 为数组类型, 即使只有一个关键词也需包装为数组, 如 `["周会"]`
43
+ - 翻页时, 通过 `has_more` 判断是否还有更多数据; `has_more: false` 时停止翻页
44
+
45
+ ## 意图分类
46
+
47
+ 在处理搜索结果前,需先判断用户的意图类型:
48
+
49
+ | 意图类型 | 典型表达 | 判断依据 |
50
+ |---------|---------|---------|
51
+ | **定位型** | "找找上周的周会"、"搜索下项目评审的会议" | 想定位某一个特定会议,后续要查详情/取消/更新等 |
52
+ | **浏览型** | "我有哪些项目评审会议"、"列一下所有关于项目的会议" | 使用"有哪些"、"列出"、"所有"等表述,想查看全部匹配结果 |
53
+
54
+ ## 接口选择规则
55
+
56
+ 1. **有会议名称/关键词 → `search`**:用户提到会议主题/关键词时,不追问时间,直接搜索。
57
+ 2. **无关键词、只给时间或泛泛浏览 → `list`**:用户只说时间(如"今天有什么会")或泛泛地说"看看我的会议"时,改用 [meeting-list](meeting-list.md) 按时间范围查询。
58
+ 3. **要详情 → `get`**:`list`/`search` 返回摘要。需会议状态、参会人、入会链接等时,用 `get` 补充。
59
+ 4. **与某人相关 → 优先 `search`**:寻找与某人相关的会议(如"我和张三开的会")时,优先用 `search`(把人名作为 `keywords` 匹配参会人),而非 `list` 拉全量再过滤。
60
+
61
+
62
+ ## 工作流
63
+
64
+ > **模糊搜索前置 [REQUIRED]**:若用户搜的是"会 / xx会 / xx会议"等模糊目标(非明确在线会议,见 [SKILL.md 查询消歧](../SKILL.md)),除按下面搜会议外,必须同时 `读取 wecomcli-calendar 技能` 用同样关键词搜日程,把两边结果合并、分「(会议)」「(日程)」两部分汇总展示——不论会议是否搜到都要搜日程。仅当用户明确指向在线会议时才只搜会议。
65
+
66
+ ### 正常路径
67
+
68
+ 1. **提取关键词**:从用户意图提取搜索关键词,组装为字符串数组。缺失时必须用文字询问引导用户补全,禁止猜测或使用默认值(如"帮我搜一下会议"→ 用文字引导用户补全搜索关键词)
69
+ 2. **判断意图类型**:根据"意图分类"表判断是定位型还是浏览型
70
+ 3. **搜索会议**:调用 `wecom-cli meeting search --json '{...}'`, 传入 `keywords` 数组(固定带上 `"limit": 20`)和可选的时间范围
71
+ 4. **按意图处理结果**:
72
+ - **定位型**:参见下方"异常路径 - 搜索返回多个结果"
73
+ - **浏览型**:自动翻页拉取全部数据(参见"翻页策略 - 浏览型自动翻页")用于统计总条数;按开始时间排序后,只对要展示的前 10 条 `meeting_id` 调用 `meeting get` 反查参会人姓名,再顺序输出每条会议(主题/时间/参会人,禁止 markdown 表格),超过 10 条只展示前 10 条并告知"还有 N 条,需要查看更多吗?"
74
+ - **无结果**:按用户提供的关键词/时间无法搜索到会议时,不要立即告知"没找到",先按"异常路径 - 搜索无结果"主动改用日程查询兜底
75
+ 5. **获取详情**(仅定位型需要):用搜索结果中的 `meeting_id` 调用 `wecom-cli meeting get --json '{"meeting_ids": [{"meeting_id": "<meeting_id>"}]}'` 获取完整信息(注意 `meeting_ids` 为数组格式)
76
+
77
+ ### 翻页策略
78
+
79
+ - 首次查询不传 `cursor`,固定带上 `"limit": 20`
80
+ - 需要翻页时: 携带上次返回的 `next_cursor` 作为 `cursor`
81
+ - 到达边界时: `has_more: false` 表示没有更多数据,停止翻页
82
+
83
+ **浏览型自动翻页**:浏览型意图下,若 `has_more: true`,自动携带 `next_cursor` 继续请求下一页,循环至 `has_more: false` 为止,将所有页数据合并后一次性展示,无需用户确认每次翻页。
84
+
85
+ ### 异常路径
86
+
87
+ | 异常情况 | 处理方式 |
88
+ |---------|---------|
89
+ | 搜索无结果 | 先建议修改关键词或扩大时间范围;同时主动 `读取 wecomcli-calendar 技能` 用同样关键词在日程里搜一把——企微里「会」有「含在线会议链接的会议」和「日程」两种载体,团队聚一起的会常落在日程而非会议。命中则一并呈现并说明「这是一条日程」,仍无果再告知两边都没有 |
90
+ | 定位型 - 搜索返回多个结果 | 用文字让用户指定目标会议:`搜索到多个匹配会议,请选择要操作的一个:`(列出如"项目评审 - 4月8日 14:00 / 项目评审 - 4月15日 14:00",最多 4 条;超出时展示前 4 条并提示用户缩小关键词) |
91
+ | 浏览型 - 搜索返回多个结果 | 自动翻页拉全部统计总数;按时间排序,对前 10 条 `meeting get` 反查参会人姓名,顺序输出主题/时间/参会人(禁止 markdown 表格),超过 10 条只展示前 10 条 + "还有 N 条,需要查看更多吗?" |
92
+
93
+ ## 搜索结果的下一步
94
+
95
+ 搜索结果中的 `meeting_id` 可用于后续操作:
96
+
97
+ - 获取详情:`wecom-cli meeting get --json '{"meeting_ids": [{"meeting_id": "<meeting_id>"}]}'`
98
+ - 取消会议:参见 [meeting-cancel](meeting-cancel.md)
99
+
100
+ ## 示例请求
101
+
102
+ **基础搜索**:
103
+ ```json
104
+ {
105
+ "keywords": ["项目评审"],
106
+ "limit": 20
107
+ }
108
+ ```
109
+
110
+ **带时间范围搜索**:
111
+ ```json
112
+ {
113
+ "keywords": ["项目评审"],
114
+ "begin_time": "2026-03-01 00:00:00",
115
+ "end_time": "2026-03-31 23:59:59",
116
+ "limit": 20
117
+ }
118
+ ```
119
+
120
+ **翻页请求**:
121
+ ```json
122
+ {
123
+ "keywords": ["项目评审"],
124
+ "cursor": "<next_cursor>",
125
+ "limit": 20
126
+ }
127
+ ```
128
+
129
+ ## 典型场景
130
+
131
+ ### 1. 定位型 - 搜索特定会议
132
+
133
+ ```
134
+ 用户:帮我找找上周的周会
135
+ → 意图判断:定位型(想找某个特定会议)
136
+ → 提取关键词"周会",不追问时间,直接搜索
137
+ → 调用 meeting search(keywords=["周会"],limit=20)
138
+ → 找到 2 条匹配,用文字让用户确认:搜索到多个匹配会议,请选择要操作的一个?(列出:周会 - 4月8日 10:00 / 周会 - 4月1日 10:00)
139
+ → 用户选择 → 调用 meeting get 获取详情展示
140
+ ```
141
+
142
+ ### 2. 浏览型 - 查看全部匹配会议
143
+
144
+ ```
145
+ 用户:我有哪些项目评审会议
146
+ → 意图判断:浏览型("有哪些"表述,想查看全部列表)
147
+ → 提取关键词"项目评审",调用 meeting search(keywords=["项目评审"],limit=20)
148
+ → 返回 15 条,has_more: true
149
+ → 自动携带 next_cursor 继续请求下一页,循环至 has_more: false,合并统计总条数(共 15 条)
150
+ → 按开始时间排序,对前 10 条调用 meeting get 反查参会人姓名
151
+ → 顺序输出每条会议(主题/时间/参会人,禁止 markdown 表格),超过 10 条只展示前 10 条:
152
+
153
+ 1. 项目评审周会
154
+ 时间:11月13日(周三)15:00-16:00
155
+ 参会人:张三、李四
156
+
157
+ 2. 项目评审阶段汇报
158
+ 时间:11月25日(周一)16:00-17:00
159
+ 参会人:王五、赵六
160
+ ...
161
+ 还有 5 条,需要查看更多吗?
162
+ ```
163
+
164
+ ### 3. 搜索无结果
165
+
166
+ ```
167
+ 用户:找一下项目启动会
168
+ → 调用 meeting search(keywords=["项目启动会"],limit=20)→ 无结果
169
+ → 软性兜底:「会」在企微可能是日程,主动 `读取 wecomcli-calendar 技能` 用关键词"项目启动会"在日程里搜一把
170
+ - 日程命中 → 一并呈现并说明:在「日程」里找到了"项目启动会"(这是一条日程,未关联在线会议链接),随后展示日程摘要
171
+ - 日程也无果 → 告知用户:会议和日程里都未找到"项目启动会"。
172
+ 建议:1) 尝试缩短关键词(如"启动会")2) 确认名称是否正确
173
+ ```