钉钉知识库 Skill
最小 DWS 执行契约
- 只用
dws;结构化读取加--format json,按真实返回判断。 - 已知命令直调;参数/约束/安全不明查 leaf 窄 Schema。Schema 不可用才读已知 leaf Help 一次;
unknown flag用同 leaf Help 修正一次。unknown command不查 Help:优先错误中的明确 suggestion,其次已加载 Skill/reference 中的明确兼容入口;均无则报漂移并停,禁全 Catalog。低频 reference 不默认 Help,禁 root/parent/product Help。发现后必须执行或说明阻塞。 - 不猜命令/flag/字段/ID/账号/业务事实;ID 来自真实返回。目标零命中/多候选/类型不明先消歧;仅可选时间/展示范围用契约默认,缺必需信息即停。
- 解析/读/写同一 profile,ID 不跨组织。多账号只用唯一
isOrgCurrent=true;否则用户指定,禁止选择第一项、最近登录或最近使用账号。 - 不输出/记录 token、refresh token、appSecret、webhook token;已注入认证时不索要。
- 写须符合明确意图;确认以最终 Runtime gate/Schema 为准,确认后才加
--yes。 - 写后验证结果,不凭退出码宣称成功。退出须最终答复,区分完成、部分、阻塞、待确认、失败;保留已有数据及
complete/hasMore/stopReason/failures。 - 时间戳按会话时区展示,必要时保留原值。
- 认证/权限/profile/confirmation/未知错误只读
dingtalk-shared对应 reference,禁连续猜替代命令。
下方自动清单的“唯一”仅指单页匹配;+resolve-space/+wiki-new-doc 不承担写入前的权威唯一解析,按 Golden Route 解析后使用真实 workspaceId。
Shortcuts(无专用脚本/recipe 时优先)
以下 shortcut 同时进入公开 catalog 与 Runtime Schema。按本 skill/recipe 路由,命中时 Shortcut 优先于原子命令。参数只查 dws schema --cli-path "wiki +<shortcut>" --compact --jq '{cli_path,parameters,constraints,confirmation}' -f json;仅需且已发布 result 时查 --jq '{cli_path,outcomes:.result.outcomes,pagination}',字段级再查 data_schema;缺失不以 Help/样例推断。Schema 不可用才读一次已知 leaf Help;unknown flag 用同 leaf Help 修正一次。unknown command 禁 Help:错误 suggestion → 已加载 Skill/reference 明确入口;均无则报漂移。禁全 Catalog/root/parent/product Help;仅映射、接口或 provenance 审计省略 --compact。现有路由和 reference 均无法定位低频能力时,才用 dws shortcut list --service wiki --format json 发现。
| Shortcut | 风险 | 适用场景 |
|---|---|---|
dws wiki +resolve-space | read | 按名称搜索知识空间并解析单次结果中的唯一 spaceId(只读) |
dws wiki +wiki-new-doc | write | 在指定名称的知识库下新建一个文档节点(按单次名称搜索解析 workspaceId) |
Golden Route
| 用户意图 | 唯一推荐入口 | 关键边界 |
|---|---|---|
| 按名称解析唯一知识库 | +space-list --type <orgWikiSpace|myWikiSpace> --limit 50 --page-all 后精确匹配名称 | 先明确组织/个人范围;结果的 requestedType 必须等于请求范围;仅 autoPageComplete=true 且全量中恰好一个同名项时取 workspaceId |
| 搜索或列出知识库 | +space-search --query <关键词> / +space-list [--type orgWikiSpace|myWikiSpace] | 用户要求全部时加 --page-all;个人知识库必须明确语义 |
| 为 Drive 发现钉盘存储空间 | dws wiki space list --type <orgSpace|mySpace> --format json | managed 只读前置;返回 spaceId/rootFolderId 后切回 Drive,不进入 Wiki node/member 路由 |
| 已知 workspace 查看详情 | dws wiki +space-get --workspace <ID或URL> | 已知 ID 不重复搜索 |
| 创建或删除知识库 | +space-create --name <名称> / +delete-space --workspace <ID> | 创建会读回并验证空间类型;仅 spaceTypeVerified=true 时可断言类型。删除整个空间是高风险操作 |
| 浏览或搜索库内节点 | +node-list --workspace <ID> [--folder <ID>] / +node-search --workspace <ID> --query <词> | 列目录与关键词搜索分开;需要完整列表或完整搜索结果都加 --page-all |
| 查看节点元数据 | dws wiki +node-get --node <ID或URL> | 正文读写随后切 Doc |
| 已知 workspace 创建节点 | +node-create --workspace <ID> --name <名称> [--type <类型>] | 支持 adoc/axls/able/appt/adraw/amind/folder;创建后验证 ID、workspace、名称、类型及显式父文件夹 |
| 只有知识库名称时新建空文档 | 先按全量 +space-list 唯一解析,再 +node-create --workspace <ID> --name <标题> --type adoc | 不用单页 +wiki-new-doc 猜空间;正文另走 Doc |
| 用本地文件在新知识库建文档后移到“我的文档” | +space-create → doc +import --file <相对路径> --workspace <新workspaceId> → +move-to-drive --workspace <新workspaceId> --node <导入nodeId> | 必须先把文档真实导入新知识库再移出;禁止先查 mySpace、禁止 doc +create 在个人域创建后用 drive +move 冒充该流程 |
| 复制、移入知识库或将 Wiki 在线节点移出到“我的文档” | +node-copy / +move / +move-to-drive | “Wiki 节点 → 我的文档”固定使用 +move-to-drive,已知来源 workspace 时可传 --workspace 作写前归属断言;不可改用 mySpace/rootFolderId + drive +move |
| 知识库首页放独立普通附件 | dws drive upload --file <本地文件> --workspace <ID> --format json | 不加 --convert;子目录加 --folder <目录nodeId>。正文内附件切 Doc 媒体,转换在线文档切 Doc 导入 |
| 删除库内节点 | +node-delete --workspace <ID> --node <ID> | 删除前核对归属并确认 |
| 列出、添加、修改或移除知识库成员 | member list / +member-add / +member-update / +member-remove | 写入 users 为 1-30 个;添加/修改须指定角色,移除不传角色;多类型、逐成员角色或通知用原生 member |
| 查看知识库动态 | +feed-list --workspace <ID> [--exclude-file] | 全部动态加 --page-all;仅用户明确要求核对过滤效果时比较两组结果,未过滤结果须实际包含该文件事件 |
当前最短路径
- 已知 workspaceId(含本轮创建回执):直接执行 space/node/member/feed 目标命令,不再 resolve,也不把名称传给
--workspace。用户另要求“按名称查找”时仍完成该查找步骤;已有 ID 不等于可以省略明确要求。 - 只有知识库名称:先明确组织/个人范围,按 Golden Route 对应分支核对完整名称;未知范围先消歧,不同时扫描两个范围并猜测。
+space-search只用于快速浏览候选;当前+resolve-space/+wiki-new-doc不暴露名称搜索的分页完成证据,不作为权威唯一解析或写入 Golden Route。- 已知 nodeId/URL:元数据直接
+node-get;正文直接切 Doc,不先 list/search。 - 创建节点后返回的 nodeId 直接传给 Doc;不通过同名搜索重新定位。创建文件夹的
nodeId才是后续--folder,回执folderId是它的父目录;+node-copy/+move的“本库首页”使用当前 workspace 并省略--folder,移出另用+move-to-drive。 - “本地文件 → 新知识库 → 我的文档”是有序跨产品流程:创建空间返回 workspaceId 后,必须
doc +import --workspace取得库内 nodeId,再wiki +move-to-drive --workspace;任何一步都不得在个人域提前创建或用 Drive 根目录移动替代。 - move/copy/delete 已含预检或读回时,不由 Agent 重复拼装原子命令。
- 普通“文档空间/我的文档”的文件操作按存储意图走 Drive;但源对象已确定是 Wiki workspace 中的在线节点、目标是移出到“我的文档”时是明确例外,直接用
wiki +move-to-drive,不查询mySpace、不调用drive +move。仅普通 Drive 节点缺少 spaceId/rootFolderId 时才用 managedwiki space list --type orgSpace|mySpace发现空间。
关键结果语义
+space-list/+node-list/+node-search/+feed-list默认单页;全量请求显式加--page-all,并检查autoPageComplete/autoPageStopReason/pagesFetched与分页元数据。+space-list顶层requestedType是本次服务端查询的类型范围;条目级spaceType只在服务端真实返回时出现,不能用请求值伪造。用列表缺席证明空间不存在前,必须同时满足范围正确和autoPageComplete=true。+space-create只有返回spaceTypeVerified=true时才能使用spaceType;类型验证失败会保留已创建的 workspaceId,禁止重试创建或按名称猜类型。+space-search/+node-search缺少业务数组不是零命中;只有显式空数组才可报告空结果。- 组织名称解析须列表取完且唯一精确同名;个人名称解析须原生成功回执中恰好一条且精确同名,不要求自动分页字段。空/畸形响应、0 条、多条、名称不符或组织分页未完成都停止。
+space-search、+resolve-space的单页结果不能证明全局唯一;不得把首页唯一候选直接用于写入。+node-list/+node-search/+node-get会保留服务端extension/type/hasChildren并规范化parentFolderId;字段缺席表示服务端未提供,不能靠名称推断类型或层级。- 创建节点必须验证新 ID、workspace、名称、类型和显式父文件夹;复制必须先读源节点,再证明新 ID 与源 ID 不同且副本进入目标 workspace/folder。
+move/+move-to-drive返回source/target、前后 workspace 和目标域;移到我的文档还会用myWikiSpace范围列表验证目标 workspace。删除必须有success=true。- 成员列表服务端没有续页游标且最多 50,不能把上限内结果宣称为全量;成员写只具备终态响应证据,不虚构精确读回。
partial_failure、分页未完成或写入效果未知都不是成功。
参数与安全边界
- workspaceId、nodeId、folderId、userId 不互相替代;名称不能当 ID。
- 写操作只按精确 leaf Runtime 判定确认;已明确授权具体空间/节点/成员、动作与影响时,首次正式执行直接带
--yes,否则先确认。参数变化重新确认;禁止用缺少--yes的失败探测。 wiki member list --limit默认为 30,范围 1-50;不使用成员--page-all或提高上限。成员写--users为 1-30 个,角色仅MANAGER|EDITOR|DOWNLOADER|READER。+node-create --type决定内容产品;建好后 adoc→Doc、axls→Sheet、able→AITable。- Profile/组织在空间解析、节点操作和验证期间保持一致。
按需加载
Golden Route 参数足够时不读 reference;否则最多读取一个:
| 触发条件 | Reference |
|---|---|
| 文档空间、知识库、Drive/Doc 边界不明 | intent-guide |
| 节点类型、复制、移动、移出或删除细节 | node-ops |
| 成员角色、上限与验证语义 | members |
| 分页、空间、动态及低频错误 | wiki reference |
| 跨产品创建/写正文短流程 | lite-recipes |
错误最短路径
- 空响应、缺失集合、零/多候选或分页不完整:停止后续写入并返回证据;
+resolve-space resolved=true也不能替代完整空间列表的分页完成证据。 - workspace/node 归属不一致:停止,不尝试换一个 ID 或 profile。
- 写响应缺少新 ID 或
success=true:效果未知,按名称/ID定向回读,不盲目重放。 unknown flag只查当前 leaf Help;unknown command只查一次 Wiki Shortcut 清单。- 正文、普通存储或 Base 记录误路由时切回对应产品,不在 Wiki 内试探近似命令。
跨产品边界
- 明确知识库容器、成员、库内层级与动态 → Wiki。
- 锁定库内 adoc 节点后的正文读写/导出 → Doc;axls 内容 → Sheet;able 记录/字段 → AITable。
- 普通文件、文件夹、“我的文档/文档空间”的存储搜索、传输和整理 → Drive;已知源是 Wiki 在线节点且动作是“移出到我的文档”则走 Wiki
+move-to-drive。 - Drive 存储空间发现可复用 managed
wiki space list --type orgSpace|mySpace;结果是 spaceId/rootFolderId,不能交给 Wiki node/member。知识库orgWikiSpace/myWikiSpace仍返回 workspaceId。 - Wiki 节点移入/移出使用
+move/+move-to-drive;不要把 workspaceId 当普通 Drive folderId。

