@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.
- package/CHANGELOG.md +13 -3
- package/README.md +3 -3
- package/lib/client.d.ts +3 -3
- package/lib/client.js +34 -6
- package/lib/index.js +11 -8
- package/package.json +2 -2
- package/src/boss/seed.ts +12 -7
- package/src/changelog.ts +30 -0
- package/src/client/locales.ts +6 -6
- package/src/wecom-cli.ts +1 -1
- package/templates/shared/wecom-cli.SOURCE.md +5 -1
- package/templates/shared/wecom-office/SKILL.md +3 -2
- package/templates/shared/wecomcli-calendar/references/calendar-agenda.md +224 -0
- package/templates/shared/wecomcli-calendar/references/calendar-cancel.md +108 -0
- package/templates/shared/wecomcli-calendar/references/calendar-create.md +238 -0
- package/templates/shared/wecomcli-calendar/references/calendar-freebusy.md +207 -0
- package/templates/shared/wecomcli-calendar/references/calendar-meeting-room.md +170 -0
- package/templates/shared/wecomcli-calendar/references/calendar-search.md +206 -0
- package/templates/shared/wecomcli-calendar/references/calendar-update.md +272 -0
- package/templates/shared/wecomcli-doc/references/doc-contents-append.md +20 -0
- package/templates/shared/wecomcli-doc/references/doc-contents-overwrite.md +27 -0
- package/templates/shared/wecomcli-doc/references/doc-create.md +161 -0
- package/templates/shared/wecomcli-doc/scripts/build_docx.py +1375 -0
- package/templates/shared/wecomcli-doc-manage/references/doc-members-update.md +24 -0
- package/templates/shared/wecomcli-doc-manage/references/doc-names-update.md +20 -0
- package/templates/shared/wecomcli-doc-manage/references/doc-rules-update.md +22 -0
- package/templates/shared/wecomcli-email/references/forward-mail.md +131 -0
- package/templates/shared/wecomcli-email/references/get-mail.md +166 -0
- package/templates/shared/wecomcli-email/references/reply-mail.md +138 -0
- package/templates/shared/wecomcli-email/references/search-mail.md +111 -0
- package/templates/shared/wecomcli-email/references/security.md +53 -0
- package/templates/shared/wecomcli-email/references/send-mail.md +186 -0
- package/templates/shared/wecomcli-email/references/send-schedule.md +83 -0
- package/templates/shared/wecomcli-meeting/references/meeting-cancel.md +113 -0
- package/templates/shared/wecomcli-meeting/references/meeting-create.md +167 -0
- package/templates/shared/wecomcli-meeting/references/meeting-list.md +226 -0
- package/templates/shared/wecomcli-meeting/references/meeting-original-get.md +98 -0
- package/templates/shared/wecomcli-meeting/references/meeting-search.md +173 -0
- package/templates/shared/wecomcli-meeting/references/meeting-update.md +217 -0
- package/templates/shared/wecomcli-sheet/references/sheet-contents-update.md +47 -0
- package/templates/shared/wecomcli-sheet/references/sheet-ranges-get.md +45 -0
- package/templates/shared/wecomcli-sheet/references/sheet-rows-append.md +45 -0
- package/templates/shared/wecomcli-sheet/references/sheet-subsheets-add.md +26 -0
- package/templates/shared/wecomcli-sheet/references/sheet-subsheets-delete.md +20 -0
- package/templates/shared/wecomcli-smartpage/references/data-driven-pages.md +50 -0
- package/templates/shared/wecomcli-smartpage/references/formula/arraylist.md +369 -0
- package/templates/shared/wecomcli-smartpage/references/formula/datetime.md +283 -0
- package/templates/shared/wecomcli-smartpage/references/formula/logic.md +247 -0
- package/templates/shared/wecomcli-smartpage/references/formula/math.md +362 -0
- package/templates/shared/wecomcli-smartpage/references/formula/operators.md +246 -0
- package/templates/shared/wecomcli-smartpage/references/formula/pageblock.md +76 -0
- package/templates/shared/wecomcli-smartpage/references/formula/templates.md +410 -0
- package/templates/shared/wecomcli-smartpage/references/formula/text.md +377 -0
- package/templates/shared/wecomcli-smartpage/references/formula/user.md +22 -0
- package/templates/shared/wecomcli-smartpage/references/formula-reference.md +192 -0
- package/templates/shared/wecomcli-smartpage/references/mdx-syntax.md +739 -0
- package/templates/shared/wecomcli-smartpage/references/smartpage-edit.md +506 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/README.md +53 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/ai_efficiency.md +709 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/connect_to_app.md +380 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/financial_accounting.md +369 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/hr_and_administration.md +475 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/ledger_records.md +156 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/manufacturing.md +395 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/marketing.md +186 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/office_essentials.md +299 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/personal_efficiency.md +70 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/procurement_logistics.md +325 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/project_management.md +564 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_customer.md +222 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_ops.md +105 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_project.md +109 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_research.md +92 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/sales_and_operations.md +446 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/store_management.md +431 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/team_tasks.md +274 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/wechat_customer.md +384 -0
- package/templates/shared/wecomcli-smartsheet/assets/templates/work_report.md +100 -0
- package/templates/shared/wecomcli-smartsheet/references/common.md +143 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-chart-types.md +95 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-edit.md +589 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-field-types.md +438 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-formula.md +845 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-read.md +391 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-record-values.md +201 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-view-types.md +356 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-webhook-examples.md +176 -0
- package/templates/shared/wecomcli-smartsheet/references/smart-sheet-webhook.md +169 -0
- package/templates/shared/wecomcli-todo/references/todo-create.md +137 -0
- package/templates/shared/wecomcli-todo/references/todo-delete.md +63 -0
- package/templates/shared/wecomcli-todo/references/todo-finish.md +72 -0
- package/templates/shared/wecomcli-todo/references/todo-get.md +66 -0
- package/templates/shared/wecomcli-todo/references/todo-list.md +133 -0
- package/templates/shared/wecomcli-todo/references/todo-update.md +112 -0
- package/templates/staff/ecommerce/.agents/skills/ops-ecommerce/SKILL.md +2 -2
- package/templates/staff/ecommerce/AGENTS.md +8 -7
- package/templates/staff/ecommerce/SOUL.md +1 -1
- package/templates/staff/hr/.agents/skills/staff-onboard-keys/SKILL.md +2 -2
- package/templates/staff/publish/.agents/skills/ops-publish/SKILL.md +2 -2
- package/templates/staff/publish/AGENTS.md +4 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,12 +5,22 @@
|
|
|
5
5
|
升级:
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
dsh plugin --profile web add @rezti/dsh-rez-suite@0.1.
|
|
8
|
+
dsh plugin --profile web add @rezti/dsh-rez-suite@0.1.52
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
不要用裸 `plugin update`,不要写 `latest`(新 profile 有 24 小时发布冷却,当天可能装不上)。不要装 **0.1.46**(GitHub 子依赖会被 DSH
|
|
11
|
+
不要用裸 `plugin update`,不要写 `latest`(新 profile 有 24 小时发布冷却,当天可能装不上)。不要装 **0.1.46**(GitHub 子依赖会被 DSH 拦住)。不要装 **0.1.51**(误用 `npm publish` 把 `workspace:` 打进包了)。
|
|
12
12
|
|
|
13
|
-
发版顺序:`wechat@0.1.16` → `suite@0.1.
|
|
13
|
+
发版顺序:`wechat@0.1.16` → `suite@0.1.52`。**必须用 `pnpm publish`**(会把 `workspace:` 写成真实版本),不要用 `npm publish`。
|
|
14
|
+
|
|
15
|
+
## 0.1.52 — 2026-08-20
|
|
16
|
+
|
|
17
|
+
- **安装修复**:0.1.51 报 `ERR_PNPM_WORKSPACE_PKG_NOT_FOUND`。请装 0.1.52。内容同 0.1.51(官方 wecomcli references 整包 + 房间仍 BotID/Secret)。
|
|
18
|
+
|
|
19
|
+
## 0.1.51 — 2026-08-20
|
|
20
|
+
|
|
21
|
+
- **企微办公技能补全 references**:官方 `wecomcli-*` 整包种进房间(含 `references/` / `assets/` / `scripts/`),种子不再只拷 `SKILL.md`。办公授权继续 `wecom-cli auth init`(可扫码);**房间消息通道仍用设置页 BotID + Secret**,不改成扫码。
|
|
22
|
+
- CLI 请用 `@wecom/cli >=1.1.0`(`0.1.x` 命令面不同)。
|
|
23
|
+
- **勿装**:本版 npm 包依赖含 `workspace:`,员工 profile 装不上。
|
|
14
24
|
|
|
15
25
|
## 0.1.50 — 2026-08-20
|
|
16
26
|
|
package/README.md
CHANGED
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
雷泽插件的**唯一安装入口**。Odoo / 企微 / HA / TAPD / GSC / 企查查(仅法务助理房间) / 天眼查(仅老板) / 工作区(老板三室 + 全员助理)都由这一包拉齐,不要再逐个 `plugin add`,**不要**再装 `@rezti/dsh-rez-boss-desk`。
|
|
4
4
|
|
|
5
|
-
发版顺序(必做):先发 `@rezti/dsh-rez-wechat@0.1.16` → `@rezti/dsh-rez-suite@0.1.
|
|
5
|
+
发版顺序(必做):先发 `@rezti/dsh-rez-wechat@0.1.16` → `@rezti/dsh-rez-suite@0.1.52`。**发 suite 必须用 `pnpm publish`**(会把 `workspace:` 写成真实版本),不要用 `npm publish`。员工机安装包仍钉已发布的 suite,不要顺手改审批镜像 `SUITE_VERSION`。
|
|
6
6
|
|
|
7
7
|
设置里选身份后,左侧自己出现对应房间(全员三助理;工程师另加实验室;运营另加设计、发布、电商;老板另加搞钱/产品/运营),不必手动添加工作区。实验室:大模型写 YAML、调 MCP、给下载链接。
|
|
8
8
|
|
|
9
9
|
回形针走 npm 包 `@rezti/dsh-web-file-uploader@0.2.3`(不要 GitHub:DSH 会拦子依赖 git,0.1.46 因此装不上)。
|
|
10
10
|
|
|
11
|
-
员工机不要 `SUITE_VERSION=latest`:新 profile 默认 `minimumReleaseAge: 1440
|
|
11
|
+
员工机不要 `SUITE_VERSION=latest`:新 profile 默认 `minimumReleaseAge: 1440`,当天发的包可能装不到。钉死版本,或把 profile 的 `minimumReleaseAge` 改成 `0`。
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
14
|
# 第一次 / 升级(钉死版本,避开 24h 发布冷却)
|
|
15
|
-
dsh plugin --profile web add @rezti/dsh-rez-suite@0.1.
|
|
15
|
+
dsh plugin --profile web add @rezti/dsh-rez-suite@0.1.52
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
本版改了什么:见 [CHANGELOG.md](./CHANGELOG.md)。
|
package/lib/client.d.ts
CHANGED
|
@@ -7367,16 +7367,16 @@ declare const zh: {
|
|
|
7367
7367
|
readonly 'audit.empty': "暂无记录";
|
|
7368
7368
|
readonly 'changelog.current': "当前 {version}";
|
|
7369
7369
|
readonly 'changelog.upgrade': "升级:";
|
|
7370
|
-
readonly 'board.hint': "合同 Account 拆两室:媒体走「发布」,电商走「电商」(一期只阿里巴巴国际站;Amazon
|
|
7370
|
+
readonly 'board.hint': "合同 Account 拆两室:媒体走「发布」,电商走「电商」(一期只阿里巴巴国际站;Amazon 等有号)。看板要搭在本页签,不是独立后台。页签壳不算完成。密钥不在这里。";
|
|
7371
7371
|
readonly 'board.people': "People / 权限";
|
|
7372
7372
|
readonly 'board.peopleHint': "继续 Odoo 员工帐号(公司/记录规则)+ 企业微信一房间一 bot。不新建权限库,不改 Odoo 权限组。";
|
|
7373
7373
|
readonly 'board.role': "当前 Harness 身份:{role}(只决定侧栏房间)";
|
|
7374
7374
|
readonly 'board.media': "媒体连接";
|
|
7375
7375
|
readonly 'board.mediaHint': "内容/社媒在「发布」工作间(Post editor)。不建图库。";
|
|
7376
7376
|
readonly 'board.ecommerce': "电商平台";
|
|
7377
|
-
readonly 'board.ecommerceHint': "Listing
|
|
7377
|
+
readonly 'board.ecommerceHint': "Listing 在「电商」工作间。一期只有阿里巴巴国际站。同一 SKU 可挂多条链接,已有链接仍可关联继续发。渠道商品 ID 写回 Odoo,库存从 Odoo 推到阿里。Amazon 没有号,标后续。";
|
|
7378
7378
|
readonly 'board.rag': "RAG";
|
|
7379
|
-
readonly 'board.ragHint': "
|
|
7379
|
+
readonly 'board.ragHint': "发布用 Dify 知识库要对齐 Nextcloud 锁死路径(Standards + Marketing/Publish)。实例已有,不要另装;知识库搭建是发布需求一部分,不要当基线跳过。Harness 不做推理。";
|
|
7380
7380
|
readonly 'board.inbox': "Message inbox";
|
|
7381
7381
|
readonly 'board.inboxHint': "一期只做 WhatsApp Business,会话落到 Odoo(浙江雷泽,Business 号已有)。不用官方收费模块,走社区 add-on(OCA mail_gateway_whatsapp)。禁止自写 Meta 客户端。生产安装另开窗口。";
|
|
7382
7382
|
readonly 'board.col.source': "来源";
|
package/lib/client.js
CHANGED
|
@@ -251,16 +251,16 @@ const zh = {
|
|
|
251
251
|
"audit.empty": "暂无记录",
|
|
252
252
|
"changelog.current": "当前 {version}",
|
|
253
253
|
"changelog.upgrade": "升级:",
|
|
254
|
-
"board.hint": "合同 Account 拆两室:媒体走「发布」,电商走「电商」(一期只阿里巴巴国际站;Amazon
|
|
254
|
+
"board.hint": "合同 Account 拆两室:媒体走「发布」,电商走「电商」(一期只阿里巴巴国际站;Amazon 等有号)。看板要搭在本页签,不是独立后台。页签壳不算完成。密钥不在这里。",
|
|
255
255
|
"board.people": "People / 权限",
|
|
256
256
|
"board.peopleHint": "继续 Odoo 员工帐号(公司/记录规则)+ 企业微信一房间一 bot。不新建权限库,不改 Odoo 权限组。",
|
|
257
257
|
"board.role": "当前 Harness 身份:{role}(只决定侧栏房间)",
|
|
258
258
|
"board.media": "媒体连接",
|
|
259
259
|
"board.mediaHint": "内容/社媒在「发布」工作间(Post editor)。不建图库。",
|
|
260
260
|
"board.ecommerce": "电商平台",
|
|
261
|
-
"board.ecommerceHint": "Listing
|
|
261
|
+
"board.ecommerceHint": "Listing 在「电商」工作间。一期只有阿里巴巴国际站。同一 SKU 可挂多条链接,已有链接仍可关联继续发。渠道商品 ID 写回 Odoo,库存从 Odoo 推到阿里。Amazon 没有号,标后续。",
|
|
262
262
|
"board.rag": "RAG",
|
|
263
|
-
"board.ragHint": "
|
|
263
|
+
"board.ragHint": "发布用 Dify 知识库要对齐 Nextcloud 锁死路径(Standards + Marketing/Publish)。实例已有,不要另装;知识库搭建是发布需求一部分,不要当基线跳过。Harness 不做推理。",
|
|
264
264
|
"board.inbox": "Message inbox",
|
|
265
265
|
"board.inboxHint": "一期只做 WhatsApp Business,会话落到 Odoo(浙江雷泽,Business 号已有)。不用官方收费模块,走社区 add-on(OCA mail_gateway_whatsapp)。禁止自写 Meta 客户端。生产安装另开窗口。",
|
|
266
266
|
"board.col.source": "来源",
|
|
@@ -414,16 +414,16 @@ const en = {
|
|
|
414
414
|
"audit.empty": "No records",
|
|
415
415
|
"changelog.current": "Now {version}",
|
|
416
416
|
"changelog.upgrade": "Upgrade:",
|
|
417
|
-
"board.hint": "Account connections split into two rooms: media in 发布, ecommerce in 电商 (phase 1: Alibaba.com only; Amazon waits for an account). Not a separate admin site. Secrets stay off this board.",
|
|
417
|
+
"board.hint": "Account connections split into two rooms: media in 发布, ecommerce in 电商 (phase 1: Alibaba.com only; Amazon waits for an account). This settings tab is the board to build; the shell is not done. Not a separate admin site. Secrets stay off this board.",
|
|
418
418
|
"board.people": "People / permissions",
|
|
419
419
|
"board.peopleHint": "Keep Odoo employee accounts (company / record rules) plus one WeCom AI bot per room. No new ACL database. Do not change Odoo groups.",
|
|
420
420
|
"board.role": "Current Harness identity: {role} (sidebar rooms only)",
|
|
421
421
|
"board.media": "Media connections",
|
|
422
422
|
"board.mediaHint": "Content / social lives in the 发布 room (Post editor). No media library.",
|
|
423
423
|
"board.ecommerce": "Ecommerce platforms",
|
|
424
|
-
"board.ecommerceHint": "Listings live in the 电商 room. Phase 1 is Alibaba.com. Write channel product IDs back to Odoo and push stock Odoo → Alibaba. Amazon is later until we have an account.",
|
|
424
|
+
"board.ecommerceHint": "Listings live in the 电商 room. Phase 1 is Alibaba.com. One SKU can have many links; an existing URL does not block associating another. Write channel product IDs back to Odoo and push stock Odoo → Alibaba. Amazon is later until we have an account.",
|
|
425
425
|
"board.rag": "RAG",
|
|
426
|
-
"board.ragHint": "
|
|
426
|
+
"board.ragHint": "Publish knowledge bases on existing Dify must index Nextcloud locked paths (Standards + Marketing/Publish). Do not reinstall Dify or treat baseline 0867 as done. Harness does not run embeddings.",
|
|
427
427
|
"board.inbox": "Message inbox",
|
|
428
428
|
"board.inboxHint": "Phase 1 is WhatsApp Business into Odoo (Zhejiang ReZ-TI; WABA already exists). Skip the paid official module; reuse OCA mail_gateway_whatsapp. No homemade Meta client. Production install needs a separate window.",
|
|
429
429
|
"board.col.source": "Source",
|
|
@@ -994,6 +994,34 @@ function ChannelTable({ kind, lang }) {
|
|
|
994
994
|
//#endregion
|
|
995
995
|
//#region src/changelog.ts
|
|
996
996
|
const SUITE_CHANGELOG = [
|
|
997
|
+
{
|
|
998
|
+
version: "0.1.52",
|
|
999
|
+
date: "2026-08-20",
|
|
1000
|
+
sections: [{
|
|
1001
|
+
title: {
|
|
1002
|
+
zh: "安装修复",
|
|
1003
|
+
en: "Install fix"
|
|
1004
|
+
},
|
|
1005
|
+
items: [{
|
|
1006
|
+
zh: "0.1.51 报 ERR_PNPM_WORKSPACE_PKG_NOT_FOUND(npm publish 把 workspace: 打进包)。请装 0.1.52。内容同 0.1.51:wecomcli references 整包;房间仍 BotID+Secret。",
|
|
1007
|
+
en: "0.1.51 failed with ERR_PNPM_WORKSPACE_PKG_NOT_FOUND because npm publish left workspace: deps. Install 0.1.52. Same content as 0.1.51: full wecomcli references; room bots still BotID+Secret."
|
|
1008
|
+
}]
|
|
1009
|
+
}]
|
|
1010
|
+
},
|
|
1011
|
+
{
|
|
1012
|
+
version: "0.1.51",
|
|
1013
|
+
date: "2026-08-20",
|
|
1014
|
+
sections: [{
|
|
1015
|
+
title: {
|
|
1016
|
+
zh: "企微办公技能补全",
|
|
1017
|
+
en: "WeCom office skill pack"
|
|
1018
|
+
},
|
|
1019
|
+
items: [{
|
|
1020
|
+
zh: "官方 wecomcli-* 整包种进房间(含 references)。办公用 wecom-cli auth init(可扫码);房间消息通道仍设置页 BotID+Secret,不改扫码。请装 @wecom/cli >=1.1.0。勿装本版:依赖含 workspace:。",
|
|
1021
|
+
en: "Vendor full upstream wecomcli-* skills including references. Office auth stays wecom-cli auth init (QR OK); room chat still uses settings BotID+Secret. Use @wecom/cli >=1.1.0. Do not install this version: published with workspace: deps."
|
|
1022
|
+
}]
|
|
1023
|
+
}]
|
|
1024
|
+
},
|
|
997
1025
|
{
|
|
998
1026
|
version: "0.1.50",
|
|
999
1027
|
date: "2026-08-20",
|
package/lib/index.js
CHANGED
|
@@ -3276,7 +3276,7 @@ const WECOM_CLI_CATALOG = [
|
|
|
3276
3276
|
label: "会议"
|
|
3277
3277
|
},
|
|
3278
3278
|
{
|
|
3279
|
-
id: "
|
|
3279
|
+
id: "mail",
|
|
3280
3280
|
label: "邮件"
|
|
3281
3281
|
},
|
|
3282
3282
|
{
|
|
@@ -8390,13 +8390,16 @@ function defaultSharedTemplatesRoot() {
|
|
|
8390
8390
|
function seedSharedSkills(dest, written) {
|
|
8391
8391
|
const root = defaultSharedTemplatesRoot();
|
|
8392
8392
|
for (const name of readdirSync(root).sort()) {
|
|
8393
|
-
const
|
|
8394
|
-
if (!
|
|
8395
|
-
|
|
8396
|
-
const
|
|
8397
|
-
|
|
8398
|
-
|
|
8399
|
-
|
|
8393
|
+
const skillDir = join(root, name);
|
|
8394
|
+
if (!statSync(skillDir).isDirectory()) continue;
|
|
8395
|
+
if (!existsSync(join(skillDir, "SKILL.md"))) continue;
|
|
8396
|
+
for (const abs of listFiles(skillDir)) {
|
|
8397
|
+
const rel = join(".agents", "skills", name, relative(skillDir, abs));
|
|
8398
|
+
const target = join(dest, rel);
|
|
8399
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
8400
|
+
writeFileSync(target, readFileSync(abs));
|
|
8401
|
+
written.push(rel);
|
|
8402
|
+
}
|
|
8400
8403
|
}
|
|
8401
8404
|
}
|
|
8402
8405
|
function listFiles(root) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rezti/dsh-rez-suite",
|
|
3
|
-
"description": "ReZ-TI one-package install for DeepSeek Harness. Update with: dsh plugin --profile web add @rezti/dsh-rez-suite@0.1.
|
|
4
|
-
"version": "0.1.
|
|
3
|
+
"description": "ReZ-TI one-package install for DeepSeek Harness. Update with: dsh plugin --profile web add @rezti/dsh-rez-suite@0.1.52",
|
|
4
|
+
"version": "0.1.52",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": "^22.19.0 || >=24.0.0"
|
package/src/boss/seed.ts
CHANGED
|
@@ -192,13 +192,18 @@ export function defaultSharedTemplatesRoot(): string {
|
|
|
192
192
|
function seedSharedSkills(dest: string, written: string[]): void {
|
|
193
193
|
const root = defaultSharedTemplatesRoot()
|
|
194
194
|
for (const name of readdirSync(root).sort()) {
|
|
195
|
-
const
|
|
196
|
-
if (!
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
195
|
+
const skillDir = join(root, name)
|
|
196
|
+
if (!statSync(skillDir).isDirectory()) continue
|
|
197
|
+
if (!existsSync(join(skillDir, 'SKILL.md'))) continue
|
|
198
|
+
// Official wecomcli-* skills ship references/assets/scripts next to SKILL.md.
|
|
199
|
+
for (const abs of listFiles(skillDir)) {
|
|
200
|
+
const relInside = relative(skillDir, abs)
|
|
201
|
+
const rel = join('.agents', 'skills', name, relInside)
|
|
202
|
+
const target = join(dest, rel)
|
|
203
|
+
mkdirSync(dirname(target), { recursive: true })
|
|
204
|
+
writeFileSync(target, readFileSync(abs))
|
|
205
|
+
written.push(rel)
|
|
206
|
+
}
|
|
202
207
|
}
|
|
203
208
|
}
|
|
204
209
|
|
package/src/changelog.ts
CHANGED
|
@@ -20,6 +20,36 @@ export interface ChangelogRelease {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
export const SUITE_CHANGELOG: readonly ChangelogRelease[] = [
|
|
23
|
+
{
|
|
24
|
+
version: '0.1.52',
|
|
25
|
+
date: '2026-08-20',
|
|
26
|
+
sections: [
|
|
27
|
+
{
|
|
28
|
+
title: { zh: '安装修复', en: 'Install fix' },
|
|
29
|
+
items: [
|
|
30
|
+
{
|
|
31
|
+
zh: '0.1.51 报 ERR_PNPM_WORKSPACE_PKG_NOT_FOUND(npm publish 把 workspace: 打进包)。请装 0.1.52。内容同 0.1.51:wecomcli references 整包;房间仍 BotID+Secret。',
|
|
32
|
+
en: '0.1.51 failed with ERR_PNPM_WORKSPACE_PKG_NOT_FOUND because npm publish left workspace: deps. Install 0.1.52. Same content as 0.1.51: full wecomcli references; room bots still BotID+Secret.',
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
version: '0.1.51',
|
|
40
|
+
date: '2026-08-20',
|
|
41
|
+
sections: [
|
|
42
|
+
{
|
|
43
|
+
title: { zh: '企微办公技能补全', en: 'WeCom office skill pack' },
|
|
44
|
+
items: [
|
|
45
|
+
{
|
|
46
|
+
zh: '官方 wecomcli-* 整包种进房间(含 references)。办公用 wecom-cli auth init(可扫码);房间消息通道仍设置页 BotID+Secret,不改扫码。请装 @wecom/cli >=1.1.0。勿装本版:依赖含 workspace:。',
|
|
47
|
+
en: 'Vendor full upstream wecomcli-* skills including references. Office auth stays wecom-cli auth init (QR OK); room chat still uses settings BotID+Secret. Use @wecom/cli >=1.1.0. Do not install this version: published with workspace: deps.',
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
},
|
|
23
53
|
{
|
|
24
54
|
version: '0.1.50',
|
|
25
55
|
date: '2026-08-20',
|
package/src/client/locales.ts
CHANGED
|
@@ -121,16 +121,16 @@ export const zh = {
|
|
|
121
121
|
'audit.empty': '暂无记录',
|
|
122
122
|
'changelog.current': '当前 {version}',
|
|
123
123
|
'changelog.upgrade': '升级:',
|
|
124
|
-
'board.hint': '合同 Account 拆两室:媒体走「发布」,电商走「电商」(一期只阿里巴巴国际站;Amazon
|
|
124
|
+
'board.hint': '合同 Account 拆两室:媒体走「发布」,电商走「电商」(一期只阿里巴巴国际站;Amazon 等有号)。看板要搭在本页签,不是独立后台。页签壳不算完成。密钥不在这里。',
|
|
125
125
|
'board.people': 'People / 权限',
|
|
126
126
|
'board.peopleHint': '继续 Odoo 员工帐号(公司/记录规则)+ 企业微信一房间一 bot。不新建权限库,不改 Odoo 权限组。',
|
|
127
127
|
'board.role': '当前 Harness 身份:{role}(只决定侧栏房间)',
|
|
128
128
|
'board.media': '媒体连接',
|
|
129
129
|
'board.mediaHint': '内容/社媒在「发布」工作间(Post editor)。不建图库。',
|
|
130
130
|
'board.ecommerce': '电商平台',
|
|
131
|
-
'board.ecommerceHint': 'Listing
|
|
131
|
+
'board.ecommerceHint': 'Listing 在「电商」工作间。一期只有阿里巴巴国际站。同一 SKU 可挂多条链接,已有链接仍可关联继续发。渠道商品 ID 写回 Odoo,库存从 Odoo 推到阿里。Amazon 没有号,标后续。',
|
|
132
132
|
'board.rag': 'RAG',
|
|
133
|
-
'board.ragHint': '
|
|
133
|
+
'board.ragHint': '发布用 Dify 知识库要对齐 Nextcloud 锁死路径(Standards + Marketing/Publish)。实例已有,不要另装;知识库搭建是发布需求一部分,不要当基线跳过。Harness 不做推理。',
|
|
134
134
|
'board.inbox': 'Message inbox',
|
|
135
135
|
'board.inboxHint': '一期只做 WhatsApp Business,会话落到 Odoo(浙江雷泽,Business 号已有)。不用官方收费模块,走社区 add-on(OCA mail_gateway_whatsapp)。禁止自写 Meta 客户端。生产安装另开窗口。',
|
|
136
136
|
'board.col.source': '来源',
|
|
@@ -288,16 +288,16 @@ export const en: Record<RezKey, string> = {
|
|
|
288
288
|
'audit.empty': 'No records',
|
|
289
289
|
'changelog.current': 'Now {version}',
|
|
290
290
|
'changelog.upgrade': 'Upgrade:',
|
|
291
|
-
'board.hint': 'Account connections split into two rooms: media in 发布, ecommerce in 电商 (phase 1: Alibaba.com only; Amazon waits for an account). Not a separate admin site. Secrets stay off this board.',
|
|
291
|
+
'board.hint': 'Account connections split into two rooms: media in 发布, ecommerce in 电商 (phase 1: Alibaba.com only; Amazon waits for an account). This settings tab is the board to build; the shell is not done. Not a separate admin site. Secrets stay off this board.',
|
|
292
292
|
'board.people': 'People / permissions',
|
|
293
293
|
'board.peopleHint': 'Keep Odoo employee accounts (company / record rules) plus one WeCom AI bot per room. No new ACL database. Do not change Odoo groups.',
|
|
294
294
|
'board.role': 'Current Harness identity: {role} (sidebar rooms only)',
|
|
295
295
|
'board.media': 'Media connections',
|
|
296
296
|
'board.mediaHint': 'Content / social lives in the 发布 room (Post editor). No media library.',
|
|
297
297
|
'board.ecommerce': 'Ecommerce platforms',
|
|
298
|
-
'board.ecommerceHint': 'Listings live in the 电商 room. Phase 1 is Alibaba.com. Write channel product IDs back to Odoo and push stock Odoo → Alibaba. Amazon is later until we have an account.',
|
|
298
|
+
'board.ecommerceHint': 'Listings live in the 电商 room. Phase 1 is Alibaba.com. One SKU can have many links; an existing URL does not block associating another. Write channel product IDs back to Odoo and push stock Odoo → Alibaba. Amazon is later until we have an account.',
|
|
299
299
|
'board.rag': 'RAG',
|
|
300
|
-
'board.ragHint': '
|
|
300
|
+
'board.ragHint': 'Publish knowledge bases on existing Dify must index Nextcloud locked paths (Standards + Marketing/Publish). Do not reinstall Dify or treat baseline 0867 as done. Harness does not run embeddings.',
|
|
301
301
|
'board.inbox': 'Message inbox',
|
|
302
302
|
'board.inboxHint': 'Phase 1 is WhatsApp Business into Odoo (Zhejiang ReZ-TI; WABA already exists). Skip the paid official module; reuse OCA mail_gateway_whatsapp. No homemade Meta client. Production install needs a separate window.',
|
|
303
303
|
'board.col.source': 'Source',
|
package/src/wecom-cli.ts
CHANGED
|
@@ -39,7 +39,7 @@ export const WECOM_CLI_CATALOG: readonly WecomCliModule[] = [
|
|
|
39
39
|
{ id: 'todo', label: '待办' },
|
|
40
40
|
{ id: 'calendar', label: '日程' },
|
|
41
41
|
{ id: 'meeting', label: '会议' },
|
|
42
|
-
{ id: '
|
|
42
|
+
{ id: 'mail', label: '邮件' },
|
|
43
43
|
{ id: 'disk', label: '微盘' },
|
|
44
44
|
{ id: 'message', label: '消息' },
|
|
45
45
|
{ id: 'media', label: '媒体文件' },
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# 官方 wecom-cli Skills 来源
|
|
2
2
|
|
|
3
|
-
`wecomcli-*`
|
|
3
|
+
`wecomcli-*` 目录(含 `SKILL.md`、`references/`、`assets/`、`scripts/`)来自 [WecomTeam/wecom-cli](https://github.com/WecomTeam/wecom-cli)(MIT)。不要手改这些文件;升级时重新拉取整棵目录。
|
|
4
|
+
|
|
5
|
+
官方安装还会跑 `npx skills add WeComTeam/wecom-cli`;本仓改成房间种子注入,效果等价,但必须整包拷贝,不能只留 `SKILL.md`。
|
|
4
6
|
|
|
5
7
|
雷泽自己的索引是 `wecom-office/SKILL.md`。
|
|
8
|
+
|
|
9
|
+
运行时 CLI:`npm i -g @wecom/cli@>=1.1.0`,然后 `wecom-cli auth init`。`0.1.x` 命令面不同,不要混用。
|
|
@@ -27,5 +27,6 @@ description: 企业微信办公能力索引。官方 wecom-cli v1.1+ 已面向
|
|
|
27
27
|
1. 先看 `rez_status` 的 `wecomCli.modules`,或跑 `wecom-cli auth show`。
|
|
28
28
|
2. 先读 `wecomcli-shared`,再读对应 `wecomcli-*`。子命令以 `wecom-cli <模块> --help` 为准。
|
|
29
29
|
3. CLI 返回未授权 / 无权限,才说**该模块未开通**。不要总结成「当前系统没有企业微信 MCP」,也不要说「超过 10 人没有通讯录」。
|
|
30
|
-
4. 设置页 BotID + Secret
|
|
31
|
-
5.
|
|
30
|
+
4. 设置页 **BotID + Secret** 是房间**消息通道**(同事在企微跟哪个 bot 说话进哪个 Harness 房间)。**继续用手填绑定,不要改成扫码。**
|
|
31
|
+
5. 办公 API 另走 `wecom-cli auth init`(官方支持扫码,也可 `--manual`)。两套凭证不要混。
|
|
32
|
+
6. 未另批前不要群发、不要改通讯录结构、不要对外发邮件。
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# calendar schedules list / get — 查看日程安排
|
|
2
|
+
|
|
3
|
+
查看近期日程安排或获取日程详情。只读操作,不修改任何日程。
|
|
4
|
+
|
|
5
|
+
> **只给时间/日期时必须用 `list` [REQUIRED]**:用户只提供了时间/日期(如"19号那条")而没有日程主题关键词时,必须走本文档的 `list` 按时间浏览,禁止把日期当关键词喂给 `search`。
|
|
6
|
+
|
|
7
|
+
> **模糊查询同时拉会议 [REQUIRED]**:若本次是"会 / xx会 / 有什么会 / 最近有哪些会"等模糊查询(见 [SKILL.md 查询消歧](../SKILL.md)),除拉日程 `list` 外,必须同时 `读取 wecomcli-meeting 技能` 用相同时间范围拉会议 `list`,把两边结果合并、分「(会议)」「(日程)」两部分汇总展示(同一场会议按主题 + 时间去重)——不论日程是否查到都要查会议。明确是日程 / 安排(不带在线会议特征)时只查日程。
|
|
8
|
+
|
|
9
|
+
## 命令
|
|
10
|
+
|
|
11
|
+
### list — 读取日程列表
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# 查看今天日程
|
|
15
|
+
wecom-cli calendar schedules list --json '{"begin_time": "2026-04-07 00:00:00", "end_time": "2026-04-07 23:59:59"}'
|
|
16
|
+
|
|
17
|
+
# 查看本周日程
|
|
18
|
+
wecom-cli calendar schedules list --json '{"begin_time": "2026-04-06 00:00:00", "end_time": "2026-04-12 23:59:59"}'
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**参数:**
|
|
22
|
+
|
|
23
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
24
|
+
|------|------|:----:|------|
|
|
25
|
+
| `begin_time` | string | 否 | 查询开始时间(格式 YYYY-MM-DD HH:mm:ss)。必须与 `end_time` 同时传入或同时省略,禁止单独传入其中一个。 |
|
|
26
|
+
| `end_time` | string | 否 | 查询结束时间(格式 YYYY-MM-DD HH:mm:ss)。必须与 `begin_time` 同时传入或同时省略,禁止单独传入其中一个;同时传入时,`end_time` 必须晚于 `begin_time`。 |
|
|
27
|
+
|
|
28
|
+
> **时间参数约束**:`begin_time` 和 `end_time` 必须**同时存在**或**同时为空**,禁止只传其中一个。两者同时传入时,`end_time` 必须严格晚于 `begin_time`,否则视为非法参数。
|
|
29
|
+
>
|
|
30
|
+
> **查询窗口上限:当前时刻前后 30 天 [REQUIRED]**:`schedules list` 仅支持查询**当前时刻前后 30 天以内**的日程,超出范围的部分服务端不返回。
|
|
31
|
+
> - 用户给的时间范围部分或完全超出窗口(`begin_time` 早于「今天 - 30 天」或 `end_time` 晚于「今天 + 30 天」)时,**直接告知用户「日程查询仅支持当前时刻前后 30 天范围内,请重新给一个更短的时间范围」**,等用户重新提供时间后再调用。
|
|
32
|
+
>
|
|
33
|
+
> **未指定时间时的默认范围策略 [REQUIRED]**:调用前先显式计算好时间范围再传入,不依赖服务端默认值——
|
|
34
|
+
> - 用户已明确时间(如"今天"、"本周"、"4月15日到4月20日")→ 直接映射为 `begin_time`/`end_time`。
|
|
35
|
+
> - 用户未明确时间(如"查一下我的日程"、"看看我的安排")→ **默认策略:今天起未来 7 天**(`begin_time = 今天 00:00:00`,`end_time = 7 天后 23:59:59`),无需追问。
|
|
36
|
+
> - 用户说"最近"或"近期" → 使用"过去 3 天到未来 7 天"(`begin_time = 3 天前 00:00:00`,`end_time = 7 天后 23:59:59`)。
|
|
37
|
+
> - 用户只提供了模糊但有意义的范围(如"上个月")→ 解析为对应日期范围。
|
|
38
|
+
|
|
39
|
+
**返回**:`schedule_list[]` 数组,每项字段如下:
|
|
40
|
+
|
|
41
|
+
| 字段 | 类型 | 说明 |
|
|
42
|
+
|------|------|------|
|
|
43
|
+
| `schedule_id` | string | 日程 ID |
|
|
44
|
+
| `subject` | string | 日程主题 |
|
|
45
|
+
| `begin_time` | string | 开始时间(YYYY-MM-DD HH:mm:ss) |
|
|
46
|
+
| `end_time` | string | 结束时间(YYYY-MM-DD HH:mm:ss) |
|
|
47
|
+
| `attendees` | object[] | 参与人列表,格式 `[{"userid": "USERID", "name": "englishname(name)"}]` |
|
|
48
|
+
| `meeting_room` | object | 会议室信息,含 `meeting_room_id` + `meeting_room_name` |
|
|
49
|
+
| `location` | string | 日程地点 |
|
|
50
|
+
| `meeting` | object | 在线会议信息(关联了会议时才有),含 `meeting_id`/`meeting_code` |
|
|
51
|
+
| `description` | string | 日程描述 |
|
|
52
|
+
| `creator_name` | string | 日程创建者名字 |
|
|
53
|
+
| `allow_self_join` | bool | 是否允许非参与人主动加入日程 |
|
|
54
|
+
| `is_all_day` | bool | 是否全天事件(`true` 是 / `false` 否) |
|
|
55
|
+
| `repeat_rule` | object | 重复规则(`is_repeat=false` 时无此字段或为空),见下表 |
|
|
56
|
+
| `reminders` | object | 提醒设置,含 `is_remind`(是否开启,bool,`true` 是 / `false` 否)和 `reminder_time`(int[],与开始时间的差值秒数,负数为提前提醒) |
|
|
57
|
+
| `timezone` | object | 时区信息,含 `timezone_id`(IANA 标识,如 `Asia/Shanghai`,优先使用)和 `timezone_offset`(UTC 偏移量秒数,`timezone_id` 为空时使用) |
|
|
58
|
+
|
|
59
|
+
**`repeat_rule` 子字段(list 返回):**
|
|
60
|
+
|
|
61
|
+
| 字段 | 类型 | 说明 |
|
|
62
|
+
|------|------|------|
|
|
63
|
+
| `is_repeat` | bool | 是否重复日程 |
|
|
64
|
+
| `repeat_type` | string | 重复类型:`daily`/`weekly`/`monthly`/`monthly_on_the_nth_day`/`yearly`/`yearly_on_the_nth_day`/`work_day` |
|
|
65
|
+
| `repeat_flag` | string[] | 重复标记,数组,可选值:`leap_month`(闰月)、`never_ends`(永不结束) |
|
|
66
|
+
| `repeat_time` | int | 重复次数,`0` 表示无限 |
|
|
67
|
+
| `repeat_interval` | int | 重复间隔 |
|
|
68
|
+
| `repeat_until` | string | 重复截止时间(格式 YYYY-MM-DD HH:mm:ss) |
|
|
69
|
+
| `repeat_week_of_month` | string[] | 每月第几周,数组,可选值:`first`/`second`/`third`/`fourth`/`last` |
|
|
70
|
+
| `repeat_day_of_week` | string[] | 每周周几,数组,可选值:`MO`/`TU`/`WE`/`TH`/`FR`/`SA`/`SU` |
|
|
71
|
+
| `repeat_month_of_year` | int[] | 每年哪几个月,数组,取值范围:1~12 |
|
|
72
|
+
| `repeat_day_of_month` | int[] | 每月哪几天,数组,取值范围:1~31 |
|
|
73
|
+
| `is_custom` | bool | 是否自定义重复 |
|
|
74
|
+
| `exception` | object[] | 例外日程列表,每项含 `begin_time`/`end_time`/`flag`/`except_schedule_id` |
|
|
75
|
+
|
|
76
|
+
### get — 读取日程详情
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
wecom-cli calendar schedules get --json '{"schedule_ids": ["<schedule_id1>", "<schedule_id2>"]}'
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**参数:**
|
|
83
|
+
|
|
84
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
85
|
+
|------|------|:----:|------|
|
|
86
|
+
| `schedule_ids` | string[] | 是 | 日程 ID 列表,支持传入一个或多个 |
|
|
87
|
+
|
|
88
|
+
**返回**:`schedule_list[]` 数组,每项字段如下:
|
|
89
|
+
|
|
90
|
+
| 字段 | 类型 | 说明 |
|
|
91
|
+
|------|------|------|
|
|
92
|
+
| `schedule_id` | string | 日程 ID |
|
|
93
|
+
| `subject` | string | 日程主题 |
|
|
94
|
+
| `begin_time` | string | 开始时间(YYYY-MM-DD HH:mm:ss) |
|
|
95
|
+
| `end_time` | string | 结束时间(YYYY-MM-DD HH:mm:ss) |
|
|
96
|
+
| `attendees` | object[] | 参与人列表,格式 `[{"userid": "USERID", "name": "englishname(name)"}]`,直接取 `name` 展示,禁止展示 userid |
|
|
97
|
+
| `meeting_room` | object | 会议室信息,含 `meeting_room_id` + `meeting_room_name` |
|
|
98
|
+
| `location` | string | 日程地点 |
|
|
99
|
+
| `meeting` | object | 在线会议信息(关联了会议时才有),含 `meeting_id`/`meeting_code` |
|
|
100
|
+
| `description` | string | 日程描述 |
|
|
101
|
+
| `creator_name` | string | 日程创建者名字 |
|
|
102
|
+
| `allow_self_join` | bool | 是否允许非参与人主动加入日程 |
|
|
103
|
+
| `is_all_day` | bool | 是否全天事件(`true` 是 / `false` 否) |
|
|
104
|
+
| `repeat_rule` | object | 重复规则(`is_repeat=false` 时无此字段或为空),见下表 |
|
|
105
|
+
| `reminders` | object | 提醒设置,含 `is_remind`(是否开启,bool,`true` 是 / `false` 否)和 `reminder_time`(int[],与开始时间的差值秒数,负数为提前提醒) |
|
|
106
|
+
| `timezone` | object | 时区信息,含 `timezone_id`(IANA 标识,如 `Asia/Shanghai`,优先使用)和 `timezone_offset`(UTC 偏移量秒数,`timezone_id` 为空时使用) |
|
|
107
|
+
|
|
108
|
+
**`repeat_rule` 子字段:**
|
|
109
|
+
|
|
110
|
+
| 字段 | 类型 | 说明 |
|
|
111
|
+
|------|------|------|
|
|
112
|
+
| `is_repeat` | bool | 是否重复日程 |
|
|
113
|
+
| `repeat_type` | string | 重复类型:`daily`/`weekly`/`monthly`/`monthly_on_the_nth_day`/`yearly`/`yearly_on_the_nth_day`/`work_day` |
|
|
114
|
+
| `repeat_flag` | string[] | 重复标记,数组,可选值:`leap_month`(闰月)、`never_ends`(永不结束) |
|
|
115
|
+
| `repeat_time` | int | 重复次数,`0` 表示无限 |
|
|
116
|
+
| `repeat_interval` | int | 重复间隔 |
|
|
117
|
+
| `repeat_until` | string | 重复截止时间(格式 YYYY-MM-DD HH:mm:ss) |
|
|
118
|
+
| `repeat_week_of_month` | string[] | 每月第几周,数组,可选值:`first`/`second`/`third`/`fourth`/`last` |
|
|
119
|
+
| `repeat_day_of_week` | string[] | 每周周几,数组,可选值:`MO`/`TU`/`WE`/`TH`/`FR`/`SA`/`SU` |
|
|
120
|
+
| `repeat_month_of_year` | int[] | 每年哪几个月,数组,取值范围:1~12 |
|
|
121
|
+
| `repeat_day_of_month` | int[] | 每月哪几天,数组,取值范围:1~31 |
|
|
122
|
+
| `is_custom` | bool | 是否自定义重复 |
|
|
123
|
+
| `exception` | object[] | 例外日程列表,每项含 `begin_time`/`end_time`/`flag`/`except_schedule_id` |
|
|
124
|
+
|
|
125
|
+
## 输出格式
|
|
126
|
+
|
|
127
|
+
将结果整理为顺序的日程列表(**禁止使用 markdown 表格**,每条日程作为独立条目顺序输出,按开始时间升序排序):
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
(会议)
|
|
131
|
+
1. 产品评审
|
|
132
|
+
时间:4月7日 10:00-11:00
|
|
133
|
+
参与人:王五、赵六、钱七
|
|
134
|
+
|
|
135
|
+
(日程)
|
|
136
|
+
1. 站会
|
|
137
|
+
时间:4月7日 09:30-09:45
|
|
138
|
+
参与人:张三、李四
|
|
139
|
+
|
|
140
|
+
共 2 场,其中会议 1 场、日程 1 场
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
> 上例为"模糊会议查询"(日程 + 会议都查)且**两类同时存在**时的呈现:合并日程 `list` 与会议 `list` 的结果,按是否含在线会议链接分成「(会议)」「(日程)」两个部分(来自会议 `list` 或 `meeting.meeting_code` 非空者归会议),同一场会议两边都出现时按"主题 + 时间"去重,末尾给汇总;若本次结果只有单一类别(全是会议或全是日程),则不分部分、不加「(会议)」/「(日程)」标题,按普通列表直接展示;普通"看日程"查询也可不分部分、省略汇总行。
|
|
144
|
+
|
|
145
|
+
**展示规则:**
|
|
146
|
+
- 每个条目 **只展示三项:主题、时间、参与人**(不展示地点、会议室等其他字段)。
|
|
147
|
+
- **时间默认省略年份**(只到月日);仅当日程年份与当前年份不同(跨年)时,才在月日前带上年份。
|
|
148
|
+
- **昨天 / 今天 / 明天**的日程,时间行在月日前加相对词(如 `明天 6月11日 14:00-15:00`);其余日期按月日展示。
|
|
149
|
+
- **超过 10 条时只展示前 10 条**,并在末尾告知"还有 N 条,需要查看更多吗?"。
|
|
150
|
+
- 参与人原样取接口返回的 `attendees[].name` 展示(完全与接口返回的格式保持一致,如返回 `zhangsan(张三)` 就展示 `zhangsan(张三)`),禁止展示 userid、schedule_id。
|
|
151
|
+
- **会议 / 日程 分两部分展示**:判断依据是该日程是否带有会议链接——`meeting.meeting_code` 有值(非空)归为「会议」,为空 / 不存在归为「日程」。**仅当本次结果中同时存在「会议」和「日程」两类时**,才把结果分成「(会议)」和「(日程)」两个部分分别展示(每部分内按开始时间升序、逐条只列主题/时间/参与人);**当结果只有单一类别时**(全是会议或全是日程),不分部分、不展示「(会议)」/「(日程)」标题,按普通列表直接展示即可。`search`/`list`/`get` 返回均含 `meeting` 字段,可直接判断,无需额外调用其它接口补 `get`。
|
|
152
|
+
|
|
153
|
+
**模糊"会议"查询的汇总 [REQUIRED]**:当本次是"查会议/xx会"等需归类的查询(见 [SKILL.md 查询消歧](../SKILL.md))时,在列表末尾追加一行汇总:`共 N 场,其中会议 X 场、日程 Y 场`。
|
|
154
|
+
|
|
155
|
+
**时区标注**:日程 `timezone.timezone_offset != 28800`(非东八区)时,按 [SKILL.md 输出格式规范](../SKILL.md) 的时区标注规则在时间后带上时区,如 `14:00-15:00(纽约时间 UTC-5)`。
|
|
156
|
+
|
|
157
|
+
### 周期日程标注规则 [REQUIRED]
|
|
158
|
+
|
|
159
|
+
列表中存在 `repeat_rule.is_repeat=true` 的日程时,必须在该日程的**主题后追加**周期频率标注(不另起新字段,保持每个条目仍只有主题/时间/参与人三项),格式如下:
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
1. 每周站会(每周一次,截止 2026-12-31)
|
|
163
|
+
时间:4月7日(周一)09:00-09:30
|
|
164
|
+
参与人:张三、李四
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**`repeat_type` 枚举值 → 可读文案映射:**
|
|
168
|
+
|
|
169
|
+
| `repeat_type` | 含义 | 展示文案示例 |
|
|
170
|
+
|:---:|------|------|
|
|
171
|
+
| `daily` | 每天 | 每天一次 |
|
|
172
|
+
| `weekly` | 每周 | 每周一次 |
|
|
173
|
+
| `monthly` | 每月 | 每月一次 |
|
|
174
|
+
| `monthly_on_the_nth_day` | 每月第N天 | 每月一次 |
|
|
175
|
+
| `yearly` | 每年 | 每年一次 |
|
|
176
|
+
| `yearly_on_the_nth_day` | 每年第N天 | 每年一次 |
|
|
177
|
+
| `work_day` | 每个工作日 | 每工作日一次 |
|
|
178
|
+
| 其他(`is_custom=true`) | 自定义 | 自定义周期 |
|
|
179
|
+
|
|
180
|
+
**时间范围展示规则:**
|
|
181
|
+
- `repeat_until` 非空 → 展示"截止 {repeat_until 的日期部分}"
|
|
182
|
+
- `repeat_until` 为空 且 `repeat_time=0` → 展示"无截止"
|
|
183
|
+
- `repeat_time > 0` → 展示"共 {repeat_time} 次"
|
|
184
|
+
|
|
185
|
+
## 典型场景
|
|
186
|
+
|
|
187
|
+
### 1. 查看今日日程
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
用户:今天有什么安排?
|
|
191
|
+
→ 调用 list(today 00:00-23:59)
|
|
192
|
+
→ 按开始时间升序,顺序输出每条日程(主题/时间/参与人),超过 10 条只展示前 10 条
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### 2. 未指定时间范围,使用默认策略
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
用户:帮我看看我的日程安排
|
|
199
|
+
→ 未指定时间范围,直接使用默认策略:今天起未来 7 天(无需追问)
|
|
200
|
+
begin_time = 今天 00:00:00,end_time = 7 天后 23:59:59
|
|
201
|
+
→ 调用 list,按开始时间升序顺序输出每条日程(主题/时间/参与人)
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### 3. 查看详情(需要周期规则、会议链接等)
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
用户:这个周会是每周开吗?
|
|
208
|
+
→ 先从 list/search 结果中拿到 schedule_id
|
|
209
|
+
→ 调用 get 获取详情,展示 repeat_rule
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## 提示
|
|
213
|
+
|
|
214
|
+
- 无日程时告知用户"今天日程清空"。
|
|
215
|
+
- **查询窗口上限 [REQUIRED]**:`schedules list` 仅覆盖当前时刻前后 30 天以内。用户给的时间范围超出窗口时,直接告知用户超出可查范围、请重新给一个更短的时间范围,等用户重新提供后再调用。
|
|
216
|
+
- **顺序列表展示**:每条日程作为独立条目顺序输出,禁止 markdown 表格,每个条目只含主题/时间/参与人。超过 10 条只展示前 10 条,并告知"还有 N 条,需要查看更多吗?"。
|
|
217
|
+
- `list` 和 `get` 均返回 `repeat_rule`,可直接判断是否周期日程;`meeting`(含 `meeting_id`/`meeting_code`)在 `search`/`list`/`get` 中均直接返回,判断会议形态无需额外补 `get`。
|
|
218
|
+
- **周期日程必须说明 [REQUIRED]**:结果中只要存在 `repeat_rule.is_repeat=true` 的日程,必须在该日程**主题后追加**周期频率(由 `repeat_type` 推导)和时间范围(由 `repeat_until`/`repeat_time` 推导)标注,保持条目仍只含主题/时间/参与人三项。禁止仅展示日程条目而不说明其为周期日程。
|
|
219
|
+
- **参与人展示**:`list` 返回的 `attendees` 格式为 `[{"userid": "USERID", "name": "englishname(name)"}]`,直接取 `name` 字段展示,禁止展示 userid,无需反查通讯录。
|
|
220
|
+
|
|
221
|
+
## 参考
|
|
222
|
+
|
|
223
|
+
- [wecomcli-calendar](../SKILL.md) — 日程技能主文档
|
|
224
|
+
- [calendar-search](calendar-search.md) — 按关键词搜索日程
|