diff --git a/docs/skill-content-framework.md b/docs/skill-content-framework.md index a60ab8c1..1b179e8c 100644 --- a/docs/skill-content-framework.md +++ b/docs/skill-content-framework.md @@ -71,7 +71,7 @@ skills/mono/ | 跨产品路由 / 工作流 | `references/routing.md`、`workflow-routing.md`、`intent-guide.md` | | 运行时最小契约长文 | `references/runtime-contract.md`(受 context-budget 约束) | | 全局协议(确认门禁 / Schema 教学等) | `references/`;见质检基线 | -| 与 mono 全局文同名迁移 | `error-codes`、`url-patterns`、`capability-limits`、`channel-login`、`global-reference`、`recipes/`(shared 层:`recipes/shared/`、`recipes/lite-catalog.md`) | +| 与 mono 全局文同名迁移 | `error-codes`、`url-patterns`、`capability-limits`、`channel-login`、`global-reference`、`recipes/`(`conventions.md`、`meta.md`、`lite-catalog.md`) | 产品专属规则(如 AI 表格 `field-rules`)允许下沉到对应 `dingtalk-*`,须在覆盖表注明。 diff --git a/skills/embed.go b/skills/embed.go index 4229bb23..bc2e514f 100644 --- a/skills/embed.go +++ b/skills/embed.go @@ -23,7 +23,7 @@ import "embed" // FS holds the peer mono and multi installable skill trees. Schema-generation // inputs live under internal/cli and are intentionally not embedded. The all: // prefix keeps underscore-prefixed directories (for example, -// dingtalk-shared/references/recipes/shared) that plain embed patterns would skip. +// mono/references/best_practices/_common) that plain embed patterns would skip. // //go:embed all:mono all:multi var FS embed.FS diff --git a/skills/multi/dingtalk-aitable/references/06-data-analytics.md b/skills/multi/dingtalk-aitable/references/06-data-analytics.md index 758048ed..305270c6 100644 --- a/skills/multi/dingtalk-aitable/references/06-data-analytics.md +++ b/skills/multi/dingtalk-aitable/references/06-data-analytics.md @@ -5,7 +5,7 @@ | Recipe | 行动指南(固定路线) | |--------|-------------------| | read-aitable | 1. `aitable base search --query "<表格名>"` → 取 `baseId`/`tableId`
2. `aitable field get --base-id --table-id ` → 取 `fieldId`
3. `aitable record query --base-id --table-id ` → 取记录(分页)
  需要筛选时 `--filters` 格式见 [aitable-filter-sort.md](./aitable/aitable-filter-sort.md),根节点必须是 `{"operator":"and\|or","operands":[...]}`
4. 总结数据 | -| generate-data-report | 1. 同 read-aitable 步骤 1-3
2. 按[「多源并行采集」](recipes/shared/conventions.md#多源并行采集公共模式)执行 → 补充背景
3. `doc create --name "<报告名>" --content "<分析报告>"` | +| generate-data-report | 1. 同 read-aitable 步骤 1-3
2. 按[「多源并行采集」](recipes/conventions.md#多源并行采集公共模式)执行 → 补充背景
3. `doc create --name "<报告名>" --content "<分析报告>"` | | create-aitable-record | **批量导入优先**:`python scripts/import_records.py data.csv\|data.json [batch_size]`(自动分批创建)
单条/少量:1. `aitable base search --query "<表格名>"` → 取 `baseId`/`tableId`
2. `aitable field get --base-id --table-id ` → 取 `fieldId` 与类型
3. `aitable record create --base-id --table-id --records '[{"cells":{"":"值"}}]'` | | update-aitable-record | 1. `aitable base search --query "<表格名>"` → 取 `baseId`/`tableId`
2. `aitable record query --base-id --table-id ` → 取 `recordId`,**先展示让用户确认**
3. `aitable record update --base-id --table-id --records '[{"recordId":"","cells":{...}}]'` | | search-aitable-template | 1. `aitable template search --query "<关键词>"` → 取 `templateId`
2. 用户选定
3. `aitable base create --name "<表格名>" --template-id ` → 取 `baseId` | diff --git a/skills/multi/dingtalk-aitable/references/recipes/shared/conventions.md b/skills/multi/dingtalk-aitable/references/recipes/conventions.md similarity index 100% rename from skills/multi/dingtalk-aitable/references/recipes/shared/conventions.md rename to skills/multi/dingtalk-aitable/references/recipes/conventions.md diff --git a/skills/multi/dingtalk-contact/references/08-directory.md b/skills/multi/dingtalk-contact/references/08-directory.md index f6124313..b2433676 100644 --- a/skills/multi/dingtalk-contact/references/08-directory.md +++ b/skills/multi/dingtalk-contact/references/08-directory.md @@ -1,7 +1,7 @@ # 通讯录(组织架构) > **SKILL.md** 中 #8 内联 3 条 **lite**:`get-contact-self`、`search-person`、`search-user`。下列 recipe、专用规则与消歧请在命中 #8 且**超出**上述 lite 时阅读本文。 -> 产品命令见 [contact.md](./contact.md)。通用批量/并行见 [recipes/shared/conventions.md](recipes/shared/conventions.md)。 +> 产品命令见 [contact.md](./contact.md)。通用批量/并行见 [recipes/conventions.md](recipes/conventions.md)。 ## 专用规则(#8 非 lite 步骤必守) @@ -15,7 +15,7 @@ 3. 将「姓名 + 部门 + 职位」列表展示给用户,请用户确认选择哪一位 4. 使用用户确认的 `userId` 继续后续操作 > **根因**:`aisearch person` 不返回完整部门信息,无法仅凭搜索结果区分同名用户。**必须**追加 `contact user get` 获取部门信息才能消歧。 -- **批量**:多个 `userId` 用 `contact user get --ids id1,id2,...`;多部门成员列表按需并行,遵守单次批量上限与 [recipes/shared/conventions.md](recipes/shared/conventions.md)。 +- **批量**:多个 `userId` 用 `contact user get --ids id1,id2,...`;多部门成员列表按需并行,遵守单次批量上限与 [recipes/conventions.md](recipes/conventions.md)。 - **子部门枚举**:已知父部门 `deptId` 时**优先** `contact dept list-children --dept <父deptId>` 直接拿到完整子部门列表;只知道部门名时先 `contact dept search --query "<父部门名>"` 取 `deptId` 再 `list-children`;用户明示的子部门名(无需枚举)可直接 `dept search` 命中。多子部门展开见 `explore-subdepts-and-members`。 ## 与其他场景消歧 diff --git a/skills/multi/dingtalk-contact/references/recipes/shared/conventions.md b/skills/multi/dingtalk-contact/references/recipes/conventions.md similarity index 100% rename from skills/multi/dingtalk-contact/references/recipes/shared/conventions.md rename to skills/multi/dingtalk-contact/references/recipes/conventions.md diff --git a/skills/multi/dingtalk-doc/references/recipes/shared/conventions.md b/skills/multi/dingtalk-doc/references/recipes/conventions.md similarity index 100% rename from skills/multi/dingtalk-doc/references/recipes/shared/conventions.md rename to skills/multi/dingtalk-doc/references/recipes/conventions.md diff --git a/skills/multi/dingtalk-mail/references/09-mail.md b/skills/multi/dingtalk-mail/references/09-mail.md index aebb7c23..12636d5e 100644 --- a/skills/multi/dingtalk-mail/references/09-mail.md +++ b/skills/multi/dingtalk-mail/references/09-mail.md @@ -1,7 +1,7 @@ # 邮件 > 邮件的 4 条 **lite** recipe:`mail-list-mailbox`、`mail-search`、`mail-send`、`mail-reply-forward`,见 [lite-recipes.md](./lite-recipes.md)。下列专用规则与消歧请在命中邮件场景且**超出**上述 lite 时阅读本文。 -> 产品命令见 [mail.md](./mail.md)。通用批量/并行见 [recipes/shared/conventions.md](recipes/shared/conventions.md)。 +> 产品命令见 [mail.md](./mail.md)。通用批量/并行见 [recipes/conventions.md](recipes/conventions.md)。 ## 专用规则(#9 非 lite 步骤必守) diff --git a/skills/multi/dingtalk-mail/references/recipes/shared/conventions.md b/skills/multi/dingtalk-mail/references/recipes/conventions.md similarity index 100% rename from skills/multi/dingtalk-mail/references/recipes/shared/conventions.md rename to skills/multi/dingtalk-mail/references/recipes/conventions.md diff --git a/skills/multi/dingtalk-minutes/references/07-minutes.md b/skills/multi/dingtalk-minutes/references/07-minutes.md index ac60a658..df937adc 100644 --- a/skills/multi/dingtalk-minutes/references/07-minutes.md +++ b/skills/multi/dingtalk-minutes/references/07-minutes.md @@ -27,7 +27,7 @@ dws minutes list mine --limit 5 --format json | Recipe | 行动指南(固定路线) | | ---------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| meeting-followup | 1. **提取待办优先**:`python scripts/minutes_extract_todos.py [--id ] [--limit N]` → 获取行动项列表 无脚本时按[「多源并行采集」](recipes/shared/conventions.md#多源并行采集公共模式)执行 2. 提取行动项 3. `aisearch person --keyword "<姓名>" --dimension name` → 取 `userId` → `todo task create --title "<行动项>" --executors --priority <10/20/30/40>`(每条行动项;批量时切到 `dingtalk-todo` 的 batch-create-todo recipe,批量脚本只在该 sub-skill 内可用) 4. `chat message send --group --text "<通知内容>"` 通知已创建 | +| meeting-followup | 1. **提取待办优先**:`python scripts/minutes_extract_todos.py [--id ] [--limit N]` → 获取行动项列表 无脚本时按[「多源并行采集」](recipes/conventions.md#多源并行采集公共模式)执行 2. 提取行动项 3. `aisearch person --keyword "<姓名>" --dimension name` → 取 `userId` → `todo task create --title "<行动项>" --executors --priority <10/20/30/40>`(每条行动项;批量时切到 `dingtalk-todo` 的 batch-create-todo recipe,批量脚本只在该 sub-skill 内可用) 4. `chat message send --group --text "<通知内容>"` 通知已创建 | | share-minutes | **拉摘要优先**:`python scripts/minutes_recent_summary.py [--limit N] [--output summary.md]` → 获取近期听记摘要 备选手动:1. `minutes list mine` → 取 `taskUuid` 2. 用户选定 3. `minutes get summary --id ` → 取摘要 4. 单聊:`aisearch person --keyword "<姓名>" --dimension name` → 取 `openDingTalkId` → `chat message send --open-dingtalk-id --text "<摘要内容>"`(推荐);群聊:`--group --text "<摘要内容>"` 发送。仅当无法获取 openDingTalkId 时才用 `--user `(备选) | | browse-minutes | 1. `minutes list all --query "<关键词>" --limit ` → 取全量 `taskUuid`(翻页直至无更多;无主题筛选用 `minutes list mine`;**有时间范围时加 `--start`/`--end` 服务端过滤**,如 `--start "2026-04-01T00:00:00+08:00" --end "2026-04-30T23:59:59+08:00"`) 2. **详情/元数据优先** `minutes get batch --ids `(仅 API 上限时拆多批);**摘要专项**且无 batch 字段时再用并行 `get summary` 或 `**python scripts/minutes_recent_summary.py --limit `** 3. 汇总展示;**同一用户诉求下避免**「半截 list → 再 list 剩余」「拆 4 条一批 summary 连跑多轮」等无必要拆分 | | minutes-raw-export | 适用"下载/导出最近一周听记原文/逐字稿/转写内容/完整记录":1. 按用户时间词计算 `--start` / `--end`(最近一周示例:7 天前 00:00:00+08:00 到今天 23:59:59+08:00) 2. `minutes list all --start "" --end "" --format json` 获取范围内所有可见听记;为空时直接说明无相关数据 3. 对列表中每个 `taskUuid` 逐一 `minutes get transcription --id --format json`,如返回 `cursor` / `nextToken` / `nextCursor`,继续用 `--cursor ` 拉完后续页 4. 交付文件或最终回复必须包含各听记的真实转写段落,可附标题/时间/组织,禁止只交 summary 或让用户再选某一条 | diff --git a/skills/multi/dingtalk-minutes/references/recipes/shared/conventions.md b/skills/multi/dingtalk-minutes/references/recipes/conventions.md similarity index 100% rename from skills/multi/dingtalk-minutes/references/recipes/shared/conventions.md rename to skills/multi/dingtalk-minutes/references/recipes/conventions.md diff --git a/skills/multi/dingtalk-shared/SKILL.md b/skills/multi/dingtalk-shared/SKILL.md index c799f7b1..9512b9eb 100644 --- a/skills/multi/dingtalk-shared/SKILL.md +++ b/skills/multi/dingtalk-shared/SKILL.md @@ -45,7 +45,7 @@ metadata: | `confirmation_required` / 写操作确认 | [confirmation.md](references/confirmation.md) | | 命令发现、Schema / `--compact` / `--all` | [schema-usage.md](references/schema-usage.md) | | 怀疑能力不支持 | [capability-limits.md](references/capability-limits.md) | -| 批量/多源采集 | [conventions.md](references/recipes/shared/conventions.md) | +| 批量/多源采集 | [conventions.md](references/recipes/conventions.md) | | 固定短流程 | [lite-catalog.md](references/recipes/lite-catalog.md) 对应章节 | 产品命令、脚本和字段细节位于对应产品 skill,不在 `dingtalk-shared` 重复维护。 diff --git a/skills/multi/dingtalk-shared/references/recipes/shared/conventions.md b/skills/multi/dingtalk-shared/references/recipes/conventions.md similarity index 100% rename from skills/multi/dingtalk-shared/references/recipes/shared/conventions.md rename to skills/multi/dingtalk-shared/references/recipes/conventions.md diff --git a/skills/multi/dingtalk-shared/references/recipes/shared/meta.md b/skills/multi/dingtalk-shared/references/recipes/meta.md similarity index 100% rename from skills/multi/dingtalk-shared/references/recipes/shared/meta.md rename to skills/multi/dingtalk-shared/references/recipes/meta.md diff --git a/skills/multi/dingtalk-shared/references/workflow-routing.md b/skills/multi/dingtalk-shared/references/workflow-routing.md index 31ca210f..ddbaac44 100644 --- a/skills/multi/dingtalk-shared/references/workflow-routing.md +++ b/skills/multi/dingtalk-shared/references/workflow-routing.md @@ -29,7 +29,7 @@ skill 完成。 - 单一目标、短链路、无多源汇总:在 [lite-catalog.md](recipes/lite-catalog.md) 中只读取对应 recipe。 - 涉及多源采集、批量处理、交叉分析、汇总/归纳或三个以上产品:使用上表的完整 - 行动指南,并按 [conventions.md](recipes/shared/conventions.md) 执行批量和 + 行动指南,并按 [conventions.md](recipes/conventions.md) 执行批量和 ID 传递规则。 - 产品 skill 已内联完整步骤时,直接执行其步骤,不再重复读取通用 recipe。 diff --git a/skills/multi/dingtalk-todo/references/02-task.md b/skills/multi/dingtalk-todo/references/02-task.md index 8afe5d4f..594fc609 100644 --- a/skills/multi/dingtalk-todo/references/02-task.md +++ b/skills/multi/dingtalk-todo/references/02-task.md @@ -14,6 +14,6 @@ | Recipe | 行动指南(固定路线) | |--------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| generate-progress-report | 1. 按[「多源并行采集」](recipes/shared/conventions.md#多源并行采集公共模式)执行
2. 交叉比对各源数据
3. `doc create --name "<报告名>" --content "<报告内容>"` | -| batch-create-todo | 1. 按[「多源并行采集」](recipes/shared/conventions.md#多源并行采集公共模式)执行 → 从结果提取任务条目
2. 每条:`aisearch person --keyword "<姓名>" --dimension name` → 取真实 `userId`;同名时先消歧
3. 逐条执行 `todo task create --title "<标题>" --executors --priority <10/20/30/40>`,从每次响应收集真实 `todoTaskId`;单批超 30 条须用户确认
4. 对全部 `todoTaskId` 并行执行 `todo task get --task-id `,逐项核对标题、执行者、优先级和截止时间;不能只以退出码或创建响应作为成功证据 | +| generate-progress-report | 1. 按[「多源并行采集」](recipes/conventions.md#多源并行采集公共模式)执行
2. 交叉比对各源数据
3. `doc create --name "<报告名>" --content "<报告内容>"` | +| batch-create-todo | 1. 按[「多源并行采集」](recipes/conventions.md#多源并行采集公共模式)执行 → 从结果提取任务条目
2. 每条:`aisearch person --keyword "<姓名>" --dimension name` → 取真实 `userId`;同名时先消歧
3. 逐条执行 `todo task create --title "<标题>" --executors --priority <10/20/30/40>`,从每次响应收集真实 `todoTaskId`;单批超 30 条须用户确认
4. 对全部 `todoTaskId` 并行执行 `todo task get --task-id `,逐项核对标题、执行者、优先级和截止时间;不能只以退出码或创建响应作为成功证据 | | assign-and-notify | 1. `aisearch person --keyword "<姓名>" --dimension name` → 取 `userId`
2. `todo task create --title "<标题>" --executors --priority <10/20/30/40>` → 取 `todoTaskId`
3. `todo task get --task-id ` 回读任务,确认无误后再通知
4. `chat search --query "<群名>"` → 取 `openConversationId` → `chat message send --group --text "<通知内容>"` | diff --git a/skills/multi/dingtalk-todo/references/recipes/shared/conventions.md b/skills/multi/dingtalk-todo/references/recipes/conventions.md similarity index 100% rename from skills/multi/dingtalk-todo/references/recipes/shared/conventions.md rename to skills/multi/dingtalk-todo/references/recipes/conventions.md diff --git a/skills_embed.go b/skills_embed.go index b992d1a5..c9525b74 100644 --- a/skills_embed.go +++ b/skills_embed.go @@ -23,7 +23,7 @@ import "embed" // into the binary. Retired build-only inputs (for example the former // internal/cli/schema_hints tree) must stay absent from this embed. The `all:` // prefix is required so dot/underscore entries — e.g. -// dingtalk-shared/references/recipes/shared — are included rather than skipped. +// mono/references/best_practices/_common — are included rather than skipped. // //go:embed all:skills/mono all:skills/multi var EmbeddedSkills embed.FS