From e2e855d12a590ba5642071bd5fa80d819518c6cb Mon Sep 17 00:00:00 2001 From: chichuan Date: Tue, 4 Aug 2026 11:42:15 +0800 Subject: [PATCH 1/3] feat(wiki): add knowledge base feed query command Port the knowledge base activity feed capability from the internal dws-wukong branch feat/pull_knowledge_base_dynamic-wiki (merged there as 58fd118c) to the open-source CLI as `dws wiki feed list`. The command forwards to the native wiki MCP tool list_workspace_feeds, mapping --workspace/--limit/--cursor/--exclude-file onto workspaceId/maxResults/nextToken/excludeFile. Cross-product hidden aliases come from RegisterCrossProductAliases rather than hand-written flags, so --workspace-id/--page-token/--next-token/--page-size all resolve. Register the reviewed Schema inputs (MCP contract pinned from the live wiki tools/list payload, CommandRegistry entry, safety and selection hints, parameter bindings, surface completeness count) and regenerate the Catalog and Agent metadata projections. --- internal/cli/schema_agent_metadata/index.json | 18 +- internal/cli/schema_agent_metadata/wiki.json | 259 ++++++ internal/cli/schema_agent_metadata_audit.json | 32 +- internal/cli/schema_catalog/catalog.json | 57 +- internal/cli/schema_catalog/tools/wiki.json | 819 +++++++++++++++++- .../products/wiki.json | 4 + internal/cli/schema_hints/metadata/wiki.json | 6 + .../runtime-surface-completeness.json | 2 +- internal/cli/schema_hints/selection/wiki.json | 23 + internal/cli/schema_mcp_metadata.json | 27 + internal/cli/schema_parameter_bindings.json | 10 +- internal/helpers/wiki.go | 58 +- internal/helpers/wiki_coverage_more_test.go | 4 + 13 files changed, 1261 insertions(+), 58 deletions(-) diff --git a/internal/cli/schema_agent_metadata/index.json b/internal/cli/schema_agent_metadata/index.json index ae474204..8362187c 100644 --- a/internal/cli/schema_agent_metadata/index.json +++ b/internal/cli/schema_agent_metadata/index.json @@ -1,17 +1,17 @@ { "version": 1, - "source_hash": "sha256:f3d5e5d6ca3c613b1d004d68eca89679d0f8cffe882d7fed0fbb1bcef078fdc9", - "surface_hash": "sha256:41044fe1b6723564c40d684381ac6d6f23c4dfd58f9769350f02f223f02fa894", + "source_hash": "sha256:1f76aa71b00f7b807b863ced6e98aca76dc4bda65107ea2a6c67eb4ec629db43", + "surface_hash": "sha256:89bc72d0a5ff03df634d733dc8b71c3010572524542538552c33c657ae012562", "coverage": { "surface_products": 26, "products_with_metadata": 26, - "surface_tools": 846, - "tools_with_metadata": 846, - "tools_with_agent_summary": 846, - "tools_with_use_when": 846, - "tools_with_avoid_when": 846, - "tools_with_examples": 846, - "tools_with_interface_mode": 846, + "surface_tools": 847, + "tools_with_metadata": 847, + "tools_with_agent_summary": 847, + "tools_with_use_when": 847, + "tools_with_avoid_when": 847, + "tools_with_examples": 847, + "tools_with_interface_mode": 847, "unmatched_skill_tools": 122, "unreviewed_skill_tools": 11 }, diff --git a/internal/cli/schema_agent_metadata/wiki.json b/internal/cli/schema_agent_metadata/wiki.json index 03fed77e..ffc70af3 100644 --- a/internal/cli/schema_agent_metadata/wiki.json +++ b/internal/cli/schema_agent_metadata/wiki.json @@ -259,6 +259,265 @@ "当你只记得知识库名称的部分关键词、想快速按名称定位某个知识库时使用;输入关键词返回匹配的知识库列表,比逐页 +space-list 更快找到目标 workspaceId。" ] }, + "wiki feed list": { + "agent_summary": "查询知识库的活动动态:谁在什么时间更新/上传/评论了哪些文档", + "agent_summary_source": "dws-agent-selection/wiki", + "availability": "available", + "avoid_when": [ + "要看知识库当前有哪些节点用 node list;库内按关键词找文档用 node search", + "要读某篇文档正文用 doc read;跨库全局找文件用 drive search" + ], + "confirmation": "not_required", + "effect": "read", + "effect_source": "command-verb", + "examples": [ + "dws wiki feed list --workspace \u003cworkspaceId\u003e --format json", + "dws wiki feed list --workspace \u003cworkspaceId\u003e --limit 10 --format json" + ], + "field_provenance": { + "agent_summary": { + "value": "查询知识库的活动动态:谁在什么时间更新/上传/评论了哪些文档", + "source": "internal/cli/schema_hints/selection/wiki.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。", + "candidates": [ + { + "value": "查询知识库的活动动态:谁在什么时间更新/上传/评论了哪些文档", + "source": "internal/cli/schema_hints/selection/wiki.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。" + } + ] + }, + "availability": { + "value": "available", + "source": "internal/cli/schema_hints/metadata/wiki.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Live wiki MCP tools/list exposes list_workspace_feeds as a read-only knowledge base activity query. The reviewed CLI leaf forwards workspaceId/maxResults/nextToken/excludeFile to the native wiki server and adds no side effects, so it keeps the same read-only posture as the sibling wiki list commands.", + "candidates": [ + { + "value": "available", + "source": "internal/cli/schema_hints/metadata/wiki.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "Live wiki MCP tools/list exposes list_workspace_feeds as a read-only knowledge base activity query. The reviewed CLI leaf forwards workspaceId/maxResults/nextToken/excludeFile to the native wiki server and adds no side effects, so it keeps the same read-only posture as the sibling wiki list commands." + }, + { + "value": "available", + "source": "internal/cli/schema_mcp_metadata.json#tools.wiki.list_workspace_feeds.interface_ref", + "precedence": "mcp_fallback", + "selected": false + } + ] + }, + "avoid_when": { + "value": [ + "要看知识库当前有哪些节点用 node list;库内按关键词找文档用 node search", + "要读某篇文档正文用 doc read;跨库全局找文件用 drive search" + ], + "source": "internal/cli/schema_hints/selection/wiki.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。", + "candidates": [ + { + "value": [ + "要看知识库当前有哪些节点用 node list;库内按关键词找文档用 node search", + "要读某篇文档正文用 doc read;跨库全局找文件用 drive search" + ], + "source": "internal/cli/schema_hints/selection/wiki.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。" + } + ] + }, + "confirmation": { + "value": "not_required", + "source": "risk-default", + "precedence": "inference_or_default", + "resolution": "highest_precedence", + "candidates": [ + { + "value": "not_required", + "source": "risk-default", + "precedence": "inference_or_default", + "selected": true + } + ] + }, + "effect": { + "value": "read", + "source": "command-verb", + "precedence": "inference_or_default", + "resolution": "highest_precedence", + "candidates": [ + { + "value": "read", + "source": "command-verb", + "precedence": "inference_or_default", + "selected": true + } + ] + }, + "examples": { + "value": [ + "dws wiki feed list --workspace \u003cworkspaceId\u003e --format json", + "dws wiki feed list --workspace \u003cworkspaceId\u003e --limit 10 --format json" + ], + "source": "internal/cli/schema_hints/selection/wiki.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。", + "candidates": [ + { + "value": [ + "dws wiki feed list --workspace \u003cworkspaceId\u003e --format json", + "dws wiki feed list --workspace \u003cworkspaceId\u003e --limit 10 --format json" + ], + "source": "internal/cli/schema_hints/selection/wiki.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。" + } + ] + }, + "idempotency": { + "value": "idempotent", + "source": "effect-default", + "precedence": "inference_or_default", + "resolution": "highest_precedence", + "candidates": [ + { + "value": "idempotent", + "source": "effect-default", + "precedence": "inference_or_default", + "selected": true + } + ] + }, + "interface_mode": { + "value": "mcp", + "source": "internal/cli/schema_hints/metadata/wiki.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Live wiki MCP tools/list exposes list_workspace_feeds as a read-only knowledge base activity query. The reviewed CLI leaf forwards workspaceId/maxResults/nextToken/excludeFile to the native wiki server and adds no side effects, so it keeps the same read-only posture as the sibling wiki list commands.", + "candidates": [ + { + "value": "mcp", + "source": "internal/cli/schema_hints/metadata/wiki.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "Live wiki MCP tools/list exposes list_workspace_feeds as a read-only knowledge base activity query. The reviewed CLI leaf forwards workspaceId/maxResults/nextToken/excludeFile to the native wiki server and adds no side effects, so it keeps the same read-only posture as the sibling wiki list commands." + }, + { + "value": "mcp", + "source": "internal/cli/schema_mcp_metadata.json#tools.wiki.list_workspace_feeds.interface_ref", + "precedence": "mcp_fallback", + "selected": false + } + ] + }, + "interface_ref": { + "value": "wiki.list_workspace_feeds", + "source": "internal/cli/schema_mcp_metadata.json#tools.wiki.list_workspace_feeds.interface_ref", + "precedence": "mcp_fallback", + "resolution": "highest_precedence", + "candidates": [ + { + "value": "wiki.list_workspace_feeds", + "source": "internal/cli/schema_mcp_metadata.json#tools.wiki.list_workspace_feeds.interface_ref", + "precedence": "mcp_fallback", + "selected": true + } + ] + }, + "reviewed": { + "value": true, + "source": "internal/cli/schema_hints/metadata/wiki.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Live wiki MCP tools/list exposes list_workspace_feeds as a read-only knowledge base activity query. The reviewed CLI leaf forwards workspaceId/maxResults/nextToken/excludeFile to the native wiki server and adds no side effects, so it keeps the same read-only posture as the sibling wiki list commands.", + "candidates": [ + { + "value": true, + "source": "internal/cli/schema_hints/metadata/wiki.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "Live wiki MCP tools/list exposes list_workspace_feeds as a read-only knowledge base activity query. The reviewed CLI leaf forwards workspaceId/maxResults/nextToken/excludeFile to the native wiki server and adds no side effects, so it keeps the same read-only posture as the sibling wiki list commands." + }, + { + "value": true, + "source": "internal/cli/schema_hints/selection/wiki.json", + "precedence": "reviewed_explicit", + "selected": false, + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。" + } + ] + }, + "risk": { + "value": "low", + "source": "effect-default", + "precedence": "inference_or_default", + "resolution": "highest_precedence", + "candidates": [ + { + "value": "low", + "source": "effect-default", + "precedence": "inference_or_default", + "selected": true + } + ] + }, + "use_when": { + "value": [ + "用户问某个知识库最近有什么更新、谁改了什么、有哪些评论等协作动态时", + "需要巡检知识库变更并按时间线汇总成动态摘要时" + ], + "source": "internal/cli/schema_hints/selection/wiki.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。", + "candidates": [ + { + "value": [ + "用户问某个知识库最近有什么更新、谁改了什么、有哪些评论等协作动态时", + "需要巡检知识库变更并按时间线汇总成动态摘要时" + ], + "source": "internal/cli/schema_hints/selection/wiki.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。" + } + ] + } + }, + "idempotency": "idempotent", + "interface_mode": "mcp", + "interface_ref": { + "product_id": "wiki", + "rpc_name": "list_workspace_feeds" + }, + "reviewed": true, + "risk": "low", + "source_refs": [ + "CommandRegistry:canonical_path=wiki.list_workspace_feeds", + "Skill:skills/mono/references/products/wiki.md", + "cobra-help:dws wiki feed list", + "internal/cli/schema_hints/metadata/wiki.json", + "internal/cli/schema_hints/selection/wiki.json", + "internal/cli/schema_mcp_metadata.json#tools.wiki.list_workspace_feeds", + "live-mcp-tools-list:wiki.list_workspace_feeds", + "skills/mono/references/products/wiki.md" + ], + "use_when": [ + "用户问某个知识库最近有什么更新、谁改了什么、有哪些评论等协作动态时", + "需要巡检知识库变更并按时间线汇总成动态摘要时" + ] + }, "wiki member add": { "agent_summary": "为指定知识库添加一个或多个成员,并授予指定角色", "agent_summary_source": "dws-agent-selection/wiki", diff --git a/internal/cli/schema_agent_metadata_audit.json b/internal/cli/schema_agent_metadata_audit.json index 128ddd3d..300c3a6b 100644 --- a/internal/cli/schema_agent_metadata_audit.json +++ b/internal/cli/schema_agent_metadata_audit.json @@ -1,20 +1,20 @@ { "version": 1, - "source_hash": "sha256:f3d5e5d6ca3c613b1d004d68eca89679d0f8cffe882d7fed0fbb1bcef078fdc9", - "surface_hash": "sha256:41044fe1b6723564c40d684381ac6d6f23c4dfd58f9769350f02f223f02fa894", + "source_hash": "sha256:1f76aa71b00f7b807b863ced6e98aca76dc4bda65107ea2a6c67eb4ec629db43", + "surface_hash": "sha256:89bc72d0a5ff03df634d733dc8b71c3010572524542538552c33c657ae012562", "source_files": 160, "hint_files": 54, "hint_products": 43, - "hint_tools": 1844, + "hint_tools": 1846, "interface_metadata": { "source": "mcp-tools-list+cli-registry", "revision": "4574f7022c32cf4c033e9b7b4156e2fec815fed8", "source_hash": "sha256:17251f74a4f76142457cc0e87251ecb86c1e3bda0cdf2edc02f351589716ecbc", - "source_tools": 419, - "surface_tools": 414, - "eligible_summaries": 413, + "source_tools": 420, + "surface_tools": 415, + "eligible_summaries": 414, "applied_summaries": 0, - "preserved_summaries": 413, + "preserved_summaries": 414, "rejected_tools": [ "chat.unread_message_conversation_list" ], @@ -29,13 +29,13 @@ "coverage": { "surface_products": 26, "products_with_metadata": 26, - "surface_tools": 846, - "tools_with_metadata": 846, - "tools_with_agent_summary": 846, - "tools_with_use_when": 846, - "tools_with_avoid_when": 846, - "tools_with_examples": 846, - "tools_with_interface_mode": 846, + "surface_tools": 847, + "tools_with_metadata": 847, + "tools_with_agent_summary": 847, + "tools_with_use_when": 847, + "tools_with_avoid_when": 847, + "tools_with_examples": 847, + "tools_with_interface_mode": 847, "unmatched_skill_tools": 122, "unreviewed_skill_tools": 11 }, @@ -155,8 +155,8 @@ "tool_path": "wiki", "candidates": [ "wiki +space-search", - "wiki member add", - "wiki member list" + "wiki feed list", + "wiki member add" ], "review": { "status": "group", diff --git a/internal/cli/schema_catalog/catalog.json b/internal/cli/schema_catalog/catalog.json index e406cf73..011f2544 100644 --- a/internal/cli/schema_catalog/catalog.json +++ b/internal/cli/schema_catalog/catalog.json @@ -1,17 +1,17 @@ { "version": 1, - "surface_hash": "sha256:41044fe1b6723564c40d684381ac6d6f23c4dfd58f9769350f02f223f02fa894", - "source_hash": "sha256:00285e7f05c4ed9e9e3aa7464c7114990187dd7ffdcc9e83e64f3ec33d22d0a8", + "surface_hash": "sha256:89bc72d0a5ff03df634d733dc8b71c3010572524542538552c33c657ae012562", + "source_hash": "sha256:ccdbef2cd88ade9fce277b4dfc9ef433724cf54f9ce6676b77169e99c9944f45", "catalog": { "agent_metadata": { "products_with_metadata": 26, "source": "embedded-skill-metadata", - "source_hash": "sha256:f3d5e5d6ca3c613b1d004d68eca89679d0f8cffe882d7fed0fbb1bcef078fdc9", - "surface_hash": "sha256:41044fe1b6723564c40d684381ac6d6f23c4dfd58f9769350f02f223f02fa894", + "source_hash": "sha256:1f76aa71b00f7b807b863ced6e98aca76dc4bda65107ea2a6c67eb4ec629db43", + "surface_hash": "sha256:89bc72d0a5ff03df634d733dc8b71c3010572524542538552c33c657ae012562", "surface_products": 26, - "surface_tools": 846, - "tools_with_agent_summary": 846, - "tools_with_metadata": 846, + "surface_tools": 847, + "tools_with_agent_summary": 847, + "tools_with_metadata": 847, "unmatched_skill_tools": 122, "version": 1 }, @@ -33,7 +33,7 @@ "source": "mcp-tools-list+cli-registry", "source_hash": "sha256:17251f74a4f76142457cc0e87251ecb86c1e3bda0cdf2edc02f351589716ecbc", "source_revision": "4574f7022c32cf4c033e9b7b4156e2fec815fed8", - "tool_count": 419, + "tool_count": 420, "version": 1 }, "kind": "schema", @@ -26107,7 +26107,7 @@ "avoid_when": [ "需要编辑在线文档正文时使用 doc;只管理钉盘普通文件时使用 drive" ], - "description": "知识库 / 空间管理 / 节点管理 / 成员管理", + "description": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "field_provenance": { "agent_summary": { "candidates": [ @@ -26161,9 +26161,9 @@ } }, "id": "wiki", - "name": "知识库 / 空间管理 / 节点管理 / 成员管理", + "name": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "runtime": true, - "tool_count": 16, + "tool_count": 17, "tools": [ { "agent_metadata_source": "embedded-skill-metadata", @@ -26450,6 +26450,39 @@ "需要 workspaceId / rootFolderId 作为后续 node/drive 操作前置时" ] }, + { + "agent_metadata_source": "embedded-skill-metadata", + "agent_summary": "查询知识库的活动动态:谁在什么时间更新/上传/评论了哪些文档", + "agent_summary_source": "dws-agent-selection/wiki", + "availability": "available", + "avoid_when": [ + "要看知识库当前有哪些节点用 node list;库内按关键词找文档用 node search", + "要读某篇文档正文用 doc read;跨库全局找文件用 drive search" + ], + "canonical_path": "wiki.list_workspace_feeds", + "cli_name": "list", + "cli_path": "wiki feed list", + "confirmation": "not_required", + "description": "查询指定知识库的动态列表,返回动态类型、时间、内容摘要等信息。\n\n通过 --workspace 指定知识库,支持传入知识库 ID 或知识库 URL。\n支持分页,通过 --cursor 传入上次返回的 nextToken 获取下一页。\n\n权限要求:调用者需具备知识库的成员权限,非成员会被拒绝访问。", + "effect": "read", + "group": "feed", + "idempotency": "idempotent", + "interface_mode": "mcp", + "interface_ref": { + "product_id": "wiki", + "rpc_name": "list_workspace_feeds" + }, + "metadata_source": "embedded-mcp-metadata", + "name": "list_workspace_feeds", + "primary_cli_path": "wiki feed list", + "reviewed": true, + "risk": "low", + "title": "查询知识库动态列表", + "use_when": [ + "用户问某个知识库最近有什么更新、谁改了什么、有哪些评论等协作动态时", + "需要巡检知识库变更并按时间线汇总成动态摘要时" + ] + }, { "agent_metadata_source": "embedded-skill-metadata", "agent_summary": "将知识库中的节点复制到指定位置", @@ -26671,6 +26704,6 @@ } ], "source": "embedded-command-catalog", - "tool_count": 846 + "tool_count": 847 } } diff --git a/internal/cli/schema_catalog/tools/wiki.json b/internal/cli/schema_catalog/tools/wiki.json index a51da890..1a6ef11c 100644 --- a/internal/cli/schema_catalog/tools/wiki.json +++ b/internal/cli/schema_catalog/tools/wiki.json @@ -28,7 +28,7 @@ "cli_path": "wiki member add", "confirmation": "not_required", "description": "为指定知识库添加一个或多个成员,并授予指定角色。\n\n通过 --users 传入逗号分隔的 userId 列表,多个用户将被授予同一角色。\n\n支持的角色 (--role)(必须大写):\n MANAGER 管理员,可读写、管理成员\n EDITOR 编辑者,可查看、编辑、上传内容\n DOWNLOADER 查看下载者,可查看并下载内容\n READER 仅可查看者,仅可查看,不可下载\n\n注意:\n- OWNER 角色不可通过此接口添加,知识库创建者默认为所有者。\n- 操作者需具备知识库的 OWNER 或 MANAGER 权限。\n- 单次请求最多 30 个成员,超出请分批调用。\n\n支持通过 --workspace 传入知识库 ID 或知识库 URL,系统自动识别。\n用户 uid 可通过「钉钉通讯录」相关命令检索,如:\n dws contact user search --keyword \"姓名\"", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "write", "effect_source": "command-verb", "examples": [ @@ -732,7 +732,7 @@ "cli_path": "wiki node create", "confirmation": "not_required", "description": "在指定知识库中创建文档、文件夹或其他类型的节点。\n\n通过 --type 指定节点类型(服务端支持以下值,asheet 不被支持):\n adoc 在线文档 (默认)\n axls 在线电子表格\n able 多维表\n appt 在线演示\n adraw 白板/画板\n amind 脑图\n folder 文件夹\n\n通过 --folder 指定父节点,不传则创建在知识库根目录。", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "write", "effect_source": "command-verb", "examples": [ @@ -1501,7 +1501,7 @@ "cli_path": "wiki space create", "confirmation": "not_required", "description": "创建一个新的钉钉文档知识库(WikiSpace)。\n\n创建成功后返回新知识库的 workspaceId,可用于后续在该知识库下创建文档或遍历文件。\n操作受权限控制,仅当调用者具备在当前组织内创建知识库的权限时可成功创建。", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "write", "effect_source": "command-verb", "examples": [ @@ -2149,7 +2149,7 @@ "cli_path": "wiki node delete", "confirmation": "user_required", "description": "将知识库中的节点移入回收站。\n\n注意: 这是一个危险操作。执行前需要确认,或传入 --yes 跳过确认。\n删除后节点会进入回收站,有保留期限可恢复。\n\n权限要求: 对节点有\"管理\"权限。", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "destructive", "effect_source": "agent-hint", "examples": [ @@ -2737,7 +2737,7 @@ "cli_path": "wiki space delete", "confirmation": "user_required", "description": "将指定知识库移入回收站。\n\n删除后知识库会进入回收站,可在回收站中恢复(有保留期限)。\n支持传入知识库 ID 或知识库 URL,系统自动识别。\n知识库 URL 格式:https://alidocs.dingtalk.com/i/spaces/{workspaceId}/overview\n\n注意:\n- 操作者必须具备知识库的 OWNER 角色。\n- 这是一个危险操作,执行前请确认。", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "destructive", "effect_source": "agent-hint", "examples": [ @@ -3219,7 +3219,7 @@ "cli_path": "wiki space get", "confirmation": "not_required", "description": "获取指定知识库的详细信息,包括名称、描述、创建者、创建时间、成员数量等。\n\n支持传入知识库 ID 或知识库 URL,系统自动识别。\n知识库 URL 格式:https://alidocs.dingtalk.com/i/spaces/{workspaceId}/overview", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "read", "effect_source": "command-verb", "examples": [ @@ -3676,7 +3676,7 @@ "cli_path": "wiki member list", "confirmation": "not_required", "description": "查询指定知识库的成员列表,返回每位成员的 userId、姓名、角色等信息。\n\n注意:底层不支持游标分页,--limit 仅控制单次返回的最大条数(最大 200)。\n若结果被截断(出参 truncated=true),可通过 --filter-role 收窄查询范围;\nORG 类型授权不会出现在查询结果中。", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "read", "effect_source": "command-verb", "examples": [ @@ -4379,7 +4379,7 @@ "cli_path": "wiki node list", "confirmation": "not_required", "description": "列出指定知识库下的直接子节点(文档、文件夹、表格等)。\n\n通过 --folder 指定父节点可列出子目录内容;不传 --folder 则列出知识库根目录。\n支持分页,通过 --cursor 传入上次返回的 pageToken 获取下一页。", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "read", "effect_source": "command-verb", "examples": [ @@ -5163,7 +5163,7 @@ "cli_path": "wiki space list", "confirmation": "not_required", "description": "获取当前用户有权访问的空间列表。统一管理两种空间类型。\n\n通过 --type 参数控制返回范围:\n orgWikiSpace — 组织知识库列表(默认,支持分页)\n myWikiSpace — 当前用户的「我的文档」个人空间(固定 1 条)\n orgSpace — 钉盘企业空间(团队文件)列表\n mySpace — 钉盘「我的文件」个人空间", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "read", "effect_source": "command-verb", "examples": [ @@ -5796,6 +5796,793 @@ "需要 workspaceId / rootFolderId 作为后续 node/drive 操作前置时" ] }, + "wiki.list_workspace_feeds": { + "agent_metadata_source": "embedded-skill-metadata", + "agent_source_refs": [ + "CommandRegistry:canonical_path=wiki.list_workspace_feeds", + "Skill:skills/mono/references/products/wiki.md", + "cobra-help:dws wiki feed list", + "internal/cli/schema_hints/metadata/wiki.json", + "internal/cli/schema_hints/selection/wiki.json", + "internal/cli/schema_mcp_metadata.json#tools.wiki.list_workspace_feeds", + "live-mcp-tools-list:wiki.list_workspace_feeds", + "skills/mono/references/products/wiki.md" + ], + "agent_summary": "查询知识库的活动动态:谁在什么时间更新/上传/评论了哪些文档", + "agent_summary_source": "dws-agent-selection/wiki", + "availability": "available", + "avoid_when": [ + "要看知识库当前有哪些节点用 node list;库内按关键词找文档用 node search", + "要读某篇文档正文用 doc read;跨库全局找文件用 drive search" + ], + "canonical_path": "wiki.list_workspace_feeds", + "cli_name": "list", + "cli_path": "wiki feed list", + "confirmation": "not_required", + "description": "查询指定知识库的动态列表,返回动态类型、时间、内容摘要等信息。\n\n通过 --workspace 指定知识库,支持传入知识库 ID 或知识库 URL。\n支持分页,通过 --cursor 传入上次返回的 nextToken 获取下一页。\n\n权限要求:调用者需具备知识库的成员权限,非成员会被拒绝访问。", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", + "effect": "read", + "effect_source": "command-verb", + "examples": [ + "dws wiki feed list --workspace \u003cworkspaceId\u003e --format json", + "dws wiki feed list --workspace \u003cworkspaceId\u003e --limit 10 --format json" + ], + "field_provenance": { + "agent_summary": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。", + "selected": true, + "source": "internal/cli/schema_hints/selection/wiki.json", + "value": "查询知识库的活动动态:谁在什么时间更新/上传/评论了哪些文档" + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。", + "source": "internal/cli/schema_hints/selection/wiki.json", + "value": "查询知识库的活动动态:谁在什么时间更新/上传/评论了哪些文档" + }, + "availability": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "Live wiki MCP tools/list exposes list_workspace_feeds as a read-only knowledge base activity query. The reviewed CLI leaf forwards workspaceId/maxResults/nextToken/excludeFile to the native wiki server and adds no side effects, so it keeps the same read-only posture as the sibling wiki list commands.", + "selected": true, + "source": "internal/cli/schema_hints/metadata/wiki.json", + "value": "available" + }, + { + "precedence": "mcp_fallback", + "selected": false, + "source": "internal/cli/schema_mcp_metadata.json#tools.wiki.list_workspace_feeds.interface_ref", + "value": "available" + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Live wiki MCP tools/list exposes list_workspace_feeds as a read-only knowledge base activity query. The reviewed CLI leaf forwards workspaceId/maxResults/nextToken/excludeFile to the native wiki server and adds no side effects, so it keeps the same read-only posture as the sibling wiki list commands.", + "source": "internal/cli/schema_hints/metadata/wiki.json", + "value": "available" + }, + "avoid_when": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。", + "selected": true, + "source": "internal/cli/schema_hints/selection/wiki.json", + "value": [ + "要看知识库当前有哪些节点用 node list;库内按关键词找文档用 node search", + "要读某篇文档正文用 doc read;跨库全局找文件用 drive search" + ] + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。", + "source": "internal/cli/schema_hints/selection/wiki.json", + "value": [ + "要看知识库当前有哪些节点用 node list;库内按关键词找文档用 node search", + "要读某篇文档正文用 doc read;跨库全局找文件用 drive search" + ] + }, + "canonical_path": { + "candidates": [ + { + "precedence": "command_registry", + "selected": true, + "source": "reviewed_command_registry", + "source_ref": "wiki feed list", + "value": "wiki.list_workspace_feeds" + } + ], + "precedence": "command_registry", + "resolution": "registry_identity", + "source": "reviewed_command_registry", + "source_ref": "wiki feed list", + "value": "wiki.list_workspace_feeds" + }, + "confirmation": { + "candidates": [ + { + "precedence": "inference_or_default", + "selected": true, + "source": "risk-default", + "value": "not_required" + } + ], + "precedence": "inference_or_default", + "resolution": "highest_precedence", + "source": "risk-default", + "value": "not_required" + }, + "description": { + "candidates": [ + { + "precedence": "cobra_help", + "selected": true, + "source": "cobra_help", + "value": "查询指定知识库的动态列表,返回动态类型、时间、内容摘要等信息。\n\n通过 --workspace 指定知识库,支持传入知识库 ID 或知识库 URL。\n支持分页,通过 --cursor 传入上次返回的 nextToken 获取下一页。\n\n权限要求:调用者需具备知识库的成员权限,非成员会被拒绝访问。" + }, + { + "precedence": "mcp_metadata", + "selected": false, + "source": "mcp_metadata", + "value": "功能概述:\r\n查询指定钉钉文档知识库的活动动态,包括谁在什么时间对哪些文档进行了更新、上传、评论等操作。通过传入 workspaceId(知识库 ID 或知识库 URL)定位目标知识库,返回动态列表,每条包含动态类型(type)、发生时间(time)和内容摘要(content)。支持游标分页(nextToken),可选排除文件相关动态(excludeFile)。\r\n\r\n适用场景:\r\n– 需要了解知识库最近有哪些文档被更新或上传了新文件。\r\n– 需要追踪知识库内的协作活动,如谁评论了哪篇文档。\r\n– 定期巡检知识库变更情况,生成动态摘要报告。\r\n\r\n注意事项:\r\n– 权限要求:操作者需具备知识库的成员权限,非成员会被拒绝访问。\r\n– 通过 workspaceId 定位知识库,支持知识库 ID(纯字符串)或知识库 URL(如 https://alidocs.dingtalk.com/i/spaces/{workspaceId}/overview),系统自动提取。\r\n– 每页默认返回 20 条动态,通过 maxResults 调整,最大 50 条。首页不传 nextToken,翻页时传入上次返回的 nextToken 值。\r\n– excludeFile 设为 true 可过滤掉文件相关的动态,默认 false 即返回全部动态类型。" + } + ], + "precedence": "cobra_help", + "resolution": "highest_precedence", + "source": "cobra_help", + "value": "查询指定知识库的动态列表,返回动态类型、时间、内容摘要等信息。\n\n通过 --workspace 指定知识库,支持传入知识库 ID 或知识库 URL。\n支持分页,通过 --cursor 传入上次返回的 nextToken 获取下一页。\n\n权限要求:调用者需具备知识库的成员权限,非成员会被拒绝访问。" + }, + "effect": { + "candidates": [ + { + "precedence": "inference_or_default", + "selected": true, + "source": "command-verb", + "value": "read" + } + ], + "precedence": "inference_or_default", + "resolution": "highest_precedence", + "source": "command-verb", + "value": "read" + }, + "examples": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。", + "selected": true, + "source": "internal/cli/schema_hints/selection/wiki.json", + "value": [ + "dws wiki feed list --workspace \u003cworkspaceId\u003e --format json", + "dws wiki feed list --workspace \u003cworkspaceId\u003e --limit 10 --format json" + ] + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。", + "source": "internal/cli/schema_hints/selection/wiki.json", + "value": [ + "dws wiki feed list --workspace \u003cworkspaceId\u003e --format json", + "dws wiki feed list --workspace \u003cworkspaceId\u003e --limit 10 --format json" + ] + }, + "idempotency": { + "candidates": [ + { + "precedence": "inference_or_default", + "selected": true, + "source": "effect-default", + "value": "idempotent" + } + ], + "precedence": "inference_or_default", + "resolution": "highest_precedence", + "source": "effect-default", + "value": "idempotent" + }, + "interface_mode": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "Live wiki MCP tools/list exposes list_workspace_feeds as a read-only knowledge base activity query. The reviewed CLI leaf forwards workspaceId/maxResults/nextToken/excludeFile to the native wiki server and adds no side effects, so it keeps the same read-only posture as the sibling wiki list commands.", + "selected": true, + "source": "internal/cli/schema_hints/metadata/wiki.json", + "value": "mcp" + }, + { + "precedence": "mcp_fallback", + "selected": false, + "source": "internal/cli/schema_mcp_metadata.json#tools.wiki.list_workspace_feeds.interface_ref", + "value": "mcp" + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Live wiki MCP tools/list exposes list_workspace_feeds as a read-only knowledge base activity query. The reviewed CLI leaf forwards workspaceId/maxResults/nextToken/excludeFile to the native wiki server and adds no side effects, so it keeps the same read-only posture as the sibling wiki list commands.", + "source": "internal/cli/schema_hints/metadata/wiki.json", + "value": "mcp" + }, + "interface_ref": { + "candidates": [ + { + "precedence": "mcp_fallback", + "selected": true, + "source": "internal/cli/schema_mcp_metadata.json#tools.wiki.list_workspace_feeds.interface_ref", + "value": { + "product_id": "wiki", + "rpc_name": "list_workspace_feeds" + } + } + ], + "precedence": "mcp_fallback", + "resolution": "highest_precedence", + "source": "internal/cli/schema_mcp_metadata.json#tools.wiki.list_workspace_feeds.interface_ref", + "value": { + "product_id": "wiki", + "rpc_name": "list_workspace_feeds" + } + }, + "metadata_source": { + "candidates": [ + { + "precedence": "derived_resolution", + "selected": true, + "source": "metadata_source_resolution", + "value": "embedded-mcp-metadata" + } + ], + "precedence": "derived_resolution", + "resolution": "highest_precedence", + "source": "metadata_source_resolution", + "value": "embedded-mcp-metadata" + }, + "reviewed": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "Live wiki MCP tools/list exposes list_workspace_feeds as a read-only knowledge base activity query. The reviewed CLI leaf forwards workspaceId/maxResults/nextToken/excludeFile to the native wiki server and adds no side effects, so it keeps the same read-only posture as the sibling wiki list commands.", + "selected": true, + "source": "internal/cli/schema_hints/metadata/wiki.json", + "value": true + }, + { + "precedence": "reviewed_explicit", + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。", + "selected": false, + "source": "internal/cli/schema_hints/selection/wiki.json", + "value": true + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Live wiki MCP tools/list exposes list_workspace_feeds as a read-only knowledge base activity query. The reviewed CLI leaf forwards workspaceId/maxResults/nextToken/excludeFile to the native wiki server and adds no side effects, so it keeps the same read-only posture as the sibling wiki list commands.", + "source": "internal/cli/schema_hints/metadata/wiki.json", + "value": true + }, + "risk": { + "candidates": [ + { + "precedence": "inference_or_default", + "selected": true, + "source": "effect-default", + "value": "low" + } + ], + "precedence": "inference_or_default", + "resolution": "highest_precedence", + "source": "effect-default", + "value": "low" + }, + "title": { + "candidates": [ + { + "precedence": "cobra_help", + "selected": true, + "source": "cobra_help", + "value": "查询知识库动态列表" + }, + { + "precedence": "mcp_metadata", + "selected": false, + "source": "mcp_metadata", + "value": "list_workspace_feeds" + } + ], + "precedence": "cobra_help", + "resolution": "highest_precedence", + "source": "cobra_help", + "value": "查询知识库动态列表" + }, + "use_when": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。", + "selected": true, + "source": "internal/cli/schema_hints/selection/wiki.json", + "value": [ + "用户问某个知识库最近有什么更新、谁改了什么、有哪些评论等协作动态时", + "需要巡检知识库变更并按时间线汇总成动态摘要时" + ] + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。", + "source": "internal/cli/schema_hints/selection/wiki.json", + "value": [ + "用户问某个知识库最近有什么更新、谁改了什么、有哪些评论等协作动态时", + "需要巡检知识库变更并按时间线汇总成动态摘要时" + ] + } + }, + "group": "feed", + "has_parameters": true, + "idempotency": "idempotent", + "interface_mode": "mcp", + "interface_ref": { + "product_id": "wiki", + "rpc_name": "list_workspace_feeds" + }, + "is_alias": false, + "metadata_source": "embedded-mcp-metadata", + "name": "list_workspace_feeds", + "parameter_count": 4, + "parameters": { + "cursor": { + "description": "分页游标 (首页留空)", + "field_provenance": { + "description": { + "candidates": [ + { + "precedence": "cobra_contract", + "selected": true, + "source": "cobra_usage", + "value": "分页游标 (首页留空)" + }, + { + "precedence": "mcp_metadata", + "selected": false, + "source": "mcp_metadata", + "value": "分页游标,首次查询不传,后续翻页时传入上次返回的 nextToken。" + }, + { + "precedence": "default", + "selected": false, + "source": "default", + "value": "" + } + ], + "precedence": "cobra_contract", + "resolution": "highest_precedence", + "source": "cobra_usage", + "value": "分页游标 (首页留空)" + }, + "property": { + "candidates": [ + { + "precedence": "versioned_binding", + "selected": true, + "source": "versioned_parameter_binding", + "value": "nextToken" + }, + { + "precedence": "inference", + "selected": false, + "source": "flag_name_inference", + "value": "cursor" + } + ], + "precedence": "versioned_binding", + "resolution": "highest_precedence", + "source": "versioned_parameter_binding", + "value": "nextToken" + }, + "required": { + "candidates": [ + { + "precedence": "default", + "selected": true, + "source": "default", + "value": false + } + ], + "precedence": "default", + "resolution": "fallback", + "source": "default", + "value": false + }, + "required_when": { + "candidates": [ + { + "precedence": "default", + "selected": true, + "source": "default", + "value": "" + } + ], + "precedence": "default", + "resolution": "highest_precedence", + "source": "default", + "value": "" + }, + "type": { + "candidates": [ + { + "precedence": "cobra_contract", + "selected": true, + "source": "cobra_flag_type", + "value": "string" + } + ], + "precedence": "cobra_contract", + "resolution": "highest_precedence", + "source": "cobra_flag_type", + "value": "string" + } + }, + "interface_description": "分页游标,首次查询不传,后续翻页时传入上次返回的 nextToken。", + "property": "nextToken", + "required": false, + "type": "string" + }, + "exclude-file": { + "description": "是否排除文件相关的动态 (默认 false)", + "field_provenance": { + "description": { + "candidates": [ + { + "precedence": "cobra_contract", + "selected": true, + "source": "cobra_usage", + "value": "是否排除文件相关的动态 (默认 false)" + }, + { + "precedence": "mcp_metadata", + "selected": false, + "source": "mcp_metadata", + "value": "是否排除文件相关的动态,选填,默认 false。" + }, + { + "precedence": "default", + "selected": false, + "source": "default", + "value": "" + } + ], + "precedence": "cobra_contract", + "resolution": "highest_precedence", + "source": "cobra_usage", + "value": "是否排除文件相关的动态 (默认 false)" + }, + "property": { + "candidates": [ + { + "precedence": "versioned_binding", + "selected": true, + "source": "versioned_parameter_binding", + "value": "excludeFile" + }, + { + "precedence": "inference", + "selected": false, + "source": "flag_name_inference", + "value": "excludeFile" + } + ], + "precedence": "versioned_binding", + "resolution": "highest_precedence", + "source": "versioned_parameter_binding", + "value": "excludeFile" + }, + "required": { + "candidates": [ + { + "precedence": "cobra_contract", + "selected": true, + "source": "cobra_nonzero_default", + "value": false + }, + { + "precedence": "default", + "selected": false, + "source": "default", + "value": false + } + ], + "precedence": "cobra_contract", + "resolution": "highest_precedence", + "source": "cobra_nonzero_default", + "value": false + }, + "required_when": { + "candidates": [ + { + "precedence": "default", + "selected": true, + "source": "default", + "value": "" + } + ], + "precedence": "default", + "resolution": "highest_precedence", + "source": "default", + "value": "" + }, + "type": { + "candidates": [ + { + "precedence": "cobra_contract", + "selected": true, + "source": "cobra_flag_type", + "value": "boolean" + } + ], + "precedence": "cobra_contract", + "resolution": "highest_precedence", + "source": "cobra_flag_type", + "value": "boolean" + } + }, + "interface_description": "是否排除文件相关的动态,选填,默认 false。", + "property": "excludeFile", + "required": false, + "type": "boolean" + }, + "limit": { + "description": "每页数量 (默认 20,最大 50)", + "field_provenance": { + "description": { + "candidates": [ + { + "precedence": "cobra_contract", + "selected": true, + "source": "cobra_usage", + "value": "每页数量 (默认 20,最大 50)" + }, + { + "precedence": "mcp_metadata", + "selected": false, + "source": "mcp_metadata", + "value": "期望返回的最大动态条数,默认 20,最大 50。" + }, + { + "precedence": "default", + "selected": false, + "source": "default", + "value": "" + } + ], + "precedence": "cobra_contract", + "resolution": "highest_precedence", + "source": "cobra_usage", + "value": "每页数量 (默认 20,最大 50)" + }, + "interface_type": { + "candidates": [ + { + "precedence": "mcp_metadata", + "selected": true, + "source": "mcp_metadata", + "value": "number" + }, + { + "precedence": "fallback", + "selected": false, + "source": "cobra_flag_type", + "value": "integer" + } + ], + "precedence": "mcp_metadata", + "resolution": "highest_precedence", + "source": "mcp_metadata", + "value": "number" + }, + "property": { + "candidates": [ + { + "precedence": "versioned_binding", + "selected": true, + "source": "versioned_parameter_binding", + "value": "maxResults" + }, + { + "precedence": "inference", + "selected": false, + "source": "flag_name_inference", + "value": "limit" + } + ], + "precedence": "versioned_binding", + "resolution": "highest_precedence", + "source": "versioned_parameter_binding", + "value": "maxResults" + }, + "required": { + "candidates": [ + { + "precedence": "cobra_contract", + "selected": true, + "source": "cobra_nonzero_default", + "value": false + }, + { + "precedence": "default", + "selected": false, + "source": "default", + "value": false + } + ], + "precedence": "cobra_contract", + "resolution": "highest_precedence", + "source": "cobra_nonzero_default", + "value": false + }, + "required_when": { + "candidates": [ + { + "precedence": "default", + "selected": true, + "source": "default", + "value": "" + } + ], + "precedence": "default", + "resolution": "highest_precedence", + "source": "default", + "value": "" + }, + "type": { + "candidates": [ + { + "precedence": "cobra_contract", + "selected": true, + "source": "cobra_flag_type", + "value": "integer" + } + ], + "precedence": "cobra_contract", + "resolution": "highest_precedence", + "source": "cobra_flag_type", + "value": "integer" + } + }, + "interface_description": "期望返回的最大动态条数,默认 20,最大 50。", + "interface_type": "number", + "property": "maxResults", + "required": false, + "type": "integer" + }, + "workspace": { + "description": "知识库 ID 或 URL (必填)", + "field_provenance": { + "description": { + "candidates": [ + { + "precedence": "cobra_contract", + "selected": true, + "source": "cobra_usage", + "value": "知识库 ID 或 URL (必填)" + }, + { + "precedence": "mcp_metadata", + "selected": false, + "source": "mcp_metadata", + "value": "目标知识库的标识,支持两种格式:1) 知识库 ID(纯字符串);2) 知识库 URL,如 https://alidocs.dingtalk.com/i/spaces/{workspaceId}/overview,系统自动提取其中的 workspaceId。" + }, + { + "precedence": "default", + "selected": false, + "source": "default", + "value": "" + } + ], + "precedence": "cobra_contract", + "resolution": "highest_precedence", + "source": "cobra_usage", + "value": "知识库 ID 或 URL (必填)" + }, + "property": { + "candidates": [ + { + "precedence": "versioned_binding", + "selected": true, + "source": "versioned_parameter_binding", + "value": "workspaceId" + }, + { + "precedence": "inference", + "selected": false, + "source": "flag_name_inference", + "value": "workspace" + } + ], + "precedence": "versioned_binding", + "resolution": "highest_precedence", + "source": "versioned_parameter_binding", + "value": "workspaceId" + }, + "required": { + "candidates": [ + { + "precedence": "mcp_metadata", + "selected": true, + "source": "mcp_metadata", + "value": true + }, + { + "precedence": "inference", + "selected": false, + "source": "usage_required_inference", + "value": true + }, + { + "precedence": "default", + "selected": false, + "source": "default", + "value": false + } + ], + "precedence": "mcp_metadata", + "resolution": "highest_precedence", + "source": "mcp_metadata", + "value": true + }, + "required_when": { + "candidates": [ + { + "precedence": "default", + "selected": true, + "source": "default", + "value": "" + } + ], + "precedence": "default", + "resolution": "highest_precedence", + "source": "default", + "value": "" + }, + "type": { + "candidates": [ + { + "precedence": "cobra_contract", + "selected": true, + "source": "cobra_flag_type", + "value": "string" + } + ], + "precedence": "cobra_contract", + "resolution": "highest_precedence", + "source": "cobra_flag_type", + "value": "string" + } + }, + "interface_description": "目标知识库的标识,支持两种格式:1) 知识库 ID(纯字符串);2) 知识库 URL,如 https://alidocs.dingtalk.com/i/spaces/{workspaceId}/overview,系统自动提取其中的 workspaceId。", + "property": "workspaceId", + "required": true, + "type": "string" + } + }, + "path": "wiki.list_workspace_feeds", + "primary_cli_path": "wiki feed list", + "product_id": "wiki", + "reviewed": true, + "risk": "low", + "source": "reviewed_command_registry", + "title": "查询知识库动态列表", + "use_when": [ + "用户问某个知识库最近有什么更新、谁改了什么、有哪些评论等协作动态时", + "需要巡检知识库变更并按时间线汇总成动态摘要时" + ] + }, "wiki.node_copy": { "agent_metadata_source": "embedded-skill-metadata", "agent_source_refs": [ @@ -5822,7 +6609,7 @@ "cli_path": "wiki node copy", "confirmation": "not_required", "description": "将知识库中的节点复制到指定位置。\n\n通过 --node 指定源节点,通过 --folder 指定目标文件夹。\n不传 --folder 时复制到 --workspace 指定知识库的根目录。", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "write", "effect_source": "command-verb", "examples": [ @@ -6488,7 +7275,7 @@ "cli_path": "wiki node move", "confirmation": "not_required", "description": "将知识库中的节点移动到指定位置。\n\n通过 --node 指定源节点,通过 --folder 指定目标文件夹。\n不传 --folder 时移动到 --workspace 指定知识库的根目录。\n\n注意:跨知识库移动需要同时具备源和目标的相应权限。", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "write", "effect_source": "command-verb", "examples": [ @@ -7153,7 +7940,7 @@ "cli_path": "wiki node search", "confirmation": "not_required", "description": "在指定知识库内搜索文档/文件夹/表格等节点。\n\n通过 --workspace 限定搜索范围到某个知识库,通过 --query 指定搜索关键词。\n支持按文件扩展名过滤(--extensions),如 adoc、asheet、pdf 等。", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "read", "effect_source": "command-verb", "examples": [ @@ -8051,7 +8838,7 @@ "cli_path": "wiki member remove", "confirmation": "not_required", "description": "从指定知识库中移除一个或多个成员(仅支持 USER 类型)。\n\n移除后相关用户将无法访问该知识库下的内容(除非通过节点级权限另行授权)。\n\n注意:\n- OWNER 角色不可通过此接口移除。\n- 操作者需具备知识库的 OWNER 或 MANAGER 权限。\n- 单次请求最多 30 个成员,超出请分批调用。", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "write", "effect_source": "agent-hint", "examples": [ @@ -8671,7 +9458,7 @@ ] }, "description": "根据关键词搜索当前用户有权限访问的知识库列表,匹配知识库名称和描述。", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "read", "effect_source": "command-verb", "examples": [ @@ -9370,7 +10157,7 @@ "cli_path": "wiki +space-search", "confirmation": "not_required", "description": "当你只记得知识库名称的部分关键词、想快速按名称定位某个知识库时使用;输入关键词返回匹配的知识库列表,比逐页 +space-list 更快找到目标 workspaceId。", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "read", "effect_source": "agent-hint", "examples": [ @@ -9880,7 +10667,7 @@ "cli_path": "wiki member update", "confirmation": "not_required", "description": "更新指定知识库已有成员的角色。\n\n支持的角色 (--role)(必须大写):\n MANAGER 管理员\n EDITOR 编辑者\n DOWNLOADER 查看下载者\n READER 仅可查看者\n\n注意:\n- OWNER 角色不可通过此接口变更。\n- 同一成员在同一知识库只能拥有一个角色,变更后旧角色自动替换。\n- 操作者需具备知识库的 OWNER 或 MANAGER 权限。\n\n仅可更新已存在成员关系的成员,新增成员请使用 dws wiki member add。", - "display": "知识库 / 空间管理 / 节点管理 / 成员管理", + "display": "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", "effect": "write", "effect_source": "command-verb", "examples": [ diff --git a/internal/cli/schema_command_registry/products/wiki.json b/internal/cli/schema_command_registry/products/wiki.json index f1e22e36..0adb2cc9 100644 --- a/internal/cli/schema_command_registry/products/wiki.json +++ b/internal/cli/schema_command_registry/products/wiki.json @@ -1,6 +1,10 @@ { "id": "wiki", "tools": [ + { + "canonical_path": "wiki.list_workspace_feeds", + "cli_path": "wiki feed list" + }, { "canonical_path": "wiki.add_member", "cli_path": "wiki member add" diff --git a/internal/cli/schema_hints/metadata/wiki.json b/internal/cli/schema_hints/metadata/wiki.json index 2409c0ae..4d86e6a4 100644 --- a/internal/cli/schema_hints/metadata/wiki.json +++ b/internal/cli/schema_hints/metadata/wiki.json @@ -74,6 +74,12 @@ "interface_reason": "The CLI command routes by --type between wiki/list_wikiSpaces and drive/list_spaces, so the reviewed executable wrapper has no single direct MCP interface.", "reviewed": true }, + "wiki.list_workspace_feeds": { + "interface_mode": "mcp", + "availability": "available", + "reviewed": true, + "review_reason": "Live wiki MCP tools/list exposes list_workspace_feeds as a read-only knowledge base activity query. The reviewed CLI leaf forwards workspaceId/maxResults/nextToken/excludeFile to the native wiki server and adds no side effects, so it keeps the same read-only posture as the sibling wiki list commands." + }, "wiki.node_copy": { "interface_ref": { "product_id": "doc", diff --git a/internal/cli/schema_hints/runtime-surface-completeness.json b/internal/cli/schema_hints/runtime-surface-completeness.json index 2bc9e838..d9e7511e 100644 --- a/internal/cli/schema_hints/runtime-surface-completeness.json +++ b/internal/cli/schema_hints/runtime-surface-completeness.json @@ -7,7 +7,7 @@ "channel": "open-source" }, "coverage": { - "source_tools": 846, + "source_tools": 847, "matched_tools": 71 }, "tools": { diff --git a/internal/cli/schema_hints/selection/wiki.json b/internal/cli/schema_hints/selection/wiki.json index 0758f0b2..2f1b6fa6 100644 --- a/internal/cli/schema_hints/selection/wiki.json +++ b/internal/cli/schema_hints/selection/wiki.json @@ -220,6 +220,29 @@ "live-mcp:dws schema wiki.list_wikiSpaces" ] }, + "wiki.list_workspace_feeds": { + "agent_summary": "查询知识库的活动动态:谁在什么时间更新/上传/评论了哪些文档", + "use_when": [ + "用户问某个知识库最近有什么更新、谁改了什么、有哪些评论等协作动态时", + "需要巡检知识库变更并按时间线汇总成动态摘要时" + ], + "avoid_when": [ + "要看知识库当前有哪些节点用 node list;库内按关键词找文档用 node search", + "要读某篇文档正文用 doc read;跨库全局找文件用 drive search" + ], + "examples": [ + "dws wiki feed list --workspace --format json", + "dws wiki feed list --workspace --limit 10 --format json" + ], + "reviewed": true, + "review_reason": "人工审阅:依据 wiki MCP 实时 tools/list 的 list_workspace_feeds description/inputSchema 与 Cobra Long 手写选型文案,并与 node list / node search / doc read / drive search 划清路由边界;不改变命令身份、参数契约或接口绑定。", + "source_refs": [ + "CommandRegistry:canonical_path=wiki.list_workspace_feeds", + "cobra-help:dws wiki feed list", + "Skill:skills/mono/references/products/wiki.md", + "live-mcp-tools-list:wiki.list_workspace_feeds" + ] + }, "wiki.node_copy": { "agent_summary": "将知识库中的节点复制到指定位置", "use_when": [ diff --git a/internal/cli/schema_mcp_metadata.json b/internal/cli/schema_mcp_metadata.json index a11eea94..b2df663b 100644 --- a/internal/cli/schema_mcp_metadata.json +++ b/internal/cli/schema_mcp_metadata.json @@ -10666,6 +10666,33 @@ "rpc_name": "list_wikiSpaces" } }, + "wiki.list_workspace_feeds": { + "title": "list_workspace_feeds", + "description": "功能概述:\r\n查询指定钉钉文档知识库的活动动态,包括谁在什么时间对哪些文档进行了更新、上传、评论等操作。通过传入 workspaceId(知识库 ID 或知识库 URL)定位目标知识库,返回动态列表,每条包含动态类型(type)、发生时间(time)和内容摘要(content)。支持游标分页(nextToken),可选排除文件相关动态(excludeFile)。\r\n\r\n适用场景:\r\n– 需要了解知识库最近有哪些文档被更新或上传了新文件。\r\n– 需要追踪知识库内的协作活动,如谁评论了哪篇文档。\r\n– 定期巡检知识库变更情况,生成动态摘要报告。\r\n\r\n注意事项:\r\n– 权限要求:操作者需具备知识库的成员权限,非成员会被拒绝访问。\r\n– 通过 workspaceId 定位知识库,支持知识库 ID(纯字符串)或知识库 URL(如 https://alidocs.dingtalk.com/i/spaces/{workspaceId}/overview),系统自动提取。\r\n– 每页默认返回 20 条动态,通过 maxResults 调整,最大 50 条。首页不传 nextToken,翻页时传入上次返回的 nextToken 值。\r\n– excludeFile 设为 true 可过滤掉文件相关的动态,默认 false 即返回全部动态类型。", + "parameters": { + "excludeFile": { + "type": "boolean", + "description": "是否排除文件相关的动态,选填,默认 false。" + }, + "maxResults": { + "type": "number", + "description": "期望返回的最大动态条数,默认 20,最大 50。" + }, + "nextToken": { + "type": "string", + "description": "分页游标,首次查询不传,后续翻页时传入上次返回的 nextToken。" + }, + "workspaceId": { + "type": "string", + "description": "目标知识库的标识,支持两种格式:1) 知识库 ID(纯字符串);2) 知识库 URL,如 https://alidocs.dingtalk.com/i/spaces/{workspaceId}/overview,系统自动提取其中的 workspaceId。", + "required": true + } + }, + "interface_ref": { + "product_id": "wiki", + "rpc_name": "list_workspace_feeds" + } + }, "wiki.node_copy": { "title": "将指定节点复制到目标文件夹", "description": "将指定节点复制到目标文件夹。\r\n\r\n支持的节点类型:知识库节点(文档、文件夹)、钉盘文件/文件夹。\r\nnodeId 支持文档 URL 或 dentryUuid(32 位字母数字字符串)。\r\ntargetFolderId 为目标文件夹的 dentryUuid;workspaceId 为目标知识库标识,不传 targetFolderId 时复制到该知识库根目录,如果不传 targetFolderId 和 workspaceId,默认到当前用户所在组织的「我的文档」下\r\n\r\n权限要求:\r\n- 对源节点有可查看下载权限\r\n- 对目标文件夹有写入权限\r\n\r\n注意:复制操作底层可能异步执行,异步时操作已提交但新节点 ID 无法立即返回,请稍后查看目标文件夹确认结果。", diff --git a/internal/cli/schema_parameter_bindings.json b/internal/cli/schema_parameter_bindings.json index 76cb75ee..c0995309 100644 --- a/internal/cli/schema_parameter_bindings.json +++ b/internal/cli/schema_parameter_bindings.json @@ -2,8 +2,8 @@ "version": 3, "baseline": { "manifest": "schema-parameter-bindings-v3", - "sha256": "sha256:ff0f76145dd27da5429434a348344c9cdf74c44eaf6f4ea5411d29d904a9066f", - "reason": "Reviewed v3 baseline after binding sheet.info --include to the include property while porting the wukong sheet info expansion flag.", + "sha256": "sha256:43147fbb7881204bc9cf9662543c7d49d7aefdfa82a2f9e684923547e0b8a0bd", + "reason": "Reviewed v3 baseline after binding wiki.list_workspace_feeds --workspace/--limit/--cursor/--exclude-file to the workspaceId/maxResults/nextToken/excludeFile properties while porting the wukong knowledge base feed query command.", "reviewed": true }, "removals": { @@ -1324,6 +1324,12 @@ "limit": "pageSize", "workspace": "workspaceId" }, + "wiki.list_workspace_feeds": { + "cursor": "nextToken", + "exclude-file": "excludeFile", + "limit": "maxResults", + "workspace": "workspaceId" + }, "wiki.node_copy": { "folder": "targetFolderId", "node": "nodeId", diff --git a/internal/helpers/wiki.go b/internal/helpers/wiki.go index 89b15833..e342c2da 100644 --- a/internal/helpers/wiki.go +++ b/internal/helpers/wiki.go @@ -143,8 +143,8 @@ func proxySubCmd(use, targetProduct, targetPath string, flagRenames map[string]s func newWikiCommand() *cobra.Command { root := &cobra.Command{ Use: "wiki", - Short: "知识库 / 空间管理 / 节点管理 / 成员管理", - Long: `管理钉钉文档知识库:空间管理(创建/查看/列出/搜索/删除)、节点管理(列出/创建/复制/移动/删除)、成员管理(添加/更新/列出/移除)。`, + Short: "知识库 / 空间管理 / 节点管理 / 成员管理 / 动态查询", + Long: `管理钉钉文档知识库:空间管理(创建/查看/列出/搜索/删除)、节点管理(列出/创建/复制/移动/删除)、成员管理(添加/更新/列出/移除)、动态查询(知识库活动动态)。`, RunE: groupRunE, } @@ -779,6 +779,60 @@ ORG 类型授权不会出现在查询结果中。`, root.AddCommand(nodeCmd) + // ── feed (知识库动态查询) ───────────────────────────────── + feedCmd := &cobra.Command{ + Use: "feed", + Short: "知识库动态查询", + Long: `查询知识库的动态:谁在什么时间更新/上传/评论了哪些文档。`, + RunE: groupRunE, + } + + feedListCmd := &cobra.Command{ + Use: "list", + Aliases: []string{"ls"}, + Short: "查询知识库动态列表", + Long: `查询指定知识库的动态列表,返回动态类型、时间、内容摘要等信息。 + +通过 --workspace 指定知识库,支持传入知识库 ID 或知识库 URL。 +支持分页,通过 --cursor 传入上次返回的 nextToken 获取下一页。 + +权限要求:调用者需具备知识库的成员权限,非成员会被拒绝访问。`, + Example: ` dws wiki feed list --workspace + dws wiki feed list --workspace --limit 10 + dws wiki feed list --workspace --cursor `, + RunE: func(cmd *cobra.Command, args []string) error { + workspaceID, err := mustFlagOrFallback(cmd, "workspace", "workspace-id") + if err != nil { + return err + } + toolArgs := map[string]any{ + "workspaceId": workspaceID, + } + if v, _ := cmd.Flags().GetInt("limit"); v > 0 { + toolArgs["maxResults"] = v + } + if v := flagOrFallback(cmd, "cursor", "page-token"); v != "" { + toolArgs["nextToken"] = v + } + if cmd.Flags().Changed("exclude-file") { + v, _ := cmd.Flags().GetBool("exclude-file") + toolArgs["excludeFile"] = v + } + return callMCPTool("list_workspace_feeds", toolArgs) + }, + } + feedListCmd.Flags().String("workspace", "", "知识库 ID 或 URL (必填)") + feedListCmd.Flags().Int("limit", 0, "每页数量 (默认 20,最大 50)") + feedListCmd.Flags().String("cursor", "", "分页游标 (首页留空)") + feedListCmd.Flags().Bool("exclude-file", false, "是否排除文件相关的动态 (默认 false)") + feedListCmd.Flags().String("workspace-id", "", "") + _ = feedListCmd.Flags().MarkHidden("workspace-id") + RegisterCrossProductAliases(feedListCmd) + + feedCmd.AddCommand(feedListCmd) + + root.AddCommand(feedCmd) + // ── [PROXY] wiki create/get/list/search → wiki space create/get/list/search ── // Agent 常省略 "space" 直接输入 dws wiki list,透明转发到 wiki space 对应命令 root.AddCommand( diff --git a/internal/helpers/wiki_coverage_more_test.go b/internal/helpers/wiki_coverage_more_test.go index 62cd48a8..216141d5 100644 --- a/internal/helpers/wiki_coverage_more_test.go +++ b/internal/helpers/wiki_coverage_more_test.go @@ -132,6 +132,9 @@ func TestCrossPlatformCoverageWikiRoutingAndValidationEdges(t *testing.T) { {"space", "list", "--type", "orgSpace", "--limit", "3", "--cursor", "next"}, {"space", "list", "--type", "mySpace", "--limit", "not-a-number"}, {"space", "search", "--type", "myWikiSpace"}, + {"feed", "list", "--workspace", "space"}, + {"feed", "list", "--workspace", "space", "--limit", "3", "--cursor", "next", "--exclude-file"}, + {"feed", "list", "--workspace-id", "space", "--page-token", "next"}, } { if err := executeWikiEdge(t, args...); err != nil { t.Fatalf("Execute(%v): %v", args, err) @@ -142,6 +145,7 @@ func TestCrossPlatformCoverageWikiRoutingAndValidationEdges(t *testing.T) { {"node", "create", "--workspace", "space", "--name", "name", "--folder", "123"}, {"node", "copy", "--workspace", "space", "--node", "node", "--folder", "123"}, {"node", "move", "--workspace", "space", "--node", "node", "--folder", "123"}, + {"feed", "list"}, } { if err := executeWikiEdge(t, args...); err == nil { t.Fatalf("Execute(%v) returned nil", args) From d3692e7b6e7cc93ef1d84dad256381d0039f405c Mon Sep 17 00:00:00 2001 From: chichuan Date: Tue, 4 Aug 2026 11:42:27 +0800 Subject: [PATCH 2/3] docs(wiki): document knowledge base feed query Mirror the dws-wukong Skill updates for `dws wiki feed list` across both Skill layouts: command reference, intent routing, the feed workflow, and the nextToken context-passing row. Also refresh the wiki capability summaries so the feed query is discoverable from the product tables. --- skills/mono/SKILL.md | 2 +- skills/mono/references/products/wiki.md | 41 +++++++++++++++++++ skills/multi/dingtalk-wiki/SKILL.md | 3 +- skills/multi/dingtalk-wiki/references/wiki.md | 41 +++++++++++++++++++ 4 files changed, 85 insertions(+), 2 deletions(-) diff --git a/skills/mono/SKILL.md b/skills/mono/SKILL.md index 6d3dce55..2957a4a4 100644 --- a/skills/mono/SKILL.md +++ b/skills/mono/SKILL.md @@ -93,7 +93,7 @@ cli_version: ">=1.0.15" | `mail` | 邮箱:邮箱地址查询/邮件搜索(KQL)/邮件详情/发送邮件 | [mail.md](./references/products/mail.md) | | `sheet` | 在线电子表格(axls):工作表 CRUD/区域读写/CSV 批量写入/行列增删/合并/查找替换/筛选视图/全局筛选/排序/下拉列表/条件格式/浮动图片/浮动图表/模板/导出 xlsx(单命令一站式) | [sheet.md](./references/products/sheet.md) | | `todo` | 待办:创建(含优先级/截止时间/循环)/查询/修改/标记完成/删除 | [todo.md](./references/products/todo.md) | -| `wiki` | 知识库:空间创建/详情/列表/搜索 + 成员管理 | [wiki.md](./references/products/wiki.md) | +| `wiki` | 知识库:空间创建/详情/列表/搜索 + 成员管理 + 知识库动态查询 | [wiki.md](./references/products/wiki.md) | | `event` | 个人 IM 事件:监听消息接收、指定发送人、已读、撤回、表情回应,NDJSON 输出(实时驱动 Agent)| [event.md](./references/products/event.md) | ## 意图判断决策树 diff --git a/skills/mono/references/products/wiki.md b/skills/mono/references/products/wiki.md index 7de4b8f9..d485e2c8 100644 --- a/skills/mono/references/products/wiki.md +++ b/skills/mono/references/products/wiki.md @@ -181,6 +181,30 @@ Flags: > ⚠️ **返回字段限制**:`member list` 每条只返回 `name` / `role` / `type` 三个字段,**不含 userId**(服务端不返回)。因此**无法**从 `member list` 拿到 userId 再去串联 `member update` / `member remove`。要对某人改角色 / 移除,需另行拿到其 userId(例如用 `dws contact user search --query "<姓名>"` 按姓名反查)。 +### 查询知识库动态 +``` +Usage: + dws wiki feed list [flags] +Aliases: + list, ls +Example: + dws wiki feed list --workspace --format json + dws wiki feed list --workspace --limit 10 --format json + dws wiki feed list --workspace --exclude-file --format json + dws wiki feed list --workspace --limit 10 --cursor --format json +Flags: + --workspace string 知识库 ID 或 URL (必填) + --limit int 每页数量 (默认 20,最大 50) + --cursor string 分页游标 (首页留空) + --exclude-file 是否排除文件相关的动态 (默认 false) +``` + +查询指定知识库的动态,返回谁在什么时间进行了更新、上传、评论等操作。 +支持传入知识库 ID 或知识库 URL,系统自动识别。 +支持分页,通过 `--cursor` 传入上次返回的 nextToken 获取下一页;出参 `hasMore` 指示是否还有下一页。 + +> **权限要求**:调用者需具备知识库的成员权限,非成员会被拒绝访问。 + ### 列出知识库节点 ``` Usage: @@ -296,6 +320,8 @@ Flags: - 用户说"修改某人在知识库的权限/调整成员角色" → `member update` - 用户说"移除知识库成员/把某人从知识库移除/删除知识库成员" → `member remove`(需 `--workspace` + `--users`) - 用户说"知识库有哪些成员/查看知识库成员" → `member list` +- 用户说"知识库动态/最近有什么更新/谁改了什么/知识库活动" → `feed list`(需 `--workspace`) +- 用户说"知识库最近的评论/更新记录/操作日志" → `feed list`(需 `--workspace`) - 用户说"删除知识库/移除知识库/把知识库删了" → `space delete`(需 `--workspace`) > **跨产品路由说明**:知识库节点的**内容操作**(读取/编辑/块级操作)仍由 `dws doc` 承担: @@ -382,6 +408,20 @@ dws wiki node move --workspace --node --folder --node +# ── 工作流: 查询知识库动态 ── + +# 1. 获取知识库 ID +dws wiki space list --format json + +# 2. 查询知识库动态 +dws wiki feed list --workspace --format json + +# 3. 排除文件动态,只看文档操作 +dws wiki feed list --workspace --exclude-file --format json + +# 4. 翻页(cursor 取上一页返回的 nextToken) +dws wiki feed list --workspace --cursor --format json + # ── 工作流: 给知识库加成员 ── # 1. 先确认知识库 ID(避免授权到「我的文档」) @@ -424,6 +464,7 @@ dws wiki space delete --workspace --format json | `node list` | `nodeId` | node copy/move/delete 的 --node / `dws doc read` 的 --node | | `node search` | `nodeId` | node copy/move/delete 的 --node / `dws doc read` 的 --node | | `node create` | `nodeId` | node copy/move/delete 的 --node / `dws doc read` 的 --node | +| `feed list` | `nextToken` | feed list 的 --cursor(翻页,`hasMore` 为 true 时继续)| | `member list` | `name` / `role` / `type`(**不含 userId**)| 仅用于查看成员名单;**无法**从这里取 userId 去串联 member update/remove,需另行按姓名反查 userId(如 `dws contact user search --query "<姓名>"`)| ## 相关产品 diff --git a/skills/multi/dingtalk-wiki/SKILL.md b/skills/multi/dingtalk-wiki/SKILL.md index aa337fda..41c6f996 100644 --- a/skills/multi/dingtalk-wiki/SKILL.md +++ b/skills/multi/dingtalk-wiki/SKILL.md @@ -1,6 +1,6 @@ --- name: dingtalk-wiki -description: 钉钉知识库与空间管理。Use when 用户说 知识库/wiki/创建知识库/搜索知识库空间/我的文档/团队空间/空间成员/空间内节点创建/列出/搜索/复制/移动/删除。知识库节点复制移动走本 skill,普通钉盘文件复制移动走 dingtalk-drive;空间内单文档内容读写先用本 skill 定位再切到 dingtalk-doc。命令前缀:dws wiki。 +description: 钉钉知识库与空间管理。Use when 用户说 知识库/wiki/创建知识库/搜索知识库空间/我的文档/团队空间/空间成员/空间内节点创建/列出/搜索/复制/移动/删除/知识库动态。知识库节点复制移动走本 skill,普通钉盘文件复制移动走 dingtalk-drive;空间内单文档内容读写先用本 skill 定位再切到 dingtalk-doc。命令前缀:dws wiki。 metadata: cli_version: ">=0.2.14" category: product @@ -39,6 +39,7 @@ metadata: | "列出知识库里的文件/节点" | `dws wiki node list --workspace ` | | "在知识库里搜" | `dws wiki node search --workspace --query "<关键词>"` | | "在知识库里创建文档节点" | `dws wiki node create --workspace --type adoc --name "<名称>"` | +| "知识库动态 / 最近有什么更新 / 谁改了什么" | `dws wiki feed list --workspace ` | ## 标准 SOP(必遵流程) diff --git a/skills/multi/dingtalk-wiki/references/wiki.md b/skills/multi/dingtalk-wiki/references/wiki.md index 3da1556e..da7b3e01 100644 --- a/skills/multi/dingtalk-wiki/references/wiki.md +++ b/skills/multi/dingtalk-wiki/references/wiki.md @@ -171,6 +171,30 @@ Flags: > 接口不支持游标分页,使用 `--limit` 一次性拉取。 +### 查询知识库动态 +``` +Usage: + dws wiki feed list [flags] +Aliases: + list, ls +Example: + dws wiki feed list --workspace --format json + dws wiki feed list --workspace --limit 10 --format json + dws wiki feed list --workspace --exclude-file --format json + dws wiki feed list --workspace --limit 10 --cursor --format json +Flags: + --workspace string 知识库 ID 或 URL (必填) + --limit int 每页数量 (默认 20,最大 50) + --cursor string 分页游标 (首页留空) + --exclude-file 是否排除文件相关的动态 (默认 false) +``` + +查询指定知识库的动态,返回谁在什么时间进行了更新、上传、评论等操作。 +支持传入知识库 ID 或知识库 URL,系统自动识别。 +支持分页,通过 `--cursor` 传入上次返回的 nextToken 获取下一页;出参 `hasMore` 指示是否还有下一页。 + +> **权限要求**:调用者需具备知识库的成员权限,非成员会被拒绝访问。 + ### 列出知识库节点 ``` Usage: @@ -306,6 +330,8 @@ Flags: - 用户说"修改某人在知识库的权限/调整成员角色" → `member update` - 用户说"移除知识库成员/把某人从知识库移除/删除知识库成员" → `member remove`(需 `--workspace` + `--users`) - 用户说"知识库有哪些成员/查看知识库成员" → `member list` +- 用户说"知识库动态/最近有什么更新/谁改了什么/知识库活动" → `feed list`(需 `--workspace`) +- 用户说"知识库最近的评论/更新记录/操作日志" → `feed list`(需 `--workspace`) - 用户说"删除知识库/移除知识库/把知识库删了" → `space delete`(需 `--workspace`) > **跨产品路由说明**:知识库节点的**内容操作**(读取/编辑/块级操作)仍由 `dws doc` 承担: @@ -392,6 +418,20 @@ dws wiki node move --workspace --node --folder --node +# ── 工作流: 查询知识库动态 ── + +# 1. 获取知识库 ID +dws wiki space list --format json + +# 2. 查询知识库动态 +dws wiki feed list --workspace --format json + +# 3. 排除文件动态,只看文档操作 +dws wiki feed list --workspace --exclude-file --format json + +# 4. 翻页(cursor 取上一页返回的 nextToken) +dws wiki feed list --workspace --cursor --format json + # ── 工作流: 给知识库加成员 ── # 1. 先确认知识库 ID(避免授权到「我的文档」) @@ -431,6 +471,7 @@ dws wiki space delete --workspace --format json | `node list` | `nodeId` | node copy/move/delete 的 --node / `dws doc read` 的 --node | | `node search` | `nodeId` | node copy/move/delete 的 --node / `dws doc read` 的 --node | | `node create` | `nodeId` | node copy/move/delete 的 --node / `dws doc read` 的 --node | +| `feed list` | `nextToken` | feed list 的 --cursor(翻页,`hasMore` 为 true 时继续)| | `member list` | `userId` | member update 的 --users / member remove 的 --users | ## 相关产品 From 7cb0de1f291d3380291808e0badd53c8dec028ac Mon Sep 17 00:00:00 2001 From: chichuan Date: Tue, 4 Aug 2026 15:28:02 +0800 Subject: [PATCH 3/3] test(wiki): register feed command in the interface baseline Add wiki.feed and wiki.feed.list to the CLI interface baseline so the new command enters the backwards-compatibility contract and a later change cannot silently drop it. The wiki root entry gains feed in its command list; the leaf records the reviewed flags including the hidden cross-product aliases. Only the wiki nodes are merged. `make update-interface-baseline` would also fold in 90 unrelated nodes that main has accumulated for chat, aitable, doc, drive, and sheet; catching those up belongs in a separate maintenance change, not in this feature PR. --- test/fixtures/cli-interface-baseline.txt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/test/fixtures/cli-interface-baseline.txt b/test/fixtures/cli-interface-baseline.txt index e556790e..220cff06 100644 --- a/test/fixtures/cli-interface-baseline.txt +++ b/test/fixtures/cli-interface-baseline.txt @@ -5681,7 +5681,7 @@ [wiki] runnable: true hidden: false - commands: +space-search, member, node, space + commands: +space-search, feed, member, node, space flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [wiki.+space-search] @@ -5689,6 +5689,18 @@ hidden: false flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --limit:string|required=false|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --query:string|required=false|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited +[wiki.feed] + runnable: true + hidden: false + commands: list + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + +[wiki.feed.list] + runnable: true + hidden: false + aliases: ls + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --cursor:string|required=false|hidden=false|no-opt=""|scope=local, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --exclude-file:bool|required=false|hidden=false|no-opt="true"|scope=local, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --limit:int|required=false|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --next-token:string|required=false|hidden=true|no-opt=""|scope=local, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --page-size:string|required=false|hidden=true|no-opt=""|scope=local, --page-token:string|required=false|hidden=true|no-opt=""|scope=local, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --workspace:string|required=false|hidden=false|no-opt=""|scope=local, --workspace-id:string|required=false|hidden=true|no-opt=""|scope=local, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + [wiki.member] runnable: true hidden: false