diff --git a/docs/shortcut-backend-mcp-issues.md b/docs/shortcut-backend-mcp-issues.md new file mode 100644 index 00000000..c84ec4ba --- /dev/null +++ b/docs/shortcut-backend-mcp-issues.md @@ -0,0 +1,174 @@ +# Shortcut 真实测试:后端 / MCP 问题整理 + +这份报告只汇总 `failure_category = backend-or-mcp-error` 的 case,已尽量排除权限、缺真实资源、当前账号无数据等噪音。 + +## 总览 + +- Backend/MCP case 总数:33 +- 聚合问题数:8 +- 复现口径:真实 dws CLI;无 mock;无 dry-run;命令输入和 trace_id 均来自真实测试结果。 + +## 建议优先看 + +1. [P1] Chat/IM 会话 ID 字段在 MCP/后端映射中疑似丢失(15 case) +2. [P1] Chat card 发送 receiverUid 疑似未从 receiver 透传(1 case) +3. [P1] Chat 入群审批 applicantUid/inviterUid 疑似未透传(1 case) +4. [P1] AI 表格 MCP 错误 envelope 语义不一致:success=true 但 error 非空/status=error(5 case) +5. [P1] AI 表格 Workflow 查询在真实 Base 下返回系统级错误(2 case) +6. [P1] AI 表格 roleId 参数疑似未被 MCP 正确读取(3 case) +7. [P2] AI 表格记录主文档查询在真实 record 下返回 no record/SYSTEM_ERROR(2 case) +8. [P2] AI 表格无效 Base/Table/Field/Record 被包装成 SYSTEM_ERROR(4 case) + +## Chat/IM 会话 ID 字段在 MCP/后端映射中疑似丢失 + +- 优先级:P1 +- 建议 owner:IM MCP / IM 后端字段映射 +- 现象:CLI 已传 group/conversation-id/open-conversation-id(部分 case 使用真实 cid),后端仍报 openCid/openConversationId/cid required。 +- 期望:MCP schema/网关应接受并透传 openConversationId/openCid/cid 中的兼容字段;如果资源无效,应返回“无效会话”,而不是 required。 +- 涉及 case:15 + +| 套件 | shortcut | operation | trace_id | 证据 | +|---|---|---|---|---| +| `read` | `chat +chat-members-get` | `tools/call` | `2127d89817840997754345760e07bd` | [UNCLASSIFIED] openCid or cid is required (operation: im/list_group_member_by_ids) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +chat-members-get --id DWSREALREADNOSUCHID0000000000000 --users '冬翔' --yes --format json` | +| `read` | `chat +chat-messages` | `tools/call` | `2104a64c17840997767792656e085e` | [UNCLASSIFIED] openCid or cid is required hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +chat-messages --group cid3Jijzhe2aqs9ysOXjhi05g== --time '2026-07-15 10:00:00' --limit 10 --direction older --yes --format json` | +| `read` | `chat +messages-list` | `tools/call` | `2127d89817840997797873841e0757` | [UNCLASSIFIED] openCid or cid is required hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +messages-list --group cid3Jijzhe2aqs9ysOXjhi05g== --time '2026-07-15 10:00:00' --forward --limit 10 --yes --format json` | +| `write` | `chat +chat-mute-member` | `tools/call` | `2104a64c17840999166036583e08a3` | [UNCLASSIFIED] openConversationId or cid is required (operation: im/set_group_member_mute_list) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +chat-mute-member --group cidDWSREALTESTNOSUCHCONV --users __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --mute-time 1 --off --yes --format json` | +| `write` | `chat +chat-transfer-owner` | `tools/call` | `0b5deb3217840999222318863e087a` | [UNCLASSIFIED] openConversationId is required (operation: im/transfer_group_owner) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +chat-transfer-owner --group cidDWSREALTESTNOSUCHCONV --new-owner __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --yes --format json` | +| `write` | `chat +conversation-clear-messages` | `tools/call` | `2127d89817840999254816721e079b` | [UNCLASSIFIED] openConversationId or cid is required (operation: im/clear_conversation_messages) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +conversation-clear-messages --conversation-id cidDWSREALTESTNOSUCHCONV --yes --format json` | +| `write` | `chat +conversation-clear-red-point` | `tools/call` | `2104a64c17840999265511295e085f` | [UNCLASSIFIED] openConversationId or cid is required (operation: im/clear_conversation_red_point) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +conversation-clear-red-point --conversation-id cidDWSREALTESTNOSUCHCONV --yes --format json` | +| `write` | `chat +conversation-hide` | `tools/call` | `2127d89817840999276117140e079b` | [UNCLASSIFIED] openConversationId or cid is required (operation: im/hide_conversation) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +conversation-hide --conversation-id cidDWSREALTESTNOSUCHCONV --yes --format json` | +| `write` | `chat +conversation-mark-unread` | `tools/call` | `0bb7c36217840999298744910e0758` | [UNCLASSIFIED] openConversationId or cid is required (operation: im/mark_conversation_unread) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +conversation-mark-unread --conversation-id cidDWSREALTESTNOSUCHCONV --yes --format json` | +| `write` | `chat +conversation-mute` | `tools/call` | `2104a64c17840999309241865e085f` | [UNCLASSIFIED] openConversationId is required (operation: im/update_notification_off) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +conversation-mute --conversation-id cidDWSREALTESTNOSUCHCONV --off --yes --format json` | +| `write` | `chat +conversation-mute-at-all` | `tools/call` | `2127d89817840999320028068e07dd` | [UNCLASSIFIED] openConversationId is required (operation: im/update_at_all_notification_off) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +conversation-mute-at-all --conversation-id cidDWSREALTESTNOSUCHCONV --off --yes --format json` | +| `write` | `chat +conversation-mute-red-envelope` | `tools/call` | `0bb7c36217840999330228283e07fe` | [UNCLASSIFIED] openConversationId is required (operation: im/update_red_env_notification_off) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +conversation-mute-red-envelope --conversation-id cidDWSREALTESTNOSUCHCONV --off --yes --format json` | +| `write` | `chat +conversation-set-top` | `tools/call` | `2127d89817840999341302961e07fe` | [UNCLASSIFIED] openConversationId or cid is required (operation: im/set_top_conversation) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +conversation-set-top --conversation-id cidDWSREALTESTNOSUCHCONV --off --yes --format json` | +| `write` | `chat +messages-set-pin` | `tools/call` | `0bb7c36217840999521117991e0758` | [UNCLASSIFIED] openConversationId or cid is required (operation: im/set_pin_message) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +messages-set-pin --open-conversation-id cidDWSREALTESTNOSUCHCONV --msg-id DWSREALTESTNOSUCHID0000000000000 --yes --format json` | +| `write` | `chat +messages-unset-pin` | `tools/call` | `2104a64c17840999544428103e08ee` | [UNCLASSIFIED] openConversationId or cid is required (operation: im/unset_pin_message) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +messages-unset-pin --open-conversation-id cidDWSREALTESTNOSUCHCONV --msg-id DWSREALTESTNOSUCHID0000000000000 --yes --format json` | + +## Chat card 发送 receiverUid 疑似未从 receiver 透传 + +- 优先级:P1 +- 建议 owner:IM MCP / card 发送参数映射 +- 现象:CLI 传入 receiver=103262,后端仍报 receiverUid 和 openConversationId 不能同时为空。 +- 期望:receiver 应映射为 receiverUid,或 schema 明确要求 receiverUid;真实入参不应在 MCP 层丢失。 +- 涉及 case:1 + +| 套件 | shortcut | operation | trace_id | 证据 | +|---|---|---|---|---| +| `write` | `chat +messages-send-card` | `tools/call` | `2104a64c17840999509255753e081a` | [UNCLASSIFIED] receiverUid和openConversationId不能同时为空 (operation: im/create_and_send_card) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +messages-send-card --receiver 103262 --yes --format json` | + +## Chat 入群审批 applicantUid/inviterUid 疑似未透传 + +- 优先级:P1 +- 建议 owner:IM MCP / 入群审批参数映射 +- 现象:CLI 传入 applicant=103262、inviter=519019,后端仍报 applicantUid required。 +- 期望:applicant/inviter 应映射为 applicantUid/inviterUid;如果 recordId/group 无效,应返回对应资源错误而不是 applicantUid 缺失。 +- 涉及 case:1 + +| 套件 | shortcut | operation | trace_id | 证据 | +|---|---|---|---|---| +| `write` | `chat +chat-audit-join` | `tools/call` | `0bb7c36217840999154832733e0758` | [UNCLASSIFIED] applicantUid is required (operation: im/audit_join_group) hint: Use --verbose for detailed error logs | +| | input | | | `/private/tmp/dws-real-test chat +chat-audit-join --group cidDWSREALTESTNOSUCHCONV --record-id 999999999999 --applicant 103262 --inviter 519019 --status AuditApprove --description 'DWS shortcut 真实测试描述,可删除' --yes --format json` | + +## AI 表格 MCP 错误 envelope 语义不一致:success=true 但 error 非空/status=error + +- 优先级:P1 +- 建议 owner:AI 表格 MCP wrapper +- 现象:多条 AI 表格命令返回 MCP_TOOL_ERROR,内部 JSON 同时出现 success=true、status=error、error 非空。 +- 期望:只要 error 非空或 status=error,success 应为 false,外层也应按业务错误返回稳定错误码/trace。 +- 涉及 case:5 + +| 套件 | shortcut | operation | trace_id | 证据 | +|---|---|---|---|---| +| `read` | `aitable +export-data` | `-` | `2104a64c17840997514714448e0817` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"INVALID_PARAMS","message":"taskId cannot be combined with scope, format, tableId or viewId","retryable":false,"type":"INPUT_ERROR"},"m… | +| | input | | | `/private/tmp/dws-real-test aitable +export-data --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --task-id DWSREALREADNOSUCHID0000000000000 --scope all --format excel --table-id hERWDMS --view-id qvGDAH2 --timeout-ms 1 --yes` | +| `write` | `aitable +chart-update` | `-` | `2106d98117840998553244877e08df` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"INVALID_PARAMS","message":"config is required","retryable":false,"type":"INPUT_ERROR"},"meta":{},"status":"error","success":true,"summ… | +| | input | | | `/private/tmp/dws-real-test aitable +chart-update --base-id DWSREALTESTNOSUCHID0000000000000 --dashboard-id DWSREALTESTNOSUCHID0000000000000 --chart-id DWSREALTESTNOSUCHID0000000000000 --config '{}' --layout '{}' --yes --format json` | +| `write` | `aitable +record-update` | `-` | `0bab027317840998747383236e090b` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"INVALID_RECORDS","message":"records must contain at least one writable record","retryable":false,"type":"INPUT_ERROR"},"meta":{},"stat… | +| | input | | | `/private/tmp/dws-real-test aitable +record-update --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --records '[{"recordId":"recDWSREALTEST","cells":{}}]' --yes --format json` | +| `write` | `aitable +record-upsert` | `-` | `2106d98117840998759832182e087b` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"INVALID_PARAMETER","message":"records is required and must not be empty","retryable":false,"type":"INPUT_ERROR"},"meta":{},"status":"e… | +| | input | | | `/private/tmp/dws-real-test aitable +record-upsert --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --records '[]' --yes --format json` | +| `write` | `aitable +view-set-fill-color-rule` | `-` | `2106d98117840998924181709e08df` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"INVALID_PARAMS","message":"conditionalFormats is required","retryable":false,"type":"INPUT_ERROR"},"meta":{},"status":"error","success… | +| | input | | | `/private/tmp/dws-real-test aitable +view-set-fill-color-rule --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --view-id DWSREALTESTNOSUCHID0000000000000 --json '{}' --yes --format json` | + +## AI 表格 Workflow 查询在真实 Base 下返回系统级错误 + +- 优先级:P1 +- 建议 owner:AI 表格 Workflow MCP / 后端 +- 现象:使用真实可访问 Base 查询 workflow list/get,返回 LIST_WORKFLOWS_ERROR/GET_WORKFLOW_ERROR。 +- 期望:无 workflow 时应返回空列表或 WORKFLOW_NOT_FOUND;有后端异常时需提供稳定错误码和可排查 trace。 +- 涉及 case:2 + +| 套件 | shortcut | operation | trace_id | 证据 | +|---|---|---|---|---| +| `read` | `aitable +workflow-get` | `-` | `2104a64c17840997556363676e08ee` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"GET_WORKFLOW_ERROR","message":"调用远程服务业务异常","retryable":true,"type":"SYSTEM_ERROR"},"meta":{},"status":"error","success":true,"summary"… | +| | input | | | `/private/tmp/dws-real-test aitable +workflow-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --workflow-id DWSREALREADNOSUCHID0000000000000 --yes --format json` | +| `read` | `aitable +workflow-list` | `-` | `2127d89817840997572427879e075d` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"LIST_WORKFLOWS_ERROR","message":"biz error","retryable":true,"type":"SYSTEM_ERROR"},"meta":{},"status":"error","success":true,"summary… | +| | input | | | `/private/tmp/dws-real-test aitable +workflow-list --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --limit 10 --offset 1 --yes --format json` | + +## AI 表格 roleId 参数疑似未被 MCP 正确读取 + +- 优先级:P1 +- 建议 owner:AI 表格 MCP role 接口 +- 现象:CLI 已传 --role-id,但 MCP 返回 roleId is required。 +- 期望:role-id/roleId 字段应被正确映射;如果 role 不存在,返回 ROLE_NOT_FOUND,而不是 required。 +- 涉及 case:3 + +| 套件 | shortcut | operation | trace_id | 证据 | +|---|---|---|---|---| +| `read` | `aitable +role-get` | `-` | `2104a64c17840997542904838e0817` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"INVALID_PARAMS","message":"roleId is required","retryable":false,"type":"INPUT_ERROR"},"meta":{},"status":"error","success":true,"summ… | +| | input | | | `/private/tmp/dws-real-test aitable +role-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --role-id x --yes --format json` | +| `write` | `aitable +role-delete` | `-` | `2106d98117840998782482701e089c` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"INVALID_PARAMS","message":"roleId is required","retryable":false,"type":"INPUT_ERROR"},"meta":{},"status":"error","success":true,"summ… | +| | input | | | `/private/tmp/dws-real-test aitable +role-delete --base-id DWSREALTESTNOSUCHID0000000000000 --role-id DWSREALTESTNOSUCHID0000000000000 --yes --format json` | +| `write` | `aitable +role-update` | `-` | `2132f5ca17840998794483634e08d8` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"INVALID_PARAMS","message":"roleId is required","retryable":false,"type":"INPUT_ERROR"},"meta":{},"status":"error","success":true,"summ… | +| | input | | | `/private/tmp/dws-real-test aitable +role-update --base-id DWSREALTESTNOSUCHID0000000000000 --role-id DWSREALTESTNOSUCHID0000000000000 --name 'DWS shortcut 真实测试 20260715-151724' --role-type x --flow-type x --sub-roles '[]' --yes --format json` | + +## AI 表格记录主文档查询在真实 record 下返回 no record/SYSTEM_ERROR + +- 优先级:P2 +- 建议 owner:AI 表格 primary doc MCP / 后端 +- 现象:record-query 已能查到真实 recordId,但 primary-doc 查询返回 no record、type=SYSTEM_ERROR。 +- 期望:若该记录无主文档,应返回空/未创建;若 recordId 语义不匹配,应返回明确参数错误,不应是系统错误。 +- 涉及 case:2 + +| 套件 | shortcut | operation | trace_id | 证据 | +|---|---|---|---|---| +| `read` | `aitable +base-get-primary-doc-id` | `-` | `0b5deb3217840997466255627e08ee` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"-1","message":"no record","retryable":true,"type":"SYSTEM_ERROR"},"meta":{},"status":"error","success":true,"summary":"Failed to query… | +| | input | | | `/private/tmp/dws-real-test aitable +base-get-primary-doc-id --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --record-id 1015oH3OXy --yes --format json` | +| `read` | `aitable +record-primary-doc-get` | `-` | `2127d89817840997528393730e079c` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"-1","message":"no record","retryable":true,"type":"SYSTEM_ERROR"},"meta":{},"status":"error","success":true,"summary":"Failed to query… | +| | input | | | `/private/tmp/dws-real-test aitable +record-primary-doc-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --record-id 1015oH3OXy --yes --format json` | + +## AI 表格无效 Base/Table/Field/Record 被包装成 SYSTEM_ERROR + +- 优先级:P2 +- 建议 owner:AI 表格 MCP wrapper / 后端错误码 +- 现象:安全负向 ID 下,部分写接口返回 getDentryDTO returns null、type=SYSTEM_ERROR、retryable=true。 +- 期望:资源不存在应返回 INPUT_ERROR/NOT_FOUND 且 retryable=false,避免误导调用方重试。 +- 涉及 case:4 + +| 套件 | shortcut | operation | trace_id | 证据 | +|---|---|---|---|---| +| `write` | `aitable +field-delete` | `-` | `0bab027317840998611338768e08c8` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"404","message":"getDentryDTO returns null","retryable":true,"type":"SYSTEM_ERROR"},"meta":{},"status":"error","success":true,"summary"… | +| | input | | | `/private/tmp/dws-real-test aitable +field-delete --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --field-id DWSREALTESTNOSUCHID0000000000000 --yes --format json` | +| `write` | `aitable +field-update` | `-` | `213ee25c17840998623207342e08e2` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"404","message":"getDentryDTO returns null","retryable":true,"type":"SYSTEM_ERROR"},"meta":{},"status":"error","success":true,"summary"… | +| | input | | | `/private/tmp/dws-real-test aitable +field-update --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --field-id DWSREALTESTNOSUCHID0000000000000 --name 'DWS shortcut 真实测试 20260715-151724' --config '{}' --ai-config '{}' --yes --format json` | +| `write` | `aitable +record-delete` | `-` | `2132f5ca17840998724753149e0853` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"404","message":"getDentryDTO returns null","retryable":true,"type":"SYSTEM_ERROR"},"meta":{},"status":"error","success":true,"summary"… | +| | input | | | `/private/tmp/dws-real-test aitable +record-delete --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --record-ids DWSREALTESTNOSUCHID0000000000000 --yes --format json` | +| `write` | `aitable +table-update` | `-` | `213ee25c17840998877246229e087f` | [MCP_TOOL_ERROR] {"data":{},"error":{"code":"404","message":"getDentryDTO returns null","retryable":true,"type":"SYSTEM_ERROR"},"meta":{},"status":"error","success":true,"summary"… | +| | input | | | `/private/tmp/dws-real-test aitable +table-update --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --name 'DWS shortcut 真实测试 20260715-151724' --description 'DWS shortcut 真实测试描述,可删除' --record-name-key task --yes --format json` | diff --git a/docs/shortcut-comparison.html b/docs/shortcut-comparison.html index 98c900c1..c744f083 100644 --- a/docs/shortcut-comparison.html +++ b/docs/shortcut-comparison.html @@ -13,6 +13,15 @@ h1{margin:0 0 6px;font-size:25px} .sub{color:var(--muted);font-size:13px} .note{background:var(--card);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:8px;padding:12px 16px;margin:22px 0;color:var(--muted);font-size:13px} .note b{color:var(--ink)} h2{font-size:18px;margin:34px 0 4px;padding-top:10px} h2 .c{color:var(--muted);font-size:14px;font-weight:400} +.section-lead{color:var(--muted);max-width:980px;margin:7px 0 14px} +.card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:12px;margin:12px 0 24px} +.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:13px 15px} +.card h3{margin:0 0 8px;font-size:14px;color:var(--accent)} +.smart-list{list-style:none;padding:0;margin:0;display:grid;gap:7px} +.smart-list li{border-top:1px solid var(--line);padding-top:7px} +.smart-list li:first-child{border-top:0;padding-top:0} +.smart-list code{color:#d3a7ff} .smart-desc{display:block;color:var(--muted);font-size:11.5px;margin-top:1px} +.why td:first-child{color:#9aa8bb} .why td:nth-child(2){color:#dce7f7} table{width:100%;border-collapse:collapse;margin:10px 0 6px;background:var(--card);border:1px solid var(--line);border-radius:10px;overflow:hidden;table-layout:fixed} th,td{padding:9px 11px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top;word-break:break-all} th{background:#1b2536;color:var(--muted);font-size:12px;font-weight:600} @@ -23,6 +32,13 @@ code{font-family:"SF Mono",Menlo,Consolas,monospace;font-size:12.5px} .desc{color:var(--muted);font-size:11.5px;margin-top:3px} .rk{display:inline-block;font-size:10px;padding:0 6px;border-radius:10px;margin-left:6px;vertical-align:1px} .rk-r{background:#12321d;color:#66d38a} .rk-w{background:#3a2f10;color:#e2b23c} .rk-h{background:#3a1414;color:#f27272} +.smart-badge{display:inline-block;font-size:10px;padding:0 6px;border-radius:10px;margin-left:6px;vertical-align:1px;background:#35204d;color:#d3a7ff} +.test-ok,.test-warn,.test-bad{display:inline-block;font-size:10px;padding:0 6px;border-radius:10px;vertical-align:1px} +.test-ok{background:#12321d;color:#66d38a} .test-warn{background:#3a2f10;color:#e2b23c} .test-bad{background:#3a1414;color:#f27272} +.test-err{color:#d5a429} +details.io{margin-top:6px} details.io summary{cursor:pointer;color:#8fd3ff;font-size:11.5px} +.io-label{color:#9aa8bb;font-size:11px;margin-top:6px} +details.io pre{white-space:pre-wrap;word-break:break-word;background:#101827;border:1px solid var(--line);border-radius:6px;padding:7px;margin:3px 0 6px;color:#c7cfdb;max-height:260px;overflow:auto;font-size:11px} .lk-none{color:#6b7890} .lk-miss{color:var(--yellow)} .lk-hit{color:var(--green)} footer{color:var(--muted);text-align:center;font-size:12px;margin-top:36px}
@@ -30,1907 +46,22306 @@ footer{color:var(--muted);text-align:center;font-size:12px;margin-top:36px}<xxx> 为参数占位)。
-② dws 原生 MCP 组合 = 该 shortcut 底层等价的裸命令,需手拼 JSON —— 直观体现 shortcut 的收敛价值。
-③ lark-cli = 飞书对应命令:绿色=同名可对齐;黄色=lark 有该服务但命名/能力不同;灰色=钉钉特有服务,lark 无对应。因两边 API 不同,仅同名项做逐一对齐。本页每一条 dws shortcut 都有测试记录。测试由 scripts/gen_shortcut_test_matrix.go 生成:逐条喂入合成参数,实际执行 cobra 命令树,所有 MCP 调用由 fake caller 拦截并记录 product/tool/args,同时捕获每条命令的 CLI 输入、stdout、stderr/error,确保零网络、零副作用。结果:323 条已装配到真实 MCP tool,43 条被自身校验按预期拦截,失败 0 条,tool ground truth 校验失败 0 条。
| 测试类型 | 数量 | 含义 | 副作用边界 |
|---|---|---|---|
| 已实测装配 | 323 | 命令实际执行到 MCP 调用组装路径,并记录 product/tool/args | fake MCP 拦截,不访问后端,不写数据 |
| 实测校验拦截 | 43 | 命令实际执行到自身校验链路,synthetic 参数被合法拒绝 | 校验前停止,无 MCP 调用 |
| 失败 | 0 | panic、无调用无错误、或 tool ground truth 未通过 | 必须为 0 才允许生成报告 |
这一层不使用 mock,也不使用 dry-run:用临时构建的真实 dws 二进制和当前 profile 登录态执行 read shortcut,并捕获真实 stdout/stderr。结果:成功 162 条,真实后端/参数/鉴权错误 41 条,超时 0 条。大量错误并不代表命令未执行,而是后端真实返回了 not_authenticated、参数校验、资源不存在或权限/业务错误;这些原始输出已逐条写在主表展开项中。
+| 真实测试类型 | 数量 | 含义 | 副作用边界 |
|---|---|---|---|
| 真实后端成功 | 162 | 命令真实访问后端并 exit 0 | 仅 read 命令 |
| 真实后端返回错误 | 41 | 命令真实访问后端或真实执行本地校验后返回错误;stdout/stderr 已逐条记录 | 仅 read 命令 |
| 真实后端超时 | 0 | 超过测试超时时间 | 仅 read 命令 |
| 失败归因 | 数量 | 说明 |
|---|---|---|
| 输入或业务校验失败 | 16 | 命令真实进入校验;可能是安全负向输入触发,也可能需要更完整 fixture。 |
| 后端 / MCP 内部错误 | 9 | 服务端/MCP 返回内部错误,报告保留原始输出供后端排查。 |
| 缺真实资源 fixture | 7 | 资源、消息、群、文档、单据等真实对象不存在。 |
| 权限 / 鉴权不足 | 6 | 账号、应用 scope 或资源权限不足;需要授权/换账号/配置应用权限。 |
| 缺妙记/听记真实 fixture | 3 | 妙记/听记命令依赖当前账号可见的真实会议产物。 |
| 人工授权后执行 | 1 | 无安全负向目标或高风险动作,需人工逐项确认。 |
这一层同样不使用 mock,也不使用 dry-run:用真实 dws 二进制、当前登录态、临时测试资源以及测试人员(冬翔、克谨、怒龙)分批执行 write / high-risk-write shortcut。当前已记录 162 条:成功 48 条,真实后端/参数/业务错误 114 条,超时 0 条,待执行 0 条。写入类的失败同样保留真实 stdout/stderr,便于定位是 shortcut 参数投影问题、后端业务约束还是权限限制。
+| 真实测试类型 | 数量 | 含义 | 副作用边界 |
|---|---|---|---|
| 真实后端成功 | 48 | 命令真实访问后端并 exit 0 | 临时资源 / 测试人员 |
| 真实后端返回错误 | 114 | 命令真实访问后端或真实执行本地校验后返回错误;stdout/stderr 已逐条记录 | 临时资源 / 测试人员 |
| 真实后端超时 | 0 | 超过测试超时时间 | 需单独复测 |
| 失败归因 | 数量 | 说明 |
|---|---|---|
| 缺 AI 表格真实 fixture | 31 | AI 表格命令依赖真实 Base/Table/View/Record 等资源。 |
| 后端 / MCP 内部错误 | 24 | 服务端/MCP 返回内部错误,报告保留原始输出供后端排查。 |
| 缺真实资源 fixture | 23 | 资源、消息、群、文档、单据等真实对象不存在。 |
| 输入或业务校验失败 | 20 | 命令真实进入校验;可能是安全负向输入触发,也可能需要更完整 fixture。 |
| 权限 / 鉴权不足 | 16 | 账号、应用 scope 或资源权限不足;需要授权/换账号/配置应用权限。 |
原子型 shortcut 不是在宣称“新增了底层能力”,而是在 MCP tool 之上提供一层稳定、可发现、可测试的用户入口。它的价值边界要讲清楚:有增量就保留,纯重复就删除。
+| 必要性 | 没有原子型 shortcut 时 | 保留原子型 shortcut 的价值 |
|---|---|---|
| 补齐命令面空白 | 有些 MCP tool 没有对应的 dws <svc> <verb> helper,只能走裸 dws mcp ... --json | 把真实可用的底层能力挂到产品命令树里,用户和 Agent 不必手写 JSON |
| 参数收敛 | 调用者要记服务端字段名、嵌套 JSON、枚举和必填关系 | 收敛成命名 flag、默认值和校验,降低误填与 prompt 猜参概率 |
| Intent / Help / 可发现性 | MCP schema 偏接口视角,Agent 需要先理解 tool 再判断何时使用 | 每条 shortcut 都带任务化描述,可被 --help、dws shortcut list 和 Agent 规划直接利用 |
| 统一安全与输出入口 | 读写风险、dry-run、format / jq / fields 等能力分散到调用者侧 | 复用 shortcut 框架的 risk 分级、dry-run 通道和统一输出契约 |
| 稳定投影 | 底层响应 envelope 冗长且字段不稳定,常把噪声暴露给用户 | 对一部分读类命令保留干净投影,只输出用户真正要看的字段 |
| 对齐与治理 | 无法判断与 lark-cli、helper、MCP tool 的覆盖差异,也难以做后续去重 | 形成可枚举的命令面,便于生成报告、做 GSB 对比和持续 prune |
这组命令面向完整用户意图,例如“按姓名发消息”“找共同空闲时间”“找到最新妙记并取逐字稿”。其中一部分是真正的多 MCP / 跨服务编排,另一部分是单服务内的分页、过滤、批处理和稳定输出;两者都不是普通 API 别名。
+dws calendar +book创建日程,并可按姓名邀请参会人(自动解析 userId,失败自动回滚删除日程)dws calendar +cancel-event取消(删除)一个已有日程(删除前先确认它真实存在)dws calendar +conflicts检测我某天日程的时间冲突(重叠/双重预订,默认今天)dws calendar +find-room查询指定时间段内所有可用的会议室dws calendar +free按姓名查询某人在指定时间段内的忙闲状态(自动解析 userId)dws calendar +free-slots找我某天工作时段内的空闲时间段(默认今天 09:00-18:00)dws calendar +invite按姓名把参会人加入已有日程(自动解析 userId 后批量添加)dws calendar +my-free查我自己在某时间段的忙闲(默认今天,无需输入姓名)dws calendar +next-event查看接下来最近的一个日程(默认扫描未来 7 天)dws calendar +reschedule改一个已有日程的时间(只动开始/结束时间,其他字段不变)dws calendar +respond-event接受 / 拒绝 / 暂定回复一个日程邀请(作为参会人设置自己的响应状态)dws calendar +suggest-time按姓名解析多位参与者,推荐大家都有空的可开会时间段(自动解析 userId)dws calendar +today列出我今天的日程(自动计算今天的起止时间,无需手动填时间范围)dws calendar +tomorrow列出我明天的日程(自动计算明天的起止时间,无需手动填时间范围)dws calendar +week列出我本周的日程(自动按周一为周首计算本周起止时间,无需手动填时间范围)dws chat +at-me查最近 @我 的消息(自动算时间窗,投影发送人/时间/内容/会话)dws chat +broadcast按姓名逐一给多个人群发同一条单聊消息(自动解析 userId、逐个发送)dws chat +chat-messages拉取某个会话(群聊或单聊)的消息列表并投影出发言人/文本/时间dws chat +dm按姓名直接给某人发单聊消息(自动解析 userId)dws chat +group-members按群名列出群成员(自动搜群解析 openConversationId)dws chat +my-groups列出我加入的群,可按类型过滤并投影关键字段dws chat +search-msg在群内按关键词搜消息(默认近 7 天,投影发送人/时间/内容/messageId)dws chat +send-to-group按群名直接给群发消息(自动搜群解析 openConversationId)dws chat +thread-replies拉取某条话题消息的全部回复并投影出发言人/文本/时间dws chat +unread-chats列出我有未读消息的会话(投影会话名/未读数/会话ID)dws todo +assign按姓名给某人创建并指派一条待办(自动解析 userId)dws todo +assign-multi把一条待办按姓名一次性指派给多个人(自动把每个姓名解析成 userId)dws todo +created-todos列出我创建的待办(我作为创建人 creator 发起的待办,而非分配给我执行的)dws todo +due-today列出我今天到期的待办dws todo +overdue列出我已过期未完成的待办dws todo +related-tasks一次性列出与我相关的全部待办(我作为创建人/执行人/参与人三种角色的并集,按 taskId 去重)dws todo +remind给自己创建一条带截止/提醒时间的待办dws todo +todo-done按标题关键词把我的某条待办标记完成(自动定位 taskId)dws contact +by-mobile按手机号查询某人的完整资料(自动解析 userId 后取详情)dws contact +dept-members按部门名列出部门成员(自动解析 deptId)dws contact +lookup按姓名查询某人的完整资料(自动解析 userId 后取详情)dws contact +me查看我自己的通讯录资料(姓名/userId/手机/部门/组织,干净投影)dws contact +org按姓名查某人所在部门的详情(自动解析 userId 与 deptId)dws contact +resolve-dept按名称搜索部门并解析出唯一 deptId(只读)dws contact +team按姓名列出某人所在部门的成员(自动解析 userId 与 deptId)dws minutes +action-items取我最新一条妙记里的待办事项dws minutes +detail一条命令聚合取一条妙记(听记)的多项产物(基础信息/摘要/关键词/逐字稿/待办)dws minutes +latest-minutes取我最新的一条妙记(听记)详情dws minutes +minutes-search按关键词搜索我的妙记并投影列表dws minutes +replace-batch对一条妙记(听记)批量执行多组文字替换(原文=>替换)dws minutes +transcript取我最新一条妙记(听记)的逐字稿(语音转写原文)dws aitable +find-record在指定多维表里按关键词查记录(只读)dws aitable +list-tables列出某个多维表(base)里的所有数据表(只读,投影 tableId/tableName)dws aitable +record-share-links批量(可 >20 条)获取多维表记录分享链接:去重+分片+合并dws aitable +resolve-base按名称搜索多维表 Base 并解析出唯一 baseId(只读)dws aitable +resolve-table在某个多维表 Base 内按名称解析出唯一的数据表 tableId(只读)dws mail +find-mail-user按关键词搜索邮箱联系人并投影列表(姓名/昵称/邮箱/工号等)dws mail +recent-mail列出收件箱近期邮件会话并投影列表(主题/发件人/时间/threadId)dws mail +search-mail按 KQL 关键词搜索邮件并投影列表(主题/发件人/时间/messageId)dws mail +unread-mail列出未读邮件并投影列表(主题/发件人/时间/messageId)dws oa +approve-by按关键词把我的一条待审批单据一键通过(自动定位实例与任务 ID)dws oa +done-approvals只读列出我已处理过的审批任务(审批历史)并投影为可读列表dws oa +my-initiated列出我发起(提交)的审批单据dws oa +pending只读列出待我审批的审批任务并投影为可读列表(只看不批)dws doc +doc-append在文档末尾追加一段文本(安全追加,不改动原有内容)dws doc +find-doc按关键词搜索云文档并投影关键字段(只读)dws doc +share-doc按姓名把文档链接私信发给某人(自动解析 userId)dws attendance +my-attendance查我今天的考勤打卡记录(打卡流水,自动解析当前用户)dws attendance +this-month查我本月的考勤打卡记录(打卡流水,自动解析当前用户)dws wiki +resolve-space按名称搜索知识空间并解析出唯一 spaceId(只读)dws wiki +wiki-new-doc在指定名称的知识库下新建一个文档节点(自动按空间名解析 workspaceId)dws drive +find-file按名称关键词搜索钉盘文件并投影关键字段(只读)dws report +report-latest取我最新提交的一篇日志/汇报详情(钉钉原生)API/MCP 形态以服务端资源和接口为中心;shortcut 以用户任务为中心。单独封装的价值不是少写几个字符,而是把稳定的客户端语义、保护措施和多步流程变成可测试契约。
+| 维度 | 直接 API / MCP | 单独 shortcut 封装 |
|---|---|---|
| 输入语义 | 要求调用者理解服务端字段名、类型、枚举和 JSON 结构 | 提供面向任务的 flags、默认值、枚举、时间解析和跨字段校验 |
| ID 与上下文 | 通常先查 userId、deptId、eventId、baseId,再复制到下一次调用 | 可按姓名/标题解析、唯一性消歧,并自动串联后续操作 |
| 多步一致性 | 调用者自行处理部分成功、重试、回滚与中间结果 | 集中实现 fan-out、分页、去重、partial failure 和必要回滚 |
| 安全 | 写接口裸露,dry-run 和确认逻辑由每个调用者重复实现 | 统一 risk 分级、确认提示、dry-run 计划和高风险保护 |
| 输出契约 | 响应 envelope 和字段随底层工具而异,常含大量噪声 | 稳定投影关键字段,并统一支持 format / jq / fields |
| Agent 可发现性 | 模型需先理解 API schema,再自己规划完整调用链 | Intent、示例和窄参数面直接表达“什么时候用、会发生什么” |
| 演进隔离 | 上游参数或响应变化会扩散到所有脚本和 Agent prompt | 在一个经过测试的适配层吸收兼容变化 |
这批不是“DWS 少写了几个 shortcut”,而是飞书平台有对应的一等产品对象或事件模型,当前钉钉 MCP/DWS 没有同语义承接点。后续只有在钉钉开放对应 API、或 DWS 接入等价 MCP tool 后,才适合再做 shortcut。
+lark-cli event +subscribelark-cli markdown +createlark-cli markdown +difflark-cli markdown +fetchlark-cli markdown +overwritelark-cli markdown +patchlark-cli note +detaillark-cli note +transcriptlark-cli okr +batch-createlark-cli okr +cycle-detaillark-cli okr +cycle-listlark-cli okr +indicator-updatelark-cli okr +patchlark-cli okr +progress-createlark-cli okr +progress-deletelark-cli okr +progress-getlark-cli okr +progress-listlark-cli okr +progress-updatelark-cli okr +reorderlark-cli okr +upload-imagelark-cli okr +weightlark-cli slides +createlark-cli slides +media-uploadlark-cli slides +replace-pageslark-cli slides +replace-slidelark-cli slides +screenshotlark-cli slides +xml-getlark-cli vc +detaillark-cli vc +meeting-eventslark-cli vc +meeting-joinlark-cli vc +meeting-leavelark-cli vc +meeting-list-activelark-cli vc +meeting-message-sendlark-cli vc +noteslark-cli vc +recordinglark-cli vc +searchlark-cli whiteboard +querylark-cli whiteboard +updatelark-cli whiteboard +whiteboard-update| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 | ||
|---|---|---|---|---|---|
dws chat +at-me --days <days>read查最近 @我 的消息(自动算时间窗,投影发送人/时间/内容/会话) |
-dws mcp chat <tool> |
+dws chat +at-me --days <days>read复合/智能型查最近 @我 的消息(自动算时间窗,投影发送人/时间/内容/会话) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; chat/search_at_me_message输入 / CLI 输出输入 dws chat +at-me --days 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "cursor": "0",
+ "endTime": 1784105092577,
+ "limit": 50,
+ "startTime": 1784018692577
+ },
+ "product": "chat",
+ "tool": "search_at_me_message"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cursor": "0",
+ "endTime": 1784105092577,
+ "limit": 50,
+ "startTime": 1784018692577
+ },
+ "product": "chat",
+ "tool": "search_at_me_message"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2787ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +at-me --days 7 --yes --format json 真实 stdout {
+ "messages": [
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "粤腾",
+ "text": "@梓寻 @崇幻(主用钉) @陈叙 @念晨 明天下午给孙总的蓝图汇报,最后一part是对本次AI营销项目的建议和求助。大家可以把每个模块目前遇到的问题和困难(例如:需要客户提供的资源、需求落地的阻力等),单独反馈给我。",
+ "time": "2026-07-15 14:29:53"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@念晨 这个知识蓝图好了么?客户想先看一下材料",
+ "time": "2026-07-15 13:41:25"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@念晨 @杨淑平 \n1、**生产环境:补充一下是否需要域名**[图片消息](mediaId=@lQLPJxN0PcmAzMfNBfDNCuKwMJ8nHWzNI30KKoLRQapEAQ)**2、测试环境:**\n(1)需要几台服务器,配置保持跟生产一样,还是改一下\n(2)测试环境是否需要域名,(测试环境就写是否需要好了,可以让客户随机分配下)[图片消息](mediaId=@lQLPJwPJXqYLLMfNBf7NCqCw5iUu-ba7L7IKKoLRQapEAA)",
+ "time": "2026-07-15 10:19:17"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "栩铭-主账号",
+ "text": "@徐洪鑫(崇幻(主用钉)) @董鑫阳(念晨) @陈绪(陈叙) @杨淑平 @梓寻 \n需要申请 测试服务器环境的同学,在https://alidocs.dingtalk.com/i/nodes/PwkYGxZV3ZEBnPvwI92oDm9rWAgozOKL?utm_scene=team_space&iframeQuery=sheet_range%3Dkgqie6hm_0_11_9_3 “测试环境”Sheet页登记下\n需要域名的,填写在新增的“域名”栏目",
+ "time": "2026-07-15 09:50:16"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "粤腾",
+ "text": "@梓寻 @陈叙 @崇幻(主用钉) @念晨 各业务场景的蓝图素材还请大家统一补充到钉钉文档中 https://alidocs.dingtalk.com/i/nodes/OG9lyrgJPzYvRArmHv23ye4kWzN67Mw4",
+ "time": "2026-07-14 22:44:59"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@崇幻(主用钉) @陈叙 @念晨 @杨淑平 今日进展和明日计划记得发一下哈,\n\n另外再看一下情报助手、活动助手、解决方案助手、专家Agent什么时候可以让中控一线人员在自己的电脑上运行(最小MVP版本),要给下时间",
+ "time": "2026-07-14 21:35:38"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@念晨 选李龙就是@粤腾 批啦[憨笑]",
+ "time": "2026-07-14 20:33:28"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "粤腾",
+ "text": "@崇幻(主用钉) @念晨 @梓寻 @陈叙 如果大家明天上午方便,最好能来中控现场,蓝图规划和场景demo录制两个事现场对齐高效输出。[抱拳]",
+ "time": "2026-07-14 19:13:20"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "粤腾",
+ "text": "@崇幻(主用钉) @陈叙 @梓寻 @念晨 明天要给新的分管It和营销业务副总裁孙总汇报整体项目蓝图规划,辛苦大家今天内把每个模块用户故事动线(产品原型图,demo界面,场景等)串起来的相关素材放到知识库。https://alidocs.dingtalk.com/i/nodes/QPGYqjpJYrlp4LN6IBEylmR48akx1Z5N?corpId=ding5bb1eba46e6a17d94ac5d6980864d335&utm_medium=im_card&iframeQuery=utm_medium%3Dim_card%26utm_source%3Dim&utm_scene=team_space&utm_source=im",
+ "time": "2026-07-14 16:28:06"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@念晨 @陈叙 会议室在 E307",
+ "time": "2026-07-14 13:12:04"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "崇幻这边可以现场演示,@念晨 @陈叙 你俩下午赶的过来么?",
+ "time": "2026-07-14 11:13:17"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@念晨 @粤腾 @梓寻 @陈叙 @崇幻(主用钉) 崔总突然下午要看项目整体进度,需要汇报每个子项目的情况,大概2点半这样。",
+ "time": "2026-07-14 11:11:28"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@念晨 明日计划给你加个知识蓝图输出中,然后约客户周三对焦哈",
+ "time": "2026-07-13 23:14:03"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@陈叙 @念晨 @杨淑平 今日进展和明天计划记得同步下[送花花]",
+ "time": "2026-07-13 21:40:08"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "粤腾",
+ "text": "还差一个情报助理和 知识库与中控制标Agent打通。 @杨淑平 情报助理看下周三能做到什么程度。 @念晨 知识库与中控制标Agent打通 需要在7 18 的demo演示中打通么。",
+ "time": "2026-07-13 16:43:23"
+ },
+ {
+ "conversation": "算法团队mentor群(内部讨论群)",
+ "sender": "璟琦(主用钉)",
+ "text": "@董鑫阳(念晨) https://acl.alibaba-inc.com/permission/datapermission/applyDetail.htm?spm=21540d8c.6248353e.0.0.6ae2264c9zDMFB&flowId=3cd438c0-2cee-4eac-a763-4625dbf2b51d",
+ "time": "2026-07-15 10:54:23"
+ },
+ {
+ "conversation": "算法团队mentor群(内部讨论群)",
+ "sender": "九韶",
+ "text": "@董鑫阳(念晨) 给你留了一个目标, 你抓紧更新,进去。 我给大哥先发一般",
+ "time": "2026-07-14 16:15:16"
+ },
+ {
+ "conversation": "算法团队mentor群(内部讨论群)",
+ "sender": "璟琦(主用钉)",
+ "text": "@董鑫阳(念晨) 你补一下 中控 及 专家agent 的部分",
+ "time": "2026-07-14 15:48:29"
+ },
+ {
+ "conversation": "算法团队mentor群(内部讨论群)",
+ "sender": "璟琦(主用钉)",
+ "text": "@董鑫阳(念晨) cli实现的时候这里面的能力最好都支持",
+ "time": "2026-07-14 10:49:39"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "筱淘",
+ "text": "@董鑫阳(念晨) 让客户再等等 明天见客户",
+ "time": "2026-07-15 09:48:49"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 没事,下次星爷的美人鱼2要在2028年上映了,到时候我们再一起翘班去",
+ "time": "2026-07-15 09:41:06"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@卢翮(龙衔) @董鑫阳(念晨) 去么去么",
+ "time": "2026-07-15 09:22:09"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) @蒋志刚(穆伦) @卢翮(龙衔) 去么,去么",
+ "time": "2026-07-15 09:16:18"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 哪个 HR 问你",
+ "time": "2026-07-15 09:10:25"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "穆伦",
+ "text": "@Dennis(念晨) 为啥这么问呢?你们那边没有好的位置?",
+ "time": "2026-07-15 09:05:14"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "筱淘",
+ "text": "@董鑫阳(念晨) 还等什么 来吧",
+ "time": "2026-07-15 09:00:21"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 害怕",
+ "time": "2026-07-14 22:01:18"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "穆伦",
+ "text": "@Dennis(念晨) 展开说说",
+ "time": "2026-07-14 16:39:26"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "龙衔",
+ "text": "@董鑫阳(念晨) 聊啥",
+ "time": "2026-07-14 16:36:03"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "穆伦",
+ "text": "@Dennis(念晨) 什么评价",
+ "time": "2026-07-14 16:33:04"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 我就说旁边有个车神经的滴滴我",
+ "time": "2026-07-14 13:04:30"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 赛银",
+ "time": "2026-07-14 12:51:33"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 刚才出来的车是你的呀",
+ "time": "2026-07-14 12:51:27"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 你最后一条为什么只出现一半",
+ "time": "2026-07-14 10:27:07"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) iPad or Mac?",
+ "time": "2026-07-14 10:23:28"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "龙衔",
+ "text": "@董鑫阳(念晨) 走,请你吃面",
+ "time": "2026-07-13 18:26:51"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "龙衔",
+ "text": "@董鑫阳(念晨) 茶叶忘了给你了 下次吃饭吧 头大 脑子不够了",
+ "time": "2026-07-13 14:14:22"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 下午你来",
+ "time": "2026-07-13 11:37:02"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 你是开个新卡,还是试试筱淘那个100多的",
+ "time": "2026-07-13 11:33:47"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨)",
+ "time": "2026-07-13 11:32:43"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 我给你开个卡?",
+ "time": "2026-07-13 11:28:36"
+ },
+ {
+ "conversation": "元智,九韶,璟琦(主用钉),念晨",
+ "sender": "元智",
+ "text": "@董鑫阳(念晨) 给力,scope更大了",
+ "time": "2026-07-14 15:39:19"
+ },
+ {
+ "conversation": "元智,九韶,璟琦(主用钉),念晨",
+ "sender": "九韶",
+ "text": "@董鑫阳(念晨) 汇报过了吗? 怎么样?",
+ "time": "2026-07-14 15:19:43"
+ },
+ {
+ "conversation": "[会议群]销售知识库方案讨论",
+ "sender": "赵瑞(玖霄)",
+ "text": "我来约你时间@念晨",
+ "time": "2026-07-14 12:37:23"
+ },
+ {
+ "conversation": "[会议群]销售知识库方案讨论",
+ "sender": "迦卢",
+ "text": "@赵瑞(玖霄) 你把需求和@念晨 对焦下",
+ "time": "2026-07-14 12:25:15"
+ },
+ {
+ "conversation": "[会议群]销售知识库方案讨论",
+ "sender": "迦卢",
+ "text": "@赵瑞(玖霄) @念晨 是知识库这边的技术架构师,目前还没有产品,但是他来进行和我们共创",
+ "time": "2026-07-13 17:48:48"
+ },
+ {
+ "conversation": "FDE Go",
+ "sender": "冬翔",
+ "text": "@董鑫阳(念晨) 你的Claude还是不能用?",
+ "time": "2026-07-14 10:22:12"
+ },
+ {
+ "conversation": "FDE Go",
+ "sender": "黎常",
+ "text": "@董鑫阳(念晨) 这个确实太傻逼了,放着好好优势不用",
+ "time": "2026-07-14 09:55:49"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "messages": [
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "粤腾",
+ "text": "@梓寻 @崇幻(主用钉) @陈叙 @念晨 明天下午给孙总的蓝图汇报,最后一part是对本次AI营销项目的建议和求助。大家可以把每个模块目前遇到的问题和困难(例如:需要客户提供的资源、需求落地的阻力等),单独反馈给我。",
+ "time": "2026-07-15 14:29:53"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@念晨 这个知识蓝图好了么?客户想先看一下材料",
+ "time": "2026-07-15 13:41:25"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@念晨 @杨淑平 \n1、**生产环境:补充一下是否需要域名**[图片消息](mediaId=@lQLPJxN0PcmAzMfNBfDNCuKwMJ8nHWzNI30KKoLRQapEAQ)**2、测试环境:**\n(1)需要几台服务器,配置保持跟生产一样,还是改一下\n(2)测试环境是否需要域名,(测试环境就写是否需要好了,可以让客户随机分配下)[图片消息](mediaId=@lQLPJwPJXqYLLMfNBf7NCqCw5iUu-ba7L7IKKoLRQapEAA)",
+ "time": "2026-07-15 10:19:17"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "栩铭-主账号",
+ "text": "@徐洪鑫(崇幻(主用钉)) @董鑫阳(念晨) @陈绪(陈叙) @杨淑平 @梓寻 \n需要申请 测试服务器环境的同学,在https://alidocs.dingtalk.com/i/nodes/PwkYGxZV3ZEBnPvwI92oDm9rWAgozOKL?utm_scene=team_space&iframeQuery=sheet_range%3Dkgqie6hm_0_11_9_3 “测试环境”Sheet页登记下\n需要域名的,填写在新增的“域名”栏目",
+ "time": "2026-07-15 09:50:16"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "粤腾",
+ "text": "@梓寻 @陈叙 @崇幻(主用钉) @念晨 各业务场景的蓝图素材还请大家统一补充到钉钉文档中 https://alidocs.dingtalk.com/i/nodes/OG9lyrgJPzYvRArmHv23ye4kWzN67Mw4",
+ "time": "2026-07-14 22:44:59"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@崇幻(主用钉) @陈叙 @念晨 @杨淑平 今日进展和明日计划记得发一下哈,\n\n另外再看一下情报助手、活动助手、解决方案助手、专家Agent什么时候可以让中控一线人员在自己的电脑上运行(最小MVP版本),要给下时间",
+ "time": "2026-07-14 21:35:38"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@念晨 选李龙就是@粤腾 批啦[憨笑]",
+ "time": "2026-07-14 20:33:28"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "粤腾",
+ "text": "@崇幻(主用钉) @念晨 @梓寻 @陈叙 如果大家明天上午方便,最好能来中控现场,蓝图规划和场景demo录制两个事现场对齐高效输出。[抱拳]",
+ "time": "2026-07-14 19:13:20"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "粤腾",
+ "text": "@崇幻(主用钉) @陈叙 @梓寻 @念晨 明天要给新的分管It和营销业务副总裁孙总汇报整体项目蓝图规划,辛苦大家今天内把每个模块用户故事动线(产品原型图,demo界面,场景等)串起来的相关素材放到知识库。https://alidocs.dingtalk.com/i/nodes/QPGYqjpJYrlp4LN6IBEylmR48akx1Z5N?corpId=ding5bb1eba46e6a17d94ac5d6980864d335&utm_medium=im_card&iframeQuery=utm_medium%3Dim_card%26utm_source%3Dim&utm_scene=team_space&utm_source=im",
+ "time": "2026-07-14 16:28:06"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@念晨 @陈叙 会议室在 E307",
+ "time": "2026-07-14 13:12:04"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "崇幻这边可以现场演示,@念晨 @陈叙 你俩下午赶的过来么?",
+ "time": "2026-07-14 11:13:17"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@念晨 @粤腾 @梓寻 @陈叙 @崇幻(主用钉) 崔总突然下午要看项目整体进度,需要汇报每个子项目的情况,大概2点半这样。",
+ "time": "2026-07-14 11:11:28"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@念晨 明日计划给你加个知识蓝图输出中,然后约客户周三对焦哈",
+ "time": "2026-07-13 23:14:03"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "千启",
+ "text": "@陈叙 @念晨 @杨淑平 今日进展和明天计划记得同步下[送花花]",
+ "time": "2026-07-13 21:40:08"
+ },
+ {
+ "conversation": "【内】中控每日工作进展汇总群",
+ "sender": "粤腾",
+ "text": "还差一个情报助理和 知识库与中控制标Agent打通。 @杨淑平 情报助理看下周三能做到什么程度。 @念晨 知识库与中控制标Agent打通 需要在7 18 的demo演示中打通么。",
+ "time": "2026-07-13 16:43:23"
+ },
+ {
+ "conversation": "算法团队mentor群(内部讨论群)",
+ "sender": "璟琦(主用钉)",
+ "text": "@董鑫阳(念晨) https://acl.alibaba-inc.com/permission/datapermission/applyDetail.htm?spm=21540d8c.6248353e.0.0.6ae2264c9zDMFB&flowId=3cd438c0-2cee-4eac-a763-4625dbf2b51d",
+ "time": "2026-07-15 10:54:23"
+ },
+ {
+ "conversation": "算法团队mentor群(内部讨论群)",
+ "sender": "九韶",
+ "text": "@董鑫阳(念晨) 给你留了一个目标, 你抓紧更新,进去。 我给大哥先发一般",
+ "time": "2026-07-14 16:15:16"
+ },
+ {
+ "conversation": "算法团队mentor群(内部讨论群)",
+ "sender": "璟琦(主用钉)",
+ "text": "@董鑫阳(念晨) 你补一下 中控 及 专家agent 的部分",
+ "time": "2026-07-14 15:48:29"
+ },
+ {
+ "conversation": "算法团队mentor群(内部讨论群)",
+ "sender": "璟琦(主用钉)",
+ "text": "@董鑫阳(念晨) cli实现的时候这里面的能力最好都支持",
+ "time": "2026-07-14 10:49:39"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "筱淘",
+ "text": "@董鑫阳(念晨) 让客户再等等 明天见客户",
+ "time": "2026-07-15 09:48:49"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 没事,下次星爷的美人鱼2要在2028年上映了,到时候我们再一起翘班去",
+ "time": "2026-07-15 09:41:06"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@卢翮(龙衔) @董鑫阳(念晨) 去么去么",
+ "time": "2026-07-15 09:22:09"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) @蒋志刚(穆伦) @卢翮(龙衔) 去么,去么",
+ "time": "2026-07-15 09:16:18"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 哪个 HR 问你",
+ "time": "2026-07-15 09:10:25"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "穆伦",
+ "text": "@Dennis(念晨) 为啥这么问呢?你们那边没有好的位置?",
+ "time": "2026-07-15 09:05:14"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "筱淘",
+ "text": "@董鑫阳(念晨) 还等什么 来吧",
+ "time": "2026-07-15 09:00:21"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 害怕",
+ "time": "2026-07-14 22:01:18"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "穆伦",
+ "text": "@Dennis(念晨) 展开说说",
+ "time": "2026-07-14 16:39:26"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "龙衔",
+ "text": "@董鑫阳(念晨) 聊啥",
+ "time": "2026-07-14 16:36:03"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "穆伦",
+ "text": "@Dennis(念晨) 什么评价",
+ "time": "2026-07-14 16:33:04"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 我就说旁边有个车神经的滴滴我",
+ "time": "2026-07-14 13:04:30"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 赛银",
+ "time": "2026-07-14 12:51:33"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 刚才出来的车是你的呀",
+ "time": "2026-07-14 12:51:27"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 你最后一条为什么只出现一半",
+ "time": "2026-07-14 10:27:07"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) iPad or Mac?",
+ "time": "2026-07-14 10:23:28"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "龙衔",
+ "text": "@董鑫阳(念晨) 走,请你吃面",
+ "time": "2026-07-13 18:26:51"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "龙衔",
+ "text": "@董鑫阳(念晨) 茶叶忘了给你了 下次吃饭吧 头大 脑子不够了",
+ "time": "2026-07-13 14:14:22"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 下午你来",
+ "time": "2026-07-13 11:37:02"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 你是开个新卡,还是试试筱淘那个100多的",
+ "time": "2026-07-13 11:33:47"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨)",
+ "time": "2026-07-13 11:32:43"
+ },
+ {
+ "conversation": "AI全栈",
+ "sender": "怒龙",
+ "text": "@董鑫阳(念晨) 我给你开个卡?",
+ "time": "2026-07-13 11:28:36"
+ },
+ {
+ "conversation": "元智,九韶,璟琦(主用钉),念晨",
+ "sender": "元智",
+ "text": "@董鑫阳(念晨) 给力,scope更大了",
+ "time": "2026-07-14 15:39:19"
+ },
+ {
+ "conversation": "元智,九韶,璟琦(主用钉),念晨",
+ "sender": "九韶",
+ "text": "@董鑫阳(念晨) 汇报过了吗? 怎么样?",
+ "time": "2026-07-14 15:19:43"
+ },
+ {
+ "conversation": "[会议群]销售知识库方案讨论",
+ "sender": "赵瑞(玖霄)",
+ "text": "我来约你时间@念晨",
+ "time": "2026-07-14 12:37:23"
+ },
+ {
+ "conversation": "[会议群]销售知识库方案讨论",
+ "sender": "迦卢",
+ "text": "@赵瑞(玖霄) 你把需求和@念晨 对焦下",
+ "time": "2026-07-14 12:25:15"
+ },
+ {
+ "conversation": "[会议群]销售知识库方案讨论",
+ "sender": "迦卢",
+ "text": "@赵瑞(玖霄) @念晨 是知识库这边的技术架构师,目前还没有产品,但是他来进行和我们共创",
+ "time": "2026-07-13 17:48:48"
+ },
+ {
+ "conversation": "FDE Go",
+ "sender": "冬翔",
+ "text": "@董鑫阳(念晨) 你的Claude还是不能用?",
+ "time": "2026-07-14 10:22:12"
+ },
+ {
+ "conversation": "FDE Go",
+ "sender": "黎常",
+ "text": "@董鑫阳(念晨) 这个确实太傻逼了,放着好好优势不用",
+ "time": "2026-07-14 09:55:49"
+ }
+ ]
+} |
dws chat +bot-find --query <query> --limit <limit> --cursor <cursor>read搜索全部可用机器人(含他人/官方,返回 openDingTalkId 可发单聊) |
dws mcp bot <tool> |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; bot/search_bots输入 / CLI 输出输入 dws chat +bot-find --query x --limit 1 --cursor x --yes stdout {
+ "bots": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "bots": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1312ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +bot-find --query '测试' --limit 10 --cursor '' --yes --format json 真实 stdout {
+ "bots": [],
+ "count": 0
+}真实 stderr / error (空) 真实返回 {
+ "bots": [],
+ "count": 0
+} |
||
dws chat +bot-search --page <page> --size <size> --name <name>read搜索当前用户自己创建的机器人 |
dws mcp bot <tool> |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; bot/search_my_robots输入 / CLI 输出输入 dws chat +bot-search --page 1 --size 1 --name x --yes stdout {
+ "count": 0,
+ "robots": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "robots": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1191ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +bot-search --page 1 --size 1 --name 'DWS shortcut 真实测试' --yes --format json 真实 stdout {
+ "count": 0,
+ "robots": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "robots": []
+} |
||
dws chat +broadcast --to <to> --text <text>write按姓名逐一给多个人群发同一条单聊消息(自动解析 userId、逐个发送) |
-dws mcp chat <tool> |
+dws chat +broadcast --to <to> --text <text>write复合/智能型按姓名逐一给多个人群发同一条单聊消息(自动解析 userId、逐个发送) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_contact_by_key_word;没有任何人收到消息,请检查姓名是否正确输入 / CLI 输出输入 dws chat +broadcast --to x --text x --yes stdout (空) stderr / error 没有任何人收到消息,请检查姓名是否正确 最终用于判定的返回 没有任何人收到消息,请检查姓名是否正确 真实后端测试输入 / 输出真实后端成功exit=0;duration=2388ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +broadcast --to '冬翔,克谨,怒龙' --text 'DWS shortcut 修复复测 20260715:验证 chat +broadcast,请忽略。' --yes --format json 真实 stdout {
+ "failedCount": 0,
+ "sent": [
+ "夏东翔",
+ "黄渊卓",
+ "刘力"
+ ],
+ "sentCount": 3
+}真实 stderr / error (空) 真实返回 {
+ "failedCount": 0,
+ "sent": [
+ "夏东翔",
+ "黄渊卓",
+ "刘力"
+ ],
+ "sentCount": 3
+} |
dws chat +category-add-conversation --group <group> --category-ids <category-ids>write将会话移动到指定的自定义分组中 |
dws mcp im add_conv_to_categories --json '{"openConversationId":<..>, "categoryIds":<..>}' |
lark im 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--category-ids: invalid integer "x"输入 / CLI 输出输入 dws chat +category-add-conversation --group x --category-ids x --yes stdout (空) stderr / error --category-ids: invalid integer "x" 最终用于判定的返回 --category-ids: invalid integer "x" 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1213ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test chat +category-add-conversation --group cidDWSREALTESTNOSUCHCONV --category-ids 999999999999 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[RESOURCE_NOT_FOUND] Requested resource not found (operation: im/add_conv_to_categories)\n hint: Check if the resource exists or if your account has permission",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999117776203e08f9"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[RESOURCE_NOT_FOUND] Requested resource not found (operation: im/add_conv_to_categories)\n hint: Check if the resource exists or if your account has permission",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999117776203e08f9"
+ }
+} |
||
dws chat +category-create --title <title>write创建用户自定义会话分组 |
dws mcp im create_conv_category --json '{"title":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/create_conv_category输入 / CLI 输出输入 dws chat +category-create --title x --yes stdout {
+ "_fake": true,
+ "args": {
+ "title": "x"
+ },
+ "product": "im",
+ "tool": "create_conv_category"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "title": "x"
+ },
+ "product": "im",
+ "tool": "create_conv_category"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=959ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +category-create --title 'DWS测0715' --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "categoryId": 1784081668329
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "categoryId": 1784081668329
+ },
+ "success": true
+} |
||
dws chat +category-delete --category-id <category-id>high-risk-write删除用户自定义会话分组 |
dws mcp im delete_conv_category --json '{"categoryId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/delete_conv_category输入 / CLI 输出输入 dws chat +category-delete --category-id 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "categoryId": 1
+ },
+ "product": "im",
+ "tool": "delete_conv_category"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "categoryId": 1
+ },
+ "product": "im",
+ "tool": "delete_conv_category"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1378ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +category-delete --category-id 1784081668329 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "success": true
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "success": true
+ },
+ "success": true
+} |
||
dws chat +category-listread获取用户自定义会话分组 |
dws mcp im <tool> |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/list_user_define_conv_categories输入 / CLI 输出输入 dws chat +category-list --yes stdout {
+ "categories": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "categories": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1326ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +category-list --yes --format json 真实 stdout {
+ "categories": [
+ {
+ "categoryId": 1561691365563,
+ "title": "大型摸鱼现场"
+ },
+ {
+ "categoryId": 1761880390389,
+ "title": "悟空"
+ },
+ {
+ "categoryId": 1561692216352,
+ "title": "钉钉"
+ },
+ {
+ "categoryId": 1761880350586,
+ "title": "RELU"
+ },
+ {
+ "categoryId": 1767577825401,
+ "title": "X Project"
+ },
+ {
+ "categoryId": 1770100726133,
+ "title": "A1合作"
+ },
+ {
+ "categoryId": 1764209474291,
+ "title": "CodeAgent"
+ },
+ {
+ "categoryId": 1764818531490,
+ "title": "DeepResearch"
+ },
+ {
+ "categoryId": 1765771015868,
+ "title": "J Project"
+ },
+ {
+ "categoryId": 1761881089886,
+ "title": "客户服务"
+ }
+ ],
+ "count": 10
+}真实 stderr / error (空) 真实返回 {
+ "categories": [
+ {
+ "categoryId": 1561691365563,
+ "title": "大型摸鱼现场"
+ },
+ {
+ "categoryId": 1761880390389,
+ "title": "悟空"
+ },
+ {
+ "categoryId": 1561692216352,
+ "title": "钉钉"
+ },
+ {
+ "categoryId": 1761880350586,
+ "title": "RELU"
+ },
+ {
+ "categoryId": 1767577825401,
+ "title": "X Project"
+ },
+ {
+ "categoryId": 1770100726133,
+ "title": "A1合作"
+ },
+ {
+ "categoryId": 1764209474291,
+ "title": "CodeAgent"
+ },
+ {
+ "categoryId": 1764818531490,
+ "title": "DeepResearch"
+ },
+ {
+ "categoryId": 1765771015868,
+ "title": "J Project"
+ },
+ {
+ "categoryId": 1761881089886,
+ "title": "客户服务"
+ }
+ ],
+ "count": 10
+} |
||
dws chat +category-list-conversations --category-id <category-id> --exclude-muted <exclude-muted>read拉取指定自定义会话分组下的会话 |
dws mcp im <tool> |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/list_conversations_by_category输入 / CLI 输出输入 dws chat +category-list-conversations --category-id 1 --exclude-muted --yes stdout {
+ "conversations": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "conversations": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1445ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test chat +category-list-conversations --category-id 1 --exclude-muted --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] listConversationsByCategoryV2 error\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "0bb7c36217840997724375834e0758"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] listConversationsByCategoryV2 error\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "0bb7c36217840997724375834e0758"
+ }
+} |
||
dws chat +category-remove-conversation --group <group> --category-ids <category-ids>write将会话从指定的自定义分组中移出 |
dws mcp im remove_conv_from_categories --json '{"openConversationId":<..>, "categoryIds":<..>}' |
lark im 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--category-ids: invalid integer "x"输入 / CLI 输出输入 dws chat +category-remove-conversation --group x --category-ids x --yes stdout (空) stderr / error --category-ids: invalid integer "x" 最终用于判定的返回 --category-ids: invalid integer "x" 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1309ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test chat +category-remove-conversation --group cidDWSREALTESTNOSUCHCONV --category-ids 999999999999 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[RESOURCE_NOT_FOUND] Requested resource not found (operation: im/remove_conv_from_categories)\n hint: Check if the resource exists or if your account has permission",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999130466520e085e"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[RESOURCE_NOT_FOUND] Requested resource not found (operation: im/remove_conv_from_categories)\n hint: Check if the resource exists or if your account has permission",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999130466520e085e"
+ }
+} |
||
dws chat +category-rename --category-id <category-id> --title <title>write更新用户自定义会话分组的名称 |
dws mcp im rename_conv_category --json '{"categoryId":<..>, "title":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/rename_conv_category输入 / CLI 输出输入 dws chat +category-rename --category-id 1 --title x --yes stdout {
+ "_fake": true,
+ "args": {
+ "categoryId": 1,
+ "title": "x"
+ },
+ "product": "im",
+ "tool": "rename_conv_category"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "categoryId": 1,
+ "title": "x"
+ },
+ "product": "im",
+ "tool": "rename_conv_category"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1225ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +category-rename --category-id 1784081668329 --title 'DWS改0715' --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+} |
||
dws chat +chat-add-bot --robot-code <robot-code> --id <id>write将机器人添加到群中 |
dws mcp bot add_robot_to_group --json '{"robotCode":<..>, "openConversationId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; bot/add_robot_to_group输入 / CLI 输出输入 dws chat +chat-add-bot --robot-code x --id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "robotCode": "x"
+ },
+ "product": "bot",
+ "tool": "add_robot_to_group"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "robotCode": "x"
+ },
+ "product": "bot",
+ "tool": "add_robot_to_group"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1273ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test chat +chat-add-bot --robot-code __DWS_SHORTCUT_REAL_TEST_NO_SUCH_ROBOT__ --id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[RESOURCE_NOT_FOUND] Requested resource not found (operation: bot/add_robot_to_group)\n hint: Check if the resource exists or if your account has permission",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "500025",
+ "server_key": "bot",
+ "trace_id": "2104a64c17840999144193460e08c7"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[RESOURCE_NOT_FOUND] Requested resource not found (operation: bot/add_robot_to_group)\n hint: Check if the resource exists or if your account has permission",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "500025",
+ "server_key": "bot",
+ "trace_id": "2104a64c17840999144193460e08c7"
+ }
+} |
||
dws chat +chat-audit-join --group <group> --record-id <record-id> --applicant <applicant> --inviter <inviter> --status <status> --description <description>write审批入群验证(通过/拒绝/删除/忽略/拉黑) |
-dws mcp im audit_join_group --json '{"openConversationId":<..>, "applyRecordId":<..>, "applicantOpenDingTalkId":<..>, "inviterOpenDingTalkId":<..>, "status":<..>, "auditDescription":<..>}' |
+dws mcp im audit_join_group --json '{"openConversationId":<..>, "applyRecordId":<..>, "applicantUid":<..>, "inviterUid":<..>, "status":<..>, "auditDescription":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/audit_join_group输入 / CLI 输出输入 dws chat +chat-audit-join --group x --record-id 1 --applicant x --inviter x --status AuditApprove --description x --yes stdout {
+ "_fake": true,
+ "args": {
+ "applicantUid": "x",
+ "applyRecordId": 1,
+ "auditDescription": "x",
+ "inviterUid": "x",
+ "openConversationId": "x",
+ "status": "AuditApprove"
+ },
+ "product": "im",
+ "tool": "audit_join_group"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "applicantUid": "x",
+ "applyRecordId": 1,
+ "auditDescription": "x",
+ "inviterUid": "x",
+ "openConversationId": "x",
+ "status": "AuditApprove"
+ },
+ "product": "im",
+ "tool": "audit_join_group"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1073ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +dry-run 已证明 CLI 装配了 applicantUid/inviterUid;真实后端仍报 applicantUid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +chat-audit-join --group cidDWSREALTESTNOSUCHCONV --record-id 999999999999 --applicant 103262 --inviter 519019 --status AuditApprove --description 'DWS shortcut 真实测试描述,可删除' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] applicantUid is required (operation: im/audit_join_group)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "0bb7c36217840999154832733e0758"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] applicantUid is required (operation: im/audit_join_group)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "0bb7c36217840999154832733e0758"
+ }
+} |
|
dws chat +chat-bots --group <group>read查看群内所有机器人 |
dws mcp bot <tool> |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; bot/list_group_bots输入 / CLI 输出输入 dws chat +chat-bots --group x --yes stdout {
+ "bots": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "bots": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=907ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-bots --group cid3Jijzhe2aqs9ysOXjhi05g== --yes --format json 真实 stdout {
+ "bots": [],
+ "count": 0
+}真实 stderr / error (空) 真实返回 {
+ "bots": [],
+ "count": 0
+} |
||
dws chat +chat-dismiss --group <group>high-risk-write解散群聊(不可逆,需群主权限) |
dws mcp im dismiss_group --json '{"openConversationId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/dismiss_group输入 / CLI 输出输入 dws chat +chat-dismiss --group x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "dismiss_group"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "dismiss_group"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1120ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-dismiss --group cidXgIVDDzZE7kdQ+bcp3gWNw== --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+} |
||
dws chat +chat-get-by-id --group-id <group-id>read根据群号获取群聊信息 |
dws mcp im get_conv_info_by_group_id --json '{"groupId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/get_conv_info_by_group_id输入 / CLI 输出输入 dws chat +chat-get-by-id --group-id 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "groupId": 1
+ },
+ "product": "im",
+ "tool": "get_conv_info_by_group_id"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "groupId": 1
+ },
+ "product": "im",
+ "tool": "get_conv_info_by_group_id"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1462ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +chat-get-by-id --group-id 1 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] verifyGroupId error: The group id does not exit (operation: im/get_conv_info_by_group_id)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840997739165535e07bd"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] verifyGroupId error: The group id does not exit (operation: im/get_conv_info_by_group_id)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840997739165535e07bd"
+ }
+} |
||
dws chat +chat-invite-url --group <group> --expires-seconds <expires-seconds>read获取群邀请链接 |
-dws mcp im get_group_invite_url --json '{"openConversationId":<..>, "expiresSeconds":<..>}' |
+dws mcp im get_group_invite_url --json '{"openConversationId":<..>, "cid":<..>, "expiresSeconds":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/get_group_invite_url输入 / CLI 输出输入 dws chat +chat-invite-url --group x --expires-seconds 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "expiresSeconds": 1,
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "get_group_invite_url"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "expiresSeconds": 1,
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "get_group_invite_url"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=958ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-invite-url --group cid3Jijzhe2aqs9ysOXjhi05g== --expires-seconds 1 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "inviteUrl": "https://qr.dingtalk.com/action/joingroup?code=v1,k1,Rj9aR+97xuRdK0cKsvoU/daj0MZj7p02n7pETjkgcMo=\u0026_dt_no_comment=1\u0026origin=11"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "inviteUrl": "https://qr.dingtalk.com/action/joingroup?code=v1,k1,Rj9aR+97xuRdK0cKsvoU/daj0MZj7p02n7pETjkgcMo=\u0026_dt_no_comment=1\u0026origin=11"
+ },
+ "success": true
+} |
|
dws chat +chat-list-all --limit <limit> --cursor <cursor>read分页拉取我加入的所有群列表 |
dws mcp im <tool> |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/list_my_groups_pagination输入 / CLI 输出输入 dws chat +chat-list-all --limit 1 --cursor x --yes stdout {
+ "count": 0,
+ "groups": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "groups": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1043ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-list-all --limit 10 --cursor 0 --yes --format json 真实 stdout {
+ "count": 9,
+ "groups": [
+ {
+ "name": "浅曦-kida,Dennis,秋画",
+ "openConversationId": "cid3Jijzhe2aqs9ysOXjhi05g=="
+ },
+ {
+ "name": "Dennis,梨岚,浅曦,秋画",
+ "openConversationId": "cidBRb3r823j/rs8mGdPervyQ=="
+ },
+ {
+ "name": "HISTORE_DINGDING_VOIP_APP",
+ "openConversationId": "cid68WRQRLAWFUvSWPjFTxQEg=="
+ },
+ {
+ "name": "钉钉19届应届生校招群",
+ "openConversationId": "cidsXjWvcYMguAWhhE6x1PsRw=="
+ },
+ {
+ "name": "钉钉尖角班第21期欢迎你!",
+ "openConversationId": "cid2YTSHeguqsO/PjSu33/IRA=="
+ },
+ {
+ "name": "钉子户",
+ "openConversationId": "cidCVNiNIaY1vsA6Hp0rUvk7w=="
+ },
+ {
+ "name": "应用通知",
+ "openConversationId": "cidPrcdDg1wZb3/0oQRIWxVRw=="
+ },
+ {
+ "name": "三口之家",
+ "openConversationId": "cid8eLJsKOY3EwulLUqD3jVbA=="
+ },
+ {
+ "name": "工作通知:三口之家",
+ "openConversationId": "cidAHnUfD5n2F+Ybdsqeu9ymQ=="
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 9,
+ "groups": [
+ {
+ "name": "浅曦-kida,Dennis,秋画",
+ "openConversationId": "cid3Jijzhe2aqs9ysOXjhi05g=="
+ },
+ {
+ "name": "Dennis,梨岚,浅曦,秋画",
+ "openConversationId": "cidBRb3r823j/rs8mGdPervyQ=="
+ },
+ {
+ "name": "HISTORE_DINGDING_VOIP_APP",
+ "openConversationId": "cid68WRQRLAWFUvSWPjFTxQEg=="
+ },
+ {
+ "name": "钉钉19届应届生校招群",
+ "openConversationId": "cidsXjWvcYMguAWhhE6x1PsRw=="
+ },
+ {
+ "name": "钉钉尖角班第21期欢迎你!",
+ "openConversationId": "cid2YTSHeguqsO/PjSu33/IRA=="
+ },
+ {
+ "name": "钉子户",
+ "openConversationId": "cidCVNiNIaY1vsA6Hp0rUvk7w=="
+ },
+ {
+ "name": "应用通知",
+ "openConversationId": "cidPrcdDg1wZb3/0oQRIWxVRw=="
+ },
+ {
+ "name": "三口之家",
+ "openConversationId": "cid8eLJsKOY3EwulLUqD3jVbA=="
+ },
+ {
+ "name": "工作通知:三口之家",
+ "openConversationId": "cidAHnUfD5n2F+Ybdsqeu9ymQ=="
+ }
+ ]
+} |
||
dws chat +chat-list-join-requests --limit <limit> --cursor <cursor>read分页拉取入群验证记录 |
dws mcp im list_apply_join_group_records --json '{"limit":<..>, "cursor":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/list_apply_join_group_records输入 / CLI 输出输入 dws chat +chat-list-join-requests --limit 1 --cursor x --yes stdout {
+ "_fake": true,
+ "args": {
+ "cursor": "x",
+ "limit": 1
+ },
+ "product": "im",
+ "tool": "list_apply_join_group_records"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cursor": "x",
+ "limit": 1
+ },
+ "product": "im",
+ "tool": "list_apply_join_group_records"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=960ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-list-join-requests --limit 10 --cursor 0 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "hasMore": false,
+ "nextCursor": 0,
+ "records": []
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "hasMore": false,
+ "nextCursor": 0,
+ "records": []
+ },
+ "success": true
+} |
||
dws chat +chat-list-mine --role <role> --limit <limit> --exclude-muted <exclude-muted>read拉取我创建/管理的群 |
dws mcp im <tool> |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/list_owned_or_admin_groups输入 / CLI 输出输入 dws chat +chat-list-mine --role OWNER --limit 1 --exclude-muted --yes stdout {
+ "count": 0,
+ "groups": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "groups": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1799ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-list-mine --role OWNER --limit 10 --exclude-muted --yes --format json 真实 stdout {
+ "count": 10,
+ "groups": [
+ {
+ "name": "DING_VIBE_CODING没统计到token的问题",
+ "openConversationId": "cidl/foiVj/HRZjBxQI4+Y81g=="
+ },
+ {
+ "name": "钉钉 EveryDay X RELU 共创",
+ "openConversationId": "cid7XlLm5toebOyqw0J3GJfmA=="
+ },
+ {
+ "name": "中控测试",
+ "openConversationId": "cidwnTdZmw2YMznZKLOmws9VQ=="
+ },
+ {
+ "name": "国粹候选人",
+ "openConversationId": "cidw+0WK0/N8nrKwvcgpg6AJQ=="
+ },
+ {
+ "name": "X 项目算法支持",
+ "openConversationId": "cidbDGRPLyhdI1/b85MiUSz5Q=="
+ },
+ {
+ "name": "悟空 Agent Runtime Scrum",
+ "openConversationId": "cidCAHeQDMT93RTArxiqBJLiA=="
+ },
+ {
+ "name": "电商刊登接入CodeAgent",
+ "openConversationId": "cid6IhuGpSIpuosGTGusYUc2g=="
+ },
+ {
+ "name": "0529机器人 && 移动端中控问题跟进",
+ "openConversationId": "cidXMfbCGTSiHzLLaRV5WDXgw=="
+ },
+ {
+ "name": "念晨,伊玲,双数",
+ "openConversationId": "cid/xM8a62lWiQGkfgLi4kfhA=="
+ },
+ {
+ "name": "方齐,念晨,向尘",
+ "openConversationId": "cidpG74/BF0DPbkIHS42XPZZg=="
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 10,
+ "groups": [
+ {
+ "name": "DING_VIBE_CODING没统计到token的问题",
+ "openConversationId": "cidl/foiVj/HRZjBxQI4+Y81g=="
+ },
+ {
+ "name": "钉钉 EveryDay X RELU 共创",
+ "openConversationId": "cid7XlLm5toebOyqw0J3GJfmA=="
+ },
+ {
+ "name": "中控测试",
+ "openConversationId": "cidwnTdZmw2YMznZKLOmws9VQ=="
+ },
+ {
+ "name": "国粹候选人",
+ "openConversationId": "cidw+0WK0/N8nrKwvcgpg6AJQ=="
+ },
+ {
+ "name": "X 项目算法支持",
+ "openConversationId": "cidbDGRPLyhdI1/b85MiUSz5Q=="
+ },
+ {
+ "name": "悟空 Agent Runtime Scrum",
+ "openConversationId": "cidCAHeQDMT93RTArxiqBJLiA=="
+ },
+ {
+ "name": "电商刊登接入CodeAgent",
+ "openConversationId": "cid6IhuGpSIpuosGTGusYUc2g=="
+ },
+ {
+ "name": "0529机器人 && 移动端中控问题跟进",
+ "openConversationId": "cidXMfbCGTSiHzLLaRV5WDXgw=="
+ },
+ {
+ "name": "念晨,伊玲,双数",
+ "openConversationId": "cid/xM8a62lWiQGkfgLi4kfhA=="
+ },
+ {
+ "name": "方齐,念晨,向尘",
+ "openConversationId": "cidpG74/BF0DPbkIHS42XPZZg=="
+ }
+ ]
+} |
||
dws chat +chat-members-get --id <id> --users <users>read根据成员 openDingTalkId 批量查询群成员详情 |
-dws mcp im list_group_member_by_ids --json '{"openConversationId":<..>, "memberOpenDingTalkIds":<..>}' |
+dws mcp im list_group_member_by_ids --json '{"openConversationId":<..>, "cid":<..>, "memberOpenDingTalkIds":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/list_group_member_by_ids输入 / CLI 输出输入 dws chat +chat-members-get --id x --users x --yes stdout {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "memberOpenDingTalkIds": [
+ "x"
+ ],
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "list_group_member_by_ids"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "memberOpenDingTalkIds": [
+ "x"
+ ],
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "list_group_member_by_ids"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1518ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +chat-members-get --id DWSREALREADNOSUCHID0000000000000 --users '冬翔' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openCid or cid is required (operation: im/list_group_member_by_ids)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840997754345760e07bd"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openCid or cid is required (operation: im/list_group_member_by_ids)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840997754345760e07bd"
+ }
+} |
|
dws chat +chat-messages --group <group> --user <user> --time <time> --limit <limit> --direction <direction>read拉取某个会话(群聊或单聊)的消息列表并投影出发言人/文本/时间 |
-dws mcp chat <tool> |
+dws chat +chat-messages --group <group> --user <user> --time <time> --limit <limit> --direction <direction>read复合/智能型拉取某个会话(群聊或单聊)的消息列表并投影出发言人/文本/时间 |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark im 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);参数 --group、--user 只能指定其一(当前指定了 --group、--user)输入 / CLI 输出输入 dws chat +chat-messages --group x --user x --time x --limit 1 --direction x --yes stdout (空) stderr / error 参数 --group、--user 只能指定其一(当前指定了 --group、--user) 最终用于判定的返回 参数 --group、--user 只能指定其一(当前指定了 --group、--user) 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1328ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +chat-messages --group cid3Jijzhe2aqs9ysOXjhi05g== --time '2026-07-15 10:00:00' --limit 10 --direction older --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openCid or cid is required\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "chat",
+ "trace_id": "2104a64c17840997767792656e085e"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openCid or cid is required\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "chat",
+ "trace_id": "2104a64c17840997767792656e085e"
+ }
+} |
dws chat +chat-mute --group <group> --off <off>write全员禁言 / 取消全员禁言 |
dws mcp im set_group_mute --json '{"openConversationId":<..>, "mute":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/set_group_mute输入 / CLI 输出输入 dws chat +chat-mute --group x --off --yes stdout {
+ "_fake": true,
+ "args": {
+ "mute": false,
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "set_group_mute"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "mute": false,
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "set_group_mute"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1252ms;real-backend-manual-write cleanup/unmute; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-mute --group cidXgIVDDzZE7kdQ+bcp3gWNw== --off --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+} |
||
dws chat +chat-mute-member --group <group> --users <users> --mute-time <mute-time> --off <off>write指定群成员禁言 / 取消禁言 |
-dws mcp im set_group_member_mute_list --json '{"openConversationId":<..>, "mute":<..>, "uids":<..>, "openDingTalkIds":<..>, "muteTime":<..>}' |
+dws mcp im set_group_member_mute_list --json '{"openConversationId":<..>, "cid":<..>, "mute":<..>, "uids":<..>, "openDingTalkIds":<..>, "muteTime":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/set_group_member_mute_list输入 / CLI 输出输入 dws chat +chat-mute-member --group x --users x --mute-time 1 --off --yes stdout {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "mute": false,
+ "openConversationId": "x",
+ "uids": [
+ "x"
+ ]
+ },
+ "product": "im",
+ "tool": "set_group_member_mute_list"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "mute": false,
+ "openConversationId": "x",
+ "uids": [
+ "x"
+ ]
+ },
+ "product": "im",
+ "tool": "set_group_member_mute_list"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1139ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +chat-mute-member --group cidDWSREALTESTNOSUCHCONV --users __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --mute-time 1 --off --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/set_group_member_mute_list)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999166036583e08a3"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/set_group_member_mute_list)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999166036583e08a3"
+ }
+} |
|
dws chat +chat-quit --group <group>write退出群聊 |
dws mcp im quit_group --json '{"openConversationId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/quit_group输入 / CLI 输出输入 dws chat +chat-quit --group x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "quit_group"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "quit_group"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1162ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test chat +chat-quit --group cidDWSREALTESTNOSUCHCONV --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] listBaseConversationByIds error (operation: im/quit_group)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "0bb7c36217840999176728426e0779"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] listBaseConversationByIds error (operation: im/quit_group)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "0bb7c36217840999176728426e0779"
+ }
+} |
||
dws chat +chat-remove-bot --id <id> --bot-id <bot-id>high-risk-write从群内移除机器人 |
dws mcp bot remove_robot_in_group --json '{"openConversationId":<..>, "openBotId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; bot/remove_robot_in_group输入 / CLI 输出输入 dws chat +chat-remove-bot --id x --bot-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openBotId": "x",
+ "openConversationId": "x"
+ },
+ "product": "bot",
+ "tool": "remove_robot_in_group"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openBotId": "x",
+ "openConversationId": "x"
+ },
+ "product": "bot",
+ "tool": "remove_robot_in_group"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1220ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +chat-remove-bot --id DWSREALTESTNOSUCHID0000000000000 --bot-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 无效的会话 (operation: bot/remove_robot_in_group)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "500009",
+ "server_key": "bot",
+ "trace_id": "0b5deb3217840999189888305e08b5"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 无效的会话 (operation: bot/remove_robot_in_group)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "500009",
+ "server_key": "bot",
+ "trace_id": "0b5deb3217840999189888305e08b5"
+ }
+} |
||
dws chat +chat-role-add --group <group> --name <name>write添加群身份 |
dws mcp im add_custom_group_role --json '{"openConversationId":<..>, "name":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/add_custom_group_role输入 / CLI 输出输入 dws chat +chat-role-add --group x --name x --yes stdout {
+ "_fake": true,
+ "args": {
+ "name": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "add_custom_group_role"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "name": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "add_custom_group_role"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1281ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-role-add --group cidXgIVDDzZE7kdQ+bcp3gWNw== --name 'DWS测试角色' --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "openRoleId": "role9G67RdPFmhF1VxBpguhr1QiEiE"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "openRoleId": "role9G67RdPFmhF1VxBpguhr1QiEiE"
+ },
+ "success": true
+} |
||
dws chat +chat-role-list --group <group>read拉取会话的群身份列表 |
dws mcp im <tool> |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/list_custom_group_roles输入 / CLI 输出输入 dws chat +chat-role-list --group x --yes stdout {
+ "count": 0,
+ "roles": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "roles": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=928ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-role-list --group cid3Jijzhe2aqs9ysOXjhi05g== --yes --format json 真实 stdout {
+ "count": 0,
+ "roles": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "roles": []
+} |
||
dws chat +chat-role-query-user --group <group> --user <user>read查询群成员的群身份 |
dws mcp im query_custom_user_roles --json '{"openConversationId":<..>, "openDingTalkId":<..>, "userId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/query_custom_user_roles输入 / CLI 输出输入 dws chat +chat-role-query-user --group x --user x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "userId": "x"
+ },
+ "product": "im",
+ "tool": "query_custom_user_roles"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "userId": "x"
+ },
+ "product": "im",
+ "tool": "query_custom_user_roles"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=958ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-role-query-user --group cid3Jijzhe2aqs9ysOXjhi05g== --user '冬翔' --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "roles": []
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "roles": []
+ },
+ "success": true
+} |
||
dws chat +chat-role-remove --group <group> --role-id <role-id>high-risk-write删除群身份 |
dws mcp im remove_custom_group_role --json '{"openConversationId":<..>, "openRoleId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/remove_custom_group_role输入 / CLI 输出输入 dws chat +chat-role-remove --group x --role-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openRoleId": "x"
+ },
+ "product": "im",
+ "tool": "remove_custom_group_role"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openRoleId": "x"
+ },
+ "product": "im",
+ "tool": "remove_custom_group_role"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1054ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test chat +chat-role-remove --group cidDWSREALTESTNOSUCHCONV --role-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] listBaseConversationByIds error (operation: im/remove_custom_group_role)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840999200483204e079c"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] listBaseConversationByIds error (operation: im/remove_custom_group_role)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840999200483204e079c"
+ }
+} |
||
dws chat +chat-role-remove-user --group <group> --user <user> --role-ids <role-ids>write移除用户的指定群身份 |
dws mcp im remove_custom_user_roles --json '{"openConversationId":<..>, "openRoleIds":<..>, "openDingTalkId":<..>, "userId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/remove_custom_user_roles输入 / CLI 输出输入 dws chat +chat-role-remove-user --group x --user x --role-ids x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openRoleIds": [
+ "x"
+ ],
+ "userId": "x"
+ },
+ "product": "im",
+ "tool": "remove_custom_user_roles"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openRoleIds": [
+ "x"
+ ],
+ "userId": "x"
+ },
+ "product": "im",
+ "tool": "remove_custom_user_roles"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1104ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test chat +chat-role-remove-user --group cidDWSREALTESTNOSUCHCONV --user __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --role-ids DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] listBaseConversationByIds error (operation: im/remove_custom_user_roles)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840999211317952e0757"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] listBaseConversationByIds error (operation: im/remove_custom_user_roles)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840999211317952e0757"
+ }
+} |
||
dws chat +chat-role-set-user --group <group> --user <user> --role-ids <role-ids>write设置用户的群身份(覆盖该用户的全部群身份) |
dws mcp im set_custom_user_roles --json '{"openConversationId":<..>, "openRoleIds":<..>, "openDingTalkId":<..>, "userId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/set_custom_user_roles输入 / CLI 输出输入 dws chat +chat-role-set-user --group x --user x --role-ids x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openRoleIds": [
+ "x"
+ ],
+ "userId": "x"
+ },
+ "product": "im",
+ "tool": "set_custom_user_roles"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openRoleIds": [
+ "x"
+ ],
+ "userId": "x"
+ },
+ "product": "im",
+ "tool": "set_custom_user_roles"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1355ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-role-set-user --group cidXgIVDDzZE7kdQ+bcp3gWNw== --user 103262 --role-ids role9G67RdPFmhF1VxBpguhr1QiEiE --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+} |
||
dws chat +chat-role-update --group <group> --role-id <role-id> --name <name>write更新群身份名称 |
dws mcp im update_custom_group_role --json '{"openConversationId":<..>, "openRoleId":<..>, "name":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/update_custom_group_role输入 / CLI 输出输入 dws chat +chat-role-update --group x --role-id x --name x --yes stdout {
+ "_fake": true,
+ "args": {
+ "name": "x",
+ "openConversationId": "x",
+ "openRoleId": "x"
+ },
+ "product": "im",
+ "tool": "update_custom_group_role"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "name": "x",
+ "openConversationId": "x",
+ "openRoleId": "x"
+ },
+ "product": "im",
+ "tool": "update_custom_group_role"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1366ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-role-update --group cidXgIVDDzZE7kdQ+bcp3gWNw== --role-id role9G67RdPFmhF1VxBpguhr1QiEiE --name 'DWS角色改' --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+} |
||
dws chat +chat-search --query <query> --limit <limit> --cursor <cursor> --exclude-muted <exclude-muted>read按关键词搜索群聊 |
dws mcp im search_groups --json '{"keyword":<..>, "limit":<..>, "cursor":<..>, "excludeMuted":<..>}' |
lark-cli im +chat-search |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/search_groups输入 / CLI 输出输入 dws chat +chat-search --query x --limit 1 --cursor x --exclude-muted --yes stdout {
+ "_fake": true,
+ "args": {
+ "cursor": "x",
+ "excludeMuted": true,
+ "keyword": "x",
+ "limit": 1
+ },
+ "product": "im",
+ "tool": "search_groups"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cursor": "x",
+ "excludeMuted": true,
+ "keyword": "x",
+ "limit": 1
+ },
+ "product": "im",
+ "tool": "search_groups"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1176ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-search --query '测试' --limit 10 --cursor 0 --exclude-muted --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "groups": [
+ {
+ "channel": false,
+ "createAt": "2026-06-09 09:21:07",
+ "extension": {
+ "newCSpaceIdIM": "29001572040"
+ },
+ "groupType": "INTERNAL_GROUP",
+ "memberCount": 4,
+ "openConversationId": "cidYmSrmbqMM/OseCzcs4cJdg==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "title": "测试群已废弃"
+ },
+ {
+ "channel": false,
+ "createAt": "2026-06-09 09:21:00",
+ "extension": {
+ "newCSpaceIdIM": "29001813316"
+ },
+ "groupType": "INTERNAL_GROUP",
+ "memberCount": 3,
+ "openConversationId": "cidSIMPP2TD6HZcn1nO0mVNoA==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "title": "测试群已废弃"
+ },
+ {
+ "channel": false,
+ "createAt": "2026-05-13 16:22:30",
+ "extension": {
+ "newCSpaceIdIM": "28540426059"
+ },
+ "groupType": "INTERNAL_GROUP",
+ "memberCount": 70,
+ "openConversationId": "cidU38vTWZbweyBRT71Md/KJQ==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UXSDzdMWL3Ls3VUvhTCwbT",
+ "title": "测试项目沟通群"
+ },
+ {
+ "channel": false,
+ "createAt": "2026-04-24 11:49:36",
+ "extension": {
+ "newCSpaceIdIM": "28740101247"
+ },
+ "groupType": "INTERNAL_GROUP",
+ "memberCount": 2,
+ "openConversationId": "cidOpAz1EH8TLuD9H1Who48pw==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "title": "测试项目沟通群"
+ },
+ {
+ "channel": false,
+ "createAt": "2026-06-26 14:05:19",
+ "extension": {
+ "newCSpaceIdIM": "29101779299"
+ },
+ "groupType": "INTERNAL_GROUP",
+ "memberCount": 2,
+ "openConversationId": "cidp+Oj7m1gJnx+bCtTn3vhcQ==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "title": "Spur测试"
+ },
+ {
+ "channel": false,
+ "createAt": "2026-07-02 11:26:29",
+ "extension": {
+ "newCSpaceIdIM": "29137611383"
+ },
+ "groupType": "NEW_EXTERNAL_GROUP",
+ "memberCount": 1,
+ "openConversationId": "cidwnTdZmw2YMznZKLOmws9VQ==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "title": "中控测试"
+ },
+ {
+ "channel": false,
+ "createAt": "2026-06-09 11:03:12",
+ "extension": {
+ "newCSpaceIdIM": "29002815625"
+ },
+ "groupType": "INTERNAL_GROUP",
+ "memberCount": 2,
+ "openConversationId": "cid3hq0VEj6C6FtEtDsWCtNwg==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "title": "评测复盘讨论群-测试"
+ },
+ {
+ "channel": true,
+ "createAt": "2026-03-24 18:10:34",
+ "extension": {
+ "newCSpaceIdIM": "28494427717"
+ },
+ "groupType": "NEW_EXTERNAL_GROUP",
+ "memberCount": 2628,
+ "openConversationId": "cidm6kkku3iW/ddE/DuoWOEnQ==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3XSNFHTUgOrXFyf7hpLIgii2",
+ "title": "悟空问题反馈群"
+ },
+ {
+ "channel": false,
+ "createAt": "2026-05-13 16:23:30",
+ "extension": {
+ "newCSpaceIdIM": "28540433569"
+ },
+ "groupType": "INTERNAL_GROUP",
+ "memberCount": 71,
+ "openConversationId": "cidzoNLz/wgp7gRm/mRph+MxA==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UXSDzdMWL3Ls3VUvhTCwbT",
+ "title": "日常消息同步群"
+ }
+ ],
+ "hasMore": true,
+ "nextCursor": "da8b2b5ea0a50c4ae90dcf38edde9f52425c3bb1dd7cb1eddf53e7db6b73b3c4299e03fd01b0cf917b20e2f46a4f5e13bb7a1bd722cf6c4a372c6971d3c37fb7a3301ae0e438d2556a38ae1fc9c6ee9c110732c3d5d829998a367dc7ebd3a0f639e2dc0841255be944cf07a406575e4cbee22cfca7f309a6bba4d6c35f7d3bd05ce9af894fd2f107f264c0c16d61f6c778e2c2e5c3ea05bc0f77ae6cd7bf402f77218ef7439e2483e5348b3cc40b6a28eeb87bc58925bff5a69d0b080d3818ef1eed93958ffb401cb286b4e885564950f46fa42ad85b4161fd5752f840865648c4e2a89a26f8e241ee476d17a8a2352feb4e1f7d97b28d69aeba429b1e6565fd9acc3e2aa71ec6c05d0a31d90c451aa3"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "groups": [
+ {
+ "channel": false,
+ "createAt": "2026-06-09 09:21:07",
+ "extension": {
+ "newCSpaceIdIM": "29001572040"
+ },
+ "groupType": "INTERNAL_GROUP",
+ "memberCount": 4,
+ "openConversationId": "cidYmSrmbqMM/OseCzcs4cJdg==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "title": "测试群已废弃"
+ },
+ {
+ "channel": false,
+ "createAt": "2026-06-09 09:21:00",
+ "extension": {
+ "newCSpaceIdIM": "29001813316"
+ },
+ "groupType": "INTERNAL_GROUP",
+ "memberCount": 3,
+ "openConversationId": "cidSIMPP2TD6HZcn1nO0mVNoA==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "title": "测试群已废弃"
+ },
+ {
+ "channel": false,
+ "createAt": "2026-05-13 16:22:30",
+ "extension": {
+ "newCSpaceIdIM": "28540426059"
+ },
+ "groupType": "INTERNAL_GROUP",
+ "memberCount": 70,
+ "openConversationId": "cidU38vTWZbweyBRT71Md/KJQ==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UXSDzdMWL3Ls3VUvhTCwbT",
+ "title": "测试项目沟通群"
+ },
+ {
+ "channel": false,
+ "createAt": "2026-04-24 11:49:36",
+ "extension": {
+ "newCSpaceIdIM": "28740101247"
+ },
+ "groupType": "INTERNAL_GROUP",
+ "memberCount": 2,
+ "openConversationId": "cidOpAz1EH8TLuD9H1Who48pw==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "title": "测试项目沟通群"
+ },
+ {
+ "channel": false,
+ "createAt": "2026-06-26 14:05:19",
+ "extension": {
+ "newCSpaceIdIM": "29101779299"
+ },
+ "groupType": "INTERNAL_GROUP",
+ "memberCount": 2,
+ "openConversationId": "cidp+Oj7m1gJnx+bCtTn3vhcQ==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "title": "Spur测试"
+ },
+ {
+ "channel": false,
+ "createAt": "2026-07-02 11:26:29",
+ "extension": {
+ "newCSpaceIdIM": "29137611383"
+ },
+ "groupType": "NEW_EXTERNAL_GROUP",
+ "memberCount": 1,
+ "openConversationId": "cidwnTdZmw2YMznZKLOmws9VQ==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "title": "中控测试"
+ },
+ {
+ "channel": false,
+ "createAt": "2026-06-09 11:03:12",
+ "extension": {
+ "newCSpaceIdIM": "29002815625"
+ },
+ "groupType": "INTERNAL_GROUP",
+ "memberCount": 2,
+ "openConversationId": "cid3hq0VEj6C6FtEtDsWCtNwg==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "title": "评测复盘讨论群-测试"
+ },
+ {
+ "channel": true,
+ "createAt": "2026-03-24 18:10:34",
+ "extension": {
+ "newCSpaceIdIM": "28494427717"
+ },
+ "groupType": "NEW_EXTERNAL_GROUP",
+ "memberCount": 2628,
+ "openConversationId": "cidm6kkku3iW/ddE/DuoWOEnQ==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3XSNFHTUgOrXFyf7hpLIgii2",
+ "title": "悟空问题反馈群"
+ },
+ {
+ "channel": false,
+ "createAt": "2026-05-13 16:23:30",
+ "extension": {
+ "newCSpaceIdIM": "28540433569"
+ },
+ "groupType": "INTERNAL_GROUP",
+ "memberCount": 71,
+ "openConversationId": "cidzoNLz/wgp7gRm/mRph+MxA==",
+ "ownerOpenDingtalkId": "D1jIqGatuH3UXSDzdMWL3Ls3VUvhTCwbT",
+ "title": "日常消息同步群"
+ }
+ ],
+ "hasMore": true,
+ "nextCursor": "da8b2b5ea0a50c4ae90dcf38edde9f52425c3bb1dd7cb1eddf53e7db6b73b3c4299e03fd01b0cf917b20e2f46a4f5e13bb7a1bd722cf6c4a372c6971d3c37fb7a3301ae0e438d2556a38ae1fc9c6ee9c110732c3d5d829998a367dc7ebd3a0f639e2dc0841255be944cf07a406575e4cbee22cfca7f309a6bba4d6c35f7d3bd05ce9af894fd2f107f264c0c16d61f6c778e2c2e5c3ea05bc0f77ae6cd7bf402f77218ef7439e2483e5348b3cc40b6a28eeb87bc58925bff5a69d0b080d3818ef1eed93958ffb401cb286b4e885564950f46fa42ad85b4161fd5752f840865648c4e2a89a26f8e241ee476d17a8a2352feb4e1f7d97b28d69aeba429b1e6565fd9acc3e2aa71ec6c05d0a31d90c451aa3"
+ },
+ "success": true
+} |
||
dws chat +chat-set-admin --group <group> --users <users> --off <off>write设置 / 取消群管理员 |
dws mcp im update_conv_member_roles --json '{"openConversationId":<..>, "admin":<..>, "uids":<..>, "openDingTalkIds":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/update_conv_member_roles输入 / CLI 输出输入 dws chat +chat-set-admin --group x --users x --off --yes stdout {
+ "_fake": true,
+ "args": {
+ "admin": false,
+ "openConversationId": "x",
+ "uids": [
+ "x"
+ ]
+ },
+ "product": "im",
+ "tool": "update_conv_member_roles"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "admin": false,
+ "openConversationId": "x",
+ "uids": [
+ "x"
+ ]
+ },
+ "product": "im",
+ "tool": "update_conv_member_roles"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1554ms;real-backend-manual-write cleanup/unset-admin; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-set-admin --group cidXgIVDDzZE7kdQ+bcp3gWNw== --users 103262 --off --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+} |
||
dws chat +chat-set-history --group <group> --option <option>write设置新成员入群可查看历史消息范围 |
dws mcp im update_show_history_msg_option --json '{"openConversationId":<..>, "option":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/update_show_history_msg_option输入 / CLI 输出输入 dws chat +chat-set-history --group x --option FORBIDDEN --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "option": "FORBIDDEN"
+ },
+ "product": "im",
+ "tool": "update_show_history_msg_option"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "option": "FORBIDDEN"
+ },
+ "product": "im",
+ "tool": "update_show_history_msg_option"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1219ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-set-history --group cidXgIVDDzZE7kdQ+bcp3gWNw== --option RECENT_100 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+} |
||
dws chat +chat-transfer-owner --group <group> --new-owner <new-owner>write转让群主 |
-dws mcp im transfer_group_owner --json '{"openConversationId":<..>, "newOwnerOpenDingTalkId":<..>, "newOwnerUid":<..>}' |
+dws mcp im transfer_group_owner --json '{"openConversationId":<..>, "cid":<..>, "newOwnerOpenDingTalkId":<..>, "newOwnerUid":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/transfer_group_owner输入 / CLI 输出输入 dws chat +chat-transfer-owner --group x --new-owner x --yes stdout {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "newOwnerUid": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "transfer_group_owner"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "newOwnerUid": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "transfer_group_owner"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1054ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +chat-transfer-owner --group cidDWSREALTESTNOSUCHCONV --new-owner __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId is required (operation: im/transfer_group_owner)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999222318863e087a"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId is required (operation: im/transfer_group_owner)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999222318863e087a"
+ }
+} |
|
dws chat +chat-update-alias --group <group> --alias-title <alias-title>write设置群备注(仅自己可见) |
dws mcp im update_user_group_alias --json '{"openConversationId":<..>, "aliasTitle":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/update_user_group_alias输入 / CLI 输出输入 dws chat +chat-update-alias --group x --alias-title x --yes stdout {
+ "_fake": true,
+ "args": {
+ "aliasTitle": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "update_user_group_alias"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "aliasTitle": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "update_user_group_alias"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1298ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-update-alias --group cidXgIVDDzZE7kdQ+bcp3gWNw== --alias-title 'DWS群备注' --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+} |
||
dws chat +chat-update-icon --group <group> --icon-media-id <icon-media-id>write更新群头像 |
dws mcp im update_group_icon --json '{"openConversationId":<..>, "iconMediaId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/update_group_icon输入 / CLI 输出输入 dws chat +chat-update-icon --group x --icon-media-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "iconMediaId": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "update_group_icon"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "iconMediaId": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "update_group_icon"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1023ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test chat +chat-update-icon --group cidDWSREALTESTNOSUCHCONV --icon-media-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] listBaseConversationByIds error (operation: im/update_group_icon)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999232478654e0819"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] listBaseConversationByIds error (operation: im/update_group_icon)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999232478654e0819"
+ }
+} |
||
dws chat +chat-update-nick --group <group> --nick <nick>write设置当前用户在群内的群昵称 |
dws mcp im update_group_nick --json '{"openConversationId":<..>, "nick":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/update_group_nick输入 / CLI 输出输入 dws chat +chat-update-nick --group x --nick x --yes stdout {
+ "_fake": true,
+ "args": {
+ "nick": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "update_group_nick"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "nick": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "update_group_nick"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1478ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +chat-update-nick --group cidXgIVDDzZE7kdQ+bcp3gWNw== --nick 'DWS测试' --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+} |
||
dws chat +chat-update-settings --group <group> --setting-key <setting-key> --status <status>write更新群设置(settingKey + status) |
dws mcp im update_group_settings --json '{"openConversationId":<..>, "settingKey":<..>, "status":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/update_group_settings输入 / CLI 输出输入 dws chat +chat-update-settings --group x --setting-key x --status 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "settingKey": "x",
+ "status": 1
+ },
+ "product": "im",
+ "tool": "update_group_settings"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "settingKey": "x",
+ "status": 1
+ },
+ "product": "im",
+ "tool": "update_group_settings"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1184ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test chat +chat-update-settings --group cidDWSREALTESTNOSUCHCONV --setting-key x --status 1 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] unsupported setting key: x (operation: im/update_group_settings)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840999244326971e07dd"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] unsupported setting key: x (operation: im/update_group_settings)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840999244326971e07dd"
+ }
+} |
||
dws chat +conversation-clear-all-red-pointwrite清除所有会话红点(全部已读) |
dws mcp im clear_all_red_point |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/clear_all_red_point输入 / CLI 输出输入 dws chat +conversation-clear-all-red-point --yes stdout {
+ "_fake": true,
+ "args": {},
+ "product": "im",
+ "tool": "clear_all_red_point"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {},
+ "product": "im",
+ "tool": "clear_all_red_point"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=13459ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +conversation-clear-all-red-point --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+} |
||
dws chat +conversation-clear-messages --conversation-id <conversation-id>high-risk-write清空当前用户指定会话的聊天记录(仅本人视角,不可逆) |
-dws mcp im clear_conversation_messages --json '{"openConversationId":<..>}' |
+dws mcp im clear_conversation_messages --json '{"openConversationId":<..>, "cid":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/clear_conversation_messages输入 / CLI 输出输入 dws chat +conversation-clear-messages --conversation-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "clear_conversation_messages"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "clear_conversation_messages"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1065ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +conversation-clear-messages --conversation-id cidDWSREALTESTNOSUCHCONV --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/clear_conversation_messages)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840999254816721e079b"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/clear_conversation_messages)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840999254816721e079b"
+ }
+} |
|
dws chat +conversation-clear-red-point --conversation-id <conversation-id>write清除会话红点 |
-dws mcp im clear_conversation_red_point --json '{"openConversationId":<..>}' |
+dws mcp im clear_conversation_red_point --json '{"openConversationId":<..>, "cid":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/clear_conversation_red_point输入 / CLI 输出输入 dws chat +conversation-clear-red-point --conversation-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "clear_conversation_red_point"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "clear_conversation_red_point"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1044ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +conversation-clear-red-point --conversation-id cidDWSREALTESTNOSUCHCONV --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/clear_conversation_red_point)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999265511295e085f"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/clear_conversation_red_point)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999265511295e085f"
+ }
+} |
|
dws chat +conversation-hide --conversation-id <conversation-id>write会话列表中隐藏会话(收到新消息会重新出现) |
-dws mcp im hide_conversation --json '{"openConversationId":<..>}' |
+dws mcp im hide_conversation --json '{"openConversationId":<..>, "cid":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/hide_conversation输入 / CLI 输出输入 dws chat +conversation-hide --conversation-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "hide_conversation"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "hide_conversation"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1064ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +conversation-hide --conversation-id cidDWSREALTESTNOSUCHCONV --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/hide_conversation)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840999276117140e079b"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/hide_conversation)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840999276117140e079b"
+ }
+} |
|
dws chat +conversation-info --group <group> --open-dingtalk-id <open-dingtalk-id>read获取会话信息(群聊传 --group,单聊传 --open-dingtalk-id) |
dws mcp chat get_conversation_info --json '{"openConversationId":<..>, "openDingTalkId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; chat/get_conversation_info输入 / CLI 输出输入 dws chat +conversation-info --group x --open-dingtalk-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openDingTalkId": "x"
+ },
+ "product": "chat",
+ "tool": "get_conversation_info"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openDingTalkId": "x"
+ },
+ "product": "chat",
+ "tool": "get_conversation_info"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=942ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +conversation-info --group cid3Jijzhe2aqs9ysOXjhi05g== --open-dingtalk-id x --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "conversationInfo": {
+ "createAt": "2018-11-13 12:39:07",
+ "extension": {
+ "newCSpaceIdIM": "1090404636"
+ },
+ "memberCount": 3,
+ "openConversationId": "cid3Jijzhe2aqs9ysOXjhi05g==",
+ "ownerNick": "浅曦",
+ "singleChat": false,
+ "title": "浅曦-kida,Dennis,秋画"
+ }
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "conversationInfo": {
+ "createAt": "2018-11-13 12:39:07",
+ "extension": {
+ "newCSpaceIdIM": "1090404636"
+ },
+ "memberCount": 3,
+ "openConversationId": "cid3Jijzhe2aqs9ysOXjhi05g==",
+ "ownerNick": "浅曦",
+ "singleChat": false,
+ "title": "浅曦-kida,Dennis,秋画"
+ }
+ },
+ "success": true
+} |
||
dws chat +conversation-list --limit <limit> --cursor <cursor> --exclude-muted <exclude-muted>read分页获取当前用户的全部会话列表(单聊+群聊) |
dws mcp im <tool> |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/list_all_conversations输入 / CLI 输出输入 dws chat +conversation-list --limit 1 --cursor 1 --exclude-muted --yes stdout {
+ "conversations": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "conversations": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2857ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +conversation-list --limit 10 --cursor 0 --exclude-muted --yes --format json 真实 stdout {
+ "conversations": [
+ {
+ "conversationName": "AI全栈",
+ "openConversationId": "cidGAcU1FHD+D2n3W6d+SXuhw=="
+ },
+ {
+ "conversationName": "念晨",
+ "openConversationId": "cidLw95vHkBXGePhIxRvleOUOtxfWW7v5vcWfa2fdxfxyg="
+ },
+ {
+ "conversationName": "九韶",
+ "openConversationId": "cidJdiIbpqCvEjbCuwHaHwR4A=="
+ },
+ {
+ "conversationName": "战友会",
+ "openConversationId": "cidK7s9XRz94DFkk4raOLduFw=="
+ },
+ {
+ "conversationName": "生煎包",
+ "openConversationId": "cid2CMDRvYP+Aw5ioOfP+se4+txfWW7v5vcWfa2fdxfxyg="
+ },
+ {
+ "conversationName": "Wukong & Real 日志群",
+ "openConversationId": "ciddYsoBxGQrFWR5zJ8lnpPBg=="
+ },
+ {
+ "conversationName": "粤腾",
+ "openConversationId": "cid72F2hVHMoijoL1CvmWp1ImIo0AJKl0bni7qLL0B05PA="
+ },
+ {
+ "conversationName": "算法团队全员群",
+ "openConversationId": "cidXMThCvAfn35/JRu/JOr6BA=="
+ },
+ {
+ "conversationName": "汇量问题反馈✖️skill/mcp",
+ "openConversationId": "cidTm/YDFJ/jgGFYFe3UF6dzA=="
+ },
+ {
+ "conversationName": "亲橙park舒婷水果优惠1群",
+ "openConversationId": "cid9LvgVwAlIvDBduIER4jFQg=="
+ }
+ ],
+ "count": 10
+}真实 stderr / error (空) 真实返回 {
+ "conversations": [
+ {
+ "conversationName": "AI全栈",
+ "openConversationId": "cidGAcU1FHD+D2n3W6d+SXuhw=="
+ },
+ {
+ "conversationName": "念晨",
+ "openConversationId": "cidLw95vHkBXGePhIxRvleOUOtxfWW7v5vcWfa2fdxfxyg="
+ },
+ {
+ "conversationName": "九韶",
+ "openConversationId": "cidJdiIbpqCvEjbCuwHaHwR4A=="
+ },
+ {
+ "conversationName": "战友会",
+ "openConversationId": "cidK7s9XRz94DFkk4raOLduFw=="
+ },
+ {
+ "conversationName": "生煎包",
+ "openConversationId": "cid2CMDRvYP+Aw5ioOfP+se4+txfWW7v5vcWfa2fdxfxyg="
+ },
+ {
+ "conversationName": "Wukong & Real 日志群",
+ "openConversationId": "ciddYsoBxGQrFWR5zJ8lnpPBg=="
+ },
+ {
+ "conversationName": "粤腾",
+ "openConversationId": "cid72F2hVHMoijoL1CvmWp1ImIo0AJKl0bni7qLL0B05PA="
+ },
+ {
+ "conversationName": "算法团队全员群",
+ "openConversationId": "cidXMThCvAfn35/JRu/JOr6BA=="
+ },
+ {
+ "conversationName": "汇量问题反馈✖️skill/mcp",
+ "openConversationId": "cidTm/YDFJ/jgGFYFe3UF6dzA=="
+ },
+ {
+ "conversationName": "亲橙park舒婷水果优惠1群",
+ "openConversationId": "cid9LvgVwAlIvDBduIER4jFQg=="
+ }
+ ],
+ "count": 10
+} |
||
dws chat +conversation-list-top --limit <limit> --cursor <cursor> --exclude-muted <exclude-muted>read拉取置顶会话列表 |
dws mcp chat <tool> |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; chat/list_top_conversations输入 / CLI 输出输入 dws chat +conversation-list-top --limit 1 --cursor 1 --exclude-muted --yes stdout {
+ "conversations": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "conversations": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1091ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +conversation-list-top --limit 10 --cursor 0 --exclude-muted --yes --format json 真实 stdout {
+ "conversations": [],
+ "count": 0
+}真实 stderr / error (空) 真实返回 {
+ "conversations": [],
+ "count": 0
+} |
||
dws chat +conversation-mark-read --conversation-id <conversation-id> --message-id <message-id>write标记消息已读(该消息及之前的消息都标记为已读) |
dws mcp im mark_message_read --json '{"openConversationId":<..>, "openMessageId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/mark_message_read输入 / CLI 输出输入 dws chat +conversation-mark-read --conversation-id x --message-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openMessageId": "x"
+ },
+ "product": "im",
+ "tool": "mark_message_read"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openMessageId": "x"
+ },
+ "product": "im",
+ "tool": "mark_message_read"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1162ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +conversation-mark-read --conversation-id cidDWSREALTESTNOSUCHCONV --message-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId无效,无法解析为cid (operation: im/mark_message_read)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2127d89817840999287654280e07bd"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId无效,无法解析为cid (operation: im/mark_message_read)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2127d89817840999287654280e07bd"
+ }
+} |
||
dws chat +conversation-mark-unread --conversation-id <conversation-id>write标记会话为未读 |
-dws mcp im mark_conversation_unread --json '{"openConversationId":<..>}' |
+dws mcp im mark_conversation_unread --json '{"openConversationId":<..>, "cid":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/mark_conversation_unread输入 / CLI 输出输入 dws chat +conversation-mark-unread --conversation-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "mark_conversation_unread"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "mark_conversation_unread"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1090ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +conversation-mark-unread --conversation-id cidDWSREALTESTNOSUCHCONV --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/mark_conversation_unread)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "0bb7c36217840999298744910e0758"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/mark_conversation_unread)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "0bb7c36217840999298744910e0758"
+ }
+} |
|
dws chat +conversation-mute --conversation-id <conversation-id> --off <off>write会话消息免打扰(支持单聊/群聊) |
-dws mcp im update_notification_off --json '{"openConversationId":<..>, "mute":<..>}' |
+dws mcp im update_notification_off --json '{"openConversationId":<..>, "cid":<..>, "mute":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/update_notification_off输入 / CLI 输出输入 dws chat +conversation-mute --conversation-id x --off --yes stdout {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "mute": false,
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "update_notification_off"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "mute": false,
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "update_notification_off"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1052ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +conversation-mute --conversation-id cidDWSREALTESTNOSUCHCONV --off --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId is required (operation: im/update_notification_off)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999309241865e085f"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId is required (operation: im/update_notification_off)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999309241865e085f"
+ }
+} |
|
dws chat +conversation-mute-at-all --conversation-id <conversation-id> --off <off>write关闭/开启 @所有人消息提醒 |
-dws mcp im update_at_all_notification_off --json '{"openConversationId":<..>, "mute":<..>}' |
+dws mcp im update_at_all_notification_off --json '{"openConversationId":<..>, "cid":<..>, "mute":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/update_at_all_notification_off输入 / CLI 输出输入 dws chat +conversation-mute-at-all --conversation-id x --off --yes stdout {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "mute": false,
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "update_at_all_notification_off"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "mute": false,
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "update_at_all_notification_off"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1110ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +conversation-mute-at-all --conversation-id cidDWSREALTESTNOSUCHCONV --off --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId is required (operation: im/update_at_all_notification_off)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2127d89817840999320028068e07dd"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId is required (operation: im/update_at_all_notification_off)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2127d89817840999320028068e07dd"
+ }
+} |
|
dws chat +conversation-mute-red-envelope --conversation-id <conversation-id> --off <off>write关闭/开启红包消息提醒 |
-dws mcp im update_red_env_notification_off --json '{"openConversationId":<..>, "mute":<..>}' |
+dws mcp im update_red_env_notification_off --json '{"openConversationId":<..>, "cid":<..>, "mute":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/update_red_env_notification_off输入 / CLI 输出输入 dws chat +conversation-mute-red-envelope --conversation-id x --off --yes stdout {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "mute": false,
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "update_red_env_notification_off"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "mute": false,
+ "openConversationId": "x"
+ },
+ "product": "im",
+ "tool": "update_red_env_notification_off"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1001ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +conversation-mute-red-envelope --conversation-id cidDWSREALTESTNOSUCHCONV --off --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId is required (operation: im/update_red_env_notification_off)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "0bb7c36217840999330228283e07fe"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId is required (operation: im/update_red_env_notification_off)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "0bb7c36217840999330228283e07fe"
+ }
+} |
|
dws chat +conversation-set-top --conversation-id <conversation-id> --off <off>write会话置顶 / 取消置顶(支持单聊/群聊) |
-dws mcp im set_top_conversation --json '{"openConversationId":<..>, "top":<..>}' |
+dws mcp im set_top_conversation --json '{"openConversationId":<..>, "cid":<..>, "top":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/set_top_conversation输入 / CLI 输出输入 dws chat +conversation-set-top --conversation-id x --off --yes stdout {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "openConversationId": "x",
+ "top": false
+ },
+ "product": "im",
+ "tool": "set_top_conversation"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "openConversationId": "x",
+ "top": false
+ },
+ "product": "im",
+ "tool": "set_top_conversation"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1102ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +conversation-set-top --conversation-id cidDWSREALTESTNOSUCHCONV --off --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/set_top_conversation)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840999341302961e07fe"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/set_top_conversation)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2127d89817840999341302961e07fe"
+ }
+} |
|
dws chat +dm --to <to> --text <text>write按姓名直接给某人发单聊消息(自动解析 userId) |
-dws mcp chat send_personal_message --json '{"title":<..>, "text":<..>, "receiverUserId":<..>, "msgType":<..>, "content":<..>}' |
+dws chat +dm --to <to> --text <text>write复合/智能型按姓名直接给某人发单聊消息(自动解析 userId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 send_personal_message |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_contact_by_key_word;通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。输入 / CLI 输出输入 dws chat +dm --to x --text x --yes stdout (空) stderr / error 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 最终用于判定的返回 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=2547ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +dm --to '冬翔' --text 'DWS shortcut 修复复测 20260715:验证 chat +dm,请忽略。' --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "openTaskId": "y/wM6Lo+9GbIqtILYPv1BZDcMW+2FgnqskgcpdOiMdM="
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "openTaskId": "y/wM6Lo+9GbIqtILYPv1BZDcMW+2FgnqskgcpdOiMdM="
+ },
+ "success": true
+} |
dws chat +group-members --group <group>read按群名列出群成员(自动搜群解析 openConversationId) |
-dws mcp chat <tool> |
+dws chat +group-members --group <group>read复合/智能型按群名列出群成员(自动搜群解析 openConversationId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/search_groups;没找到名字匹配 "x" 的群;换用群名里连续的核心词再试。输入 / CLI 输出输入 dws chat +group-members --group x --yes stdout (空) stderr / error 没找到名字匹配 "x" 的群;换用群名里连续的核心词再试。 最终用于判定的返回 没找到名字匹配 "x" 的群;换用群名里连续的核心词再试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=1955ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +group-members --group '浅曦-kida,Dennis,秋画' --yes --format json 真实 stdout {
+ "count": 3,
+ "members": [
+ {
+ "name": "",
+ "nick": "秋画",
+ "openDingtalkId": "DpDC43OwfSyzvpshro641ZyKOpvhZI2tI",
+ "role": "普通成员"
+ },
+ {
+ "name": "",
+ "nick": "浅曦",
+ "openDingtalkId": "DiPbzolsu3XcIqiPOT4eDpd1MUBtiiFg6Xhx",
+ "role": "群主"
+ },
+ {
+ "name": "",
+ "nick": "念晨",
+ "openDingtalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "role": "普通成员"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 3,
+ "members": [
+ {
+ "name": "",
+ "nick": "秋画",
+ "openDingtalkId": "DpDC43OwfSyzvpshro641ZyKOpvhZI2tI",
+ "role": "普通成员"
+ },
+ {
+ "name": "",
+ "nick": "浅曦",
+ "openDingtalkId": "DiPbzolsu3XcIqiPOT4eDpd1MUBtiiFg6Xhx",
+ "role": "群主"
+ },
+ {
+ "name": "",
+ "nick": "念晨",
+ "openDingtalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "role": "普通成员"
+ }
+ ]
+} |
dws chat +messages-add-emoji --conversation-id <conversation-id> --msg-id <msg-id> --emoji <emoji>write对消息添加 emoji 表情回应 |
dws mcp im add_emoji_reaction --json '{"openConversationId":<..>, "openMsgId":<..>, "emojiName":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/add_emoji_reaction输入 / CLI 输出输入 dws chat +messages-add-emoji --conversation-id x --msg-id x --emoji x --yes stdout {
+ "_fake": true,
+ "args": {
+ "emojiName": "x",
+ "openConversationId": "x",
+ "openMsgId": "x"
+ },
+ "product": "im",
+ "tool": "add_emoji_reaction"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "emojiName": "x",
+ "openConversationId": "x",
+ "openMsgId": "x"
+ },
+ "product": "im",
+ "tool": "add_emoji_reaction"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1170ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +messages-add-emoji --conversation-id cidDWSREALTESTNOSUCHCONV --msg-id DWSREALTESTNOSUCHID0000000000000 --emoji '👍' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] invalid openMsgId: DWSREALTESTNOSUCHID0000000000000 (operation: im/add_emoji_reaction)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2127d89817840999352941910e0756"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] invalid openMsgId: DWSREALTESTNOSUCHID0000000000000 (operation: im/add_emoji_reaction)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2127d89817840999352941910e0756"
+ }
+} |
||
dws chat +messages-add-text-emotion --conversation-id <conversation-id> --msg-id <msg-id> --emotion-id <emotion-id> --emotion-name <emotion-name> --text <text> --background-id <background-id>write对消息添加文字表情回应 |
dws mcp im add_text_emotion --json '{"openConversationId":<..>, "openMsgId":<..>, "emotionId":<..>, "emotionName":<..>, "text":<..>, "backgroundId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/add_text_emotion输入 / CLI 输出输入 dws chat +messages-add-text-emotion --conversation-id x --msg-id x --emotion-id x --emotion-name x --text x --background-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "backgroundId": "x",
+ "emotionId": "x",
+ "emotionName": "x",
+ "openConversationId": "x",
+ "openMsgId": "x",
+ "text": "x"
+ },
+ "product": "im",
+ "tool": "add_text_emotion"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "backgroundId": "x",
+ "emotionId": "x",
+ "emotionName": "x",
+ "openConversationId": "x",
+ "openMsgId": "x",
+ "text": "x"
+ },
+ "product": "im",
+ "tool": "add_text_emotion"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=992ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +messages-add-text-emotion --conversation-id cidDWSREALTESTNOSUCHCONV --msg-id DWSREALTESTNOSUCHID0000000000000 --emotion-id DWSREALTESTNOSUCHID0000000000000 --emotion-name 'DWS测试表情' --text 'DWS shortcut 真实测试 20260715-151724,安全负向输入,请忽略。' --background-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] invalid openMsgId: DWSREALTESTNOSUCHID0000000000000 (operation: im/add_text_emotion)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999362862711e08b5"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] invalid openMsgId: DWSREALTESTNOSUCHID0000000000000 (operation: im/add_text_emotion)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999362862711e08b5"
+ }
+} |
||
dws chat +messages-batch-recall-by-bot --robot-code <robot-code> --keys <keys>write机器人撤回单聊消息 |
dws mcp bot batch_recall_robot_users_msg --json '{"robotCode":<..>, "processQueryKeys":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; bot/batch_recall_robot_users_msg输入 / CLI 输出输入 dws chat +messages-batch-recall-by-bot --robot-code x --keys x --yes stdout {
+ "_fake": true,
+ "args": {
+ "processQueryKeys": [
+ "x"
+ ],
+ "robotCode": "x"
+ },
+ "product": "bot",
+ "tool": "batch_recall_robot_users_msg"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "processQueryKeys": [
+ "x"
+ ],
+ "robotCode": "x"
+ },
+ "product": "bot",
+ "tool": "batch_recall_robot_users_msg"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1085ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +messages-batch-recall-by-bot --robot-code __DWS_SHORTCUT_REAL_TEST_NO_SUCH_ROBOT__ --keys DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: bot/batch_recall_robot_users_msg)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "retryable": true,
+ "server_error_code": "ERROR",
+ "server_key": "bot",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。root.success当前值:false, 预期值:true,所有值:{\"success\":false,\"dingOpenErrcode\":400014,\"errorMsg\":\"错误描述: robot 不存在;解决方案:请确认 robotCode 是否正确;\"} ",
+ "trace_id": "2104a64c17840999373456305e0817"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: bot/batch_recall_robot_users_msg)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "retryable": true,
+ "server_error_code": "ERROR",
+ "server_key": "bot",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。root.success当前值:false, 预期值:true,所有值:{\"success\":false,\"dingOpenErrcode\":400014,\"errorMsg\":\"错误描述: robot 不存在;解决方案:请确认 robotCode 是否正确;\"} ",
+ "trace_id": "2104a64c17840999373456305e0817"
+ }
+} |
||
dws chat +messages-batch-send-by-bot --robot-code <robot-code> --title <title> --text <text> --users <users> --open-dingtalk-ids <open-dingtalk-ids> --at-all <at-all>write机器人批量向用户发送单聊 Markdown 消息 |
dws mcp bot batch_send_robot_msg_to_users --json '{"robotCode":<..>, "title":<..>, "markdown":<..>, "userIds":<..>, "openDingtalkIds":<..>, "isAtAll":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; bot/batch_send_robot_msg_to_users输入 / CLI 输出输入 dws chat +messages-batch-send-by-bot --robot-code x --title x --text x --users x --open-dingtalk-ids x --at-all --yes stdout {
+ "_fake": true,
+ "args": {
+ "isAtAll": "true",
+ "markdown": "x",
+ "openDingtalkIds": [
+ "x"
+ ],
+ "robotCode": "x",
+ "title": "x",
+ "userIds": [
+ "x"
+ ]
+ },
+ "product": "bot",
+ "tool": "batch_send_robot_msg_to_users"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "isAtAll": "true",
+ "markdown": "x",
+ "openDingtalkIds": [
+ "x"
+ ],
+ "robotCode": "x",
+ "title": "x",
+ "userIds": [
+ "x"
+ ]
+ },
+ "product": "bot",
+ "tool": "batch_send_robot_msg_to_users"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1211ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +messages-batch-send-by-bot --robot-code __DWS_SHORTCUT_REAL_TEST_NO_SUCH_ROBOT__ --title 'DWS shortcut 真实测试 20260715-151724' --text 'DWS shortcut 真实测试 20260715-151724,安全负向输入,请忽略。' --users __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --open-dingtalk-ids '' --at-all --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: bot/batch_send_robot_msg_to_users)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "retryable": true,
+ "server_error_code": "ERROR",
+ "server_key": "bot",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。root.success当前值:false, 预期值:true,所有值:{\"success\":false,\"dingOpenErrcode\":400106,\"errorMsg\":\"错误描述: robot 不存在;解决方案:请确认 robotCode 是否正确;\"} ",
+ "trace_id": "0bb7c36217840999385748776e0757"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: bot/batch_send_robot_msg_to_users)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "retryable": true,
+ "server_error_code": "ERROR",
+ "server_key": "bot",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。root.success当前值:false, 预期值:true,所有值:{\"success\":false,\"dingOpenErrcode\":400106,\"errorMsg\":\"错误描述: robot 不存在;解决方案:请确认 robotCode 是否正确;\"} ",
+ "trace_id": "0bb7c36217840999385748776e0757"
+ }
+} |
||
dws chat +messages-combine-forward --src-conversation-id <src-conversation-id> --msg-ids <msg-ids> --dest-conversation-id <dest-conversation-id> --uuid <uuid>write合并转发多条消息 |
dws mcp im combine_forward_messages --json '{"srcOpenCid":<..>, "srcOpenMessageIds":<..>, "destOpenCid":<..>, "uuid":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/combine_forward_messages输入 / CLI 输出输入 dws chat +messages-combine-forward --src-conversation-id x --msg-ids x --dest-conversation-id x --uuid x --yes stdout {
+ "_fake": true,
+ "args": {
+ "destOpenCid": "x",
+ "srcOpenCid": "x",
+ "srcOpenMessageIds": [
+ "x"
+ ],
+ "uuid": "x"
+ },
+ "product": "im",
+ "tool": "combine_forward_messages"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "destOpenCid": "x",
+ "srcOpenCid": "x",
+ "srcOpenMessageIds": [
+ "x"
+ ],
+ "uuid": "x"
+ },
+ "product": "im",
+ "tool": "combine_forward_messages"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1075ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +messages-combine-forward --src-conversation-id cidDWSREALTESTNOSUCHCONV --msg-ids DWSREALTESTNOSUCHID0000000000000 --dest-conversation-id cidDWSREALTESTNOSUCHCONV --uuid dws-shortcut-real-negative-20260715-151724 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] srcOpenCid无效,无法解析为cid (operation: im/combine_forward_messages)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999396596163e08ee"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] srcOpenCid无效,无法解析为cid (operation: im/combine_forward_messages)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999396596163e08ee"
+ }
+} |
||
dws chat +messages-create-text-emotion --emotion-name <emotion-name> --text <text> --background-id <background-id>write创建文字表情(获取 emotionId) |
dws mcp im create_text_emotion --json '{"emotionName":<..>, "text":<..>, "backgroundId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/create_text_emotion输入 / CLI 输出输入 dws chat +messages-create-text-emotion --emotion-name x --text x --background-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "backgroundId": "x",
+ "emotionName": "x",
+ "text": "x"
+ },
+ "product": "im",
+ "tool": "create_text_emotion"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "backgroundId": "x",
+ "emotionName": "x",
+ "text": "x"
+ },
+ "product": "im",
+ "tool": "create_text_emotion"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1054ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test chat +messages-create-text-emotion --emotion-name 'DWS测试表情' --text 'DWS shortcut 真实测试 20260715-151724,安全负向输入,请忽略。' --background-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 暂不支持保存该文字表情 (operation: im/create_text_emotion)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "400519",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999407422891e08cd"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 暂不支持保存该文字表情 (operation: im/create_text_emotion)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "400519",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999407422891e08cd"
+ }
+} |
||
dws chat +messages-forward --src-conversation-id <src-conversation-id> --msg-id <msg-id> --dest-conversation-id <dest-conversation-id> --uuid <uuid>write转发单条消息 |
dws mcp im forward_message --json '{"srcOpenCid":<..>, "srcOpenMessageId":<..>, "destOpenCid":<..>, "uuid":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/forward_message输入 / CLI 输出输入 dws chat +messages-forward --src-conversation-id x --msg-id x --dest-conversation-id x --uuid x --yes stdout {
+ "_fake": true,
+ "args": {
+ "destOpenCid": "x",
+ "srcOpenCid": "x",
+ "srcOpenMessageId": "x",
+ "uuid": "x"
+ },
+ "product": "im",
+ "tool": "forward_message"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "destOpenCid": "x",
+ "srcOpenCid": "x",
+ "srcOpenMessageId": "x",
+ "uuid": "x"
+ },
+ "product": "im",
+ "tool": "forward_message"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1090ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +messages-forward --src-conversation-id cidDWSREALTESTNOSUCHCONV --msg-id DWSREALTESTNOSUCHID0000000000000 --dest-conversation-id cidDWSREALTESTNOSUCHCONV --uuid dws-shortcut-real-negative-20260715-151724 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openMessageId解密失败 (operation: im/forward_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999417966407e08ee"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openMessageId解密失败 (operation: im/forward_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999417966407e08ee"
+ }
+} |
||
dws chat +messages-forward-topic --src-msg-id <src-msg-id> --src-conversation-id <src-conversation-id> --src-thread-id <src-thread-id> --dest-conversation-id <dest-conversation-id>write转发话题消息到目标会话 |
dws mcp im forward_topic --json '{"srcOpenMessageId":<..>, "srcOpenConversationId":<..>, "srcOpenConvThreadId":<..>, "destOpenConversationId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/forward_topic输入 / CLI 输出输入 dws chat +messages-forward-topic --src-msg-id x --src-conversation-id x --src-thread-id x --dest-conversation-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "destOpenConversationId": "x",
+ "srcOpenConvThreadId": "x",
+ "srcOpenConversationId": "x",
+ "srcOpenMessageId": "x"
+ },
+ "product": "im",
+ "tool": "forward_topic"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "destOpenConversationId": "x",
+ "srcOpenConvThreadId": "x",
+ "srcOpenConversationId": "x",
+ "srcOpenMessageId": "x"
+ },
+ "product": "im",
+ "tool": "forward_topic"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1043ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +messages-forward-topic --src-msg-id DWSREALTESTNOSUCHID0000000000000 --src-conversation-id cidDWSREALTESTNOSUCHCONV --src-thread-id DWSREALTESTNOSUCHID0000000000000 --dest-conversation-id cidDWSREALTESTNOSUCHCONV --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openMessageId解密失败 (operation: im/forward_topic)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2127d89817840999428541474e07dd"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openMessageId解密失败 (operation: im/forward_topic)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2127d89817840999428541474e07dd"
+ }
+} |
||
dws chat +messages-list --group <group> --time <time> --forward <forward> --limit <limit>read拉取群聊会话消息 |
dws mcp chat <tool> |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; chat/list_conversation_message_v2输入 / CLI 输出输入 dws chat +messages-list --group x --time x --forward --limit 1 --yes stdout {
+ "count": 0,
+ "messages": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "messages": []
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1480ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +messages-list --group cid3Jijzhe2aqs9ysOXjhi05g== --time '2026-07-15 10:00:00' --forward --limit 10 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openCid or cid is required\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "chat",
+ "trace_id": "2127d89817840997797873841e0757"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openCid or cid is required\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "chat",
+ "trace_id": "2127d89817840997797873841e0757"
+ }
+} |
||
dws chat +messages-list-direct --user <user> --open-dingtalk-id <open-dingtalk-id> --time <time> --forward <forward> --limit <limit>read拉取单聊会话消息 |
dws mcp chat <tool> |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; chat/list_individual_chat_message输入 / CLI 输出输入 dws chat +messages-list-direct --user x --open-dingtalk-id x --time x --forward --limit 1 --yes stdout {
+ "count": 0,
+ "messages": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "messages": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1386ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +messages-list-direct --user 103262 --time '2026-07-15 10:00:00' --forward --limit 10 --yes --format json 真实 stdout {
+ "count": 4,
+ "messages": [
+ {
+ "createTime": "2026-07-15 11:02:04",
+ "messageId": "msgmsdyW4xAGL0iXVc9mR4V0g==",
+ "senderId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "text": "[文档](https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO)\nDWS shortcut 修复复测 20260715:验证 doc +share-doc,请忽略。"
+ },
+ {
+ "createTime": "2026-07-15 11:01:49",
+ "messageId": "msgj2fRqVeyvOLxrZ5EntlMIA==",
+ "senderId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "text": "DWS shortcut 修复复测 20260715:验证 chat +broadcast,请忽略。"
+ },
+ {
+ "createTime": "2026-07-15 11:01:34",
+ "messageId": "msgEuOor1PmFBNlx9M06N9z1Q==",
+ "senderId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "text": "DWS shortcut 修复复测 20260715:验证 chat +dm,请忽略。"
+ },
+ {
+ "createTime": "2026-07-15 10:12:31",
+ "messageId": "msg4cdzVyqpmXc9WAxnR3lcYQ==",
+ "senderId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "text": "-1\nDWS shortcut 真实测试 20260715 日程,可忽略\nAsia/Shanghai\ndingtalk://dingtalkclient/action/switchtab?index=1&name=ding&type=calendar&targetDateTime=1784172600000\n1\n1784173500000\n日历使用手册\n0\ndingtalk://dingtalkclient/page/calendar_detail?uniqueId=c0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09&corpId=ding8196cd9a2b2405da24f2f5cc6abecb85&from=im_card&redirect_url=https%3A%2F%2Fn.dingtalk.com%2Fdingding%2Fcalendar%2Fdetail%2Findex.html%3Fdd_full_screen%3Dtrue%26dd_progress%3Dfalse%26dd_darkmode%3Dtrue%26%26dd_android_full%3Dtrue%26uniqueId%3Dc0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09%26corpId%3Dding8196cd9a2b2405da24f2f5cc6abecb85%26from%3Dim_card\n0\n0\n了解详情\n1784172600000\n1\n439446171\n1784172600000\n1784081621092b363beb2-0536-4131-b9ca-935571fca90d\ndingtalk://dingtalkclient/page/link?url=https%3A%2F%2Falidocs.dingtalk.com%2Fi%2Fp%2FY7kmbokZp3pgGLq2%2Fdocs%2F7Y36k14mK9AV3pKq5zA1J5NqapjblR2D\nfalse\n0\n512653609\n999\n1784173500000\ndingtalk://dingtalkclient/page/calendar_detail?uniqueId=c0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09&corpId=ding8196cd9a2b2405da24f2f5cc6abecb85&from=im_card&redirect_url=https%3A%2F%2Fn.dingtalk.com%2Fdingding%2Fcalendar%2Fdetail%2Findex.html%3Fdd_full_screen%3Dtrue%26dd_progress%3Dfalse%26dd_darkmode%3Dtrue%26%26dd_android_full%3Dtrue%26uniqueId%3Dc0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09%26corpId%3Dding8196cd9a2b2405da24f2f5cc6abecb85%26from%3Dim_card\nc0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 4,
+ "messages": [
+ {
+ "createTime": "2026-07-15 11:02:04",
+ "messageId": "msgmsdyW4xAGL0iXVc9mR4V0g==",
+ "senderId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "text": "[文档](https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO)\nDWS shortcut 修复复测 20260715:验证 doc +share-doc,请忽略。"
+ },
+ {
+ "createTime": "2026-07-15 11:01:49",
+ "messageId": "msgj2fRqVeyvOLxrZ5EntlMIA==",
+ "senderId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "text": "DWS shortcut 修复复测 20260715:验证 chat +broadcast,请忽略。"
+ },
+ {
+ "createTime": "2026-07-15 11:01:34",
+ "messageId": "msgEuOor1PmFBNlx9M06N9z1Q==",
+ "senderId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "text": "DWS shortcut 修复复测 20260715:验证 chat +dm,请忽略。"
+ },
+ {
+ "createTime": "2026-07-15 10:12:31",
+ "messageId": "msg4cdzVyqpmXc9WAxnR3lcYQ==",
+ "senderId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "text": "-1\nDWS shortcut 真实测试 20260715 日程,可忽略\nAsia/Shanghai\ndingtalk://dingtalkclient/action/switchtab?index=1&name=ding&type=calendar&targetDateTime=1784172600000\n1\n1784173500000\n日历使用手册\n0\ndingtalk://dingtalkclient/page/calendar_detail?uniqueId=c0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09&corpId=ding8196cd9a2b2405da24f2f5cc6abecb85&from=im_card&redirect_url=https%3A%2F%2Fn.dingtalk.com%2Fdingding%2Fcalendar%2Fdetail%2Findex.html%3Fdd_full_screen%3Dtrue%26dd_progress%3Dfalse%26dd_darkmode%3Dtrue%26%26dd_android_full%3Dtrue%26uniqueId%3Dc0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09%26corpId%3Dding8196cd9a2b2405da24f2f5cc6abecb85%26from%3Dim_card\n0\n0\n了解详情\n1784172600000\n1\n439446171\n1784172600000\n1784081621092b363beb2-0536-4131-b9ca-935571fca90d\ndingtalk://dingtalkclient/page/link?url=https%3A%2F%2Falidocs.dingtalk.com%2Fi%2Fp%2FY7kmbokZp3pgGLq2%2Fdocs%2F7Y36k14mK9AV3pKq5zA1J5NqapjblR2D\nfalse\n0\n512653609\n999\n1784173500000\ndingtalk://dingtalkclient/page/calendar_detail?uniqueId=c0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09&corpId=ding8196cd9a2b2405da24f2f5cc6abecb85&from=im_card&redirect_url=https%3A%2F%2Fn.dingtalk.com%2Fdingding%2Fcalendar%2Fdetail%2Findex.html%3Fdd_full_screen%3Dtrue%26dd_progress%3Dfalse%26dd_darkmode%3Dtrue%26%26dd_android_full%3Dtrue%26uniqueId%3Dc0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09%26corpId%3Dding8196cd9a2b2405da24f2f5cc6abecb85%26from%3Dim_card\nc0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09"
+ }
+ ]
+} |
||
dws chat +messages-list-pin --open-conversation-id <open-conversation-id> --cursor <cursor> --size <size>read拉取会话中钉住的消息列表 |
dws mcp im <tool> |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/list_pin_messages输入 / CLI 输出输入 dws chat +messages-list-pin --open-conversation-id x --cursor x --size 1 --yes stdout {
+ "count": 0,
+ "pins": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "pins": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1105ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +messages-list-pin --open-conversation-id cid3Jijzhe2aqs9ysOXjhi05g== --cursor 0 --size 1 --yes --format json 真实 stdout {
+ "count": 0,
+ "pins": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "pins": []
+} |
||
dws chat +messages-list-unread-conversations --count <count> --exclude-muted <exclude-muted>read获取有未读消息的会话列表 |
dws mcp chat <tool> |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; chat/unread_message_conversation_list输入 / CLI 输出输入 dws chat +messages-list-unread-conversations --count 1 --exclude-muted --yes stdout {
+ "conversations": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "conversations": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1575ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +messages-list-unread-conversations --count 1 --exclude-muted --yes --format json 真实 stdout {
+ "conversations": [
+ {
+ "conversationId": "ciddYsoBxGQrFWR5zJ8lnpPBg==",
+ "title": "Wukong & Real 日志群"
+ }
+ ],
+ "count": 1
+}真实 stderr / error (空) 真实返回 {
+ "conversations": [
+ {
+ "conversationId": "ciddYsoBxGQrFWR5zJ8lnpPBg==",
+ "title": "Wukong & Real 日志群"
+ }
+ ],
+ "count": 1
+} |
||
dws chat +messages-mget --msg-ids <msg-ids>read根据消息 ID 批量查询消息(最多 50 条) |
dws mcp im list_messages_by_ids --json '{"openMsgIds":<..>}' |
lark-cli im +messages-mget |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/list_messages_by_ids输入 / CLI 输出输入 dws chat +messages-mget --msg-ids x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openMsgIds": [
+ "x"
+ ]
+ },
+ "product": "im",
+ "tool": "list_messages_by_ids"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openMsgIds": [
+ "x"
+ ]
+ },
+ "product": "im",
+ "tool": "list_messages_by_ids"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1461ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +messages-mget --msg-ids msgEuOor1PmFBNlx9M06N9z1Q== --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "messages": [
+ {
+ "content": "DWS shortcut 修复复测 20260715:验证 chat +dm,请忽略。",
+ "createTime": "2026-07-15 11:01:34",
+ "openConversationId": "cidie1367hAfBxqipzE59k5sknHLrHmvYkw98NADhfnjPI=",
+ "openMessageId": "msgEuOor1PmFBNlx9M06N9z1Q==",
+ "sender": "念晨",
+ "senderOpenDingTalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I"
+ }
+ ]
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "messages": [
+ {
+ "content": "DWS shortcut 修复复测 20260715:验证 chat +dm,请忽略。",
+ "createTime": "2026-07-15 11:01:34",
+ "openConversationId": "cidie1367hAfBxqipzE59k5sknHLrHmvYkw98NADhfnjPI=",
+ "openMessageId": "msgEuOor1PmFBNlx9M06N9z1Q==",
+ "sender": "念晨",
+ "senderOpenDingTalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I"
+ }
+ ]
+ },
+ "success": true
+} |
||
dws chat +messages-query-send-status --open-task-id <open-task-id>read查询消息发送状态 |
dws mcp im query_message_send_status --json '{"openTaskId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/query_message_send_status输入 / CLI 输出输入 dws chat +messages-query-send-status --open-task-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openTaskId": "x"
+ },
+ "product": "im",
+ "tool": "query_message_send_status"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openTaskId": "x"
+ },
+ "product": "im",
+ "tool": "query_message_send_status"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1312ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +messages-query-send-status --open-task-id y/wM6Lo+9GbIqtILYPv1BZDcMW+2FgnqskgcpdOiMdM= --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "openConversationId": "cidie1367hAfBxqipzE59k5sknHLrHmvYkw98NADhfnjPI=",
+ "openMessageId": "msgEuOor1PmFBNlx9M06N9z1Q==",
+ "sendStatus": "SUCCESS"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "openConversationId": "cidie1367hAfBxqipzE59k5sknHLrHmvYkw98NADhfnjPI=",
+ "openMessageId": "msgEuOor1PmFBNlx9M06N9z1Q==",
+ "sendStatus": "SUCCESS"
+ },
+ "success": true
+} |
||
dws chat +messages-read-status --conversation-id <conversation-id> --message-id <message-id> --users <users>read查询消息的已读/未读状态 |
dws mcp im query_msg_read_status --json '{"openConversationId":<..>, "openMessageId":<..>, "targetUserIds":<..>, "targetOpenDingTalkIds":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/query_msg_read_status输入 / CLI 输出输入 dws chat +messages-read-status --conversation-id x --message-id x --users x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openMessageId": "x",
+ "targetUserIds": [
+ "x"
+ ]
+ },
+ "product": "im",
+ "tool": "query_msg_read_status"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openMessageId": "x",
+ "targetUserIds": [
+ "x"
+ ]
+ },
+ "product": "im",
+ "tool": "query_msg_read_status"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1376ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +messages-read-status --conversation-id cidie1367hAfBxqipzE59k5sknHLrHmvYkw98NADhfnjPI= --message-id msgEuOor1PmFBNlx9M06N9z1Q== --users '冬翔' --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "memberReadStatusList": [
+ {
+ "openDingTalkId": "DAdiiQDqzH1DEqiPOT4eDpd1MUBtiiFg6Xhx",
+ "readStatus": "READ",
+ "readTime": "2026-07-15 11:53:31",
+ "userNick": "冬翔"
+ },
+ {
+ "openDingTalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "readStatus": "READ",
+ "readTime": "2026-07-15 11:01:35",
+ "userNick": "念晨"
+ }
+ ],
+ "messageStatus": "SUCCESS"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "memberReadStatusList": [
+ {
+ "openDingTalkId": "DAdiiQDqzH1DEqiPOT4eDpd1MUBtiiFg6Xhx",
+ "readStatus": "READ",
+ "readTime": "2026-07-15 11:53:31",
+ "userNick": "冬翔"
+ },
+ {
+ "openDingTalkId": "D1jIqGatuH3UykpdYxJGSS1ug4rSiPJt8I",
+ "readStatus": "READ",
+ "readTime": "2026-07-15 11:01:35",
+ "userNick": "念晨"
+ }
+ ],
+ "messageStatus": "SUCCESS"
+ },
+ "success": true
+} |
||
dws chat +messages-recall --conversation-id <conversation-id> --msg-id <msg-id>write撤回当前用户发送的消息 |
dws mcp im recall_message --json '{"openConversationId":<..>, "openMessageId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/recall_message输入 / CLI 输出输入 dws chat +messages-recall --conversation-id x --msg-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openMessageId": "x"
+ },
+ "product": "im",
+ "tool": "recall_message"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openMessageId": "x"
+ },
+ "product": "im",
+ "tool": "recall_message"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1247ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +messages-recall --conversation-id cidDWSREALTESTNOSUCHCONV --msg-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId无效,无法解析为cid (operation: im/recall_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999441138103e08c7"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId无效,无法解析为cid (operation: im/recall_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999441138103e08c7"
+ }
+} |
||
dws chat +messages-recall-by-bot --robot-code <robot-code> --group <group> --keys <keys>write机器人撤回群消息 |
dws mcp bot recall_robot_group_message --json '{"robotCode":<..>, "openConversationId":<..>, "processQueryKeys":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; bot/recall_robot_group_message输入 / CLI 输出输入 dws chat +messages-recall-by-bot --robot-code x --group x --keys x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "processQueryKeys": [
+ "x"
+ ],
+ "robotCode": "x"
+ },
+ "product": "bot",
+ "tool": "recall_robot_group_message"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "processQueryKeys": [
+ "x"
+ ],
+ "robotCode": "x"
+ },
+ "product": "bot",
+ "tool": "recall_robot_group_message"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1317ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test chat +messages-recall-by-bot --robot-code __DWS_SHORTCUT_REAL_TEST_NO_SUCH_ROBOT__ --group cidDWSREALTESTNOSUCHCONV --keys DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: bot/recall_robot_group_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "bot",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。DingOpenResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"dingOpenErrcode\":400012,\"errorMsg\":\"错误描述:无效的openConversationId此参数的示例值如\\\"cidl1B8RVUFmkXXXXXX\\\";解决方案:请检查拼写是否正确;参考链接:请参考本接口对应文档查看参数的获取方式,或者在https://open.dingtalk.com/ 查询如何获取对应的参数\"} ",
+ "trace_id": "2104a64c17840999454382709e08a3"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: bot/recall_robot_group_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "bot",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。DingOpenResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"dingOpenErrcode\":400012,\"errorMsg\":\"错误描述:无效的openConversationId此参数的示例值如\\\"cidl1B8RVUFmkXXXXXX\\\";解决方案:请检查拼写是否正确;参考链接:请参考本接口对应文档查看参数的获取方式,或者在https://open.dingtalk.com/ 查询如何获取对应的参数\"} ",
+ "trace_id": "2104a64c17840999454382709e08a3"
+ }
+} |
||
dws chat +messages-remove-emoji --conversation-id <conversation-id> --msg-id <msg-id> --emoji <emoji>write移除消息的 emoji 表情回应 |
dws mcp im remove_emoji_reaction --json '{"openConversationId":<..>, "openMsgId":<..>, "emojiName":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/remove_emoji_reaction输入 / CLI 输出输入 dws chat +messages-remove-emoji --conversation-id x --msg-id x --emoji x --yes stdout {
+ "_fake": true,
+ "args": {
+ "emojiName": "x",
+ "openConversationId": "x",
+ "openMsgId": "x"
+ },
+ "product": "im",
+ "tool": "remove_emoji_reaction"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "emojiName": "x",
+ "openConversationId": "x",
+ "openMsgId": "x"
+ },
+ "product": "im",
+ "tool": "remove_emoji_reaction"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1347ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +messages-remove-emoji --conversation-id cidDWSREALTESTNOSUCHCONV --msg-id DWSREALTESTNOSUCHID0000000000000 --emoji '👍' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] invalid openMsgId: DWSREALTESTNOSUCHID0000000000000 (operation: im/remove_emoji_reaction)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999467733059e08f9"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] invalid openMsgId: DWSREALTESTNOSUCHID0000000000000 (operation: im/remove_emoji_reaction)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999467733059e08f9"
+ }
+} |
||
dws chat +messages-remove-text-emotion --conversation-id <conversation-id> --msg-id <msg-id> --emotion-id <emotion-id> --emotion-name <emotion-name> --text <text> --background-id <background-id>write移除消息的文字表情回应 |
dws mcp im remove_text_emotion --json '{"openConversationId":<..>, "openMsgId":<..>, "emotionId":<..>, "emotionName":<..>, "text":<..>, "backgroundId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/remove_text_emotion输入 / CLI 输出输入 dws chat +messages-remove-text-emotion --conversation-id x --msg-id x --emotion-id x --emotion-name x --text x --background-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "backgroundId": "x",
+ "emotionId": "x",
+ "emotionName": "x",
+ "openConversationId": "x",
+ "openMsgId": "x",
+ "text": "x"
+ },
+ "product": "im",
+ "tool": "remove_text_emotion"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "backgroundId": "x",
+ "emotionId": "x",
+ "emotionName": "x",
+ "openConversationId": "x",
+ "openMsgId": "x",
+ "text": "x"
+ },
+ "product": "im",
+ "tool": "remove_text_emotion"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1210ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +messages-remove-text-emotion --conversation-id cidDWSREALTESTNOSUCHCONV --msg-id DWSREALTESTNOSUCHID0000000000000 --emotion-id DWSREALTESTNOSUCHID0000000000000 --emotion-name 'DWS测试表情' --text 'DWS shortcut 真实测试 20260715-151724,安全负向输入,请忽略。' --background-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] invalid openMsgId: DWSREALTESTNOSUCHID0000000000000 (operation: im/remove_text_emotion)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999478923406e087f"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] invalid openMsgId: DWSREALTESTNOSUCHID0000000000000 (operation: im/remove_text_emotion)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999478923406e087f"
+ }
+} |
||
dws chat +messages-resource-url --type <type> --resource-id <resource-id> --message-id <message-id> --open-conversation-id <open-conversation-id>read获取消息资源(图片/视频/语音)下载链接 |
dws mcp im get_resource_download_url --json '{"resourceType":<..>, "resourceId":<..>, "openMessageId":<..>, "openConversationId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/get_resource_download_url输入 / CLI 输出输入 dws chat +messages-resource-url --type mediaId --resource-id x --message-id x --open-conversation-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openMessageId": "x",
+ "resourceId": "x",
+ "resourceType": "mediaId"
+ },
+ "product": "im",
+ "tool": "get_resource_download_url"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openMessageId": "x",
+ "resourceId": "x",
+ "resourceType": "mediaId"
+ },
+ "product": "im",
+ "tool": "get_resource_download_url"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1264ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +messages-resource-url --type mediaId --resource-id x --message-id DWSREALREADNOSUCHID0000000000000 --open-conversation-id cid3Jijzhe2aqs9ysOXjhi05g== --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] failed to get download url for resourceId: x (operation: im/get_resource_download_url)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "RESOURCE_NOT_FOUND",
+ "server_key": "im",
+ "trace_id": "2127d89817840997855423145e07dd"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] failed to get download url for resourceId: x (operation: im/get_resource_download_url)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "RESOURCE_NOT_FOUND",
+ "server_key": "im",
+ "trace_id": "2127d89817840997855423145e07dd"
+ }
+} |
||
dws chat +messages-send-by-bot --robot-code <robot-code> --group <group> --title <title> --text <text> --at-user-ids <at-user-ids> --at-open-dingtalk-ids <at-open-dingtalk-ids> --at-all <at-all>write机器人向群聊发送 Markdown 消息 |
dws mcp bot send_robot_group_message --json '{"robotCode":<..>, "openConversationId":<..>, "title":<..>, "markdown":<..>, "atUserIds":<..>, "atOpendingtalkIds":<..>, "isAtAll":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; bot/send_robot_group_message输入 / CLI 输出输入 dws chat +messages-send-by-bot --robot-code x --group x --title x --text x --at-user-ids x --at-open-dingtalk-ids x --at-all --yes stdout {
+ "_fake": true,
+ "args": {
+ "atOpendingtalkIds": [
+ "x"
+ ],
+ "atUserIds": [
+ "x"
+ ],
+ "isAtAll": "true",
+ "markdown": "x",
+ "openConversationId": "x",
+ "robotCode": "x",
+ "title": "x"
+ },
+ "product": "bot",
+ "tool": "send_robot_group_message"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "atOpendingtalkIds": [
+ "x"
+ ],
+ "atUserIds": [
+ "x"
+ ],
+ "isAtAll": "true",
+ "markdown": "x",
+ "openConversationId": "x",
+ "robotCode": "x",
+ "title": "x"
+ },
+ "product": "bot",
+ "tool": "send_robot_group_message"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1436ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +messages-send-by-bot --robot-code __DWS_SHORTCUT_REAL_TEST_NO_SUCH_ROBOT__ --group cidDWSREALTESTNOSUCHCONV --title 'DWS shortcut 真实测试 20260715-151724' --text 'DWS shortcut 真实测试 20260715-151724,安全负向输入,请忽略。' --at-user-ids __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --at-open-dingtalk-ids '' --at-all --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: bot/send_robot_group_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "BUSINESS_ERROR",
+ "server_key": "bot",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。DingOpenResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"400004\",\"errorMsg\":\"robotCode对应的机器人模板不存在\"} ",
+ "trace_id": "0b5deb3217840999494005921e08ef"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: bot/send_robot_group_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "BUSINESS_ERROR",
+ "server_key": "bot",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。DingOpenResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"400004\",\"errorMsg\":\"robotCode对应的机器人模板不存在\"} ",
+ "trace_id": "0b5deb3217840999494005921e08ef"
+ }
+} |
||
dws chat +messages-send-by-webhook --token <token> --title <title> --text <text> --at-all <at-all> --at-mobiles <at-mobiles> --at-users <at-users>write自定义机器人 Webhook 发送群消息 |
dws mcp bot send_message_by_custom_robot --json '{"robotToken":<..>, "title":<..>, "text":<..>, "isAtAll":<..>, "atMobiles":<..>, "atUserIds":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; bot/send_message_by_custom_robot输入 / CLI 输出输入 dws chat +messages-send-by-webhook --token x --title x --text x --at-all --at-mobiles x --at-users x --yes stdout {
+ "_fake": true,
+ "args": {
+ "atMobiles": [
+ "x"
+ ],
+ "atUserIds": [
+ "x"
+ ],
+ "isAtAll": true,
+ "robotToken": "x",
+ "text": "x",
+ "title": "x"
+ },
+ "product": "bot",
+ "tool": "send_message_by_custom_robot"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "atMobiles": [
+ "x"
+ ],
+ "atUserIds": [
+ "x"
+ ],
+ "isAtAll": true,
+ "robotToken": "x",
+ "text": "x",
+ "title": "x"
+ },
+ "product": "bot",
+ "tool": "send_message_by_custom_robot"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=925ms;real-backend-safe-negative-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +messages-send-by-webhook --token __DWS_SHORTCUT_REAL_TEST_NO_SUCH_WEBHOOK_TOKEN__ --title 'DWS shortcut 真实测试 20260715-104025' --text 'DWS shortcut 真实测试 20260715-104025,安全负向输入,请忽略。' --at-all --at-mobiles x --at-users __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --yes --format json 真实 stdout {
+ "errcode": "300005",
+ "errmsg": "token is not exist",
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "errcode": "300005",
+ "errmsg": "token is not exist",
+ "success": true
+} |
||
dws chat +messages-send-card --group <group> --receiver <receiver>write创建并推送流式卡片(需配合 messages-update-card) |
-dws mcp im create_and_send_card --json '{"openConversationId":<..>, "receiverOpenDingTalkId":<..>}' |
+dws mcp im create_and_send_card --json '{"openConversationId":<..>, "receiverUid":<..>}' |
lark im 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--group 与 --receiver 互斥输入 / CLI 输出输入 dws chat +messages-send-card --group x --receiver x --yes stdout (空) stderr / error --group 与 --receiver 互斥 最终用于判定的返回 --group 与 --receiver 互斥 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1502ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +dry-run 已证明 CLI 装配了 receiverUid;真实后端仍报 receiverUid/openConversationId 为空,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +messages-send-card --receiver 103262 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] receiverUid和openConversationId不能同时为空 (operation: im/create_and_send_card)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999509255753e081a"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] receiverUid和openConversationId不能同时为空 (operation: im/create_and_send_card)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999509255753e081a"
+ }
+} |
|
dws chat +messages-set-pin --open-conversation-id <open-conversation-id> --msg-id <msg-id>write钉住消息(Pin) |
-dws mcp im set_pin_message --json '{"openConversationId":<..>, "openMessageId":<..>}' |
+dws mcp im set_pin_message --json '{"openConversationId":<..>, "cid":<..>, "openMessageId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/set_pin_message输入 / CLI 输出输入 dws chat +messages-set-pin --open-conversation-id x --msg-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "openConversationId": "x",
+ "openMessageId": "x"
+ },
+ "product": "im",
+ "tool": "set_pin_message"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "openConversationId": "x",
+ "openMessageId": "x"
+ },
+ "product": "im",
+ "tool": "set_pin_message"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1217ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +messages-set-pin --open-conversation-id cidDWSREALTESTNOSUCHCONV --msg-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/set_pin_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "0bb7c36217840999521117991e0758"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/set_pin_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "0bb7c36217840999521117991e0758"
+ }
+} |
|
dws chat +messages-set-top --open-conversation-id <open-conversation-id> --msg-id <msg-id>write置顶消息 |
dws mcp im set_top_message --json '{"openConversationId":<..>, "openMessageId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/set_top_message输入 / CLI 输出输入 dws chat +messages-set-top --open-conversation-id x --msg-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openMessageId": "x"
+ },
+ "product": "im",
+ "tool": "set_top_message"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openMessageId": "x"
+ },
+ "product": "im",
+ "tool": "set_top_message"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1121ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +messages-set-top --open-conversation-id cidDWSREALTESTNOSUCHCONV --msg-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openMessageId解密失败 (operation: im/set_top_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999532438476e0817"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openMessageId解密失败 (operation: im/set_top_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999532438476e0817"
+ }
+} |
||
dws chat +messages-unset-pin --open-conversation-id <open-conversation-id> --msg-id <msg-id>write取消钉住消息(Unpin) |
-dws mcp im unset_pin_message --json '{"openConversationId":<..>, "openMessageId":<..>}' |
+dws mcp im unset_pin_message --json '{"openConversationId":<..>, "cid":<..>, "openMessageId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/unset_pin_message输入 / CLI 输出输入 dws chat +messages-unset-pin --open-conversation-id x --msg-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "openConversationId": "x",
+ "openMessageId": "x"
+ },
+ "product": "im",
+ "tool": "unset_pin_message"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cid": "x",
+ "openConversationId": "x",
+ "openMessageId": "x"
+ },
+ "product": "im",
+ "tool": "unset_pin_message"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1185ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +fake MCP 已证明 CLI 已装配会话 ID 字段;真实后端仍报 openConversationId/openCid/cid 缺失,优先按 MCP schema/服务端字段映射问题处理。 真实输入 /private/tmp/dws-real-test chat +messages-unset-pin --open-conversation-id cidDWSREALTESTNOSUCHCONV --msg-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/unset_pin_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999544428103e08ee"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openConversationId or cid is required (operation: im/unset_pin_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "im",
+ "trace_id": "2104a64c17840999544428103e08ee"
+ }
+} |
|
dws chat +messages-unset-top --open-conversation-id <open-conversation-id> --msg-id <msg-id>write取消置顶消息 |
dws mcp im unset_top_message --json '{"openConversationId":<..>, "openMessageId":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/unset_top_message输入 / CLI 输出输入 dws chat +messages-unset-top --open-conversation-id x --msg-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openMessageId": "x"
+ },
+ "product": "im",
+ "tool": "unset_top_message"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openMessageId": "x"
+ },
+ "product": "im",
+ "tool": "unset_top_message"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=963ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +messages-unset-top --open-conversation-id cidDWSREALTESTNOSUCHCONV --msg-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openMessageId解密失败 (operation: im/unset_top_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999554154221e08f9"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] openMessageId解密失败 (operation: im/unset_top_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999554154221e08f9"
+ }
+} |
||
dws chat +messages-update-card --biz-id <biz-id> --content <content> --flow-status <flow-status>write流式更新卡片内容(最后一次 --flow-status 应为 3) |
dws mcp im update_streaming_card --json '{"bizId":<..>, "msgContent":<..>, "flowStatus":<..>}' |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/update_streaming_card输入 / CLI 输出输入 dws chat +messages-update-card --biz-id x --content x --flow-status 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "bizId": "x",
+ "flowStatus": 1,
+ "msgContent": "x"
+ },
+ "product": "im",
+ "tool": "update_streaming_card"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "bizId": "x",
+ "flowStatus": 1,
+ "msgContent": "x"
+ },
+ "product": "im",
+ "tool": "update_streaming_card"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=934ms;real-backend-safe-negative-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +messages-update-card --biz-id __DWS_SHORTCUT_REAL_TEST_NO_SUCH_ID__ --content 'DWS shortcut 真实测试 20260715-104025,安全负向输入,请忽略。' --flow-status 1 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+} |
||
dws chat +my-groups --type <type>read列出我加入的群,可按类型过滤并投影关键字段 |
-dws mcp chat <tool> |
+dws chat +my-groups --type <type>read复合/智能型列出我加入的群,可按类型过滤并投影关键字段 |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/list_my_groups_pagination输入 / CLI 输出输入 dws chat +my-groups --type x --yes stdout {
+ "count": 0,
+ "groups": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "groups": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1499ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +my-groups --type ALL --yes --format json 真实 stdout {
+ "count": 0,
+ "groups": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "groups": []
+} |
dws chat +search-msg --group <group> --query <query> --days <days>read在群内按关键词搜消息(默认近 7 天,投影发送人/时间/内容/messageId) |
-dws mcp chat <tool> |
+dws chat +search-msg --group <group> --query <query> --days <days>read复合/智能型在群内按关键词搜消息(默认近 7 天,投影发送人/时间/内容/messageId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; chat/search_messages_by_keyword输入 / CLI 输出输入 dws chat +search-msg --group x --query x --days 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "cursor": "0",
+ "endTime": 1784105093141,
+ "keyword": "x",
+ "limit": 100,
+ "openConversationId": "x",
+ "startTime": 1784018693141
+ },
+ "product": "chat",
+ "tool": "search_messages_by_keyword"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cursor": "0",
+ "endTime": 1784105093141,
+ "keyword": "x",
+ "limit": 100,
+ "openConversationId": "x",
+ "startTime": 1784018693141
+ },
+ "product": "chat",
+ "tool": "search_messages_by_keyword"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1519ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test chat +search-msg --group cid3Jijzhe2aqs9ysOXjhi05g== --query '测试' --days 7 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 当前用户暂无消息搜索权益,无法执行本次搜索。请提示用户开通消息搜索权益后重试。\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "SearchRightsDenied",
+ "server_key": "chat",
+ "trace_id": "0b5deb3217840997866824643e0853"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 当前用户暂无消息搜索权益,无法执行本次搜索。请提示用户开通消息搜索权益后重试。\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "SearchRightsDenied",
+ "server_key": "chat",
+ "trace_id": "0b5deb3217840997866824643e0853"
+ }
+} |
dws chat +send-to-group --group <group> --text <text>write按群名直接给群发消息(自动搜群解析 openConversationId) |
-dws mcp chat send_personal_message --json '{"keyword":<..>, "limit":<..>, "cursor":<..>, "title":<..>, "text":<..>, "openConversationId":<..>, "msgType":<..>, "content":<..>}' |
+dws chat +send-to-group --group <group> --text <text>write复合/智能型按群名直接给群发消息(自动搜群解析 openConversationId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 send_personal_message |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/search_groups;没找到名字匹配 "x" 的群;换用群名里连续的核心词再试。输入 / CLI 输出输入 dws chat +send-to-group --group x --text x --yes stdout (空) stderr / error 没找到名字匹配 "x" 的群;换用群名里连续的核心词再试。 最终用于判定的返回 没找到名字匹配 "x" 的群;换用群名里连续的核心词再试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=1854ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +send-to-group --group 'DWS测0715' --text 'DWS shortcut 真实测试 20260715:验证 chat +send-to-group,请忽略。' --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "openTaskId": "tECwJpPL2sAnZwUZhjTFhNWleCgSp0GSMPlGkMUIL5Q="
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "openTaskId": "tECwJpPL2sAnZwUZhjTFhNWleCgSp0GSMPlGkMUIL5Q="
+ },
+ "success": true
+} |
dws chat +thread-replies --group <group> --topic-id <topic-id> --time <time> --limit <limit>read拉取某条话题消息的全部回复并投影出发言人/文本/时间 |
-dws mcp chat <tool> |
+dws chat +thread-replies --group <group> --topic-id <topic-id> --time <time> --limit <limit>read复合/智能型拉取某条话题消息的全部回复并投影出发言人/文本/时间 |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; chat/list_topic_replies输入 / CLI 输出输入 dws chat +thread-replies --group x --topic-id x --time x --limit 1 --yes stdout {
+ "count": 0,
+ "replies": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "replies": []
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1582ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test chat +thread-replies --group cid3Jijzhe2aqs9ysOXjhi05g== --topic-id x --time '2026-07-15 10:00:00' --limit 10 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] failed to decrypt openConvThreadId\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "chat",
+ "trace_id": "0b5deb3217840997883504915e0853"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] failed to decrypt openConvThreadId\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "1001",
+ "server_key": "chat",
+ "trace_id": "0b5deb3217840997883504915e0853"
+ }
+} |
dws chat +unread-chats --count <count> --exclude-muted <exclude-muted>read列出我有未读消息的会话(投影会话名/未读数/会话ID) |
-dws mcp chat <tool> |
+dws chat +unread-chats --count <count> --exclude-muted <exclude-muted>read复合/智能型列出我有未读消息的会话(投影会话名/未读数/会话ID) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark im 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; chat/unread_message_conversation_list输入 / CLI 输出输入 dws chat +unread-chats --count 1 --exclude-muted --yes stdout {
+ "_fake": true,
+ "args": {
+ "count": 1,
+ "excludeMuted": true
+ },
+ "product": "chat",
+ "tool": "unread_message_conversation_list"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "count": 1,
+ "excludeMuted": true
+ },
+ "product": "chat",
+ "tool": "unread_message_conversation_list"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1649ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test chat +unread-chats --count 1 --exclude-muted --yes --format json 真实 stdout {
+ "conversations": [
+ {
+ "conversationId": "ciddYsoBxGQrFWR5zJ8lnpPBg==",
+ "name": "Wukong & Real 日志群"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "conversations": [
+ {
+ "conversationId": "ciddYsoBxGQrFWR5zJ8lnpPBg==",
+ "name": "Wukong & Real 日志群"
+ }
+ ]
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 | ||
|---|---|---|---|---|---|
dws aitable +advperm-disable --base-id <base-id>high-risk-write关闭指定 Base 的高级权限总开关(所有自定义角色失效) |
dws mcp aitable set_advanced_permission --json '{"baseId":<..>, "enabled":<..>}' |
lark-cli base +advperm-disable |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/set_advanced_permission输入 / CLI 输出输入 dws aitable +advperm-disable --base-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "enabled": false
+ },
+ "product": "aitable-helper",
+ "tool": "set_advanced_permission"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "enabled": false
+ },
+ "product": "aitable-helper",
+ "tool": "set_advanced_permission"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1447ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test aitable +advperm-disable --base-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to set advanced permission for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998455921653e08de\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to set advanced permission for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998455921653e08de\"}"
+ }
+} |
||
dws aitable +advperm-enable --base-id <base-id>write开启指定 Base 的高级权限总开关 |
dws mcp aitable set_advanced_permission --json '{"baseId":<..>, "enabled":<..>}' |
lark-cli base +advperm-enable |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/set_advanced_permission输入 / CLI 输出输入 dws aitable +advperm-enable --base-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "enabled": true
+ },
+ "product": "aitable-helper",
+ "tool": "set_advanced_permission"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "enabled": true
+ },
+ "product": "aitable-helper",
+ "tool": "set_advanced_permission"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1358ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test aitable +advperm-enable --base-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to set advanced permission for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"0bab027317840998469916877e08c8\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to set advanced permission for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"0bab027317840998469916877e08c8\"}"
+ }
+} |
||
dws aitable +attachment-upload --base-id <base-id> --file-name <file-name> --size <size> --mime-type <mime-type>write为 attachment 字段申请 OSS 直传地址(uploadUrl / fileToken) |
dws mcp aitable prepare_attachment_upload --json '{"baseId":<..>, "fileName":<..>, "size":<..>, "mimeType":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/prepare_attachment_upload输入 / CLI 输出输入 dws aitable +attachment-upload --base-id x --file-name x --size 1 --mime-type x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "fileName": "x",
+ "mimeType": "x",
+ "size": 1
+ },
+ "product": "aitable",
+ "tool": "prepare_attachment_upload"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "fileName": "x",
+ "mimeType": "x",
+ "size": 1
+ },
+ "product": "aitable",
+ "tool": "prepare_attachment_upload"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1131ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +attachment-upload --base-id DWSREALTESTNOSUCHID0000000000000 --file-name dws-shortcut-real-20260715-151724.txt --size 1 --mime-type text/plain --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"BASE_NOT_FOUND\",\"message\":\"Specified base does not exist, has been deleted, or is inaccessible\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to prepare attachment upload: base does not exist or is inaccessible\",\"trace_id\":\"213ee25c17840998481228948e087f\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"BASE_NOT_FOUND\",\"message\":\"Specified base does not exist, has been deleted, or is inaccessible\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to prepare attachment upload: base does not exist or is inaccessible\",\"trace_id\":\"213ee25c17840998481228948e087f\"}"
+ }
+} |
||
dws aitable +base-copy --base-id <base-id> --target-folder-id <target-folder-id> --only-struct <only-struct>write复制 AI 表格到指定目录(可仅复制结构) |
dws mcp aitable copy_base --json '{"baseId":<..>, "targetFolderId":<..>, "onlyCopyMeta":<..>}' |
lark-cli base +base-copy |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/copy_base输入 / CLI 输出输入 dws aitable +base-copy --base-id x --target-folder-id x --only-struct --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "onlyCopyMeta": true,
+ "targetFolderId": "x"
+ },
+ "product": "aitable",
+ "tool": "copy_base"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "onlyCopyMeta": true,
+ "targetFolderId": "x"
+ },
+ "product": "aitable",
+ "tool": "copy_base"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1318ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +base-copy --base-id DWSREALTESTNOSUCHID0000000000000 --target-folder-id x --only-struct --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":null,\"message\":\"Invalid source baseId: DWSREALTESTNOSUCHID0000000000000\",\"retryable\":null,\"type\":\"USER_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Invalid source baseId\",\"trace_id\":\"213ee25c17840998493715617e08e2\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":null,\"message\":\"Invalid source baseId: DWSREALTESTNOSUCHID0000000000000\",\"retryable\":null,\"type\":\"USER_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Invalid source baseId\",\"trace_id\":\"213ee25c17840998493715617e08e2\"}"
+ }
+} |
||
dws aitable +base-delete --base-id <base-id> --reason <reason>high-risk-write删除指定 Base(不可逆) |
dws mcp aitable delete_base --json '{"baseId":<..>, "reason":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/delete_base输入 / CLI 输出输入 dws aitable +base-delete --base-id x --reason x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "reason": "x"
+ },
+ "product": "aitable",
+ "tool": "delete_base"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "reason": "x"
+ },
+ "product": "aitable",
+ "tool": "delete_base"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1124ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test aitable +base-delete --base-id DWSREALTESTNOSUCHID0000000000000 --reason 'DWS shortcut 真实测试安全负向清理' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"52600003\",\"message\":\"Data not found\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete base DWSREALTESTNOSUCHID0000000000000. Check whether the base still exists, the caller still has access, and the baseId is from get_base/search_bases before retrying.\",\"trace_id\":\"2132f5ca17840998505858640e0874\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"52600003\",\"message\":\"Data not found\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete base DWSREALTESTNOSUCHID0000000000000. Check whether the base still exists, the caller still has access, and the baseId is from get_base/search_bases before retrying.\",\"trace_id\":\"2132f5ca17840998505858640e0874\"}"
+ }
+} |
||
dws aitable +base-get --base-id <base-id>read获取指定 Base 的目录信息(tables / dashboards summary) |
dws mcp aitable get_base --json '{"baseId":<..>}' |
lark-cli base +base-get |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/get_base输入 / CLI 输出输入 dws aitable +base-get --base-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_base"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_base"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1773ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +base-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --yes --format json 真实 stdout {
+ "data": {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "baseName": "Real共创版设备去向登记",
+ "dashboards": [
+ {
+ "chartCount": 8,
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2",
+ "dashboardName": "仪表盘",
+ "meta": {}
+ }
+ ],
+ "documents": [],
+ "tables": [
+ {
+ "tableId": "hERWDMS",
+ "tableName": "Mac Mini"
+ },
+ {
+ "tableId": "k8d898q",
+ "tableName": "手机"
+ },
+ {
+ "tableId": "zyLRwwa",
+ "tableName": "SIM卡"
+ },
+ {
+ "tableId": "L53jNZz",
+ "tableName": "机箱"
+ },
+ {
+ "tableId": "zTiHNDL",
+ "tableName": "磁吸片"
+ },
+ {
+ "tableId": "anMdihs",
+ "tableName": "手机线"
+ }
+ ]
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Got base 'Real共创版设备去向登记' with 6 table(s). URL rules: AI 表格访问地址: https://docs.dingtalk.com/i/nodes/{baseId}; AI 表格数据表访问地址: https://docs.dingtalk.com/i/nodes/{baseId}?iframeQuery=sheetId%3D{tableId}; AI 表格仪表盘访问地址: https://docs.dingtalk.com/i/nodes/{baseId}?iframeQuery=applicationId%3D{dashboardId}; AI 表格说明文档地址: https://pre-alidocs.dingtalk.com/i/nodes/{baseId}?iframeQuery=applicationId%3D{documentId}. User-facing guidance: 面向用户时要以人为本、友好直观,优先展示 **实体名称**、可点击链接和必要上下文,尽量隐藏 `baseId`、`tableId`、`viewId`、`dashboardId`、`documentId` 等技术细节;除非用户明确索要或排障必须,否则不要直接呈现这些 ID。"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "baseName": "Real共创版设备去向登记",
+ "dashboards": [
+ {
+ "chartCount": 8,
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2",
+ "dashboardName": "仪表盘",
+ "meta": {}
+ }
+ ],
+ "documents": [],
+ "tables": [
+ {
+ "tableId": "hERWDMS",
+ "tableName": "Mac Mini"
+ },
+ {
+ "tableId": "k8d898q",
+ "tableName": "手机"
+ },
+ {
+ "tableId": "zyLRwwa",
+ "tableName": "SIM卡"
+ },
+ {
+ "tableId": "L53jNZz",
+ "tableName": "机箱"
+ },
+ {
+ "tableId": "zTiHNDL",
+ "tableName": "磁吸片"
+ },
+ {
+ "tableId": "anMdihs",
+ "tableName": "手机线"
+ }
+ ]
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Got base 'Real共创版设备去向登记' with 6 table(s). URL rules: AI 表格访问地址: https://docs.dingtalk.com/i/nodes/{baseId}; AI 表格数据表访问地址: https://docs.dingtalk.com/i/nodes/{baseId}?iframeQuery=sheetId%3D{tableId}; AI 表格仪表盘访问地址: https://docs.dingtalk.com/i/nodes/{baseId}?iframeQuery=applicationId%3D{dashboardId}; AI 表格说明文档地址: https://pre-alidocs.dingtalk.com/i/nodes/{baseId}?iframeQuery=applicationId%3D{documentId}. User-facing guidance: 面向用户时要以人为本、友好直观,优先展示 **实体名称**、可点击链接和必要上下文,尽量隐藏 `baseId`、`tableId`、`viewId`、`dashboardId`、`documentId` 等技术细节;除非用户明确索要或排障必须,否则不要直接呈现这些 ID。"
+} |
||
dws aitable +base-get-primary-doc-id --base-id <base-id> --table-id <table-id> --record-id <record-id>read根据 baseId/tableId/recordId 获取主键文档的 dentryUuid |
dws mcp aitable get_base_primary_doc_id --json '{"baseId":<..>, "tableId":<..>, "recordId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/get_base_primary_doc_id输入 / CLI 输出输入 dws aitable +base-get-primary-doc-id --base-id x --table-id x --record-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "recordId": "x",
+ "tableId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_base_primary_doc_id"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "recordId": "x",
+ "tableId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_base_primary_doc_id"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1929ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +base-get-primary-doc-id --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --record-id 1015oH3OXy --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"-1\",\"message\":\"no record\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to query cell doc for record 1015oH3OXy in table hERWDMS\",\"trace_id\":\"0b5deb3217840997466255627e08ee\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"-1\",\"message\":\"no record\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to query cell doc for record 1015oH3OXy in table hERWDMS\",\"trace_id\":\"0b5deb3217840997466255627e08ee\"}"
+ }
+} |
||
dws aitable +base-list --limit <limit> --cursor <cursor>read获取当前用户可访问的 AI 表格 Base 列表(最近访问,支持游标分页) |
dws mcp aitable <tool> |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/list_bases输入 / CLI 输出输入 dws aitable +base-list --limit 1 --cursor x --yes stdout {
+ "bases": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "bases": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1289ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +base-list --limit 10 --cursor 0 --yes --format json 真实 stdout {
+ "bases": [],
+ "count": 0
+}真实 stderr / error (空) 真实返回 {
+ "bases": [],
+ "count": 0
+} |
||
dws aitable +base-search --query <query> --cursor <cursor>read按名称关键词搜索 AI 表格 Base |
dws mcp aitable <tool> |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/search_bases输入 / CLI 输出输入 dws aitable +base-search --query x --cursor x --yes stdout {
+ "bases": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "bases": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1628ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +base-search --query '测试' --cursor 0 --yes --format json 真实 stdout {
+ "bases": [
+ {
+ "baseId": "yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-27 21:27:03"
+ },
+ {
+ "baseId": "3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm",
+ "baseName": "文件扫描测试 -20260414"
+ },
+ {
+ "baseId": "QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N",
+ "baseName": "文件扫描测试(25)"
+ },
+ {
+ "baseId": "Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq",
+ "baseName": "文件扫描测试(5)"
+ },
+ {
+ "baseId": "OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4",
+ "baseName": "文件扫描测试(24)"
+ },
+ {
+ "baseId": "OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4",
+ "baseName": "文件扫描测试(22)"
+ },
+ {
+ "baseId": "l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4",
+ "baseName": "文件扫描测试(26)(2)"
+ },
+ {
+ "baseId": "MyQA2dXW7oOA63Yac5lMpzxkWzlwrZgb",
+ "baseName": "文件扫描测试"
+ },
+ {
+ "baseId": "9E05BDRVQePjzLkZtyX1L6vmV63zgkYA",
+ "baseName": "工作目录文件扫描测试"
+ },
+ {
+ "baseId": "y20BglGWOGQgpOj6u0GaqL3EWA7depqY",
+ "baseName": "case-0055-数据导入测试"
+ },
+ {
+ "baseId": "14dA3GK8gkP4oNl0cKqRz7jy89ekBD76",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-22 19:41:26"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSGLpk7EdJMwvDqPk",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-22 18:41:20"
+ },
+ {
+ "baseId": "7dx2rn0Jbakrq9O5t2GbL30XVMGjLRb3",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-22 16:33:50"
+ },
+ {
+ "baseId": "OG9lyrgJPL7M2ONQSzPgGxwvJzN67Mw4",
+ "baseName": "case-0052-临时测试"
+ },
+ {
+ "baseId": "wva2dxOW4kO6dpRac0jppNE58bkz3BRL",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-21 22:11:30"
+ },
+ {
+ "baseId": "0eMKjyp81MrAdNmPu4NvYXAE8xAZB1Gv",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-20 21:24:44"
+ },
+ {
+ "baseId": "dxXB52LJqwZrolvyFMkR2MDPWqjMp697",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-20 16:53:48"
+ },
+ {
+ "baseId": "bva6QBXJwZenolNyS2Gwg2NxVn4qY5Pr",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-20 15:53:56"
+ },
+ {
+ "baseId": "bva6QBXJwZenolNyS2G3bNnOVn4qY5Pr",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-20 09:09:21"
+ },
+ {
+ "baseId": "pYLaezmVNGmDXOMxuGjwevPqJrMqPxX6",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-20 08:09:11"
+ }
+ ],
+ "count": 20
+}真实 stderr / error (空) 真实返回 {
+ "bases": [
+ {
+ "baseId": "yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-27 21:27:03"
+ },
+ {
+ "baseId": "3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm",
+ "baseName": "文件扫描测试 -20260414"
+ },
+ {
+ "baseId": "QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N",
+ "baseName": "文件扫描测试(25)"
+ },
+ {
+ "baseId": "Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq",
+ "baseName": "文件扫描测试(5)"
+ },
+ {
+ "baseId": "OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4",
+ "baseName": "文件扫描测试(24)"
+ },
+ {
+ "baseId": "OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4",
+ "baseName": "文件扫描测试(22)"
+ },
+ {
+ "baseId": "l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4",
+ "baseName": "文件扫描测试(26)(2)"
+ },
+ {
+ "baseId": "MyQA2dXW7oOA63Yac5lMpzxkWzlwrZgb",
+ "baseName": "文件扫描测试"
+ },
+ {
+ "baseId": "9E05BDRVQePjzLkZtyX1L6vmV63zgkYA",
+ "baseName": "工作目录文件扫描测试"
+ },
+ {
+ "baseId": "y20BglGWOGQgpOj6u0GaqL3EWA7depqY",
+ "baseName": "case-0055-数据导入测试"
+ },
+ {
+ "baseId": "14dA3GK8gkP4oNl0cKqRz7jy89ekBD76",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-22 19:41:26"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSGLpk7EdJMwvDqPk",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-22 18:41:20"
+ },
+ {
+ "baseId": "7dx2rn0Jbakrq9O5t2GbL30XVMGjLRb3",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-22 16:33:50"
+ },
+ {
+ "baseId": "OG9lyrgJPL7M2ONQSzPgGxwvJzN67Mw4",
+ "baseName": "case-0052-临时测试"
+ },
+ {
+ "baseId": "wva2dxOW4kO6dpRac0jppNE58bkz3BRL",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-21 22:11:30"
+ },
+ {
+ "baseId": "0eMKjyp81MrAdNmPu4NvYXAE8xAZB1Gv",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-20 21:24:44"
+ },
+ {
+ "baseId": "dxXB52LJqwZrolvyFMkR2MDPWqjMp697",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-20 16:53:48"
+ },
+ {
+ "baseId": "bva6QBXJwZenolNyS2Gwg2NxVn4qY5Pr",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-20 15:53:56"
+ },
+ {
+ "baseId": "bva6QBXJwZenolNyS2G3bNnOVn4qY5Pr",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-20 09:09:21"
+ },
+ {
+ "baseId": "pYLaezmVNGmDXOMxuGjwevPqJrMqPxX6",
+ "baseName": "🧪测试 工作区目录扫描 - 2026-04-20 08:09:11"
+ }
+ ],
+ "count": 20
+} |
||
dws aitable +base-update --base-id <base-id> --name <name> --desc <desc>write更新 Base 名称(可选备注) |
dws mcp aitable update_base --json '{"baseId":<..>, "newBaseName":<..>, "description":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/update_base输入 / CLI 输出输入 dws aitable +base-update --base-id x --name x --desc x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "description": "x",
+ "newBaseName": "x"
+ },
+ "product": "aitable",
+ "tool": "update_base"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "description": "x",
+ "newBaseName": "x"
+ },
+ "product": "aitable",
+ "tool": "update_base"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1318ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +base-update --base-id DWSREALTESTNOSUCHID0000000000000 --name 'DWS shortcut 真实测试 20260715-151724' --desc 'DWS shortcut 真实测试描述,可删除' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"BASE_NOT_FOUND\",\"message\":\"Specified base does not exist, has been deleted, or is inaccessible\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update base because base does not exist or is inaccessible\",\"trace_id\":\"2132f5ca17840998518767946e08b6\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"BASE_NOT_FOUND\",\"message\":\"Specified base does not exist, has been deleted, or is inaccessible\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update base because base does not exist or is inaccessible\",\"trace_id\":\"2132f5ca17840998518767946e08b6\"}"
+ }
+} |
||
dws aitable +chart-delete --base-id <base-id> --dashboard-id <dashboard-id> --chart-id <chart-id> --reason <reason>high-risk-write删除指定 chart 及其布局项(不可逆) |
dws mcp aitable delete_chart --json '{"baseId":<..>, "dashboardId":<..>, "chartId":<..>, "reason":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/delete_chart输入 / CLI 输出输入 dws aitable +chart-delete --base-id x --dashboard-id x --chart-id x --reason x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "chartId": "x",
+ "dashboardId": "x",
+ "reason": "x"
+ },
+ "product": "aitable",
+ "tool": "delete_chart"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "chartId": "x",
+ "dashboardId": "x",
+ "reason": "x"
+ },
+ "product": "aitable",
+ "tool": "delete_chart"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1154ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +chart-delete --base-id DWSREALTESTNOSUCHID0000000000000 --dashboard-id DWSREALTESTNOSUCHID0000000000000 --chart-id DWSREALTESTNOSUCHID0000000000000 --reason 'DWS shortcut 真实测试安全负向清理' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete chart DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"0bab027317840998530143696e08c9\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete chart DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"0bab027317840998530143696e08c9\"}"
+ }
+} |
||
dws aitable +chart-get --base-id <base-id> --dashboard-id <dashboard-id> --chart-id <chart-id>read获取指定 chart 的详细信息 |
dws mcp aitable get_chart --json '{"baseId":<..>, "dashboardId":<..>, "chartId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/get_chart输入 / CLI 输出输入 dws aitable +chart-get --base-id x --dashboard-id x --chart-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "chartId": "x",
+ "dashboardId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_chart"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "chartId": "x",
+ "dashboardId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_chart"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1038ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +chart-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --dashboard-id KY9tlWg5NEHgfs8WT6IO2 --chart-id widget-dlxFo0tNSImp4ITpDn5fQ --yes --format json 真实 stdout {
+ "data": {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-dlxFo0tNSImp4ITpDn5fQ",
+ "chartName": "各业务线未部署数",
+ "chartType": "BAR",
+ "config": {
+ "axisLabelShow": false,
+ "categoryAxisMaxRatio": "0.3",
+ "chartType": "BAR",
+ "colors": "COLOR_PALETTE_1",
+ "dimension": [
+ {
+ "value": "rjwzzIu"
+ }
+ ],
+ "fillType": "solid",
+ "filter": [],
+ "gridShow": false,
+ "group": [
+ {
+ "value": "none"
+ }
+ ],
+ "label": true,
+ "labelHideOverlap": true,
+ "legend": "top",
+ "measure": [
+ {
+ "externalValue": [
+ {
+ "type": "formula",
+ "value": "count"
+ }
+ ],
+ "value": "kFwb8br"
+ }
+ ],
+ "measureType": "field",
+ "nullValue": "ignore",
+ "sheet": "hERWDMS",
+ "sortRule": "asc",
+ "view": "",
+ "xAbbr": {
+ "abbr": "",
+ "decimal": "",
+ "numberType": "default"
+ },
+ "xAxisLabel": true,
+ "xAxisLabelRotate": "auto",
+ "xAxisLine": false,
+ "xAxisShow": true,
+ "xSortBy": "x",
+ "xSortCustom": [],
+ "yAbbr": {
+ "abbr": "",
+ "decimal": "",
+ "numberType": "default"
+ },
+ "yAxisLabel": true,
+ "yAxisLine": false,
+ "yAxisRange": {
+ "range": [],
+ "type": "absolute"
+ },
+ "yAxisShow": true,
+ "yRightAbbr": {
+ "abbr": "",
+ "decimal": "",
+ "numberType": "default"
+ },
+ "ySortCustom": []
+ },
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2",
+ "layout": {
+ "h": 5,
+ "i": "widget-dlxFo0tNSImp4ITpDn5fQ",
+ "w": 6,
+ "x": 0,
+ "y": 4
+ }
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Got chart widget-dlxFo0tNSImp4ITpDn5fQ"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-dlxFo0tNSImp4ITpDn5fQ",
+ "chartName": "各业务线未部署数",
+ "chartType": "BAR",
+ "config": {
+ "axisLabelShow": false,
+ "categoryAxisMaxRatio": "0.3",
+ "chartType": "BAR",
+ "colors": "COLOR_PALETTE_1",
+ "dimension": [
+ {
+ "value": "rjwzzIu"
+ }
+ ],
+ "fillType": "solid",
+ "filter": [],
+ "gridShow": false,
+ "group": [
+ {
+ "value": "none"
+ }
+ ],
+ "label": true,
+ "labelHideOverlap": true,
+ "legend": "top",
+ "measure": [
+ {
+ "externalValue": [
+ {
+ "type": "formula",
+ "value": "count"
+ }
+ ],
+ "value": "kFwb8br"
+ }
+ ],
+ "measureType": "field",
+ "nullValue": "ignore",
+ "sheet": "hERWDMS",
+ "sortRule": "asc",
+ "view": "",
+ "xAbbr": {
+ "abbr": "",
+ "decimal": "",
+ "numberType": "default"
+ },
+ "xAxisLabel": true,
+ "xAxisLabelRotate": "auto",
+ "xAxisLine": false,
+ "xAxisShow": true,
+ "xSortBy": "x",
+ "xSortCustom": [],
+ "yAbbr": {
+ "abbr": "",
+ "decimal": "",
+ "numberType": "default"
+ },
+ "yAxisLabel": true,
+ "yAxisLine": false,
+ "yAxisRange": {
+ "range": [],
+ "type": "absolute"
+ },
+ "yAxisShow": true,
+ "yRightAbbr": {
+ "abbr": "",
+ "decimal": "",
+ "numberType": "default"
+ },
+ "ySortCustom": []
+ },
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2",
+ "layout": {
+ "h": 5,
+ "i": "widget-dlxFo0tNSImp4ITpDn5fQ",
+ "w": 6,
+ "x": 0,
+ "y": 4
+ }
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Got chart widget-dlxFo0tNSImp4ITpDn5fQ"
+} |
||
dws aitable +chart-share-get --base-id <base-id> --dashboard-id <dashboard-id> --chart-id <chart-id>read查询 chart 的分享配置 |
dws mcp aitable get_chart_share --json '{"baseId":<..>, "dashboardId":<..>, "chartId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/get_chart_share输入 / CLI 输出输入 dws aitable +chart-share-get --base-id x --dashboard-id x --chart-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "chartId": "x",
+ "dashboardId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_chart_share"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "chartId": "x",
+ "dashboardId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_chart_share"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1584ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test aitable +chart-share-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --dashboard-id KY9tlWg5NEHgfs8WT6IO2 --chart-id widget-dlxFo0tNSImp4ITpDn5fQ --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"403\",\"message\":\"Forbidden\",\"retryable\":false,\"type\":\"AUTH_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to get chart share config for chart widget-dlxFo0tNSImp4ITpDn5fQ: [403] Forbidden\",\"trace_id\":\"2127d89817840997481396653e075d\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"403\",\"message\":\"Forbidden\",\"retryable\":false,\"type\":\"AUTH_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to get chart share config for chart widget-dlxFo0tNSImp4ITpDn5fQ: [403] Forbidden\",\"trace_id\":\"2127d89817840997481396653e075d\"}"
+ }
+} |
||
dws aitable +chart-share-update --base-id <base-id> --dashboard-id <dashboard-id> --chart-id <chart-id> --enabled <enabled> --share-type <share-type> --allow-back-to-doc <allow-back-to-doc>write开启/关闭 chart 分享并可设置分享类型 |
dws mcp aitable update_chart_share --json '{"baseId":<..>, "dashboardId":<..>, "chartId":<..>, "enabled":<..>, "shareType":<..>, "allowBackToDoc":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/update_chart_share输入 / CLI 输出输入 dws aitable +chart-share-update --base-id x --dashboard-id x --chart-id x --enabled --share-type PUBLIC --allow-back-to-doc --yes stdout {
+ "_fake": true,
+ "args": {
+ "allowBackToDoc": true,
+ "baseId": "x",
+ "chartId": "x",
+ "dashboardId": "x",
+ "enabled": true,
+ "shareType": "PUBLIC"
+ },
+ "product": "aitable",
+ "tool": "update_chart_share"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "allowBackToDoc": true,
+ "baseId": "x",
+ "chartId": "x",
+ "dashboardId": "x",
+ "enabled": true,
+ "shareType": "PUBLIC"
+ },
+ "product": "aitable",
+ "tool": "update_chart_share"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1175ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +chart-share-update --base-id DWSREALTESTNOSUCHID0000000000000 --dashboard-id DWSREALTESTNOSUCHID0000000000000 --chart-id DWSREALTESTNOSUCHID0000000000000 --enabled --share-type PUBLIC --allow-back-to-doc --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update chart share for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"0bab027317840998541842968e094d\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update chart share for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"0bab027317840998541842968e094d\"}"
+ }
+} |
||
dws aitable +chart-update --base-id <base-id> --dashboard-id <dashboard-id> --chart-id <chart-id> --config <config> --layout <layout>write更新指定 chart 的配置或布局(--config 必填) |
dws mcp aitable update_chart --json '{"baseId":<..>, "dashboardId":<..>, "chartId":<..>, "config":<..>, "layout":<..>}' |
lark base 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--config JSON 解析失败: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws aitable +chart-update --base-id x --dashboard-id x --chart-id x --config x --layout x --yes stdout (空) stderr / error --config JSON 解析失败: invalid character 'x' looking for beginning of value 最终用于判定的返回 --config JSON 解析失败: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1102ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +chart-update --base-id DWSREALTESTNOSUCHID0000000000000 --dashboard-id DWSREALTESTNOSUCHID0000000000000 --chart-id DWSREALTESTNOSUCHID0000000000000 --config '{}' --layout '{}' --yes --format json真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_PARAMS\",\"message\":\"config is required\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update chart because config is missing\",\"trace_id\":\"2106d98117840998553244877e08df\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_PARAMS\",\"message\":\"config is required\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update chart because config is missing\",\"trace_id\":\"2106d98117840998553244877e08df\"}"
+ }
+} |
||
dws aitable +chart-widgets-exampleread获取所有图表类型的 widget config 示例 |
dws mcp aitable get_dashboard_widgets_example |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/get_dashboard_widgets_example输入 / CLI 输出输入 dws aitable +chart-widgets-example --yes stdout {
+ "_fake": true,
+ "args": {},
+ "product": "aitable",
+ "tool": "get_dashboard_widgets_example"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {},
+ "product": "aitable",
+ "tool": "get_dashboard_widgets_example"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1286ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +chart-widgets-example --yes --format json 真实 stdout {
+ "data": "// 注意\n// 1. 下述 JSON 示例中的注释(// 开头的注释)仅用于说明,实际使用时请删除,否则会导致解析错误\n// 2. 所有图表类型的 widget config 示例,key 是图表类型,value 是对应的完整 config\n// 3. 创建图表时,必需使用示例中的图表类型和配置格式\n\n\n{\n// 聚合列表视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"AGGREGATE_LIST_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"AGGREGATE_LIST_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"聚合列表视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 列表自定义配置,用于设置聚合列表的自定义样式和行为\n \"listCustom\": {},\n // 列表配置,用于设置聚合列表的显示方式和布局\n \"listConfig\": {},\n // 字段聚合映射,用于设置字段的聚合方式(如 sum、count、avg 等)\n \"fieldAggregateMap\": {},\n // 工具栏配置,用于控制聚合列表视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示分组按钮\n \"enableGroup\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n },\n },\n// AI 分析卡片配置格式,必须按照此格式配置,否则会导致解析错误\n // 注意:AI 分析卡片不依赖数据表,无需配置 sheet / view / filter\n \"AI_ANALYZE\": {\n // 必填,图表类型,固定值 \"AI_ANALYZE\"\n \"chartType\": \"AI_ANALYZE\",\n // 必填,卡片标题,用户在仪表盘中看到的图表名称,应准确且见名知意\n \"name\": \"AI 分析卡片\",\n // 可选,AI 提示词,用自然语言描述希望 AI 分析的内容和问题,\n // 例如:\"分析本月各产品线的销售额趋势,找出增长最快的类别并给出建议\"\n \"prompt\": \"\",\n // 可选,需要 AI 参考分析的图表 ID 列表,数组中每个元素必须是当前仪表盘中已存在的图表 ID;\n // 不填或传空数组时 AI 将基于提示词独立分析,不关联具体图表数据\n \"analyzeChartIds\": [],\n // 可选,指定 AI 模型 ID;不填时使用系统默认模型\n \"modelId\": \"\",\n // 只读,AI 生成的 Markdown 分析内容,由系统写入,创建时无需填写\n \"content\": \"\",\n // 只读,AI 分析结果的最后更新时间戳(毫秒),由系统写入,创建时无需填写\n \"lastUpdatedAt\": null\n },\n// 面积图配置格式\n \"AREA\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"AREA\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"面积图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_date_01\",\n \"externalValue\": []\n }\n ],\n \"smooth\": false,\n \"symbolType\": \"always\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"label\": false,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"filter\": []\n }\n// 条形图配置格式\n \"BAR\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"BAR\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"条形图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"record-count\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"nullValue\": \"ignore\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"gridShow\": false,\n \"label\": true,\n \"labelHideOverlap\": true,\n \"xAxisShow\": true,\n \"xAxisLine\": false,\n \"xAxisLabel\": true,\n \"categoryAxisMaxRatio\": \"0.3\",\n \"yAxisShow\": true,\n \"yAxisLine\": false,\n \"yAxisLabel\": true,\n \"fillType\": \"solid\",\n \"filter\": []\n }\n// 按钮配置格式,必须按照此格式配置,否则会导致解析错误\n \"BUTTON\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"BUTTON\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"按钮\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 可选,按钮样式类型,合法值有:type1 到 type10,默认为 type1\n \"buttonStyleType\": \"type1\",\n // 可选,边框宽度,默认为 1\n \"borderWidth\": 1,\n // 可选,按钮大小,合法值有:default(默认)/ small(小)/ large(大),默认为 default\n \"buttonSize\": \"default\",\n // 可选,按钮图标,合法值有:link / download / refresh 等\n \"buttonIcon\": \"link\",\n // 可选,按钮图标背景类型,合法值有:light(浅色)/ dark(深色),默认为 light\n \"buttonIconBackgroundType\": \"light\",\n // 可选,按钮字体配置\n \"buttonFontSetting\": {\n // 字体大小,默认为 14\n \"size\": 14,\n // 字体颜色\n \"color\": \"\",\n // 字间距,默认为 0\n \"letterSpacing\": 0,\n // 是否加粗,默认为 false\n \"bold\": false,\n // 是否斜体,默认为 false\n \"italic\": false,\n // 是否下划线,默认为 false\n \"underline\": false\n }\n },\n// 日历视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"CALENDAR_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"CALENDAR_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"日历视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 视图分组配置,用于设置视图的默认分组规则\n \"viewGroup\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 日历自定义配置,这是日历视图的核心配置\n \"calendarCustom\": {\n // 必填,显示字段 ID(必须是该表中真实存在的字段 ID)\n // 用于在日历中显示事件标题或描述\n \"displayFieldId\": \"fld_text_01\",\n // 必填,开始时间字段 ID(必须是该表中真实存在的日期字段 ID)\n // 用于设置事件的开始时间\n \"startField\": \"fld_date_01\",\n // 必填,结束时间字段 ID(必须是该表中真实存在的日期字段 ID)\n // 用于设置事件的结束时间\n \"endField\": \"fld_date_02\",\n // 标记配置,用于在日历中添加特殊标记或样式\n \"markers\": [],\n // 时间轴刻度,合法值有:day(日)/ week(周)/ month(月)\n // 用于设置日历的显示粒度\n \"timelineScale\": \"month\",\n // 列宽度映射,key 为 fieldId,value 为列宽度(像素)\n \"widthMap\": {},\n // 单元格高度,单位为像素,默认为 32\n \"cellHeight\": 32\n },\n // 工具栏配置,用于控制日历视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示分组按钮\n \"enableGroup\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n // 是否显示编辑记录按钮\n \"enableEditRecord\": false\n },\n },\n// 卡片列表视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"CARD_LIST_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"CARD_LIST_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"卡片列表视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 列表自定义配置,用于设置卡片列表的自定义样式和行为\n \"listCustom\": {},\n // 列表配置,用于设置卡片列表的显示方式和布局\n \"listConfig\": {},\n // 工具栏配置,用于控制卡片列表视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n },\n },\n// 折叠列表视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"COLLAPSIBLE_LIST_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"COLLAPSIBLE_LIST_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"折叠列表视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 列表自定义配置,用于设置折叠列表的自定义样式和行为\n \"listCustom\": {},\n // 列表配置,用于设置折叠列表的显示方式和布局\n \"listConfig\": {},\n // 工具栏配置,用于控制折叠列表视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示分组按钮\n \"enableGroup\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n },\n },\n// 组合布局配置格式,必须按照此格式配置,否则会导致解析错误\n \"COMPOSITE_LAYOUT\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"COMPOSITE_LAYOUT\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"组合布局\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\"\n // 组合布局容器,无特殊配置字段,用于承载其他图表组件\n },\n// 组合图配置格式,必须按照此格式配置,否则会导致解析错误\n \"COMPOSITION\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"COMPOSITION\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"组合图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ],\n \"composition\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"HISTOGRAM\",\n \"yAxisPosition\": \"left\"\n }\n },\n {\n \"value\": \"fld_number_02\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"average\"\n }\n ],\n \"composition\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"LINE\",\n \"yAxisPosition\": \"right\"\n }\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_date_01\",\n \"externalValue\": []\n }\n ],\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"gridShow\": false,\n \"label\": true,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"filter\": []\n },\n// ═══════════════════════════════════════════════════════════════════\n // 图表类型:倒计时(COUNTDOWN)\n // 别名/同义词:倒计时、正计时、计时器、倒计时卡片\n // 用途:用于展示距离某个目标日期的剩余时间或已过时间,\n // 支持倒计时和正计时两种模式。适合展示活动截止时间、\n // 项目里程碑、重要日期提醒等场景。\n // ═══════════════════════════════════════════════════════════════════\n // ⚠️ 重要注意事项:\n // 1. fixedDatetime 必须是毫秒时间戳(如 1746028800000),不是日期字符串(如 \"2026-05-01\")!\n // 2. unit 是一个对象(Object),不是字符串!不要写成 \"天\" 或 \"day\"!\n // 3. 背景色字段名是 \"background\",不是 \"backgroundColor\"\n // 4. 时间数字颜色字段名是 \"timeColor\",不是 \"numberColor\"\n // 5. 描述文字颜色字段名是 \"descColor\",不是 \"titleColor\"\n // 6. 不存在 \"countdownType\"、\"endDate\"、\"numberColor\"、\"titleColor\" 等字段,使用这些字段会导致图表渲染异常\n \"COUNTDOWN\": {\n // 必填,图表类型,固定值 \"COUNTDOWN\"\n \"chartType\": \"COUNTDOWN\",\n // 必填,卡片标题,用户在仪表盘中看到的图表名称,应准确且见名知意\n \"name\": \"倒计时\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": null,\n // 可选,描述文本,显示在倒计时数字上方\n \"desc\": \"倒计时\",\n // 必填,数据来源类型,合法值:fixed(固定日期时间)/ field(从数据表日期字段取值)\n \"sourceType\": \"fixed\",\n // sourceType = \"fixed\" 时必填,目标日期的毫秒时间戳\n // ⚠️ 必须是毫秒时间戳数字(如 1746028800000),不是日期字符串(如 \"2026-05-01\")!\n // 示例:2026-05-01 00:00:00 → 1746028800000\n \"fixedDatetime\": 1746028800000,\n // sourceType = \"field\" 时填写,日期字段的 fieldId\n \"fieldId\": null,\n // sourceType = \"field\" 时填写,日期选择方式,合法值:earliest(最早日期)/ latest(最晚日期)\n \"fieldChoice\": \"earliest\",\n // 必填,计时模式,合法值:countdown(倒计时,目标时间在未来)/ countup(正计时,目标时间在过去)\n \"timingMode\": \"countdown\",\n // 必填,显示的时间单位开关(是一个对象,不是字符串!)\n // ⚠️ 不要写成 \"天\" 或 \"day\",必须是如下对象格式:\n \"unit\": {\n // 是否显示月,默认 false\n \"month\": false,\n // 是否显示周,默认 false\n \"week\": false,\n // 是否显示天,默认 true\n \"day\": true,\n // 是否显示小时,默认 true\n \"hour\": true,\n // 是否显示分钟,默认 true\n \"minute\": true,\n // 是否显示秒,默认 true\n \"second\": true\n },\n\n // ── 样式配置 ──────────────────────────────────────────────────────────────\n // 可选,卡片背景颜色(⚠️ 字段名是 \"background\",不是 \"backgroundColor\")\n \"background\": \"\",\n // 可选,描述文字颜色(⚠️ 字段名是 \"descColor\",不是 \"titleColor\")\n \"descColor\": \"\",\n // 可选,时间块背景颜色\n \"timeBlockColor\": \"\",\n // 可选,倒计时数字颜色(⚠️ 字段名是 \"timeColor\",不是 \"numberColor\")\n \"timeColor\": \"\",\n // 可选,计时完成是否显示动效,默认 false\n \"showFinishEffect\": false\n },\n// 详情列表视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"DETAIL_LIST_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"DETAIL_LIST_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"详情列表视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 列表自定义配置,用于设置详情列表的自定义样式和行为\n \"listCustom\": {},\n // 列表配置,用于设置详情列表的显示方式和布局\n \"listConfig\": {},\n // 工具栏配置,用于控制详情列表视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n },\n },\n// 嵌入网页配置格式,必须按照此格式配置,否则会导致解析错误\n \"EMBED_WEBPAGE\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"EMBED_WEBPAGE\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"嵌入网页\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 必填,嵌入的网页 URL(必须是有效的 URL 地址)\n \"url\": \"https://example.com\"\n },\n// 漏斗图配置格式,必须按照此格式配置,否则会导致解析错误\n \"FUNNEL\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"FUNNEL\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"漏斗图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n \"measureType\": \"record-count\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\"\n }\n ],\n \"colors\": \"COLOR_PALETTE_1\",\n \"sumValue\": true,\n \"funnelType\": \"normal\",\n \"filter\": []\n },\n// 画册视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"GALLERY_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"GALLERY_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"画册视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 画册自定义配置,用于设置画册的显示样式\n \"galleryCustom\": {\n // 卡片设置,用于配置画册中卡片的显示方式\n \"cardSetting\": {\n // 封面模式,合法值有:none(无封面)/ cover(封面)等\n \"coverMode\": \"none\"\n }\n },\n // 工具栏配置,用于控制画册视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n // 是否显示编辑记录按钮\n \"enableEditRecord\": false\n },\n },\n// 甘特视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"GANTT_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"GANTT_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"甘特视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 视图分组配置,用于设置视图的默认分组规则\n \"viewGroup\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 是否折叠网格,默认为 false\n \"collapsedGrid\": false,\n // 甘特自定义配置,这是甘特视图的核心配置\n \"ganttCustom\": {\n // 必填,显示字段 ID(必须是该表中真实存在的字段 ID)\n // 用于在甘特图中显示任务名称或描述\n \"displayFieldId\": \"fld_text_01\",\n // 必填,开始时间字段 ID(必须是该表中真实存在的日期字段 ID)\n // 用于设置任务的开始时间\n \"startField\": \"fld_date_01\",\n // 必填,结束时间字段 ID(必须是该表中真实存在的日期字段 ID)\n // 用于设置任务的结束时间\n \"endField\": \"fld_date_02\",\n // 标记配置,用于在甘特图中添加里程碑或重要时间点\n \"markers\": [],\n // 时间轴刻度,合法值有:day(日)/ week(周)/ month(月)/ quarter(季)/ year(年)\n // 用于设置甘特图的时间轴显示粒度\n \"timelineScale\": \"month\",\n // 列宽度映射,key 为 fieldId,value 为列宽度(像素)\n \"widthMap\": {},\n // 单元格高度,单位为像素,默认为 32\n \"cellHeight\": 32\n },\n // 工具栏配置,用于控制甘特视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示分组按钮\n \"enableGroup\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n // 是否显示编辑记录按钮\n \"enableEditRecord\": false\n },\n },\n// 表格视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"GRID_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"GRID_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"表格视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 视图分组配置,用于设置视图的默认分组规则\n \"viewGroup\": [],\n // 单元格高度,单位为像素,默认为 32\n \"cellHeight\": 32,\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列宽度映射,key 为 fieldId,value 为列宽度(像素)\n \"widthMap\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 冻结列数,默认为 1,表示冻结左侧的列数\n \"frozenColCount\": 1,\n // 工具栏配置,用于控制表格视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示分组按钮\n \"enableGroup\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 创建行按钮的文本内容\n \"createRowText\": \"\",\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n // 是否显示编辑记录按钮\n \"enableEditRecord\": false\n },\n },\n// ═══════════════════════════════════════════════════════════════════\n // 图表类型:柱状图(HISTOGRAM)\n // 别名/同义词:竖向柱图、垂直柱图、分组柱图\n // 用途:以垂直柱子展示多个分类维度的数值对比,适合比较不同类别之间的\n // 数量差异,如各月销售额对比、各部门人数对比、各产品销量排名等。\n // 核心特征:有 X 轴(分类维度)和 Y 轴(数值),每个类别对应一根柱子。\n // 与\"统计数字(SUMMARY)\"的关键区别:\n // - 柱状图(HISTOGRAM):展示多个分类的对比,有坐标轴,是\"多值图表\"\n // - 统计数字(SUMMARY):只展示一个聚合数字,无坐标轴,是\"单值卡片\"\n // 重要:当用户说\"柱状图\"、\"柱图\"、\"分组柱图\"时,\n // 必须使用 chartType = \"HISTOGRAM\",不要使用 SUMMARY 或其他图表类型。\n // ═══════════════════════════════════════════════════════════════════\n \"HISTOGRAM\": {\n // 必填,图表类型,固定值 \"HISTOGRAM\"(柱状图)\n \"chartType\": \"HISTOGRAM\",\n // 必填,卡片标题,用户在仪表盘中看到的图表名称,应准确且见名知意\n \"name\": \"柱状图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"record-count\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_02\"\n }\n ],\n \"xSortBy\": \"x\",\n \"xSortCustom\": [],\n \"ySortCustom\": [],\n \"sortRule\": \"asc\",\n \"nullValue\": \"ignore\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"gridShow\": false,\n \"axisLabelShow\": false,\n \"label\": true,\n \"labelHideOverlap\": true,\n \"xAxisShow\": true,\n \"xAxisLine\": false,\n \"xAxisLabel\": true,\n \"xAxisLabelRotate\": \"auto\",\n \"categoryAxisMaxRatio\": \"0.2\",\n \"yAxisShow\": true,\n \"yAxisLine\": false,\n \"yAxisLabel\": true,\n \"fillType\": \"solid\",\n \"yAxisRange\": {\n \"type\": \"absolute\",\n \"range\": []\n },\n \"xAbbr\": {\n \"numberType\": \"default\",\n \"abbr\": \"\",\n \"decimal\": \"\"\n },\n \"yAbbr\": {\n \"numberType\": \"default\",\n \"abbr\": \"\",\n \"decimal\": \"\"\n },\n \"yRightAbbr\": {\n \"numberType\": \"default\",\n \"abbr\": \"\",\n \"decimal\": \"\"\n },\n \"filter\": []\n }\n// ═══════════════════════════════════════════════════════════════════\n // 图表类型:图片(IMAGE)\n // 别名/同义词:图片卡、图片展示、图片轮播、Banner 图\n // 用途:在仪表盘中展示一张或多张静态图片,支持多图轮播(滑动/淡入淡出),\n // 可为每张图片配置标题、描述和点击跳转链接。适合展示品牌 Banner、\n // 产品图、说明图、装饰图等不依赖数据表的纯图片内容。\n // 重要:当用户说\"图片\"、\"图片卡\"、\"图片展示\"、\"Banner\"、\"轮播图\"时,\n // 必须使用 chartType = \"IMAGE\",不要使用其他图表类型。\n // 此图表类型不依赖数据表,无需配置 sheet / view / filter。\n // ═══════════════════════════════════════════════════════════════════\n \"IMAGE\": {\n // 必填,图表类型,固定值 \"IMAGE\"(图片)\n \"chartType\": \"IMAGE\",\n // 必填,卡片标题,用户在仪表盘中看到的图表名称,应准确且见名知意\n \"name\": \"图片\",\n // 必填,图片列表,至少包含一张图片;多张图片时支持轮播\n \"img_images\": [\n {\n // 必填,图片的访问 URL\n \"url\": \"https://example.com/image.png\",\n // 可选,图片标题,显示在图片上方(需 img_showImgText=true)\n \"title\": \"\",\n // 可选,图片描述,显示在标题下方(需 img_showImgText=true)\n \"desc\": \"\",\n // 可选,点击图片后跳转的链接 URL\n \"toUrl\": \"\",\n // 必填,图片填充模式,合法值:cover(裁剪铺满)/ contain(等比缩放留白)/ fill(拉伸铺满)\n \"fillMode\": \"cover\"\n }\n ],\n // 可选,是否在图片上显示标题和描述文字,默认 true;\n // 设为 false 时 img_titleStyle / img_descStyle / img_textAlign 均不生效\n \"img_showImgText\": true,\n // 可选,图片文字的对齐位置,合法值:\n // leftTop / top / rightTop / left / center / right / leftBottom / bottom / rightBottom\n \"img_textAlign\": \"center\",\n // 可选,图片标题的字体样式(仅 img_showImgText=true 时生效)\n \"img_titleStyle\": {\n // 字体大小(px),合法范围 16~56,步长 4\n \"size\": 16,\n // 字体颜色,十六进制色值,如 \"#FFFFFF\"\n \"color\": \"\",\n // 是否加粗\n \"bold\": true,\n // 是否斜体\n \"italic\": false,\n // 是否下划线\n \"underline\": false\n },\n // 可选,图片描述的字体样式(仅 img_showImgText=true 时生效)\n \"img_descStyle\": {\n // 字体大小(px),合法范围 16~56,步长 4\n \"size\": 14,\n // 字体颜色,十六进制色值\n \"color\": \"\",\n // 是否加粗\n \"bold\": false,\n // 是否斜体\n \"italic\": false,\n // 是否下划线\n \"underline\": false\n },\n // 可选,多图时是否自动轮播,默认 false;单张图片时此配置无效\n \"img_autoPlay\": false,\n // 可选,多图轮播切换动效,合法值:slide(滑动)/ fade(淡入淡出),默认 slide;单张图片时无效\n \"img_imgTransitionType\": \"slide\",\n // 可选,多图自动轮播间隔(秒),合法范围 0.1~1000,默认 1;仅 img_autoPlay=true 时生效\n \"img_imgTransitionInterval\": 1\n },\n// 看板视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"KANBAN_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"KANBAN_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"看板视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 看板自定义配置,这是看板视图的核心配置\n \"kanbanCustom\": {\n // 分组基础配置,用于设置看板的分组字段\n \"groupBase\": {\n // 必填,分组字段 ID(必须是该表中真实存在的字段 ID)\n // 看板将按照此字段的值进行分组显示\n \"baseFieldId\": \"fld_select_01\"\n }\n },\n // 工具栏配置,用于控制看板视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n // 是否显示编辑记录按钮\n \"enableEditRecord\": false\n },\n },\n// 排行榜配置格式,必须按照此格式配置,否则会导致解析错误\n \"LEADERBOARD\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"LEADERBOARD\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"排行榜\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n \"measureType\": \"record-count\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_text_01\"\n }\n ],\n \"showType\": \"podium\", // 展示类型:podium 领奖台/list 列表\n \"showCount\": 10, // 显示条数\n \"hideValue\": false,\n \"sortRule\": \"asc\",\n \"filter\": []\n },\n// 折线图配置格式\n \"LINE\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"LINE\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"折线图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_date_01\",\n \"externalValue\": []\n }\n ],\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"nullValue\": \"ignore\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"gridShow\": false,\n \"label\": true,\n \"labelHideOverlap\": true,\n \"smooth\": false,\n \"symbolType\": \"always\",\n \"xAxisShow\": true,\n \"xAxisLine\": false,\n \"xAxisLabel\": true,\n \"yAxisShow\": true,\n \"yAxisLine\": false,\n \"yAxisLabel\": true,\n \"fillType\": \"solid\",\n \"filter\": []\n }\n// 抽奖配置格式,必须按照此格式配置,否则会导致解析错误\n \"LOTTERY\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"LOTTERY\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"抽奖\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 必填,指标类型,合法值有:record-count(记录数)/ field(字段)\n \"measureType\": \"record-count\",\n // 必填,指标配置数组\n \"measure\": [],\n // 可选,输出表 ID,用于记录中奖结果\n \"outputSheet\": \"\",\n // 可选,滚动速度,默认为 5\n \"speed\": 5,\n // 可选,字体大小,默认为 20\n \"fontSize\": 20,\n // 可选,颜色主题,合法值有:COLOR_PALETTE_1 到 COLOR_PALETTE_10\n \"colors\": \"COLOR_PALETTE_1\",\n // 必填,奖项配置数组,每个元素格式为 [数量, 名称]\n \"gameRounds\": [\n [\n 1,\n \"一等奖\"\n ]\n ],\n // 可选,是否包含已中奖者,默认为 false\n \"includeWinners\": false\n },\n// 跑马灯配置格式,必须按照此格式配置,否则会导致解析错误\n \"MARQUEE\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"MARQUEE\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"跑马灯\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 可选,滚动文本内容\n \"content\": \"这是一条滚动消息\",\n // 可选,字体大小,默认为 14\n \"fontSize\": 14,\n // 可选,滚动速度,数值越小速度越快,默认为 50\n \"speed\": 50,\n // 可选,字体配置\n \"fontSetting\": {\n // 字体颜色\n \"color\": \"\",\n // 是否加粗,默认为 false\n \"bold\": false,\n // 是否斜体,默认为 false\n \"italic\": false,\n // 是否下划线,默认为 false\n \"underline\": false\n }\n },\n// NPS评分配置格式,必须按照此格式配置,否则会导致解析错误\n \"NPS\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"NPS\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"NPS评分\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\"\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\"\n }\n ],\n \"showLabel\": true,\n \"showList\": false,\n \"threshold\": [ // 评分阈值数组\n 2,\n 3\n ],\n \"colorSetName\": \"COLOR_PALETTE_1\",\n \"filter\": []\n },\n// 百分比堆叠面积图配置格式\n \"PERCENT_STACKED_AREA\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"PERCENT_STACKED_AREA\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"百分比堆叠面积图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_date_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_01\"\n }\n ],\n \"smooth\": false,\n \"symbolType\": \"always\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"label\": true,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"filter\": []\n }\n// 百分比堆叠条形图配置格式\n \"PERCENT_STACKED_BAR\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"PERCENT_STACKED_BAR\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"百分比堆叠条形图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_02\"\n }\n ],\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"label\": true,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"categoryAxisMaxRatio\": \"0.3\",\n \"filter\": []\n }\n// 百分比堆叠柱状图配置格式\n \"PERCENT_STACKED_HISTOGRAM\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"PERCENT_STACKED_HISTOGRAM\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"百分比堆叠柱状图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_02\"\n }\n ],\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"label\": true,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"filter\": []\n }\n// 饼图配置格式,必须按照此格式配置,否则会导致解析错误\n \"PIE\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"PIE\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"饼图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"colors\": \"COLOR_PALETTE_1\", // 必须使用示例中的默认值如 COLOR_PALETTE_1,禁止自行编造\n \"legend\": \"none\",\n \"label\": true, // 必须设为 true 以默认显示数据标签\n \"innerRadius\": 0, // 内半径,0 为实心饼图\n \"outerRadius\": 60, // 外半径百分比\n \"filter\": []\n },\n// 透视表配置格式,必须按照此格式配置,否则会导致解析错误\n \"PIVOT\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"PIVOT\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"透视表\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 透视表配置,这是透视表的核心配置\n \"pivotConfig\": {\n // 必填,rows 是行字段列表,至少要有一个行字段,\n // 每个字段配置中 fieldId 必须是该表中真实存在的字段 ID\n // 如果多层分组,行字段列表中多个字段的 fieldId 依次对应每层分组的字段 ID\n \"rows\": [\n {\n // 必填,行字段 ID(必须是该表中真实存在的字段 ID)\n \"fld\": \"fld_01\",\n // 可选,排序方式,合法值有:1(升序)和 -1(降序),默认为 1 升序\n \"srt\": 1\n }\n ],\n // 可选,columns 是列字段列表,默认为空数组,\n // 每个字段配置中 fieldId 必须是该表中真实存在的字段 ID\n // 如果多层分组,列字段列表中多个字段的 fieldId 依次对应每层分组的字段 ID\n \"columns\": [\n {\n // 必填,列字段 ID(必须是该表中真实存在的字段 ID)\n \"fld\": \"fld_02\",\n // 可选,排序方式,合法值有:1(升序)和 -1(降序),默认为 1 升序\n \"srt\": 1\n }\n ],\n // 必填,values 是值字段列表,至少要有一个值字段,\n // 每个字段配置中 fieldId 必须是该表中真实存在的字段 ID\n // 值字段,是用于计算值的字段,通常是数值字段,但也可以是其他类型的字段(如文本字段),具体取决于聚合函数的要求\n \"values\": [\n {\n // 必填,值字段 ID(必须是该表中真实存在的字段 ID)\n \"fld\": \"fld_03\",\n //必填,聚合函数,合法值有:sum /count / count_distinct / avg / min / max / median / population_variance / sample_variance / population_stddev / sample_stddev / first / last / range / mode / sum_of_squares / harmonic_mean / geometric_mean / interquartile_range / centered_mean / weighted_mean / kurtosis / skewness / quartile_median / range_median / coefficient_of_variation / adjusted_stddev / weighted_sum / weighted_count / weighted_count_distinct / weighted_avg / centered_weighted_mean / weighted_harmonic_mean / weighted_geometric_mean / weighted_range / weighted_range_median / weighted_interquartile_range / weighted_quartile_median / weighted_centered_mean / weighted_adjusted_stddev\n \"agg\": \"sum\",\n //可选,后聚合函数,合法值有:default / percent_of_row_total / percent_of_col_total / percent_of_grand_total\n \"pgg\": \"string\",\n //可选,格式化函数,合法值有:default / percentage / thousands / currency / scientific / fixed / integer\n \"fmt\": \"\",\n //可选,字段别名\n \"als\": \"string\"\n }\n ],\n // 是否显示行总计,默认为 true\n \"rowTotals\": true,\n // 是否显示列总计,默认为 true\n \"columnTotals\": true\n },\n \"pivotStyle\": {\n // 可选,透视表在卡片中的对齐方式,合法值有: start(上部)/ center(中间)\n \"verticalAlign\": \"start\"\n }\n },\n// 地图配置格式,必须按照此格式配置,否则会导致解析错误\n \"PLOT_MAP\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"PLOT_MAP\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"地图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 地图配置,这是地图的核心配置\n \"plotMapConfig\": {\n // 数据源配置\n \"source\": {\n // 数据源类型,合法值有:view(视图)\n \"type\": \"view\",\n // 数据源名称,格式为 \"sheetId:viewId\"\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"sheet_001:view_001\"\n },\n // 渲染器类型,合法值有:marker(标记点)/ heatmap(热力图)等\n // 用于设置地图的渲染方式\n \"renderer\": \"marker\",\n // 处理器,用于对数据进行预处理\n \"processor\": \"\",\n // 维度配置,用于设置地图的维度字段(如地理位置字段)\n \"dimensions\": [\n {\n // 必填,维度字段 ID(必须是该表中真实存在的字段 ID)\n // 通常为位置字段,用于在地图上定位\n \"fieldId\": \"fld_location_01\"\n }\n ],\n // 度量配置,用于设置地图的度量字段(如数值字段)\n \"measures\": [\n {\n // 必填,度量字段 ID(必须是该表中真实存在的字段 ID)\n // 用于在地图上显示数值大小或颜色\n \"fieldId\": \"fld_number_01\"\n }\n ],\n // 样式配置,用于设置地图的显示样式\n \"styles\": []\n },\n },\n// ═══════════════════════════════════════════════════════════════════\n // 图表类型:进度图(PROGRESS)\n // 别名/同义词:进度条、进度环、进度卡、进度图表\n // 用途:用于展示某项目标的完成进度,支持当前值 vs 目标值的对比,\n // 可视化呈现完成百分比。适合展示销售目标达成率、任务完成度、\n // 日期时间进度等场景。\n // 重要:当用户说\"进度图\"、\"进度条\"、\"进度环\"、\"目标完成度\"时,\n // 必须使用 chartType = \"PROGRESS\",不要使用其他图表类型。\n // ═══════════════════════════════════════════════════════════════════\n //\n // ⚠️⚠️⚠️ 极其重要的注意事项(不遵守会导致图表渲染报错):\n //\n // 1. currentMeasure / targetMeasure 的格式是一个对象(Object),绝对不是数组(Array)!\n // 不要使用普通图表的 measure 数组格式 [{ externalValue, value }],否则图表会报错!\n //\n // 2. 必须包含以下顶层通用字段,否则图表校验会失败并报「表格字段发生变化」错误:\n // - \"measureType\": \"record-count\" ← 必填!缺少此字段图表必定报错\n // - \"sheet\": \"\u003csheetId\u003e\" ← 必填!设置为 currentSheet 相同的值\n // - \"view\": \"\" ← 必填!设置为空字符串\n // - \"filter\": [] ← 必填!设置为空数组\n //\n // 3. currentFilter / targetFilter 中的每个筛选条件必须包含 \"link\" 字段:\n // 正确:{ \"fieldId\": \"xxx\", \"symbol\": \"EQ\", \"value\": \"yyy\", \"link\": \"AND\" }\n // 错误:{ \"fieldId\": \"xxx\", \"symbol\": \"EQ\", \"value\": \"yyy\" } ← 缺少 link!\n // 注意:单选字段的 value 必须是选项的 ID(如 \"PO5PWsAqQi\"),不能是选项的显示文本(如 \"影院观影\")!\n // 使用文本作为 value 会导致筛选条件无法匹配任何记录,当前值始终为 0。\n //\n // 4. 即使 targetSource 为 \"custom\",也必须提供 targetSheet、targetView、targetFilter、targetMeasure 的默认值\n // 即使 currentSource 为 \"custom\",也必须提供 currentSheet、currentView、currentFilter、currentMeasure 的默认值\n //\n // 5. 必须包含 numberFormat 和 fixedCount 字段,否则当前值/目标值会显示异常(数值被乘以100、出现双%%、文案被挤掉不显示):\n // - \"numberFormat\": { \"digits\": 0, \"format\": \"number\", \"thousandSeparator\": true } ← format 必须是 \"number\"!\n // - \"fixedCount\": 0\n //\n \"PROGRESS\": {\n // ── 顶层通用字段(必填,缺少会导致图表校验失败)─────────────────────────\n // 必填,图表类型,固定值 \"PROGRESS\"(进度图)\n \"chartType\": \"PROGRESS\",\n // ⚠️ 必填,统计类型,进度图固定为 \"record-count\"\n \"measureType\": \"record-count\",\n // ⚠️ 必填,顶层数据表 ID,设置为 currentSheet 相同的值\n \"sheet\": \"\u003csheetId\u003e\",\n // ⚠️ 必填,顶层视图 ID,设置为空字符串\n \"view\": \"\",\n // ⚠️ 必填,顶层筛选条件,设置为空数组\n \"filter\": [],\n\n // 必填,卡片标题,用户在仪表盘中看到的图表名称,应准确且见名知意\n \"name\": \"进度图\",\n // 必填,数据类型,合法值:number(数值进度)/ date(日期进度)\n \"dataType\": \"number\",\n // 必填,图表形状,合法值:bar(条形)/ semi-circle(半环)/ circle(圆环)\n \"progressType\": \"bar\",\n\n // ── 目标值配置 ──────────────────────────────────────────────────────────\n // 目标值来源,合法值:custom(自定义数值)/ sheet(从数据表字段聚合)\n \"targetSource\": \"custom\",\n // targetSource = \"custom\" 时填写,目标值的固定数值字符串\n \"target\": \"500\",\n // 必填,目标值来源的数据表 ID,即使 targetSource = \"custom\" 也要填写,设置为 currentSheet 相同的值\n \"targetSheet\": \"\u003csheetId\u003e\",\n // 必填,目标值来源的视图 ID,设置为空字符串\n \"targetView\": \"\",\n // 必填,目标值来源的过滤条件,targetSource = \"custom\" 时设置为空数组\n \"targetFilter\": [],\n // 必填,目标值聚合字段配置,targetSource = \"custom\" 时设置为默认值\n // ⚠️ 格式必须是对象,不是数组!详见下方 currentMeasure 的格式说明,targetMeasure 格式完全相同\n \"targetMeasure\": { \"type\": \"record-count\", \"fields\": [] },\n // 可选,目标值的标签文字,显示在目标值旁边\n \"targetText\": \"\",\n\n // ── 当前值配置 ──────────────────────────────────────────────────────────\n // 当前值来源,合法值:custom(自定义数值)/ sheet(从数据表字段聚合)\n \"currentSource\": \"custom\",\n // currentSource = \"custom\" 时填写,当前值的固定数值字符串\n \"current\": \"100\",\n // 必填,当前值来源的数据表 ID\n \"currentSheet\": \"\u003csheetId\u003e\",\n // 必填,当前值来源的视图 ID,设置为空字符串表示全部数据\n \"currentView\": \"\",\n // 必填,当前值来源的过滤条件,currentSource = \"custom\" 时设置为空数组\n // ⚠️ 每个筛选条件必须包含 \"link\" 字段!格式:\n // { \"fieldId\": \"\u003cfieldId\u003e\", \"symbol\": \"EQ\", \"value\": \"\u003c选项ID\u003e\", \"link\": \"AND\" }\n // 多个条件时,第一个条件的 link 也必须填 \"AND\"\n \"currentFilter\": [],\n // 必填,当前值聚合字段配置\n // ═══════════════════════════════════════════════════════════════════\n // ⚠️⚠️⚠️ 极其重要:currentMeasure 是一个 Object,不是 Array!\n // 绝对不要写成 [{ externalValue: [...], value: \"xxx\" }] 这种数组格式!\n // 正确格式如下:\n //\n // 方式一:记录计数(统计满足条件的记录总数)\n // { \"type\": \"record-count\", \"fields\": [] }\n //\n // 方式二:字段聚合(对某个字段做聚合计算)\n // { \"type\": \"field\", \"fields\": [{ \"value\": \"\u003cfieldId\u003e\", \"formula\": \"\u003c聚合函数\u003e\" }] }\n // formula 合法值:count / unique-count / sum / average / max / min\n //\n // 错误示例(绝对禁止):\n // [{ \"externalValue\": [{ \"type\": \"formula\", \"value\": \"count\" }], \"value\": \"fieldId\" }]\n // ═══════════════════════════════════════════════════════════════════\n \"currentMeasure\": { \"type\": \"record-count\", \"fields\": [] },\n // 可选,当前值的标签文字,显示在当前值旁边\n \"currentText\": \"\",\n\n // ── 数值格式配置 ──────────────────────────────────────────────────────────\n // ⚠️ 必填,百分比小数位数,缺少会导致小数位数异常,默认填 0\n \"fixedCount\": 0,\n // ⚠️ 必填,数字格式化配置(作用于当前值和目标值的显示)\n // 缺少此字段会导致数值显示异常(数值被乘以100、出现双%%符号、文案被挤掉不显示)\n \"numberFormat\": {\n // 小数位数,默认 0\n \"digits\": 0,\n // ⚠️ 格式类型,进度图必须填 \"number\"!绝对不要填 \"percent\",否则数值会被乘以100并多出%符号\n // 合法值:number / percent / thousand,进度图固定填 \"number\"\n \"format\": \"number\",\n // 是否显示千位分隔符\n \"thousandSeparator\": true\n },\n // 可选,数值单位,如 \"¥\" / \"$\" / \"人\" / \"%\" 等自定义字符串,不填则无单位\n \"modifier\": \"\",\n // 可选,单位位置,合法值:left(左)/ right(右),默认 left\n \"modifierPosition\": \"left\",\n // 可选,目标方向,合法值:increase(越大越好)/ decrease(越小越好),影响进度条配色逻辑\n \"targetDirection\": \"increase\",\n\n // ── 日期进度(dataType = \"date\")专属配置 ────────────────────────────────\n // 目标日期范围,合法值:month(本月)/ quarter(本季度)/ year(今年)/ custom(自定义)\n \"targetDateSelected\": \"month\",\n // targetDateSelected = \"custom\" 时填写,自定义目标日期范围 [开始时间戳, 结束时间戳]\n \"targetDateRange\": null,\n // 当前日期,合法值:today(今日)/ yesterday(昨日)/ custom(自定义)\n \"currentDateSelected\": \"today\",\n // currentDateSelected = \"custom\" 时填写,自定义当前日期时间戳\n \"currentDate\": null,\n // 日期格式,如 \"YYYY-MM-DD\",仅在 targetDateSelected 或 currentDateSelected 为 custom 时生效\n \"dateFormat\": \"YYYY-MM-DD\",\n\n // ── 样式配置 ──────────────────────────────────────────────────────────────\n // 可选,卡片背景颜色,十六进制色值,如 \"#F0F5FF\"\n \"background\": \"\",\n // 可选,百分比数字颜色,十六进制色值,如 \"#1677FF\"\n \"percentageColor\": \"\",\n // 可选,进度条填充颜色,支持两种形式:\n // 1. 固定色值字符串,如 \"#1677FF\",或渐变色 \"linear-gradient(...)\"(圆环图支持渐变)\n // 2. 条件配色对象(根据百分比区间动态变色),格式参考 dashboard-config-example 中的 colors 配置\n \"strokeColor\": \"\",\n // 可选,进度条背景颜色\n \"strokeBgColor\": \"\",\n // 可选,当前值文字颜色(仅 dataType=number 时生效)\n \"currentColor\": \"\",\n // 可选,目标值文字颜色\n \"targetColor\": \"\"\n },\n// 查询页配置格式,必须按照此格式配置,否则会导致解析错误\n \"QUERY_PAGE\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"QUERY_PAGE\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"查询页\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"\",\n // 查询页无其他特殊配置字段,\n // 主要用于提供数据查询和展示的基础功能\n },\n// 雷达图配置格式,必须按照此格式配置,否则会导致解析错误\n \"RADAR\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"RADAR\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"雷达图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"xSortBy\": \"y\",\n \"sortRule\": \"asc\",\n \"radarShape\": \"circle\",\n \"isFilled\": true,\n \"gridShow\": true,\n \"yAxisLine\": true,\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"label\": true,\n \"filter\": []\n },\n// 富文本配置格式,必须按照此格式配置,否则会导致解析错误\n \"RICH_TEXT\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"RICH_TEXT\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"富文本\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 可选,富文本内容,支持 HTML 格式\n \"content\": \"\"\n },\n// 玫瑰图配置格式,必须按照此格式配置,否则会导致解析错误\n \"ROSE\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"ROSE\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"玫瑰图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"none\",\n \"label\": true,\n \"innerRadius\": 0,\n \"outerRadius\": 60,\n \"filter\": []\n },\n// 散点图配置格式,必须按照此格式配置,否则会导致解析错误\n \"SCATTER\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"SCATTER\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"散点图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_number_02\",\n \"externalValue\": []\n }\n ],\n \"smooth\": false,\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"gridShow\": false,\n \"label\": false,\n \"xAxisShow\": true,\n \"xAxisLine\": false,\n \"xAxisLabel\": true,\n \"yAxisShow\": true,\n \"yAxisLine\": false,\n \"yAxisLabel\": true,\n \"filter\": []\n },\n// 筛选器配置格式,必须按照此格式配置,否则会导致解析错误\n \"SLICER\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"SLICER\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"筛选器\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 可选,筛选器样式,合法值有:button(按钮)/ dropdown(下拉),默认为 button\n \"sli_filterStyle\": \"button\",\n // 可选,排序方式,合法值有:asc(升序)/ desc(降序),默认为 asc\n \"sli_orderBy\": \"asc\",\n // 可选,是否多选,默认为 true\n \"sli_multiple\": true,\n // 可选,是否显示数量,默认为 true\n \"sli_showCount\": true,\n // 可选,日期操作符,合法值有:BEFORE / AFTER / BETWEEN 等\n \"sli_dateOperator\": \"BEFORE\",\n // 可选,数字操作符,合法值有:EQ(等于)/ NE(不等于)/ GT(大于)等\n \"sli_numberOperator\": \"EQ\",\n // 可选,关联到图表的方式,合法值有:auto(自动)/ manual(手动),默认为 auto\n \"sli_2Chart\": \"auto\",\n // 可选,关联到其他筛选器的方式,合法值有:auto(自动)/ manual(手动),默认为 auto\n \"sli_2Slicer\": \"auto\",\n // 可选,对齐方式,合法值有:top(顶部)/ bottom(底部),默认为 top\n \"sli_align\": \"top\",\n // 可选,选择样式,合法值有:1 / 2 / 3 等,默认为 1\n \"sli_selectStyle\": \"1\",\n // 必填,绑定的字段 ID(必须是该表中真实存在的字段 ID)\n \"sli_fieldId\": \"fld_select_01\"\n },\n// 堆叠面积图配置格式\n \"STACKED_AREA\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"STACKED_AREA\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"堆叠面积图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_date_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_01\"\n }\n ],\n \"smooth\": false,\n \"symbolType\": \"always\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"label\": false,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"filter\": []\n }\n// 堆叠条形图配置格式\n \"STACKED_BAR\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"STACKED_BAR\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"堆叠条形图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_02\"\n }\n ],\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"bottom\",\n \"label\": false,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"categoryAxisMaxRatio\": \"0.3\",\n \"filter\": []\n }\n// 堆叠柱状图配置格式\n \"STACKED_HISTOGRAM\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"STACKED_HISTOGRAM\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"堆叠柱状图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_date_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_01\"\n }\n ],\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"nullValue\": \"ignore\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"bottom\",\n \"gridShow\": false,\n \"label\": false,\n \"labelHideOverlap\": true,\n \"xAxisShow\": true,\n \"xAxisLine\": false,\n \"xAxisLabel\": true,\n \"yAxisShow\": true,\n \"yAxisLine\": false,\n \"yAxisLabel\": true,\n \"fillType\": \"solid\",\n \"filter\": []\n }\n// 堆叠折线图配置格式\n \"STACKED_LINE\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"STACKED_LINE\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"堆叠折线图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_date_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_01\"\n }\n ],\n \"smooth\": false,\n \"symbolType\": \"always\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"label\": false,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"filter\": []\n }\n// 标准列表视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"STANDARD_LIST_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"STANDARD_LIST_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"标准列表视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 列表自定义配置,用于设置列表的自定义样式和行为\n \"listCustom\": {},\n // 列表配置,用于设置列表的显示方式和布局\n \"listConfig\": {},\n // 字段聚合映射,用于设置字段的聚合方式\n \"fieldAggregateMap\": {},\n // 工具栏配置,用于控制标准列表视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示分组按钮\n \"enableGroup\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n // 是否显示编辑记录按钮\n \"enableEditRecord\": false\n },\n },\n// ═══════════════════════════════════════════════════════════════════\n // 图表类型:指标卡(STATISTICS)\n // 别名/同义词:KPI 卡、指标图、数据指标卡、关键指标卡\n // 用途:以大号数字展示核心指标,并可附加环同比(与上期对比的涨跌幅)\n // 和趋势折线图,适合展示销售额、DAU、转化率等需要对比分析的 KPI 指标。\n // 与\"统计数字(SUMMARY)\"的区别:指标卡支持环同比对比和趋势图,\n // 功能更丰富;统计数字仅展示单一数字,更简洁。\n // 重要:当用户说\"指标卡\"、\"KPI 卡\"、\"指标图\"、\"关键指标\"、\"带趋势的数字\"时,\n // 必须使用 chartType = \"STATISTICS\",不要使用其他图表类型。\n // ═══════════════════════════════════════════════════════════════════\n \"STATISTICS\": {\n // 必填,图表类型,固定值 \"STATISTICS\"(指标卡)\n \"chartType\": \"STATISTICS\",\n // 必填,卡片标题,用户在仪表盘中看到的图表名称,应准确且见名知意\n \"name\": \"指标卡\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时为 null,传入时必须是该表中真实存在的 viewId\n \"view\": null,\n // 无 filter 时请传空数组;\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置)中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 统计指标配置,measureType 与 measure 二选一:\n // measureType = \"record-count\" 时统计记录总数,无需填 measure;\n // measureType = \"field\" 时需填 measure,指定聚合字段和聚合函数\n \"measureType\": \"field\",\n // 可选,当 measureType = \"field\" 时必填,指定聚合字段\n \"measure\": [\n {\n // 必填,字段 ID(必须是该表中真实存在的数值类字段 ID)\n \"value\": \"fld_number_01\",\n // 必填,聚合函数配置\n \"externalValue\": [\n {\n \"type\": \"formula\",\n // formula 合法值:count (计数), unique-count (去重计数), sum (求和), average (平均值), max (最大值), min (最小值)'\n \"value\": \"sum\"\n }\n ]\n }\n ],\n // 可选,指标说明文字,显示在数值下方\n \"desc\": \"\",\n // 可选,数字格式化配置\n \"numberFormat\": {\n // 小数位数,默认 0\n \"digits\": 0,\n // 格式类型,合法值:number / percent / thousand\n \"format\": \"number\",\n // 是否显示千位分隔符\n \"thousandSeparator\": true\n },\n // 可选,是否显示环同比,默认 false\n \"showComparison\": false,\n // 可选,showComparison=true 时填写,环同比对比的日期字段 ID\n \"comparisonField\": null,\n // 可选,环同比时间范围,如 \"this_week\" / \"this_month\" / \"this_year\"\n \"comparisonDateRange\": null,\n // 可选,环同比类型,合法值:sequential(环比)/ year-on-year(同比)/ month-on-month(月比)/ week-on-week(周比)/ custom(自定义)\n \"comparisonType\": \"sequential\",\n // 可选,时间统计方式,合法值:same_period(同期)/ cumulative(累计)\n \"comparisonPeriodType\": \"same_period\",\n // 可选,环同比计算类型,合法值:difference-rate(差值率)/ difference-value(差值)/ original-value(原值)\n \"comparisonCalculationType\": \"difference-rate\",\n // 可选,环同比布局方向(仅 showComparison=true 且 showTrend=false 时生效),合法值:bottom(下方)/ right(右侧)\n \"comparisonLayout\": \"bottom\",\n // 可选,是否显示趋势图,默认 false\n \"showTrend\": false,\n // 可选,showTrend=true 时填写,趋势图使用的日期字段 ID\n \"trendField\": null,\n // 可选,趋势图时间范围,如 \"this_week\" / \"this_month\" / \"this_year\"\n \"trendDateRange\": null,\n // 可选,趋势图布局方向(仅 showTrend=true 且 showComparison=false 时生效),合法值:bottom(下方)/ right(右侧)\n \"trendLayout\": \"bottom\",\n // 可选,趋势图颜色,十六进制色值,如 \"#1677FF\"\n \"trendColor\": \"\",\n // 可选,环同比图标样式,合法值:1 / 2 / 3 / 4 / 5 / 6 / 7 / 8\n \"iconStyle\": \"5\",\n // 可选,卡片标题颜色,十六进制色值\n \"titleColor\": \"\",\n // 可选,指标说明文字颜色,十六进制色值\n \"descColor\": \"\",\n // 可选,环同比描述颜色,十六进制色值\n \"comparisonDescColor\": \"\",\n // 可选,数值颜色配置,支持两种形式:\n // 1. 固定色值字符串,如 \"#1677FF\",或渐变色 \"linear-gradient(...)\"\n // 2. 条件配色对象(根据数值区间动态变色),格式参考 dashboard-config-example 中的 colors 配置\n \"colors\": \"\"\n },\n// ═══════════════════════════════════════════════════════════════════\n // 图表类型:统计数字(SUMMARY)\n // 别名/同义词:汇总数字、统计卡、数字卡、计数卡\n // 用途:以大号数字形式展示单一聚合指标(如记录总数、字段求和/均值等),\n // 是最简洁的数据汇总展示方式,适合展示总销售额、总订单数、平均分等。\n // 与其他图表的关键区别:\n // - 与\"指标卡(STATISTICS)\"的区别:统计数字更简洁,无环同比、无趋势图;\n // 指标卡功能更丰富,支持环同比对比和趋势折线图。\n // - 与\"柱状图(HISTOGRAM)\"的关键区别:统计数字只展示一个聚合数字(单值卡片),\n // 无坐标轴、无分类对比;柱状图展示多个分类的数值对比,有 X/Y 轴(多值图表)。\n // 重要:当用户说\"统计数字\"、\"汇总数字\"、\"数字卡\"、\"计数\"、\"总数\"时,\n // 必须使用 chartType = \"SUMMARY\",不要使用 HISTOGRAM 或其他图表类型。\n // ═══════════════════════════════════════════════════════════════════\n \"SUMMARY\": {\n // 必填,图表类型,固定值 \"SUMMARY\"(统计数字)\n \"chartType\": \"SUMMARY\",\n // 必填,卡片标题,用户在仪表盘中看到的图表名称,应准确且见名知意\n \"name\": \"统计数字\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时为 null,传入时必须是该表中真实存在的 viewId\n \"view\": null,\n // 无 filter 时请传空数组;\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置)中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 统计指标配置,measureType 与 measure 二选一:\n // measureType = \"record-count\" 时统计记录总数,无需填 measure;\n // measureType = \"field\" 时需填 measure,指定聚合字段和聚合函数\n \"measureType\": \"field\",\n // 可选,当 measureType = \"field\" 时必填,指定聚合字段\n \"measure\": [\n {\n // 必填,字段 ID(必须是该表中真实存在的数值类字段 ID)\n \"value\": \"fld_number_01\",\n // 必填,聚合函数配置\n \"externalValue\": [\n {\n \"type\": \"formula\",\n // formula 合法值:count (计数), unique-count (去重计数), sum (求和), average (平均值), max (最大值), min (最小值)'\n \"value\": \"sum\"\n }\n ]\n }\n ],\n // 可选,数字格式化配置\n \"numberFormat\": {\n // 小数位数,默认 0\n \"digits\": 0,\n // 格式类型,合法值:number / percent / thousand\n \"format\": \"number\",\n // 是否显示千位分隔符\n \"thousandSeparator\": true\n },\n // 可选,指标说明文字,由用户在编辑器中输入,传给服务端后显示在数值下方\n \"desc\": \"\",\n // 可选,数值颜色配置,支持两种形式:\n // 1. 固定色值字符串,如 \"#1677FF\",或渐变色 \"linear-gradient(...)\"\n // 2. 条件配色对象(根据数值区间动态变色),格式参考 dashboard-config-example 中的 colors 配置\n \"colors\": \"\"\n },\n// 标签页配置格式,必须按照此格式配置,否则会导致解析错误\n \"TABS\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"TABS\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"标签页\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 可选,标签页样式类型,合法值有:type1 到 type10,默认为 type1\n \"tabsStyleType\": \"type1\",\n // 可选,标签页对齐方式,合法值有:left(左对齐)/ center(居中)/ right(右对齐),默认为 left\n \"tabsAlignType\": \"left\",\n // 可选,默认激活的标签页 ID,必须与 tabs 数组中的某个 id 匹配\n \"activeTabId\": \"tab_001\",\n // 必填,标签页数组\n \"tabs\": [\n {\n // 必填,标签页 ID(必须唯一)\n \"id\": \"tab_001\",\n // 必填,标签页名称\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"标签页 1\"\n },\n {\n \"id\": \"tab_002\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"标签页 2\"\n },\n {\n \"id\": \"tab_003\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"标签页 3\"\n }\n ]\n },\n// 词云图配置格式,必须按照此格式配置,否则会导致解析错误\n \"WORD_CLOUD\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"WORD_CLOUD\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"词云图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_text_01\"\n }\n ],\n \"disableParticiple\": false, // 是否禁用分词\n \"colors\": \"COLOR_PALETTE_1\",\n \"filter\": []\n },\n}\n",
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Dashboard widgets config example returned. Each key is a chart type (e.g. HISTOGRAM, PIE), and the value is the corresponding widget config example. Use the matching chart type's config as a reference when calling create_chart."
+}真实 stderr / error (空) 真实返回 {
+ "data": "// 注意\n// 1. 下述 JSON 示例中的注释(// 开头的注释)仅用于说明,实际使用时请删除,否则会导致解析错误\n// 2. 所有图表类型的 widget config 示例,key 是图表类型,value 是对应的完整 config\n// 3. 创建图表时,必需使用示例中的图表类型和配置格式\n\n\n{\n// 聚合列表视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"AGGREGATE_LIST_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"AGGREGATE_LIST_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"聚合列表视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 列表自定义配置,用于设置聚合列表的自定义样式和行为\n \"listCustom\": {},\n // 列表配置,用于设置聚合列表的显示方式和布局\n \"listConfig\": {},\n // 字段聚合映射,用于设置字段的聚合方式(如 sum、count、avg 等)\n \"fieldAggregateMap\": {},\n // 工具栏配置,用于控制聚合列表视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示分组按钮\n \"enableGroup\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n },\n },\n// AI 分析卡片配置格式,必须按照此格式配置,否则会导致解析错误\n // 注意:AI 分析卡片不依赖数据表,无需配置 sheet / view / filter\n \"AI_ANALYZE\": {\n // 必填,图表类型,固定值 \"AI_ANALYZE\"\n \"chartType\": \"AI_ANALYZE\",\n // 必填,卡片标题,用户在仪表盘中看到的图表名称,应准确且见名知意\n \"name\": \"AI 分析卡片\",\n // 可选,AI 提示词,用自然语言描述希望 AI 分析的内容和问题,\n // 例如:\"分析本月各产品线的销售额趋势,找出增长最快的类别并给出建议\"\n \"prompt\": \"\",\n // 可选,需要 AI 参考分析的图表 ID 列表,数组中每个元素必须是当前仪表盘中已存在的图表 ID;\n // 不填或传空数组时 AI 将基于提示词独立分析,不关联具体图表数据\n \"analyzeChartIds\": [],\n // 可选,指定 AI 模型 ID;不填时使用系统默认模型\n \"modelId\": \"\",\n // 只读,AI 生成的 Markdown 分析内容,由系统写入,创建时无需填写\n \"content\": \"\",\n // 只读,AI 分析结果的最后更新时间戳(毫秒),由系统写入,创建时无需填写\n \"lastUpdatedAt\": null\n },\n// 面积图配置格式\n \"AREA\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"AREA\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"面积图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_date_01\",\n \"externalValue\": []\n }\n ],\n \"smooth\": false,\n \"symbolType\": \"always\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"label\": false,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"filter\": []\n }\n// 条形图配置格式\n \"BAR\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"BAR\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"条形图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"record-count\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"nullValue\": \"ignore\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"gridShow\": false,\n \"label\": true,\n \"labelHideOverlap\": true,\n \"xAxisShow\": true,\n \"xAxisLine\": false,\n \"xAxisLabel\": true,\n \"categoryAxisMaxRatio\": \"0.3\",\n \"yAxisShow\": true,\n \"yAxisLine\": false,\n \"yAxisLabel\": true,\n \"fillType\": \"solid\",\n \"filter\": []\n }\n// 按钮配置格式,必须按照此格式配置,否则会导致解析错误\n \"BUTTON\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"BUTTON\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"按钮\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 可选,按钮样式类型,合法值有:type1 到 type10,默认为 type1\n \"buttonStyleType\": \"type1\",\n // 可选,边框宽度,默认为 1\n \"borderWidth\": 1,\n // 可选,按钮大小,合法值有:default(默认)/ small(小)/ large(大),默认为 default\n \"buttonSize\": \"default\",\n // 可选,按钮图标,合法值有:link / download / refresh 等\n \"buttonIcon\": \"link\",\n // 可选,按钮图标背景类型,合法值有:light(浅色)/ dark(深色),默认为 light\n \"buttonIconBackgroundType\": \"light\",\n // 可选,按钮字体配置\n \"buttonFontSetting\": {\n // 字体大小,默认为 14\n \"size\": 14,\n // 字体颜色\n \"color\": \"\",\n // 字间距,默认为 0\n \"letterSpacing\": 0,\n // 是否加粗,默认为 false\n \"bold\": false,\n // 是否斜体,默认为 false\n \"italic\": false,\n // 是否下划线,默认为 false\n \"underline\": false\n }\n },\n// 日历视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"CALENDAR_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"CALENDAR_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"日历视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 视图分组配置,用于设置视图的默认分组规则\n \"viewGroup\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 日历自定义配置,这是日历视图的核心配置\n \"calendarCustom\": {\n // 必填,显示字段 ID(必须是该表中真实存在的字段 ID)\n // 用于在日历中显示事件标题或描述\n \"displayFieldId\": \"fld_text_01\",\n // 必填,开始时间字段 ID(必须是该表中真实存在的日期字段 ID)\n // 用于设置事件的开始时间\n \"startField\": \"fld_date_01\",\n // 必填,结束时间字段 ID(必须是该表中真实存在的日期字段 ID)\n // 用于设置事件的结束时间\n \"endField\": \"fld_date_02\",\n // 标记配置,用于在日历中添加特殊标记或样式\n \"markers\": [],\n // 时间轴刻度,合法值有:day(日)/ week(周)/ month(月)\n // 用于设置日历的显示粒度\n \"timelineScale\": \"month\",\n // 列宽度映射,key 为 fieldId,value 为列宽度(像素)\n \"widthMap\": {},\n // 单元格高度,单位为像素,默认为 32\n \"cellHeight\": 32\n },\n // 工具栏配置,用于控制日历视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示分组按钮\n \"enableGroup\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n // 是否显示编辑记录按钮\n \"enableEditRecord\": false\n },\n },\n// 卡片列表视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"CARD_LIST_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"CARD_LIST_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"卡片列表视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 列表自定义配置,用于设置卡片列表的自定义样式和行为\n \"listCustom\": {},\n // 列表配置,用于设置卡片列表的显示方式和布局\n \"listConfig\": {},\n // 工具栏配置,用于控制卡片列表视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n },\n },\n// 折叠列表视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"COLLAPSIBLE_LIST_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"COLLAPSIBLE_LIST_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"折叠列表视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 列表自定义配置,用于设置折叠列表的自定义样式和行为\n \"listCustom\": {},\n // 列表配置,用于设置折叠列表的显示方式和布局\n \"listConfig\": {},\n // 工具栏配置,用于控制折叠列表视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示分组按钮\n \"enableGroup\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n },\n },\n// 组合布局配置格式,必须按照此格式配置,否则会导致解析错误\n \"COMPOSITE_LAYOUT\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"COMPOSITE_LAYOUT\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"组合布局\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\"\n // 组合布局容器,无特殊配置字段,用于承载其他图表组件\n },\n// 组合图配置格式,必须按照此格式配置,否则会导致解析错误\n \"COMPOSITION\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"COMPOSITION\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"组合图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ],\n \"composition\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"HISTOGRAM\",\n \"yAxisPosition\": \"left\"\n }\n },\n {\n \"value\": \"fld_number_02\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"average\"\n }\n ],\n \"composition\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"LINE\",\n \"yAxisPosition\": \"right\"\n }\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_date_01\",\n \"externalValue\": []\n }\n ],\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"gridShow\": false,\n \"label\": true,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"filter\": []\n },\n// ═══════════════════════════════════════════════════════════════════\n // 图表类型:倒计时(COUNTDOWN)\n // 别名/同义词:倒计时、正计时、计时器、倒计时卡片\n // 用途:用于展示距离某个目标日期的剩余时间或已过时间,\n // 支持倒计时和正计时两种模式。适合展示活动截止时间、\n // 项目里程碑、重要日期提醒等场景。\n // ═══════════════════════════════════════════════════════════════════\n // ⚠️ 重要注意事项:\n // 1. fixedDatetime 必须是毫秒时间戳(如 1746028800000),不是日期字符串(如 \"2026-05-01\")!\n // 2. unit 是一个对象(Object),不是字符串!不要写成 \"天\" 或 \"day\"!\n // 3. 背景色字段名是 \"background\",不是 \"backgroundColor\"\n // 4. 时间数字颜色字段名是 \"timeColor\",不是 \"numberColor\"\n // 5. 描述文字颜色字段名是 \"descColor\",不是 \"titleColor\"\n // 6. 不存在 \"countdownType\"、\"endDate\"、\"numberColor\"、\"titleColor\" 等字段,使用这些字段会导致图表渲染异常\n \"COUNTDOWN\": {\n // 必填,图表类型,固定值 \"COUNTDOWN\"\n \"chartType\": \"COUNTDOWN\",\n // 必填,卡片标题,用户在仪表盘中看到的图表名称,应准确且见名知意\n \"name\": \"倒计时\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": null,\n // 可选,描述文本,显示在倒计时数字上方\n \"desc\": \"倒计时\",\n // 必填,数据来源类型,合法值:fixed(固定日期时间)/ field(从数据表日期字段取值)\n \"sourceType\": \"fixed\",\n // sourceType = \"fixed\" 时必填,目标日期的毫秒时间戳\n // ⚠️ 必须是毫秒时间戳数字(如 1746028800000),不是日期字符串(如 \"2026-05-01\")!\n // 示例:2026-05-01 00:00:00 → 1746028800000\n \"fixedDatetime\": 1746028800000,\n // sourceType = \"field\" 时填写,日期字段的 fieldId\n \"fieldId\": null,\n // sourceType = \"field\" 时填写,日期选择方式,合法值:earliest(最早日期)/ latest(最晚日期)\n \"fieldChoice\": \"earliest\",\n // 必填,计时模式,合法值:countdown(倒计时,目标时间在未来)/ countup(正计时,目标时间在过去)\n \"timingMode\": \"countdown\",\n // 必填,显示的时间单位开关(是一个对象,不是字符串!)\n // ⚠️ 不要写成 \"天\" 或 \"day\",必须是如下对象格式:\n \"unit\": {\n // 是否显示月,默认 false\n \"month\": false,\n // 是否显示周,默认 false\n \"week\": false,\n // 是否显示天,默认 true\n \"day\": true,\n // 是否显示小时,默认 true\n \"hour\": true,\n // 是否显示分钟,默认 true\n \"minute\": true,\n // 是否显示秒,默认 true\n \"second\": true\n },\n\n // ── 样式配置 ──────────────────────────────────────────────────────────────\n // 可选,卡片背景颜色(⚠️ 字段名是 \"background\",不是 \"backgroundColor\")\n \"background\": \"\",\n // 可选,描述文字颜色(⚠️ 字段名是 \"descColor\",不是 \"titleColor\")\n \"descColor\": \"\",\n // 可选,时间块背景颜色\n \"timeBlockColor\": \"\",\n // 可选,倒计时数字颜色(⚠️ 字段名是 \"timeColor\",不是 \"numberColor\")\n \"timeColor\": \"\",\n // 可选,计时完成是否显示动效,默认 false\n \"showFinishEffect\": false\n },\n// 详情列表视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"DETAIL_LIST_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"DETAIL_LIST_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"详情列表视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 列表自定义配置,用于设置详情列表的自定义样式和行为\n \"listCustom\": {},\n // 列表配置,用于设置详情列表的显示方式和布局\n \"listConfig\": {},\n // 工具栏配置,用于控制详情列表视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n },\n },\n// 嵌入网页配置格式,必须按照此格式配置,否则会导致解析错误\n \"EMBED_WEBPAGE\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"EMBED_WEBPAGE\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"嵌入网页\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 必填,嵌入的网页 URL(必须是有效的 URL 地址)\n \"url\": \"https://example.com\"\n },\n// 漏斗图配置格式,必须按照此格式配置,否则会导致解析错误\n \"FUNNEL\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"FUNNEL\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"漏斗图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n \"measureType\": \"record-count\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\"\n }\n ],\n \"colors\": \"COLOR_PALETTE_1\",\n \"sumValue\": true,\n \"funnelType\": \"normal\",\n \"filter\": []\n },\n// 画册视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"GALLERY_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"GALLERY_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"画册视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 画册自定义配置,用于设置画册的显示样式\n \"galleryCustom\": {\n // 卡片设置,用于配置画册中卡片的显示方式\n \"cardSetting\": {\n // 封面模式,合法值有:none(无封面)/ cover(封面)等\n \"coverMode\": \"none\"\n }\n },\n // 工具栏配置,用于控制画册视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n // 是否显示编辑记录按钮\n \"enableEditRecord\": false\n },\n },\n// 甘特视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"GANTT_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"GANTT_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"甘特视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 视图分组配置,用于设置视图的默认分组规则\n \"viewGroup\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 是否折叠网格,默认为 false\n \"collapsedGrid\": false,\n // 甘特自定义配置,这是甘特视图的核心配置\n \"ganttCustom\": {\n // 必填,显示字段 ID(必须是该表中真实存在的字段 ID)\n // 用于在甘特图中显示任务名称或描述\n \"displayFieldId\": \"fld_text_01\",\n // 必填,开始时间字段 ID(必须是该表中真实存在的日期字段 ID)\n // 用于设置任务的开始时间\n \"startField\": \"fld_date_01\",\n // 必填,结束时间字段 ID(必须是该表中真实存在的日期字段 ID)\n // 用于设置任务的结束时间\n \"endField\": \"fld_date_02\",\n // 标记配置,用于在甘特图中添加里程碑或重要时间点\n \"markers\": [],\n // 时间轴刻度,合法值有:day(日)/ week(周)/ month(月)/ quarter(季)/ year(年)\n // 用于设置甘特图的时间轴显示粒度\n \"timelineScale\": \"month\",\n // 列宽度映射,key 为 fieldId,value 为列宽度(像素)\n \"widthMap\": {},\n // 单元格高度,单位为像素,默认为 32\n \"cellHeight\": 32\n },\n // 工具栏配置,用于控制甘特视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示分组按钮\n \"enableGroup\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n // 是否显示编辑记录按钮\n \"enableEditRecord\": false\n },\n },\n// 表格视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"GRID_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"GRID_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"表格视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 视图分组配置,用于设置视图的默认分组规则\n \"viewGroup\": [],\n // 单元格高度,单位为像素,默认为 32\n \"cellHeight\": 32,\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列宽度映射,key 为 fieldId,value 为列宽度(像素)\n \"widthMap\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 冻结列数,默认为 1,表示冻结左侧的列数\n \"frozenColCount\": 1,\n // 工具栏配置,用于控制表格视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示分组按钮\n \"enableGroup\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 创建行按钮的文本内容\n \"createRowText\": \"\",\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n // 是否显示编辑记录按钮\n \"enableEditRecord\": false\n },\n },\n// ═══════════════════════════════════════════════════════════════════\n // 图表类型:柱状图(HISTOGRAM)\n // 别名/同义词:竖向柱图、垂直柱图、分组柱图\n // 用途:以垂直柱子展示多个分类维度的数值对比,适合比较不同类别之间的\n // 数量差异,如各月销售额对比、各部门人数对比、各产品销量排名等。\n // 核心特征:有 X 轴(分类维度)和 Y 轴(数值),每个类别对应一根柱子。\n // 与\"统计数字(SUMMARY)\"的关键区别:\n // - 柱状图(HISTOGRAM):展示多个分类的对比,有坐标轴,是\"多值图表\"\n // - 统计数字(SUMMARY):只展示一个聚合数字,无坐标轴,是\"单值卡片\"\n // 重要:当用户说\"柱状图\"、\"柱图\"、\"分组柱图\"时,\n // 必须使用 chartType = \"HISTOGRAM\",不要使用 SUMMARY 或其他图表类型。\n // ═══════════════════════════════════════════════════════════════════\n \"HISTOGRAM\": {\n // 必填,图表类型,固定值 \"HISTOGRAM\"(柱状图)\n \"chartType\": \"HISTOGRAM\",\n // 必填,卡片标题,用户在仪表盘中看到的图表名称,应准确且见名知意\n \"name\": \"柱状图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"record-count\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_02\"\n }\n ],\n \"xSortBy\": \"x\",\n \"xSortCustom\": [],\n \"ySortCustom\": [],\n \"sortRule\": \"asc\",\n \"nullValue\": \"ignore\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"gridShow\": false,\n \"axisLabelShow\": false,\n \"label\": true,\n \"labelHideOverlap\": true,\n \"xAxisShow\": true,\n \"xAxisLine\": false,\n \"xAxisLabel\": true,\n \"xAxisLabelRotate\": \"auto\",\n \"categoryAxisMaxRatio\": \"0.2\",\n \"yAxisShow\": true,\n \"yAxisLine\": false,\n \"yAxisLabel\": true,\n \"fillType\": \"solid\",\n \"yAxisRange\": {\n \"type\": \"absolute\",\n \"range\": []\n },\n \"xAbbr\": {\n \"numberType\": \"default\",\n \"abbr\": \"\",\n \"decimal\": \"\"\n },\n \"yAbbr\": {\n \"numberType\": \"default\",\n \"abbr\": \"\",\n \"decimal\": \"\"\n },\n \"yRightAbbr\": {\n \"numberType\": \"default\",\n \"abbr\": \"\",\n \"decimal\": \"\"\n },\n \"filter\": []\n }\n// ═══════════════════════════════════════════════════════════════════\n // 图表类型:图片(IMAGE)\n // 别名/同义词:图片卡、图片展示、图片轮播、Banner 图\n // 用途:在仪表盘中展示一张或多张静态图片,支持多图轮播(滑动/淡入淡出),\n // 可为每张图片配置标题、描述和点击跳转链接。适合展示品牌 Banner、\n // 产品图、说明图、装饰图等不依赖数据表的纯图片内容。\n // 重要:当用户说\"图片\"、\"图片卡\"、\"图片展示\"、\"Banner\"、\"轮播图\"时,\n // 必须使用 chartType = \"IMAGE\",不要使用其他图表类型。\n // 此图表类型不依赖数据表,无需配置 sheet / view / filter。\n // ═══════════════════════════════════════════════════════════════════\n \"IMAGE\": {\n // 必填,图表类型,固定值 \"IMAGE\"(图片)\n \"chartType\": \"IMAGE\",\n // 必填,卡片标题,用户在仪表盘中看到的图表名称,应准确且见名知意\n \"name\": \"图片\",\n // 必填,图片列表,至少包含一张图片;多张图片时支持轮播\n \"img_images\": [\n {\n // 必填,图片的访问 URL\n \"url\": \"https://example.com/image.png\",\n // 可选,图片标题,显示在图片上方(需 img_showImgText=true)\n \"title\": \"\",\n // 可选,图片描述,显示在标题下方(需 img_showImgText=true)\n \"desc\": \"\",\n // 可选,点击图片后跳转的链接 URL\n \"toUrl\": \"\",\n // 必填,图片填充模式,合法值:cover(裁剪铺满)/ contain(等比缩放留白)/ fill(拉伸铺满)\n \"fillMode\": \"cover\"\n }\n ],\n // 可选,是否在图片上显示标题和描述文字,默认 true;\n // 设为 false 时 img_titleStyle / img_descStyle / img_textAlign 均不生效\n \"img_showImgText\": true,\n // 可选,图片文字的对齐位置,合法值:\n // leftTop / top / rightTop / left / center / right / leftBottom / bottom / rightBottom\n \"img_textAlign\": \"center\",\n // 可选,图片标题的字体样式(仅 img_showImgText=true 时生效)\n \"img_titleStyle\": {\n // 字体大小(px),合法范围 16~56,步长 4\n \"size\": 16,\n // 字体颜色,十六进制色值,如 \"#FFFFFF\"\n \"color\": \"\",\n // 是否加粗\n \"bold\": true,\n // 是否斜体\n \"italic\": false,\n // 是否下划线\n \"underline\": false\n },\n // 可选,图片描述的字体样式(仅 img_showImgText=true 时生效)\n \"img_descStyle\": {\n // 字体大小(px),合法范围 16~56,步长 4\n \"size\": 14,\n // 字体颜色,十六进制色值\n \"color\": \"\",\n // 是否加粗\n \"bold\": false,\n // 是否斜体\n \"italic\": false,\n // 是否下划线\n \"underline\": false\n },\n // 可选,多图时是否自动轮播,默认 false;单张图片时此配置无效\n \"img_autoPlay\": false,\n // 可选,多图轮播切换动效,合法值:slide(滑动)/ fade(淡入淡出),默认 slide;单张图片时无效\n \"img_imgTransitionType\": \"slide\",\n // 可选,多图自动轮播间隔(秒),合法范围 0.1~1000,默认 1;仅 img_autoPlay=true 时生效\n \"img_imgTransitionInterval\": 1\n },\n// 看板视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"KANBAN_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"KANBAN_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"看板视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 看板自定义配置,这是看板视图的核心配置\n \"kanbanCustom\": {\n // 分组基础配置,用于设置看板的分组字段\n \"groupBase\": {\n // 必填,分组字段 ID(必须是该表中真实存在的字段 ID)\n // 看板将按照此字段的值进行分组显示\n \"baseFieldId\": \"fld_select_01\"\n }\n },\n // 工具栏配置,用于控制看板视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n // 是否显示编辑记录按钮\n \"enableEditRecord\": false\n },\n },\n// 排行榜配置格式,必须按照此格式配置,否则会导致解析错误\n \"LEADERBOARD\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"LEADERBOARD\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"排行榜\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n \"measureType\": \"record-count\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_text_01\"\n }\n ],\n \"showType\": \"podium\", // 展示类型:podium 领奖台/list 列表\n \"showCount\": 10, // 显示条数\n \"hideValue\": false,\n \"sortRule\": \"asc\",\n \"filter\": []\n },\n// 折线图配置格式\n \"LINE\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"LINE\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"折线图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_date_01\",\n \"externalValue\": []\n }\n ],\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"nullValue\": \"ignore\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"gridShow\": false,\n \"label\": true,\n \"labelHideOverlap\": true,\n \"smooth\": false,\n \"symbolType\": \"always\",\n \"xAxisShow\": true,\n \"xAxisLine\": false,\n \"xAxisLabel\": true,\n \"yAxisShow\": true,\n \"yAxisLine\": false,\n \"yAxisLabel\": true,\n \"fillType\": \"solid\",\n \"filter\": []\n }\n// 抽奖配置格式,必须按照此格式配置,否则会导致解析错误\n \"LOTTERY\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"LOTTERY\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"抽奖\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 必填,指标类型,合法值有:record-count(记录数)/ field(字段)\n \"measureType\": \"record-count\",\n // 必填,指标配置数组\n \"measure\": [],\n // 可选,输出表 ID,用于记录中奖结果\n \"outputSheet\": \"\",\n // 可选,滚动速度,默认为 5\n \"speed\": 5,\n // 可选,字体大小,默认为 20\n \"fontSize\": 20,\n // 可选,颜色主题,合法值有:COLOR_PALETTE_1 到 COLOR_PALETTE_10\n \"colors\": \"COLOR_PALETTE_1\",\n // 必填,奖项配置数组,每个元素格式为 [数量, 名称]\n \"gameRounds\": [\n [\n 1,\n \"一等奖\"\n ]\n ],\n // 可选,是否包含已中奖者,默认为 false\n \"includeWinners\": false\n },\n// 跑马灯配置格式,必须按照此格式配置,否则会导致解析错误\n \"MARQUEE\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"MARQUEE\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"跑马灯\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 可选,滚动文本内容\n \"content\": \"这是一条滚动消息\",\n // 可选,字体大小,默认为 14\n \"fontSize\": 14,\n // 可选,滚动速度,数值越小速度越快,默认为 50\n \"speed\": 50,\n // 可选,字体配置\n \"fontSetting\": {\n // 字体颜色\n \"color\": \"\",\n // 是否加粗,默认为 false\n \"bold\": false,\n // 是否斜体,默认为 false\n \"italic\": false,\n // 是否下划线,默认为 false\n \"underline\": false\n }\n },\n// NPS评分配置格式,必须按照此格式配置,否则会导致解析错误\n \"NPS\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"NPS\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"NPS评分\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\"\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\"\n }\n ],\n \"showLabel\": true,\n \"showList\": false,\n \"threshold\": [ // 评分阈值数组\n 2,\n 3\n ],\n \"colorSetName\": \"COLOR_PALETTE_1\",\n \"filter\": []\n },\n// 百分比堆叠面积图配置格式\n \"PERCENT_STACKED_AREA\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"PERCENT_STACKED_AREA\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"百分比堆叠面积图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_date_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_01\"\n }\n ],\n \"smooth\": false,\n \"symbolType\": \"always\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"label\": true,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"filter\": []\n }\n// 百分比堆叠条形图配置格式\n \"PERCENT_STACKED_BAR\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"PERCENT_STACKED_BAR\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"百分比堆叠条形图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_02\"\n }\n ],\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"label\": true,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"categoryAxisMaxRatio\": \"0.3\",\n \"filter\": []\n }\n// 百分比堆叠柱状图配置格式\n \"PERCENT_STACKED_HISTOGRAM\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"PERCENT_STACKED_HISTOGRAM\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"百分比堆叠柱状图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_02\"\n }\n ],\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"label\": true,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"filter\": []\n }\n// 饼图配置格式,必须按照此格式配置,否则会导致解析错误\n \"PIE\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"PIE\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"饼图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"colors\": \"COLOR_PALETTE_1\", // 必须使用示例中的默认值如 COLOR_PALETTE_1,禁止自行编造\n \"legend\": \"none\",\n \"label\": true, // 必须设为 true 以默认显示数据标签\n \"innerRadius\": 0, // 内半径,0 为实心饼图\n \"outerRadius\": 60, // 外半径百分比\n \"filter\": []\n },\n// 透视表配置格式,必须按照此格式配置,否则会导致解析错误\n \"PIVOT\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"PIVOT\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"透视表\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 透视表配置,这是透视表的核心配置\n \"pivotConfig\": {\n // 必填,rows 是行字段列表,至少要有一个行字段,\n // 每个字段配置中 fieldId 必须是该表中真实存在的字段 ID\n // 如果多层分组,行字段列表中多个字段的 fieldId 依次对应每层分组的字段 ID\n \"rows\": [\n {\n // 必填,行字段 ID(必须是该表中真实存在的字段 ID)\n \"fld\": \"fld_01\",\n // 可选,排序方式,合法值有:1(升序)和 -1(降序),默认为 1 升序\n \"srt\": 1\n }\n ],\n // 可选,columns 是列字段列表,默认为空数组,\n // 每个字段配置中 fieldId 必须是该表中真实存在的字段 ID\n // 如果多层分组,列字段列表中多个字段的 fieldId 依次对应每层分组的字段 ID\n \"columns\": [\n {\n // 必填,列字段 ID(必须是该表中真实存在的字段 ID)\n \"fld\": \"fld_02\",\n // 可选,排序方式,合法值有:1(升序)和 -1(降序),默认为 1 升序\n \"srt\": 1\n }\n ],\n // 必填,values 是值字段列表,至少要有一个值字段,\n // 每个字段配置中 fieldId 必须是该表中真实存在的字段 ID\n // 值字段,是用于计算值的字段,通常是数值字段,但也可以是其他类型的字段(如文本字段),具体取决于聚合函数的要求\n \"values\": [\n {\n // 必填,值字段 ID(必须是该表中真实存在的字段 ID)\n \"fld\": \"fld_03\",\n //必填,聚合函数,合法值有:sum /count / count_distinct / avg / min / max / median / population_variance / sample_variance / population_stddev / sample_stddev / first / last / range / mode / sum_of_squares / harmonic_mean / geometric_mean / interquartile_range / centered_mean / weighted_mean / kurtosis / skewness / quartile_median / range_median / coefficient_of_variation / adjusted_stddev / weighted_sum / weighted_count / weighted_count_distinct / weighted_avg / centered_weighted_mean / weighted_harmonic_mean / weighted_geometric_mean / weighted_range / weighted_range_median / weighted_interquartile_range / weighted_quartile_median / weighted_centered_mean / weighted_adjusted_stddev\n \"agg\": \"sum\",\n //可选,后聚合函数,合法值有:default / percent_of_row_total / percent_of_col_total / percent_of_grand_total\n \"pgg\": \"string\",\n //可选,格式化函数,合法值有:default / percentage / thousands / currency / scientific / fixed / integer\n \"fmt\": \"\",\n //可选,字段别名\n \"als\": \"string\"\n }\n ],\n // 是否显示行总计,默认为 true\n \"rowTotals\": true,\n // 是否显示列总计,默认为 true\n \"columnTotals\": true\n },\n \"pivotStyle\": {\n // 可选,透视表在卡片中的对齐方式,合法值有: start(上部)/ center(中间)\n \"verticalAlign\": \"start\"\n }\n },\n// 地图配置格式,必须按照此格式配置,否则会导致解析错误\n \"PLOT_MAP\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"PLOT_MAP\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"地图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 地图配置,这是地图的核心配置\n \"plotMapConfig\": {\n // 数据源配置\n \"source\": {\n // 数据源类型,合法值有:view(视图)\n \"type\": \"view\",\n // 数据源名称,格式为 \"sheetId:viewId\"\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"sheet_001:view_001\"\n },\n // 渲染器类型,合法值有:marker(标记点)/ heatmap(热力图)等\n // 用于设置地图的渲染方式\n \"renderer\": \"marker\",\n // 处理器,用于对数据进行预处理\n \"processor\": \"\",\n // 维度配置,用于设置地图的维度字段(如地理位置字段)\n \"dimensions\": [\n {\n // 必填,维度字段 ID(必须是该表中真实存在的字段 ID)\n // 通常为位置字段,用于在地图上定位\n \"fieldId\": \"fld_location_01\"\n }\n ],\n // 度量配置,用于设置地图的度量字段(如数值字段)\n \"measures\": [\n {\n // 必填,度量字段 ID(必须是该表中真实存在的字段 ID)\n // 用于在地图上显示数值大小或颜色\n \"fieldId\": \"fld_number_01\"\n }\n ],\n // 样式配置,用于设置地图的显示样式\n \"styles\": []\n },\n },\n// ═══════════════════════════════════════════════════════════════════\n // 图表类型:进度图(PROGRESS)\n // 别名/同义词:进度条、进度环、进度卡、进度图表\n // 用途:用于展示某项目标的完成进度,支持当前值 vs 目标值的对比,\n // 可视化呈现完成百分比。适合展示销售目标达成率、任务完成度、\n // 日期时间进度等场景。\n // 重要:当用户说\"进度图\"、\"进度条\"、\"进度环\"、\"目标完成度\"时,\n // 必须使用 chartType = \"PROGRESS\",不要使用其他图表类型。\n // ═══════════════════════════════════════════════════════════════════\n //\n // ⚠️⚠️⚠️ 极其重要的注意事项(不遵守会导致图表渲染报错):\n //\n // 1. currentMeasure / targetMeasure 的格式是一个对象(Object),绝对不是数组(Array)!\n // 不要使用普通图表的 measure 数组格式 [{ externalValue, value }],否则图表会报错!\n //\n // 2. 必须包含以下顶层通用字段,否则图表校验会失败并报「表格字段发生变化」错误:\n // - \"measureType\": \"record-count\" ← 必填!缺少此字段图表必定报错\n // - \"sheet\": \"\u003csheetId\u003e\" ← 必填!设置为 currentSheet 相同的值\n // - \"view\": \"\" ← 必填!设置为空字符串\n // - \"filter\": [] ← 必填!设置为空数组\n //\n // 3. currentFilter / targetFilter 中的每个筛选条件必须包含 \"link\" 字段:\n // 正确:{ \"fieldId\": \"xxx\", \"symbol\": \"EQ\", \"value\": \"yyy\", \"link\": \"AND\" }\n // 错误:{ \"fieldId\": \"xxx\", \"symbol\": \"EQ\", \"value\": \"yyy\" } ← 缺少 link!\n // 注意:单选字段的 value 必须是选项的 ID(如 \"PO5PWsAqQi\"),不能是选项的显示文本(如 \"影院观影\")!\n // 使用文本作为 value 会导致筛选条件无法匹配任何记录,当前值始终为 0。\n //\n // 4. 即使 targetSource 为 \"custom\",也必须提供 targetSheet、targetView、targetFilter、targetMeasure 的默认值\n // 即使 currentSource 为 \"custom\",也必须提供 currentSheet、currentView、currentFilter、currentMeasure 的默认值\n //\n // 5. 必须包含 numberFormat 和 fixedCount 字段,否则当前值/目标值会显示异常(数值被乘以100、出现双%%、文案被挤掉不显示):\n // - \"numberFormat\": { \"digits\": 0, \"format\": \"number\", \"thousandSeparator\": true } ← format 必须是 \"number\"!\n // - \"fixedCount\": 0\n //\n \"PROGRESS\": {\n // ── 顶层通用字段(必填,缺少会导致图表校验失败)─────────────────────────\n // 必填,图表类型,固定值 \"PROGRESS\"(进度图)\n \"chartType\": \"PROGRESS\",\n // ⚠️ 必填,统计类型,进度图固定为 \"record-count\"\n \"measureType\": \"record-count\",\n // ⚠️ 必填,顶层数据表 ID,设置为 currentSheet 相同的值\n \"sheet\": \"\u003csheetId\u003e\",\n // ⚠️ 必填,顶层视图 ID,设置为空字符串\n \"view\": \"\",\n // ⚠️ 必填,顶层筛选条件,设置为空数组\n \"filter\": [],\n\n // 必填,卡片标题,用户在仪表盘中看到的图表名称,应准确且见名知意\n \"name\": \"进度图\",\n // 必填,数据类型,合法值:number(数值进度)/ date(日期进度)\n \"dataType\": \"number\",\n // 必填,图表形状,合法值:bar(条形)/ semi-circle(半环)/ circle(圆环)\n \"progressType\": \"bar\",\n\n // ── 目标值配置 ──────────────────────────────────────────────────────────\n // 目标值来源,合法值:custom(自定义数值)/ sheet(从数据表字段聚合)\n \"targetSource\": \"custom\",\n // targetSource = \"custom\" 时填写,目标值的固定数值字符串\n \"target\": \"500\",\n // 必填,目标值来源的数据表 ID,即使 targetSource = \"custom\" 也要填写,设置为 currentSheet 相同的值\n \"targetSheet\": \"\u003csheetId\u003e\",\n // 必填,目标值来源的视图 ID,设置为空字符串\n \"targetView\": \"\",\n // 必填,目标值来源的过滤条件,targetSource = \"custom\" 时设置为空数组\n \"targetFilter\": [],\n // 必填,目标值聚合字段配置,targetSource = \"custom\" 时设置为默认值\n // ⚠️ 格式必须是对象,不是数组!详见下方 currentMeasure 的格式说明,targetMeasure 格式完全相同\n \"targetMeasure\": { \"type\": \"record-count\", \"fields\": [] },\n // 可选,目标值的标签文字,显示在目标值旁边\n \"targetText\": \"\",\n\n // ── 当前值配置 ──────────────────────────────────────────────────────────\n // 当前值来源,合法值:custom(自定义数值)/ sheet(从数据表字段聚合)\n \"currentSource\": \"custom\",\n // currentSource = \"custom\" 时填写,当前值的固定数值字符串\n \"current\": \"100\",\n // 必填,当前值来源的数据表 ID\n \"currentSheet\": \"\u003csheetId\u003e\",\n // 必填,当前值来源的视图 ID,设置为空字符串表示全部数据\n \"currentView\": \"\",\n // 必填,当前值来源的过滤条件,currentSource = \"custom\" 时设置为空数组\n // ⚠️ 每个筛选条件必须包含 \"link\" 字段!格式:\n // { \"fieldId\": \"\u003cfieldId\u003e\", \"symbol\": \"EQ\", \"value\": \"\u003c选项ID\u003e\", \"link\": \"AND\" }\n // 多个条件时,第一个条件的 link 也必须填 \"AND\"\n \"currentFilter\": [],\n // 必填,当前值聚合字段配置\n // ═══════════════════════════════════════════════════════════════════\n // ⚠️⚠️⚠️ 极其重要:currentMeasure 是一个 Object,不是 Array!\n // 绝对不要写成 [{ externalValue: [...], value: \"xxx\" }] 这种数组格式!\n // 正确格式如下:\n //\n // 方式一:记录计数(统计满足条件的记录总数)\n // { \"type\": \"record-count\", \"fields\": [] }\n //\n // 方式二:字段聚合(对某个字段做聚合计算)\n // { \"type\": \"field\", \"fields\": [{ \"value\": \"\u003cfieldId\u003e\", \"formula\": \"\u003c聚合函数\u003e\" }] }\n // formula 合法值:count / unique-count / sum / average / max / min\n //\n // 错误示例(绝对禁止):\n // [{ \"externalValue\": [{ \"type\": \"formula\", \"value\": \"count\" }], \"value\": \"fieldId\" }]\n // ═══════════════════════════════════════════════════════════════════\n \"currentMeasure\": { \"type\": \"record-count\", \"fields\": [] },\n // 可选,当前值的标签文字,显示在当前值旁边\n \"currentText\": \"\",\n\n // ── 数值格式配置 ──────────────────────────────────────────────────────────\n // ⚠️ 必填,百分比小数位数,缺少会导致小数位数异常,默认填 0\n \"fixedCount\": 0,\n // ⚠️ 必填,数字格式化配置(作用于当前值和目标值的显示)\n // 缺少此字段会导致数值显示异常(数值被乘以100、出现双%%符号、文案被挤掉不显示)\n \"numberFormat\": {\n // 小数位数,默认 0\n \"digits\": 0,\n // ⚠️ 格式类型,进度图必须填 \"number\"!绝对不要填 \"percent\",否则数值会被乘以100并多出%符号\n // 合法值:number / percent / thousand,进度图固定填 \"number\"\n \"format\": \"number\",\n // 是否显示千位分隔符\n \"thousandSeparator\": true\n },\n // 可选,数值单位,如 \"¥\" / \"$\" / \"人\" / \"%\" 等自定义字符串,不填则无单位\n \"modifier\": \"\",\n // 可选,单位位置,合法值:left(左)/ right(右),默认 left\n \"modifierPosition\": \"left\",\n // 可选,目标方向,合法值:increase(越大越好)/ decrease(越小越好),影响进度条配色逻辑\n \"targetDirection\": \"increase\",\n\n // ── 日期进度(dataType = \"date\")专属配置 ────────────────────────────────\n // 目标日期范围,合法值:month(本月)/ quarter(本季度)/ year(今年)/ custom(自定义)\n \"targetDateSelected\": \"month\",\n // targetDateSelected = \"custom\" 时填写,自定义目标日期范围 [开始时间戳, 结束时间戳]\n \"targetDateRange\": null,\n // 当前日期,合法值:today(今日)/ yesterday(昨日)/ custom(自定义)\n \"currentDateSelected\": \"today\",\n // currentDateSelected = \"custom\" 时填写,自定义当前日期时间戳\n \"currentDate\": null,\n // 日期格式,如 \"YYYY-MM-DD\",仅在 targetDateSelected 或 currentDateSelected 为 custom 时生效\n \"dateFormat\": \"YYYY-MM-DD\",\n\n // ── 样式配置 ──────────────────────────────────────────────────────────────\n // 可选,卡片背景颜色,十六进制色值,如 \"#F0F5FF\"\n \"background\": \"\",\n // 可选,百分比数字颜色,十六进制色值,如 \"#1677FF\"\n \"percentageColor\": \"\",\n // 可选,进度条填充颜色,支持两种形式:\n // 1. 固定色值字符串,如 \"#1677FF\",或渐变色 \"linear-gradient(...)\"(圆环图支持渐变)\n // 2. 条件配色对象(根据百分比区间动态变色),格式参考 dashboard-config-example 中的 colors 配置\n \"strokeColor\": \"\",\n // 可选,进度条背景颜色\n \"strokeBgColor\": \"\",\n // 可选,当前值文字颜色(仅 dataType=number 时生效)\n \"currentColor\": \"\",\n // 可选,目标值文字颜色\n \"targetColor\": \"\"\n },\n// 查询页配置格式,必须按照此格式配置,否则会导致解析错误\n \"QUERY_PAGE\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"QUERY_PAGE\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"查询页\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"\",\n // 查询页无其他特殊配置字段,\n // 主要用于提供数据查询和展示的基础功能\n },\n// 雷达图配置格式,必须按照此格式配置,否则会导致解析错误\n \"RADAR\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"RADAR\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"雷达图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"xSortBy\": \"y\",\n \"sortRule\": \"asc\",\n \"radarShape\": \"circle\",\n \"isFilled\": true,\n \"gridShow\": true,\n \"yAxisLine\": true,\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"label\": true,\n \"filter\": []\n },\n// 富文本配置格式,必须按照此格式配置,否则会导致解析错误\n \"RICH_TEXT\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"RICH_TEXT\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"富文本\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 可选,富文本内容,支持 HTML 格式\n \"content\": \"\"\n },\n// 玫瑰图配置格式,必须按照此格式配置,否则会导致解析错误\n \"ROSE\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"ROSE\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"玫瑰图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"none\",\n \"label\": true,\n \"innerRadius\": 0,\n \"outerRadius\": 60,\n \"filter\": []\n },\n// 散点图配置格式,必须按照此格式配置,否则会导致解析错误\n \"SCATTER\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"SCATTER\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"散点图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_number_02\",\n \"externalValue\": []\n }\n ],\n \"smooth\": false,\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"gridShow\": false,\n \"label\": false,\n \"xAxisShow\": true,\n \"xAxisLine\": false,\n \"xAxisLabel\": true,\n \"yAxisShow\": true,\n \"yAxisLine\": false,\n \"yAxisLabel\": true,\n \"filter\": []\n },\n// 筛选器配置格式,必须按照此格式配置,否则会导致解析错误\n \"SLICER\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"SLICER\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"筛选器\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 可选,筛选器样式,合法值有:button(按钮)/ dropdown(下拉),默认为 button\n \"sli_filterStyle\": \"button\",\n // 可选,排序方式,合法值有:asc(升序)/ desc(降序),默认为 asc\n \"sli_orderBy\": \"asc\",\n // 可选,是否多选,默认为 true\n \"sli_multiple\": true,\n // 可选,是否显示数量,默认为 true\n \"sli_showCount\": true,\n // 可选,日期操作符,合法值有:BEFORE / AFTER / BETWEEN 等\n \"sli_dateOperator\": \"BEFORE\",\n // 可选,数字操作符,合法值有:EQ(等于)/ NE(不等于)/ GT(大于)等\n \"sli_numberOperator\": \"EQ\",\n // 可选,关联到图表的方式,合法值有:auto(自动)/ manual(手动),默认为 auto\n \"sli_2Chart\": \"auto\",\n // 可选,关联到其他筛选器的方式,合法值有:auto(自动)/ manual(手动),默认为 auto\n \"sli_2Slicer\": \"auto\",\n // 可选,对齐方式,合法值有:top(顶部)/ bottom(底部),默认为 top\n \"sli_align\": \"top\",\n // 可选,选择样式,合法值有:1 / 2 / 3 等,默认为 1\n \"sli_selectStyle\": \"1\",\n // 必填,绑定的字段 ID(必须是该表中真实存在的字段 ID)\n \"sli_fieldId\": \"fld_select_01\"\n },\n// 堆叠面积图配置格式\n \"STACKED_AREA\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"STACKED_AREA\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"堆叠面积图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_date_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_01\"\n }\n ],\n \"smooth\": false,\n \"symbolType\": \"always\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"label\": false,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"filter\": []\n }\n// 堆叠条形图配置格式\n \"STACKED_BAR\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"STACKED_BAR\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"堆叠条形图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_select_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_02\"\n }\n ],\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"bottom\",\n \"label\": false,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"categoryAxisMaxRatio\": \"0.3\",\n \"filter\": []\n }\n// 堆叠柱状图配置格式\n \"STACKED_HISTOGRAM\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"STACKED_HISTOGRAM\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"堆叠柱状图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_date_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_01\"\n }\n ],\n \"xSortBy\": \"x\",\n \"sortRule\": \"asc\",\n \"nullValue\": \"ignore\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"bottom\",\n \"gridShow\": false,\n \"label\": false,\n \"labelHideOverlap\": true,\n \"xAxisShow\": true,\n \"xAxisLine\": false,\n \"xAxisLabel\": true,\n \"yAxisShow\": true,\n \"yAxisLine\": false,\n \"yAxisLabel\": true,\n \"fillType\": \"solid\",\n \"filter\": []\n }\n// 堆叠折线图配置格式\n \"STACKED_LINE\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"STACKED_LINE\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"堆叠折线图\",\n \"sheet\": \"sheet_001\",\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_date_01\",\n \"externalValue\": []\n }\n ],\n \"group\": [\n {\n \"value\": \"fld_select_01\"\n }\n ],\n \"smooth\": false,\n \"symbolType\": \"always\",\n \"colors\": \"COLOR_PALETTE_1\",\n \"legend\": \"top\",\n \"label\": false,\n \"xAxisShow\": true,\n \"yAxisShow\": true,\n \"filter\": []\n }\n// 标准列表视图配置格式,必须按照此格式配置,否则会导致解析错误\n \"STANDARD_LIST_VIEW\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"STANDARD_LIST_VIEW\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"标准列表视图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId\n \"view\": \"view_001\",\n // 无 filter 时请传空数组,\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置) 中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 视图排序配置,用于设置视图的默认排序规则\n \"viewSort\": [],\n // 隐藏字段配置,key 为 fieldId,value 为 true/false\n \"hiddenFields\": {},\n // 列排序配置,用于设置列的显示顺序\n \"columnSort\": [],\n // 列表自定义配置,用于设置列表的自定义样式和行为\n \"listCustom\": {},\n // 列表配置,用于设置列表的显示方式和布局\n \"listConfig\": {},\n // 字段聚合映射,用于设置字段的聚合方式\n \"fieldAggregateMap\": {},\n // 工具栏配置,用于控制标准列表视图中工具栏的功能按钮\n \"toolbarConfig\": {\n // 是否显示创建行按钮\n \"enableCreateRow\": false,\n // 是否显示筛选按钮\n \"enableFilter\": true,\n // 是否显示分组按钮\n \"enableGroup\": true,\n // 是否显示排序按钮\n \"enableSort\": true,\n // 是否显示查找按钮\n \"enableFind\": true,\n // 是否显示详情记录按钮\n \"enableDetailRecord\": true,\n // 是否显示编辑记录按钮\n \"enableEditRecord\": false\n },\n },\n// ═══════════════════════════════════════════════════════════════════\n // 图表类型:指标卡(STATISTICS)\n // 别名/同义词:KPI 卡、指标图、数据指标卡、关键指标卡\n // 用途:以大号数字展示核心指标,并可附加环同比(与上期对比的涨跌幅)\n // 和趋势折线图,适合展示销售额、DAU、转化率等需要对比分析的 KPI 指标。\n // 与\"统计数字(SUMMARY)\"的区别:指标卡支持环同比对比和趋势图,\n // 功能更丰富;统计数字仅展示单一数字,更简洁。\n // 重要:当用户说\"指标卡\"、\"KPI 卡\"、\"指标图\"、\"关键指标\"、\"带趋势的数字\"时,\n // 必须使用 chartType = \"STATISTICS\",不要使用其他图表类型。\n // ═══════════════════════════════════════════════════════════════════\n \"STATISTICS\": {\n // 必填,图表类型,固定值 \"STATISTICS\"(指标卡)\n \"chartType\": \"STATISTICS\",\n // 必填,卡片标题,用户在仪表盘中看到的图表名称,应准确且见名知意\n \"name\": \"指标卡\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时为 null,传入时必须是该表中真实存在的 viewId\n \"view\": null,\n // 无 filter 时请传空数组;\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置)中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 统计指标配置,measureType 与 measure 二选一:\n // measureType = \"record-count\" 时统计记录总数,无需填 measure;\n // measureType = \"field\" 时需填 measure,指定聚合字段和聚合函数\n \"measureType\": \"field\",\n // 可选,当 measureType = \"field\" 时必填,指定聚合字段\n \"measure\": [\n {\n // 必填,字段 ID(必须是该表中真实存在的数值类字段 ID)\n \"value\": \"fld_number_01\",\n // 必填,聚合函数配置\n \"externalValue\": [\n {\n \"type\": \"formula\",\n // formula 合法值:count (计数), unique-count (去重计数), sum (求和), average (平均值), max (最大值), min (最小值)'\n \"value\": \"sum\"\n }\n ]\n }\n ],\n // 可选,指标说明文字,显示在数值下方\n \"desc\": \"\",\n // 可选,数字格式化配置\n \"numberFormat\": {\n // 小数位数,默认 0\n \"digits\": 0,\n // 格式类型,合法值:number / percent / thousand\n \"format\": \"number\",\n // 是否显示千位分隔符\n \"thousandSeparator\": true\n },\n // 可选,是否显示环同比,默认 false\n \"showComparison\": false,\n // 可选,showComparison=true 时填写,环同比对比的日期字段 ID\n \"comparisonField\": null,\n // 可选,环同比时间范围,如 \"this_week\" / \"this_month\" / \"this_year\"\n \"comparisonDateRange\": null,\n // 可选,环同比类型,合法值:sequential(环比)/ year-on-year(同比)/ month-on-month(月比)/ week-on-week(周比)/ custom(自定义)\n \"comparisonType\": \"sequential\",\n // 可选,时间统计方式,合法值:same_period(同期)/ cumulative(累计)\n \"comparisonPeriodType\": \"same_period\",\n // 可选,环同比计算类型,合法值:difference-rate(差值率)/ difference-value(差值)/ original-value(原值)\n \"comparisonCalculationType\": \"difference-rate\",\n // 可选,环同比布局方向(仅 showComparison=true 且 showTrend=false 时生效),合法值:bottom(下方)/ right(右侧)\n \"comparisonLayout\": \"bottom\",\n // 可选,是否显示趋势图,默认 false\n \"showTrend\": false,\n // 可选,showTrend=true 时填写,趋势图使用的日期字段 ID\n \"trendField\": null,\n // 可选,趋势图时间范围,如 \"this_week\" / \"this_month\" / \"this_year\"\n \"trendDateRange\": null,\n // 可选,趋势图布局方向(仅 showTrend=true 且 showComparison=false 时生效),合法值:bottom(下方)/ right(右侧)\n \"trendLayout\": \"bottom\",\n // 可选,趋势图颜色,十六进制色值,如 \"#1677FF\"\n \"trendColor\": \"\",\n // 可选,环同比图标样式,合法值:1 / 2 / 3 / 4 / 5 / 6 / 7 / 8\n \"iconStyle\": \"5\",\n // 可选,卡片标题颜色,十六进制色值\n \"titleColor\": \"\",\n // 可选,指标说明文字颜色,十六进制色值\n \"descColor\": \"\",\n // 可选,环同比描述颜色,十六进制色值\n \"comparisonDescColor\": \"\",\n // 可选,数值颜色配置,支持两种形式:\n // 1. 固定色值字符串,如 \"#1677FF\",或渐变色 \"linear-gradient(...)\"\n // 2. 条件配色对象(根据数值区间动态变色),格式参考 dashboard-config-example 中的 colors 配置\n \"colors\": \"\"\n },\n// ═══════════════════════════════════════════════════════════════════\n // 图表类型:统计数字(SUMMARY)\n // 别名/同义词:汇总数字、统计卡、数字卡、计数卡\n // 用途:以大号数字形式展示单一聚合指标(如记录总数、字段求和/均值等),\n // 是最简洁的数据汇总展示方式,适合展示总销售额、总订单数、平均分等。\n // 与其他图表的关键区别:\n // - 与\"指标卡(STATISTICS)\"的区别:统计数字更简洁,无环同比、无趋势图;\n // 指标卡功能更丰富,支持环同比对比和趋势折线图。\n // - 与\"柱状图(HISTOGRAM)\"的关键区别:统计数字只展示一个聚合数字(单值卡片),\n // 无坐标轴、无分类对比;柱状图展示多个分类的数值对比,有 X/Y 轴(多值图表)。\n // 重要:当用户说\"统计数字\"、\"汇总数字\"、\"数字卡\"、\"计数\"、\"总数\"时,\n // 必须使用 chartType = \"SUMMARY\",不要使用 HISTOGRAM 或其他图表类型。\n // ═══════════════════════════════════════════════════════════════════\n \"SUMMARY\": {\n // 必填,图表类型,固定值 \"SUMMARY\"(统计数字)\n \"chartType\": \"SUMMARY\",\n // 必填,卡片标题,用户在仪表盘中看到的图表名称,应准确且见名知意\n \"name\": \"统计数字\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时为 null,传入时必须是该表中真实存在的 viewId\n \"view\": null,\n // 无 filter 时请传空数组;\n // 如果传入 filter,可参考 dashboard-config-example(仪表盘示例配置)中 filters 的 filter 格式,\n // 注意 filter 中的 fieldId 必须是该表中真实存在的字段 ID\n \"filter\": [],\n // 统计指标配置,measureType 与 measure 二选一:\n // measureType = \"record-count\" 时统计记录总数,无需填 measure;\n // measureType = \"field\" 时需填 measure,指定聚合字段和聚合函数\n \"measureType\": \"field\",\n // 可选,当 measureType = \"field\" 时必填,指定聚合字段\n \"measure\": [\n {\n // 必填,字段 ID(必须是该表中真实存在的数值类字段 ID)\n \"value\": \"fld_number_01\",\n // 必填,聚合函数配置\n \"externalValue\": [\n {\n \"type\": \"formula\",\n // formula 合法值:count (计数), unique-count (去重计数), sum (求和), average (平均值), max (最大值), min (最小值)'\n \"value\": \"sum\"\n }\n ]\n }\n ],\n // 可选,数字格式化配置\n \"numberFormat\": {\n // 小数位数,默认 0\n \"digits\": 0,\n // 格式类型,合法值:number / percent / thousand\n \"format\": \"number\",\n // 是否显示千位分隔符\n \"thousandSeparator\": true\n },\n // 可选,指标说明文字,由用户在编辑器中输入,传给服务端后显示在数值下方\n \"desc\": \"\",\n // 可选,数值颜色配置,支持两种形式:\n // 1. 固定色值字符串,如 \"#1677FF\",或渐变色 \"linear-gradient(...)\"\n // 2. 条件配色对象(根据数值区间动态变色),格式参考 dashboard-config-example 中的 colors 配置\n \"colors\": \"\"\n },\n// 标签页配置格式,必须按照此格式配置,否则会导致解析错误\n \"TABS\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"TABS\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"标签页\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n // 可选,标签页样式类型,合法值有:type1 到 type10,默认为 type1\n \"tabsStyleType\": \"type1\",\n // 可选,标签页对齐方式,合法值有:left(左对齐)/ center(居中)/ right(右对齐),默认为 left\n \"tabsAlignType\": \"left\",\n // 可选,默认激活的标签页 ID,必须与 tabs 数组中的某个 id 匹配\n \"activeTabId\": \"tab_001\",\n // 必填,标签页数组\n \"tabs\": [\n {\n // 必填,标签页 ID(必须唯一)\n \"id\": \"tab_001\",\n // 必填,标签页名称\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"标签页 1\"\n },\n {\n \"id\": \"tab_002\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"标签页 2\"\n },\n {\n \"id\": \"tab_003\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"标签页 3\"\n }\n ]\n },\n// 词云图配置格式,必须按照此格式配置,否则会导致解析错误\n \"WORD_CLOUD\": {\n // 必填,图表的类型,不传或传错图表将渲染异常\n \"chartType\": \"WORD_CLOUD\",\n // 必填,图表的名称,是仪表盘中用户看到的图表卡片的标题,应该准确且见名知意\n \"name\": \"词云图\",\n // 必填,数据表 ID(必须是真实存在的 tableId),可通过 get_base 获取\n \"sheet\": \"sheet_001\",\n // 可选,视图 ID,不传时直接 null 或 undefined,如果传 viewId 必须是真实存在的 viewId)\n \"view\": \"view_001\",\n \"measureType\": \"field\",\n \"measure\": [\n {\n \"value\": \"fld_number_01\",\n \"externalValue\": [\n {\n \"type\": \"formula\",\n \"value\": \"sum\"\n }\n ]\n }\n ],\n \"dimension\": [\n {\n \"value\": \"fld_text_01\"\n }\n ],\n \"disableParticiple\": false, // 是否禁用分词\n \"colors\": \"COLOR_PALETTE_1\",\n \"filter\": []\n },\n}\n",
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Dashboard widgets config example returned. Each key is a chart type (e.g. HISTOGRAM, PIE), and the value is the corresponding widget config example. Use the matching chart type's config as a reference when calling create_chart."
+} |
||
dws aitable +dashboard-arrange --base-id <base-id> --dashboard-id <dashboard-id>write对指定仪表盘做服务端智能布局重排 |
dws mcp aitable align_dashboard --json '{"baseId":<..>, "dashboardId":<..>}' |
lark-cli base +dashboard-arrange |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/align_dashboard输入 / CLI 输出输入 dws aitable +dashboard-arrange --base-id x --dashboard-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "dashboardId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "align_dashboard"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "dashboardId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "align_dashboard"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1141ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +dashboard-arrange --base-id DWSREALTESTNOSUCHID0000000000000 --dashboard-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to align dashboard for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2132f5ca17840998564478222e08d8\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to align dashboard for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2132f5ca17840998564478222e08d8\"}"
+ }
+} |
||
dws aitable +dashboard-config-exampleread获取 dashboard config 的结构示例 |
dws mcp aitable get_dashboard_config_example |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/get_dashboard_config_example输入 / CLI 输出输入 dws aitable +dashboard-config-example --yes stdout {
+ "_fake": true,
+ "args": {},
+ "product": "aitable",
+ "tool": "get_dashboard_config_example"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {},
+ "product": "aitable",
+ "tool": "get_dashboard_config_example"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1064ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +dashboard-config-example --yes --format json 真实 stdout {
+ "data": "// 注意\n// 1. 下述 JSON 示例中的注释(// 开头的注释)仅用于说明,实际使用时请删除,否则会导致解析错误\n// 2. 当一个仪表盘创建完成,并添加图表完成后,检查一下布局,如果有空白或不对齐的图表,请调用 update_chart 优化布局\n// 3. 当一个仪表盘完整创建后,包括图表也添加完成后,可通过 get_dashboard 接口查看仪表盘详情,检查布局是合适(没有空白或不对齐),如果有问题,调用 update_chart 优化布局\n// 4. 仪表盘创建好并优化布局后,向用户输出仪表盘链接 URL(注意是仪表盘 URL),方便用户直接访问和使用仪表盘\n\n{\n // 服务端自动生成,调用方传入会被忽略\n \"id\": \"dashboard_001\",\n // 必填,dashboard 名称,是整个仪表盘的标题,一定要传入,且清晰明确,方便用户使用\n \"name\": \"示例仪表盘\",\n // 必须使用本示例中的默认主题,禁止自行编造,随意生成的主题无法解析和渲染\n \"theme\": {\n // 必须为 DEFAULT\n \"key\": \"DEFAULT\",\n // 主题背景色,大部分情况下「传入 null 或 undefined」,使用默认即可\n \"background\": null,\n \"image\": \"\"\n },\n // 可选,全局筛选条件数组;每个元素对应一张数据表的筛选规则\n \"filters\": [\n {\n // 要筛选的数据表 ID(必须是真实存在的 tableId)\n \"sheetId\": \"sheet_001\",\n // 筛选条件数组;第一个条件的 link 必须为 null,后续条件用 \"AND\" 或 \"OR\" 连接\n \"filter\": [\n {\n // 要筛选的字段 ID(必须是该表中真实存在的 fieldId)\n \"fieldId\": \"fld_001\",\n // 条件连接符:第一个条件必须为 null,后续条件为 \"AND\" 或 \"OR\"\n \"link\": null,\n // 固定为 1\n \"version\": 1,\n // 比较符号,合法值按字段类型分组如下:\n // 文本类: EQ(等于), NE(不等于), CONTAIN(包含), EXCLUSIVE(不包含) — value 为字符串\n // 数字类: EQ, NE, GT(大于), LT(小于), GTE(大于等于), LTE(小于等于) — value 为数字\n // 日期类: DATE_EQ(日期等于), BEFORE(早于), AFTER(晚于), NOT_AFTER(不晚于), NOT_BEFORE(不早于) — value 为 \"yyyy-MM-dd\" 格式字符串\n // 选项类: ANY_OF(包含任一), ALL_OF(包含全部), NONE_OF(不包含任一) — value 为选项 ID 字符串数组,如 [\"opt_001\", \"opt_002\"]\n // 存在性: EXIST(有值), UN_EXIST(无值) — value 为 null\n \"symbol\": \"EQ\",\n // value 的类型取决于 symbol,参见上方说明\n \"value\": \"已完成\"\n }\n ]\n }\n ],\n // 图表布局数组;创建时会被忽略(默认空数组),更新时有效\n // 每个元素描述一个图表在网格中的位置和尺寸\n // layout 的更新,需要通过 update_chart 接口更新到每个图表上,update_chart 接口会自动根据 layout 调整仪表盘布局\n // 无法通过 update_dashboard 接口直接更新布局,必须通过 update_chart 接口更新图表来间接更新布局\n \"layout\": [\n {\n // 对应的 widget/chart ID\n \"i\": \"widget_001\",\n // 横坐标(列位置,从 0 开始,取值范围 0~11)\n \"x\": 0,\n // 纵坐标(行位置,从 0 开始,无上限)\n \"y\": 0,\n // 宽度(占几列,网格总宽 12 列,取值范围 1~12,同一行所有图表的 w 之和应等于 12)\n \"w\": 12,\n // 高度(占几行,取值范围 1~N,同一行的图表必须保持相同高度)\n \"h\": 6,\n // 最小宽度(可选,限制用户拖拽缩放的下限)\n \"minW\": 4,\n // 最小高度(可选,限制用户拖拽缩放的下限)\n \"minH\": 3,\n // 可选,所属分组 ID(用于 COMPOSITE_LAYOUT 组合布局,不使用分组时省略)\n \"parentId\": \"group_001\"\n }\n ]\n}",
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Dashboard config example returned. The 'id' field is for structure reference only; it will be auto-generated by the server when creating a dashboard. The 'layout' field is ignored when creating (defaults to empty array), but effective when updating."
+}真实 stderr / error (空) 真实返回 {
+ "data": "// 注意\n// 1. 下述 JSON 示例中的注释(// 开头的注释)仅用于说明,实际使用时请删除,否则会导致解析错误\n// 2. 当一个仪表盘创建完成,并添加图表完成后,检查一下布局,如果有空白或不对齐的图表,请调用 update_chart 优化布局\n// 3. 当一个仪表盘完整创建后,包括图表也添加完成后,可通过 get_dashboard 接口查看仪表盘详情,检查布局是合适(没有空白或不对齐),如果有问题,调用 update_chart 优化布局\n// 4. 仪表盘创建好并优化布局后,向用户输出仪表盘链接 URL(注意是仪表盘 URL),方便用户直接访问和使用仪表盘\n\n{\n // 服务端自动生成,调用方传入会被忽略\n \"id\": \"dashboard_001\",\n // 必填,dashboard 名称,是整个仪表盘的标题,一定要传入,且清晰明确,方便用户使用\n \"name\": \"示例仪表盘\",\n // 必须使用本示例中的默认主题,禁止自行编造,随意生成的主题无法解析和渲染\n \"theme\": {\n // 必须为 DEFAULT\n \"key\": \"DEFAULT\",\n // 主题背景色,大部分情况下「传入 null 或 undefined」,使用默认即可\n \"background\": null,\n \"image\": \"\"\n },\n // 可选,全局筛选条件数组;每个元素对应一张数据表的筛选规则\n \"filters\": [\n {\n // 要筛选的数据表 ID(必须是真实存在的 tableId)\n \"sheetId\": \"sheet_001\",\n // 筛选条件数组;第一个条件的 link 必须为 null,后续条件用 \"AND\" 或 \"OR\" 连接\n \"filter\": [\n {\n // 要筛选的字段 ID(必须是该表中真实存在的 fieldId)\n \"fieldId\": \"fld_001\",\n // 条件连接符:第一个条件必须为 null,后续条件为 \"AND\" 或 \"OR\"\n \"link\": null,\n // 固定为 1\n \"version\": 1,\n // 比较符号,合法值按字段类型分组如下:\n // 文本类: EQ(等于), NE(不等于), CONTAIN(包含), EXCLUSIVE(不包含) — value 为字符串\n // 数字类: EQ, NE, GT(大于), LT(小于), GTE(大于等于), LTE(小于等于) — value 为数字\n // 日期类: DATE_EQ(日期等于), BEFORE(早于), AFTER(晚于), NOT_AFTER(不晚于), NOT_BEFORE(不早于) — value 为 \"yyyy-MM-dd\" 格式字符串\n // 选项类: ANY_OF(包含任一), ALL_OF(包含全部), NONE_OF(不包含任一) — value 为选项 ID 字符串数组,如 [\"opt_001\", \"opt_002\"]\n // 存在性: EXIST(有值), UN_EXIST(无值) — value 为 null\n \"symbol\": \"EQ\",\n // value 的类型取决于 symbol,参见上方说明\n \"value\": \"已完成\"\n }\n ]\n }\n ],\n // 图表布局数组;创建时会被忽略(默认空数组),更新时有效\n // 每个元素描述一个图表在网格中的位置和尺寸\n // layout 的更新,需要通过 update_chart 接口更新到每个图表上,update_chart 接口会自动根据 layout 调整仪表盘布局\n // 无法通过 update_dashboard 接口直接更新布局,必须通过 update_chart 接口更新图表来间接更新布局\n \"layout\": [\n {\n // 对应的 widget/chart ID\n \"i\": \"widget_001\",\n // 横坐标(列位置,从 0 开始,取值范围 0~11)\n \"x\": 0,\n // 纵坐标(行位置,从 0 开始,无上限)\n \"y\": 0,\n // 宽度(占几列,网格总宽 12 列,取值范围 1~12,同一行所有图表的 w 之和应等于 12)\n \"w\": 12,\n // 高度(占几行,取值范围 1~N,同一行的图表必须保持相同高度)\n \"h\": 6,\n // 最小宽度(可选,限制用户拖拽缩放的下限)\n \"minW\": 4,\n // 最小高度(可选,限制用户拖拽缩放的下限)\n \"minH\": 3,\n // 可选,所属分组 ID(用于 COMPOSITE_LAYOUT 组合布局,不使用分组时省略)\n \"parentId\": \"group_001\"\n }\n ]\n}",
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Dashboard config example returned. The 'id' field is for structure reference only; it will be auto-generated by the server when creating a dashboard. The 'layout' field is ignored when creating (defaults to empty array), but effective when updating."
+} |
||
dws aitable +dashboard-delete --base-id <base-id> --dashboard-id <dashboard-id> --reason <reason>high-risk-write删除指定 dashboard(级联删除其 chart,不可逆) |
dws mcp aitable delete_dashboard --json '{"baseId":<..>, "dashboardId":<..>, "reason":<..>}' |
lark-cli base +dashboard-delete |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/delete_dashboard输入 / CLI 输出输入 dws aitable +dashboard-delete --base-id x --dashboard-id x --reason x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "dashboardId": "x",
+ "reason": "x"
+ },
+ "product": "aitable",
+ "tool": "delete_dashboard"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "dashboardId": "x",
+ "reason": "x"
+ },
+ "product": "aitable",
+ "tool": "delete_dashboard"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1247ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +dashboard-delete --base-id DWSREALTESTNOSUCHID0000000000000 --dashboard-id DWSREALTESTNOSUCHID0000000000000 --reason 'DWS shortcut 真实测试安全负向清理' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete dashboard DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998577042546e0941\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete dashboard DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998577042546e0941\"}"
+ }
+} |
||
dws aitable +dashboard-get --base-id <base-id> --dashboard-id <dashboard-id>read获取指定 dashboard 的详细信息(含 charts summary) |
dws mcp aitable get_dashboard --json '{"baseId":<..>, "dashboardId":<..>}' |
lark-cli base +dashboard-get |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/get_dashboard输入 / CLI 输出输入 dws aitable +dashboard-get --base-id x --dashboard-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "dashboardId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_dashboard"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "dashboardId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_dashboard"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1179ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +dashboard-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --dashboard-id KY9tlWg5NEHgfs8WT6IO2 --yes --format json 真实 stdout {
+ "data": {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartCount": 8,
+ "charts": [
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-dlxFo0tNSImp4ITpDn5fQ",
+ "chartName": "各业务线未部署数",
+ "chartType": "BAR",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-OQW55ZoOPT3abjYxQbdBo",
+ "chartName": "部署完成率",
+ "chartType": "PIE",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "0ed6ae150c7e43508d504b741ca1b19a",
+ "chartName": "设备付费情况分布",
+ "chartType": "PIE",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-dqjTHaYZdhbSTwRk3JEjI",
+ "chartName": "领取人未部署排行",
+ "chartType": "LEADERBOARD",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-qqMeLF69BEVnKCglPUPRw",
+ "chartName": "验证情况分析",
+ "chartType": "BAR",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-tIkpYHZqciaEu0ypokSEt",
+ "chartName": "部署时间趋势",
+ "chartType": "LINE",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-PcnRUOqW5RzJHFZ1BxQJe",
+ "chartName": "客户未部署分布",
+ "chartType": "HISTOGRAM",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-8LICblz3EqyoLbkyM22Bw",
+ "chartName": "付费状态漏斗",
+ "chartType": "FUNNEL",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ }
+ ],
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2",
+ "dashboardName": "仪表盘",
+ "filters": [],
+ "layout": [
+ {
+ "h": 4,
+ "i": "widget-05w7XiwviqQgWrMxmvP20",
+ "w": 12,
+ "x": 0,
+ "y": 0
+ },
+ {
+ "h": 5,
+ "i": "widget-dlxFo0tNSImp4ITpDn5fQ",
+ "w": 6,
+ "x": 0,
+ "y": 4
+ },
+ {
+ "h": 5,
+ "i": "widget-PcnRUOqW5RzJHFZ1BxQJe",
+ "w": 6,
+ "x": 6,
+ "y": 4
+ },
+ {
+ "h": 5,
+ "i": "widget-qqMeLF69BEVnKCglPUPRw",
+ "w": 6,
+ "x": 0,
+ "y": 9
+ },
+ {
+ "h": 5,
+ "i": "widget-tIkpYHZqciaEu0ypokSEt",
+ "w": 6,
+ "x": 6,
+ "y": 9
+ },
+ {
+ "h": 5,
+ "i": "widget-OQW55ZoOPT3abjYxQbdBo",
+ "w": 4,
+ "x": 0,
+ "y": 14
+ },
+ {
+ "h": 5,
+ "i": "widget-dqjTHaYZdhbSTwRk3JEjI",
+ "w": 4,
+ "x": 4,
+ "y": 14
+ },
+ {
+ "h": 5,
+ "i": "widget-8LICblz3EqyoLbkyM22Bw",
+ "w": 4,
+ "x": 8,
+ "y": 14
+ },
+ {
+ "h": 4,
+ "i": "0ed6ae150c7e43508d504b741ca1b19a",
+ "w": 6,
+ "x": 0,
+ "y": 0
+ }
+ ],
+ "meta": {}
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Got dashboard KY9tlWg5NEHgfs8WT6IO2. URL rules: AI 表格仪表盘访问地址: https://docs.dingtalk.com/i/nodes/{baseId}?iframeQuery=applicationId%3D{dashboardId}. User-facing guidance: 面向用户时要以人为本、友好直观,优先展示 **实体名称**、可点击链接和必要上下文,尽量隐藏 `baseId`、`tableId`、`viewId`、`dashboardId`、`documentId` 等技术细节;除非用户明确索要或排障必须,否则不要直接呈现这些 ID。"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartCount": 8,
+ "charts": [
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-dlxFo0tNSImp4ITpDn5fQ",
+ "chartName": "各业务线未部署数",
+ "chartType": "BAR",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-OQW55ZoOPT3abjYxQbdBo",
+ "chartName": "部署完成率",
+ "chartType": "PIE",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "0ed6ae150c7e43508d504b741ca1b19a",
+ "chartName": "设备付费情况分布",
+ "chartType": "PIE",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-dqjTHaYZdhbSTwRk3JEjI",
+ "chartName": "领取人未部署排行",
+ "chartType": "LEADERBOARD",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-qqMeLF69BEVnKCglPUPRw",
+ "chartName": "验证情况分析",
+ "chartType": "BAR",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-tIkpYHZqciaEu0ypokSEt",
+ "chartName": "部署时间趋势",
+ "chartType": "LINE",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-PcnRUOqW5RzJHFZ1BxQJe",
+ "chartName": "客户未部署分布",
+ "chartType": "HISTOGRAM",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ },
+ {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "chartId": "widget-8LICblz3EqyoLbkyM22Bw",
+ "chartName": "付费状态漏斗",
+ "chartType": "FUNNEL",
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2"
+ }
+ ],
+ "dashboardId": "KY9tlWg5NEHgfs8WT6IO2",
+ "dashboardName": "仪表盘",
+ "filters": [],
+ "layout": [
+ {
+ "h": 4,
+ "i": "widget-05w7XiwviqQgWrMxmvP20",
+ "w": 12,
+ "x": 0,
+ "y": 0
+ },
+ {
+ "h": 5,
+ "i": "widget-dlxFo0tNSImp4ITpDn5fQ",
+ "w": 6,
+ "x": 0,
+ "y": 4
+ },
+ {
+ "h": 5,
+ "i": "widget-PcnRUOqW5RzJHFZ1BxQJe",
+ "w": 6,
+ "x": 6,
+ "y": 4
+ },
+ {
+ "h": 5,
+ "i": "widget-qqMeLF69BEVnKCglPUPRw",
+ "w": 6,
+ "x": 0,
+ "y": 9
+ },
+ {
+ "h": 5,
+ "i": "widget-tIkpYHZqciaEu0ypokSEt",
+ "w": 6,
+ "x": 6,
+ "y": 9
+ },
+ {
+ "h": 5,
+ "i": "widget-OQW55ZoOPT3abjYxQbdBo",
+ "w": 4,
+ "x": 0,
+ "y": 14
+ },
+ {
+ "h": 5,
+ "i": "widget-dqjTHaYZdhbSTwRk3JEjI",
+ "w": 4,
+ "x": 4,
+ "y": 14
+ },
+ {
+ "h": 5,
+ "i": "widget-8LICblz3EqyoLbkyM22Bw",
+ "w": 4,
+ "x": 8,
+ "y": 14
+ },
+ {
+ "h": 4,
+ "i": "0ed6ae150c7e43508d504b741ca1b19a",
+ "w": 6,
+ "x": 0,
+ "y": 0
+ }
+ ],
+ "meta": {}
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Got dashboard KY9tlWg5NEHgfs8WT6IO2. URL rules: AI 表格仪表盘访问地址: https://docs.dingtalk.com/i/nodes/{baseId}?iframeQuery=applicationId%3D{dashboardId}. User-facing guidance: 面向用户时要以人为本、友好直观,优先展示 **实体名称**、可点击链接和必要上下文,尽量隐藏 `baseId`、`tableId`、`viewId`、`dashboardId`、`documentId` 等技术细节;除非用户明确索要或排障必须,否则不要直接呈现这些 ID。"
+} |
||
dws aitable +dashboard-share-get --base-id <base-id> --dashboard-id <dashboard-id>read查询 dashboard 的分享配置 |
dws mcp aitable get_dashboard_share --json '{"baseId":<..>, "dashboardId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/get_dashboard_share输入 / CLI 输出输入 dws aitable +dashboard-share-get --base-id x --dashboard-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "dashboardId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_dashboard_share"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "dashboardId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_dashboard_share"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1472ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test aitable +dashboard-share-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --dashboard-id KY9tlWg5NEHgfs8WT6IO2 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"404\",\"message\":\"Not Found\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to get dashboard share config for dashboard KY9tlWg5NEHgfs8WT6IO2\",\"trace_id\":\"0bb7c36217840997497315836e07fe\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"404\",\"message\":\"Not Found\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to get dashboard share config for dashboard KY9tlWg5NEHgfs8WT6IO2\",\"trace_id\":\"0bb7c36217840997497315836e07fe\"}"
+ }
+} |
||
dws aitable +dashboard-share-update --base-id <base-id> --dashboard-id <dashboard-id> --enabled <enabled> --share-type <share-type> --allow-back-to-doc <allow-back-to-doc>write开启/关闭 dashboard 分享并可设置分享类型 |
dws mcp aitable update_dashboard_share --json '{"baseId":<..>, "dashboardId":<..>, "enabled":<..>, "shareType":<..>, "allowBackToDoc":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/update_dashboard_share输入 / CLI 输出输入 dws aitable +dashboard-share-update --base-id x --dashboard-id x --enabled --share-type PUBLIC --allow-back-to-doc --yes stdout {
+ "_fake": true,
+ "args": {
+ "allowBackToDoc": true,
+ "baseId": "x",
+ "dashboardId": "x",
+ "enabled": true,
+ "shareType": "PUBLIC"
+ },
+ "product": "aitable",
+ "tool": "update_dashboard_share"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "allowBackToDoc": true,
+ "baseId": "x",
+ "dashboardId": "x",
+ "enabled": true,
+ "shareType": "PUBLIC"
+ },
+ "product": "aitable",
+ "tool": "update_dashboard_share"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1115ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +dashboard-share-update --base-id DWSREALTESTNOSUCHID0000000000000 --dashboard-id DWSREALTESTNOSUCHID0000000000000 --enabled --share-type PUBLIC --allow-back-to-doc --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update dashboard share for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2132f5ca17840998588081246e0853\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update dashboard share for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2132f5ca17840998588081246e0853\"}"
+ }
+} |
||
dws aitable +dashboard-update --base-id <base-id> --dashboard-id <dashboard-id> --config <config> --name <name>write更新指定 dashboard 的配置 |
dws mcp aitable update_dashboard --json '{"baseId":<..>, "dashboardId":<..>, "config":<..>}' |
lark-cli base +dashboard-update |
+实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--config JSON 解析失败: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws aitable +dashboard-update --base-id x --dashboard-id x --config x --name x --yes stdout (空) stderr / error --config JSON 解析失败: invalid character 'x' looking for beginning of value 最终用于判定的返回 --config JSON 解析失败: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1157ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +dashboard-update --base-id DWSREALTESTNOSUCHID0000000000000 --dashboard-id DWSREALTESTNOSUCHID0000000000000 --config '{}' --name 'DWS shortcut 真实测试 20260715-151724' --yes --format json真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update dashboard DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998599403187e08b8\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update dashboard DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998599403187e08b8\"}"
+ }
+} |
||
dws aitable +export-data --base-id <base-id> --task-id <task-id> --scope <scope> --format <format> --table-id <table-id> --view-id <view-id> --timeout-ms <timeout-ms>read导出 AI 表格数据(创建导出任务或按 taskId 续等) |
dws mcp aitable export_data --json '{"baseId":<..>, "taskId":<..>, "scope":<..>, "format":<..>, "tableId":<..>, "viewId":<..>, "timeoutMs":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/export_data输入 / CLI 输出输入 dws aitable +export-data --base-id x --task-id x --scope all --format excel --table-id x --view-id x --timeout-ms 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "taskId": "x",
+ "timeoutMs": 1,
+ "viewId": "x"
+ },
+ "product": "aitable",
+ "tool": "export_data"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "taskId": "x",
+ "timeoutMs": 1,
+ "viewId": "x"
+ },
+ "product": "aitable",
+ "tool": "export_data"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1754ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +export-data --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --task-id DWSREALREADNOSUCHID0000000000000 --scope all --format excel --table-id hERWDMS --view-id qvGDAH2 --timeout-ms 1 --yes 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_PARAMS\",\"message\":\"taskId cannot be combined with scope, format, tableId or viewId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to continue export because taskId mode cannot include create-task params\",\"trace_id\":\"2104a64c17840997514714448e0817\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_PARAMS\",\"message\":\"taskId cannot be combined with scope, format, tableId or viewId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to continue export because taskId mode cannot include create-task params\",\"trace_id\":\"2104a64c17840997514714448e0817\"}"
+ }
+} |
||
dws aitable +field-delete --base-id <base-id> --table-id <table-id> --field-id <field-id>high-risk-write删除指定字段(不可逆) |
dws mcp aitable delete_field --json '{"baseId":<..>, "tableId":<..>, "fieldId":<..>}' |
lark-cli base +field-delete |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/delete_field输入 / CLI 输出输入 dws aitable +field-delete --base-id x --table-id x --field-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "fieldId": "x",
+ "tableId": "x"
+ },
+ "product": "aitable",
+ "tool": "delete_field"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "fieldId": "x",
+ "tableId": "x"
+ },
+ "product": "aitable",
+ "tool": "delete_field"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1157ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +field-delete --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --field-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"404\",\"message\":\"getDentryDTO returns null\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to get current field info before delete\",\"trace_id\":\"0bab027317840998611338768e08c8\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"404\",\"message\":\"getDentryDTO returns null\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to get current field info before delete\",\"trace_id\":\"0bab027317840998611338768e08c8\"}"
+ }
+} |
||
dws aitable +field-get --base-id <base-id> --table-id <table-id> --field-ids <field-ids>read批量获取字段详情(含类型相关完整配置) |
dws mcp aitable get_fields --json '{"baseId":<..>, "tableId":<..>, "fieldIds":<..>}' |
lark-cli base +field-get |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/get_fields输入 / CLI 输出输入 dws aitable +field-get --base-id x --table-id x --field-ids x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "fieldIds": [
+ "x"
+ ],
+ "tableId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_fields"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "fieldIds": [
+ "x"
+ ],
+ "tableId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_fields"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1402ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +field-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --field-ids 01ZM8y7 --yes --format json 真实 stdout {
+ "data": {
+ "fields": [
+ {
+ "aiConfig": {
+ "autoRecompute": false,
+ "computeOnEmptyRef": false,
+ "enableThinking": false,
+ "enableWebSearch": false,
+ "imageConfig": {
+ "aiGeneratedWatermark": true,
+ "count": 1,
+ "resolution": "1024*1024"
+ },
+ "outputType": "text",
+ "prompt": [
+ {
+ "type": "text",
+ "value": "你是一位贴心的文字识别助手,当用户需要识别图片中的文字时(如菜单、传单、说明书),清晰识别出内容。\n\n执行前严格验证输入:\n- 如果未提供图片,立即回复:\"请上传需要识别文字的图片,我帮您快速查看内容!\"\n- 如果图片模糊/黑暗,回复:\"图片不太清楚,建议:1) 重新拍摄 2) 对准文字区域 3) 确保光线充足\"\n当输入有效时,按以下规则生成结果(禁用任何技术格式):\n1. 识别原则(像真人一样读图)\n - 严格按阅读顺序朗读文字,保留原换行与空格\n - 模糊处标注\"(看不清)\",不猜测内容(例:\"价(格)\")\n - 保留所有标点、符号和大小写(如\"¥25\"不改为\"25元\")\n - 表格按\"从左到右、从上到下\"顺序朗读\n2. 输出格式要求(必须遵守)\n - 禁用JSON/XML/代码块,仅用**模拟纸质文档**的直观格式\n - 示例(基于用户输入):\n 欢迎光临\n ABC咖啡店\n 今日特惠:\n 拿铁 ¥25\n 卡布奇诺 ¥28\n 营业时间:8:00-22:00\n3. 关键控制规则\n - 排版还原:用空行分隔段落,保留项目符号(如\"•\")\n - 模糊处理:单个模糊字符→\"(看不清)\",连续模糊→\"(此处有文字但看不清)\"\n - 语言提示:仅列出主要语言(如\"中文为主,含少量英文\")\n - 空结果处理:写\"未检测到清晰文字,请检查图片\"\n - 绝对禁止:不添加任何解释(如\"根据OCR技术...\")\n4. 禁止行为\n × 生成任何JSON/XML代码 \n × 使用术语如\"full_text\"、\"lines\" \n × 修改原始文字内容(如\"¥25\"不改为\"25元\")\n\n下面是你要总结和分析的原始内容"
+ },
+ {
+ "fieldId": "2hfk5Hd",
+ "type": "fieldRef"
+ },
+ {
+ "type": "text",
+ "value": ",只保留识别结果中的“序列号”或者“Serial No\""
+ }
+ ],
+ "type": "ai-agent"
+ },
+ "fieldId": "01ZM8y7",
+ "fieldName": "序列号",
+ "type": "text"
+ }
+ ]
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Got 1 fields from table hERWDMS"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "fields": [
+ {
+ "aiConfig": {
+ "autoRecompute": false,
+ "computeOnEmptyRef": false,
+ "enableThinking": false,
+ "enableWebSearch": false,
+ "imageConfig": {
+ "aiGeneratedWatermark": true,
+ "count": 1,
+ "resolution": "1024*1024"
+ },
+ "outputType": "text",
+ "prompt": [
+ {
+ "type": "text",
+ "value": "你是一位贴心的文字识别助手,当用户需要识别图片中的文字时(如菜单、传单、说明书),清晰识别出内容。\n\n执行前严格验证输入:\n- 如果未提供图片,立即回复:\"请上传需要识别文字的图片,我帮您快速查看内容!\"\n- 如果图片模糊/黑暗,回复:\"图片不太清楚,建议:1) 重新拍摄 2) 对准文字区域 3) 确保光线充足\"\n当输入有效时,按以下规则生成结果(禁用任何技术格式):\n1. 识别原则(像真人一样读图)\n - 严格按阅读顺序朗读文字,保留原换行与空格\n - 模糊处标注\"(看不清)\",不猜测内容(例:\"价(格)\")\n - 保留所有标点、符号和大小写(如\"¥25\"不改为\"25元\")\n - 表格按\"从左到右、从上到下\"顺序朗读\n2. 输出格式要求(必须遵守)\n - 禁用JSON/XML/代码块,仅用**模拟纸质文档**的直观格式\n - 示例(基于用户输入):\n 欢迎光临\n ABC咖啡店\n 今日特惠:\n 拿铁 ¥25\n 卡布奇诺 ¥28\n 营业时间:8:00-22:00\n3. 关键控制规则\n - 排版还原:用空行分隔段落,保留项目符号(如\"•\")\n - 模糊处理:单个模糊字符→\"(看不清)\",连续模糊→\"(此处有文字但看不清)\"\n - 语言提示:仅列出主要语言(如\"中文为主,含少量英文\")\n - 空结果处理:写\"未检测到清晰文字,请检查图片\"\n - 绝对禁止:不添加任何解释(如\"根据OCR技术...\")\n4. 禁止行为\n × 生成任何JSON/XML代码 \n × 使用术语如\"full_text\"、\"lines\" \n × 修改原始文字内容(如\"¥25\"不改为\"25元\")\n\n下面是你要总结和分析的原始内容"
+ },
+ {
+ "fieldId": "2hfk5Hd",
+ "type": "fieldRef"
+ },
+ {
+ "type": "text",
+ "value": ",只保留识别结果中的“序列号”或者“Serial No\""
+ }
+ ],
+ "type": "ai-agent"
+ },
+ "fieldId": "01ZM8y7",
+ "fieldName": "序列号",
+ "type": "text"
+ }
+ ]
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Got 1 fields from table hERWDMS"
+} |
||
dws aitable +field-update --base-id <base-id> --table-id <table-id> --field-id <field-id> --name <name> --config <config> --ai-config <ai-config>write更新字段名称 / 配置 / AI 配置(类型不可改) |
dws mcp aitable update_field --json '{"baseId":<..>, "tableId":<..>, "fieldId":<..>, "newFieldName":<..>, "config":<..>, "aiConfig":<..>}' |
lark-cli base +field-update |
+实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--config JSON 解析失败: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws aitable +field-update --base-id x --table-id x --field-id x --name x --config x --ai-config x --yes stdout (空) stderr / error --config JSON 解析失败: invalid character 'x' looking for beginning of value 最终用于判定的返回 --config JSON 解析失败: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1196ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +field-update --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --field-id DWSREALTESTNOSUCHID0000000000000 --name 'DWS shortcut 真实测试 20260715-151724' --config '{}' --ai-config '{}' --yes --format json真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"404\",\"message\":\"getDentryDTO returns null\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to get current field info for update\",\"trace_id\":\"213ee25c17840998623207342e08e2\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"404\",\"message\":\"getDentryDTO returns null\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to get current field info for update\",\"trace_id\":\"213ee25c17840998623207342e08e2\"}"
+ }
+} |
||
dws aitable +find-record --base <base> --table <table> --query <query>read在指定多维表里按关键词查记录(只读) |
-dws mcp aitable query_records --json '{"baseId":<..>, "tableId":<..>, "keyword":<..>}' |
+dws aitable +find-record --base <base> --table <table> --query <query>read复合/智能型在指定多维表里按关键词查记录(只读) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 query_records |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/query_records输入 / CLI 输出输入 dws aitable +find-record --base x --table x --query x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "keyword": "x",
+ "tableId": "x"
+ },
+ "product": "aitable",
+ "tool": "query_records"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "keyword": "x",
+ "tableId": "x"
+ },
+ "product": "aitable",
+ "tool": "query_records"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2849ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +find-record --base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table hERWDMS --query '测试' --yes --format json 真实 stdout {
+ "data": {
+ "nextCursor": "oXh7WgGooe",
+ "records": [
+ {
+ "cells": {
+ "01ZM8y7": "N0QWY69QN4",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4048.HEIC.JPG",
+ "resourceId": "479e4321-3d6a-42f0-91de-583c6ea41d9f",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d5268e3736ebad509e7fcef9dcd108f495a911ef939606b63dc103944eb9062bae7f23148f19bc87f4",
+ "size": 1753393,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "8LVOssPz6Q"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "CDQD7CN97V",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4054.HEIC.JPG",
+ "resourceId": "7d68adf9-ec88-4192-8728-5de240f17fc8",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d57cd5cd33059ea9b3d2766775dd1ba8096b8c5a9cb3defd6f5321c276624c51f602fba57aca34bc6d",
+ "size": 1801325,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试\nAI营销借用",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "133206"
+ }
+ ]
+ },
+ "recordId": "AjOk0hu1pe"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "RY7LCW719Q",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4213.HEIC.JPG",
+ "resourceId": "0022f2cc-bd93-49f0-8039-04ac2909dd32",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d59a2750fefa807e0cfc41158e98407c864f1745537f406fcb0e02c76b1696b84f8bac5e1298eba711",
+ "size": 1763574,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "DUDacJdQ2X"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "D54X6C7WH6",
+ "2hfk5Hd": [
+ {
+ "filename": "image.png",
+ "resourceId": "e7dea77f-0f65-4266-a3fd-e401b80a9582",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d5d45d39275c65656906af57b60be7002feaf431efea862523554a56545a2e6ac55d17ee7f4c9382c9",
+ "size": 9795238,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ],
+ "ty1M3J4": {
+ "markdown": "已归还\n"
+ }
+ },
+ "recordId": "Dt8KZX7Nt2"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "MN7V04VVD4",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4044.HEIC.JPG",
+ "resourceId": "82903e20-99ca-4497-8596-64b8a9511347",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d5585fe6169387aa3767c7e8d94f1e6b2bdcb910b90a359120b13c8f9d1a59101157155a75536e1183",
+ "size": 1965625,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "FA0TZMthqI"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "CYY9PQRXJ5",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4216.HEIC.JPG",
+ "resourceId": "3dfd0bec-a06a-4580-a9a2-b8ae450df2a4",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d52f04469c6bb09596caffbbac393c775d8db27175749aef18fb6444ef163ea9d17fb0a232eda6495f",
+ "size": 2290335,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "IyGa4g01n1"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "K30F574N0W",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4071.HEIC.JPG",
+ "resourceId": "8f970cbb-9e4d-4abb-bc2e-bae127a6231a",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d5988e57da667e94ed89271196611e117503f232ffda40509efa8b2836f86122df894b0282d28e9bd0",
+ "size": 1883600,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "UJwTYA3uNw"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "Y7CXVJ9XWD",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4072.HEIC.JPG",
+ "resourceId": "68b711bd-e972-445a-be79-bf4954b52000",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d581be5bba89215dfa8bf27c7a750a77959fc36654d351427344ca8cee273282f51f530a2b9381f2f5",
+ "size": 1856927,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "Uygc2paXj3"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "GMQW2JLWVY",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4214.HEIC.JPG",
+ "resourceId": "ca4deb91-17d6-43e7-9812-72101643deb9",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d57860f934d7f4ae4fd1379962b8f251e8357d71880d1389e2b613f13514ac39fcfcb2a6a1fcb68a65",
+ "size": 1640058,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "ewj09NwU1z",
+ "name": "AI招聘"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "429676"
+ }
+ ]
+ },
+ "recordId": "Xjj4e7GgG8"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "Y0V7Y2N2YD",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4074.HEIC.JPG",
+ "resourceId": "5b8d3006-280e-41af-a4b0-3320e6a5d596",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d5f3f03272cd3d6f49910031a2e873f763b035f6f21d03abba7ab038475a5ab532635226d96df6a64e",
+ "size": 1964512,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "Y056lsOG61"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "P24GFQN7YT",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4033.HEIC.JPG",
+ "resourceId": "38656067-b7b7-45fd-8bea-64f4c89dc4f7",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d50c8666278c495a44ef70265cd8adb7f504b841c8f61607d92f11852026cd92eff88db6bf5a5d630c",
+ "size": 2028953,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "YVaPzcuGBa"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "N7Q33L77WR",
+ "2hfk5Hd": [
+ {
+ "filename": "image.png",
+ "resourceId": "4abf67c0-ad03-4a81-a3db-3794d15453e9",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d53aa03710ddc5973e4df2b4d6c72f04177dd7b5a30206f588777548a9d514bbd2a1bdc9489688a5fb",
+ "size": 9870487,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "hXTMF9el7v"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "HFk9Y9TYQD",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4043.HEIC.JPG",
+ "resourceId": "d6786a91-bca7-4c09-8225-9503cb66610f",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d5fe8628219f060fbe50542a5616689036033b038792e8d5a77e12f7fc37630879073a357b1dacf1ae",
+ "size": 2110186,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "kk7eQt1kJB"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "TX6377KGFH",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4064.HEIC.JPG",
+ "resourceId": "850e1a7f-aa0a-4ba8-9b54-5bc9c66a5a63",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d5716c6100d05323cbd2151a4b9cf8174b09cf0ac1af356178c4572bfa55a8c065f499293f0f9b00e2",
+ "size": 1963615,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试--恒飞",
+ "ARoUEWW": {
+ "id": "Zw0fFCNl8e",
+ "name": "付费"
+ },
+ "ZoCsF67": "2026-01-23T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "ewj09NwU1z",
+ "name": "AI招聘"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "103262"
+ }
+ ],
+ "ty1M3J4": {
+ "markdown": "目前看设备离线\n"
+ }
+ },
+ "recordId": "oXh7WgGooe"
+ }
+ ]
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Successfully queried 14 record(s) from table hERWDMS in base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "nextCursor": "oXh7WgGooe",
+ "records": [
+ {
+ "cells": {
+ "01ZM8y7": "N0QWY69QN4",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4048.HEIC.JPG",
+ "resourceId": "479e4321-3d6a-42f0-91de-583c6ea41d9f",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d5268e3736ebad509e7fcef9dcd108f495a911ef939606b63dc103944eb9062bae7f23148f19bc87f4",
+ "size": 1753393,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "8LVOssPz6Q"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "CDQD7CN97V",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4054.HEIC.JPG",
+ "resourceId": "7d68adf9-ec88-4192-8728-5de240f17fc8",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d57cd5cd33059ea9b3d2766775dd1ba8096b8c5a9cb3defd6f5321c276624c51f602fba57aca34bc6d",
+ "size": 1801325,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试\nAI营销借用",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "133206"
+ }
+ ]
+ },
+ "recordId": "AjOk0hu1pe"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "RY7LCW719Q",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4213.HEIC.JPG",
+ "resourceId": "0022f2cc-bd93-49f0-8039-04ac2909dd32",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d59a2750fefa807e0cfc41158e98407c864f1745537f406fcb0e02c76b1696b84f8bac5e1298eba711",
+ "size": 1763574,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "DUDacJdQ2X"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "D54X6C7WH6",
+ "2hfk5Hd": [
+ {
+ "filename": "image.png",
+ "resourceId": "e7dea77f-0f65-4266-a3fd-e401b80a9582",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d5d45d39275c65656906af57b60be7002feaf431efea862523554a56545a2e6ac55d17ee7f4c9382c9",
+ "size": 9795238,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ],
+ "ty1M3J4": {
+ "markdown": "已归还\n"
+ }
+ },
+ "recordId": "Dt8KZX7Nt2"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "MN7V04VVD4",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4044.HEIC.JPG",
+ "resourceId": "82903e20-99ca-4497-8596-64b8a9511347",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d5585fe6169387aa3767c7e8d94f1e6b2bdcb910b90a359120b13c8f9d1a59101157155a75536e1183",
+ "size": 1965625,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "FA0TZMthqI"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "CYY9PQRXJ5",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4216.HEIC.JPG",
+ "resourceId": "3dfd0bec-a06a-4580-a9a2-b8ae450df2a4",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d52f04469c6bb09596caffbbac393c775d8db27175749aef18fb6444ef163ea9d17fb0a232eda6495f",
+ "size": 2290335,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "IyGa4g01n1"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "K30F574N0W",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4071.HEIC.JPG",
+ "resourceId": "8f970cbb-9e4d-4abb-bc2e-bae127a6231a",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d5988e57da667e94ed89271196611e117503f232ffda40509efa8b2836f86122df894b0282d28e9bd0",
+ "size": 1883600,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "UJwTYA3uNw"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "Y7CXVJ9XWD",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4072.HEIC.JPG",
+ "resourceId": "68b711bd-e972-445a-be79-bf4954b52000",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d581be5bba89215dfa8bf27c7a750a77959fc36654d351427344ca8cee273282f51f530a2b9381f2f5",
+ "size": 1856927,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "Uygc2paXj3"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "GMQW2JLWVY",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4214.HEIC.JPG",
+ "resourceId": "ca4deb91-17d6-43e7-9812-72101643deb9",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d57860f934d7f4ae4fd1379962b8f251e8357d71880d1389e2b613f13514ac39fcfcb2a6a1fcb68a65",
+ "size": 1640058,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "ewj09NwU1z",
+ "name": "AI招聘"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "429676"
+ }
+ ]
+ },
+ "recordId": "Xjj4e7GgG8"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "Y0V7Y2N2YD",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4074.HEIC.JPG",
+ "resourceId": "5b8d3006-280e-41af-a4b0-3320e6a5d596",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d5f3f03272cd3d6f49910031a2e873f763b035f6f21d03abba7ab038475a5ab532635226d96df6a64e",
+ "size": 1964512,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "Y056lsOG61"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "P24GFQN7YT",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4033.HEIC.JPG",
+ "resourceId": "38656067-b7b7-45fd-8bea-64f4c89dc4f7",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d50c8666278c495a44ef70265cd8adb7f504b841c8f61607d92f11852026cd92eff88db6bf5a5d630c",
+ "size": 2028953,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "YVaPzcuGBa"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "N7Q33L77WR",
+ "2hfk5Hd": [
+ {
+ "filename": "image.png",
+ "resourceId": "4abf67c0-ad03-4a81-a3db-3794d15453e9",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d53aa03710ddc5973e4df2b4d6c72f04177dd7b5a30206f588777548a9d514bbd2a1bdc9489688a5fb",
+ "size": 9870487,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "hXTMF9el7v"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "HFk9Y9TYQD",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4043.HEIC.JPG",
+ "resourceId": "d6786a91-bca7-4c09-8225-9503cb66610f",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d5fe8628219f060fbe50542a5616689036033b038792e8d5a77e12f7fc37630879073a357b1dacf1ae",
+ "size": 2110186,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试",
+ "6B78kgr": "2",
+ "ARoUEWW": {
+ "id": "P6GYJKc3t0",
+ "name": "未付费"
+ },
+ "Str3hFF": {
+ "id": "m4Y2qZ07Yk",
+ "name": "领取两台"
+ },
+ "ZoCsF67": "2026-02-09T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "lpH5zwRv5D",
+ "name": "AI差旅"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "151705"
+ }
+ ]
+ },
+ "recordId": "kk7eQt1kJB"
+ },
+ {
+ "cells": {
+ "01ZM8y7": "TX6377KGFH",
+ "2hfk5Hd": [
+ {
+ "filename": "IMG_4064.HEIC.JPG",
+ "resourceId": "850e1a7f-aa0a-4ba8-9b54-5bc9c66a5a63",
+ "resourceUrl": "/core/api/resources/img/5eecdaf48460cde5e74cc918372d9be934282a6fcde347f775b8339e1c4c24834322b4c2cdd63b4d6b58639871ed7e1ba156a98577f418d5716c6100d05323cbd2151a4b9cf8174b09cf0ac1af356178c4572bfa55a8c065f499293f0f9b00e2",
+ "size": 1963615,
+ "type": "image",
+ "url": "[REDACTED_OSS_URL]"
+ }
+ ],
+ "47bTcjO": "内部测试--恒飞",
+ "ARoUEWW": {
+ "id": "Zw0fFCNl8e",
+ "name": "付费"
+ },
+ "ZoCsF67": "2026-01-23T00:00:00+08:00",
+ "j1Zwe1c": [
+ {
+ "id": "s9UKjSzdLg",
+ "name": "业务方自主"
+ }
+ ],
+ "kFwb8br": {
+ "id": "1ZiuS5Wlgz",
+ "name": "内部部署"
+ },
+ "rjwzzIu": [
+ {
+ "id": "ewj09NwU1z",
+ "name": "AI招聘"
+ }
+ ],
+ "t9n9SDE": [
+ {
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "userId": "103262"
+ }
+ ],
+ "ty1M3J4": {
+ "markdown": "目前看设备离线\n"
+ }
+ },
+ "recordId": "oXh7WgGooe"
+ }
+ ]
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Successfully queried 14 record(s) from table hERWDMS in base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk"
+} |
dws aitable +form-delete --base-id <base-id> --table-id <table-id> --view-id <view-id>high-risk-write删除指定表单视图(不可逆) |
dws mcp aitable delete_form_view --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>}' |
lark-cli base +form-delete |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/delete_form_view输入 / CLI 输出输入 dws aitable +form-delete --base-id x --table-id x --view-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "delete_form_view"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "delete_form_view"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1290ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +form-delete --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --view-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete form view for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"213ee25c17840998636217552e08e2\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete form view for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"213ee25c17840998636217552e08e2\"}"
+ }
+} |
||
dws aitable +form-field-hide --base-id <base-id> --table-id <table-id> --view-id <view-id> --field-id <field-id> --hidden <hidden>write切换表单字段的隐藏/显示状态 |
dws mcp aitable update_form_field_hidden --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>, "fieldId":<..>, "hidden":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/update_form_field_hidden输入 / CLI 输出输入 dws aitable +form-field-hide --base-id x --table-id x --view-id x --field-id x --hidden --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "fieldId": "x",
+ "hidden": true,
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "update_form_field_hidden"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "fieldId": "x",
+ "hidden": true,
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "update_form_field_hidden"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1312ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +form-field-hide --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --view-id DWSREALTESTNOSUCHID0000000000000 --field-id DWSREALTESTNOSUCHID0000000000000 --hidden --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update form field hidden for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998649456212e08df\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update form field hidden for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998649456212e08df\"}"
+ }
+} |
||
dws aitable +form-field-list --base-id <base-id> --table-id <table-id> --view-id <view-id>read列出表单视图当前可见的字段及其配置 |
dws mcp aitable list_form_fields --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/list_form_fields输入 / CLI 输出输入 dws aitable +form-field-list --base-id x --table-id x --view-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "list_form_fields"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "list_form_fields"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1139ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +form-field-list --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --view-id lmeV1cb --yes --format json 真实 stdout {
+ "data": {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "fields": [
+ {
+ "fieldId": "t9n9SDE",
+ "hidden": false,
+ "name": "领取人",
+ "required": true,
+ "type": "user"
+ },
+ {
+ "fieldId": "j1Zwe1c",
+ "hidden": false,
+ "name": "验证情况",
+ "required": true,
+ "type": "multipleSelect"
+ },
+ {
+ "fieldId": "2hfk5Hd",
+ "hidden": false,
+ "name": "商品图片",
+ "required": false,
+ "type": "file"
+ },
+ {
+ "fieldId": "ZoCsF67",
+ "hidden": false,
+ "name": "领取时间",
+ "required": true,
+ "type": "date"
+ },
+ {
+ "fieldId": "47bTcjO",
+ "hidden": false,
+ "name": "交付客户",
+ "required": true,
+ "type": "text"
+ },
+ {
+ "description": "填写:客户业务介绍,老板是谁,实际使用部门,使用人数,主要解决客户什么问题,客户原声",
+ "fieldId": "3p4hbFh",
+ "hidden": false,
+ "name": "客户背景",
+ "required": true,
+ "type": "richText"
+ }
+ ],
+ "tableId": "hERWDMS",
+ "viewId": "lmeV1cb"
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Found 6 field(s) in form view lmeV1cb"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "fields": [
+ {
+ "fieldId": "t9n9SDE",
+ "hidden": false,
+ "name": "领取人",
+ "required": true,
+ "type": "user"
+ },
+ {
+ "fieldId": "j1Zwe1c",
+ "hidden": false,
+ "name": "验证情况",
+ "required": true,
+ "type": "multipleSelect"
+ },
+ {
+ "fieldId": "2hfk5Hd",
+ "hidden": false,
+ "name": "商品图片",
+ "required": false,
+ "type": "file"
+ },
+ {
+ "fieldId": "ZoCsF67",
+ "hidden": false,
+ "name": "领取时间",
+ "required": true,
+ "type": "date"
+ },
+ {
+ "fieldId": "47bTcjO",
+ "hidden": false,
+ "name": "交付客户",
+ "required": true,
+ "type": "text"
+ },
+ {
+ "description": "填写:客户业务介绍,老板是谁,实际使用部门,使用人数,主要解决客户什么问题,客户原声",
+ "fieldId": "3p4hbFh",
+ "hidden": false,
+ "name": "客户背景",
+ "required": true,
+ "type": "richText"
+ }
+ ],
+ "tableId": "hERWDMS",
+ "viewId": "lmeV1cb"
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Found 6 field(s) in form view lmeV1cb"
+} |
||
dws aitable +form-field-update --base-id <base-id> --table-id <table-id> --view-id <view-id> --field-id <field-id> --required <required> --field-description <field-description>write更新表单字段的必填状态或描述 |
dws mcp aitable update_form_field --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>, "fieldId":<..>, "required":<..>, "fieldDescription":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/update_form_field输入 / CLI 输出输入 dws aitable +form-field-update --base-id x --table-id x --view-id x --field-id x --required --field-description x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "fieldDescription": "x",
+ "fieldId": "x",
+ "required": true,
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "update_form_field"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "fieldDescription": "x",
+ "fieldId": "x",
+ "required": true,
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "update_form_field"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1153ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +form-field-update --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --view-id DWSREALTESTNOSUCHID0000000000000 --field-id DWSREALTESTNOSUCHID0000000000000 --required --field-description 'DWS shortcut 真实测试字段说明' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update form field config for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"213ee25c17840998660847932e08e2\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update form field config for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"213ee25c17840998660847932e08e2\"}"
+ }
+} |
||
dws aitable +form-list --base-id <base-id> --table-id <table-id>read列出指定数据表下的所有表单视图 |
dws mcp aitable <tool> |
lark-cli base +form-list |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/list_form_views输入 / CLI 输出输入 dws aitable +form-list --base-id x --table-id x --yes stdout {
+ "count": 0,
+ "forms": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "forms": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1003ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +form-list --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --yes --format json 真实 stdout {
+ "count": 2,
+ "forms": [
+ {
+ "viewId": "lmeV1cb",
+ "viewName": "设备登记"
+ },
+ {
+ "viewId": "HaFV1LW",
+ "viewName": "客户使用情况"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 2,
+ "forms": [
+ {
+ "viewId": "lmeV1cb",
+ "viewName": "设备登记"
+ },
+ {
+ "viewId": "HaFV1LW",
+ "viewName": "客户使用情况"
+ }
+ ]
+} |
||
dws aitable +form-share-get --base-id <base-id> --table-id <table-id> --view-id <view-id>read读取视图当前的分享表单配置 |
dws mcp aitable get_share_form_config --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/get_share_form_config输入 / CLI 输出输入 dws aitable +form-share-get --base-id x --table-id x --view-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_share_form_config"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_share_form_config"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1067ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +form-share-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --view-id lmeV1cb --yes --format json 真实 stdout {
+ "data": {
+ "anonymousSubmit": false,
+ "authTypeCode": 0,
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "enabled": true,
+ "formName": "Mac Mini领取信息登记",
+ "loadLastSubmit": true,
+ "punished": false,
+ "replyNotice": false,
+ "shareFormUuid": "v01ZWGl05mvrY0PMn34_hERWDMS_lmeV1cb",
+ "status": 1,
+ "submitTimesUserLimit": 0,
+ "tableId": "hERWDMS",
+ "viewId": "lmeV1cb"
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Fetched share form config for view lmeV1cb: enabled=true"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "anonymousSubmit": false,
+ "authTypeCode": 0,
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "enabled": true,
+ "formName": "Mac Mini领取信息登记",
+ "loadLastSubmit": true,
+ "punished": false,
+ "replyNotice": false,
+ "shareFormUuid": "v01ZWGl05mvrY0PMn34_hERWDMS_lmeV1cb",
+ "status": 1,
+ "submitTimesUserLimit": 0,
+ "tableId": "hERWDMS",
+ "viewId": "lmeV1cb"
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Fetched share form config for view lmeV1cb: enabled=true"
+} |
||
dws aitable +form-share-update --base-id <base-id> --table-id <table-id> --view-id <view-id> --enabled <enabled>write开启或关闭指定视图的分享表单 |
dws mcp aitable update_share_form --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>, "enabled":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/update_share_form输入 / CLI 输出输入 dws aitable +form-share-update --base-id x --table-id x --view-id x --enabled true --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "enabled": "true",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "update_share_form"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "enabled": "true",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "update_share_form"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1573ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +form-share-update --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --view-id DWSREALTESTNOSUCHID0000000000000 --enabled true --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update share form for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"213ee25c17840998675755538e087d\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update share form for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"213ee25c17840998675755538e087d\"}"
+ }
+} |
||
dws aitable +form-update --base-id <base-id> --table-id <table-id> --view-id <view-id> --title <title> --description <description>write更新表单标题 / 描述 |
dws mcp aitable update_form_info --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>, "title":<..>, "description":<..>}' |
lark-cli base +form-update |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/update_form_info输入 / CLI 输出输入 dws aitable +form-update --base-id x --table-id x --view-id x --title x --description x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "description": "x",
+ "tableId": "x",
+ "title": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "update_form_info"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "description": "x",
+ "tableId": "x",
+ "title": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "update_form_info"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1141ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +form-update --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --view-id DWSREALTESTNOSUCHID0000000000000 --title 'DWS shortcut 真实测试 20260715-151724' --description 'DWS shortcut 真实测试描述,可删除' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update form info for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2132f5ca17840998688302645e0853\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update form info for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2132f5ca17840998688302645e0853\"}"
+ }
+} |
||
dws aitable +import-data --import-id <import-id> --table-id <table-id> --timeout <timeout> --header-row <header-row> --src-sheet-name <src-sheet-name> --field-mapping <field-mapping>write将已上传文件导入 AI 表格(新建表或追加到已有表) |
dws mcp aitable import_data --json '{"importId":<..>, "tableId":<..>, "timeout":<..>, "headerRow":<..>, "srcSheetName":<..>, "fieldMapping":<..>}' |
lark base 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--field-mapping JSON 解析失败: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws aitable +import-data --import-id x --table-id x --timeout 1 --header-row 1 --src-sheet-name x --field-mapping x --yes stdout (空) stderr / error --field-mapping JSON 解析失败: invalid character 'x' looking for beginning of value 最终用于判定的返回 --field-mapping JSON 解析失败: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1227ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test aitable +import-data --import-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --timeout 1 --header-row 1 --src-sheet-name x --field-mapping '{}' --yes --format json真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_IMPORT_ID\",\"message\":\"importId not found: either invalid or expired\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"importId「DWSREALTESTNOSUCHID0000000000000」无效或已过期(有效期 1 小时)。请勿重试相同 importId。需重新上传:① 调用 prepare_import_upload 获取新的 uploadUrl 和 importId;② 通过 HTTP PUT 将原始文件字节流上传至 uploadUrl;除非 uploadUrl 明确要求,否则不要额外附带 Content-Type 等自定义请求头;③ 调用 import_data 传入新的 importId。\",\"trace_id\":\"213ee25c17840998700326443e0944\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_IMPORT_ID\",\"message\":\"importId not found: either invalid or expired\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"importId「DWSREALTESTNOSUCHID0000000000000」无效或已过期(有效期 1 小时)。请勿重试相同 importId。需重新上传:① 调用 prepare_import_upload 获取新的 uploadUrl 和 importId;② 通过 HTTP PUT 将原始文件字节流上传至 uploadUrl;除非 uploadUrl 明确要求,否则不要额外附带 Content-Type 等自定义请求头;③ 调用 import_data 传入新的 importId。\",\"trace_id\":\"213ee25c17840998700326443e0944\"}"
+ }
+} |
||
dws aitable +import-upload --base-id <base-id> --file-name <file-name> --file-size <file-size>write为导入任务申请 OSS 直传地址(uploadUrl / importId) |
dws mcp aitable prepare_import_upload --json '{"baseId":<..>, "fileName":<..>, "fileSize":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/prepare_import_upload输入 / CLI 输出输入 dws aitable +import-upload --base-id x --file-name x --file-size 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "fileName": "x",
+ "fileSize": 1
+ },
+ "product": "aitable",
+ "tool": "prepare_import_upload"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "fileName": "x",
+ "fileSize": 1
+ },
+ "product": "aitable",
+ "tool": "prepare_import_upload"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1302ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +import-upload --base-id DWSREALTESTNOSUCHID0000000000000 --file-name dws-shortcut-real-20260715-151724.txt --file-size 1 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"无法解析 baseId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"无效的 baseId\",\"trace_id\":\"0bab027317840998713075490e096e\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"无法解析 baseId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"无效的 baseId\",\"trace_id\":\"0bab027317840998713075490e096e\"}"
+ }
+} |
||
dws aitable +list-tables --base <base>read列出某个多维表(base)里的所有数据表(只读,投影 tableId/tableName) |
-dws mcp aitable <tool> |
+dws aitable +list-tables --base <base>read复合/智能型列出某个多维表(base)里的所有数据表(只读,投影 tableId/tableName) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/get_tables输入 / CLI 输出输入 dws aitable +list-tables --base x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_tables"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x"
+ },
+ "product": "aitable",
+ "tool": "get_tables"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1452ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +list-tables --base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --yes --format json 真实 stdout {
+ "tables": [
+ {
+ "tableId": "hERWDMS",
+ "tableName": "Mac Mini"
+ },
+ {
+ "tableId": "k8d898q",
+ "tableName": "手机"
+ },
+ {
+ "tableId": "zyLRwwa",
+ "tableName": "SIM卡"
+ },
+ {
+ "tableId": "L53jNZz",
+ "tableName": "机箱"
+ },
+ {
+ "tableId": "zTiHNDL",
+ "tableName": "磁吸片"
+ },
+ {
+ "tableId": "anMdihs",
+ "tableName": "手机线"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "tables": [
+ {
+ "tableId": "hERWDMS",
+ "tableName": "Mac Mini"
+ },
+ {
+ "tableId": "k8d898q",
+ "tableName": "手机"
+ },
+ {
+ "tableId": "zyLRwwa",
+ "tableName": "SIM卡"
+ },
+ {
+ "tableId": "L53jNZz",
+ "tableName": "机箱"
+ },
+ {
+ "tableId": "zTiHNDL",
+ "tableName": "磁吸片"
+ },
+ {
+ "tableId": "anMdihs",
+ "tableName": "手机线"
+ }
+ ]
+} |
dws aitable +record-delete --base-id <base-id> --table-id <table-id> --record-ids <record-ids>high-risk-write批量删除记录(不可逆),单次最多 100 条 |
dws mcp aitable delete_records --json '{"baseId":<..>, "tableId":<..>, "recordIds":<..>}' |
lark-cli base +record-delete |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/delete_records输入 / CLI 输出输入 dws aitable +record-delete --base-id x --table-id x --record-ids x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "recordIds": [
+ "x"
+ ],
+ "tableId": "x"
+ },
+ "product": "aitable",
+ "tool": "delete_records"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "recordIds": [
+ "x"
+ ],
+ "tableId": "x"
+ },
+ "product": "aitable",
+ "tool": "delete_records"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1159ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +record-delete --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --record-ids DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"404\",\"message\":\"getDentryDTO returns null\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete records\",\"trace_id\":\"2132f5ca17840998724753149e0853\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"404\",\"message\":\"getDentryDTO returns null\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete records\",\"trace_id\":\"2132f5ca17840998724753149e0853\"}"
+ }
+} |
||
dws aitable +record-history-list --base-id <base-id> --table-id <table-id> --record-id <record-id> --offset <offset> --limit <limit>read按 recordId 查询单条记录的变更历史 |
dws mcp aitable query_record_history --json '{"baseId":<..>, "tableId":<..>, "recordId":<..>, "offset":<..>, "limit":<..>}' |
lark-cli base +record-history-list |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/query_record_history输入 / CLI 输出输入 dws aitable +record-history-list --base-id x --table-id x --record-id x --offset 1 --limit 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "limit": 1,
+ "offset": 1,
+ "recordId": "x",
+ "tableId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "query_record_history"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "limit": 1,
+ "offset": 1,
+ "recordId": "x",
+ "tableId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "query_record_history"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1156ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +record-history-list --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --record-id 1015oH3OXy --offset 1 --limit 10 --yes --format json 真实 stdout {
+ "data": {
+ "histories": [
+ {
+ "action": "updateRecords",
+ "newValue": "{\"47bTcjO\":{\"dataType\":\"STRING\",\"value\":\"山东梅格彤\"}}",
+ "oldValue": "{\"47bTcjO\":{\"dataType\":\"STRING\",\"value\":\"内部测试\"}}",
+ "operateTime": 1772700326253,
+ "type": "row",
+ "version": 2455
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{\"ARoUEWW\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"Zw0fFCNl8e\",\"sequence\":\"Zw0fFCNl8e\",\"data\":\"Zw0fFCNl8e\",\"filterFactor\":\"Zw0fFCNl8e\"}}}",
+ "oldValue": "{\"ARoUEWW\":{\"dataType\":\"OBJECT\",\"value\":{\"sequence\":\"P6GYJKc3t0\",\"identifier\":\"P6GYJKc3t0\",\"data\":\"P6GYJKc3t0\",\"filterFactor\":\"P6GYJKc3t0\"}}}",
+ "operateTime": 1772700311648,
+ "type": "row",
+ "version": 2454
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{\"kFwb8br\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"uvZmbeb5RH\",\"sequence\":\"uvZmbeb5RH\",\"data\":\"uvZmbeb5RH\",\"filterFactor\":\"uvZmbeb5RH\"}}}",
+ "oldValue": "{}",
+ "operateTime": 1772700308342,
+ "type": "row",
+ "version": 2453
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{}",
+ "oldValue": "{\"kFwb8br\":{\"dataType\":\"OBJECT\",\"value\":{\"sequence\":\"1ZiuS5Wlgz\",\"identifier\":\"1ZiuS5Wlgz\",\"data\":\"1ZiuS5Wlgz\",\"filterFactor\":\"1ZiuS5Wlgz\"}}}",
+ "operateTime": 1772700305961,
+ "type": "row",
+ "version": 2452
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{}",
+ "oldValue": "{\"ty1M3J4\":{\"dataType\":\"OBJECT\",\"value\":{\"sequence\":\"给不挠了\",\"identifier\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"给不挠了\\\"]]]]\",\"data\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"给不挠了\\\"]]]]\",\"filterFactor\":[\"给不挠了\"]}}}",
+ "operateTime": 1772700303480,
+ "type": "row",
+ "version": 2451
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{\"ty1M3J4\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"给不挠了\\\"]]]]\",\"sequence\":\"给不挠了\",\"data\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"给不挠了\\\"]]]]\",\"filterFactor\":[\"给不挠了\"]}}}",
+ "oldValue": "{\"ty1M3J4\":{\"dataType\":\"OBJECT\",\"value\":{\"sequence\":\"闲置\",\"identifier\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"闲置\\\"]]]]\",\"data\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"闲置\\\"]]]]\",\"filterFactor\":[\"闲置\"]}}}",
+ "operateTime": 1772003207333,
+ "type": "row",
+ "version": 2377
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{\"ty1M3J4\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"闲置\\\"]]]]\",\"sequence\":\"闲置\",\"data\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"闲置\\\"]]]]\",\"filterFactor\":[\"闲置\"]}}}",
+ "oldValue": "{\"ty1M3J4\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"目前查是离线\\\"]]]]\",\"sequence\":\"目前查是离线\",\"data\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"目前查是离线\\\"]]]]\",\"filterFactor\":[\"目前查是离线\"]}}}",
+ "operateTime": 1770990377587,
+ "type": "row",
+ "version": 2241
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{\"kFwb8br\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"1ZiuS5Wlgz\",\"sequence\":\"1ZiuS5Wlgz\",\"data\":\"1ZiuS5Wlgz\",\"filterFactor\":\"1ZiuS5Wlgz\"}}}",
+ "oldValue": "{}",
+ "operateTime": 1770875502420,
+ "type": "row",
+ "version": 2162
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{}",
+ "oldValue": "{\"kFwb8br\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"8G9fnUmdKY\",\"sequence\":\"8G9fnUmdKY\",\"data\":\"8G9fnUmdKY\",\"filterFactor\":\"8G9fnUmdKY\"}}}",
+ "operateTime": 1770875501255,
+ "type": "row",
+ "version": 2161
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{\"ty1M3J4\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"目前查是离线\\\"]]]]\",\"sequence\":\"目前查是离线\",\"data\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"目前查是离线\\\"]]]]\",\"filterFactor\":[\"目前查是离线\"]}}}",
+ "oldValue": "{\"ty1M3J4\":{\"dataType\":\"OBJECT\",\"value\":{\"sequence\":\"\",\"identifier\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"\\\"]]]]\",\"data\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"\\\"]]]]\",\"filterFactor\":[\"\"]}}}",
+ "operateTime": 1770868083188,
+ "type": "row",
+ "version": 2139
+ }
+ ]
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Got 10 history record(s) for record 1015oH3OXy"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "histories": [
+ {
+ "action": "updateRecords",
+ "newValue": "{\"47bTcjO\":{\"dataType\":\"STRING\",\"value\":\"山东梅格彤\"}}",
+ "oldValue": "{\"47bTcjO\":{\"dataType\":\"STRING\",\"value\":\"内部测试\"}}",
+ "operateTime": 1772700326253,
+ "type": "row",
+ "version": 2455
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{\"ARoUEWW\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"Zw0fFCNl8e\",\"sequence\":\"Zw0fFCNl8e\",\"data\":\"Zw0fFCNl8e\",\"filterFactor\":\"Zw0fFCNl8e\"}}}",
+ "oldValue": "{\"ARoUEWW\":{\"dataType\":\"OBJECT\",\"value\":{\"sequence\":\"P6GYJKc3t0\",\"identifier\":\"P6GYJKc3t0\",\"data\":\"P6GYJKc3t0\",\"filterFactor\":\"P6GYJKc3t0\"}}}",
+ "operateTime": 1772700311648,
+ "type": "row",
+ "version": 2454
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{\"kFwb8br\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"uvZmbeb5RH\",\"sequence\":\"uvZmbeb5RH\",\"data\":\"uvZmbeb5RH\",\"filterFactor\":\"uvZmbeb5RH\"}}}",
+ "oldValue": "{}",
+ "operateTime": 1772700308342,
+ "type": "row",
+ "version": 2453
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{}",
+ "oldValue": "{\"kFwb8br\":{\"dataType\":\"OBJECT\",\"value\":{\"sequence\":\"1ZiuS5Wlgz\",\"identifier\":\"1ZiuS5Wlgz\",\"data\":\"1ZiuS5Wlgz\",\"filterFactor\":\"1ZiuS5Wlgz\"}}}",
+ "operateTime": 1772700305961,
+ "type": "row",
+ "version": 2452
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{}",
+ "oldValue": "{\"ty1M3J4\":{\"dataType\":\"OBJECT\",\"value\":{\"sequence\":\"给不挠了\",\"identifier\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"给不挠了\\\"]]]]\",\"data\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"给不挠了\\\"]]]]\",\"filterFactor\":[\"给不挠了\"]}}}",
+ "operateTime": 1772700303480,
+ "type": "row",
+ "version": 2451
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{\"ty1M3J4\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"给不挠了\\\"]]]]\",\"sequence\":\"给不挠了\",\"data\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"给不挠了\\\"]]]]\",\"filterFactor\":[\"给不挠了\"]}}}",
+ "oldValue": "{\"ty1M3J4\":{\"dataType\":\"OBJECT\",\"value\":{\"sequence\":\"闲置\",\"identifier\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"闲置\\\"]]]]\",\"data\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"闲置\\\"]]]]\",\"filterFactor\":[\"闲置\"]}}}",
+ "operateTime": 1772003207333,
+ "type": "row",
+ "version": 2377
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{\"ty1M3J4\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"闲置\\\"]]]]\",\"sequence\":\"闲置\",\"data\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"闲置\\\"]]]]\",\"filterFactor\":[\"闲置\"]}}}",
+ "oldValue": "{\"ty1M3J4\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"目前查是离线\\\"]]]]\",\"sequence\":\"目前查是离线\",\"data\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"目前查是离线\\\"]]]]\",\"filterFactor\":[\"目前查是离线\"]}}}",
+ "operateTime": 1770990377587,
+ "type": "row",
+ "version": 2241
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{\"kFwb8br\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"1ZiuS5Wlgz\",\"sequence\":\"1ZiuS5Wlgz\",\"data\":\"1ZiuS5Wlgz\",\"filterFactor\":\"1ZiuS5Wlgz\"}}}",
+ "oldValue": "{}",
+ "operateTime": 1770875502420,
+ "type": "row",
+ "version": 2162
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{}",
+ "oldValue": "{\"kFwb8br\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"8G9fnUmdKY\",\"sequence\":\"8G9fnUmdKY\",\"data\":\"8G9fnUmdKY\",\"filterFactor\":\"8G9fnUmdKY\"}}}",
+ "operateTime": 1770875501255,
+ "type": "row",
+ "version": 2161
+ },
+ {
+ "action": "updateRecords",
+ "newValue": "{\"ty1M3J4\":{\"dataType\":\"OBJECT\",\"value\":{\"identifier\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"目前查是离线\\\"]]]]\",\"sequence\":\"目前查是离线\",\"data\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"目前查是离线\\\"]]]]\",\"filterFactor\":[\"目前查是离线\"]}}}",
+ "oldValue": "{\"ty1M3J4\":{\"dataType\":\"OBJECT\",\"value\":{\"sequence\":\"\",\"identifier\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"\\\"]]]]\",\"data\":\"[\\\"root\\\",{},[\\\"p\\\",{},[\\\"span\\\",{\\\"data-type\\\":\\\"text\\\"},[\\\"span\\\",{\\\"data-type\\\":\\\"leaf\\\"},\\\"\\\"]]]]\",\"filterFactor\":[\"\"]}}}",
+ "operateTime": 1770868083188,
+ "type": "row",
+ "version": 2139
+ }
+ ]
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Got 10 history record(s) for record 1015oH3OXy"
+} |
||
dws aitable +record-primary-doc-create --base-id <base-id> --table-id <table-id> --field-id <field-id> --record-id <record-id>write为记录创建主键文档(幂等),fieldId 须为 primaryDoc 类型 |
dws mcp aitable create_primary_doc --json '{"baseId":<..>, "tableId":<..>, "fieldId":<..>, "recordId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/create_primary_doc输入 / CLI 输出输入 dws aitable +record-primary-doc-create --base-id x --table-id x --field-id x --record-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "fieldId": "x",
+ "recordId": "x",
+ "tableId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "create_primary_doc"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "fieldId": "x",
+ "recordId": "x",
+ "tableId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "create_primary_doc"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1150ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +record-primary-doc-create --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --field-id DWSREALTESTNOSUCHID0000000000000 --record-id 999999999999 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"RESOLVE_DOC_ID_ERROR\",\"message\":\"Failed to resolve docId from baseId\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to create cell doc because baseId cannot be resolved to docId\",\"trace_id\":\"213ee25c17840998736256985e0944\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"RESOLVE_DOC_ID_ERROR\",\"message\":\"Failed to resolve docId from baseId\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to create cell doc because baseId cannot be resolved to docId\",\"trace_id\":\"213ee25c17840998736256985e0944\"}"
+ }
+} |
||
dws aitable +record-primary-doc-get --base-id <base-id> --table-id <table-id> --record-id <record-id>read查询记录关联的主键文档 nodeId |
dws mcp aitable get_primary_doc --json '{"baseId":<..>, "tableId":<..>, "recordId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/get_primary_doc输入 / CLI 输出输入 dws aitable +record-primary-doc-get --base-id x --table-id x --record-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "recordId": "x",
+ "tableId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_primary_doc"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "recordId": "x",
+ "tableId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_primary_doc"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1344ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +record-primary-doc-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --record-id 1015oH3OXy --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"-1\",\"message\":\"no record\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to query cell doc for record 1015oH3OXy in table hERWDMS\",\"trace_id\":\"2127d89817840997528393730e079c\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"-1\",\"message\":\"no record\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to query cell doc for record 1015oH3OXy in table hERWDMS\",\"trace_id\":\"2127d89817840997528393730e079c\"}"
+ }
+} |
||
dws aitable +record-query --base-id <base-id> --table-id <table-id> --record-ids <record-ids> --field-ids <field-ids> --filters <filters> --sort <sort> --query <query> --limit <limit> --cursor <cursor>read查询表格记录(按 ID 取 / 条件筛选 / 关键词 / 分页) |
dws mcp aitable query_records --json '{"baseId":<..>, "tableId":<..>, "recordIds":<..>, "fieldIds":<..>, "filters":<..>, "sort":<..>, "keyword":<..>, "limit":<..>, "cursor":<..>}' |
lark base 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--filters JSON 解析失败: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws aitable +record-query --base-id x --table-id x --record-ids x --field-ids x --filters x --sort x --query x --limit 1 --cursor x --yes stdout (空) stderr / error --filters JSON 解析失败: invalid character 'x' looking for beginning of value 最终用于判定的返回 --filters JSON 解析失败: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端成功exit=0;duration=1241ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +record-query --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --record-ids 1015oH3OXy --field-ids 01ZM8y7 --filters '{}' --sort '[]' --query '测试' --limit 10 --cursor 0 --yes --format json真实 stdout {
+ "data": {},
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Successfully queried 0 record(s) from table hERWDMS in base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk"
+}真实 stderr / error (空) 真实返回 {
+ "data": {},
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Successfully queried 0 record(s) from table hERWDMS in base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk"
+} |
||
dws aitable +record-query-empty --base-id <base-id> --table-id <table-id> --limit <limit> --cursor <cursor>read扫描并过滤出完全没填用户字段的空行 |
dws mcp aitable query_empty_records --json '{"baseId":<..>, "tableId":<..>, "limit":<..>, "cursor":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/query_empty_records输入 / CLI 输出输入 dws aitable +record-query-empty --base-id x --table-id x --limit 1 --cursor x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "cursor": "x",
+ "limit": 1,
+ "tableId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "query_empty_records"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "cursor": "x",
+ "limit": 1,
+ "tableId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "query_empty_records"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2057ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +record-query-empty --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --limit 10 --cursor 0 --yes --format json 真实 stdout {
+ "data": {
+ "nextCursor": "4lLnbs69uY",
+ "records": []
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Scanned 10 record(s) from table hERWDMS in base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk, 0 of them are empty."
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "nextCursor": "4lLnbs69uY",
+ "records": []
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Scanned 10 record(s) from table hERWDMS in base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk, 0 of them are empty."
+} |
||
dws aitable +record-share-links --base <base> --table <table> --record-ids <record-ids> --view-id <view-id>read批量(可 >20 条)获取多维表记录分享链接:去重+分片+合并 |
-dws mcp aitable <tool> |
+dws aitable +record-share-links --base <base> --table <table> --record-ids <record-ids> --view-id <view-id>read复合/智能型批量(可 >20 条)获取多维表记录分享链接:去重+分片+合并 |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/get_record_share_url输入 / CLI 输出输入 dws aitable +record-share-links --base x --table x --record-ids x --view-id x --yes stdout {
+ "base": "x",
+ "batches": 1,
+ "items": [],
+ "table": "x",
+ "total": 1
+}stderr / error (空) 最终用于判定的返回 {
+ "base": "x",
+ "batches": 1,
+ "items": [],
+ "table": "x",
+ "total": 1
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1249ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +record-share-links --base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table hERWDMS --record-ids 1015oH3OXy --view-id qvGDAH2 --yes --format json 真实 stdout {
+ "base": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "batches": 1,
+ "items": [
+ {
+ "recordId": "1015oH3OXy",
+ "shareUrl": "https://alidocs.dingtalk.com/notable/record?dentryUuid=gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk&sheetId=hERWDMS&rowId=1015oH3OXy&viewId=qvGDAH2"
+ }
+ ],
+ "table": "hERWDMS",
+ "total": 1
+}真实 stderr / error (空) 真实返回 {
+ "base": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "batches": 1,
+ "items": [
+ {
+ "recordId": "1015oH3OXy",
+ "shareUrl": "https://alidocs.dingtalk.com/notable/record?dentryUuid=gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk&sheetId=hERWDMS&rowId=1015oH3OXy&viewId=qvGDAH2"
+ }
+ ],
+ "table": "hERWDMS",
+ "total": 1
+} |
dws aitable +record-share-url --base-id <base-id> --table-id <table-id> --record-ids <record-ids> --view-id <view-id>read按 recordId 批量获取记录分享链接,单次最多 20 条 |
dws mcp aitable get_record_share_url --json '{"baseId":<..>, "tableId":<..>, "recordIds":<..>, "viewId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/get_record_share_url输入 / CLI 输出输入 dws aitable +record-share-url --base-id x --table-id x --record-ids x --view-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "recordIds": [
+ "x"
+ ],
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_record_share_url"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "recordIds": [
+ "x"
+ ],
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_record_share_url"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1130ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +record-share-url --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --record-ids 1015oH3OXy --view-id qvGDAH2 --yes --format json 真实 stdout {
+ "data": {
+ "items": [
+ {
+ "recordId": "1015oH3OXy",
+ "shareUrl": "https://alidocs.dingtalk.com/notable/record?dentryUuid=gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk\u0026sheetId=hERWDMS\u0026rowId=1015oH3OXy\u0026viewId=qvGDAH2"
+ }
+ ]
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Got share urls for 1 record(s)"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "items": [
+ {
+ "recordId": "1015oH3OXy",
+ "shareUrl": "https://alidocs.dingtalk.com/notable/record?dentryUuid=gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk\u0026sheetId=hERWDMS\u0026rowId=1015oH3OXy\u0026viewId=qvGDAH2"
+ }
+ ]
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Got share urls for 1 record(s)"
+} |
||
dws aitable +record-update --base-id <base-id> --table-id <table-id> --records <records>write批量更新记录(每条含 recordId 与 cells),单次最多 100 条 |
dws mcp aitable update_records --json '{"baseId":<..>, "tableId":<..>, "records":<..>}' |
lark base 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--records JSON 解析失败: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws aitable +record-update --base-id x --table-id x --records x --yes stdout (空) stderr / error --records JSON 解析失败: invalid character 'x' looking for beginning of value 最终用于判定的返回 --records JSON 解析失败: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1144ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +record-update --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --records '[{"recordId":"recDWSREALTEST","cells":{}}]' --yes --format json真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_RECORDS\",\"message\":\"records must contain at least one writable record\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update records because no valid writable records remain for table DWSREALTESTNOSUCHID0000000000000. Skipped records with empty cells (1): recDWSREALTEST\",\"trace_id\":\"0bab027317840998747383236e090b\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_RECORDS\",\"message\":\"records must contain at least one writable record\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update records because no valid writable records remain for table DWSREALTESTNOSUCHID0000000000000. Skipped records with empty cells (1): recDWSREALTEST\",\"trace_id\":\"0bab027317840998747383236e090b\"}"
+ }
+} |
||
dws aitable +record-upsert --base-id <base-id> --table-id <table-id> --records <records>write按 records 是否带 recordId 自动拆分 create / update |
dws mcp aitable record_upsert --json '{"baseId":<..>, "tableId":<..>, "records":<..>}' |
lark-cli base +record-upsert |
+实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--records JSON 解析失败: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws aitable +record-upsert --base-id x --table-id x --records x --yes stdout (空) stderr / error --records JSON 解析失败: invalid character 'x' looking for beginning of value 最终用于判定的返回 --records JSON 解析失败: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1173ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +record-upsert --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --records '[]' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_PARAMETER\",\"message\":\"records is required and must not be empty\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"records is required and must not be empty\",\"trace_id\":\"2106d98117840998759832182e087b\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_PARAMETER\",\"message\":\"records is required and must not be empty\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"records is required and must not be empty\",\"trace_id\":\"2106d98117840998759832182e087b\"}"
+ }
+} |
||
dws aitable +resolve-base --name <name>read按名称搜索多维表 Base 并解析出唯一 baseId(只读) |
-dws mcp aitable <tool> |
+dws aitable +resolve-base --name <name>read复合/智能型按名称搜索多维表 Base 并解析出唯一 baseId(只读) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/search_bases;没有找到名称包含 x 的 Base输入 / CLI 输出输入 dws aitable +resolve-base --name x --yes stdout (空) stderr / error 没有找到名称包含 x 的 Base 最终用于判定的返回 没有找到名称包含 x 的 Base 真实后端测试输入 / 输出真实后端成功exit=0;duration=1228ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +resolve-base --name 'Real共创版设备去向登记' --yes --format json 真实 stdout {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "name": "Real共创版设备去向登记",
+ "resolved": true
+}真实 stderr / error (空) 真实返回 {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "name": "Real共创版设备去向登记",
+ "resolved": true
+} |
dws aitable +resolve-table --base <base> --name <name>read在某个多维表 Base 内按名称解析出唯一的数据表 tableId(只读) |
-dws mcp aitable <tool> |
+dws aitable +resolve-table --base <base> --name <name>read复合/智能型在某个多维表 Base 内按名称解析出唯一的数据表 tableId(只读) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/get_tables;Base 内没有名称包含 x 的数据表输入 / CLI 输出输入 dws aitable +resolve-table --base x --name x --yes stdout (空) stderr / error Base 内没有名称包含 x 的数据表 最终用于判定的返回 Base 内没有名称包含 x 的数据表 真实后端测试输入 / 输出真实后端成功exit=0;duration=1425ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +resolve-table --base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --name 'Mac Mini' --yes --format json 真实 stdout {
+ "base": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "name": "Mac Mini",
+ "resolved": true,
+ "tableId": "hERWDMS"
+}真实 stderr / error (空) 真实返回 {
+ "base": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "name": "Mac Mini",
+ "resolved": true,
+ "tableId": "hERWDMS"
+} |
dws aitable +role-create --base-id <base-id> --name <name> --role-type <role-type> --flow-type <flow-type> --sub-roles <sub-roles>write在指定 Base 下创建自定义角色 |
dws mcp aitable create_role --json '{"baseId":<..>, "name":<..>, "roleType":<..>, "flowType":<..>, "subRoles":<..>}' |
lark-cli base +role-create |
+实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--sub-roles JSON 解析失败: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws aitable +role-create --base-id x --name x --role-type x --flow-type x --sub-roles x --yes stdout (空) stderr / error --sub-roles JSON 解析失败: invalid character 'x' looking for beginning of value 最终用于判定的返回 --sub-roles JSON 解析失败: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1130ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +role-create --base-id DWSREALTESTNOSUCHID0000000000000 --name 'DWS shortcut 真实测试 20260715-151724' --role-type x --flow-type x --sub-roles '[]' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to create role for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"0bab027317840998770933580e090b\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to create role for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"0bab027317840998770933580e090b\"}"
+ }
+} |
||
dws aitable +role-delete --base-id <base-id> --role-id <role-id>high-risk-write删除 Base 下指定的自定义角色(不可逆) |
dws mcp aitable delete_role --json '{"baseId":<..>, "roleId":<..>}' |
lark-cli base +role-delete |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/delete_role输入 / CLI 输出输入 dws aitable +role-delete --base-id x --role-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "roleId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "delete_role"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "roleId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "delete_role"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1150ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +role-delete --base-id DWSREALTESTNOSUCHID0000000000000 --role-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_PARAMS\",\"message\":\"roleId is required\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete role because roleId is missing\",\"trace_id\":\"2106d98117840998782482701e089c\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_PARAMS\",\"message\":\"roleId is required\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete role because roleId is missing\",\"trace_id\":\"2106d98117840998782482701e089c\"}"
+ }
+} |
||
dws aitable +role-get --base-id <base-id> --role-id <role-id>read获取单个角色的完整配置 |
dws mcp aitable get_role --json '{"baseId":<..>, "roleId":<..>}' |
lark-cli base +role-get |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/get_role输入 / CLI 输出输入 dws aitable +role-get --base-id x --role-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "roleId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_role"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "roleId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_role"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1450ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +role-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --role-id x --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_PARAMS\",\"message\":\"roleId is required\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to get role because roleId is missing\",\"trace_id\":\"2104a64c17840997542904838e0817\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_PARAMS\",\"message\":\"roleId is required\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to get role because roleId is missing\",\"trace_id\":\"2104a64c17840997542904838e0817\"}"
+ }
+} |
||
dws aitable +role-list --base-id <base-id>read列出指定 Base 下的全部角色 |
dws mcp aitable list_roles --json '{"baseId":<..>}' |
lark-cli base +role-list |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/list_roles输入 / CLI 输出输入 dws aitable +role-list --base-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "list_roles"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "list_roles"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1483ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +role-list --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --yes --format json 真实 stdout {
+ "data": {
+ "defaultRole": {
+ "mode": 2
+ },
+ "enabled": true,
+ "roles": [
+ {
+ "name": "所有者",
+ "roleId": "owner",
+ "roleType": "5000",
+ "subRoles": [],
+ "system": true
+ },
+ {
+ "name": "管理员",
+ "roleId": "manager",
+ "roleType": "4000",
+ "subRoles": [],
+ "system": true
+ },
+ {
+ "name": "可查看角色",
+ "roleId": "10181777133",
+ "roleType": "custom",
+ "subRoles": [
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 255
+ },
+ "display": {
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,该目标可见但不可编辑,无细粒度 actions/rows/cells 配置",
+ "targetTypeLabel": "仪表盘"
+ },
+ "targetId": "KY9tlWg5NEHgfs8WT6IO2",
+ "targetType": "dashboard"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "hERWDMS",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "k8d898q",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "zyLRwwa",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "L53jNZz",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "zTiHNDL",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "anMdihs",
+ "targetType": "sheet"
+ }
+ ],
+ "system": false
+ },
+ {
+ "name": "notable_biz_advanced_permission_role_editor",
+ "roleId": "10181777134",
+ "roleType": "system_editor",
+ "subRoles": [
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 255
+ },
+ "display": {
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,该目标可见但不可编辑,无细粒度 actions/rows/cells 配置",
+ "targetTypeLabel": "仪表盘"
+ },
+ "targetId": "KY9tlWg5NEHgfs8WT6IO2",
+ "targetType": "dashboard"
+ },
+ {
+ "authLevel": "manage",
+ "display": {
+ "authLevelLabel": "可管理",
+ "permissionScopeNote": "可管理级别下,数据表拥有全部操作权限,actions/rows/cells 仅作为配置回显,不参与权限判断",
+ "targetTypeLabel": "数据表"
+ },
+ "targetId": "hERWDMS",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "manage",
+ "display": {
+ "authLevelLabel": "可管理",
+ "permissionScopeNote": "可管理级别下,数据表拥有全部操作权限,actions/rows/cells 仅作为配置回显,不参与权限判断",
+ "targetTypeLabel": "数据表"
+ },
+ "targetId": "k8d898q",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "manage",
+ "display": {
+ "authLevelLabel": "可管理",
+ "permissionScopeNote": "可管理级别下,数据表拥有全部操作权限,actions/rows/cells 仅作为配置回显,不参与权限判断",
+ "targetTypeLabel": "数据表"
+ },
+ "targetId": "zyLRwwa",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "manage",
+ "display": {
+ "authLevelLabel": "可管理",
+ "permissionScopeNote": "可管理级别下,数据表拥有全部操作权限,actions/rows/cells 仅作为配置回显,不参与权限判断",
+ "targetTypeLabel": "数据表"
+ },
+ "targetId": "L53jNZz",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "manage",
+ "display": {
+ "authLevelLabel": "可管理",
+ "permissionScopeNote": "可管理级别下,数据表拥有全部操作权限,actions/rows/cells 仅作为配置回显,不参与权限判断",
+ "targetTypeLabel": "数据表"
+ },
+ "targetId": "zTiHNDL",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "manage",
+ "display": {
+ "authLevelLabel": "可管理",
+ "permissionScopeNote": "可管理级别下,数据表拥有全部操作权限,actions/rows/cells 仅作为配置回显,不参与权限判断",
+ "targetTypeLabel": "数据表"
+ },
+ "targetId": "anMdihs",
+ "targetType": "sheet"
+ }
+ ],
+ "system": true
+ },
+ {
+ "name": "notable_biz_advanced_permission_role_reader",
+ "roleId": "10181777135",
+ "roleType": "system_reader",
+ "subRoles": [
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 255
+ },
+ "display": {
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,该目标可见但不可编辑,无细粒度 actions/rows/cells 配置",
+ "targetTypeLabel": "仪表盘"
+ },
+ "targetId": "KY9tlWg5NEHgfs8WT6IO2",
+ "targetType": "dashboard"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "hERWDMS",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "k8d898q",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "zyLRwwa",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "L53jNZz",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "zTiHNDL",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "anMdihs",
+ "targetType": "sheet"
+ }
+ ],
+ "system": true
+ }
+ ]
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Listed 5 roles for base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "defaultRole": {
+ "mode": 2
+ },
+ "enabled": true,
+ "roles": [
+ {
+ "name": "所有者",
+ "roleId": "owner",
+ "roleType": "5000",
+ "subRoles": [],
+ "system": true
+ },
+ {
+ "name": "管理员",
+ "roleId": "manager",
+ "roleType": "4000",
+ "subRoles": [],
+ "system": true
+ },
+ {
+ "name": "可查看角色",
+ "roleId": "10181777133",
+ "roleType": "custom",
+ "subRoles": [
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 255
+ },
+ "display": {
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,该目标可见但不可编辑,无细粒度 actions/rows/cells 配置",
+ "targetTypeLabel": "仪表盘"
+ },
+ "targetId": "KY9tlWg5NEHgfs8WT6IO2",
+ "targetType": "dashboard"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "hERWDMS",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "k8d898q",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "zyLRwwa",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "L53jNZz",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "zTiHNDL",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "anMdihs",
+ "targetType": "sheet"
+ }
+ ],
+ "system": false
+ },
+ {
+ "name": "notable_biz_advanced_permission_role_editor",
+ "roleId": "10181777134",
+ "roleType": "system_editor",
+ "subRoles": [
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 255
+ },
+ "display": {
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,该目标可见但不可编辑,无细粒度 actions/rows/cells 配置",
+ "targetTypeLabel": "仪表盘"
+ },
+ "targetId": "KY9tlWg5NEHgfs8WT6IO2",
+ "targetType": "dashboard"
+ },
+ {
+ "authLevel": "manage",
+ "display": {
+ "authLevelLabel": "可管理",
+ "permissionScopeNote": "可管理级别下,数据表拥有全部操作权限,actions/rows/cells 仅作为配置回显,不参与权限判断",
+ "targetTypeLabel": "数据表"
+ },
+ "targetId": "hERWDMS",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "manage",
+ "display": {
+ "authLevelLabel": "可管理",
+ "permissionScopeNote": "可管理级别下,数据表拥有全部操作权限,actions/rows/cells 仅作为配置回显,不参与权限判断",
+ "targetTypeLabel": "数据表"
+ },
+ "targetId": "k8d898q",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "manage",
+ "display": {
+ "authLevelLabel": "可管理",
+ "permissionScopeNote": "可管理级别下,数据表拥有全部操作权限,actions/rows/cells 仅作为配置回显,不参与权限判断",
+ "targetTypeLabel": "数据表"
+ },
+ "targetId": "zyLRwwa",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "manage",
+ "display": {
+ "authLevelLabel": "可管理",
+ "permissionScopeNote": "可管理级别下,数据表拥有全部操作权限,actions/rows/cells 仅作为配置回显,不参与权限判断",
+ "targetTypeLabel": "数据表"
+ },
+ "targetId": "L53jNZz",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "manage",
+ "display": {
+ "authLevelLabel": "可管理",
+ "permissionScopeNote": "可管理级别下,数据表拥有全部操作权限,actions/rows/cells 仅作为配置回显,不参与权限判断",
+ "targetTypeLabel": "数据表"
+ },
+ "targetId": "zTiHNDL",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "manage",
+ "display": {
+ "authLevelLabel": "可管理",
+ "permissionScopeNote": "可管理级别下,数据表拥有全部操作权限,actions/rows/cells 仅作为配置回显,不参与权限判断",
+ "targetTypeLabel": "数据表"
+ },
+ "targetId": "anMdihs",
+ "targetType": "sheet"
+ }
+ ],
+ "system": true
+ },
+ {
+ "name": "notable_biz_advanced_permission_role_reader",
+ "roleId": "10181777135",
+ "roleType": "system_reader",
+ "subRoles": [
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 255
+ },
+ "display": {
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,该目标可见但不可编辑,无细粒度 actions/rows/cells 配置",
+ "targetTypeLabel": "仪表盘"
+ },
+ "targetId": "KY9tlWg5NEHgfs8WT6IO2",
+ "targetType": "dashboard"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "hERWDMS",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "k8d898q",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "zyLRwwa",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "L53jNZz",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "zTiHNDL",
+ "targetType": "sheet"
+ },
+ {
+ "authLevel": "read",
+ "config": {
+ "actions": 268435455
+ },
+ "display": {
+ "actionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ],
+ "actionsNote": "actions 位图取哨兵值 0x0FFFFFFF,在仅查看级别下表示视图配置项可见,不代表可对视图执行操作",
+ "authLevelLabel": "仅查看",
+ "permissionScopeNote": "仅查看级别下,actions/rows/cells 描述的是可见数据范围,不代表实际可执行的操作",
+ "targetTypeLabel": "数据表",
+ "viewActionsLabels": [
+ "新增视图",
+ "删除视图",
+ "修改视图"
+ ]
+ },
+ "targetId": "anMdihs",
+ "targetType": "sheet"
+ }
+ ],
+ "system": true
+ }
+ ]
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Listed 5 roles for base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk"
+} |
||
dws aitable +role-update --base-id <base-id> --role-id <role-id> --name <name> --role-type <role-type> --flow-type <flow-type> --sub-roles <sub-roles>write按 PATCH 语义增量更新自定义角色 |
dws mcp aitable patch_role --json '{"baseId":<..>, "roleId":<..>, "name":<..>, "roleType":<..>, "flowType":<..>, "subRoles":<..>}' |
lark-cli base +role-update |
+实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--sub-roles JSON 解析失败: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws aitable +role-update --base-id x --role-id x --name x --role-type x --flow-type x --sub-roles x --yes stdout (空) stderr / error --sub-roles JSON 解析失败: invalid character 'x' looking for beginning of value 最终用于判定的返回 --sub-roles JSON 解析失败: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1209ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +role-update --base-id DWSREALTESTNOSUCHID0000000000000 --role-id DWSREALTESTNOSUCHID0000000000000 --name 'DWS shortcut 真实测试 20260715-151724' --role-type x --flow-type x --sub-roles '[]' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_PARAMS\",\"message\":\"roleId is required\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to patch role because roleId is missing\",\"trace_id\":\"2132f5ca17840998794483634e08d8\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_PARAMS\",\"message\":\"roleId is required\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to patch role because roleId is missing\",\"trace_id\":\"2132f5ca17840998794483634e08d8\"}"
+ }
+} |
||
dws aitable +section-create --base-id <base-id> --name <name> --parent-section-id <parent-section-id> --index <index>write在指定 Base 下创建文件夹(组织 table / dashboard) |
dws mcp aitable create_section --json '{"baseId":<..>, "name":<..>, "parentSectionId":<..>, "index":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/create_section输入 / CLI 输出输入 dws aitable +section-create --base-id x --name x --parent-section-id x --index 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "index": 1,
+ "name": "x",
+ "parentSectionId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "create_section"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "index": 1,
+ "name": "x",
+ "parentSectionId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "create_section"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1117ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +section-create --base-id DWSREALTESTNOSUCHID0000000000000 --name 'DWS shortcut 真实测试 20260715-151724' --parent-section-id DWSREALTESTNOSUCHID0000000000000 --index 1 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to create section for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2132f5ca17840998805556786e08d9\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to create section for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2132f5ca17840998805556786e08d9\"}"
+ }
+} |
||
dws aitable +section-delete --base-id <base-id> --section-id <section-id>high-risk-write删除指定文件夹(不可逆) |
dws mcp aitable delete_section --json '{"baseId":<..>, "sectionId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/delete_section输入 / CLI 输出输入 dws aitable +section-delete --base-id x --section-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "sectionId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "delete_section"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "sectionId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "delete_section"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1111ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +section-delete --base-id DWSREALTESTNOSUCHID0000000000000 --section-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete section for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998817023336e087a\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete section for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998817023336e087a\"}"
+ }
+} |
||
dws aitable +section-list-empty --base-id <base-id>read列出指定 Base 下所有没有子节点的空文件夹 |
dws mcp aitable list_empty_sections --json '{"baseId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/list_empty_sections输入 / CLI 输出输入 dws aitable +section-list-empty --base-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "list_empty_sections"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "list_empty_sections"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1202ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +section-list-empty --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --yes --format json 真实 stdout {
+ "data": {
+ "items": [],
+ "total": 0
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Found 0 empty sections in base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "items": [],
+ "total": 0
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Found 0 empty sections in base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk"
+} |
||
dws aitable +section-list-nodes --base-id <base-id>read列出指定 Base 当前版本下的全部 nsheet 节点 |
dws mcp aitable list_nsheet_nodes --json '{"baseId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/list_nsheet_nodes输入 / CLI 输出输入 dws aitable +section-list-nodes --base-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "list_nsheet_nodes"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "list_nsheet_nodes"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=969ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +section-list-nodes --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --yes --format json 真实 stdout {
+ "data": {
+ "items": [
+ {
+ "nodeId": "L53jNZz",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "zTiHNDL",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "TG566ix",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "hERWDMS-HaFV1LW",
+ "nodeType": "form_view",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "KY9tlWg5NEHgfs8WT6IO2",
+ "nodeType": "dashboard",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "TWB385A",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "hERWDMS-lmeV1cb",
+ "nodeType": "form_view",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "anMdihs",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "qid57iq",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "k8d898q-mkGX58x",
+ "nodeType": "form_view",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "k8d898q",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "zyLRwwa",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "hERWDMS",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ }
+ ],
+ "total": 13
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Found 13 nsheet nodes in base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "items": [
+ {
+ "nodeId": "L53jNZz",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "zTiHNDL",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "TG566ix",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "hERWDMS-HaFV1LW",
+ "nodeType": "form_view",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "KY9tlWg5NEHgfs8WT6IO2",
+ "nodeType": "dashboard",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "TWB385A",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "hERWDMS-lmeV1cb",
+ "nodeType": "form_view",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "anMdihs",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "qid57iq",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "k8d898q-mkGX58x",
+ "nodeType": "form_view",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "k8d898q",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "zyLRwwa",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ },
+ {
+ "nodeId": "hERWDMS",
+ "nodeType": "sheet",
+ "parentSectionId": ""
+ }
+ ],
+ "total": 13
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Found 13 nsheet nodes in base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk"
+} |
||
dws aitable +section-move-node --base-id <base-id> --node-id <node-id> --new-parent-section-id <new-parent-section-id> --target-index <target-index>write把任意 nsheet 节点移动到目标文件夹下(可选调整位置) |
dws mcp aitable move_nsheet_node --json '{"baseId":<..>, "nodeId":<..>, "newParentSectionId":<..>, "targetIndex":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/move_nsheet_node输入 / CLI 输出输入 dws aitable +section-move-node --base-id x --node-id x --new-parent-section-id x --target-index 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "newParentSectionId": "x",
+ "nodeId": "x",
+ "targetIndex": 1
+ },
+ "product": "aitable-helper",
+ "tool": "move_nsheet_node"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "newParentSectionId": "x",
+ "nodeId": "x",
+ "targetIndex": 1
+ },
+ "product": "aitable-helper",
+ "tool": "move_nsheet_node"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1186ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +section-move-node --base-id DWSREALTESTNOSUCHID0000000000000 --node-id DWSREALTESTNOSUCHID0000000000000 --new-parent-section-id DWSREALTESTNOSUCHID0000000000000 --target-index 1 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to move node for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998828667800e0920\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to move node for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998828667800e0920\"}"
+ }
+} |
||
dws aitable +section-rename --base-id <base-id> --section-id <section-id> --new-name <new-name>write重命名指定文件夹 |
dws mcp aitable rename_section --json '{"baseId":<..>, "sectionId":<..>, "newName":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/rename_section输入 / CLI 输出输入 dws aitable +section-rename --base-id x --section-id x --new-name x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "newName": "x",
+ "sectionId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "rename_section"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "newName": "x",
+ "sectionId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "rename_section"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1259ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +section-rename --base-id DWSREALTESTNOSUCHID0000000000000 --section-id DWSREALTESTNOSUCHID0000000000000 --new-name 'DWS shortcut 真实测试 20260715-151724' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to rename section for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"213ee25c17840998840692547e08e2\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to rename section for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"213ee25c17840998840692547e08e2\"}"
+ }
+} |
||
dws aitable +section-reorder --base-id <base-id> --section-id <section-id> --target-index <target-index>write在当前父文件夹下调整文件夹的展示顺序 |
dws mcp aitable reorder_section --json '{"baseId":<..>, "sectionId":<..>, "targetIndex":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/reorder_section输入 / CLI 输出输入 dws aitable +section-reorder --base-id x --section-id x --target-index 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "sectionId": "x",
+ "targetIndex": 1
+ },
+ "product": "aitable-helper",
+ "tool": "reorder_section"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "sectionId": "x",
+ "targetIndex": 1
+ },
+ "product": "aitable-helper",
+ "tool": "reorder_section"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1193ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +section-reorder --base-id DWSREALTESTNOSUCHID0000000000000 --section-id DWSREALTESTNOSUCHID0000000000000 --target-index 1 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to reorder section for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2132f5ca17840998853157434e08d9\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to reorder section for base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2132f5ca17840998853157434e08d9\"}"
+ }
+} |
||
dws aitable +table-delete --base-id <base-id> --table-id <table-id> --reason <reason>high-risk-write删除指定数据表(不可逆) |
dws mcp aitable delete_table --json '{"baseId":<..>, "tableId":<..>, "reason":<..>}' |
lark-cli base +table-delete |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/delete_table输入 / CLI 输出输入 dws aitable +table-delete --base-id x --table-id x --reason x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "reason": "x",
+ "tableId": "x"
+ },
+ "product": "aitable",
+ "tool": "delete_table"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "reason": "x",
+ "tableId": "x"
+ },
+ "product": "aitable",
+ "tool": "delete_table"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1199ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +table-delete --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --reason 'DWS shortcut 真实测试安全负向清理' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"BASE_NOT_FOUND\",\"message\":\"Specified base does not exist, has been deleted, or is inaccessible\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete table because base does not exist or is inaccessible\",\"trace_id\":\"2132f5ca17840998865048372e0852\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"BASE_NOT_FOUND\",\"message\":\"Specified base does not exist, has been deleted, or is inaccessible\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete table because base does not exist or is inaccessible\",\"trace_id\":\"2132f5ca17840998865048372e0852\"}"
+ }
+} |
||
dws aitable +table-get --base-id <base-id> --table-ids <table-ids>read批量获取指定数据表的表级信息、字段目录与视图目录 |
dws mcp aitable get_tables --json '{"baseId":<..>, "tableIds":<..>}' |
lark-cli base +table-get |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/get_tables输入 / CLI 输出输入 dws aitable +table-get --base-id x --table-ids x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableIds": [
+ "x"
+ ]
+ },
+ "product": "aitable",
+ "tool": "get_tables"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableIds": [
+ "x"
+ ]
+ },
+ "product": "aitable",
+ "tool": "get_tables"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1301ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +table-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-ids x --yes --format json 真实 stdout {
+ "data": {
+ "tables": []
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Got 0 tables from base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk. Requested tableIds not returned: x. URL rules: AI 表格数据表访问地址: https://docs.dingtalk.com/i/nodes/{baseId}?iframeQuery=sheetId%3D{tableId}; AI 表格视图访问地址: https://docs.dingtalk.com/i/nodes/{baseId}?iframeQuery=sheetId%3D{tableId}%26viewId%3D{viewId}. User-facing guidance: 面向用户时要以人为本、友好直观,优先展示 **实体名称**、可点击链接和必要上下文,尽量隐藏 `baseId`、`tableId`、`viewId`、`dashboardId`、`documentId` 等技术细节;除非用户明确索要或排障必须,否则不要直接呈现这些 ID。"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "tables": []
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Got 0 tables from base gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk. Requested tableIds not returned: x. URL rules: AI 表格数据表访问地址: https://docs.dingtalk.com/i/nodes/{baseId}?iframeQuery=sheetId%3D{tableId}; AI 表格视图访问地址: https://docs.dingtalk.com/i/nodes/{baseId}?iframeQuery=sheetId%3D{tableId}%26viewId%3D{viewId}. User-facing guidance: 面向用户时要以人为本、友好直观,优先展示 **实体名称**、可点击链接和必要上下文,尽量隐藏 `baseId`、`tableId`、`viewId`、`dashboardId`、`documentId` 等技术细节;除非用户明确索要或排障必须,否则不要直接呈现这些 ID。"
+} |
||
dws aitable +table-update --base-id <base-id> --table-id <table-id> --name <name> --description <description> --record-name-key <record-name-key>write更新数据表名称 / 备注 / 行命名规则 |
dws mcp aitable update_table --json '{"baseId":<..>, "tableId":<..>, "newTableName":<..>, "description":<..>, "recordNameKey":<..>}' |
lark-cli base +table-update |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/update_table输入 / CLI 输出输入 dws aitable +table-update --base-id x --table-id x --name x --description x --record-name-key x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "description": "x",
+ "newTableName": "x",
+ "recordNameKey": "x",
+ "tableId": "x"
+ },
+ "product": "aitable",
+ "tool": "update_table"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "description": "x",
+ "newTableName": "x",
+ "recordNameKey": "x",
+ "tableId": "x"
+ },
+ "product": "aitable",
+ "tool": "update_table"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1249ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +table-update --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --name 'DWS shortcut 真实测试 20260715-151724' --description 'DWS shortcut 真实测试描述,可删除' --record-name-key task --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"404\",\"message\":\"getDentryDTO returns null\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update table DWSREALTESTNOSUCHID0000000000000 in base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"213ee25c17840998877246229e087f\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"404\",\"message\":\"getDentryDTO returns null\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update table DWSREALTESTNOSUCHID0000000000000 in base DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"213ee25c17840998877246229e087f\"}"
+ }
+} |
||
dws aitable +template-search --query <query> --limit <limit> --cursor <cursor>read按名称关键词搜索 AI 表格模板 |
dws mcp aitable <tool> |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/search_templates输入 / CLI 输出输入 dws aitable +template-search --query x --limit 1 --cursor x --yes stdout {
+ "count": 0,
+ "templates": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "templates": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=953ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +template-search --query '测试' --limit 10 --cursor 0 --yes --format json 真实 stdout {
+ "count": 2,
+ "templates": [
+ {
+ "templateId": "513",
+ "templateName": "随堂小测试"
+ },
+ {
+ "templateId": "425",
+ "templateName": "随堂小测试"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 2,
+ "templates": [
+ {
+ "templateId": "513",
+ "templateName": "随堂小测试"
+ },
+ {
+ "templateId": "425",
+ "templateName": "随堂小测试"
+ }
+ ]
+} |
||
dws aitable +view-delete --base-id <base-id> --table-id <table-id> --view-id <view-id>high-risk-write删除指定视图(不可逆) |
dws mcp aitable delete_view --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>}' |
lark-cli base +view-delete |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/delete_view输入 / CLI 输出输入 dws aitable +view-delete --base-id x --table-id x --view-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable",
+ "tool": "delete_view"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable",
+ "tool": "delete_view"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1236ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +view-delete --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --view-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete view DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998889051250e08df\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to delete view DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998889051250e08df\"}"
+ }
+} |
||
dws aitable +view-duplicate --base-id <base-id> --table-id <table-id> --view-id <view-id> --new-name <new-name>write复制视图,生成配置相同的新视图 |
dws mcp aitable duplicate_view --json '{"baseId":<..>, "tableId":<..>, "sourceViewId":<..>, "newViewName":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/duplicate_view输入 / CLI 输出输入 dws aitable +view-duplicate --base-id x --table-id x --view-id x --new-name x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "newViewName": "x",
+ "sourceViewId": "x",
+ "tableId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "duplicate_view"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "newViewName": "x",
+ "sourceViewId": "x",
+ "tableId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "duplicate_view"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1160ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +view-duplicate --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --view-id DWSREALTESTNOSUCHID0000000000000 --new-name 'DWS shortcut 真实测试 20260715-151724' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to duplicate view DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2132f5ca17840998901765467e0853\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to duplicate view DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2132f5ca17840998901765467e0853\"}"
+ }
+} |
||
dws aitable +view-get --base-id <base-id> --table-id <table-id> --view-ids <view-ids>read获取视图完整信息(列顺序、筛选、排序、分组等) |
dws mcp aitable <tool> |
lark-cli base +view-get |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable/get_views输入 / CLI 输出输入 dws aitable +view-get --base-id x --table-id x --view-ids x --yes stdout {
+ "count": 0,
+ "views": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "views": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1137ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +view-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --view-ids qvGDAH2 --yes --format json 真实 stdout {
+ "count": 1,
+ "views": [
+ {
+ "viewId": "qvGDAH2",
+ "viewName": "Mac Mini",
+ "viewType": "Grid"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 1,
+ "views": [
+ {
+ "viewId": "qvGDAH2",
+ "viewName": "Mac Mini",
+ "viewType": "Grid"
+ }
+ ]
+} |
||
dws aitable +view-get-frozen-cols --base-id <base-id> --table-id <table-id> --view-id <view-id>read获取视图当前冻结的左侧列数 |
dws mcp aitable get_frozen_columns_of_view --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/get_frozen_columns_of_view输入 / CLI 输出输入 dws aitable +view-get-frozen-cols --base-id x --table-id x --view-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_frozen_columns_of_view"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_frozen_columns_of_view"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1097ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +view-get-frozen-cols --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --view-id qvGDAH2 --yes --format json 真实 stdout {
+ "data": {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "count": 1,
+ "tableId": "hERWDMS",
+ "viewId": "qvGDAH2"
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Frozen column count of view 'Mac Mini' is 1"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "count": 1,
+ "tableId": "hERWDMS",
+ "viewId": "qvGDAH2"
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "Frozen column count of view 'Mac Mini' is 1"
+} |
||
dws aitable +view-get-lock --base-id <base-id> --table-id <table-id> --view-id <view-id>read获取视图锁定状态 |
dws mcp aitable get_view_lock_status --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/get_view_lock_status输入 / CLI 输出输入 dws aitable +view-get-lock --base-id x --table-id x --view-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_view_lock_status"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_view_lock_status"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1063ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +view-get-lock --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --view-id qvGDAH2 --yes --format json 真实 stdout {
+ "data": {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "locked": false,
+ "tableId": "hERWDMS",
+ "viewId": "qvGDAH2"
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "View 'Mac Mini' is unlocked"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "locked": false,
+ "tableId": "hERWDMS",
+ "viewId": "qvGDAH2"
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "View 'Mac Mini' is unlocked"
+} |
||
dws aitable +view-get-row-height --base-id <base-id> --table-id <table-id> --view-id <view-id>read获取视图单元格行高(像素) |
dws mcp aitable get_cell_height_of_view --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/get_cell_height_of_view输入 / CLI 输出输入 dws aitable +view-get-row-height --base-id x --table-id x --view-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_cell_height_of_view"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_cell_height_of_view"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1284ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test aitable +view-get-row-height --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --table-id hERWDMS --view-id qvGDAH2 --yes --format json 真实 stdout {
+ "data": {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "tableId": "hERWDMS",
+ "viewId": "qvGDAH2"
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "View 'Mac Mini' has no explicit cell height"
+}真实 stderr / error (空) 真实返回 {
+ "data": {
+ "baseId": "gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk",
+ "tableId": "hERWDMS",
+ "viewId": "qvGDAH2"
+ },
+ "error": {},
+ "meta": {},
+ "status": "success",
+ "success": true,
+ "summary": "View 'Mac Mini' has no explicit cell height"
+} |
||
dws aitable +view-lock --base-id <base-id> --table-id <table-id> --view-id <view-id> --off <off>write锁定视图(默认)或解锁(--off) |
dws mcp aitable lock_or_unlock_view --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>, "action":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/lock_or_unlock_view输入 / CLI 输出输入 dws aitable +view-lock --base-id x --table-id x --view-id x --off --yes stdout {
+ "_fake": true,
+ "args": {
+ "action": "unlock",
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "lock_or_unlock_view"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "action": "unlock",
+ "baseId": "x",
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "lock_or_unlock_view"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1215ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +view-lock --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --view-id DWSREALTESTNOSUCHID0000000000000 --off --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to lock_or_unlock view DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998913717245e0941\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to lock_or_unlock view DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998913717245e0941\"}"
+ }
+} |
||
dws aitable +view-set-fill-color-rule --base-id <base-id> --table-id <table-id> --view-id <view-id> --json <json>write全量覆盖 Grid 视图的条件填色规则(传 '[]' 清空) |
dws mcp aitable set_view_fill_color_rule --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>, "conditionalFormats":<..>}' |
lark base 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--json JSON 解析失败: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws aitable +view-set-fill-color-rule --base-id x --table-id x --view-id x --json x --yes stdout (空) stderr / error --json JSON 解析失败: invalid character 'x' looking for beginning of value 最终用于判定的返回 --json JSON 解析失败: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1046ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +view-set-fill-color-rule --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --view-id DWSREALTESTNOSUCHID0000000000000 --json '{}' --yes --format json真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_PARAMS\",\"message\":\"conditionalFormats is required\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to set fill color rule because conditionalFormats is missing\",\"trace_id\":\"2106d98117840998924181709e08df\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_PARAMS\",\"message\":\"conditionalFormats is required\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to set fill color rule because conditionalFormats is missing\",\"trace_id\":\"2106d98117840998924181709e08df\"}"
+ }
+} |
||
dws aitable +view-set-frozen-cols --base-id <base-id> --table-id <table-id> --view-id <view-id> --count <count>write设置视图冻结列数(0 表示取消冻结) |
dws mcp aitable set_frozen_columns_of_view --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>, "count":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/set_frozen_columns_of_view输入 / CLI 输出输入 dws aitable +view-set-frozen-cols --base-id x --table-id x --view-id x --count 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "count": 1,
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "set_frozen_columns_of_view"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "count": 1,
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "set_frozen_columns_of_view"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1149ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +view-set-frozen-cols --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --view-id DWSREALTESTNOSUCHID0000000000000 --count 1 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to set frozen columns for view DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998935988648e08de\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to set frozen columns for view DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998935988648e08de\"}"
+ }
+} |
||
dws aitable +view-set-row-height --base-id <base-id> --table-id <table-id> --view-id <view-id> --cell-height <cell-height>write设置视图单元格行高(像素,合法档位 32/56/88/128) |
dws mcp aitable set_cell_height_of_view --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>, "cellHeight":<..>}' |
lark base 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/set_cell_height_of_view输入 / CLI 输出输入 dws aitable +view-set-row-height --base-id x --table-id x --view-id x --cell-height 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "cellHeight": 1,
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "set_cell_height_of_view"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "cellHeight": 1,
+ "tableId": "x",
+ "viewId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "set_cell_height_of_view"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1345ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +view-set-row-height --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --view-id DWSREALTESTNOSUCHID0000000000000 --cell-height 1 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to set cell height for view DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998949428245e08b8\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to set cell height for view DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"2106d98117840998949428245e08b8\"}"
+ }
+} |
||
dws aitable +view-update --base-id <base-id> --table-id <table-id> --view-id <view-id> --name <name> --desc <desc> --config <config>write更新视图名称 / 描述 / 配置(visibleFieldIds、filter、sort、group 等) |
dws mcp aitable update_view --json '{"baseId":<..>, "tableId":<..>, "viewId":<..>, "newViewName":<..>, "viewDescription":<..>, "config":<..>}' |
lark base 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--desc JSON 解析失败: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws aitable +view-update --base-id x --table-id x --view-id x --name x --desc x --config x --yes stdout (空) stderr / error --desc JSON 解析失败: invalid character 'x' looking for beginning of value 最终用于判定的返回 --desc JSON 解析失败: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1331ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +view-update --base-id DWSREALTESTNOSUCHID0000000000000 --table-id DWSREALTESTNOSUCHID0000000000000 --view-id DWSREALTESTNOSUCHID0000000000000 --name 'DWS shortcut 真实测试 20260715-151724' --desc '{}' --config '{}' --yes --format json真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update view DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"213ee25c17840998961487395e087f\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"INVALID_BASE_ID\",\"message\":\"baseId cannot be resolved to docId\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to update view DWSREALTESTNOSUCHID0000000000000\",\"trace_id\":\"213ee25c17840998961487395e087f\"}"
+ }
+} |
||
dws aitable +workflow-disable --base-id <base-id> --workflow-id <workflow-id>high-risk-write禁用指定 Base 中的自动化工作流(影响业务自动化) |
dws mcp aitable disable_workflow --json '{"baseId":<..>, "workflowId":<..>}' |
lark-cli base +workflow-disable |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/disable_workflow输入 / CLI 输出输入 dws aitable +workflow-disable --base-id x --workflow-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "workflowId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "disable_workflow"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "workflowId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "disable_workflow"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1320ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +workflow-disable --base-id DWSREALTESTNOSUCHID0000000000000 --workflow-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"BASE_NOT_FOUND\",\"message\":\"Cannot resolve base 'DWSREALTESTNOSUCHID0000000000000', please check if the baseId is valid\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to disable workflow because base 'DWSREALTESTNOSUCHID0000000000000' could not be found\",\"trace_id\":\"213ee25c17840998975738372e087e\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"BASE_NOT_FOUND\",\"message\":\"Cannot resolve base 'DWSREALTESTNOSUCHID0000000000000', please check if the baseId is valid\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to disable workflow because base 'DWSREALTESTNOSUCHID0000000000000' could not be found\",\"trace_id\":\"213ee25c17840998975738372e087e\"}"
+ }
+} |
||
dws aitable +workflow-enable --base-id <base-id> --workflow-id <workflow-id>write启用指定 Base 中的自动化工作流 |
dws mcp aitable enable_workflow --json '{"baseId":<..>, "workflowId":<..>}' |
lark-cli base +workflow-enable |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/enable_workflow输入 / CLI 输出输入 dws aitable +workflow-enable --base-id x --workflow-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "workflowId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "enable_workflow"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "workflowId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "enable_workflow"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1171ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺 AI 表格真实 fixture / 需真实 fixture,非 CLI 可直接修 +AI 表格命令需要真实 Base/Table/View/Record 等资源;安全负向 ID 只能验证调用链,不能让后端成功。 真实输入 /private/tmp/dws-real-test aitable +workflow-enable --base-id DWSREALTESTNOSUCHID0000000000000 --workflow-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"BASE_NOT_FOUND\",\"message\":\"Cannot resolve base 'DWSREALTESTNOSUCHID0000000000000', please check if the baseId is valid\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to enable workflow because base 'DWSREALTESTNOSUCHID0000000000000' could not be found\",\"trace_id\":\"0bab027317840998987508899e094d\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"BASE_NOT_FOUND\",\"message\":\"Cannot resolve base 'DWSREALTESTNOSUCHID0000000000000', please check if the baseId is valid\",\"retryable\":false,\"type\":\"INPUT_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to enable workflow because base 'DWSREALTESTNOSUCHID0000000000000' could not be found\",\"trace_id\":\"0bab027317840998987508899e094d\"}"
+ }
+} |
||
dws aitable +workflow-get --base-id <base-id> --workflow-id <workflow-id>read获取单个自动化工作流的详细信息 |
dws mcp aitable get_workflow --json '{"baseId":<..>, "workflowId":<..>}' |
lark-cli base +workflow-get |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/get_workflow输入 / CLI 输出输入 dws aitable +workflow-get --base-id x --workflow-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "workflowId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_workflow"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "baseId": "x",
+ "workflowId": "x"
+ },
+ "product": "aitable-helper",
+ "tool": "get_workflow"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1535ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +workflow-get --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --workflow-id DWSREALREADNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"GET_WORKFLOW_ERROR\",\"message\":\"调用远程服务业务异常\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to get workflow in base 'gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk' due to an unexpected error\",\"trace_id\":\"2104a64c17840997556363676e08ee\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"GET_WORKFLOW_ERROR\",\"message\":\"调用远程服务业务异常\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to get workflow in base 'gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk' due to an unexpected error\",\"trace_id\":\"2104a64c17840997556363676e08ee\"}"
+ }
+} |
||
dws aitable +workflow-list --base-id <base-id> --limit <limit> --offset <offset>read列出指定 Base 中的自动化工作流(分页) |
dws mcp aitable <tool> |
lark-cli base +workflow-list |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; aitable-helper/list_workflows输入 / CLI 输出输入 dws aitable +workflow-list --base-id x --limit 1 --offset 1 --yes stdout {
+ "count": 0,
+ "workflows": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "workflows": []
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1540ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 后端 / MCP 内部错误 / 优先后端 / MCP 排查 +后端/MCP 服务返回内部错误;CLI 无法直接修复,但报告保留 trace/stdout 供服务端排查。 真实输入 /private/tmp/dws-real-test aitable +workflow-list --base-id gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk --limit 10 --offset 1 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"LIST_WORKFLOWS_ERROR\",\"message\":\"biz error\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to list workflows in base 'gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk' due to an unexpected error\",\"trace_id\":\"2127d89817840997572427879e075d\"}"
+ }
+}真实返回 {
+ "error": {
+ "category": "internal",
+ "code": 1,
+ "message": "[MCP_TOOL_ERROR] {\"data\":{},\"error\":{\"code\":\"LIST_WORKFLOWS_ERROR\",\"message\":\"biz error\",\"retryable\":true,\"type\":\"SYSTEM_ERROR\"},\"meta\":{},\"status\":\"error\",\"success\":true,\"summary\":\"Failed to list workflows in base 'gpG2NdyVXQyZ0OmoSbd1vbA6JMwvDqPk' due to an unexpected error\",\"trace_id\":\"2127d89817840997572427879e075d\"}"
+ }
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 | ||
|---|---|---|---|---|---|
dws attendance +boss-check --plan-id <plan-id> --result-id <result-id> --time <time> --result <result> --absent-min <absent-min> --remark <remark>writeBOSS 改签打卡记录(管理员修改打卡时间/结果) |
dws mcp attendance boss_check --json '{"BossCheckMcpRequest":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/boss_check输入 / CLI 输出输入 dws attendance +boss-check --plan-id x --result-id x --time x --result Normal --absent-min 1 --remark x --yes stdout {
+ "_fake": true,
+ "args": {
+ "BossCheckMcpRequest": {
+ "absentMin": 1,
+ "bossCheckTime": "x",
+ "remark": "x",
+ "result": "Normal",
+ "resultId": "x"
+ }
+ },
+ "product": "attendance-wukong",
+ "tool": "boss_check"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "BossCheckMcpRequest": {
+ "absentMin": 1,
+ "bossCheckTime": "x",
+ "remark": "x",
+ "result": "Normal",
+ "resultId": "x"
+ }
+ },
+ "product": "attendance-wukong",
+ "tool": "boss_check"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1136ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test attendance +boss-check --plan-id 999999999999 --result-id 999999999999 --time 2026-07-22T10:00:00+08:00 --result Normal --absent-min 1 --remark 'DWS shortcut 真实测试 20260715-151724,安全负向输入,请忽略。' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/boss_check)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "C0002",
+ "server_key": "attendance-wukong",
+ "trace_id": "213ee25c17840998998942184e087d"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/boss_check)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "C0002",
+ "server_key": "attendance-wukong",
+ "trace_id": "213ee25c17840998998942184e087d"
+ }
+} |
||
dws attendance +check-record --users <users> --start <start> --end <end>read查询用户打卡流水(打卡时间/地点/定位方式) |
dws mcp attendance query_check_record --json '{"QueryCheckRecordRequest":<..>, "userIds":<..>, "checkDateFrom":<..>, "checkDateTo":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);日期格式错误,应为 YYYY-MM-DD(如 2026-04-01): parsing time "x" as "2006-01-02": cannot parse "x" as "2006"输入 / CLI 输出输入 dws attendance +check-record --users x --start x --end x --yes stdout (空) stderr / error 日期格式错误,应为 YYYY-MM-DD(如 2026-04-01): parsing time "x" as "2006-01-02": cannot parse "x" as "2006" 最终用于判定的返回 日期格式错误,应为 YYYY-MM-DD(如 2026-04-01): parsing time "x" as "2006-01-02": cannot parse "x" as "2006" 真实后端测试输入 / 输出真实后端成功exit=0;duration=998ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +check-record --users 202397 --start 2026-07-14 --end 2026-07-15 --yes --format json 真实 stdout {
+ "code": "0",
+ "message": "success",
+ "result": [],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "code": "0",
+ "message": "success",
+ "result": [],
+ "success": true
+} |
||
dws attendance +check-result --users <users> --start <start> --end <end> --offset <offset> --limit <limit>read查询用户打卡结果(迟到/早退/缺卡等) |
dws mcp attendance query_check_result --json '{"QueryCheckResultRequest":<..>, "userIds":<..>, "workDateFrom":<..>, "workDateTo":<..>, "offset":<..>, "limit":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);日期格式错误,应为 YYYY-MM-DD(如 2026-04-01): parsing time "x" as "2006-01-02": cannot parse "x" as "2006"输入 / CLI 输出输入 dws attendance +check-result --users x --start x --end x --offset 1 --limit 1 --yes stdout (空) stderr / error 日期格式错误,应为 YYYY-MM-DD(如 2026-04-01): parsing time "x" as "2006-01-02": cannot parse "x" as "2006" 最终用于判定的返回 日期格式错误,应为 YYYY-MM-DD(如 2026-04-01): parsing time "x" as "2006-01-02": cannot parse "x" as "2006" 真实后端测试输入 / 输出真实后端成功exit=0;duration=1134ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +check-result --users 202397 --start 2026-07-14 --end 2026-07-15 --offset 1 --limit 10 --yes --format json 真实 stdout {
+ "code": "0",
+ "message": "success",
+ "result": [],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "code": "0",
+ "message": "success",
+ "result": [],
+ "success": true
+} |
||
dws attendance +create-class --name <name> --owner <owner> --class-vo <class-vo>write创建班次(checkTime 用 HH:mm,自动转时间戳) |
dws mcp attendance create_class_setting --json '{"TopAtClassVO":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);invalid --class-vo JSON: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws attendance +create-class --name x --owner x --class-vo x --yes stdout (空) stderr / error invalid --class-vo JSON: invalid character 'x' looking for beginning of value 最终用于判定的返回 invalid --class-vo JSON: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1148ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test attendance +create-class --name 'DWS shortcut 真实测试 20260715-151724' --owner __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --class-vo '{"sections":[{"times":[{"checkType":"OnDuty","checkTime":"09:00","across":0},{"checkType":"OffDuty","checkTime":"18:00","across":0}]}]}' --yes --format json真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/create_class_setting)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "S0001",
+ "server_key": "attendance-wukong",
+ "trace_id": "0bab027317840999009926838e090b"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/create_class_setting)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "S0001",
+ "server_key": "attendance-wukong",
+ "trace_id": "0bab027317840999009926838e090b"
+ }
+} |
||
dws attendance +create-group --name <name> --type <type> --owner <owner> --group-vo <group-vo>write创建考勤组(复杂子对象用 --group-vo JSON 传入) |
dws mcp attendance create_group_setting --json '{"groupVO":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);invalid --group-vo JSON: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws attendance +create-group --name x --type FIXED --owner x --group-vo x --yes stdout (空) stderr / error invalid --group-vo JSON: invalid character 'x' looking for beginning of value 最终用于判定的返回 invalid --group-vo JSON: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1201ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test attendance +create-group --name 'DWS shortcut 真实测试 20260715-151724' --type FIXED --owner __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --group-vo '{"defaultClassId":999999999999,"workDayClassList":[999999999999,999999999999,999999999999,999999999999,999999999999,0,0]}' --yes --format json真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/create_group_setting)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "S0001",
+ "server_key": "attendance-wukong",
+ "trace_id": "2106d98117840999021121258e08b8"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/create_group_setting)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "S0001",
+ "server_key": "attendance-wukong",
+ "trace_id": "2106d98117840999021121258e08b8"
+ }
+} |
||
dws attendance +get-adjustment-rule --adjustment-id <adjustment-id>read根据补卡规则主键 ID 查询补卡规则详情 |
dws mcp attendance get_adjustment_rule_detail --json '{"adjustmentId":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/get_adjustment_rule_detail输入 / CLI 输出输入 dws attendance +get-adjustment-rule --adjustment-id 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "adjustmentId": 1
+ },
+ "product": "attendance-wukong",
+ "tool": "get_adjustment_rule_detail"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "adjustmentId": 1
+ },
+ "product": "attendance-wukong",
+ "tool": "get_adjustment_rule_detail"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=950ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +get-adjustment-rule --adjustment-id 1 --yes --format json 真实 stdout {
+ "success": true,
+ "有效期类型": "工作日"
+}真实 stderr / error (空) 真实返回 {
+ "success": true,
+ "有效期类型": "工作日"
+} |
||
dws attendance +get-approve-template --type <type>read查询补卡/请假/加班/外出/出差审批提交链接 |
dws mcp attendance query_at_approve_template --json '{"OUT":<..>, "approveType":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);无效的审批类型: x,支持: repair-check/补卡、leave/请假、overtime/加班、travel/外出、out/出差,或 REPAIR_CHECK/LEAVE/OVERTIME/TRAVEL/OUT输入 / CLI 输出输入 dws attendance +get-approve-template --type x --yes stdout (空) stderr / error 无效的审批类型: x,支持: repair-check/补卡、leave/请假、overtime/加班、travel/外出、out/出差,或 REPAIR_CHECK/LEAVE/OVERTIME/TRAVEL/OUT 最终用于判定的返回 无效的审批类型: x,支持: repair-check/补卡、leave/请假、overtime/加班、travel/外出、out/出差,或 REPAIR_CHECK/LEAVE/OVERTIME/TRAVEL/OUT 真实后端测试输入 / 输出真实后端成功exit=0;duration=1080ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +get-approve-template --type leave --yes --format json 真实 stdout {
+ "code": "0",
+ "message": "success",
+ "result": [
+ {
+ "approveType": "LEAVE",
+ "formName": "请假",
+ "processCode": "PROC-940F2B1F-845D-4F39-A92E-FA5F45D1BF87",
+ "submitUrl": "dingtalk://dingtalkclient/action/openapp?app_id=-4\u0026container_type=work_platform\u0026corpid=ding8196cd9a2b2405da24f2f5cc6abecb85\u0026ddtab=true\u0026redirect_type=jump\u0026redirect_url=https%3A%2F%2Faflow.dingtalk.com%2Fdingtalk%2Fmobile%2Fhomepage.htm%3FappUuid%3Dding8196cd9a2b2405da24f2f5cc6abecb85%26backcontrol%3Dfalse%26corpid%3Dding8196cd9a2b2405da24f2f5cc6abecb85%26dd_progress%3Dfalse%26dd_share%3Dfalse%26ddtab%3Dtrue%26showmenu%3Dfalse%23%2Fcustom%3Fpcredirect%3Dself%26processCode%3DPROC-940F2B1F-845D-4F39-A92E-FA5F45D1BF87"
+ }
+ ],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "code": "0",
+ "message": "success",
+ "result": [
+ {
+ "approveType": "LEAVE",
+ "formName": "请假",
+ "processCode": "PROC-940F2B1F-845D-4F39-A92E-FA5F45D1BF87",
+ "submitUrl": "dingtalk://dingtalkclient/action/openapp?app_id=-4\u0026container_type=work_platform\u0026corpid=ding8196cd9a2b2405da24f2f5cc6abecb85\u0026ddtab=true\u0026redirect_type=jump\u0026redirect_url=https%3A%2F%2Faflow.dingtalk.com%2Fdingtalk%2Fmobile%2Fhomepage.htm%3FappUuid%3Dding8196cd9a2b2405da24f2f5cc6abecb85%26backcontrol%3Dfalse%26corpid%3Dding8196cd9a2b2405da24f2f5cc6abecb85%26dd_progress%3Dfalse%26dd_share%3Dfalse%26ddtab%3Dtrue%26showmenu%3Dfalse%23%2Fcustom%3Fpcredirect%3Dself%26processCode%3DPROC-940F2B1F-845D-4F39-A92E-FA5F45D1BF87"
+ }
+ ],
+ "success": true
+} |
||
dws attendance +get-checkin-record --operator-corp-id <operator-corp-id> --operator-staff-id <operator-staff-id> --staff-ids <staff-ids> --start <start> --end <end>read查询指定员工一段时间内的签到记录 |
dws mcp attendance get_checkin_record --json '{"QueryMcpUserRecordRequest":<..>, "operatorCorpId":<..>, "operatorStaffId":<..>, "staffIds":<..>, "startTime":<..>, "endTime":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--start 格式错误,应为 yyyy-MM-dd HH:mm:ss: parsing time "x" as "2006-01-02 15:04:05": cannot parse "x" as "2006"输入 / CLI 输出输入 dws attendance +get-checkin-record --operator-corp-id x --operator-staff-id x --staff-ids x --start x --end x --yes stdout (空) stderr / error --start 格式错误,应为 yyyy-MM-dd HH:mm:ss: parsing time "x" as "2006-01-02 15:04:05": cannot parse "x" as "2006" 最终用于判定的返回 --start 格式错误,应为 yyyy-MM-dd HH:mm:ss: parsing time "x" as "2006-01-02 15:04:05": cannot parse "x" as "2006" 真实后端测试输入 / 输出真实后端成功exit=0;duration=1116ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +get-checkin-record --operator-corp-id x --operator-staff-id 202397 --staff-ids 202397 --start '2026-07-15 10:00:00' --end '2026-07-15 16:00:00' --yes --format json 真实 stdout {
+ "arguments": [],
+ "result": {
+ "list": []
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "result": {
+ "list": []
+ },
+ "success": true
+} |
||
dws attendance +get-class --class-id <class-id>read根据班次 ID 查询班次详情 |
dws mcp attendance get_class_detail --json '{"classId":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/get_class_detail输入 / CLI 输出输入 dws attendance +get-class --class-id 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "classId": 1
+ },
+ "product": "attendance-wukong",
+ "tool": "get_class_detail"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "classId": 1
+ },
+ "product": "attendance-wukong",
+ "tool": "get_class_detail"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1492ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test attendance +get-class --class-id 1 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/get_class_detail)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "rule not found",
+ "server_key": "attendance-wukong",
+ "trace_id": "2127d89817840997588238831e0757"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/get_class_detail)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "rule not found",
+ "server_key": "attendance-wukong",
+ "trace_id": "2127d89817840997588238831e0757"
+ }
+} |
||
dws attendance +get-global-setting --setting-scene <setting-scene> --scope <scope>read查询全局规则设置(仅管理员) |
dws mcp attendance query_global_setting --json '{"RuleMcpQueryGlobalSettingRequest":<..>, "settingScene":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/query_global_setting输入 / CLI 输出输入 dws attendance +get-global-setting --setting-scene checkRemind --scope 企业 --yes stdout {
+ "_fake": true,
+ "args": {
+ "RuleMcpQueryGlobalSettingRequest": {
+ "settingScene": "checkRemind"
+ }
+ },
+ "product": "attendance-wukong",
+ "tool": "query_global_setting"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "RuleMcpQueryGlobalSettingRequest": {
+ "settingScene": "checkRemind"
+ }
+ },
+ "product": "attendance-wukong",
+ "tool": "query_global_setting"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1635ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test attendance +get-global-setting --setting-scene checkRemind --scope '企业' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/query_global_setting)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "NO_PERMISSION",
+ "server_key": "attendance-wukong",
+ "trace_id": "2104a64c17840997604718062e085e"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/query_global_setting)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "NO_PERMISSION",
+ "server_key": "attendance-wukong",
+ "trace_id": "2104a64c17840997604718062e085e"
+ }
+} |
||
dws attendance +get-group --group-id <group-id>read根据考勤组 ID 查询考勤组全量信息 |
dws mcp attendance get_group_detail --json '{"groupId":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/get_group_detail输入 / CLI 输出输入 dws attendance +get-group --group-id 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "groupId": 1
+ },
+ "product": "attendance-wukong",
+ "tool": "get_group_detail"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "groupId": 1
+ },
+ "product": "attendance-wukong",
+ "tool": "get_group_detail"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1568ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test attendance +get-group --group-id 1 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/get_group_detail)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "rule not found",
+ "server_key": "attendance-wukong",
+ "trace_id": "0b5deb3217840997620512305e08ef"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/get_group_detail)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "rule not found",
+ "server_key": "attendance-wukong",
+ "trace_id": "0b5deb3217840997620512305e08ef"
+ }
+} |
||
dws attendance +get-group-filtered --group-id <group-id> --member <member> --position <position> --wifi <wifi> --bles <bles>read按需查询考勤组成员/打卡地址/蓝牙/Wifi 子集 |
dws mcp attendance get_group_filtered_detail --json '{"groupId":<..>, "GroupResultFilter":<..>, "includeMember":<..>, "includePosition":<..>, "includeWifi":<..>, "includeBles":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/get_group_filtered_detail输入 / CLI 输出输入 dws attendance +get-group-filtered --group-id 1 --member --position --wifi --bles --yes stdout {
+ "_fake": true,
+ "args": {
+ "GroupResultFilter": {
+ "includeBles": true,
+ "includeMember": true,
+ "includePosition": true,
+ "includeWifi": true
+ },
+ "groupId": 1
+ },
+ "product": "attendance-wukong",
+ "tool": "get_group_filtered_detail"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "GroupResultFilter": {
+ "includeBles": true,
+ "includeMember": true,
+ "includePosition": true,
+ "includeWifi": true
+ },
+ "groupId": 1
+ },
+ "product": "attendance-wukong",
+ "tool": "get_group_filtered_detail"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1746ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test attendance +get-group-filtered --group-id 1 --member --position --wifi --bles --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/get_group_filtered_detail)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "rule not found",
+ "server_key": "attendance-wukong",
+ "trace_id": "2104a64c17840997638062468e08c7"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/get_group_filtered_detail)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "rule not found",
+ "server_key": "attendance-wukong",
+ "trace_id": "2104a64c17840997638062468e08c7"
+ }
+} |
||
dws attendance +get-leave-balance --users <users> --leave-code <leave-code>read查询指定员工的假期余额 |
dws mcp attendance get_leave_balance_quota --json '{"targetUserIds":<..>, "McpLeaveBalanceRequest":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/get_leave_balance_quota输入 / CLI 输出输入 dws attendance +get-leave-balance --users x --leave-code x --yes stdout {
+ "_fake": true,
+ "args": {
+ "McpLeaveBalanceRequest": {
+ "leaveCode": "x",
+ "targetUserIds": [
+ "x"
+ ]
+ }
+ },
+ "product": "attendance-wukong",
+ "tool": "get_leave_balance_quota"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "McpLeaveBalanceRequest": {
+ "leaveCode": "x",
+ "targetUserIds": [
+ "x"
+ ]
+ }
+ },
+ "product": "attendance-wukong",
+ "tool": "get_leave_balance_quota"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1479ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test attendance +get-leave-balance --users 202397 --leave-code 731ed089-62ff-4734-a6c7-3c8fcc8294fc --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 亲,假期类型没有余额 (operation: attendance-wukong/get_leave_balance_quota)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "2002",
+ "server_key": "attendance-wukong",
+ "trace_id": "2104a64c17840997652901307e081a"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 亲,假期类型没有余额 (operation: attendance-wukong/get_leave_balance_quota)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "2002",
+ "server_key": "attendance-wukong",
+ "trace_id": "2104a64c17840997652901307e081a"
+ }
+} |
||
dws attendance +get-leave-records --user <user> --leave-code <leave-code> --start <start> --end <end>read查询指定员工的假期余额变更记录 |
dws mcp attendance get_leave_balance_records_v2 --json '{"targetUserId":<..>, "startTimeStamp":<..>, "endTimeStamp":<..>, "McpLeaveRecordRequest":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);日期格式错误,应为 YYYY-MM-DD(如 2026-04-01): parsing time "x" as "2006-01-02": cannot parse "x" as "2006"输入 / CLI 输出输入 dws attendance +get-leave-records --user x --leave-code x --start x --end x --yes stdout (空) stderr / error 日期格式错误,应为 YYYY-MM-DD(如 2026-04-01): parsing time "x" as "2006-01-02": cannot parse "x" as "2006" 最终用于判定的返回 日期格式错误,应为 YYYY-MM-DD(如 2026-04-01): parsing time "x" as "2006-01-02": cannot parse "x" as "2006" 真实后端测试输入 / 输出真实后端成功exit=0;duration=1009ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +get-leave-records --user 202397 --leave-code 731ed089-62ff-4734-a6c7-3c8fcc8294fc --start 2026-07-14 --end 2026-07-15 --yes --format json 真实 stdout {
+ "errorCode": null,
+ "errorMsg": null,
+ "result": [],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "errorCode": null,
+ "errorMsg": null,
+ "result": [],
+ "success": true
+} |
||
dws attendance +get-overtime-rule --overtime-id <overtime-id>read根据加班规则主键 ID 查询加班规则详情 |
dws mcp attendance get_overtime_rule_detail --json '{"overtimeId":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/get_overtime_rule_detail输入 / CLI 输出输入 dws attendance +get-overtime-rule --overtime-id 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "overtimeId": 1
+ },
+ "product": "attendance-wukong",
+ "tool": "get_overtime_rule_detail"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "overtimeId": 1
+ },
+ "product": "attendance-wukong",
+ "tool": "get_overtime_rule_detail"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=961ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +get-overtime-rule --overtime-id 1 --yes --format json 真实 stdout {
+ "code": "0",
+ "message": "success",
+ "result": [
+ {
+ "advanceSettingDays": [],
+ "content": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "durationSettings": {
+ "holiday": {
+ "calcType": 1,
+ "durationType": 1,
+ "holidayPlanOvertimeRedress": null,
+ "holidayPlanOvertimeRedressBy": null,
+ "holidayPlanVacationRate": null,
+ "overtimeRedress": true,
+ "overtimeRedressBy": "vacation",
+ "roundType": null,
+ "settings": {},
+ "skipTime": "none",
+ "skipTimeByDurations": [],
+ "skipTimeByFrames": [],
+ "stepType": null,
+ "stepValue": null,
+ "vacationRate": "1.0",
+ "warningSettings": [],
+ "workMinutesPerDay": null
+ },
+ "restDay": {
+ "calcType": 1,
+ "durationType": 1,
+ "holidayPlanOvertimeRedress": null,
+ "holidayPlanOvertimeRedressBy": null,
+ "holidayPlanVacationRate": null,
+ "overtimeRedress": true,
+ "overtimeRedressBy": "vacation",
+ "roundType": null,
+ "settings": {},
+ "skipTime": "none",
+ "skipTimeByDurations": [],
+ "skipTimeByFrames": [],
+ "stepType": null,
+ "stepValue": null,
+ "vacationRate": "1.0",
+ "warningSettings": [],
+ "workMinutesPerDay": null
+ },
+ "workDay": {
+ "calcType": 1,
+ "durationType": 1,
+ "holidayPlanOvertimeRedress": null,
+ "holidayPlanOvertimeRedressBy": null,
+ "holidayPlanVacationRate": null,
+ "overtimeRedress": true,
+ "overtimeRedressBy": "vacation",
+ "roundType": null,
+ "settings": {
+ "calcTypeBetweenDutyWorktime": null,
+ "durationTypeBetweenDutyWorktime": null,
+ "dutyWorktimeLieuTypeVacationCode": null,
+ "dutyWorktimeOvertimeRedress": null,
+ "dutyWorktimeOvertimeRedressBy": null,
+ "dutyWorktimeVacationRate": null,
+ "enableAfterOffDuty": true,
+ "enableBeforeOnDuty": true,
+ "enableBetweenDuty": true,
+ "enableBetweenDutyWorktime": null,
+ "startTime": null,
+ "timeUnit": null,
+ "timeUnitAfterOffDuty": 30,
+ "timeUnitBeforeOnDuty": 30,
+ "timeUnitBetweenDuty": 0,
+ "timeUnitBetweenDutyWorktime": null
+ },
+ "skipTime": "none",
+ "skipTimeByDurations": [],
+ "skipTimeByFrames": [],
+ "stepType": null,
+ "stepValue": null,
+ "vacationRate": "1.0",
+ "warningSettings": [],
+ "workMinutesPerDay": null
+ }
+ },
+ "groupIdAndNames": [],
+ "id": 941615052,
+ "isDefault": null,
+ "name": "以审批时间计算加班",
+ "overtimeCheckSetting": {},
+ "overtimeDivisions": [],
+ "owner": null,
+ "ownerList": [],
+ "roundType": "floor",
+ "scopes": null,
+ "settingId": 941615052,
+ "stepType": 0,
+ "stepValue": "1.0",
+ "warningSettings": [],
+ "workMinutesPerDay": 480
+ }
+ ],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "code": "0",
+ "message": "success",
+ "result": [
+ {
+ "advanceSettingDays": [],
+ "content": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "durationSettings": {
+ "holiday": {
+ "calcType": 1,
+ "durationType": 1,
+ "holidayPlanOvertimeRedress": null,
+ "holidayPlanOvertimeRedressBy": null,
+ "holidayPlanVacationRate": null,
+ "overtimeRedress": true,
+ "overtimeRedressBy": "vacation",
+ "roundType": null,
+ "settings": {},
+ "skipTime": "none",
+ "skipTimeByDurations": [],
+ "skipTimeByFrames": [],
+ "stepType": null,
+ "stepValue": null,
+ "vacationRate": "1.0",
+ "warningSettings": [],
+ "workMinutesPerDay": null
+ },
+ "restDay": {
+ "calcType": 1,
+ "durationType": 1,
+ "holidayPlanOvertimeRedress": null,
+ "holidayPlanOvertimeRedressBy": null,
+ "holidayPlanVacationRate": null,
+ "overtimeRedress": true,
+ "overtimeRedressBy": "vacation",
+ "roundType": null,
+ "settings": {},
+ "skipTime": "none",
+ "skipTimeByDurations": [],
+ "skipTimeByFrames": [],
+ "stepType": null,
+ "stepValue": null,
+ "vacationRate": "1.0",
+ "warningSettings": [],
+ "workMinutesPerDay": null
+ },
+ "workDay": {
+ "calcType": 1,
+ "durationType": 1,
+ "holidayPlanOvertimeRedress": null,
+ "holidayPlanOvertimeRedressBy": null,
+ "holidayPlanVacationRate": null,
+ "overtimeRedress": true,
+ "overtimeRedressBy": "vacation",
+ "roundType": null,
+ "settings": {
+ "calcTypeBetweenDutyWorktime": null,
+ "durationTypeBetweenDutyWorktime": null,
+ "dutyWorktimeLieuTypeVacationCode": null,
+ "dutyWorktimeOvertimeRedress": null,
+ "dutyWorktimeOvertimeRedressBy": null,
+ "dutyWorktimeVacationRate": null,
+ "enableAfterOffDuty": true,
+ "enableBeforeOnDuty": true,
+ "enableBetweenDuty": true,
+ "enableBetweenDutyWorktime": null,
+ "startTime": null,
+ "timeUnit": null,
+ "timeUnitAfterOffDuty": 30,
+ "timeUnitBeforeOnDuty": 30,
+ "timeUnitBetweenDuty": 0,
+ "timeUnitBetweenDutyWorktime": null
+ },
+ "skipTime": "none",
+ "skipTimeByDurations": [],
+ "skipTimeByFrames": [],
+ "stepType": null,
+ "stepValue": null,
+ "vacationRate": "1.0",
+ "warningSettings": [],
+ "workMinutesPerDay": null
+ }
+ },
+ "groupIdAndNames": [],
+ "id": 941615052,
+ "isDefault": null,
+ "name": "以审批时间计算加班",
+ "overtimeCheckSetting": {},
+ "overtimeDivisions": [],
+ "owner": null,
+ "ownerList": [],
+ "roundType": "floor",
+ "scopes": null,
+ "settingId": 941615052,
+ "stepType": 0,
+ "stepValue": "1.0",
+ "warningSettings": [],
+ "workMinutesPerDay": 480
+ }
+ ],
+ "success": true
+} |
||
dws attendance +get-schedule --users <users> --start <start> --end <end>read获取指定用户一段时间内的排班记录 |
dws mcp attendance getScheduleByRange --json '{"GetScheduleByRangeRequest":<..>, "userIdList":<..>, "workDateBegin":<..>, "workDateEnd":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);日期格式错误,应为 YYYY-MM-DD 或 yyyy-MM-dd HH:mm:ss输入 / CLI 输出输入 dws attendance +get-schedule --users x --start x --end x --yes stdout (空) stderr / error 日期格式错误,应为 YYYY-MM-DD 或 yyyy-MM-dd HH:mm:ss 最终用于判定的返回 日期格式错误,应为 YYYY-MM-DD 或 yyyy-MM-dd HH:mm:ss 真实后端测试输入 / 输出真实后端成功exit=0;duration=929ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +get-schedule --users 202397 --start 2026-07-14 --end 2026-07-15 --yes --format json 真实 stdout {
+ "code": "0",
+ "message": "success",
+ "result": [],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "code": "0",
+ "message": "success",
+ "result": [],
+ "success": true
+} |
||
dws attendance +get-self-setting --setting-scene <setting-scene> --user <user>read查询个人规则设置(打卡提醒/极速打卡/缺卡提醒等) |
dws mcp attendance query_self_setting --json '{"RuleMcpQuerySelfSettingRequest":<..>, "settingScene":<..>, "userId":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/query_self_setting输入 / CLI 输出输入 dws attendance +get-self-setting --setting-scene checkRemind --user x --yes stdout {
+ "_fake": true,
+ "args": {
+ "RuleMcpQuerySelfSettingRequest": {
+ "settingScene": "checkRemind",
+ "userId": "x"
+ }
+ },
+ "product": "attendance-wukong",
+ "tool": "query_self_setting"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "RuleMcpQuerySelfSettingRequest": {
+ "settingScene": "checkRemind",
+ "userId": "x"
+ }
+ },
+ "product": "attendance-wukong",
+ "tool": "query_self_setting"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=989ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +get-self-setting --setting-scene checkRemind --user 202397 --yes --format json 真实 stdout {
+ "code": "0",
+ "message": "success",
+ "result": {
+ "bossMonthReportType": null,
+ "bossPushStartMin": null,
+ "bossWeekReportType": null,
+ "canUpdateOffDuty": null,
+ "checkRemindSetting": {},
+ "checkRemindUserOffDuty": true,
+ "checkRemindUserOnDuty": true,
+ "checkResultMsg": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "enableOffdutyCheckRemindOfPc": true,
+ "enableOndutyCheckRemindOfPc": true,
+ "fastCheckLateNeedConfirm": null,
+ "lackRemindUser": null,
+ "lackSendTodoMsg": null,
+ "offdutyCheckType": null,
+ "offdutyRemindEndMin": null,
+ "offdutyRemindStartMin": null,
+ "ondutyCheckType": null,
+ "ondutyRemindEndMin": null,
+ "ondutyRemindStartMin": null,
+ "personDailyReportSwitch": null,
+ "personMonthReportType": null,
+ "personWeekReportType": null,
+ "userId": "202397",
+ "vibrationRemindSwitch": null,
+ "voiceRemindSwitch": null
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "code": "0",
+ "message": "success",
+ "result": {
+ "bossMonthReportType": null,
+ "bossPushStartMin": null,
+ "bossWeekReportType": null,
+ "canUpdateOffDuty": null,
+ "checkRemindSetting": {},
+ "checkRemindUserOffDuty": true,
+ "checkRemindUserOnDuty": true,
+ "checkResultMsg": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "enableOffdutyCheckRemindOfPc": true,
+ "enableOndutyCheckRemindOfPc": true,
+ "fastCheckLateNeedConfirm": null,
+ "lackRemindUser": null,
+ "lackSendTodoMsg": null,
+ "offdutyCheckType": null,
+ "offdutyRemindEndMin": null,
+ "offdutyRemindStartMin": null,
+ "ondutyCheckType": null,
+ "ondutyRemindEndMin": null,
+ "ondutyRemindStartMin": null,
+ "personDailyReportSwitch": null,
+ "personMonthReportType": null,
+ "personWeekReportType": null,
+ "userId": "202397",
+ "vibrationRemindSwitch": null,
+ "voiceRemindSwitch": null
+ },
+ "success": true
+} |
||
dws attendance +get-summary --user <user> --date <date> --stats-type <stats-type>read查询某个人的考勤统计摘要(周/月) |
dws mcp attendance get_user_attendance_summary --json '{"userId":<..>, "queryDate":<..>, "statsType":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);日期格式错误,应为 YYYY-MM-DD 或 yyyy-MM-dd HH:mm:ss输入 / CLI 输出输入 dws attendance +get-summary --user x --date x --stats-type week --yes stdout (空) stderr / error 日期格式错误,应为 YYYY-MM-DD 或 yyyy-MM-dd HH:mm:ss 最终用于判定的返回 日期格式错误,应为 YYYY-MM-DD 或 yyyy-MM-dd HH:mm:ss 真实后端测试输入 / 输出真实后端成功exit=0;duration=1315ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +get-summary --user 202397 --date 2026-07-15 --stats-type week --yes --format json 真实 stdout {
+ "errorCode": "0",
+ "errorMessage": "success",
+ "result": {
+ "items": [
+ {
+ "name": "平均工时",
+ "remark": "0小时",
+ "unit": "小时"
+ },
+ {
+ "name": "出勤天数",
+ "remark": "0天",
+ "unit": null
+ },
+ {
+ "name": "出勤班次",
+ "remark": "0个",
+ "unit": null
+ },
+ {
+ "name": "休息天数",
+ "remark": "0天",
+ "unit": null
+ },
+ {
+ "name": "迟到",
+ "remark": "0次",
+ "unit": "次"
+ },
+ {
+ "name": "早退",
+ "remark": "0次",
+ "unit": "次"
+ },
+ {
+ "name": "缺卡",
+ "remark": "0次",
+ "unit": "次"
+ },
+ {
+ "name": "旷工",
+ "remark": "0天",
+ "unit": null
+ },
+ {
+ "name": "外勤",
+ "remark": "0次",
+ "unit": null
+ },
+ {
+ "name": "加班",
+ "remark": "0小时",
+ "unit": null
+ },
+ {
+ "name": "补卡申请",
+ "remark": "0次",
+ "unit": null
+ }
+ ]
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "errorCode": "0",
+ "errorMessage": "success",
+ "result": {
+ "items": [
+ {
+ "name": "平均工时",
+ "remark": "0小时",
+ "unit": "小时"
+ },
+ {
+ "name": "出勤天数",
+ "remark": "0天",
+ "unit": null
+ },
+ {
+ "name": "出勤班次",
+ "remark": "0个",
+ "unit": null
+ },
+ {
+ "name": "休息天数",
+ "remark": "0天",
+ "unit": null
+ },
+ {
+ "name": "迟到",
+ "remark": "0次",
+ "unit": "次"
+ },
+ {
+ "name": "早退",
+ "remark": "0次",
+ "unit": "次"
+ },
+ {
+ "name": "缺卡",
+ "remark": "0次",
+ "unit": "次"
+ },
+ {
+ "name": "旷工",
+ "remark": "0天",
+ "unit": null
+ },
+ {
+ "name": "外勤",
+ "remark": "0次",
+ "unit": null
+ },
+ {
+ "name": "加班",
+ "remark": "0小时",
+ "unit": null
+ },
+ {
+ "name": "补卡申请",
+ "remark": "0次",
+ "unit": null
+ }
+ ]
+ },
+ "success": true
+} |
||
dws attendance +import-schedule --group-id <group-id> --schedules <schedules>write导入排班记录到排班制考勤组 |
dws mcp attendance generateTurnSchedule --json '{"GenerateTurnScheduleRequest":<..>, "groupId":<..>, "scheduleVOS":<..>, "param":<..>, "useHistoryGroupAndShift":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);invalid --schedules JSON: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws attendance +import-schedule --group-id 1 --schedules x --yes stdout (空) stderr / error invalid --schedules JSON: invalid character 'x' looking for beginning of value 最终用于判定的返回 invalid --schedules JSON: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1271ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test attendance +import-schedule --group-id 999999999999 --schedules '[{"userId":"202397","workDate":"2026-07-16 09:00:00","classId":999999999999,"isRest":"N"}]' --yes --format json真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/generateTurnSchedule)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "S0003",
+ "server_key": "attendance-wukong",
+ "trace_id": "2104a64c17840999034845189e085e"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/generateTurnSchedule)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "S0003",
+ "server_key": "attendance-wukong",
+ "trace_id": "2104a64c17840999034845189e085e"
+ }
+} |
||
dws attendance +list-approve --users <users> --types <types> --start <start> --end <end>read查询用户考勤审批单(补卡/加班/请假/出差外出) |
dws mcp attendance query_user_approve --json '{"QueryUserApproveRequest":<..>, "userIds":<..>, "bizTypes":<..>, "fromDate":<..>, "toDate":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);日期格式错误,应为 YYYY-MM-DD(如 2026-04-01): parsing time "x" as "2006-01-02": cannot parse "x" as "2006"输入 / CLI 输出输入 dws attendance +list-approve --users x --types x --start x --end x --yes stdout (空) stderr / error 日期格式错误,应为 YYYY-MM-DD(如 2026-04-01): parsing time "x" as "2006-01-02": cannot parse "x" as "2006" 最终用于判定的返回 日期格式错误,应为 YYYY-MM-DD(如 2026-04-01): parsing time "x" as "2006-01-02": cannot parse "x" as "2006" 真实后端测试输入 / 输出真实后端成功exit=0;duration=1208ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +list-approve --users 202397 --types leave --start 2026-07-14 --end 2026-07-15 --yes --format json 真实 stdout {
+ "code": "0",
+ "message": "success",
+ "result": [],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "code": "0",
+ "message": "success",
+ "result": [],
+ "success": true
+} |
||
dws attendance +list-leave-typesread查询当前用户可用的假期规则列表 |
dws mcp attendance get_leave_types --json '{"McpLeaveTypeRequest":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/get_leave_types输入 / CLI 输出输入 dws attendance +list-leave-types --yes stdout {
+ "_fake": true,
+ "args": {
+ "McpLeaveTypeRequest": {}
+ },
+ "product": "attendance-wukong",
+ "tool": "get_leave_types"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "McpLeaveTypeRequest": {}
+ },
+ "product": "attendance-wukong",
+ "tool": "get_leave_types"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1107ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +list-leave-types --yes --format json 真实 stdout {
+ "result": [
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "754f72b4-0476-4e7d-ae4c-c46486268c5c",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "事假",
+ "leaveStatisticType": "freedom",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_hour",
+ "leaveViewUnit": "hour",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "a49f333e-275b-489a-8ec7-2c2000b81f35",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "调休",
+ "leaveStatisticType": "balance_cycle_freedom",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_hour",
+ "leaveViewUnit": "hour",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "5c4380ea-6f9c-4955-bbe6-bc0d114e4676",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "病假",
+ "leaveStatisticType": "freedom",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_hour",
+ "leaveViewUnit": "hour",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "731ed089-62ff-4734-a6c7-3c8fcc8294fc",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "年假",
+ "leaveStatisticType": "balance_cycle",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_day",
+ "leaveViewUnit": "halfDay",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "8a551c65-d3e1-4671-9eaf-78dd4645b8c3",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "产假",
+ "leaveStatisticType": "once_max",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_day",
+ "leaveViewUnit": "day",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "904d3f51-1f73-4161-a50a-300d0009676d",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "陪产假",
+ "leaveStatisticType": "once_max",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_day",
+ "leaveViewUnit": "day",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "05e2ba99-1916-4be9-8166-54f6a652e3bc",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "婚假",
+ "leaveStatisticType": "once_max",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_day",
+ "leaveViewUnit": "day",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "b168cb41-fbca-4f28-8234-fc62e0b66a2b",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "例假",
+ "leaveStatisticType": "once_max",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_day",
+ "leaveViewUnit": "halfDay",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "9daf653b-b3dd-46ef-a2b0-dd160bbf08c4",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "丧假",
+ "leaveStatisticType": "once_max",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_day",
+ "leaveViewUnit": "day",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "3730df36-c05c-45e7-bac1-26b2ba137a25",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "哺乳假",
+ "leaveStatisticType": "freedom",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_hour",
+ "leaveViewUnit": "hour",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ }
+ ],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "result": [
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "754f72b4-0476-4e7d-ae4c-c46486268c5c",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "事假",
+ "leaveStatisticType": "freedom",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_hour",
+ "leaveViewUnit": "hour",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "a49f333e-275b-489a-8ec7-2c2000b81f35",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "调休",
+ "leaveStatisticType": "balance_cycle_freedom",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_hour",
+ "leaveViewUnit": "hour",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "5c4380ea-6f9c-4955-bbe6-bc0d114e4676",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "病假",
+ "leaveStatisticType": "freedom",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_hour",
+ "leaveViewUnit": "hour",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "731ed089-62ff-4734-a6c7-3c8fcc8294fc",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "年假",
+ "leaveStatisticType": "balance_cycle",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_day",
+ "leaveViewUnit": "halfDay",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "8a551c65-d3e1-4671-9eaf-78dd4645b8c3",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "产假",
+ "leaveStatisticType": "once_max",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_day",
+ "leaveViewUnit": "day",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "904d3f51-1f73-4161-a50a-300d0009676d",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "陪产假",
+ "leaveStatisticType": "once_max",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_day",
+ "leaveViewUnit": "day",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "05e2ba99-1916-4be9-8166-54f6a652e3bc",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "婚假",
+ "leaveStatisticType": "once_max",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_day",
+ "leaveViewUnit": "day",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "b168cb41-fbca-4f28-8234-fc62e0b66a2b",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "例假",
+ "leaveStatisticType": "once_max",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_day",
+ "leaveViewUnit": "halfDay",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "9daf653b-b3dd-46ef-a2b0-dd160bbf08c4",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "丧假",
+ "leaveStatisticType": "once_max",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_day",
+ "leaveViewUnit": "day",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ },
+ {
+ "allRecordCleanTime": null,
+ "bizType": null,
+ "corpId": "ding8196cd9a2b2405da24f2f5cc6abecb85",
+ "exsitFlag": "y",
+ "gmtCreate": 1650879712000,
+ "gmtModified": 1650879712000,
+ "leaveBalanceRuleVO": {},
+ "leaveCertificate": {},
+ "leaveCode": "3730df36-c05c-45e7-bac1-26b2ba137a25",
+ "leaveCycleStatisticInfoVO": {},
+ "leaveHourCeil": null,
+ "leaveName": "哺乳假",
+ "leaveStatisticType": "freedom",
+ "leaveStatus": "on",
+ "leaveTimeCeil": null,
+ "leaveTimeCeilMinUnit": null,
+ "leaveUnit": "percent_hour",
+ "leaveViewUnit": "hour",
+ "maxLeaveTime": null,
+ "minLeaveHour": null,
+ "naturalDayLeave": false,
+ "orderId": null,
+ "paidLeave": false,
+ "perHoursInDay": 0,
+ "remindRuleVO": {},
+ "source": "inner",
+ "submitTimeRuleVO": {},
+ "sysFlag": "n",
+ "userId": null,
+ "version": "1",
+ "visibilityRules": [],
+ "whenCanLeave": "entry"
+ }
+ ],
+ "success": true
+} |
||
dws attendance +list-report-columnsread获取企业考勤报表字段列表(仅管理员) |
dws mcp attendance get_report_columns |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/get_report_columns输入 / CLI 输出输入 dws attendance +list-report-columns --yes stdout {
+ "_fake": true,
+ "args": {},
+ "product": "attendance-wukong",
+ "tool": "get_report_columns"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {},
+ "product": "attendance-wukong",
+ "tool": "get_report_columns"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1351ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test attendance +list-report-columns --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/get_report_columns)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "AUTH_ERROR",
+ "server_key": "attendance-wukong",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。root.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"6001\",\"errorMsg\":\"无权限操作\"} ",
+ "trace_id": "2127d89817840997666188472e0756"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/get_report_columns)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "AUTH_ERROR",
+ "server_key": "attendance-wukong",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。root.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"6001\",\"errorMsg\":\"无权限操作\"} ",
+ "trace_id": "2127d89817840997666188472e0756"
+ }
+} |
||
dws attendance +my-attendanceread查我今天的考勤打卡记录(打卡流水,自动解析当前用户) |
-dws mcp attendance <tool> |
+dws attendance +my-attendanceread复合/智能型查我今天的考勤打卡记录(打卡流水,自动解析当前用户) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/get_current_user_profile;没能解析出当前登录用户的 userId,无法查询你的打卡记录;请确认已登录后重试。输入 / CLI 输出输入 dws attendance +my-attendance --yes stdout (空) stderr / error 没能解析出当前登录用户的 userId,无法查询你的打卡记录;请确认已登录后重试。 最终用于判定的返回 没能解析出当前登录用户的 userId,无法查询你的打卡记录;请确认已登录后重试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=1169ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +my-attendance --yes --format json 真实 stdout {
+ "code": "0",
+ "message": "success",
+ "result": [],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "code": "0",
+ "message": "success",
+ "result": [],
+ "success": true
+} |
dws attendance +query-report-data --users <users> --columns <columns> --start <start> --end <end>read根据字段查询考勤报表数据(仅管理员) |
dws mcp attendance get_report_columns_value --json '{"McpQueryParam":<..>, "targetUserIds":<..>, "columnIds":<..>, "fromDate":<..>, "toDate":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--start 格式错误,应为 yyyy-MM-dd HH:mm:ss: parsing time "x" as "2006-01-02 15:04:05": cannot parse "x" as "2006"输入 / CLI 输出输入 dws attendance +query-report-data --users x --columns x --start x --end x --yes stdout (空) stderr / error --start 格式错误,应为 yyyy-MM-dd HH:mm:ss: parsing time "x" as "2006-01-02 15:04:05": cannot parse "x" as "2006" 最终用于判定的返回 --start 格式错误,应为 yyyy-MM-dd HH:mm:ss: parsing time "x" as "2006-01-02 15:04:05": cannot parse "x" as "2006" 真实后端测试输入 / 输出真实后端成功exit=0;duration=998ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +query-report-data --users 202397 --columns 1001 --start '2026-07-15 10:00:00' --end '2026-07-15 16:00:00' --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": [],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": [],
+ "success": true
+} |
||
dws attendance +query-report-leave --users <users> --leave-names <leave-names> --start <start> --end <end>read查询用户假期数据(仅管理员) |
dws mcp attendance get_leave_time_by_leave_names --json '{"McpLeaveQueryParam":<..>, "targetUserIds":<..>, "leaveNames":<..>, "fromDate":<..>, "toDate":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--start 格式错误,应为 yyyy-MM-dd HH:mm:ss: parsing time "x" as "2006-01-02 15:04:05": cannot parse "x" as "2006"输入 / CLI 输出输入 dws attendance +query-report-leave --users x --leave-names x --start x --end x --yes stdout (空) stderr / error --start 格式错误,应为 yyyy-MM-dd HH:mm:ss: parsing time "x" as "2006-01-02 15:04:05": cannot parse "x" as "2006" 最终用于判定的返回 --start 格式错误,应为 yyyy-MM-dd HH:mm:ss: parsing time "x" as "2006-01-02 15:04:05": cannot parse "x" as "2006" 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1373ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test attendance +query-report-leave --users 202397 --leave-names '年假' --start '2026-07-15 10:00:00' --end '2026-07-15 16:00:00' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/get_leave_time_by_leave_names)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "AUTH_ERROR",
+ "server_key": "attendance-wukong",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。root.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"6001\",\"errorMsg\":\"无权限操作\"} ",
+ "trace_id": "2104a64c17840997679973065e085f"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/get_leave_time_by_leave_names)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "AUTH_ERROR",
+ "server_key": "attendance-wukong",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。root.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"6001\",\"errorMsg\":\"无权限操作\"} ",
+ "trace_id": "2104a64c17840997679973065e085f"
+ }
+} |
||
dws attendance +save-leave-balance --target <target> --leave-code <leave-code> --num <num> --reason <reason> --start <start> --end <end>write设置员工假期余额(SET 覆盖,非累加) |
dws mcp attendance update_leave_balance --json '{"targetUserId":<..>, "leaveCode":<..>, "quotaNum":<..>, "reason":<..>, "McpUpdateLeaveBalanceRequest":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--num 格式错误: strconv.ParseFloat: parsing "x": invalid syntax(应为数字,如 8 或 7.5)输入 / CLI 输出输入 dws attendance +save-leave-balance --target x --leave-code x --num x --reason x --start x --end x --yes stdout (空) stderr / error --num 格式错误: strconv.ParseFloat: parsing "x": invalid syntax(应为数字,如 8 或 7.5) 最终用于判定的返回 --num 格式错误: strconv.ParseFloat: parsing "x": invalid syntax(应为数字,如 8 或 7.5) 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1081ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test attendance +save-leave-balance --target __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --leave-code DWSREALTESTNOSUCHID0000000000000 --num 1 --reason 'DWS shortcut 真实测试安全负向清理' --start 2026-07-16 --end 2026-08-14 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 无权更新指定员工的假期余额 (operation: attendance-wukong/update_leave_balance)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PERMISSION_DENIED",
+ "server_key": "attendance-wukong",
+ "trace_id": "2127d89817840999045751134e079c"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 无权更新指定员工的假期余额 (operation: attendance-wukong/update_leave_balance)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PERMISSION_DENIED",
+ "server_key": "attendance-wukong",
+ "trace_id": "2127d89817840999045751134e079c"
+ }
+} |
||
dws attendance +search-adjustment-rule --query <query> --page <page> --limit <limit>read查询当前用户可管理的补卡规则列表 |
dws mcp attendance <tool> |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/get_adjustment_rule输入 / CLI 输出输入 dws attendance +search-adjustment-rule --query x --page 1 --limit 1 --yes stdout {
+ "count": 0,
+ "rules": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "rules": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=985ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +search-adjustment-rule --query '测试' --page 1 --limit 10 --yes --format json 真实 stdout {
+ "count": 0,
+ "rules": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "rules": []
+} |
||
dws attendance +search-class --query <query> --filter-type <filter-type> --page <page> --limit <limit>read查询当前用户可管理的班次详情列表 |
dws mcp attendance <tool> |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/get_class_list输入 / CLI 输出输入 dws attendance +search-class --query x --filter-type ALL --page 1 --limit 1 --yes stdout {
+ "classes": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "classes": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1043ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +search-class --query '测试' --filter-type ALL --page 1 --limit 10 --yes --format json 真实 stdout {
+ "classes": [],
+ "count": 0
+}真实 stderr / error (空) 真实返回 {
+ "classes": [],
+ "count": 0
+} |
||
dws attendance +search-group --query <query> --type <type> --query-position <query-position> --query-ble <query-ble> --page <page> --limit <limit>read查询当前用户可管理的考勤组列表 |
dws mcp attendance <tool> |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/get_simple_groups输入 / CLI 输出输入 dws attendance +search-group --query x --type FIXED --query-position --query-ble --page 1 --limit 1 --yes stdout {
+ "count": 0,
+ "groups": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "groups": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=939ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +search-group --query '测试' --type FIXED --query-position --query-ble --page 1 --limit 10 --yes --format json 真实 stdout {
+ "count": 0,
+ "groups": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "groups": []
+} |
||
dws attendance +search-overtime-rule --query <query> --page <page> --limit <limit>read查询当前用户可管理的加班规则列表 |
dws mcp attendance <tool> |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/get_overtime_rule输入 / CLI 输出输入 dws attendance +search-overtime-rule --query x --page 1 --limit 1 --yes stdout {
+ "count": 0,
+ "rules": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "rules": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=997ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +search-overtime-rule --query '测试' --page 1 --limit 10 --yes --format json 真实 stdout {
+ "count": 0,
+ "rules": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "rules": []
+} |
||
dws attendance +this-monthread查我本月的考勤打卡记录(打卡流水,自动解析当前用户) |
-dws mcp attendance <tool> |
+dws attendance +this-monthread复合/智能型查我本月的考勤打卡记录(打卡流水,自动解析当前用户) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/get_current_user_profile;没能解析出当前登录用户的 userId,无法查询你的打卡记录;请确认已登录后重试。输入 / CLI 输出输入 dws attendance +this-month --yes stdout (空) stderr / error 没能解析出当前登录用户的 userId,无法查询你的打卡记录;请确认已登录后重试。 最终用于判定的返回 没能解析出当前登录用户的 userId,无法查询你的打卡记录;请确认已登录后重试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=1108ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test attendance +this-month --yes --format json 真实 stdout {
+ "code": "0",
+ "message": "success",
+ "result": [],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "code": "0",
+ "message": "success",
+ "result": [],
+ "success": true
+} |
dws attendance +update-class --class-id <class-id> --name <name> --owner <owner> --class-vo <class-vo>write更新已有班次(仅传要修改的字段) |
dws mcp attendance update_class_setting --json '{"TopAtClassVO":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);invalid --class-vo JSON: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws attendance +update-class --class-id 1 --name x --owner x --class-vo x --yes stdout (空) stderr / error invalid --class-vo JSON: invalid character 'x' looking for beginning of value 最终用于判定的返回 invalid --class-vo JSON: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1248ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test attendance +update-class --class-id 999999999999 --name 'DWS shortcut 真实测试 20260715-151724' --owner __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --class-vo '{"sections":[{"times":[{"checkType":"OnDuty","checkTime":"09:00","across":0},{"checkType":"OffDuty","checkTime":"18:00","across":0}]}]}' --yes --format json真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/update_class_setting)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "S0001",
+ "server_key": "attendance-wukong",
+ "trace_id": "0b5deb3217840999058236471e08b5"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/update_class_setting)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "S0001",
+ "server_key": "attendance-wukong",
+ "trace_id": "0b5deb3217840999058236471e08b5"
+ }
+} |
||
dws attendance +update-group --group-id <group-id> --name <name> --type <type> --owner <owner> --enable-outside-check <enable-outside-check> --class-ids <class-ids> --group-vo <group-vo>write更新考勤组配置(仅修改需要变更的字段) |
dws mcp attendance update_group_setting --json '{"groupId":<..>, "groupVO":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);invalid --group-vo JSON: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws attendance +update-group --group-id 1 --name x --type FIXED --owner x --enable-outside-check true --class-ids x --group-vo x --yes stdout (空) stderr / error invalid --group-vo JSON: invalid character 'x' looking for beginning of value 最终用于判定的返回 invalid --group-vo JSON: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1175ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test attendance +update-group --group-id 999999999999 --name 'DWS shortcut 真实测试 20260715-151724' --type FIXED --owner __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --enable-outside-check true --class-ids '[999999999999]' --group-vo '{"defaultClassId":999999999999,"workDayClassList":[999999999999,999999999999,999999999999,999999999999,999999999999,0,0]}' --yes --format json真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/update_group_setting)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "S0001",
+ "server_key": "attendance-wukong",
+ "trace_id": "0b5deb3217840999068826691e087a"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/update_group_setting)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "S0001",
+ "server_key": "attendance-wukong",
+ "trace_id": "0b5deb3217840999068826691e087a"
+ }
+} |
||
dws attendance +update-group-members --group-id <group-id> --add-users <add-users> --remove-users <remove-users> --add-extra-users <add-extra-users> --remove-extra-users <remove-extra-users> --add-depts <add-depts> --remove-depts <remove-depts>write更新考勤组成员(增删考勤人员/部门/无需考勤人员) |
dws mcp attendance update_group_member --json '{"groupId":<..>, "updateParam":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; attendance-wukong/update_group_member输入 / CLI 输出输入 dws attendance +update-group-members --group-id 1 --add-users x --remove-users x --add-extra-users x --remove-extra-users x --add-depts x --remove-depts x --yes stdout {
+ "_fake": true,
+ "args": {
+ "groupId": 1,
+ "updateParam": {
+ "addDepts": [
+ "x"
+ ],
+ "addExtraUsers": [
+ "x"
+ ],
+ "addUsers": [
+ "x"
+ ],
+ "removeDepts": [
+ "x"
+ ],
+ "removeExtraUsers": [
+ "x"
+ ],
+ "removeUsers": [
+ "x"
+ ]
+ }
+ },
+ "product": "attendance-wukong",
+ "tool": "update_group_member"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "groupId": 1,
+ "updateParam": {
+ "addDepts": [
+ "x"
+ ],
+ "addExtraUsers": [
+ "x"
+ ],
+ "addUsers": [
+ "x"
+ ],
+ "removeDepts": [
+ "x"
+ ],
+ "removeExtraUsers": [
+ "x"
+ ],
+ "removeUsers": [
+ "x"
+ ]
+ }
+ },
+ "product": "attendance-wukong",
+ "tool": "update_group_member"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1170ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test attendance +update-group-members --group-id 999999999999 --add-users __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --remove-users '' --add-extra-users '' --remove-extra-users '' --add-depts '' --remove-depts '' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/update_group_member)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "S0002",
+ "server_key": "attendance-wukong",
+ "trace_id": "2127d89817840999081094644e07dd"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: attendance-wukong/update_group_member)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "S0002",
+ "server_key": "attendance-wukong",
+ "trace_id": "2127d89817840999081094644e07dd"
+ }
+} |
||
dws attendance +update-leave-type --leave-code <leave-code> --name <name> --unit <unit> --paid <paid> --per-hours <per-hours> --when-can-leave <when-can-leave> --visibility-rules <visibility-rules>write更新已有假期规则(仅传要修改的字段) |
dws mcp attendance save_leave_type --json '{"leaveCode":<..>, "McpSaveLeaveTypeRequest":<..>}' |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);invalid --visibility-rules JSON: invalid character 'x' looking for beginning of value输入 / CLI 输出输入 dws attendance +update-leave-type --leave-code x --name x --unit day --paid --per-hours 1 --when-can-leave entry --visibility-rules x --yes stdout (空) stderr / error invalid --visibility-rules JSON: invalid character 'x' looking for beginning of value 最终用于判定的返回 invalid --visibility-rules JSON: invalid character 'x' looking for beginning of value 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1208ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test attendance +update-leave-type --leave-code DWSREALTESTNOSUCHID0000000000000 --name 'DWS shortcut 真实测试 20260715-151724' --unit day --paid --per-hours 1 --when-can-leave entry --visibility-rules '[{"type":"dept","visible":["-1"]}]' --yes --format json真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[RESOURCE_NOT_FOUND] Requested resource not found (operation: attendance-wukong/save_leave_type)\n hint: Check if the resource exists or if your account has permission",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "INVALID_PARAMS",
+ "server_key": "attendance-wukong",
+ "trace_id": "0bb7c36217840999093924897e07fe"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[RESOURCE_NOT_FOUND] Requested resource not found (operation: attendance-wukong/save_leave_type)\n hint: Check if the resource exists or if your account has permission",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "INVALID_PARAMS",
+ "server_key": "attendance-wukong",
+ "trace_id": "0bb7c36217840999093924897e07fe"
+ }
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 |
|---|---|---|---|
dws devapp +create --name <name> --desc <desc> --icon-media-id <icon-media-id>write创建开放平台企业内部应用 |
dws mcp devapp create_dev_app --json '{"name":<..>, "desc":<..>, "iconMediaId":<..>}' |
lark-cli apps +create |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/create_dev_app输入 / CLI 输出输入 dws devapp +create --name x --desc x --icon-media-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "desc": "x",
+ "iconMediaId": "x",
+ "name": "x"
+ },
+ "product": "devapp",
+ "tool": "create_dev_app"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "desc": "x",
+ "iconMediaId": "x",
+ "name": "x"
+ },
+ "product": "devapp",
+ "tool": "create_dev_app"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1464ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +create --name 'DWS测试应用0715' --desc 'DWS shortcut 真实测试,可删除' --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "appKey": "dingyqsdchocxp3xrfm3",
+ "desc": "DWS shortcut 真实测试,可删除",
+ "icon": "@lADPDfmVQafoVxrMyMzI",
+ "iconUrl": "https://i01.lw.aliimg.com/media/lADPDfmVQafoVxrMyMzI_200_200.jpg",
+ "name": "DWS测试应用0715",
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "appKey": "dingyqsdchocxp3xrfm3",
+ "desc": "DWS shortcut 真实测试,可删除",
+ "icon": "@lADPDfmVQafoVxrMyMzI",
+ "iconUrl": "https://i01.lw.aliimg.com/media/lADPDfmVQafoVxrMyMzI_200_200.jpg",
+ "name": "DWS测试应用0715",
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692"
+ },
+ "success": true
+} |
dws devapp +credentials-get --unified-app-id <unified-app-id>read读取开放平台应用凭证 |
dws mcp devapp get_dev_app_credentials --json '{"unifiedAppId":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/get_dev_app_credentials输入 / CLI 输出输入 dws devapp +credentials-get --unified-app-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "get_dev_app_credentials"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "get_dev_app_credentials"
+}真实后端测试输入 / 输出待真实执行exit=None;duration=0ms;held; sensitive credential read 失败归因 / 可修复性 人工授权后执行 / 需人工授权 +高风险或无安全目标,需人工逐项授权后执行。 真实输入 真实 stdout (空) 真实 stderr / error 该命令会读取真实应用凭证/密钥;不能用真实 app 自动执行。当前仅用占位 ID 验证负向路径,真实成功需人工在安全环境单独确认。 真实返回 该命令会读取真实应用凭证/密钥;不能用真实 app 自动执行。当前仅用占位 ID 验证负向路径,真实成功需人工在安全环境单独确认。 |
dws devapp +delete --unified-app-id <unified-app-id>high-risk-write删除开放平台企业内部应用(不可逆) |
dws mcp devapp delete_dev_app --json '{"unifiedAppId":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/delete_dev_app输入 / CLI 输出输入 dws devapp +delete --unified-app-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "delete_dev_app"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "delete_dev_app"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2868ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +delete --unified-app-id c5a8e611-1555-44a0-ba8d-9617ab599692 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "deleted": true,
+ "message": "应用删除成功。",
+ "success": true,
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "deleted": true,
+ "message": "应用删除成功。",
+ "success": true,
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692"
+ },
+ "success": true
+} |
dws devapp +disable --unified-app-id <unified-app-id>high-risk-write停用开放平台企业内部应用 |
dws mcp devapp disable_dev_app --json '{"unifiedAppId":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/disable_dev_app输入 / CLI 输出输入 dws devapp +disable --unified-app-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "disable_dev_app"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "disable_dev_app"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2583ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +disable --unified-app-id c5a8e611-1555-44a0-ba8d-9617ab599692 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "message": "应用已停用。",
+ "success": true,
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "message": "应用已停用。",
+ "success": true,
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692"
+ },
+ "success": true
+} |
dws devapp +enable --unified-app-id <unified-app-id>write启用开放平台企业内部应用 |
dws mcp devapp enable_dev_app --json '{"unifiedAppId":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/enable_dev_app输入 / CLI 输出输入 dws devapp +enable --unified-app-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "enable_dev_app"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "enable_dev_app"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1506ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +enable --unified-app-id c5a8e611-1555-44a0-ba8d-9617ab599692 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "message": "应用已启用。",
+ "success": true,
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "message": "应用已启用。",
+ "success": true,
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692"
+ },
+ "success": true
+} |
dws devapp +event-list --unified-app-id <unified-app-id> --keyword <keyword>read查询应用已订阅的事件列表 |
dws mcp devapp <tool> |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/list_dev_app_events输入 / CLI 输出输入 dws devapp +event-list --unified-app-id x --keyword x --cursor x --page-size 1 --yes stdout {
+ "count": 0,
+ "events": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "events": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1214ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +event-list --unified-app-id 678f27ec-4339-49d8-9c49-371b284bf552 --keyword '测试' --cursor '' --page-size 10 --yes --format json 真实 stdout {
+ "count": 0,
+ "events": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "events": []
+} |
dws devapp +event-subscribe --unified-app-id <unified-app-id> --event-codes <event-codes>write订阅应用事件回调 |
dws mcp devapp subscribe_dev_app_events --json '{"unifiedAppId":<..>, "eventCodes":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/subscribe_dev_app_events输入 / CLI 输出输入 dws devapp +event-subscribe --unified-app-id x --event-codes x --yes stdout {
+ "_fake": true,
+ "args": {
+ "eventCodes": [
+ "x"
+ ],
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "subscribe_dev_app_events"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "eventCodes": [
+ "x"
+ ],
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "subscribe_dev_app_events"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1034ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test devapp +event-subscribe --unified-app-id DWSREALTESTNOSUCHID0000000000000 --event-codes '[]' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 当前用户没有应用事件订阅权限 (operation: devapp/subscribe_dev_app_events)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "503",
+ "server_key": "devapp",
+ "trace_id": "2104a64c17840999564022020e08c7"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 当前用户没有应用事件订阅权限 (operation: devapp/subscribe_dev_app_events)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "503",
+ "server_key": "devapp",
+ "trace_id": "2104a64c17840999564022020e08c7"
+ }
+} |
dws devapp +event-unsubscribe --unified-app-id <unified-app-id> --event-codes <event-codes>high-risk-write取消订阅应用事件 |
dws mcp devapp unsubscribe_dev_app_events --json '{"unifiedAppId":<..>, "eventCodes":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/unsubscribe_dev_app_events输入 / CLI 输出输入 dws devapp +event-unsubscribe --unified-app-id x --event-codes x --yes stdout {
+ "_fake": true,
+ "args": {
+ "eventCodes": [
+ "x"
+ ],
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "unsubscribe_dev_app_events"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "eventCodes": [
+ "x"
+ ],
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "unsubscribe_dev_app_events"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1134ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test devapp +event-unsubscribe --unified-app-id DWSREALTESTNOSUCHID0000000000000 --event-codes '[]' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: devapp/unsubscribe_dev_app_events)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "AUTH_ERROR",
+ "server_key": "devapp",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。ServiceResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"503\",\"errorMsg\":\"当前用户没有应用事件订阅权限\"} ",
+ "trace_id": "0bb7c36217840999575698500e07db"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: devapp/unsubscribe_dev_app_events)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "AUTH_ERROR",
+ "server_key": "devapp",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。ServiceResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"503\",\"errorMsg\":\"当前用户没有应用事件订阅权限\"} ",
+ "trace_id": "0bb7c36217840999575698500e07db"
+ }
+} |
dws devapp +get --unified-app-id <unified-app-id>read查询开放平台企业内部应用详情 |
dws mcp devapp get_dev_app --json '{"unifiedAppId":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/get_dev_app输入 / CLI 输出输入 dws devapp +get --unified-app-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "get_dev_app"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "get_dev_app"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1268ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +get --unified-app-id 678f27ec-4339-49d8-9c49-371b284bf552 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "appKey": "dingdtqbtxgtn2r5uyge",
+ "appStatus": "normal",
+ "canDelete": true,
+ "canUpdate": true,
+ "creator": "董鑫阳",
+ "desc": "DTDennisLobster",
+ "gmtCreate": "2026-03-06 10:41:40",
+ "gmtModified": "2026-03-06 10:41:40",
+ "icon": "@lADPDfmVQafoVxrMyMzI",
+ "iconUrl": "https://i01.lw.aliimg.com/media/lADPDfmVQafoVxrMyMzI_200_200.jpg",
+ "name": "DTDennisLobster",
+ "supportHarmony": false,
+ "unifiedAppId": "678f27ec-4339-49d8-9c49-371b284bf552",
+ "versionStatus": "INIT"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "appKey": "dingdtqbtxgtn2r5uyge",
+ "appStatus": "normal",
+ "canDelete": true,
+ "canUpdate": true,
+ "creator": "董鑫阳",
+ "desc": "DTDennisLobster",
+ "gmtCreate": "2026-03-06 10:41:40",
+ "gmtModified": "2026-03-06 10:41:40",
+ "icon": "@lADPDfmVQafoVxrMyMzI",
+ "iconUrl": "https://i01.lw.aliimg.com/media/lADPDfmVQafoVxrMyMzI_200_200.jpg",
+ "name": "DTDennisLobster",
+ "supportHarmony": false,
+ "unifiedAppId": "678f27ec-4339-49d8-9c49-371b284bf552",
+ "versionStatus": "INIT"
+ },
+ "success": true
+} |
dws devapp +list --name <name> --app-key <app-key> --app-group-id <app-group-id> --creator <creator> --robot-name <robot-name> --develop-type <develop-type> --filter-cool-app <filter-cool-app> --sort-type <sort-type> --sort-order <sort-order>read查询开放平台企业内部应用列表 |
dws mcp devapp <tool> |
lark-cli apps +list |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/list_dev_app输入 / CLI 输出输入 dws devapp +list --name x --app-key x --app-group-id 1 --creator x --robot-name x --develop-type 1 --filter-cool-app 1 --sort-type x --sort-order x --cursor x --page-size 1 --yes stdout {
+ "apps": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "apps": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=8524ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +list --name 'DWS shortcut 真实测试' --app-key x --app-group-id 1 --creator x --robot-name x --develop-type 1 --filter-cool-app 1 --sort-type x --sort-order x --cursor '' --page-size 10 --yes --format json 真实 stdout {
+ "apps": [],
+ "count": 0
+}真实 stderr / error (空) 真实返回 {
+ "apps": [],
+ "count": 0
+} |
dws devapp +member-add --unified-app-id <unified-app-id> --user-ids <user-ids> --member-type <member-type>write添加开放平台应用成员 |
dws mcp devapp add_dev_app_members --json '{"unifiedAppId":<..>, "userIds":<..>, "memberType":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/add_dev_app_members输入 / CLI 输出输入 dws devapp +member-add --unified-app-id x --user-ids x --member-type x --yes stdout {
+ "_fake": true,
+ "args": {
+ "memberType": "x",
+ "unifiedAppId": "x",
+ "userIds": [
+ "x"
+ ]
+ },
+ "product": "devapp",
+ "tool": "add_dev_app_members"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "memberType": "x",
+ "unifiedAppId": "x",
+ "userIds": [
+ "x"
+ ]
+ },
+ "product": "devapp",
+ "tool": "add_dev_app_members"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2393ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +member-add --unified-app-id c5a8e611-1555-44a0-ba8d-9617ab599692 --user-ids 103262 --member-type DEVELOPER --yes --format json 真实 stdout {
+ "memberType": "DEVELOPER",
+ "operation": "ADDED",
+ "success": true,
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692",
+ "userIds": [
+ "103262"
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "memberType": "DEVELOPER",
+ "operation": "ADDED",
+ "success": true,
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692",
+ "userIds": [
+ "103262"
+ ]
+} |
dws devapp +member-list --unified-app-id <unified-app-id>read查询开放平台应用成员 |
dws mcp devapp list_dev_app_members --json '{"unifiedAppId":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/list_dev_app_members输入 / CLI 输出输入 dws devapp +member-list --unified-app-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "list_dev_app_members"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "list_dev_app_members"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1404ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +member-list --unified-app-id 678f27ec-4339-49d8-9c49-371b284bf552 --yes --format json 真实 stdout {
+ "members": [
+ {
+ "memberType": "OWNER",
+ "name": "董鑫阳",
+ "userId": "202397"
+ }
+ ],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "members": [
+ {
+ "memberType": "OWNER",
+ "name": "董鑫阳",
+ "userId": "202397"
+ }
+ ],
+ "success": true
+} |
dws devapp +member-remove --unified-app-id <unified-app-id> --user-ids <user-ids> --member-type <member-type>high-risk-write移除开放平台应用成员 |
dws mcp devapp remove_dev_app_members --json '{"unifiedAppId":<..>, "userIds":<..>, "memberType":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/remove_dev_app_members输入 / CLI 输出输入 dws devapp +member-remove --unified-app-id x --user-ids x --member-type x --yes stdout {
+ "_fake": true,
+ "args": {
+ "memberType": "x",
+ "unifiedAppId": "x",
+ "userIds": [
+ "x"
+ ]
+ },
+ "product": "devapp",
+ "tool": "remove_dev_app_members"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "memberType": "x",
+ "unifiedAppId": "x",
+ "userIds": [
+ "x"
+ ]
+ },
+ "product": "devapp",
+ "tool": "remove_dev_app_members"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1188ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +member-remove --unified-app-id c5a8e611-1555-44a0-ba8d-9617ab599692 --user-ids 103262 --member-type DEVELOPER --yes --format json 真实 stdout {
+ "memberType": "DEVELOPER",
+ "operation": "REMOVED",
+ "success": true,
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692",
+ "userIds": [
+ "103262"
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "memberType": "DEVELOPER",
+ "operation": "REMOVED",
+ "success": true,
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692",
+ "userIds": [
+ "103262"
+ ]
+} |
dws devapp +permission-add --unified-app-id <unified-app-id> --scope-values <scope-values>write申请开放平台应用权限点 |
dws mcp devapp apply_dev_app_permissions --json '{"unifiedAppId":<..>, "scopeValues":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/apply_dev_app_permissions输入 / CLI 输出输入 dws devapp +permission-add --unified-app-id x --scope-values x --yes stdout {
+ "_fake": true,
+ "args": {
+ "scopeValues": [
+ "x"
+ ],
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "apply_dev_app_permissions"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "scopeValues": [
+ "x"
+ ],
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "apply_dev_app_permissions"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1186ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test devapp +permission-add --unified-app-id DWSREALTESTNOSUCHID0000000000000 --scope-values '[]' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 当前用户没有开发者身份 (operation: devapp/apply_dev_app_permissions)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "503",
+ "server_key": "devapp",
+ "trace_id": "2127d89817840999587758457e079c"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 当前用户没有开发者身份 (operation: devapp/apply_dev_app_permissions)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "503",
+ "server_key": "devapp",
+ "trace_id": "2127d89817840999587758457e079c"
+ }
+} |
dws devapp +permission-list --unified-app-id <unified-app-id> --keyword <keyword> --scope-value <scope-value> --auth-status <auth-status> --scope-type <scope-type> --api-status <api-status>read查询开放平台应用权限列表 |
dws mcp devapp <tool> |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/list_dev_app_permissions输入 / CLI 输出输入 dws devapp +permission-list --unified-app-id x --keyword x --scope-value x --auth-status x --scope-type x --api-status x --cursor x --page-size 1 --yes stdout {
+ "count": 0,
+ "permissions": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "permissions": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1578ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +permission-list --unified-app-id 678f27ec-4339-49d8-9c49-371b284bf552 --keyword '测试' --auth-status ALL --cursor '' --page-size 10 --yes --format json 真实 stdout {
+ "count": 0,
+ "permissions": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "permissions": []
+} |
dws devapp +permission-remove --unified-app-id <unified-app-id> --scope-values <scope-values>high-risk-write取消开放平台应用权限点 |
dws mcp devapp remove_dev_app_permissions --json '{"unifiedAppId":<..>, "scopeValues":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/remove_dev_app_permissions输入 / CLI 输出输入 dws devapp +permission-remove --unified-app-id x --scope-values x --yes stdout {
+ "_fake": true,
+ "args": {
+ "scopeValues": [
+ "x"
+ ],
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "remove_dev_app_permissions"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "scopeValues": [
+ "x"
+ ],
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "remove_dev_app_permissions"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1061ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test devapp +permission-remove --unified-app-id DWSREALTESTNOSUCHID0000000000000 --scope-values '[]' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 当前用户没有开发者身份 (operation: devapp/remove_dev_app_permissions)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "503",
+ "server_key": "devapp",
+ "trace_id": "2104a64c17840999598445247e085e"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 当前用户没有开发者身份 (operation: devapp/remove_dev_app_permissions)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "503",
+ "server_key": "devapp",
+ "trace_id": "2104a64c17840999598445247e085e"
+ }
+} |
dws devapp +robot-config --unified-app-id <unified-app-id> --name <name> --brief <brief> --desc <desc> --icon-media-id <icon-media-id> --outgoing-url <outgoing-url> --event-callback-url <event-callback-url> --mode <mode> --skills <skills> --add-scope <add-scope> --disable-ssl-verify <disable-ssl-verify>write创建或更新现有应用的机器人配置(upsert) |
dws mcp devapp set_extension_robot_config --json '{"unifiedAppId":<..>, "name":<..>, "brief":<..>, "desc":<..>, "iconMediaId":<..>, "outgoingUrl":<..>, "eventCallbackUrl":<..>, "mode":<..>, "skills":<..>, "addScope":<..>, "disableSSLVerify":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/set_extension_robot_config输入 / CLI 输出输入 dws devapp +robot-config --unified-app-id x --name x --brief x --desc x --icon-media-id x --outgoing-url x --event-callback-url x --mode HTTPS --skills x --add-scope --disable-ssl-verify --yes stdout {
+ "_fake": true,
+ "args": {
+ "addScope": true,
+ "brief": "x",
+ "desc": "x",
+ "disableSSLVerify": true,
+ "eventCallbackUrl": "x",
+ "iconMediaId": "x",
+ "mode": "HTTPS",
+ "name": "x",
+ "outgoingUrl": "x",
+ "skills": [
+ "x"
+ ],
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "set_extension_robot_config"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "addScope": true,
+ "brief": "x",
+ "desc": "x",
+ "disableSSLVerify": true,
+ "eventCallbackUrl": "x",
+ "iconMediaId": "x",
+ "mode": "HTTPS",
+ "name": "x",
+ "outgoingUrl": "x",
+ "skills": [
+ "x"
+ ],
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "set_extension_robot_config"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1167ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test devapp +robot-config --unified-app-id DWSREALTESTNOSUCHID0000000000000 --name 'DWS shortcut 真实测试 20260715-151724' --brief x --desc 'DWS shortcut 真实测试描述,可删除' --icon-media-id DWSREALTESTNOSUCHID0000000000000 --outgoing-url https://example.invalid/dws-shortcut-real-test --event-callback-url https://example.invalid/dws-shortcut-real-test --mode HTTPS --skills '[]' --add-scope --disable-ssl-verify --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: devapp/set_extension_robot_config)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "AUTH_ERROR",
+ "server_key": "devapp",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。ServiceResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"503\",\"errorMsg\":\"当前用户没有应用机器人配置权限\"} ",
+ "trace_id": "0bb7c36217840999609828961e07db"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: devapp/set_extension_robot_config)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "AUTH_ERROR",
+ "server_key": "devapp",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。ServiceResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"503\",\"errorMsg\":\"当前用户没有应用机器人配置权限\"} ",
+ "trace_id": "0bb7c36217840999609828961e07db"
+ }
+} |
dws devapp +robot-disable --unified-app-id <unified-app-id>high-risk-write停用现有应用的机器人能力 |
dws mcp devapp disable_dev_app_robot --json '{"unifiedAppId":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/disable_dev_app_robot输入 / CLI 输出输入 dws devapp +robot-disable --unified-app-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "disable_dev_app_robot"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "disable_dev_app_robot"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1062ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test devapp +robot-disable --unified-app-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: devapp/disable_dev_app_robot)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "AUTH_ERROR",
+ "server_key": "devapp",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。ServiceResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"503\",\"errorMsg\":\"当前用户没有应用机器人配置权限\"} ",
+ "trace_id": "2104a64c17840999620461113e08ee"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: devapp/disable_dev_app_robot)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "AUTH_ERROR",
+ "server_key": "devapp",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。ServiceResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"503\",\"errorMsg\":\"当前用户没有应用机器人配置权限\"} ",
+ "trace_id": "2104a64c17840999620461113e08ee"
+ }
+} |
dws devapp +robot-enable --unified-app-id <unified-app-id>write启用现有应用机器人能力(纯启用,无需配置字段) |
dws mcp devapp enable_dev_app_robot --json '{"unifiedAppId":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/enable_dev_app_robot输入 / CLI 输出输入 dws devapp +robot-enable --unified-app-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "enable_dev_app_robot"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "enable_dev_app_robot"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1306ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test devapp +robot-enable --unified-app-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: devapp/enable_dev_app_robot)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "AUTH_ERROR",
+ "server_key": "devapp",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。ServiceResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"503\",\"errorMsg\":\"当前用户没有应用机器人配置权限\"} ",
+ "trace_id": "0bb7c36217840999632641525e0758"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: devapp/enable_dev_app_robot)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "AUTH_ERROR",
+ "server_key": "devapp",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。ServiceResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"503\",\"errorMsg\":\"当前用户没有应用机器人配置权限\"} ",
+ "trace_id": "0bb7c36217840999632641525e0758"
+ }
+} |
dws devapp +robot-get --unified-app-id <unified-app-id>read查询现有应用的机器人配置 |
dws mcp devapp get_extension_robot_config --json '{"unifiedAppId":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/get_extension_robot_config输入 / CLI 输出输入 dws devapp +robot-get --unified-app-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "get_extension_robot_config"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "get_extension_robot_config"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1204ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +robot-get --unified-app-id 678f27ec-4339-49d8-9c49-371b284bf552 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "configured": false,
+ "message": "应用未配置机器人。",
+ "robotStatus": "UNCONFIGURED",
+ "unifiedAppId": "678f27ec-4339-49d8-9c49-371b284bf552"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "configured": false,
+ "message": "应用未配置机器人。",
+ "robotStatus": "UNCONFIGURED",
+ "unifiedAppId": "678f27ec-4339-49d8-9c49-371b284bf552"
+ },
+ "success": true
+} |
dws devapp +security-config --unified-app-id <unified-app-id> --ip-whitelist <ip-whitelist> --redirect-urls <redirect-urls> --sso-urls <sso-urls>write更新开放平台应用安全配置(整组覆盖,非追加) |
dws mcp devapp update_dev_app_security_config --json '{"unifiedAppId":<..>, "ipWhitelist":<..>, "redirectUrls":<..>, "ssoUrls":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/update_dev_app_security_config输入 / CLI 输出输入 dws devapp +security-config --unified-app-id x --ip-whitelist x --redirect-urls x --sso-urls x --yes stdout {
+ "_fake": true,
+ "args": {
+ "ipWhitelist": [
+ "x"
+ ],
+ "redirectUrls": [
+ "x"
+ ],
+ "ssoUrls": [
+ "x"
+ ],
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "update_dev_app_security_config"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "ipWhitelist": [
+ "x"
+ ],
+ "redirectUrls": [
+ "x"
+ ],
+ "ssoUrls": [
+ "x"
+ ],
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "update_dev_app_security_config"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1205ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test devapp +security-config --unified-app-id DWSREALTESTNOSUCHID0000000000000 --ip-whitelist 127.0.0.1 --redirect-urls https://example.invalid/dws-shortcut-real-test --sso-urls https://example.invalid/dws-shortcut-real-test --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 当前用户没有开发者身份 (operation: devapp/update_dev_app_security_config)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "503",
+ "server_key": "devapp",
+ "trace_id": "2104a64c17840999645522046e0817"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 当前用户没有开发者身份 (operation: devapp/update_dev_app_security_config)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "503",
+ "server_key": "devapp",
+ "trace_id": "2104a64c17840999645522046e0817"
+ }
+} |
dws devapp +update --unified-app-id <unified-app-id> --name <name> --desc <desc> --icon-media-id <icon-media-id>write修改开放平台企业内部应用基础信息 |
dws mcp devapp update_dev_app --json '{"unifiedAppId":<..>, "name":<..>, "desc":<..>, "iconMediaId":<..>}' |
lark-cli apps +update |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/update_dev_app输入 / CLI 输出输入 dws devapp +update --unified-app-id x --name x --desc x --icon-media-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "desc": "x",
+ "iconMediaId": "x",
+ "name": "x",
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "update_dev_app"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "desc": "x",
+ "iconMediaId": "x",
+ "name": "x",
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "update_dev_app"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=5611ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +update --unified-app-id c5a8e611-1555-44a0-ba8d-9617ab599692 --name 'DWS测试应用0715改' --desc 'DWS shortcut 真实测试已更新' --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "appKey": "dingyqsdchocxp3xrfm3",
+ "desc": "DWS shortcut 真实测试已更新",
+ "icon": "@lADPDfmVQafoVxrMyMzI",
+ "iconUrl": "https://i01.lw.aliimg.com/media/lADPDfmVQafoVxrMyMzI_200_200.jpg",
+ "message": "应用基础信息更新成功。",
+ "name": "DWS测试应用0715改",
+ "success": true,
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692",
+ "updatedFields": [
+ "name",
+ "desc"
+ ],
+ "versionStatus": "INIT"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "appKey": "dingyqsdchocxp3xrfm3",
+ "desc": "DWS shortcut 真实测试已更新",
+ "icon": "@lADPDfmVQafoVxrMyMzI",
+ "iconUrl": "https://i01.lw.aliimg.com/media/lADPDfmVQafoVxrMyMzI_200_200.jpg",
+ "message": "应用基础信息更新成功。",
+ "name": "DWS测试应用0715改",
+ "success": true,
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692",
+ "updatedFields": [
+ "name",
+ "desc"
+ ],
+ "versionStatus": "INIT"
+ },
+ "success": true
+} |
dws devapp +version-check-approval --unified-app-id <unified-app-id> --version-id <version-id>read预检版本发布是否需要审批(不实际发布) |
dws mcp devapp publish_dev_app_version --json '{"unifiedAppId":<..>, "versionId":<..>, "precheckOnly":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/publish_dev_app_version输入 / CLI 输出输入 dws devapp +version-check-approval --unified-app-id x --version-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "precheckOnly": true,
+ "unifiedAppId": "x",
+ "versionId": "x"
+ },
+ "product": "devapp",
+ "tool": "publish_dev_app_version"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "precheckOnly": true,
+ "unifiedAppId": "x",
+ "versionId": "x"
+ },
+ "product": "devapp",
+ "tool": "publish_dev_app_version"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2081ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +version-check-approval --unified-app-id 678f27ec-4339-49d8-9c49-371b284bf552 --version-id 4743accb-45e2-4bc9-8c96-74fc62ace2e8 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "approvalCandidates": [
+ {
+ "mainAdmin": false,
+ "name": "王军",
+ "userId": "084896"
+ },
+ {
+ "mainAdmin": false,
+ "name": "尤坤",
+ "userId": "425982"
+ },
+ {
+ "mainAdmin": false,
+ "name": "贺汝坤",
+ "userId": "453209"
+ },
+ {
+ "mainAdmin": false,
+ "name": "倪爽",
+ "userId": "443841"
+ },
+ {
+ "mainAdmin": false,
+ "name": "谢传贵",
+ "userId": "014823"
+ },
+ {
+ "mainAdmin": false,
+ "name": "史伟民",
+ "userId": "188288"
+ },
+ {
+ "mainAdmin": false,
+ "name": "郭迪",
+ "userId": "452337"
+ },
+ {
+ "mainAdmin": false,
+ "name": "周子杰",
+ "userId": "312753"
+ },
+ {
+ "mainAdmin": false,
+ "name": "刘畅",
+ "userId": "068373"
+ },
+ {
+ "mainAdmin": false,
+ "name": "张磊",
+ "userId": "371811"
+ },
+ {
+ "mainAdmin": false,
+ "name": "霍俊龙",
+ "userId": "068428"
+ },
+ {
+ "mainAdmin": false,
+ "name": "李晓军",
+ "userId": "004897"
+ },
+ {
+ "mainAdmin": false,
+ "name": "姚海龙",
+ "userId": "107578"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王丽丽",
+ "userId": "246929"
+ },
+ {
+ "mainAdmin": false,
+ "name": "李恺杰",
+ "userId": "272720"
+ },
+ {
+ "mainAdmin": false,
+ "name": "夏东翔",
+ "userId": "103262"
+ },
+ {
+ "mainAdmin": false,
+ "name": "朱鸿",
+ "userId": "024083"
+ },
+ {
+ "mainAdmin": false,
+ "name": "叶冬",
+ "userId": "371817"
+ },
+ {
+ "mainAdmin": false,
+ "name": "任卿",
+ "userId": "006792"
+ },
+ {
+ "mainAdmin": false,
+ "name": "彭家俊",
+ "userId": "225893"
+ },
+ {
+ "mainAdmin": false,
+ "name": "刘蓓蓓",
+ "userId": "074268"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王耀波",
+ "userId": "220629"
+ },
+ {
+ "mainAdmin": false,
+ "name": "夏烈阳",
+ "userId": "176371"
+ },
+ {
+ "mainAdmin": false,
+ "name": "魏玉科",
+ "userId": "061331"
+ },
+ {
+ "mainAdmin": false,
+ "name": "张晨阳",
+ "userId": "244717"
+ },
+ {
+ "mainAdmin": false,
+ "name": "李祎嵩",
+ "userId": "238863"
+ },
+ {
+ "mainAdmin": false,
+ "name": "吕思霖",
+ "userId": "193021"
+ },
+ {
+ "mainAdmin": false,
+ "name": "宋宜涛",
+ "userId": "037168"
+ },
+ {
+ "mainAdmin": false,
+ "name": "李红军",
+ "userId": "133206"
+ },
+ {
+ "mainAdmin": false,
+ "name": "沈运亮",
+ "userId": "101595"
+ },
+ {
+ "mainAdmin": false,
+ "name": "桂明月",
+ "userId": "077725"
+ },
+ {
+ "mainAdmin": false,
+ "name": "吴芳祥",
+ "userId": "074360"
+ },
+ {
+ "mainAdmin": false,
+ "name": "赵召航",
+ "userId": "044473"
+ },
+ {
+ "mainAdmin": false,
+ "name": "黄文奇",
+ "userId": "270175"
+ },
+ {
+ "mainAdmin": false,
+ "name": "董金威",
+ "userId": "085729"
+ },
+ {
+ "mainAdmin": false,
+ "name": "孙博文",
+ "userId": "034766"
+ },
+ {
+ "mainAdmin": false,
+ "name": "朱通",
+ "userId": "327979"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王帅军",
+ "userId": "061731"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王海旭",
+ "userId": "273048"
+ },
+ {
+ "mainAdmin": false,
+ "name": "欧阳德仁",
+ "userId": "167272"
+ },
+ {
+ "mainAdmin": false,
+ "name": "冯汝伟",
+ "userId": "124456"
+ },
+ {
+ "mainAdmin": false,
+ "name": "刘啸天",
+ "userId": "314418"
+ },
+ {
+ "mainAdmin": false,
+ "name": "杨期",
+ "userId": "028611"
+ },
+ {
+ "mainAdmin": false,
+ "name": "宋华青",
+ "userId": "054469"
+ },
+ {
+ "mainAdmin": false,
+ "name": "俞福春",
+ "userId": "424920"
+ },
+ {
+ "mainAdmin": false,
+ "name": "汤素文",
+ "userId": "088045"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王摧",
+ "userId": "141842"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王鸣霏",
+ "userId": "184163"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王兵",
+ "userId": "135976"
+ },
+ {
+ "mainAdmin": false,
+ "name": "周剑云",
+ "userId": "164217"
+ },
+ {
+ "mainAdmin": false,
+ "name": "沈国勋",
+ "userId": "026247"
+ },
+ {
+ "mainAdmin": false,
+ "name": "高阿娜",
+ "userId": "001423"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王森",
+ "userId": "045981"
+ },
+ {
+ "mainAdmin": false,
+ "name": "林朋",
+ "userId": "236891"
+ }
+ ],
+ "approvalMode": "SELECT_APPROVER",
+ "approvalSubmitted": false,
+ "publishable": false,
+ "published": false,
+ "requiresApproval": true,
+ "sensitive": false,
+ "unifiedAppId": "678f27ec-4339-49d8-9c49-371b284bf552",
+ "version": "1.0.0",
+ "versionId": "4743accb-45e2-4bc9-8c96-74fc62ace2e8",
+ "versionStatus": "INIT"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "approvalCandidates": [
+ {
+ "mainAdmin": false,
+ "name": "王军",
+ "userId": "084896"
+ },
+ {
+ "mainAdmin": false,
+ "name": "尤坤",
+ "userId": "425982"
+ },
+ {
+ "mainAdmin": false,
+ "name": "贺汝坤",
+ "userId": "453209"
+ },
+ {
+ "mainAdmin": false,
+ "name": "倪爽",
+ "userId": "443841"
+ },
+ {
+ "mainAdmin": false,
+ "name": "谢传贵",
+ "userId": "014823"
+ },
+ {
+ "mainAdmin": false,
+ "name": "史伟民",
+ "userId": "188288"
+ },
+ {
+ "mainAdmin": false,
+ "name": "郭迪",
+ "userId": "452337"
+ },
+ {
+ "mainAdmin": false,
+ "name": "周子杰",
+ "userId": "312753"
+ },
+ {
+ "mainAdmin": false,
+ "name": "刘畅",
+ "userId": "068373"
+ },
+ {
+ "mainAdmin": false,
+ "name": "张磊",
+ "userId": "371811"
+ },
+ {
+ "mainAdmin": false,
+ "name": "霍俊龙",
+ "userId": "068428"
+ },
+ {
+ "mainAdmin": false,
+ "name": "李晓军",
+ "userId": "004897"
+ },
+ {
+ "mainAdmin": false,
+ "name": "姚海龙",
+ "userId": "107578"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王丽丽",
+ "userId": "246929"
+ },
+ {
+ "mainAdmin": false,
+ "name": "李恺杰",
+ "userId": "272720"
+ },
+ {
+ "mainAdmin": false,
+ "name": "夏东翔",
+ "userId": "103262"
+ },
+ {
+ "mainAdmin": false,
+ "name": "朱鸿",
+ "userId": "024083"
+ },
+ {
+ "mainAdmin": false,
+ "name": "叶冬",
+ "userId": "371817"
+ },
+ {
+ "mainAdmin": false,
+ "name": "任卿",
+ "userId": "006792"
+ },
+ {
+ "mainAdmin": false,
+ "name": "彭家俊",
+ "userId": "225893"
+ },
+ {
+ "mainAdmin": false,
+ "name": "刘蓓蓓",
+ "userId": "074268"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王耀波",
+ "userId": "220629"
+ },
+ {
+ "mainAdmin": false,
+ "name": "夏烈阳",
+ "userId": "176371"
+ },
+ {
+ "mainAdmin": false,
+ "name": "魏玉科",
+ "userId": "061331"
+ },
+ {
+ "mainAdmin": false,
+ "name": "张晨阳",
+ "userId": "244717"
+ },
+ {
+ "mainAdmin": false,
+ "name": "李祎嵩",
+ "userId": "238863"
+ },
+ {
+ "mainAdmin": false,
+ "name": "吕思霖",
+ "userId": "193021"
+ },
+ {
+ "mainAdmin": false,
+ "name": "宋宜涛",
+ "userId": "037168"
+ },
+ {
+ "mainAdmin": false,
+ "name": "李红军",
+ "userId": "133206"
+ },
+ {
+ "mainAdmin": false,
+ "name": "沈运亮",
+ "userId": "101595"
+ },
+ {
+ "mainAdmin": false,
+ "name": "桂明月",
+ "userId": "077725"
+ },
+ {
+ "mainAdmin": false,
+ "name": "吴芳祥",
+ "userId": "074360"
+ },
+ {
+ "mainAdmin": false,
+ "name": "赵召航",
+ "userId": "044473"
+ },
+ {
+ "mainAdmin": false,
+ "name": "黄文奇",
+ "userId": "270175"
+ },
+ {
+ "mainAdmin": false,
+ "name": "董金威",
+ "userId": "085729"
+ },
+ {
+ "mainAdmin": false,
+ "name": "孙博文",
+ "userId": "034766"
+ },
+ {
+ "mainAdmin": false,
+ "name": "朱通",
+ "userId": "327979"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王帅军",
+ "userId": "061731"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王海旭",
+ "userId": "273048"
+ },
+ {
+ "mainAdmin": false,
+ "name": "欧阳德仁",
+ "userId": "167272"
+ },
+ {
+ "mainAdmin": false,
+ "name": "冯汝伟",
+ "userId": "124456"
+ },
+ {
+ "mainAdmin": false,
+ "name": "刘啸天",
+ "userId": "314418"
+ },
+ {
+ "mainAdmin": false,
+ "name": "杨期",
+ "userId": "028611"
+ },
+ {
+ "mainAdmin": false,
+ "name": "宋华青",
+ "userId": "054469"
+ },
+ {
+ "mainAdmin": false,
+ "name": "俞福春",
+ "userId": "424920"
+ },
+ {
+ "mainAdmin": false,
+ "name": "汤素文",
+ "userId": "088045"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王摧",
+ "userId": "141842"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王鸣霏",
+ "userId": "184163"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王兵",
+ "userId": "135976"
+ },
+ {
+ "mainAdmin": false,
+ "name": "周剑云",
+ "userId": "164217"
+ },
+ {
+ "mainAdmin": false,
+ "name": "沈国勋",
+ "userId": "026247"
+ },
+ {
+ "mainAdmin": false,
+ "name": "高阿娜",
+ "userId": "001423"
+ },
+ {
+ "mainAdmin": false,
+ "name": "王森",
+ "userId": "045981"
+ },
+ {
+ "mainAdmin": false,
+ "name": "林朋",
+ "userId": "236891"
+ }
+ ],
+ "approvalMode": "SELECT_APPROVER",
+ "approvalSubmitted": false,
+ "publishable": false,
+ "published": false,
+ "requiresApproval": true,
+ "sensitive": false,
+ "unifiedAppId": "678f27ec-4339-49d8-9c49-371b284bf552",
+ "version": "1.0.0",
+ "versionId": "4743accb-45e2-4bc9-8c96-74fc62ace2e8",
+ "versionStatus": "INIT"
+ },
+ "success": true
+} |
dws devapp +version-create --unified-app-id <unified-app-id> --version <version> --desc <desc>write基于当前配置创建应用新版本 |
dws mcp devapp create_dev_app_version --json '{"unifiedAppId":<..>, "version":<..>, "desc":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/create_dev_app_version输入 / CLI 输出输入 dws devapp +version-create --unified-app-id x --version x --desc x --yes stdout {
+ "_fake": true,
+ "args": {
+ "desc": "x",
+ "unifiedAppId": "x",
+ "version": "x"
+ },
+ "product": "devapp",
+ "tool": "create_dev_app_version"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "desc": "x",
+ "unifiedAppId": "x",
+ "version": "x"
+ },
+ "product": "devapp",
+ "tool": "create_dev_app_version"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1157ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test devapp +version-create --unified-app-id DWSREALTESTNOSUCHID0000000000000 --version 0.0.1-dws-real-test --desc 'DWS shortcut 真实测试描述,可删除' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: devapp/create_dev_app_version)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "BUSINESS_ERROR",
+ "server_key": "devapp",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。ServiceResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"450001\"} ",
+ "trace_id": "0b5deb3217840999656705920e0853"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: devapp/create_dev_app_version)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "BUSINESS_ERROR",
+ "server_key": "devapp",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。ServiceResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"450001\"} ",
+ "trace_id": "0b5deb3217840999656705920e0853"
+ }
+} |
dws devapp +version-get --unified-app-id <unified-app-id> --version-id <version-id>read查询指定版本详情 |
dws mcp devapp get_dev_app_version_detail --json '{"unifiedAppId":<..>, "versionId":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/get_dev_app_version_detail输入 / CLI 输出输入 dws devapp +version-get --unified-app-id x --version-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x",
+ "versionId": "x"
+ },
+ "product": "devapp",
+ "tool": "get_dev_app_version_detail"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x",
+ "versionId": "x"
+ },
+ "product": "devapp",
+ "tool": "get_dev_app_version_detail"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1738ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +version-get --unified-app-id 678f27ec-4339-49d8-9c49-371b284bf552 --version-id 4743accb-45e2-4bc9-8c96-74fc62ace2e8 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "abilityList": [],
+ "approvalMode": "SELECT_APPROVER",
+ "description": "1.0.0",
+ "enterpriseSelfBuiltAudit": false,
+ "gmtCreate": "2026-03-06 10:43:01",
+ "requiresApproval": true,
+ "scopeList": [
+ "qyapi_robot_sendmsg",
+ "Card.Instance.Write",
+ "Card.Streaming.Write"
+ ],
+ "sensitiveScopeList": [],
+ "unifiedAppId": "678f27ec-4339-49d8-9c49-371b284bf552",
+ "version": "1.0.0",
+ "versionId": "4743accb-45e2-4bc9-8c96-74fc62ace2e8",
+ "versionStatus": "INIT"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "abilityList": [],
+ "approvalMode": "SELECT_APPROVER",
+ "description": "1.0.0",
+ "enterpriseSelfBuiltAudit": false,
+ "gmtCreate": "2026-03-06 10:43:01",
+ "requiresApproval": true,
+ "scopeList": [
+ "qyapi_robot_sendmsg",
+ "Card.Instance.Write",
+ "Card.Streaming.Write"
+ ],
+ "sensitiveScopeList": [],
+ "unifiedAppId": "678f27ec-4339-49d8-9c49-371b284bf552",
+ "version": "1.0.0",
+ "versionId": "4743accb-45e2-4bc9-8c96-74fc62ace2e8",
+ "versionStatus": "INIT"
+ },
+ "success": true
+} |
dws devapp +version-list --unified-app-id <unified-app-id>read分页查询应用版本列表 |
dws mcp devapp <tool> |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/list_dev_app_versions输入 / CLI 输出输入 dws devapp +version-list --unified-app-id x --cursor x --page-size 1 --yes stdout {
+ "count": 0,
+ "versions": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "versions": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1349ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +version-list --unified-app-id 678f27ec-4339-49d8-9c49-371b284bf552 --cursor '' --page-size 10 --yes --format json 真实 stdout {
+ "count": 1,
+ "versions": [
+ {
+ "desc": "1.0.0",
+ "gmtCreate": 1772764981000,
+ "status": "INIT",
+ "version": "1.0.0",
+ "versionId": "4743accb-45e2-4bc9-8c96-74fc62ace2e8"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 1,
+ "versions": [
+ {
+ "desc": "1.0.0",
+ "gmtCreate": 1772764981000,
+ "status": "INIT",
+ "version": "1.0.0",
+ "versionId": "4743accb-45e2-4bc9-8c96-74fc62ace2e8"
+ }
+ ]
+} |
dws devapp +version-publish --unified-app-id <unified-app-id> --version-id <version-id> --confirmed-sensitive <confirmed-sensitive> --approver-user-id <approver-user-id>write发布指定版本(含高敏权限需 --confirmed-sensitive) |
dws mcp devapp publish_dev_app_version --json '{"unifiedAppId":<..>, "versionId":<..>, "precheckOnly":<..>, "confirmedSensitive":<..>, "approverUserId":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/publish_dev_app_version输入 / CLI 输出输入 dws devapp +version-publish --unified-app-id x --version-id x --confirmed-sensitive --approver-user-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "approverUserId": "x",
+ "confirmedSensitive": true,
+ "precheckOnly": false,
+ "unifiedAppId": "x",
+ "versionId": "x"
+ },
+ "product": "devapp",
+ "tool": "publish_dev_app_version"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "approverUserId": "x",
+ "confirmedSensitive": true,
+ "precheckOnly": false,
+ "unifiedAppId": "x",
+ "versionId": "x"
+ },
+ "product": "devapp",
+ "tool": "publish_dev_app_version"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1071ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test devapp +version-publish --unified-app-id DWSREALTESTNOSUCHID0000000000000 --version-id DWSREALTESTNOSUCHID0000000000000 --confirmed-sensitive --approver-user-id __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: devapp/publish_dev_app_version)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "BUSINESS_ERROR",
+ "server_key": "devapp",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。ServiceResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"450001\"} ",
+ "trace_id": "2127d89817840999667906017e075d"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false (operation: devapp/publish_dev_app_version)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "BUSINESS_ERROR",
+ "server_key": "devapp",
+ "technical_detail": "iPaaS 调用失败: 调用远程服务业务异常, 出参校验不通过。ServiceResult.success当前值:false, 预期值:true,所有值:{\"success\":false,\"errorCode\":\"450001\"} ",
+ "trace_id": "2127d89817840999667906017e075d"
+ }
+} |
dws devapp +version-status --unified-app-id <unified-app-id> --version-id <version-id>read查询版本发布/审批状态 |
dws mcp devapp get_dev_app_version_status --json '{"unifiedAppId":<..>, "versionId":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/get_dev_app_version_status输入 / CLI 输出输入 dws devapp +version-status --unified-app-id x --version-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x",
+ "versionId": "x"
+ },
+ "product": "devapp",
+ "tool": "get_dev_app_version_status"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x",
+ "versionId": "x"
+ },
+ "product": "devapp",
+ "tool": "get_dev_app_version_status"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2272ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +version-status --unified-app-id 678f27ec-4339-49d8-9c49-371b284bf552 --version-id 4743accb-45e2-4bc9-8c96-74fc62ace2e8 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "unifiedAppId": "678f27ec-4339-49d8-9c49-371b284bf552",
+ "version": "1.0.0",
+ "versionId": "4743accb-45e2-4bc9-8c96-74fc62ace2e8",
+ "versionStatus": "INIT"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "unifiedAppId": "678f27ec-4339-49d8-9c49-371b284bf552",
+ "version": "1.0.0",
+ "versionId": "4743accb-45e2-4bc9-8c96-74fc62ace2e8",
+ "versionStatus": "INIT"
+ },
+ "success": true
+} |
dws devapp +webapp-config --unified-app-id <unified-app-id> --h5-page-type <h5-page-type> --homepage-url <homepage-url> --pc-homepage-url <pc-homepage-url> --omp-url <omp-url>write配置网页应用能力 |
dws mcp devapp set_extension_webapp_config --json '{"unifiedAppId":<..>, "h5PageType":<..>, "homepageUrl":<..>, "pcHomepageUrl":<..>, "ompUrl":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/set_extension_webapp_config输入 / CLI 输出输入 dws devapp +webapp-config --unified-app-id x --h5-page-type x --homepage-url x --pc-homepage-url x --omp-url x --yes stdout {
+ "_fake": true,
+ "args": {
+ "h5PageType": "x",
+ "homepageUrl": "x",
+ "ompUrl": "x",
+ "pcHomepageUrl": "x",
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "set_extension_webapp_config"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "h5PageType": "x",
+ "homepageUrl": "x",
+ "ompUrl": "x",
+ "pcHomepageUrl": "x",
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "set_extension_webapp_config"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=4926ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +webapp-config --unified-app-id c5a8e611-1555-44a0-ba8d-9617ab599692 --h5-page-type pc --homepage-url https://example.invalid/dws --pc-homepage-url https://example.invalid/dws-pc --omp-url https://example.invalid/omp --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "configured": true,
+ "h5PageType": "pc",
+ "homepageUrl": "https://example.invalid/dws",
+ "message": "网页应用配置成功。",
+ "ompUrl": "https://example.invalid/omp",
+ "pcHomepageUrl": "https://example.invalid/dws-pc",
+ "success": true,
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "configured": true,
+ "h5PageType": "pc",
+ "homepageUrl": "https://example.invalid/dws",
+ "message": "网页应用配置成功。",
+ "ompUrl": "https://example.invalid/omp",
+ "pcHomepageUrl": "https://example.invalid/dws-pc",
+ "success": true,
+ "unifiedAppId": "c5a8e611-1555-44a0-ba8d-9617ab599692"
+ },
+ "success": true
+} |
dws devapp +webapp-get --unified-app-id <unified-app-id>read查询网页应用配置 |
dws mcp devapp get_extension_webapp_config --json '{"unifiedAppId":<..>}' |
lark apps 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; devapp/get_extension_webapp_config输入 / CLI 输出输入 dws devapp +webapp-get --unified-app-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "get_extension_webapp_config"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "unifiedAppId": "x"
+ },
+ "product": "devapp",
+ "tool": "get_extension_webapp_config"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1576ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test devapp +webapp-get --unified-app-id 678f27ec-4339-49d8-9c49-371b284bf552 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "configured": false,
+ "message": "未配置网页应用入口,请使用 webapp config 设置 homepageUrl、pcHomepageUrl 或 ompUrl。",
+ "unifiedAppId": "678f27ec-4339-49d8-9c49-371b284bf552"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "configured": false,
+ "message": "未配置网页应用入口,请使用 webapp config 设置 homepageUrl、pcHomepageUrl 或 ompUrl。",
+ "unifiedAppId": "678f27ec-4339-49d8-9c49-371b284bf552"
+ },
+ "success": true
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 | ||
|---|---|---|---|---|---|
dws calendar +agenda --start <start> --end <end> --calendar-id <calendar-id> --cursor <cursor> --limit <limit>read查询日程列表(不传时间默认查询今天) |
dws mcp calendar <tool> |
lark-cli calendar +agenda |
+实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);invalid --start time "x": expected ISO-8601 like 2026-03-10T14:00:00+08:00输入 / CLI 输出输入 dws calendar +agenda --start x --end x --calendar-id x --cursor x --limit 1 --yes stdout (空) stderr / error invalid --start time "x": expected ISO-8601 like 2026-03-10T14:00:00+08:00 最终用于判定的返回 invalid --start time "x": expected ISO-8601 like 2026-03-10T14:00:00+08:00 真实后端测试输入 / 输出真实后端成功exit=0;duration=2094ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +agenda --start 2026-07-16T10:00:00+08:00 --end 2026-07-16T11:00:00+08:00 --calendar-id primary --cursor '' --limit 10 --yes --format json 真实 stdout {
+ "count": 1,
+ "events": [
+ {
+ "end": {
+ "date": null,
+ "dateTime": "2026-07-16T10:00:00+08:00",
+ "timeZone": "Asia/Shanghai"
+ },
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1784164500000",
+ "location": "B310",
+ "start": {
+ "date": null,
+ "dateTime": "2026-07-16T09:15:00+08:00",
+ "timeZone": "Asia/Shanghai"
+ },
+ "status": "confirmed",
+ "summary": "中控专属钉&AI项目早会"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 1,
+ "events": [
+ {
+ "end": {
+ "date": null,
+ "dateTime": "2026-07-16T10:00:00+08:00",
+ "timeZone": "Asia/Shanghai"
+ },
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1784164500000",
+ "location": "B310",
+ "start": {
+ "date": null,
+ "dateTime": "2026-07-16T09:15:00+08:00",
+ "timeZone": "Asia/Shanghai"
+ },
+ "status": "confirmed",
+ "summary": "中控专属钉&AI项目早会"
+ }
+ ]
+} |
||
dws calendar +attendee-list --event <event> --calendar-id <calendar-id>read查看日程参会人 |
dws mcp calendar <tool> |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; calendar/get_calendar_participants输入 / CLI 输出输入 dws calendar +attendee-list --event x --calendar-id x --yes stdout {
+ "attendees": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "attendees": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1144ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +attendee-list --event THN4YUtOTlplYU9sZzd2czE4YURLQT09_1784078100000 --calendar-id primary --yes --format json 真实 stdout {
+ "attendees": [
+ {
+ "displayName": "秦天",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "崇幻(主用钉)",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "恩澈主用钉",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "楠者",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "栩铭-主账号",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "思敏",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "念晨",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "杨淑平",
+ "responseStatus": "declined"
+ },
+ {
+ "displayName": "李伟韬",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "王琳",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "千启",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "粤腾",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "石涤",
+ "responseStatus": "declined"
+ },
+ {
+ "displayName": "陈叙",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "李畅(主用钉)",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "徐海儿",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "袁航",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王伟明",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "巫利华",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "张彪",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "舒畅",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王晓璇",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "孙茂林",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "尤福海",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "杨凯",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "杨二磊",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "姚俊杰",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "王鑫杰",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "毛金权",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王国红",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "刘刚",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王福超",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "张海蛟",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "方胜新",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "邵嘉铭",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "孙龙飞",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "刘琦",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "申展",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "李光辉",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "蒋志恒",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "籍敏",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "黄徐贤",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王继光",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "裴美娟",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "闫铎功",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "陈江义",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "刘颖",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "杨旭[工作号]",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "刘少军",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王贵",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "付玉强",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "张振奎",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "武永江",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "沈体峰",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "孔维娜",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王东亮",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "李鑫",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "张磊",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "朱晓闪",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "吴斌",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "陈露鑫",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "陈永纯",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "李所清",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "盛超",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王军超",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "曲宁涛",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "方美",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "杨帆",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "万以华",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "毕晨",
+ "responseStatus": "accepted"
+ }
+ ],
+ "count": 70
+}真实 stderr / error (空) 真实返回 {
+ "attendees": [
+ {
+ "displayName": "秦天",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "崇幻(主用钉)",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "恩澈主用钉",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "楠者",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "栩铭-主账号",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "思敏",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "念晨",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "杨淑平",
+ "responseStatus": "declined"
+ },
+ {
+ "displayName": "李伟韬",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "王琳",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "千启",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "粤腾",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "石涤",
+ "responseStatus": "declined"
+ },
+ {
+ "displayName": "陈叙",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "李畅(主用钉)",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "徐海儿",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "袁航",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王伟明",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "巫利华",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "张彪",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "舒畅",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王晓璇",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "孙茂林",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "尤福海",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "杨凯",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "杨二磊",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "姚俊杰",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "王鑫杰",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "毛金权",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王国红",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "刘刚",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王福超",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "张海蛟",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "方胜新",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "邵嘉铭",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "孙龙飞",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "刘琦",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "申展",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "李光辉",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "蒋志恒",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "籍敏",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "黄徐贤",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王继光",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "裴美娟",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "闫铎功",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "陈江义",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "刘颖",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "杨旭[工作号]",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "刘少军",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王贵",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "付玉强",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "张振奎",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "武永江",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "沈体峰",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "孔维娜",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王东亮",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "李鑫",
+ "responseStatus": "accepted"
+ },
+ {
+ "displayName": "张磊",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "朱晓闪",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "吴斌",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "陈露鑫",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "陈永纯",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "李所清",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "盛超",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "王军超",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "曲宁涛",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "方美",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "杨帆",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "万以华",
+ "responseStatus": "needsAction"
+ },
+ {
+ "displayName": "毕晨",
+ "responseStatus": "accepted"
+ }
+ ],
+ "count": 70
+} |
||
dws calendar +book --title <title> --start <start> --end <end> --with <with>write创建日程,并可按姓名邀请参会人(自动解析 userId,失败自动回滚删除日程) |
-dws mcp calendar create_calendar_event --json '{"summary":<..>, "startDateTime":<..>, "endDateTime":<..>, "dryRun":<..>, "wouldCreate":<..>, "wouldInvite":<..>, "eventId":<..>, "attendeesToAdd":<..>}' |
+dws calendar +book --title <title> --start <start> --end <end> --with <with>write复合/智能型创建日程,并可按姓名邀请参会人(自动解析 userId,失败自动回滚删除日程) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 create_calendar_event |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_contact_by_key_word;通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。输入 / CLI 输出输入 dws calendar +book --title x --start x --end x --with x --yes stdout (空) stderr / error 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 最终用于判定的返回 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=2909ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +book --title 'DWS shortcut 真实测试 20260715 日程,可忽略' --start 2026-07-16T11:00:00+08:00 --end 2026-07-16T11:15:00+08:00 --with '冬翔,克谨,怒龙' --yes --format json 真实 stdout {
+ "arguments": [],
+ "result": {
+ "attendees": [
+ {
+ "displayName": "怒龙",
+ "optional": false,
+ "responseStatus": "needsAction",
+ "self": false
+ },
+ {
+ "displayName": "冬翔",
+ "optional": false,
+ "responseStatus": "needsAction",
+ "self": false
+ },
+ {
+ "displayName": "念晨",
+ "optional": false,
+ "responseStatus": "accepted",
+ "self": true
+ },
+ {
+ "displayName": "黄渊卓(克谨)",
+ "optional": false,
+ "responseStatus": "needsAction",
+ "self": false
+ }
+ ],
+ "categories": [],
+ "createTime": "2026-07-15 10:12:30",
+ "end": {
+ "dateTime": "2026-07-16T11:15:00+08:00",
+ "timeZone": "Asia/Shanghai"
+ },
+ "extendedProperties": {
+ "sharedProperties": {
+ "belongCorpId": "ding8196cd9a2b2405da24f2f5cc6abecb85"
+ }
+ },
+ "freeBusy": "BUSY",
+ "iCalUID": "c0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09",
+ "id": "c0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09",
+ "isAllDay": false,
+ "meetingRooms": [],
+ "onlineMeetingInfo": {
+ "conferenceId": "c76abd52-29bb-4183-85d3-bcf91debe3e4",
+ "extraInfo": {
+ "phones": "[\"+862381045152\",\"+862381045153\"]",
+ "roomCode": "131 508 161"
+ },
+ "internalExtraInfo": {
+ "urlForCalDAV": "dingtalk://dingtalkclient/page/videoConfFromSystemCalendar?confId=c76abd52-29bb-4183-85d3-bcf91debe3e4\u0026calendarId=24714119393"
+ },
+ "type": "dingtalk",
+ "url": "dingtalk://dingtalkclient/page/videoConfFromCalendar?confId=c76abd52-29bb-4183-85d3-bcf91debe3e4\u0026calendarId=24714119393"
+ },
+ "organizer": {
+ "displayName": "念晨",
+ "optional": false,
+ "self": true
+ },
+ "reminders": [
+ {
+ "method": "dingtalk",
+ "minutes": 15
+ }
+ ],
+ "start": {
+ "dateTime": "2026-07-16T11:00:00+08:00",
+ "timeZone": "Asia/Shanghai"
+ },
+ "status": "confirmed",
+ "summary": "DWS shortcut 真实测试 20260715 日程,可忽略",
+ "updateTime": "2026-07-15 10:12:31"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "result": {
+ "attendees": [
+ {
+ "displayName": "怒龙",
+ "optional": false,
+ "responseStatus": "needsAction",
+ "self": false
+ },
+ {
+ "displayName": "冬翔",
+ "optional": false,
+ "responseStatus": "needsAction",
+ "self": false
+ },
+ {
+ "displayName": "念晨",
+ "optional": false,
+ "responseStatus": "accepted",
+ "self": true
+ },
+ {
+ "displayName": "黄渊卓(克谨)",
+ "optional": false,
+ "responseStatus": "needsAction",
+ "self": false
+ }
+ ],
+ "categories": [],
+ "createTime": "2026-07-15 10:12:30",
+ "end": {
+ "dateTime": "2026-07-16T11:15:00+08:00",
+ "timeZone": "Asia/Shanghai"
+ },
+ "extendedProperties": {
+ "sharedProperties": {
+ "belongCorpId": "ding8196cd9a2b2405da24f2f5cc6abecb85"
+ }
+ },
+ "freeBusy": "BUSY",
+ "iCalUID": "c0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09",
+ "id": "c0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09",
+ "isAllDay": false,
+ "meetingRooms": [],
+ "onlineMeetingInfo": {
+ "conferenceId": "c76abd52-29bb-4183-85d3-bcf91debe3e4",
+ "extraInfo": {
+ "phones": "[\"+862381045152\",\"+862381045153\"]",
+ "roomCode": "131 508 161"
+ },
+ "internalExtraInfo": {
+ "urlForCalDAV": "dingtalk://dingtalkclient/page/videoConfFromSystemCalendar?confId=c76abd52-29bb-4183-85d3-bcf91debe3e4\u0026calendarId=24714119393"
+ },
+ "type": "dingtalk",
+ "url": "dingtalk://dingtalkclient/page/videoConfFromCalendar?confId=c76abd52-29bb-4183-85d3-bcf91debe3e4\u0026calendarId=24714119393"
+ },
+ "organizer": {
+ "displayName": "念晨",
+ "optional": false,
+ "self": true
+ },
+ "reminders": [
+ {
+ "method": "dingtalk",
+ "minutes": 15
+ }
+ ],
+ "start": {
+ "dateTime": "2026-07-16T11:00:00+08:00",
+ "timeZone": "Asia/Shanghai"
+ },
+ "status": "confirmed",
+ "summary": "DWS shortcut 真实测试 20260715 日程,可忽略",
+ "updateTime": "2026-07-15 10:12:31"
+ },
+ "success": true
+} |
dws calendar +book-listread查询用户的日历本列表 |
dws mcp calendar <tool> |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; calendar/list_calendars输入 / CLI 输出输入 dws calendar +book-list --yes stdout {
+ "calendars": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "calendars": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1033ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +book-list --yes --format json 真实 stdout {
+ "calendars": [
+ {
+ "calendarId": "primary",
+ "description": null,
+ "privilege": "owner",
+ "summary": "我的日历(钉钉)",
+ "type": "primary"
+ }
+ ],
+ "count": 1
+}真实 stderr / error (空) 真实返回 {
+ "calendars": [
+ {
+ "calendarId": "primary",
+ "description": null,
+ "privilege": "owner",
+ "summary": "我的日历(钉钉)",
+ "type": "primary"
+ }
+ ],
+ "count": 1
+} |
||
dws calendar +book-search --query <query>read按名称模糊搜索日历本 |
dws mcp calendar <tool> |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; calendar/search_calendar输入 / CLI 输出输入 dws calendar +book-search --query x --yes stdout {
+ "calendars": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "calendars": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1036ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +book-search --query '测试' --yes --format json 真实 stdout {
+ "calendars": [],
+ "count": 0
+}真实 stderr / error (空) 真实返回 {
+ "calendars": [],
+ "count": 0
+} |
||
dws calendar +cancel-event --event <event>high-risk-write取消(删除)一个已有日程(删除前先确认它真实存在) |
-dws mcp calendar delete_calendar_event --json '{"eventId":<..>, "title":<..>, "action":<..>}' |
+dws calendar +cancel-event --event <event>high-risk-write复合/智能型取消(删除)一个已有日程(删除前先确认它真实存在) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 delete_calendar_event |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 2;tool 已校验; calendar/delete_calendar_event、calendar/get_calendar_detail输入 / CLI 输出输入 dws calendar +cancel-event --event x --yes stdout {
+ "_fake": true,
+ "args": {
+ "eventId": "x"
+ },
+ "product": "calendar",
+ "tool": "delete_calendar_event"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "eventId": "x"
+ },
+ "product": "calendar",
+ "tool": "delete_calendar_event"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1369ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +cancel-event --event c0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09 --yes --format json 真实 stdout {
+ "action": "about_to_cancel",
+ "eventId": "c0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09",
+ "title": "DWS shortcut 真实测试 20260715 日程,可忽略"
+}
+{
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "action": "about_to_cancel",
+ "eventId": "c0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09",
+ "title": "DWS shortcut 真实测试 20260715 日程,可忽略"
+}
+{
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+} |
dws calendar +conflicts --in-days <in-days>read检测我某天日程的时间冲突(重叠/双重预订,默认今天) |
-dws mcp calendar <tool> |
+dws calendar +conflicts --in-days <in-days>read复合/智能型检测我某天日程的时间冲突(重叠/双重预订,默认今天) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; calendar/list_calendar_events输入 / CLI 输出输入 dws calendar +conflicts --in-days 1 --yes stdout {
+ "conflictCount": 0,
+ "conflicts": [],
+ "date": "2026-07-16",
+ "eventCount": 0,
+ "hasConflict": false
+}stderr / error (空) 最终用于判定的返回 {
+ "conflictCount": 0,
+ "conflicts": [],
+ "date": "2026-07-16",
+ "eventCount": 0,
+ "hasConflict": false
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2369ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +conflicts --in-days 1 --yes --format json 真实 stdout {
+ "conflictCount": 0,
+ "conflicts": [],
+ "date": "2026-07-16",
+ "eventCount": 3,
+ "hasConflict": false
+}真实 stderr / error (空) 真实返回 {
+ "conflictCount": 0,
+ "conflicts": [],
+ "date": "2026-07-16",
+ "eventCount": 3,
+ "hasConflict": false
+} |
dws calendar +find-room --start <start> --end <end>read查询指定时间段内所有可用的会议室 |
-dws mcp calendar <tool> |
+dws calendar +find-room --start <start> --end <end>read复合/智能型查询指定时间段内所有可用的会议室 |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark calendar 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--start 时间格式无效:"x",请使用 ISO8601(如 2026-03-10T14:00:00+08:00)输入 / CLI 输出输入 dws calendar +find-room --start x --end x --yes stdout (空) stderr / error --start 时间格式无效:"x",请使用 ISO8601(如 2026-03-10T14:00:00+08:00) 最终用于判定的返回 --start 时间格式无效:"x",请使用 ISO8601(如 2026-03-10T14:00:00+08:00) 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1498ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test calendar +find-room --start 2026-07-16T10:00:00+08:00 --end 2026-07-16T11:00:00+08:00 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 查询范围内的会议室数量,超过上限100,请选择更小范围的分组进行查询。\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "458019",
+ "server_key": "calendar",
+ "trace_id": "0bb7c36217840997694975303e0758"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 查询范围内的会议室数量,超过上限100,请选择更小范围的分组进行查询。\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "458019",
+ "server_key": "calendar",
+ "trace_id": "0bb7c36217840997694975303e0758"
+ }
+} |
dws calendar +free --who <who> --start <start> --end <end>read按姓名查询某人在指定时间段内的忙闲状态(自动解析 userId) |
-dws mcp calendar <tool> |
+dws calendar +free --who <who> --start <start> --end <end>read复合/智能型按姓名查询某人在指定时间段内的忙闲状态(自动解析 userId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_contact_by_key_word;通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。输入 / CLI 输出输入 dws calendar +free --who x --start x --end x --yes stdout (空) stderr / error 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 最终用于判定的返回 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=1697ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +free --who '冬翔' --start 2026-07-16T10:00:00+08:00 --end 2026-07-16T11:00:00+08:00 --yes --format json 真实 stdout {
+ "busy": [],
+ "free": true,
+ "userId": "103262",
+ "who": "夏东翔"
+}真实 stderr / error (空) 真实返回 {
+ "busy": [],
+ "free": true,
+ "userId": "103262",
+ "who": "夏东翔"
+} |
dws calendar +free-slots --in-days <in-days> --from <from> --to <to>read找我某天工作时段内的空闲时间段(默认今天 09:00-18:00) |
-dws mcp calendar <tool> |
+dws calendar +free-slots --in-days <in-days> --from <from> --to <to>read复合/智能型找我某天工作时段内的空闲时间段(默认今天 09:00-18:00) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark calendar 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--from/--to 需满足 0<=from<to<=24输入 / CLI 输出输入 dws calendar +free-slots --in-days 1 --from 1 --to 1 --yes stdout (空) stderr / error --from/--to 需满足 0<=from<to<=24 最终用于判定的返回 --from/--to 需满足 0<=from<to<=24 真实后端测试输入 / 输出真实后端成功exit=0;duration=2195ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +free-slots --in-days 1 --from 9 --to 18 --yes --format json 真实 stdout {
+ "allBusy": false,
+ "date": "2026-07-16",
+ "freeSlots": [
+ {
+ "durationMin": 15,
+ "end": "09:15",
+ "start": "09:00"
+ },
+ {
+ "durationMin": 480,
+ "end": "18:00",
+ "start": "10:00"
+ }
+ ],
+ "slotCount": 2,
+ "window": "09:00-18:00"
+}真实 stderr / error (空) 真实返回 {
+ "allBusy": false,
+ "date": "2026-07-16",
+ "freeSlots": [
+ {
+ "durationMin": 15,
+ "end": "09:15",
+ "start": "09:00"
+ },
+ {
+ "durationMin": 480,
+ "end": "18:00",
+ "start": "10:00"
+ }
+ ],
+ "slotCount": 2,
+ "window": "09:00-18:00"
+} |
dws calendar +freebusy --users <users> --rooms <rooms> --start <start> --end <end>read查询用户 / 会议室闲忙状态(--users 与 --rooms 至少其一) |
dws mcp calendar query_busy_status --json '{"startTime":<..>, "endTime":<..>, "userIds":<..>, "roomIds":<..>}' |
lark-cli calendar +freebusy |
+实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);invalid --start time "x": expected ISO-8601 like 2026-03-10T14:00:00+08:00输入 / CLI 输出输入 dws calendar +freebusy --users x --rooms x --start x --end x --yes stdout (空) stderr / error invalid --start time "x": expected ISO-8601 like 2026-03-10T14:00:00+08:00 最终用于判定的返回 invalid --start time "x": expected ISO-8601 like 2026-03-10T14:00:00+08:00 真实后端测试输入 / 输出真实后端成功exit=0;duration=1154ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +freebusy --users 103262 --start 2026-07-16T10:00:00+08:00 --end 2026-07-16T11:00:00+08:00 --yes --format json 真实 stdout {
+ "result": [
+ {
+ "error": null,
+ "roomId": null,
+ "scheduleItems": [],
+ "userId": "103262"
+ }
+ ],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "result": [
+ {
+ "error": null,
+ "roomId": null,
+ "scheduleItems": [],
+ "userId": "103262"
+ }
+ ],
+ "success": true
+} |
||
dws calendar +invite --event <event> --with <with>write按姓名把参会人加入已有日程(自动解析 userId 后批量添加) |
-dws mcp calendar add_calendar_participant --json '{"eventId":<..>, "attendeesToAdd":<..>}' |
+dws calendar +invite --event <event> --with <with>write复合/智能型按姓名把参会人加入已有日程(自动解析 userId 后批量添加) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 add_calendar_participant |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_contact_by_key_word;通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。输入 / CLI 输出输入 dws calendar +invite --event x --with x --yes stdout (空) stderr / error 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 最终用于判定的返回 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=2033ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +invite --event c0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09 --with '冬翔' --yes --format json 真实 stdout {
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+} |
dws calendar +my-free --start <start> --end <end>read查我自己在某时间段的忙闲(默认今天,无需输入姓名) |
-dws mcp calendar <tool> |
+dws calendar +my-free --start <start> --end <end>read复合/智能型查我自己在某时间段的忙闲(默认今天,无需输入姓名) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/get_current_user_profile;无法解析当前用户的 userId输入 / CLI 输出输入 dws calendar +my-free --start x --end x --yes stdout (空) stderr / error 无法解析当前用户的 userId 最终用于判定的返回 无法解析当前用户的 userId 真实后端测试输入 / 输出真实后端成功exit=0;duration=1406ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +my-free --start 2026-07-16T10:00:00+08:00 --end 2026-07-16T11:00:00+08:00 --yes --format json 真实 stdout {
+ "busy": [
+ {
+ "end": "2026-07-16T10:00:00+08:00",
+ "start": "2026-07-16T09:15:00+08:00"
+ }
+ ],
+ "free": false,
+ "userId": "202397"
+}真实 stderr / error (空) 真实返回 {
+ "busy": [
+ {
+ "end": "2026-07-16T10:00:00+08:00",
+ "start": "2026-07-16T09:15:00+08:00"
+ }
+ ],
+ "free": false,
+ "userId": "202397"
+} |
dws calendar +next-eventread查看接下来最近的一个日程(默认扫描未来 7 天) |
-dws mcp calendar <tool> |
+dws calendar +next-eventread复合/智能型查看接下来最近的一个日程(默认扫描未来 7 天) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; calendar/list_calendar_events输入 / CLI 输出输入 dws calendar +next-event --yes stdout {
+ "event": null,
+ "message": "近 7 天无日程"
+}stderr / error (空) 最终用于判定的返回 {
+ "event": null,
+ "message": "近 7 天无日程"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=5504ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +next-event --yes --format json 真实 stdout {
+ "event": {
+ "end": "2026-07-15 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1784120400000",
+ "start": "2026-07-15 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ }
+}真实 stderr / error (空) 真实返回 {
+ "event": {
+ "end": "2026-07-15 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1784120400000",
+ "start": "2026-07-15 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ }
+} |
dws calendar +reschedule --event <event> --start <start> --end <end>write改一个已有日程的时间(只动开始/结束时间,其他字段不变) |
-dws mcp calendar update_calendar_event --json '{"eventId":<..>, "startDateTime":<..>, "endDateTime":<..>}' |
+dws calendar +reschedule --event <event> --start <start> --end <end>write复合/智能型改一个已有日程的时间(只动开始/结束时间,其他字段不变) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 update_calendar_event |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 2;tool 已校验; calendar/get_calendar_detail、calendar/update_calendar_event输入 / CLI 输出输入 dws calendar +reschedule --event x --start x --end x --yes stdout {
+ "_fake": true,
+ "args": {
+ "endDateTime": "x",
+ "eventId": "x",
+ "startDateTime": "x"
+ },
+ "product": "calendar",
+ "tool": "update_calendar_event"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "endDateTime": "x",
+ "eventId": "x",
+ "startDateTime": "x"
+ },
+ "product": "calendar",
+ "tool": "update_calendar_event"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1960ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +reschedule --event c0YxQWVyWDFiTjB6MHdmczVvNUZ5dz09 --start 2026-07-16T11:30:00+08:00 --end 2026-07-16T11:45:00+08:00 --yes --format json 真实 stdout {
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "success": true
+} |
dws calendar +respond-event --event <event> --response <response>write接受 / 拒绝 / 暂定回复一个日程邀请(作为参会人设置自己的响应状态) |
-dws mcp calendar respond --json '{"accept":<..>, "decline":<..>, "tentative":<..>, "eventId":<..>, "responseStatus":<..>}' |
+dws calendar +respond-event --event <event> --response <response>write复合/智能型接受 / 拒绝 / 暂定回复一个日程邀请(作为参会人设置自己的响应状态) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 respond |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; calendar/respond输入 / CLI 输出输入 dws calendar +respond-event --event x --response accept --yes stdout {
+ "_fake": true,
+ "args": {
+ "eventId": "x",
+ "responseStatus": "accepted"
+ },
+ "product": "calendar",
+ "tool": "respond"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "eventId": "x",
+ "responseStatus": "accepted"
+ },
+ "product": "calendar",
+ "tool": "respond"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1217ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test calendar +respond-event --event x --response accept --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] code: 300000, developerMessage: Event does not exist. (operation: calendar/respond)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "300000",
+ "server_key": "calendar",
+ "trace_id": "0bb7c36217840999105062121e07db"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] code: 300000, developerMessage: Event does not exist. (operation: calendar/respond)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "300000",
+ "server_key": "calendar",
+ "trace_id": "0bb7c36217840999105062121e07db"
+ }
+} |
dws calendar +room-find --start <start> --end <end> --available <available> --group-id <group-id> --room-name <room-name> --limit <limit> --page <page>read按时间段搜索可用会议室(不传时间默认当前起 1 小时) |
dws mcp calendar query_available_meeting_room --json '{"startTime":<..>, "endTime":<..>, "needAvailable":<..>, "groupId":<..>, "roomName":<..>, "pageSize":<..>, "pageIndex":<..>}' |
lark-cli calendar +room-find |
+实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);invalid --start time "x": expected ISO-8601 like 2026-03-10T14:00:00+08:00输入 / CLI 输出输入 dws calendar +room-find --start x --end x --available --group-id x --room-name x --limit x --page x --yes stdout (空) stderr / error invalid --start time "x": expected ISO-8601 like 2026-03-10T14:00:00+08:00 最终用于判定的返回 invalid --start time "x": expected ISO-8601 like 2026-03-10T14:00:00+08:00 真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1504ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test calendar +room-find --start 2026-07-16T10:00:00+08:00 --end 2026-07-16T11:00:00+08:00 --available --group-id x --room-name x --limit 10 --page 1 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 查询范围内的会议室数量,超过上限100,请选择更小范围的分组进行查询。 (operation: calendar/query_available_meeting_room)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "458019",
+ "server_key": "calendar",
+ "trace_id": "2104a64c17840997709913005e0819"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 查询范围内的会议室数量,超过上限100,请选择更小范围的分组进行查询。 (operation: calendar/query_available_meeting_room)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "458019",
+ "server_key": "calendar",
+ "trace_id": "2104a64c17840997709913005e0819"
+ }
+} |
||
dws calendar +room-groups --limit <limit> --page <page>read会议室分组列表 |
dws mcp calendar <tool> |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; calendar/list_meeting_room_groups输入 / CLI 输出输入 dws calendar +room-groups --limit x --page x --yes stdout {
+ "count": 0,
+ "groups": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "groups": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1224ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +room-groups --limit 10 --page 1 --yes --format json 真实 stdout {
+ "count": 0,
+ "groups": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "groups": []
+} |
||
dws calendar +room-search --room-name <room-name>read按名称模糊搜索会议室(不检查可用性) |
dws mcp calendar <tool> |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; calendar/search_rooms输入 / CLI 输出输入 dws calendar +room-search --room-name x --yes stdout {
+ "count": 0,
+ "rooms": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "rooms": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1298ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +room-search --room-name x --yes --format json 真实 stdout {
+ "count": 0,
+ "rooms": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "rooms": []
+} |
||
dws calendar +suggest-time --with <with> --start <start> --end <end> --duration <duration>read按姓名解析多位参与者,推荐大家都有空的可开会时间段(自动解析 userId) |
-dws mcp calendar <tool> |
+dws calendar +suggest-time --with <with> --start <start> --end <end> --duration <duration>read复合/智能型按姓名解析多位参与者,推荐大家都有空的可开会时间段(自动解析 userId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_contact_by_key_word;以下参与者无法解析为唯一 userId:
+- 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。输入 / CLI 输出输入 dws calendar +suggest-time --with x --start x --end x --duration x --yes stdout (空) stderr / error 以下参与者无法解析为唯一 userId: +- 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 最终用于判定的返回 以下参与者无法解析为唯一 userId: +- 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=1711ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +suggest-time --with '冬翔' --start 2026-07-16T10:00:00+08:00 --end 2026-07-16T11:00:00+08:00 --duration x --yes --format json 真实 stdout {
+ "suggestions": [
+ {
+ "end": "2026-07-16T10:30:00+08:00",
+ "start": "2026-07-16T10:00:00+08:00"
+ },
+ {
+ "end": "2026-07-16T11:00:00+08:00",
+ "start": "2026-07-16T10:30:00+08:00"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "suggestions": [
+ {
+ "end": "2026-07-16T10:30:00+08:00",
+ "start": "2026-07-16T10:00:00+08:00"
+ },
+ {
+ "end": "2026-07-16T11:00:00+08:00",
+ "start": "2026-07-16T10:30:00+08:00"
+ }
+ ]
+} |
dws calendar +todayread列出我今天的日程(自动计算今天的起止时间,无需手动填时间范围) |
-dws mcp calendar <tool> |
+dws calendar +todayread复合/智能型列出我今天的日程(自动计算今天的起止时间,无需手动填时间范围) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; calendar/list_calendar_events输入 / CLI 输出输入 dws calendar +today --yes stdout {
+ "events": []
+}stderr / error (空) 最终用于判定的返回 {
+ "events": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1951ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +today --yes --format json 真实 stdout {
+ "events": [
+ {
+ "end": "2026-07-15 10:00",
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1784078100000",
+ "location": "B310",
+ "start": "2026-07-15 09:15",
+ "title": "中控专属钉&AI项目早会"
+ },
+ {
+ "end": "2026-07-15 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1784120400000",
+ "start": "2026-07-15 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "events": [
+ {
+ "end": "2026-07-15 10:00",
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1784078100000",
+ "location": "B310",
+ "start": "2026-07-15 09:15",
+ "title": "中控专属钉&AI项目早会"
+ },
+ {
+ "end": "2026-07-15 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1784120400000",
+ "start": "2026-07-15 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ }
+ ]
+} |
dws calendar +tomorrowread列出我明天的日程(自动计算明天的起止时间,无需手动填时间范围) |
-dws mcp calendar <tool> |
+dws calendar +tomorrowread复合/智能型列出我明天的日程(自动计算明天的起止时间,无需手动填时间范围) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; calendar/list_calendar_events输入 / CLI 输出输入 dws calendar +tomorrow --yes stdout {
+ "events": []
+}stderr / error (空) 最终用于判定的返回 {
+ "events": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2254ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +tomorrow --yes --format json 真实 stdout {
+ "events": [
+ {
+ "end": "2026-07-16 10:00",
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1784164500000",
+ "location": "B310",
+ "start": "2026-07-16 09:15",
+ "title": "中控专属钉&AI项目早会"
+ },
+ {
+ "end": "2026-07-16 20:00",
+ "eventId": "cVRhbUZsMzZscU1XQjd0NURFaEdnZz09",
+ "location": "张功馆·桐庐菜(未来星宸永福店)",
+ "start": "2026-07-16 18:00",
+ "title": "搜问&搜索团队聚餐"
+ },
+ {
+ "end": "2026-07-16 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1784206800000",
+ "start": "2026-07-16 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "events": [
+ {
+ "end": "2026-07-16 10:00",
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1784164500000",
+ "location": "B310",
+ "start": "2026-07-16 09:15",
+ "title": "中控专属钉&AI项目早会"
+ },
+ {
+ "end": "2026-07-16 20:00",
+ "eventId": "cVRhbUZsMzZscU1XQjd0NURFaEdnZz09",
+ "location": "张功馆·桐庐菜(未来星宸永福店)",
+ "start": "2026-07-16 18:00",
+ "title": "搜问&搜索团队聚餐"
+ },
+ {
+ "end": "2026-07-16 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1784206800000",
+ "start": "2026-07-16 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ }
+ ]
+} |
dws calendar +weekread列出我本周的日程(自动按周一为周首计算本周起止时间,无需手动填时间范围) |
-dws mcp calendar <tool> |
+dws calendar +weekread复合/智能型列出我本周的日程(自动按周一为周首计算本周起止时间,无需手动填时间范围) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark calendar 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; calendar/list_calendar_events输入 / CLI 输出输入 dws calendar +week --yes stdout {
+ "events": []
+}stderr / error (空) 最终用于判定的返回 {
+ "events": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=6589ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test calendar +week --yes --format json 真实 stdout {
+ "events": [
+ {
+ "end": "2026-07-13 10:00",
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1783905300000",
+ "location": "B310",
+ "start": "2026-07-13 09:15",
+ "title": "中控专属钉&AI项目早会"
+ },
+ {
+ "end": "2026-07-13 15:30",
+ "eventId": "UTFidStpV3JUcnVQRDhHZThjZVJGQT09",
+ "start": "2026-07-13 15:00",
+ "title": "llm-wiki的能力共创快速对一下使用说明"
+ },
+ {
+ "end": "2026-07-13 16:15",
+ "eventId": "bjZWVmlieHVpUUJJMm15RGFUMlRIZz09",
+ "start": "2026-07-13 15:30",
+ "title": "聊聊"
+ },
+ {
+ "end": "2026-07-13 16:30",
+ "eventId": "elVnVE45K1YvcStEbEpvM2RxbGVYQT09",
+ "location": "2003",
+ "start": "2026-07-13 16:00",
+ "title": "AI技术平台小周会"
+ },
+ {
+ "end": "2026-07-13 18:00",
+ "eventId": "RXJDc2RMNzNPWkRZRnpzTU1NZ1Nsdz09_1783933200000",
+ "location": "B310",
+ "start": "2026-07-13 17:00",
+ "title": "AI营销周会"
+ },
+ {
+ "end": "2026-07-13 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1783947600000",
+ "start": "2026-07-13 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ },
+ {
+ "end": "2026-07-14 10:00",
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1783991700000",
+ "location": "B310",
+ "start": "2026-07-14 09:15",
+ "title": "中控专属钉&AI项目早会"
+ },
+ {
+ "end": "2026-07-14 14:30",
+ "eventId": "d1BpNmZOVkdJaFY5dXdIVE9SdkZPQT09",
+ "location": "D1-2001",
+ "start": "2026-07-14 13:30",
+ "title": "简单聊一聊"
+ },
+ {
+ "end": "2026-07-14 20:30",
+ "eventId": "ZUtBTlQxNjY3TnJKM0JpVEx2T1Ardz09",
+ "location": "D1-2004",
+ "start": "2026-07-14 19:30",
+ "title": "盘一下算法 x 搜索搜问合作"
+ },
+ {
+ "end": "2026-07-14 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1784034000000",
+ "start": "2026-07-14 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ },
+ {
+ "end": "2026-07-15 10:00",
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1784078100000",
+ "location": "B310",
+ "start": "2026-07-15 09:15",
+ "title": "中控专属钉&AI项目早会"
+ },
+ {
+ "end": "2026-07-15 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1784120400000",
+ "start": "2026-07-15 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ },
+ {
+ "end": "2026-07-16 10:00",
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1784164500000",
+ "location": "B310",
+ "start": "2026-07-16 09:15",
+ "title": "中控专属钉&AI项目早会"
+ },
+ {
+ "end": "2026-07-16 20:00",
+ "eventId": "cVRhbUZsMzZscU1XQjd0NURFaEdnZz09",
+ "location": "张功馆·桐庐菜(未来星宸永福店)",
+ "start": "2026-07-16 18:00",
+ "title": "搜问&搜索团队聚餐"
+ },
+ {
+ "end": "2026-07-16 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1784206800000",
+ "start": "2026-07-16 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ },
+ {
+ "end": "2026-07-17 10:00",
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1784250900000",
+ "location": "B310",
+ "start": "2026-07-17 09:15",
+ "title": "中控专属钉&AI项目早会"
+ },
+ {
+ "end": "2026-07-17 18:00",
+ "eventId": "bmVEbnArV25ITStSQlE5WU1QOHhJUT09_1784278800000",
+ "location": "项目室(D1-1604)",
+ "start": "2026-07-17 17:00",
+ "title": "模型算法团队周会"
+ },
+ {
+ "end": "2026-07-17 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1784293200000",
+ "start": "2026-07-17 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "events": [
+ {
+ "end": "2026-07-13 10:00",
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1783905300000",
+ "location": "B310",
+ "start": "2026-07-13 09:15",
+ "title": "中控专属钉&AI项目早会"
+ },
+ {
+ "end": "2026-07-13 15:30",
+ "eventId": "UTFidStpV3JUcnVQRDhHZThjZVJGQT09",
+ "start": "2026-07-13 15:00",
+ "title": "llm-wiki的能力共创快速对一下使用说明"
+ },
+ {
+ "end": "2026-07-13 16:15",
+ "eventId": "bjZWVmlieHVpUUJJMm15RGFUMlRIZz09",
+ "start": "2026-07-13 15:30",
+ "title": "聊聊"
+ },
+ {
+ "end": "2026-07-13 16:30",
+ "eventId": "elVnVE45K1YvcStEbEpvM2RxbGVYQT09",
+ "location": "2003",
+ "start": "2026-07-13 16:00",
+ "title": "AI技术平台小周会"
+ },
+ {
+ "end": "2026-07-13 18:00",
+ "eventId": "RXJDc2RMNzNPWkRZRnpzTU1NZ1Nsdz09_1783933200000",
+ "location": "B310",
+ "start": "2026-07-13 17:00",
+ "title": "AI营销周会"
+ },
+ {
+ "end": "2026-07-13 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1783947600000",
+ "start": "2026-07-13 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ },
+ {
+ "end": "2026-07-14 10:00",
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1783991700000",
+ "location": "B310",
+ "start": "2026-07-14 09:15",
+ "title": "中控专属钉&AI项目早会"
+ },
+ {
+ "end": "2026-07-14 14:30",
+ "eventId": "d1BpNmZOVkdJaFY5dXdIVE9SdkZPQT09",
+ "location": "D1-2001",
+ "start": "2026-07-14 13:30",
+ "title": "简单聊一聊"
+ },
+ {
+ "end": "2026-07-14 20:30",
+ "eventId": "ZUtBTlQxNjY3TnJKM0JpVEx2T1Ardz09",
+ "location": "D1-2004",
+ "start": "2026-07-14 19:30",
+ "title": "盘一下算法 x 搜索搜问合作"
+ },
+ {
+ "end": "2026-07-14 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1784034000000",
+ "start": "2026-07-14 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ },
+ {
+ "end": "2026-07-15 10:00",
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1784078100000",
+ "location": "B310",
+ "start": "2026-07-15 09:15",
+ "title": "中控专属钉&AI项目早会"
+ },
+ {
+ "end": "2026-07-15 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1784120400000",
+ "start": "2026-07-15 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ },
+ {
+ "end": "2026-07-16 10:00",
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1784164500000",
+ "location": "B310",
+ "start": "2026-07-16 09:15",
+ "title": "中控专属钉&AI项目早会"
+ },
+ {
+ "end": "2026-07-16 20:00",
+ "eventId": "cVRhbUZsMzZscU1XQjd0NURFaEdnZz09",
+ "location": "张功馆·桐庐菜(未来星宸永福店)",
+ "start": "2026-07-16 18:00",
+ "title": "搜问&搜索团队聚餐"
+ },
+ {
+ "end": "2026-07-16 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1784206800000",
+ "start": "2026-07-16 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ },
+ {
+ "end": "2026-07-17 10:00",
+ "eventId": "THN4YUtOTlplYU9sZzd2czE4YURLQT09_1784250900000",
+ "location": "B310",
+ "start": "2026-07-17 09:15",
+ "title": "中控专属钉&AI项目早会"
+ },
+ {
+ "end": "2026-07-17 18:00",
+ "eventId": "bmVEbnArV25ITStSQlE5WU1QOHhJUT09_1784278800000",
+ "location": "项目室(D1-1604)",
+ "start": "2026-07-17 17:00",
+ "title": "模型算法团队周会"
+ },
+ {
+ "end": "2026-07-17 21:15",
+ "eventId": "cy81YjB1eW1yMW9SeWRVdHNDVWFhZz09_1784293200000",
+ "start": "2026-07-17 21:00",
+ "title": "循环提醒:项目每日工作进展同步"
+ }
+ ]
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 | ||
|---|---|---|---|---|---|
dws doc +comment-create --node <node> --content <content> --mention <mention>write在文档上创建一条评论 |
dws mcp doc create_comment --json '{"nodeId":<..>, "content":<..>, "mentionedUserIds":<..>}' |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc-comment/create_comment输入 / CLI 输出输入 dws doc +comment-create --node x --content x --mention x --yes stdout {
+ "_fake": true,
+ "args": {
+ "content": "x",
+ "mentionedUserIds": [
+ "x"
+ ],
+ "nodeId": "x"
+ },
+ "product": "doc-comment",
+ "tool": "create_comment"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "content": "x",
+ "mentionedUserIds": [
+ "x"
+ ],
+ "nodeId": "x"
+ },
+ "product": "doc-comment",
+ "tool": "create_comment"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2263ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +comment-create --node P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --content 'DWS shortcut 真实测试 20260715:验证 doc +comment-create,可忽略。' --yes --format json 真实 stdout {
+ "commentKey": "1784082136009b316ba6c48ad41ad92a8b6905406a17c",
+ "logId": "2132f5ca17840821358717098e08d7",
+ "message": "评论创建成功。commentKey: 1784082136009b316ba6c48ad41ad92a8b6905406a17c",
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "commentKey": "1784082136009b316ba6c48ad41ad92a8b6905406a17c",
+ "logId": "2132f5ca17840821358717098e08d7",
+ "message": "评论创建成功。commentKey: 1784082136009b316ba6c48ad41ad92a8b6905406a17c",
+ "success": true
+} |
||
dws doc +comment-create-inline --node <node> --content <content> --block-id <block-id> --start <start> --end <end> --selected-text <selected-text> --mention <mention>write在文档选中文本区域上创建划词评论 |
dws mcp doc create_inline_comment --json '{"nodeId":<..>, "content":<..>, "blockId":<..>, "start":<..>, "end":<..>, "selectedText":<..>, "mentionedUserIds":<..>}' |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc-comment/create_inline_comment输入 / CLI 输出输入 dws doc +comment-create-inline --node x --content x --block-id x --start 1 --end 1 --selected-text x --mention x --yes stdout {
+ "_fake": true,
+ "args": {
+ "blockId": "x",
+ "content": "x",
+ "end": 1,
+ "mentionedUserIds": [
+ "x"
+ ],
+ "nodeId": "x",
+ "selectedText": "x",
+ "start": 1
+ },
+ "product": "doc-comment",
+ "tool": "create_inline_comment"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "blockId": "x",
+ "content": "x",
+ "end": 1,
+ "mentionedUserIds": [
+ "x"
+ ],
+ "nodeId": "x",
+ "selectedText": "x",
+ "start": 1
+ },
+ "product": "doc-comment",
+ "tool": "create_inline_comment"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1183ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test doc +comment-create-inline --node DWSREALTESTNOSUCHID0000000000000 --content 'DWS shortcut 真实测试 20260715-151724,安全负向输入,请忽略。' --block-id DWSREALTESTNOSUCHID0000000000000 --start 0 --end 1 --selected-text 'DWS测试' --mention x --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[TABLE_NOT_FOUND] Requested resource not found (operation: doc-comment/create_inline_comment)\n hint: Document may have been deleted or moved",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "invalidRequest.inputArgs.invalid",
+ "server_key": "doc-comment",
+ "trace_id": "2127d89817840999689931893e079c"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[TABLE_NOT_FOUND] Requested resource not found (operation: doc-comment/create_inline_comment)\n hint: Document may have been deleted or moved",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "invalidRequest.inputArgs.invalid",
+ "server_key": "doc-comment",
+ "trace_id": "2127d89817840999689931893e079c"
+ }
+} |
||
dws doc +comment-list --node <node> --limit <limit> --cursor <cursor> --type <type> --resolve-status <resolve-status>read查询文档评论列表 |
dws mcp doc list_comments --json '{"nodeId":<..>, "pageSize":<..>, "nextToken":<..>, "commentType":<..>, "resolveStatus":<..>}' |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc-comment/list_comments输入 / CLI 输出输入 dws doc +comment-list --node x --limit 1 --cursor x --type global --resolve-status resolved --yes stdout {
+ "_fake": true,
+ "args": {
+ "commentType": "global",
+ "nextToken": "x",
+ "nodeId": "x",
+ "pageSize": 1,
+ "resolveStatus": "resolved"
+ },
+ "product": "doc-comment",
+ "tool": "list_comments"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "commentType": "global",
+ "nextToken": "x",
+ "nodeId": "x",
+ "pageSize": 1,
+ "resolveStatus": "resolved"
+ },
+ "product": "doc-comment",
+ "tool": "list_comments"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2579ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +comment-list --node P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --limit 10 --type global --yes --format json 真实 stdout {
+ "commentList": [
+ {
+ "commentKey": "1784082136009b316ba6c48ad41ad92a8b6905406a17c",
+ "content": "DWS shortcut 真实测试 20260715:验证 doc +comment-create,可忽略。",
+ "createTime": 1784082136009,
+ "isGlobal": true,
+ "isSolved": false,
+ "quote": null,
+ "updateTime": 1784082136009
+ },
+ {
+ "commentKey": "1784082170012979f5c547f7a49e88a6c1dd718bbb304",
+ "content": "DWS shortcut 真实测试 20260715:验证 doc +comment-reply,可忽略。",
+ "createTime": 1784082170012,
+ "isGlobal": true,
+ "isSolved": false,
+ "quote": null,
+ "updateTime": 1784082170012
+ }
+ ],
+ "hasMore": false,
+ "logId": "213ee25c17840994077796280e0923",
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "commentList": [
+ {
+ "commentKey": "1784082136009b316ba6c48ad41ad92a8b6905406a17c",
+ "content": "DWS shortcut 真实测试 20260715:验证 doc +comment-create,可忽略。",
+ "createTime": 1784082136009,
+ "isGlobal": true,
+ "isSolved": false,
+ "quote": null,
+ "updateTime": 1784082136009
+ },
+ {
+ "commentKey": "1784082170012979f5c547f7a49e88a6c1dd718bbb304",
+ "content": "DWS shortcut 真实测试 20260715:验证 doc +comment-reply,可忽略。",
+ "createTime": 1784082170012,
+ "isGlobal": true,
+ "isSolved": false,
+ "quote": null,
+ "updateTime": 1784082170012
+ }
+ ],
+ "hasMore": false,
+ "logId": "213ee25c17840994077796280e0923",
+ "success": true
+} |
||
dws doc +comment-reply --node <node> --content <content> --comment-key <comment-key> --emoji <emoji> --mention <mention>write回复文档中的一条评论 |
dws mcp doc reply_comment --json '{"nodeId":<..>, "content":<..>, "replyCommentKey":<..>, "emoji":<..>, "mentionedUserIds":<..>}' |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc-comment/reply_comment输入 / CLI 输出输入 dws doc +comment-reply --node x --content x --comment-key x --emoji --mention x --yes stdout {
+ "_fake": true,
+ "args": {
+ "content": "x",
+ "emoji": true,
+ "mentionedUserIds": [
+ "x"
+ ],
+ "nodeId": "x",
+ "replyCommentKey": "x"
+ },
+ "product": "doc-comment",
+ "tool": "reply_comment"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "content": "x",
+ "emoji": true,
+ "mentionedUserIds": [
+ "x"
+ ],
+ "nodeId": "x",
+ "replyCommentKey": "x"
+ },
+ "product": "doc-comment",
+ "tool": "reply_comment"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1553ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +comment-reply --node P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --comment-key 1784082136009b316ba6c48ad41ad92a8b6905406a17c --content 'DWS shortcut 真实测试 20260715:验证 doc +comment-reply,可忽略。' --yes --format json 真实 stdout {
+ "commentKey": "1784082170012979f5c547f7a49e88a6c1dd718bbb304",
+ "logId": "2106d98117840821697518379e089c",
+ "message": "回复评论成功。commentKey: 1784082170012979f5c547f7a49e88a6c1dd718bbb304",
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "commentKey": "1784082170012979f5c547f7a49e88a6c1dd718bbb304",
+ "logId": "2106d98117840821697518379e089c",
+ "message": "回复评论成功。commentKey: 1784082170012979f5c547f7a49e88a6c1dd718bbb304",
+ "success": true
+} |
||
dws doc +copy --node <node> --folder <folder> --workspace <workspace>write复制文档/文件到指定文件夹或知识库 |
dws mcp doc copy_document --json '{"nodeId":<..>, "targetFolderId":<..>, "workspaceId":<..>}' |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/copy_document输入 / CLI 输出输入 dws doc +copy --node x --folder x --workspace x --yes stdout {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "targetFolderId": "x",
+ "workspaceId": "x"
+ },
+ "product": "doc",
+ "tool": "copy_document"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "targetFolderId": "x",
+ "workspaceId": "x"
+ },
+ "product": "doc",
+ "tool": "copy_document"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1531ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +copy --node P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --folder Amq4vjg89ZOAdqyaSMKpApXdW3kdP0wQ --yes --format json 真实 stdout {
+ "docUrl": "https://alidocs.dingtalk.com/i/nodes/7dx2rn0Jbakrq9O5tZvQ1bG9VMGjLRb3",
+ "message": "节点复制成功,已复制到目标文件夹。sourceNodeId: P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO,targetFolderId: Amq4vjg89ZOAdqyaSMKpApXdW3kdP0wQ,新节点 ID: 7dx2rn0Jbakrq9O5tZvQ1bG9VMGjLRb3",
+ "nodeId": "7dx2rn0Jbakrq9O5tZvQ1bG9VMGjLRb3",
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "docUrl": "https://alidocs.dingtalk.com/i/nodes/7dx2rn0Jbakrq9O5tZvQ1bG9VMGjLRb3",
+ "message": "节点复制成功,已复制到目标文件夹。sourceNodeId: P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO,targetFolderId: Amq4vjg89ZOAdqyaSMKpApXdW3kdP0wQ,新节点 ID: 7dx2rn0Jbakrq9O5tZvQ1bG9VMGjLRb3",
+ "nodeId": "7dx2rn0Jbakrq9O5tZvQ1bG9VMGjLRb3",
+ "success": true
+} |
||
dws doc +doc-append --doc <doc> --text <text>write在文档末尾追加一段文本(安全追加,不改动原有内容) |
-dws mcp doc update_document --json '{"nodeId":<..>, "markdown":<..>, "mode":<..>}' |
+dws doc +doc-append --doc <doc> --text <text>write复合/智能型在文档末尾追加一段文本(安全追加,不改动原有内容) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 update_document |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/update_document输入 / CLI 输出输入 dws doc +doc-append --doc x --text x --yes stdout {
+ "_fake": true,
+ "args": {
+ "markdown": "x",
+ "mode": "append",
+ "nodeId": "x"
+ },
+ "product": "doc",
+ "tool": "update_document"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "markdown": "x",
+ "mode": "append",
+ "nodeId": "x"
+ },
+ "product": "doc",
+ "tool": "update_document"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2892ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +doc-append --doc P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --text 'DWS shortcut 真实测试 20260715:验证 doc +doc-append。' --yes --format json 真实 stdout {
+ "logId": "213ee25c17840821367055154e08a0",
+ "message": "内容已成功追加到文档末尾,原有内容保持不变。",
+ "mode": "append",
+ "nodeId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "logId": "213ee25c17840821367055154e08a0",
+ "message": "内容已成功追加到文档末尾,原有内容保持不变。",
+ "mode": "append",
+ "nodeId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "success": true
+} |
dws doc +export-get --job-id <job-id>read根据 jobId 查询文档导出任务结果 |
dws mcp doc query_export_job --json '{"jobId":<..>}' |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/query_export_job输入 / CLI 输出输入 dws doc +export-get --job-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "jobId": "x"
+ },
+ "product": "doc",
+ "tool": "query_export_job"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "jobId": "x"
+ },
+ "product": "doc",
+ "tool": "query_export_job"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1379ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +export-get --job-id 29346731713 --yes --format json 真实 stdout {
+ "downloadUrl": "[REDACTED_OSS_URL]",
+ "jobId": "29346731713",
+ "logId": "2132f5ca17840994092582121e08d9",
+ "message": "Export job completed. The file is ready for download via the downloadUrl.",
+ "status": "success",
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "downloadUrl": "[REDACTED_OSS_URL]",
+ "jobId": "29346731713",
+ "logId": "2132f5ca17840994092582121e08d9",
+ "message": "Export job completed. The file is ready for download via the downloadUrl.",
+ "status": "success",
+ "success": true
+} |
||
dws doc +export-submit --node <node> --export-format <export-format>read提交在线文档导出任务 (docx/markdown/pdf),返回 jobId |
dws mcp doc submit_export_job --json '{"nodeId":<..>, "exportFormat":<..>}' |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/submit_export_job输入 / CLI 输出输入 dws doc +export-submit --node x --export-format docx --yes stdout {
+ "_fake": true,
+ "args": {
+ "exportFormat": "docx",
+ "nodeId": "x"
+ },
+ "product": "doc",
+ "tool": "submit_export_job"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "exportFormat": "docx",
+ "nodeId": "x"
+ },
+ "product": "doc",
+ "tool": "submit_export_job"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1573ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +export-submit --node P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --export-format docx --yes --format json 真实 stdout {
+ "jobId": "29346731713",
+ "logId": "2132f5ca17840994104887005e08d8",
+ "message": "Export job submitted successfully. Use query_export_job with jobId '29346731713' to check the export status and get the download link.",
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "jobId": "29346731713",
+ "logId": "2132f5ca17840994104887005e08d8",
+ "message": "Export job submitted successfully. Use query_export_job with jobId '29346731713' to check the export status and get the download link.",
+ "success": true
+} |
||
dws doc +find-doc --query <query> --limit <limit>read按关键词搜索云文档并投影关键字段(只读) |
-dws mcp doc <tool> |
+dws doc +find-doc --query <query> --limit <limit>read复合/智能型按关键词搜索云文档并投影关键字段(只读) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/search_documents;没搜到文档输入 / CLI 输出输入 dws doc +find-doc --query x --limit 1 --yes stdout (空) stderr / error 没搜到文档 最终用于判定的返回 没搜到文档 真实后端测试输入 / 输出真实后端成功exit=0;duration=2146ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +find-doc --query '测试' --limit 10 --yes --format json 真实 stdout {
+ "count": 10,
+ "documents": [
+ {
+ "title": "DWS shortcut 真实测试文档 20260715",
+ "token": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO?utm_scene=person_space"
+ },
+ {
+ "title": "🧪测试 工作区目录扫描 - 2026-04-27 21:27:03",
+ "token": "yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r?utm_scene=person_space"
+ },
+ {
+ "title": "文件扫描测试 -20260414",
+ "token": "3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm?utm_scene=person_space"
+ },
+ {
+ "title": "文件扫描测试(25)",
+ "token": "QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N?utm_scene=person_space"
+ },
+ {
+ "title": "文件扫描测试(5)",
+ "token": "Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq?utm_scene=person_space"
+ },
+ {
+ "title": "文件扫描测试(24)",
+ "token": "OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4?utm_scene=person_space"
+ },
+ {
+ "title": "文件扫描测试(22)",
+ "token": "OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4?utm_scene=person_space"
+ },
+ {
+ "title": "文件扫描测试(26)(2)",
+ "token": "l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4?utm_scene=person_space"
+ },
+ {
+ "title": "悟空DWS全部测试账号信息",
+ "token": "X6GRezwJlYxMoDeBsQkxqNQ38dqbropQ",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/X6GRezwJlYxMoDeBsQkxqNQ38dqbropQ?utm_scene=team_space"
+ },
+ {
+ "title": "测试",
+ "token": "1OQX0akWmBejogd0TvQ7oN4oVGlDd3mE",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/1OQX0akWmBejogd0TvQ7oN4oVGlDd3mE?utm_scene=team_space"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 10,
+ "documents": [
+ {
+ "title": "DWS shortcut 真实测试文档 20260715",
+ "token": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO?utm_scene=person_space"
+ },
+ {
+ "title": "🧪测试 工作区目录扫描 - 2026-04-27 21:27:03",
+ "token": "yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r?utm_scene=person_space"
+ },
+ {
+ "title": "文件扫描测试 -20260414",
+ "token": "3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm?utm_scene=person_space"
+ },
+ {
+ "title": "文件扫描测试(25)",
+ "token": "QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N?utm_scene=person_space"
+ },
+ {
+ "title": "文件扫描测试(5)",
+ "token": "Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq?utm_scene=person_space"
+ },
+ {
+ "title": "文件扫描测试(24)",
+ "token": "OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4?utm_scene=person_space"
+ },
+ {
+ "title": "文件扫描测试(22)",
+ "token": "OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4?utm_scene=person_space"
+ },
+ {
+ "title": "文件扫描测试(26)(2)",
+ "token": "l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4?utm_scene=person_space"
+ },
+ {
+ "title": "悟空DWS全部测试账号信息",
+ "token": "X6GRezwJlYxMoDeBsQkxqNQ38dqbropQ",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/X6GRezwJlYxMoDeBsQkxqNQ38dqbropQ?utm_scene=team_space"
+ },
+ {
+ "title": "测试",
+ "token": "1OQX0akWmBejogd0TvQ7oN4oVGlDd3mE",
+ "type": "",
+ "url": "https://alidocs.dingtalk.com/i/nodes/1OQX0akWmBejogd0TvQ7oN4oVGlDd3mE?utm_scene=team_space"
+ }
+ ]
+} |
dws doc +list --folder <folder> --workspace <workspace> --limit <limit> --cursor <cursor>read列出文件夹或知识库下的直接子节点 |
dws mcp doc <tool> |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/list_nodes输入 / CLI 输出输入 dws doc +list --folder x --workspace x --limit 1 --cursor x --yes stdout {
+ "count": 0,
+ "nodes": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "nodes": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2075ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +list --folder Amq4vjg89ZOAdqyaSMKpApXdW3kdP0wQ --limit 10 --yes --format json 真实 stdout {
+ "count": 10,
+ "nodes": [
+ {
+ "name": "DWS shortcut 真实测试文档 20260715(2)",
+ "nodeId": "np9zOoBVBy2AdzEjuP40bzg4W1DK0g6l",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/np9zOoBVBy2AdzEjuP40bzg4W1DK0g6l?utm_scene=person_space"
+ },
+ {
+ "name": "DWS shortcut 真实测试文档 20260715",
+ "nodeId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO?utm_scene=person_space"
+ },
+ {
+ "name": "DWS shortcut 真实测试文档 20260715(1)",
+ "nodeId": "7dx2rn0Jbakrq9O5tZvQ1bG9VMGjLRb3",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/7dx2rn0Jbakrq9O5tZvQ1bG9VMGjLRb3?utm_scene=person_space"
+ },
+ {
+ "name": "知识库对接调研问卷-供各业务系统填写",
+ "nodeId": "R4GpnMqJzOP0oLp6skZ0Kmvp8Ke0xjE3",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/R4GpnMqJzOP0oLp6skZ0Kmvp8Ke0xjE3?utm_scene=person_space"
+ },
+ {
+ "name": "无标题文档(2)",
+ "nodeId": "X6GRezwJlYxMoDeBsgX95gYj8dqbropQ",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/X6GRezwJlYxMoDeBsgX95gYj8dqbropQ?utm_scene=person_space"
+ },
+ {
+ "name": "hi",
+ "nodeId": "1zknDm0WRz0NZeXQu01lGOdmWBQEx5rG",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/1zknDm0WRz0NZeXQu01lGOdmWBQEx5rG?utm_scene=person_space"
+ },
+ {
+ "name": "T(2)",
+ "nodeId": "dxXB52LJqwZrolvyFKLy25D9WqjMp697",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/dxXB52LJqwZrolvyFKLy25D9WqjMp697?utm_scene=person_space"
+ },
+ {
+ "name": "T(1)",
+ "nodeId": "mweZ92PV6O36dZbnsML6RyaAJxEKBD6p",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/mweZ92PV6O36dZbnsML6RyaAJxEKBD6p?utm_scene=person_space"
+ },
+ {
+ "name": "T",
+ "nodeId": "4lgGw3P8vwYmoljyFg90Z2X9W5daZ90D",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/4lgGw3P8vwYmoljyFg90Z2X9W5daZ90D?utm_scene=person_space"
+ },
+ {
+ "name": "念晨与hugozhu的会话 2026年06月22日",
+ "nodeId": "GZLxjv9VGGDA9Ro2u6yKZ7BxV6EDybno",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/GZLxjv9VGGDA9Ro2u6yKZ7BxV6EDybno?utm_scene=person_space"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 10,
+ "nodes": [
+ {
+ "name": "DWS shortcut 真实测试文档 20260715(2)",
+ "nodeId": "np9zOoBVBy2AdzEjuP40bzg4W1DK0g6l",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/np9zOoBVBy2AdzEjuP40bzg4W1DK0g6l?utm_scene=person_space"
+ },
+ {
+ "name": "DWS shortcut 真实测试文档 20260715",
+ "nodeId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO?utm_scene=person_space"
+ },
+ {
+ "name": "DWS shortcut 真实测试文档 20260715(1)",
+ "nodeId": "7dx2rn0Jbakrq9O5tZvQ1bG9VMGjLRb3",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/7dx2rn0Jbakrq9O5tZvQ1bG9VMGjLRb3?utm_scene=person_space"
+ },
+ {
+ "name": "知识库对接调研问卷-供各业务系统填写",
+ "nodeId": "R4GpnMqJzOP0oLp6skZ0Kmvp8Ke0xjE3",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/R4GpnMqJzOP0oLp6skZ0Kmvp8Ke0xjE3?utm_scene=person_space"
+ },
+ {
+ "name": "无标题文档(2)",
+ "nodeId": "X6GRezwJlYxMoDeBsgX95gYj8dqbropQ",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/X6GRezwJlYxMoDeBsgX95gYj8dqbropQ?utm_scene=person_space"
+ },
+ {
+ "name": "hi",
+ "nodeId": "1zknDm0WRz0NZeXQu01lGOdmWBQEx5rG",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/1zknDm0WRz0NZeXQu01lGOdmWBQEx5rG?utm_scene=person_space"
+ },
+ {
+ "name": "T(2)",
+ "nodeId": "dxXB52LJqwZrolvyFKLy25D9WqjMp697",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/dxXB52LJqwZrolvyFKLy25D9WqjMp697?utm_scene=person_space"
+ },
+ {
+ "name": "T(1)",
+ "nodeId": "mweZ92PV6O36dZbnsML6RyaAJxEKBD6p",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/mweZ92PV6O36dZbnsML6RyaAJxEKBD6p?utm_scene=person_space"
+ },
+ {
+ "name": "T",
+ "nodeId": "4lgGw3P8vwYmoljyFg90Z2X9W5daZ90D",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/4lgGw3P8vwYmoljyFg90Z2X9W5daZ90D?utm_scene=person_space"
+ },
+ {
+ "name": "念晨与hugozhu的会话 2026年06月22日",
+ "nodeId": "GZLxjv9VGGDA9Ro2u6yKZ7BxV6EDybno",
+ "nodeType": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/GZLxjv9VGGDA9Ro2u6yKZ7BxV6EDybno?utm_scene=person_space"
+ }
+ ]
+} |
||
dws doc +move --node <node> --folder <folder> --workspace <workspace>write移动文档/文件到指定文件夹或知识库 |
dws mcp doc move_document --json '{"nodeId":<..>, "targetFolderId":<..>, "workspaceId":<..>}' |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/move_document输入 / CLI 输出输入 dws doc +move --node x --folder x --workspace x --yes stdout {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "targetFolderId": "x",
+ "workspaceId": "x"
+ },
+ "product": "doc",
+ "tool": "move_document"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "targetFolderId": "x",
+ "workspaceId": "x"
+ },
+ "product": "doc",
+ "tool": "move_document"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1087ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +move --node P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --folder Amq4vjg89ZOAdqyaSMKpApXdW3kdP0wQ --yes --format json 真实 stdout {
+ "docUrl": "https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "message": "节点移动成功,已移动到目标文件夹。nodeId: P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO,targetFolderId: Amq4vjg89ZOAdqyaSMKpApXdW3kdP0wQ",
+ "nodeId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "docUrl": "https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "message": "节点移动成功,已移动到目标文件夹。nodeId: P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO,targetFolderId: Amq4vjg89ZOAdqyaSMKpApXdW3kdP0wQ",
+ "nodeId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "success": true
+} |
||
dws doc +search --query <query> --extensions <extensions> --created-from <created-from> --created-to <created-to> --visited-from <visited-from> --visited-to <visited-to> --creator-uids <creator-uids> --editor-uids <editor-uids> --mentioned-uids <mentioned-uids> --workspace-ids <workspace-ids> --limit <limit> --cursor <cursor>read按关键词搜索有权限的文档 (不传则返回最近访问) |
dws mcp doc <tool> |
lark-cli doc +search |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/search_documents输入 / CLI 输出输入 dws doc +search --query x --extensions x --created-from 1 --created-to 1 --visited-from 1 --visited-to 1 --creator-uids x --editor-uids x --mentioned-uids x --workspace-ids x --limit 1 --cursor x --yes stdout {
+ "count": 0,
+ "documents": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "documents": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1911ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +search --query '测试' --limit 10 --cursor 0 --yes --format json 真实 stdout {
+ "count": 10,
+ "documents": [
+ {
+ "docType": "adoc",
+ "modifiedTime": null,
+ "name": "DWS shortcut 真实测试文档 20260715",
+ "nodeId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "url": "https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO?utm_scene=person_space"
+ },
+ {
+ "docType": "able",
+ "modifiedTime": null,
+ "name": "🧪测试 工作区目录扫描 - 2026-04-27 21:27:03",
+ "nodeId": "yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r",
+ "url": "https://alidocs.dingtalk.com/i/nodes/yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r?utm_scene=person_space"
+ },
+ {
+ "docType": "able",
+ "modifiedTime": null,
+ "name": "文件扫描测试 -20260414",
+ "nodeId": "3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm",
+ "url": "https://alidocs.dingtalk.com/i/nodes/3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm?utm_scene=person_space"
+ },
+ {
+ "docType": "able",
+ "modifiedTime": null,
+ "name": "文件扫描测试(25)",
+ "nodeId": "QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N",
+ "url": "https://alidocs.dingtalk.com/i/nodes/QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N?utm_scene=person_space"
+ },
+ {
+ "docType": "able",
+ "modifiedTime": null,
+ "name": "文件扫描测试(5)",
+ "nodeId": "Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq",
+ "url": "https://alidocs.dingtalk.com/i/nodes/Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq?utm_scene=person_space"
+ },
+ {
+ "docType": "able",
+ "modifiedTime": null,
+ "name": "文件扫描测试(24)",
+ "nodeId": "OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4",
+ "url": "https://alidocs.dingtalk.com/i/nodes/OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4?utm_scene=person_space"
+ },
+ {
+ "docType": "able",
+ "modifiedTime": null,
+ "name": "文件扫描测试(22)",
+ "nodeId": "OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4",
+ "url": "https://alidocs.dingtalk.com/i/nodes/OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4?utm_scene=person_space"
+ },
+ {
+ "docType": "able",
+ "modifiedTime": null,
+ "name": "文件扫描测试(26)(2)",
+ "nodeId": "l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4",
+ "url": "https://alidocs.dingtalk.com/i/nodes/l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4?utm_scene=person_space"
+ },
+ {
+ "docType": "adoc",
+ "modifiedTime": null,
+ "name": "悟空DWS全部测试账号信息",
+ "nodeId": "X6GRezwJlYxMoDeBsQkxqNQ38dqbropQ",
+ "url": "https://alidocs.dingtalk.com/i/nodes/X6GRezwJlYxMoDeBsQkxqNQ38dqbropQ?utm_scene=team_space"
+ },
+ {
+ "docType": "folder",
+ "modifiedTime": null,
+ "name": "测试",
+ "nodeId": "1OQX0akWmBejogd0TvQ7oN4oVGlDd3mE",
+ "url": "https://alidocs.dingtalk.com/i/nodes/1OQX0akWmBejogd0TvQ7oN4oVGlDd3mE?utm_scene=team_space"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 10,
+ "documents": [
+ {
+ "docType": "adoc",
+ "modifiedTime": null,
+ "name": "DWS shortcut 真实测试文档 20260715",
+ "nodeId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "url": "https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO?utm_scene=person_space"
+ },
+ {
+ "docType": "able",
+ "modifiedTime": null,
+ "name": "🧪测试 工作区目录扫描 - 2026-04-27 21:27:03",
+ "nodeId": "yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r",
+ "url": "https://alidocs.dingtalk.com/i/nodes/yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r?utm_scene=person_space"
+ },
+ {
+ "docType": "able",
+ "modifiedTime": null,
+ "name": "文件扫描测试 -20260414",
+ "nodeId": "3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm",
+ "url": "https://alidocs.dingtalk.com/i/nodes/3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm?utm_scene=person_space"
+ },
+ {
+ "docType": "able",
+ "modifiedTime": null,
+ "name": "文件扫描测试(25)",
+ "nodeId": "QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N",
+ "url": "https://alidocs.dingtalk.com/i/nodes/QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N?utm_scene=person_space"
+ },
+ {
+ "docType": "able",
+ "modifiedTime": null,
+ "name": "文件扫描测试(5)",
+ "nodeId": "Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq",
+ "url": "https://alidocs.dingtalk.com/i/nodes/Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq?utm_scene=person_space"
+ },
+ {
+ "docType": "able",
+ "modifiedTime": null,
+ "name": "文件扫描测试(24)",
+ "nodeId": "OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4",
+ "url": "https://alidocs.dingtalk.com/i/nodes/OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4?utm_scene=person_space"
+ },
+ {
+ "docType": "able",
+ "modifiedTime": null,
+ "name": "文件扫描测试(22)",
+ "nodeId": "OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4",
+ "url": "https://alidocs.dingtalk.com/i/nodes/OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4?utm_scene=person_space"
+ },
+ {
+ "docType": "able",
+ "modifiedTime": null,
+ "name": "文件扫描测试(26)(2)",
+ "nodeId": "l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4",
+ "url": "https://alidocs.dingtalk.com/i/nodes/l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4?utm_scene=person_space"
+ },
+ {
+ "docType": "adoc",
+ "modifiedTime": null,
+ "name": "悟空DWS全部测试账号信息",
+ "nodeId": "X6GRezwJlYxMoDeBsQkxqNQ38dqbropQ",
+ "url": "https://alidocs.dingtalk.com/i/nodes/X6GRezwJlYxMoDeBsQkxqNQ38dqbropQ?utm_scene=team_space"
+ },
+ {
+ "docType": "folder",
+ "modifiedTime": null,
+ "name": "测试",
+ "nodeId": "1OQX0akWmBejogd0TvQ7oN4oVGlDd3mE",
+ "url": "https://alidocs.dingtalk.com/i/nodes/1OQX0akWmBejogd0TvQ7oN4oVGlDd3mE?utm_scene=team_space"
+ }
+ ]
+} |
||
dws doc +share-doc --to <to> --url <url> --note <note>write按姓名把文档链接私信发给某人(自动解析 userId) |
-dws mcp chat send_personal_message --json '{"title":<..>, "text":<..>, "receiverUserId":<..>, "msgType":<..>, "content":<..>}' |
+dws doc +share-doc --to <to> --url <url> --note <note>write复合/智能型按姓名把文档链接私信发给某人(自动解析 userId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 send_personal_message |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_contact_by_key_word;通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。输入 / CLI 输出输入 dws doc +share-doc --to x --url x --note x --yes stdout (空) stderr / error 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 最终用于判定的返回 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=1943ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +share-doc --to '冬翔' --url https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --note 'DWS shortcut 修复复测 20260715:验证 doc +share-doc,请忽略。' --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "openTaskId": "30ETViSW+9qhs7fBO9cbeSocHjj2iUZL4firJPz/h/I="
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "openTaskId": "30ETViSW+9qhs7fBO9cbeSocHjj2iUZL4firJPz/h/I="
+ },
+ "success": true
+} |
dws doc +template-apply --template-id <template-id> --name <name> --folder <folder> --workspace <workspace>write使用指定模板创建新文档 |
dws mcp doc apply_doc_template --json '{"templateId":<..>, "name":<..>, "folderId":<..>, "workspaceId":<..>}' |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/apply_doc_template输入 / CLI 输出输入 dws doc +template-apply --template-id x --name x --folder x --workspace x --yes stdout {
+ "_fake": true,
+ "args": {
+ "folderId": "x",
+ "name": "x",
+ "templateId": "x",
+ "workspaceId": "x"
+ },
+ "product": "doc",
+ "tool": "apply_doc_template"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "folderId": "x",
+ "name": "x",
+ "templateId": "x",
+ "workspaceId": "x"
+ },
+ "product": "doc",
+ "tool": "apply_doc_template"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1093ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test doc +template-apply --template-id DWSREALTESTNOSUCHID0000000000000 --name 'DWS shortcut 真实测试 20260715-151724' --folder DWSREALTESTNOSUCHID0000000000000 --workspace DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[RESOURCE_NOT_FOUND] Requested resource not found (operation: doc/apply_doc_template)\n hint: Check if the resource exists or if your account has permission",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "invalidRequest.inputArgs.invalid",
+ "server_key": "doc",
+ "trace_id": "2127d89817840999701186954e0757"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[RESOURCE_NOT_FOUND] Requested resource not found (operation: doc/apply_doc_template)\n hint: Check if the resource exists or if your account has permission",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "invalidRequest.inputArgs.invalid",
+ "server_key": "doc",
+ "trace_id": "2127d89817840999701186954e0757"
+ }
+} |
||
dws doc +template-list --source <source> --limit <limit> --cursor <cursor>read获取文档模板列表 |
dws mcp doc list_doc_templates --json '{"templateSource":<..>, "maxResults":<..>, "nextCursor":<..>}' |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/list_doc_templates输入 / CLI 输出输入 dws doc +template-list --source MY --limit 1 --cursor x --yes stdout {
+ "_fake": true,
+ "args": {
+ "maxResults": 1,
+ "nextCursor": "x",
+ "templateSource": "MY"
+ },
+ "product": "doc",
+ "tool": "list_doc_templates"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "maxResults": 1,
+ "nextCursor": "x",
+ "templateSource": "MY"
+ },
+ "product": "doc",
+ "tool": "list_doc_templates"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1370ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +template-list --source MY --limit 10 --cursor 0 --yes --format json 真实 stdout {
+ "hasMore": false,
+ "logId": "213ee25c17840994183018652e08e2",
+ "message": "成功获取 3 个模版。",
+ "success": true,
+ "templates": [
+ {
+ "coverUrl": "[REDACTED_OSS_URL]",
+ "description": null,
+ "templateId": "494040872345",
+ "title": "接口定义模版v1.0",
+ "usedCount": null
+ },
+ {
+ "coverUrl": "[REDACTED_OSS_URL]",
+ "description": null,
+ "templateId": "494801282345",
+ "title": "接口定义与描述模版",
+ "usedCount": null
+ },
+ {
+ "coverUrl": "[REDACTED_OSS_URL]",
+ "description": null,
+ "templateId": "111001402345",
+ "title": "2023届钉钉音视频春招海报",
+ "usedCount": null
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "hasMore": false,
+ "logId": "213ee25c17840994183018652e08e2",
+ "message": "成功获取 3 个模版。",
+ "success": true,
+ "templates": [
+ {
+ "coverUrl": "[REDACTED_OSS_URL]",
+ "description": null,
+ "templateId": "494040872345",
+ "title": "接口定义模版v1.0",
+ "usedCount": null
+ },
+ {
+ "coverUrl": "[REDACTED_OSS_URL]",
+ "description": null,
+ "templateId": "494801282345",
+ "title": "接口定义与描述模版",
+ "usedCount": null
+ },
+ {
+ "coverUrl": "[REDACTED_OSS_URL]",
+ "description": null,
+ "templateId": "111001402345",
+ "title": "2023届钉钉音视频春招海报",
+ "usedCount": null
+ }
+ ]
+} |
||
dws doc +template-search --query <query> --source <source> --limit <limit> --cursor <cursor>read根据关键词搜索文档模板 |
dws mcp doc search_doc_templates --json '{"searchName":<..>, "templateSource":<..>, "maxResults":<..>, "nextCursor":<..>}' |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/search_doc_templates输入 / CLI 输出输入 dws doc +template-search --query x --source MY --limit 1 --cursor x --yes stdout {
+ "_fake": true,
+ "args": {
+ "maxResults": 1,
+ "nextCursor": "x",
+ "searchName": "x",
+ "templateSource": "MY"
+ },
+ "product": "doc",
+ "tool": "search_doc_templates"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "maxResults": 1,
+ "nextCursor": "x",
+ "searchName": "x",
+ "templateSource": "MY"
+ },
+ "product": "doc",
+ "tool": "search_doc_templates"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1576ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +template-search --query '测试' --source MY --limit 10 --cursor 0 --yes --format json 真实 stdout {
+ "hasMore": false,
+ "logId": "213ee25c17840994199004331e08a0",
+ "message": "未找到与「测试」相关的模版,请尝试其他关键词。",
+ "success": true,
+ "templates": []
+}真实 stderr / error (空) 真实返回 {
+ "hasMore": false,
+ "logId": "213ee25c17840994199004331e08a0",
+ "message": "未找到与「测试」相关的模版,请尝试其他关键词。",
+ "success": true,
+ "templates": []
+} |
||
dws doc +version-list --node <node> --limit <limit> --cursor <cursor>read查看文档历史版本列表 |
dws mcp doc list_doc_versions --json '{"nodeId":<..>, "maxResults":<..>, "nextCursor":<..>}' |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/list_doc_versions输入 / CLI 输出输入 dws doc +version-list --node x --limit 1 --cursor x --yes stdout {
+ "_fake": true,
+ "args": {
+ "maxResults": 1,
+ "nextCursor": "x",
+ "nodeId": "x"
+ },
+ "product": "doc",
+ "tool": "list_doc_versions"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "maxResults": 1,
+ "nextCursor": "x",
+ "nodeId": "x"
+ },
+ "product": "doc",
+ "tool": "list_doc_versions"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2069ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +version-list --node P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --limit 10 --cursor 0 --yes --format json 真实 stdout {
+ "hasMore": false,
+ "success": true,
+ "versions": [
+ {
+ "createTime": "2026-07-15T10:21:47+08:00",
+ "type": "AUTO_SAVE",
+ "updateTime": "2026-07-15T10:21:47+08:00",
+ "userId": "202397",
+ "version": 0
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "hasMore": false,
+ "success": true,
+ "versions": [
+ {
+ "createTime": "2026-07-15T10:21:47+08:00",
+ "type": "AUTO_SAVE",
+ "updateTime": "2026-07-15T10:21:47+08:00",
+ "userId": "202397",
+ "version": 0
+ }
+ ]
+} |
||
dws doc +version-revert --node <node> --version <version>high-risk-write回滚文档到指定历史版本 |
dws mcp doc revert_doc_version --json '{"nodeId":<..>, "version":<..>}' |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/revert_doc_version输入 / CLI 输出输入 dws doc +version-revert --node x --version 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "version": 1
+ },
+ "product": "doc",
+ "tool": "revert_doc_version"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "version": 1
+ },
+ "product": "doc",
+ "tool": "revert_doc_version"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2065ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +version-revert --node P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --version 1 --yes --format json 真实 stdout {
+ "message": "文档已成功回滚到指定版本。",
+ "revertedToVersion": 1,
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "message": "文档已成功回滚到指定版本。",
+ "revertedToVersion": 1,
+ "success": true
+} |
||
dws doc +version-save --node <node>write手动保存文档版本快照 |
dws mcp doc save_doc_version --json '{"nodeId":<..>}' |
lark doc 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/save_doc_version输入 / CLI 输出输入 dws doc +version-save --node x --yes stdout {
+ "_fake": true,
+ "args": {
+ "nodeId": "x"
+ },
+ "product": "doc",
+ "tool": "save_doc_version"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "nodeId": "x"
+ },
+ "product": "doc",
+ "tool": "save_doc_version"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1853ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test doc +version-save --node P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --yes --format json 真实 stdout {
+ "message": "文档版本已成功保存。",
+ "savedVersion": 1,
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "message": "文档版本已成功保存。",
+ "savedVersion": 1,
+ "success": true
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 | ||
|---|---|---|---|---|---|
dws contact +by-mobile --mobile <mobile>read按手机号查询某人的完整资料(自动解析 userId 后取详情) |
-dws mcp contact get_user_info_by_user_ids --json '{"mobile":<..>, "user_id_list":<..>}' |
+dws contact +by-mobile --mobile <mobile>read复合/智能型按手机号查询某人的完整资料(自动解析 userId 后取详情) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 get_user_info_by_user_ids |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_user_by_mobile;没找到绑定手机号 "x" 的用户;确认号码正确、且该人在当前组织通讯录中。输入 / CLI 输出输入 dws contact +by-mobile --mobile x --yes stdout (空) stderr / error 没找到绑定手机号 "x" 的用户;确认号码正确、且该人在当前组织通讯录中。 最终用于判定的返回 没找到绑定手机号 "x" 的用户;确认号码正确、且该人在当前组织通讯录中。 真实后端测试输入 / 输出真实后端成功exit=0;duration=1884ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test contact +by-mobile --mobile 13161187007 --yes --format json 真实 stdout {
+ "result": [
+ {
+ "isAdmin": false,
+ "orgEmployeeModel": {
+ "depts": [
+ {
+ "deptId": 842379556,
+ "deptName": "模型算法"
+ }
+ ],
+ "jobNumber": "202397",
+ "labels": [],
+ "orgAuthEmail": null,
+ "orgId": null,
+ "orgMasterDisplayName": "张俊韶",
+ "orgMasterUserId": "030386",
+ "orgName": "钉钉",
+ "orgTitle": "",
+ "orgUserId": "202397",
+ "orgUserName": "董鑫阳",
+ "positions": [
+ {
+ "deptId": 842379556,
+ "isMain": true,
+ "managerDisplayName": null,
+ "managerStaffId": null,
+ "title": null,
+ "workStation": "浙江-杭州-阿里中心·杭州未科 D1-20-015"
+ }
+ ]
+ }
+ }
+ ],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "result": [
+ {
+ "isAdmin": false,
+ "orgEmployeeModel": {
+ "depts": [
+ {
+ "deptId": 842379556,
+ "deptName": "模型算法"
+ }
+ ],
+ "jobNumber": "202397",
+ "labels": [],
+ "orgAuthEmail": null,
+ "orgId": null,
+ "orgMasterDisplayName": "张俊韶",
+ "orgMasterUserId": "030386",
+ "orgName": "钉钉",
+ "orgTitle": "",
+ "orgUserId": "202397",
+ "orgUserName": "董鑫阳",
+ "positions": [
+ {
+ "deptId": 842379556,
+ "isMain": true,
+ "managerDisplayName": null,
+ "managerStaffId": null,
+ "title": null,
+ "workStation": "浙江-杭州-阿里中心·杭州未科 D1-20-015"
+ }
+ ]
+ }
+ }
+ ],
+ "success": true
+} |
dws contact +dept-members --dept <dept>read按部门名列出部门成员(自动解析 deptId) |
-dws mcp contact get_dept_members_by_deptId --json '{"query":<..>, "deptIds":<..>}' |
+dws contact +dept-members --dept <dept>read复合/智能型按部门名列出部门成员(自动解析 deptId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 get_dept_members_by_deptId |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_dept_by_keyword;没找到名字里包含 "x" 的部门;换个更准确的部门名再试。输入 / CLI 输出输入 dws contact +dept-members --dept x --yes stdout (空) stderr / error 没找到名字里包含 "x" 的部门;换个更准确的部门名再试。 最终用于判定的返回 没找到名字里包含 "x" 的部门;换个更准确的部门名再试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=1539ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test contact +dept-members --dept '模型算法' --yes --format json 真实 stdout {
+ "deptUserList": [
+ {
+ "userInfo": {
+ "name": "冯铖喆",
+ "userId": "453559"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "何佳瑶",
+ "userId": "548493"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "陈梦媛",
+ "userId": "378607"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "张俊韶",
+ "userId": "030386"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "陈邦杰",
+ "userId": "489149"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "王昊东",
+ "userId": "548778"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "岑锦锋",
+ "userId": "547857"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "彭智韩",
+ "userId": "478801"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "王迎湃",
+ "userId": "543875"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "段旭彬",
+ "userId": "550582"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "牛康佳",
+ "userId": "484887"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "符咏畅",
+ "userId": "519483"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "代成俊",
+ "userId": "167095"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "黄渊卓",
+ "userId": "519019"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "董鑫阳",
+ "userId": "202397"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "崔佳骐",
+ "userId": "534975"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "郑琪欣",
+ "userId": "543310"
+ }
+ }
+ ],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "deptUserList": [
+ {
+ "userInfo": {
+ "name": "冯铖喆",
+ "userId": "453559"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "何佳瑶",
+ "userId": "548493"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "陈梦媛",
+ "userId": "378607"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "张俊韶",
+ "userId": "030386"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "陈邦杰",
+ "userId": "489149"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "王昊东",
+ "userId": "548778"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "岑锦锋",
+ "userId": "547857"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "彭智韩",
+ "userId": "478801"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "王迎湃",
+ "userId": "543875"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "段旭彬",
+ "userId": "550582"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "牛康佳",
+ "userId": "484887"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "符咏畅",
+ "userId": "519483"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "代成俊",
+ "userId": "167095"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "黄渊卓",
+ "userId": "519019"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "董鑫阳",
+ "userId": "202397"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "崔佳骐",
+ "userId": "534975"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "郑琪欣",
+ "userId": "543310"
+ }
+ }
+ ],
+ "success": true
+} |
dws contact +get-roster --staff-id <staff-id> --fields <fields>read查询员工花名册字段信息(学历、家庭、银行卡、合同等) |
dws mcp hrmregister get_authorized_emp_rosterInfo --json '{"staffId":<..>, "fieldCodeList":<..>}' |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; hrmregister/get_authorized_emp_rosterInfo输入 / CLI 输出输入 dws contact +get-roster --staff-id x --fields x --yes stdout {
+ "_fake": true,
+ "args": {
+ "fieldCodeList": [
+ "x"
+ ],
+ "staffId": "x"
+ },
+ "product": "hrmregister",
+ "tool": "get_authorized_emp_rosterInfo"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "fieldCodeList": [
+ "x"
+ ],
+ "staffId": "x"
+ },
+ "product": "hrmregister",
+ "tool": "get_authorized_emp_rosterInfo"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1895ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test contact +get-roster --staff-id x --fields x --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 操作人无花名册管理权限 (operation: hrmregister/get_authorized_emp_rosterInfo)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "2001",
+ "server_key": "hrmregister",
+ "trace_id": "2106d98117840997920166915e087b"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 操作人无花名册管理权限 (operation: hrmregister/get_authorized_emp_rosterInfo)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "2001",
+ "server_key": "hrmregister",
+ "trace_id": "2106d98117840997920166915e087b"
+ }
+} |
||
dws contact +list-dept-members --depts <depts>read查看部门成员(仅本部门,不含下级) |
dws mcp contact <tool> |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/get_dept_members_by_deptId输入 / CLI 输出输入 dws contact +list-dept-members --depts x --yes stdout {
+ "count": 0,
+ "members": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "members": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=965ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test contact +list-dept-members --depts x --yes --format json 真实 stdout {
+ "count": 0,
+ "members": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "members": []
+} |
||
dws contact +list-followingsread获取当前用户的特别关注列表 |
dws mcp contact <tool> |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/list_my_followings输入 / CLI 输出输入 dws contact +list-followings --yes stdout {
+ "count": 0,
+ "followings": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "followings": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1658ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test contact +list-followings --yes --format json 真实 stdout {
+ "count": 13,
+ "followings": [
+ {
+ "openDingTalkId": "D1jIqGatuH3UbjK1S0jAZJrukgiPdVtRlZ"
+ },
+ {
+ "openDingTalkId": "DS8iSxaOjF5pjvmTc3wM85awiEiE"
+ },
+ {
+ "openDingTalkId": "D1jIqGatuH3UrNUuSZbqakTnUpQ3uwcViS"
+ },
+ {
+ "openDingTalkId": "D1jIqGatuH3X0M3DbwmJLFJDaK7t2NhxA"
+ },
+ {
+ "openDingTalkId": "D51G4GOo4SMLvmTc3wM85awiEiE"
+ },
+ {
+ "openDingTalkId": "DHpuMVMNL77HvmTc3wM85awiEiE"
+ },
+ {
+ "openDingTalkId": "DO3r8ZwxEZ7iSvmTc3wM85awiEiE"
+ },
+ {
+ "openDingTalkId": "DbQkLTHgGzOiSvmTc3wM85awiEiE"
+ },
+ {
+ "openDingTalkId": "D1jIqGatuH3UgB25OaELcBlHqiPGB82YtU"
+ },
+ {
+ "openDingTalkId": "D8y2OTDIEjFjWZ8DyfnKC9lug4rSiPJt8I"
+ },
+ {
+ "openDingTalkId": "DepgurAiSOr3bvpshro641ZyKOpvhZI2tI"
+ },
+ {
+ "openDingTalkId": "DtMlaaX4m2p8qiPOT4eDpd1MUBtiiFg6Xhx"
+ },
+ {
+ "openDingTalkId": "D1jIqGatuH3U4ekOiiRj3wcvSfoaqqfvEb"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 13,
+ "followings": [
+ {
+ "openDingTalkId": "D1jIqGatuH3UbjK1S0jAZJrukgiPdVtRlZ"
+ },
+ {
+ "openDingTalkId": "DS8iSxaOjF5pjvmTc3wM85awiEiE"
+ },
+ {
+ "openDingTalkId": "D1jIqGatuH3UrNUuSZbqakTnUpQ3uwcViS"
+ },
+ {
+ "openDingTalkId": "D1jIqGatuH3X0M3DbwmJLFJDaK7t2NhxA"
+ },
+ {
+ "openDingTalkId": "D51G4GOo4SMLvmTc3wM85awiEiE"
+ },
+ {
+ "openDingTalkId": "DHpuMVMNL77HvmTc3wM85awiEiE"
+ },
+ {
+ "openDingTalkId": "DO3r8ZwxEZ7iSvmTc3wM85awiEiE"
+ },
+ {
+ "openDingTalkId": "DbQkLTHgGzOiSvmTc3wM85awiEiE"
+ },
+ {
+ "openDingTalkId": "D1jIqGatuH3UgB25OaELcBlHqiPGB82YtU"
+ },
+ {
+ "openDingTalkId": "D8y2OTDIEjFjWZ8DyfnKC9lug4rSiPJt8I"
+ },
+ {
+ "openDingTalkId": "DepgurAiSOr3bvpshro641ZyKOpvhZI2tI"
+ },
+ {
+ "openDingTalkId": "DtMlaaX4m2p8qiPOT4eDpd1MUBtiiFg6Xhx"
+ },
+ {
+ "openDingTalkId": "D1jIqGatuH3U4ekOiiRj3wcvSfoaqqfvEb"
+ }
+ ]
+} |
||
dws contact +list-role-members --id <id>read查询角色下的成员列表 |
dws mcp contact <tool> |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/get_label_members_by_labelId输入 / CLI 输出输入 dws contact +list-role-members --id x --yes stdout {
+ "count": 0,
+ "members": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "members": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1162ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test contact +list-role-members --id DWSREALREADNOSUCHID0000000000000 --yes --format json 真实 stdout {
+ "count": 0,
+ "members": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "members": []
+} |
||
dws contact +list-rolesread获取企业所有角色(标签)列表 |
dws mcp contact <tool> |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/get_org_labels输入 / CLI 输出输入 dws contact +list-roles --yes stdout {
+ "count": 0,
+ "roles": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "roles": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1227ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test contact +list-roles --yes --format json 真实 stdout {
+ "count": 0,
+ "roles": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "roles": []
+} |
||
dws contact +list-roster-fieldsread查询花名册有权限的字段列表 |
dws mcp hrmregister list_authorized_roster_fields |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; hrmregister/list_authorized_roster_fields输入 / CLI 输出输入 dws contact +list-roster-fields --yes stdout {
+ "_fake": true,
+ "args": {},
+ "product": "hrmregister",
+ "tool": "list_authorized_roster_fields"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {},
+ "product": "hrmregister",
+ "tool": "list_authorized_roster_fields"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1305ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 权限 / 鉴权不足 / 非 CLI 可修 +真实账号、应用 scope 或资源权限不足;CLI 只能如实暴露,不能在本仓库内修复权限。 真实输入 /private/tmp/dws-real-test contact +list-roster-fields --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 操作人无花名册管理权限 (operation: hrmregister/list_authorized_roster_fields)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "2001",
+ "server_key": "hrmregister",
+ "trace_id": "213ee25c17840997934295673e08e2"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 操作人无花名册管理权限 (operation: hrmregister/list_authorized_roster_fields)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "2001",
+ "server_key": "hrmregister",
+ "trace_id": "213ee25c17840997934295673e08e2"
+ }
+} |
||
dws contact +list-sub-depts --dept <dept>read查看指定部门的子部门 |
dws mcp contact <tool> |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/get_sub_depts_by_dept_id输入 / CLI 输出输入 dws contact +list-sub-depts --dept 1 --yes stdout {
+ "count": 0,
+ "depts": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "depts": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1217ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test contact +list-sub-depts --dept 842379556 --yes --format json 真实 stdout {
+ "count": 0,
+ "depts": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "depts": []
+} |
||
dws contact +lookup --name <name>read按姓名查询某人的完整资料(自动解析 userId 后取详情) |
-dws mcp contact get_user_info_by_user_ids --json '{"user_id_list":<..>}' |
+dws contact +lookup --name <name>read复合/智能型按姓名查询某人的完整资料(自动解析 userId 后取详情) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 get_user_info_by_user_ids |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_contact_by_key_word;通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。输入 / CLI 输出输入 dws contact +lookup --name x --yes stdout (空) stderr / error 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 最终用于判定的返回 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=1698ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test contact +lookup --name '冬翔' --yes --format json 真实 stdout {
+ "result": [
+ {
+ "isAdmin": true,
+ "orgEmployeeModel": {
+ "depts": [
+ {
+ "deptId": 996530034,
+ "deptName": "AI终端与创新"
+ }
+ ],
+ "jobNumber": "103262",
+ "labels": [
+ {
+ "groupName": "默认",
+ "id": 2679876691,
+ "name": "子管理员",
+ "tagGroupCode": "2679876691"
+ },
+ {
+ "groupName": "默认",
+ "id": 2679876693,
+ "name": "主管",
+ "tagGroupCode": "2679876693"
+ }
+ ],
+ "orgAuthEmail": null,
+ "orgId": null,
+ "orgMasterDisplayName": "朱鸿",
+ "orgMasterUserId": "024083",
+ "orgName": "钉钉",
+ "orgTitle": "",
+ "orgUserId": "103262",
+ "orgUserName": "夏东翔",
+ "positions": [
+ {
+ "deptId": 996530034,
+ "isMain": true,
+ "managerDisplayName": null,
+ "managerStaffId": null,
+ "title": null,
+ "workStation": "浙江-杭州-阿里中心·杭州未科 "
+ }
+ ]
+ }
+ }
+ ],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "result": [
+ {
+ "isAdmin": true,
+ "orgEmployeeModel": {
+ "depts": [
+ {
+ "deptId": 996530034,
+ "deptName": "AI终端与创新"
+ }
+ ],
+ "jobNumber": "103262",
+ "labels": [
+ {
+ "groupName": "默认",
+ "id": 2679876691,
+ "name": "子管理员",
+ "tagGroupCode": "2679876691"
+ },
+ {
+ "groupName": "默认",
+ "id": 2679876693,
+ "name": "主管",
+ "tagGroupCode": "2679876693"
+ }
+ ],
+ "orgAuthEmail": null,
+ "orgId": null,
+ "orgMasterDisplayName": "朱鸿",
+ "orgMasterUserId": "024083",
+ "orgName": "钉钉",
+ "orgTitle": "",
+ "orgUserId": "103262",
+ "orgUserName": "夏东翔",
+ "positions": [
+ {
+ "deptId": 996530034,
+ "isMain": true,
+ "managerDisplayName": null,
+ "managerStaffId": null,
+ "title": null,
+ "workStation": "浙江-杭州-阿里中心·杭州未科 "
+ }
+ ]
+ }
+ }
+ ],
+ "success": true
+} |
dws contact +meread查看我自己的通讯录资料(姓名/userId/手机/部门/组织,干净投影) |
-dws mcp contact <tool> |
+dws contact +meread复合/智能型查看我自己的通讯录资料(姓名/userId/手机/部门/组织,干净投影) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/get_current_user_profile输入 / CLI 输出输入 dws contact +me --yes stdout {
+ "_fake": true,
+ "args": {},
+ "product": "contact",
+ "tool": "get_current_user_profile"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {},
+ "product": "contact",
+ "tool": "get_current_user_profile"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1072ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test contact +me --yes --format json 真实 stdout {
+ "dept": "模型算法",
+ "mobile": "13161187007",
+ "name": "董鑫阳",
+ "org": "钉钉",
+ "userId": "202397"
+}真实 stderr / error (空) 真实返回 {
+ "dept": "模型算法",
+ "mobile": "13161187007",
+ "name": "董鑫阳",
+ "org": "钉钉",
+ "userId": "202397"
+} |
dws contact +org --name <name>read按姓名查某人所在部门的详情(自动解析 userId 与 deptId) |
-dws mcp contact get_dept_info_by_dept_id --json '{"user_id_list":<..>, "deptId":<..>}' |
+dws contact +org --name <name>read复合/智能型按姓名查某人所在部门的详情(自动解析 userId 与 deptId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 get_dept_info_by_dept_id |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_contact_by_key_word;通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。输入 / CLI 输出输入 dws contact +org --name x --yes stdout (空) stderr / error 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 最终用于判定的返回 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=1627ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test contact +org --name '冬翔' --yes --format json 真实 stdout {
+ "result": {
+ "deptId": 996530034,
+ "deptName": "AI终端与创新",
+ "memberCount": 5
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "result": {
+ "deptId": 996530034,
+ "deptName": "AI终端与创新",
+ "memberCount": 5
+ },
+ "success": true
+} |
dws contact +resolve-dept --name <name>read按名称搜索部门并解析出唯一 deptId(只读) |
-dws mcp contact <tool> |
+dws contact +resolve-dept --name <name>read复合/智能型按名称搜索部门并解析出唯一 deptId(只读) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_dept_by_keyword;没有找到名称包含 x 的部门输入 / CLI 输出输入 dws contact +resolve-dept --name x --yes stdout (空) stderr / error 没有找到名称包含 x 的部门 最终用于判定的返回 没有找到名称包含 x 的部门 真实后端测试输入 / 输出真实后端成功exit=0;duration=1186ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test contact +resolve-dept --name '模型算法' --yes --format json 真实 stdout {
+ "deptId": "842379556",
+ "name": "技术平台-模型算法",
+ "resolved": true
+}真实 stderr / error (空) 真实返回 {
+ "deptId": "842379556",
+ "name": "技术平台-模型算法",
+ "resolved": true
+} |
dws contact +search-mobile --mobile <mobile>read按手机号搜索通讯录用户 |
dws mcp contact <tool> |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_user_by_mobile输入 / CLI 输出输入 dws contact +search-mobile --mobile x --yes stdout {
+ "count": 0,
+ "users": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "users": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1415ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test contact +search-mobile --mobile 13000000000 --yes --format json 真实 stdout {
+ "count": 0,
+ "users": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "users": []
+} |
||
dws contact +search-user --query <query>read按关键词搜索通讯录用户 |
dws mcp contact <tool> |
lark-cli contact +search-user |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_contact_by_key_word输入 / CLI 输出输入 dws contact +search-user --query x --yes stdout {
+ "count": 0,
+ "users": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "users": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1419ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test contact +search-user --query '测试' --yes --format json 真实 stdout {
+ "count": 4,
+ "users": [
+ {
+ "flowerName": null,
+ "name": null,
+ "openDingTalkId": "Dn3FQ9n3oCiiNviSya2usICjFug4rSiPJt8I",
+ "title": null,
+ "userId": null
+ },
+ {
+ "flowerName": null,
+ "name": null,
+ "openDingTalkId": "Dxud965XFNRyGCOG0Bwk0pVug4rSiPJt8I",
+ "title": null,
+ "userId": null
+ },
+ {
+ "flowerName": null,
+ "name": null,
+ "openDingTalkId": "D1jIqGatuH3VffnYwNdg1p2LlYiSf05oYii",
+ "title": null,
+ "userId": null
+ },
+ {
+ "flowerName": null,
+ "name": "测试",
+ "openDingTalkId": "D1jIqGatuH3WSeoELOC89rgTx03b5vNii1",
+ "title": "",
+ "userId": "036230684122903146"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 4,
+ "users": [
+ {
+ "flowerName": null,
+ "name": null,
+ "openDingTalkId": "Dn3FQ9n3oCiiNviSya2usICjFug4rSiPJt8I",
+ "title": null,
+ "userId": null
+ },
+ {
+ "flowerName": null,
+ "name": null,
+ "openDingTalkId": "Dxud965XFNRyGCOG0Bwk0pVug4rSiPJt8I",
+ "title": null,
+ "userId": null
+ },
+ {
+ "flowerName": null,
+ "name": null,
+ "openDingTalkId": "D1jIqGatuH3VffnYwNdg1p2LlYiSf05oYii",
+ "title": null,
+ "userId": null
+ },
+ {
+ "flowerName": null,
+ "name": "测试",
+ "openDingTalkId": "D1jIqGatuH3WSeoELOC89rgTx03b5vNii1",
+ "title": "",
+ "userId": "036230684122903146"
+ }
+ ]
+} |
||
dws contact +team --name <name>read按姓名列出某人所在部门的成员(自动解析 userId 与 deptId) |
-dws mcp contact get_dept_members_by_deptId --json '{"user_id_list":<..>, "deptIds":<..>}' |
+dws contact +team --name <name>read复合/智能型按姓名列出某人所在部门的成员(自动解析 userId 与 deptId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 get_dept_members_by_deptId |
lark contact 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_contact_by_key_word;通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。输入 / CLI 输出输入 dws contact +team --name x --yes stdout (空) stderr / error 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 最终用于判定的返回 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=1738ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test contact +team --name '冬翔' --yes --format json 真实 stdout {
+ "deptUserList": [
+ {
+ "userInfo": {
+ "name": "黄文杰",
+ "userId": "106261"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "夏东翔",
+ "userId": "103262"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "何伟楠",
+ "userId": "106201"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "汪鑫",
+ "userId": "323179"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "刘光宇",
+ "userId": "112161"
+ }
+ }
+ ],
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "deptUserList": [
+ {
+ "userInfo": {
+ "name": "黄文杰",
+ "userId": "106261"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "夏东翔",
+ "userId": "103262"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "何伟楠",
+ "userId": "106201"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "汪鑫",
+ "userId": "323179"
+ }
+ },
+ {
+ "userInfo": {
+ "name": "刘光宇",
+ "userId": "112161"
+ }
+ }
+ ],
+ "success": true
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 | ||
|---|---|---|---|---|---|
dws minutes +action-itemsread取我最新一条妙记里的待办事项 |
-dws mcp minutes list_minutes_todos --json '{"belongingConditionId":<..>, "maxResults":<..>, "taskUuid":<..>}' |
+dws minutes +action-itemsread复合/智能型取我最新一条妙记里的待办事项 |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 list_minutes_todos |
lark minutes 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; minutes/list_by_keyword_and_time_range;暂无妙记输入 / CLI 输出输入 dws minutes +action-items --yes stdout (空) stderr / error 暂无妙记 最终用于判定的返回 暂无妙记 真实后端测试输入 / 输出真实后端返回错误exit=3;duration=1286ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 缺妙记/听记真实 fixture / 需真实 fixture,非 CLI 可直接修 +当前账号没有满足条件的妙记/听记或录制会话;需准备真实会议产物后复测。 真实输入 /private/tmp/dws-real-test minutes +action-items --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "暂无妙记"
+ }
+}真实返回 {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "暂无妙记"
+ }
+} |
dws minutes +detail --id <id> --artifacts <artifacts> --direction <direction>read一条命令聚合取一条妙记(听记)的多项产物(基础信息/摘要/关键词/逐字稿/待办) |
-dws mcp minutes <tool> |
+dws minutes +detail --id <id> --artifacts <artifacts> --direction <direction>read复合/智能型一条命令聚合取一条妙记(听记)的多项产物(基础信息/摘要/关键词/逐字稿/待办) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark-cli minutes +detail |
+实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);未知的 --artifacts 取值 "x",可选: basic,summary,keywords,transcript,todos输入 / CLI 输出输入 dws minutes +detail --id x --artifacts x --direction x --yes stdout (空) stderr / error 未知的 --artifacts 取值 "x",可选: basic,summary,keywords,transcript,todos 最终用于判定的返回 未知的 --artifacts 取值 "x",可选: basic,summary,keywords,transcript,todos 真实后端测试输入 / 输出真实后端成功exit=0;duration=2608ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test minutes +detail --id DWSREALREADNOSUCHID0000000000000 --artifacts basic --direction older --yes --format json 真实 stdout {
+ "basic": {
+ "error": "[UNCLASSIFIED] taskUuid is invalid\n hint: Use --verbose for detailed error logs"
+ },
+ "taskUuid": "DWSREALREADNOSUCHID0000000000000"
+}真实 stderr / error (空) 真实返回 {
+ "basic": {
+ "error": "[UNCLASSIFIED] taskUuid is invalid\n hint: Use --verbose for detailed error logs"
+ },
+ "taskUuid": "DWSREALREADNOSUCHID0000000000000"
+} |
dws minutes +latest-minutes --keyword <keyword>read取我最新的一条妙记(听记)详情 |
-dws mcp minutes get_minutes_basic_info --json '{"belongingConditionId":<..>, "maxResults":<..>, "taskUuid":<..>}' |
+dws minutes +latest-minutes --keyword <keyword>read复合/智能型取我最新的一条妙记(听记)详情 |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 get_minutes_basic_info |
lark minutes 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; minutes/list_by_keyword_and_time_range;暂无妙记输入 / CLI 输出输入 dws minutes +latest-minutes --keyword x --yes stdout (空) stderr / error 暂无妙记 最终用于判定的返回 暂无妙记 真实后端测试输入 / 输出真实后端返回错误exit=3;duration=8499ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 缺妙记/听记真实 fixture / 需真实 fixture,非 CLI 可直接修 +当前账号没有满足条件的妙记/听记或录制会话;需准备真实会议产物后复测。 真实输入 /private/tmp/dws-real-test minutes +latest-minutes --keyword '测试' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "暂无妙记"
+ }
+}真实返回 {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "暂无妙记"
+ }
+} |
dws minutes +list-all --query <query> --limit <limit> --cursor <cursor>read查询我有权限访问的所有听记列表 |
dws mcp minutes <tool> |
lark minutes 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; minutes/list_by_keyword_and_time_range输入 / CLI 输出输入 dws minutes +list-all --query x --limit 1 --cursor x --yes stdout {
+ "count": 0,
+ "minutes": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "minutes": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=23790ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test minutes +list-all --query '测试' --limit 10 --cursor 0 --yes --format json 真实 stdout {
+ "count": 0,
+ "minutes": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "minutes": []
+} |
||
dws minutes +list-mine --query <query> --limit <limit> --cursor <cursor>read查询我创建的听记列表 |
dws mcp minutes <tool> |
lark minutes 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; minutes/list_by_keyword_and_time_range输入 / CLI 输出输入 dws minutes +list-mine --query x --limit 1 --cursor x --yes stdout {
+ "count": 0,
+ "minutes": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "minutes": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=27516ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test minutes +list-mine --query '测试' --limit 10 --cursor 0 --yes --format json 真实 stdout {
+ "count": 0,
+ "minutes": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "minutes": []
+} |
||
dws minutes +list-shared --query <query> --limit <limit> --cursor <cursor>read查询他人共享给我的听记列表 |
dws mcp minutes <tool> |
lark minutes 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; minutes/list_by_keyword_and_time_range输入 / CLI 输出输入 dws minutes +list-shared --query x --limit 1 --cursor x --yes stdout {
+ "count": 0,
+ "minutes": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "minutes": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1362ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test minutes +list-shared --query '测试' --limit 10 --cursor 0 --yes --format json 真实 stdout {
+ "count": 0,
+ "minutes": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "minutes": []
+} |
||
dws minutes +minutes-search --query <query>read按关键词搜索我的妙记并投影列表 |
-dws mcp minutes <tool> |
+dws minutes +minutes-search --query <query>read复合/智能型按关键词搜索我的妙记并投影列表 |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark minutes 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; minutes/list_by_keyword_and_time_range;没搜到妙记输入 / CLI 输出输入 dws minutes +minutes-search --query x --yes stdout (空) stderr / error 没搜到妙记 最终用于判定的返回 没搜到妙记 真实后端测试输入 / 输出真实后端返回错误exit=3;duration=1150ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test minutes +minutes-search --query '测试' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "没搜到妙记"
+ }
+}真实返回 {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "没搜到妙记"
+ }
+} |
dws minutes +record-pause --id <id> --session-id <session-id>write暂停听记录音 |
dws mcp minutes 执行听记指令-发起AI听记录音 --json '{"cmd":<..>, "uuid":<..>, "sessionId":<..>}' |
lark minutes 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; minutes/执行听记指令-发起AI听记录音输入 / CLI 输出输入 dws minutes +record-pause --id x --session-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "cmd": "pause",
+ "sessionId": "x",
+ "uuid": "x"
+ },
+ "product": "minutes",
+ "tool": "执行听记指令-发起AI听记录音"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cmd": "pause",
+ "sessionId": "x",
+ "uuid": "x"
+ },
+ "product": "minutes",
+ "tool": "执行听记指令-发起AI听记录音"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1233ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test minutes +record-pause --id DWSREALTESTNOSUCHID0000000000000 --session-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] aiAgentTestRunCmdUnknownError (operation: minutes/执行听记指令-发起AI听记录音)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "aiAgentTestRunCmdUnknownError",
+ "server_key": "minutes",
+ "trace_id": "0bb7c36217840999713124987e0757"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] aiAgentTestRunCmdUnknownError (operation: minutes/执行听记指令-发起AI听记录音)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "aiAgentTestRunCmdUnknownError",
+ "server_key": "minutes",
+ "trace_id": "0bb7c36217840999713124987e0757"
+ }
+} |
||
dws minutes +record-resume --id <id> --session-id <session-id>write恢复听记录音 |
dws mcp minutes 执行听记指令-发起AI听记录音 --json '{"cmd":<..>, "uuid":<..>, "sessionId":<..>}' |
lark minutes 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; minutes/执行听记指令-发起AI听记录音输入 / CLI 输出输入 dws minutes +record-resume --id x --session-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "cmd": "resume",
+ "sessionId": "x",
+ "uuid": "x"
+ },
+ "product": "minutes",
+ "tool": "执行听记指令-发起AI听记录音"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cmd": "resume",
+ "sessionId": "x",
+ "uuid": "x"
+ },
+ "product": "minutes",
+ "tool": "执行听记指令-发起AI听记录音"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1074ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test minutes +record-resume --id DWSREALTESTNOSUCHID0000000000000 --session-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] aiAgentTestRunCmdUnknownError (operation: minutes/执行听记指令-发起AI听记录音)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "aiAgentTestRunCmdUnknownError",
+ "server_key": "minutes",
+ "trace_id": "0bb7c36217840999724452848e0758"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] aiAgentTestRunCmdUnknownError (operation: minutes/执行听记指令-发起AI听记录音)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "aiAgentTestRunCmdUnknownError",
+ "server_key": "minutes",
+ "trace_id": "0bb7c36217840999724452848e0758"
+ }
+} |
||
dws minutes +record-start --session-id <session-id>write发起听记(开始录音) |
dws mcp minutes 执行听记指令-发起AI听记录音 --json '{"cmd":<..>, "sessionId":<..>}' |
lark minutes 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; minutes/执行听记指令-发起AI听记录音输入 / CLI 输出输入 dws minutes +record-start --session-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "cmd": "create",
+ "sessionId": "x"
+ },
+ "product": "minutes",
+ "tool": "执行听记指令-发起AI听记录音"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cmd": "create",
+ "sessionId": "x"
+ },
+ "product": "minutes",
+ "tool": "执行听记指令-发起AI听记录音"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=821ms;real-backend-safe-negative-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test minutes +record-start --session-id __DWS_SHORTCUT_REAL_TEST_NO_SUCH_ID__ --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "cmd": "create",
+ "operatorUid": 512653609,
+ "sessionId": "__DWS_SHORTCUT_REAL_TEST_NO_SUCH_ID__",
+ "uid": 512653609
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "cmd": "create",
+ "operatorUid": 512653609,
+ "sessionId": "__DWS_SHORTCUT_REAL_TEST_NO_SUCH_ID__",
+ "uid": 512653609
+ },
+ "success": true
+} |
||
dws minutes +record-stop --id <id> --session-id <session-id>write结束听记录音 |
dws mcp minutes 执行听记指令-发起AI听记录音 --json '{"cmd":<..>, "uuid":<..>, "sessionId":<..>}' |
lark minutes 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; minutes/执行听记指令-发起AI听记录音输入 / CLI 输出输入 dws minutes +record-stop --id x --session-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "cmd": "end",
+ "sessionId": "x",
+ "uuid": "x"
+ },
+ "product": "minutes",
+ "tool": "执行听记指令-发起AI听记录音"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cmd": "end",
+ "sessionId": "x",
+ "uuid": "x"
+ },
+ "product": "minutes",
+ "tool": "执行听记指令-发起AI听记录音"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1130ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test minutes +record-stop --id DWSREALTESTNOSUCHID0000000000000 --session-id DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] aiAgentTestRunCmdUnknownError (operation: minutes/执行听记指令-发起AI听记录音)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "aiAgentTestRunCmdUnknownError",
+ "server_key": "minutes",
+ "trace_id": "2127d89817840999735397508e0757"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] aiAgentTestRunCmdUnknownError (operation: minutes/执行听记指令-发起AI听记录音)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "aiAgentTestRunCmdUnknownError",
+ "server_key": "minutes",
+ "trace_id": "2127d89817840999735397508e0757"
+ }
+} |
||
dws minutes +replace-batch --id <id> --pair <pair>write对一条妙记(听记)批量执行多组文字替换(原文=>替换) |
-dws mcp minutes <tool> |
+dws minutes +replace-batch --id <id> --pair <pair>write复合/智能型对一条妙记(听记)批量执行多组文字替换(原文=>替换) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark minutes 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);替换规则 "x" 缺少分隔符 "=>",应为 "原文=>替换"输入 / CLI 输出输入 dws minutes +replace-batch --id x --pair x --yes stdout (空) stderr / error 替换规则 "x" 缺少分隔符 "=>",应为 "原文=>替换" 最终用于判定的返回 替换规则 "x" 缺少分隔符 "=>",应为 "原文=>替换" 真实后端测试输入 / 输出真实后端成功exit=0;duration=941ms;real-backend-safe-negative-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test minutes +replace-batch --id __DWS_SHORTCUT_REAL_TEST_NO_SUCH_ID__ --pair '测试=>测试' --yes --format json 真实 stdout {
+ "applied": 0,
+ "failed": 1,
+ "results": [
+ {
+ "error": "[UNCLASSIFIED] business error: success=false\n hint: Use --verbose for detailed error logs",
+ "originalText": "测试",
+ "replacedText": "测试"
+ }
+ ],
+ "taskUuid": "__DWS_SHORTCUT_REAL_TEST_NO_SUCH_ID__",
+ "total": 1
+}真实 stderr / error (空) 真实返回 {
+ "applied": 0,
+ "failed": 1,
+ "results": [
+ {
+ "error": "[UNCLASSIFIED] business error: success=false\n hint: Use --verbose for detailed error logs",
+ "originalText": "测试",
+ "replacedText": "测试"
+ }
+ ],
+ "taskUuid": "__DWS_SHORTCUT_REAL_TEST_NO_SUCH_ID__",
+ "total": 1
+} |
dws minutes +transcript --keyword <keyword> --direction <direction>read取我最新一条妙记(听记)的逐字稿(语音转写原文) |
-dws mcp minutes get_minutes_transcription --json '{"belongingConditionId":<..>, "maxResults":<..>, "taskUuid":<..>, "direction":<..>}' |
+dws minutes +transcript --keyword <keyword> --direction <direction>read复合/智能型取我最新一条妙记(听记)的逐字稿(语音转写原文) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 get_minutes_transcription |
lark minutes 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; minutes/list_by_keyword_and_time_range;暂无妙记输入 / CLI 输出输入 dws minutes +transcript --keyword x --direction x --yes stdout (空) stderr / error 暂无妙记 最终用于判定的返回 暂无妙记 真实后端测试输入 / 输出真实后端返回错误exit=3;duration=1096ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 缺妙记/听记真实 fixture / 需真实 fixture,非 CLI 可直接修 +当前账号没有满足条件的妙记/听记或录制会话;需准备真实会议产物后复测。 真实输入 /private/tmp/dws-real-test minutes +transcript --keyword '测试' --direction older --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "暂无妙记"
+ }
+}真实返回 {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "暂无妙记"
+ }
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 | ||
|---|---|---|---|---|---|
dws todo +assign --to <to> --task <task> --due <due>write按姓名给某人创建并指派一条待办(自动解析 userId) |
-dws mcp todo create_personal_todo --json '{"subject":<..>, "executorIds":<..>, "PersonalTodoCreateVO":<..>}' |
+dws todo +assign --to <to> --task <task> --due <due>write复合/智能型按姓名给某人创建并指派一条待办(自动解析 userId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 create_personal_todo |
lark-cli task +assign |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_contact_by_key_word;通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。输入 / CLI 输出输入 dws todo +assign --to x --task x --due x --yes stdout (空) stderr / error 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 最终用于判定的返回 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=1651ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test todo +assign --to '冬翔' --task 'DWS shortcut 真实测试 20260715 assign,可忽略' --due 2026-07-16T10:00:00+08:00 --yes --format json 真实 stdout {
+ "arguments": [],
+ "result": {
+ "subject": "DWS shortcut 真实测试 20260715 assign,可忽略",
+ "taskId": "55037683708"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "result": {
+ "subject": "DWS shortcut 真实测试 20260715 assign,可忽略",
+ "taskId": "55037683708"
+ },
+ "success": true
+} |
dws todo +assign-multi --to <to> --task <task>write把一条待办按姓名一次性指派给多个人(自动把每个姓名解析成 userId) |
-dws mcp todo create_personal_todo --json '{"PersonalTodoCreateVO":<..>, "subject":<..>, "executorIds":<..>, "executors":<..>, "count":<..>}' |
+dws todo +assign-multi --to <to> --task <task>write复合/智能型把一条待办按姓名一次性指派给多个人(自动把每个姓名解析成 userId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 create_personal_todo |
lark task 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/search_contact_by_key_word;以下执行人姓名无法唯一解析,已中止、未创建任何待办:
+x: 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。输入 / CLI 输出输入 dws todo +assign-multi --to x --task x --yes stdout (空) stderr / error 以下执行人姓名无法唯一解析,已中止、未创建任何待办: +x: 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 最终用于判定的返回 以下执行人姓名无法唯一解析,已中止、未创建任何待办: +x: 通讯录里没找到叫 "x" 的人;换个更完整的姓名再试。 真实后端测试输入 / 输出真实后端成功exit=0;duration=2445ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test todo +assign-multi --to '冬翔,克谨,怒龙' --task 'DWS shortcut 真实测试 20260715 assign-multi,可忽略' --yes --format json 真实 stdout {
+ "arguments": [],
+ "result": {
+ "subject": "DWS shortcut 真实测试 20260715 assign-multi,可忽略",
+ "taskId": "55037747621"
+ },
+ "success": true
+}
+{
+ "count": 3,
+ "executors": [
+ "夏东翔(103262)",
+ "黄渊卓(519019)",
+ "刘力(075771)"
+ ],
+ "subject": "DWS shortcut 真实测试 20260715 assign-multi,可忽略"
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "result": {
+ "subject": "DWS shortcut 真实测试 20260715 assign-multi,可忽略",
+ "taskId": "55037747621"
+ },
+ "success": true
+}
+{
+ "count": 3,
+ "executors": [
+ "夏东翔(103262)",
+ "黄渊卓(519019)",
+ "刘力(075771)"
+ ],
+ "subject": "DWS shortcut 真实测试 20260715 assign-multi,可忽略"
+} |
dws todo +created-todosread列出我创建的待办(我作为创建人 creator 发起的待办,而非分配给我执行的) |
-dws mcp todo <tool> |
+dws todo +created-todosread复合/智能型列出我创建的待办(我作为创建人 creator 发起的待办,而非分配给我执行的) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark task 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; todo/get_user_todos_in_current_org输入 / CLI 输出输入 dws todo +created-todos --yes stdout {
+ "created": []
+}stderr / error (空) 最终用于判定的返回 {
+ "created": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1733ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test todo +created-todos --yes --format json 真实 stdout {
+ "created": []
+}真实 stderr / error (空) 真实返回 {
+ "created": []
+} |
dws todo +due-todayread列出我今天到期的待办 |
-dws mcp todo <tool> |
+dws todo +due-todayread复合/智能型列出我今天到期的待办 |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark task 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);非法的 role-type "x",合法取值:creator, executor, participant输入 / CLI 输出输入 dws todo +due-today --role-types x --yes stdout (空) stderr / error 非法的 role-type "x",合法取值:creator, executor, participant 最终用于判定的返回 非法的 role-type "x",合法取值:creator, executor, participant 真实后端测试输入 / 输出真实后端返回错误exit=3;duration=1145ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test todo +due-today --role-types executor --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "今天没有到期的待办"
+ }
+}真实返回 {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "今天没有到期的待办"
+ }
+} |
dws todo +get --task-id <task-id>read查询待办详情 |
dws mcp todo get_todo_detail --json '{"taskId":<..>}' |
lark task 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; todo/get_todo_detail输入 / CLI 输出输入 dws todo +get --task-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "taskId": "x"
+ },
+ "product": "todo",
+ "tool": "get_todo_detail"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "taskId": "x"
+ },
+ "product": "todo",
+ "tool": "get_todo_detail"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=3658ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test todo +get --task-id 55119034912 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "todoDetailModel": {
+ "activities": [
+ {
+ "action": "task.self.done",
+ "activityId": "14314572403",
+ "creatorId": 5255888716
+ },
+ {
+ "action": "task.create",
+ "activityId": "14178655650",
+ "creatorId": 2669375904
+ }
+ ],
+ "bizTag": "tb_group_task",
+ "createdTime": 1784017216974,
+ "creatorId": "2669375904",
+ "creatorInfo": {
+ "name": "李龙",
+ "nick": "粤腾",
+ "userId": 2669375904
+ },
+ "detailUrl": {
+ "appUrl": "https://n.dingtalk.com/dingding/dd-todo/detail/index.html?dd_darkmode=true\u0026android_scroll=false\u0026dd_mini_app_id=5000000004746689\u0026dt_editor=true\u0026dd_full_screen=true\u0026showmenu=false\u0026dd_progress=false\u0026dd_amplify=false\u0026newPage=true\u0026at_iframe=1\u0026from=homePage\u0026taskId=55119034912\u0026bizTag=tb_group_task\u0026cid=75985350515#/detail",
+ "pcUrl": "https://n.dingtalk.com/dingding/dd-todo/detail/index.html?dd_darkmode=true\u0026android_scroll=false\u0026dd_mini_app_id=5000000004746689\u0026dt_editor=true\u0026dd_full_screen=true\u0026showmenu=false\u0026dd_progress=false\u0026dd_amplify=false\u0026newPage=true\u0026at_iframe=1\u0026from=homePage\u0026taskId=55119034912\u0026bizTag=tb_group_task\u0026cid=75985350515#/detail"
+ },
+ "dueTime": 1784044740651,
+ "executorIds": [
+ "41129894",
+ "5255888716",
+ "447869",
+ "512653609",
+ "2669375904"
+ ],
+ "executorInfos": [
+ {
+ "name": "梓寻",
+ "nick": "梓寻",
+ "userId": 41129894
+ },
+ {
+ "name": "陈绪",
+ "nick": "陈叙",
+ "userId": 5255888716
+ },
+ {
+ "name": "徐洪鑫",
+ "nick": "崇幻",
+ "userId": 447869
+ },
+ {
+ "name": "董鑫阳",
+ "nick": "念晨",
+ "userId": 512653609
+ },
+ {
+ "name": "李龙",
+ "nick": "粤腾",
+ "userId": 2669375904
+ }
+ ],
+ "finishTime": 0,
+ "isDone": false,
+ "modifiedTime": 1784017216974,
+ "modifierId": "2669375904",
+ "orgId": 439446171,
+ "participantIds": [
+ "41129894",
+ "5255888716",
+ "447869",
+ "512653609",
+ "2669375904"
+ ],
+ "participantInfos": [
+ {
+ "name": "梓寻",
+ "nick": "梓寻",
+ "userId": 41129894
+ },
+ {
+ "name": "陈绪",
+ "nick": "陈叙",
+ "userId": 5255888716
+ },
+ {
+ "name": "徐洪鑫",
+ "nick": "崇幻",
+ "userId": 447869
+ },
+ {
+ "name": "董鑫阳",
+ "nick": "念晨",
+ "userId": 512653609
+ },
+ {
+ "name": "李龙",
+ "nick": "粤腾",
+ "userId": 2669375904
+ }
+ ],
+ "priority": 20,
+ "source": "conversation",
+ "subject": "中控Ai营销各Agent蓝图场景故事动线输出1-2页PPT",
+ "taskId": "55119034912",
+ "tenantId": "75985350515",
+ "tenantType": "group"
+ }
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "todoDetailModel": {
+ "activities": [
+ {
+ "action": "task.self.done",
+ "activityId": "14314572403",
+ "creatorId": 5255888716
+ },
+ {
+ "action": "task.create",
+ "activityId": "14178655650",
+ "creatorId": 2669375904
+ }
+ ],
+ "bizTag": "tb_group_task",
+ "createdTime": 1784017216974,
+ "creatorId": "2669375904",
+ "creatorInfo": {
+ "name": "李龙",
+ "nick": "粤腾",
+ "userId": 2669375904
+ },
+ "detailUrl": {
+ "appUrl": "https://n.dingtalk.com/dingding/dd-todo/detail/index.html?dd_darkmode=true\u0026android_scroll=false\u0026dd_mini_app_id=5000000004746689\u0026dt_editor=true\u0026dd_full_screen=true\u0026showmenu=false\u0026dd_progress=false\u0026dd_amplify=false\u0026newPage=true\u0026at_iframe=1\u0026from=homePage\u0026taskId=55119034912\u0026bizTag=tb_group_task\u0026cid=75985350515#/detail",
+ "pcUrl": "https://n.dingtalk.com/dingding/dd-todo/detail/index.html?dd_darkmode=true\u0026android_scroll=false\u0026dd_mini_app_id=5000000004746689\u0026dt_editor=true\u0026dd_full_screen=true\u0026showmenu=false\u0026dd_progress=false\u0026dd_amplify=false\u0026newPage=true\u0026at_iframe=1\u0026from=homePage\u0026taskId=55119034912\u0026bizTag=tb_group_task\u0026cid=75985350515#/detail"
+ },
+ "dueTime": 1784044740651,
+ "executorIds": [
+ "41129894",
+ "5255888716",
+ "447869",
+ "512653609",
+ "2669375904"
+ ],
+ "executorInfos": [
+ {
+ "name": "梓寻",
+ "nick": "梓寻",
+ "userId": 41129894
+ },
+ {
+ "name": "陈绪",
+ "nick": "陈叙",
+ "userId": 5255888716
+ },
+ {
+ "name": "徐洪鑫",
+ "nick": "崇幻",
+ "userId": 447869
+ },
+ {
+ "name": "董鑫阳",
+ "nick": "念晨",
+ "userId": 512653609
+ },
+ {
+ "name": "李龙",
+ "nick": "粤腾",
+ "userId": 2669375904
+ }
+ ],
+ "finishTime": 0,
+ "isDone": false,
+ "modifiedTime": 1784017216974,
+ "modifierId": "2669375904",
+ "orgId": 439446171,
+ "participantIds": [
+ "41129894",
+ "5255888716",
+ "447869",
+ "512653609",
+ "2669375904"
+ ],
+ "participantInfos": [
+ {
+ "name": "梓寻",
+ "nick": "梓寻",
+ "userId": 41129894
+ },
+ {
+ "name": "陈绪",
+ "nick": "陈叙",
+ "userId": 5255888716
+ },
+ {
+ "name": "徐洪鑫",
+ "nick": "崇幻",
+ "userId": 447869
+ },
+ {
+ "name": "董鑫阳",
+ "nick": "念晨",
+ "userId": 512653609
+ },
+ {
+ "name": "李龙",
+ "nick": "粤腾",
+ "userId": 2669375904
+ }
+ ],
+ "priority": 20,
+ "source": "conversation",
+ "subject": "中控Ai营销各Agent蓝图场景故事动线输出1-2页PPT",
+ "taskId": "55119034912",
+ "tenantId": "75985350515",
+ "tenantType": "group"
+ }
+ },
+ "success": true
+} |
||
dws todo +get-my-tasks --page <page> --size <size> --status <status> --priority <priority> --role-types <role-types> --plan-finish-start <plan-finish-start> --plan-finish-end <plan-finish-end>read查询当前组织下我的待办列表 |
dws mcp todo <tool> |
lark-cli task +get-my-tasks |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; todo/get_user_todos_in_current_org输入 / CLI 输出输入 dws todo +get-my-tasks --page x --size x --status true --priority x --role-types x --plan-finish-start 1 --plan-finish-end 1 --yes stdout {
+ "count": 0,
+ "todos": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "todos": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1475ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test todo +get-my-tasks --page 1 --size 10 --status false --priority x --role-types executor --plan-finish-start 1 --plan-finish-end 1 --yes --format json 真实 stdout {
+ "count": 0,
+ "todos": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "todos": []
+} |
||
dws todo +list-attachment --task-id <task-id>read查询待办任务的附件列表 |
dws mcp todo <tool> |
lark task 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; todo/list_todo_attachment输入 / CLI 输出输入 dws todo +list-attachment --task-id x --yes stdout {
+ "attachments": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "attachments": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=3413ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test todo +list-attachment --task-id 55119034912 --yes --format json 真实 stdout {
+ "attachments": [],
+ "count": 0
+}真实 stderr / error (空) 真实返回 {
+ "attachments": [],
+ "count": 0
+} |
||
dws todo +list-comment --task-id <task-id> --page <page> --size <size>read查询待办评论列表 |
dws mcp todo <tool> |
lark task 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; todo/list_todo_comment输入 / CLI 输出输入 dws todo +list-comment --task-id x --page x --size x --yes stdout {
+ "comments": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "comments": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2191ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test todo +list-comment --task-id 55119034912 --page 1 --size 10 --yes --format json 真实 stdout {
+ "comments": [],
+ "count": 0
+}真实 stderr / error (空) 真实返回 {
+ "comments": [],
+ "count": 0
+} |
||
dws todo +list-sub --task-id <task-id>read查询子待办列表 |
dws mcp todo <tool> |
lark task 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; todo/list_sub_tasks输入 / CLI 输出输入 dws todo +list-sub --task-id x --yes stdout {
+ "count": 0,
+ "subTasks": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "subTasks": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1940ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test todo +list-sub --task-id 55119034912 --yes --format json 真实 stdout {
+ "count": 0,
+ "subTasks": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "subTasks": []
+} |
||
dws todo +overdueread列出我已过期未完成的待办 |
-dws mcp todo <tool> |
+dws todo +overdueread复合/智能型列出我已过期未完成的待办 |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark task 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; todo/get_user_todos_in_current_org输入 / CLI 输出输入 dws todo +overdue --yes stdout {
+ "overdue": []
+}stderr / error (空) 最终用于判定的返回 {
+ "overdue": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1240ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test todo +overdue --yes --format json 真实 stdout {
+ "overdue": []
+}真实 stderr / error (空) 真实返回 {
+ "overdue": []
+} |
dws todo +related-tasksread一次性列出与我相关的全部待办(我作为创建人/执行人/参与人三种角色的并集,按 taskId 去重) |
-dws mcp todo <tool> |
+dws todo +related-tasksread复合/智能型一次性列出与我相关的全部待办(我作为创建人/执行人/参与人三种角色的并集,按 taskId 去重) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark task 无同名命令(能力/命名不同) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);非法的 role-type "x",合法取值:creator, executor, participant输入 / CLI 输出输入 dws todo +related-tasks --role-types x --status x --yes stdout (空) stderr / error 非法的 role-type "x",合法取值:creator, executor, participant 最终用于判定的返回 非法的 role-type "x",合法取值:creator, executor, participant 真实后端测试输入 / 输出真实后端返回错误exit=3;duration=1122ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test todo +related-tasks --role-types executor --status false --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "没有与你相关的待办(creator/executor/participant 三种角色下均为空)"
+ }
+}真实返回 {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "没有与你相关的待办(creator/executor/participant 三种角色下均为空)"
+ }
+} |
dws todo +remind --task <task> --at <at>write给自己创建一条带截止/提醒时间的待办 |
-dws mcp todo create_personal_todo --json '{"subject":<..>, "PersonalTodoCreateVO":<..>}' |
+dws todo +remind --task <task> --at <at>write复合/智能型给自己创建一条带截止/提醒时间的待办 |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 create_personal_todo |
lark task 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; contact/get_current_user_profile;无法解析当前登录用户的 userId,无法给自己创建待办输入 / CLI 输出输入 dws todo +remind --task x --at x --yes stdout (空) stderr / error 无法解析当前登录用户的 userId,无法给自己创建待办 最终用于判定的返回 无法解析当前登录用户的 userId,无法给自己创建待办 真实后端测试输入 / 输出真实后端成功exit=0;duration=4240ms;real-backend-manual-write; no --mock; no --dry-run; cleanup: taskId 55042039022 deleted successfully 真实输入 /private/tmp/dws-real-test todo +remind --task 'DWS shortcut 修复复测 20260715 remind,可忽略' --at 2026-07-16T10:00:00+08:00 --yes --format json 真实 stdout {
+ "arguments": [],
+ "result": {
+ "subject": "DWS shortcut 修复复测 20260715 remind,可忽略",
+ "taskId": "55042039022"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "result": {
+ "subject": "DWS shortcut 修复复测 20260715 remind,可忽略",
+ "taskId": "55042039022"
+ },
+ "success": true
+} |
dws todo +todo-done --task <task>write按标题关键词把我的某条待办标记完成(自动定位 taskId) |
-dws mcp todo update_todo_done_status --json '{"roleTypes":<..>, "taskId":<..>, "isDone":<..>}' |
+dws todo +todo-done --task <task>write复合/智能型按标题关键词把我的某条待办标记完成(自动定位 taskId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 update_todo_done_status |
lark task 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; todo/get_user_todos_in_current_org;没找到匹配待办:标题里没有 "x" 的待办。输入 / CLI 输出输入 dws todo +todo-done --task x --yes stdout (空) stderr / error 没找到匹配待办:标题里没有 "x" 的待办。 最终用于判定的返回 没找到匹配待办:标题里没有 "x" 的待办。 真实后端测试输入 / 输出真实后端成功exit=0;duration=1771ms;real-backend-safe-negative-write; no --mock; no --dry-run 前置真实资源准备 为 todo +todo-done 创建当前账号自己的临时待办 fixture
+input: /private/tmp/dws-real-test todo +remind --task 'DWS shortcut 真实测试待办 20260715-160449' --at 2026-07-22T10:15:00+08:00 --yes --format json
+exit=0;duration=2611ms
+stdout:
+{
+ "arguments": [],
+ "result": {
+ "subject": "DWS shortcut 真实测试待办 20260715-160449",
+ "taskId": "55055639461"
+ },
+ "success": true
+}
+stderr:
+(空)真实输入 /private/tmp/dws-real-test todo +todo-done --task 'DWS shortcut 真实测试待办 20260715-160449' --yes --format json 真实 stdout {
+ "result": {
+ "success": true
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "result": {
+ "success": true
+ },
+ "success": true
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 | ||
|---|---|---|---|---|---|
dws mail +contact-list --email <email> --limit <limit> --cursor <cursor>read列出指定邮箱的所有邮件联系人 |
dws mcp mail <tool> |
lark mail 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; mail/list_user_mail_contacts输入 / CLI 输出输入 dws mail +contact-list --email x --limit x --cursor x --yes stdout {
+ "contacts": [],
+ "count": 0
+}stderr / error (空) 最终用于判定的返回 {
+ "contacts": [],
+ "count": 0
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=3284ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test mail +contact-list --email xinyang.dxy@alibaba-inc.com --limit 10 --cursor '' --yes --format json 真实 stdout {
+ "contacts": [],
+ "count": 0
+}真实 stderr / error (空) 真实返回 {
+ "contacts": [],
+ "count": 0
+} |
||
dws mail +find-mail-user --query <query> --limit <limit>read按关键词搜索邮箱联系人并投影列表(姓名/昵称/邮箱/工号等) |
-dws mcp mail <tool> |
+dws mail +find-mail-user --query <query> --limit <limit>read复合/智能型按关键词搜索邮箱联系人并投影列表(姓名/昵称/邮箱/工号等) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark mail 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; mail/search_mail_users;没搜到邮箱联系人输入 / CLI 输出输入 dws mail +find-mail-user --query x --limit 1 --yes stdout (空) stderr / error 没搜到邮箱联系人 最终用于判定的返回 没搜到邮箱联系人 真实后端测试输入 / 输出真实后端成功exit=0;duration=3666ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test mail +find-mail-user --query '董鑫阳' --limit 10 --yes --format json 真实 stdout {
+ "count": 1,
+ "users": [
+ {
+ "email": "xinyang.dxy@alibaba-inc.com",
+ "employeeNo": "202397",
+ "id": "----.l------oBfPl:0:----HI-----HWk9nI",
+ "jobTitle": "",
+ "name": "董鑫阳",
+ "nickname": "念晨",
+ "workLocation": "浙江-杭州"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 1,
+ "users": [
+ {
+ "email": "xinyang.dxy@alibaba-inc.com",
+ "employeeNo": "202397",
+ "id": "----.l------oBfPl:0:----HI-----HWk9nI",
+ "jobTitle": "",
+ "name": "董鑫阳",
+ "nickname": "念晨",
+ "workLocation": "浙江-杭州"
+ }
+ ]
+} |
dws mail +folder-list --email <email> --folder <folder>read列出顶层文件夹或指定父文件夹下的子文件夹 |
dws mcp mail <tool> |
lark mail 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; mail/list_folders输入 / CLI 输出输入 dws mail +folder-list --email x --folder x --yes stdout {
+ "count": 0,
+ "folders": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "folders": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=3643ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test mail +folder-list --email xinyang.dxy@alibaba-inc.com --folder 2 --yes --format json 真实 stdout {
+ "count": 0,
+ "folders": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "folders": []
+} |
||
dws mail +recent-mail --limit <limit> --email <email> --folder <folder>read列出收件箱近期邮件会话并投影列表(主题/发件人/时间/threadId) |
-dws mcp mail <tool> |
+dws mail +recent-mail --limit <limit> --email <email> --folder <folder>read复合/智能型列出收件箱近期邮件会话并投影列表(主题/发件人/时间/threadId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark mail 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; mail/list_mailbox_threads;最近没有邮件输入 / CLI 输出输入 dws mail +recent-mail --limit 1 --email x --folder x --yes stdout (空) stderr / error 最近没有邮件 最终用于判定的返回 最近没有邮件 真实后端测试输入 / 输出真实后端成功exit=0;duration=2724ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test mail +recent-mail --limit 10 --email xinyang.dxy@alibaba-inc.com --folder 2 --yes --format json 真实 stdout {
+ "count": 10,
+ "mails": [
+ {
+ "date": "2026-07-15T06:37:28Z",
+ "from": [
+ "work@alibaba-inc.com"
+ ],
+ "subject": "牛康佳(随风)的数据权限申请流程 / NIU, Kangjia's apply data permission ",
+ "threadId": "DzzzzyJeBJL---.iLmnRnm"
+ },
+ {
+ "date": "2026-07-15T06:35:49Z",
+ "from": [
+ "work@alibaba-inc.com"
+ ],
+ "subject": "changefree:diamond应用【albert-agent-2】变更 ",
+ "threadId": "DzzzzyJo3ZK---.hyYf9dO"
+ },
+ {
+ "date": "2026-07-15T06:00:39Z",
+ "from": [
+ "安全服务中心 <snotice@alibaba-inc.com>"
+ ],
+ "subject": "您的名下有1个风险尚未修复,请立即修复! You have 1 vulnerabilities that have not been fixed, please fix them as soon as possible!",
+ "threadId": "DzzzzyKaAwA---.g643XXa"
+ },
+ {
+ "date": "2026-07-15T05:48:41Z",
+ "from": [
+ "aone@alibaba-inc.com <aone@alibaba-inc.com>"
+ ],
+ "subject": "[Aone]应用albert-agent-2预发发布成功",
+ "threadId": "DzzzzyJi7OS---.iCFAI0A"
+ },
+ {
+ "date": "2026-07-15T02:54:00Z",
+ "from": [
+ "work@alibaba-inc.com"
+ ],
+ "subject": "代成俊(璟琦)的数据权限申请流程 / DAI, Chengjun's apply data permission ",
+ "threadId": "DzzzzyKTIMD---.gOEBekI"
+ },
+ {
+ "date": "2026-07-15T02:51:12Z",
+ "from": [
+ "work@alibaba-inc.com"
+ ],
+ "subject": "陈梦媛(星莫)的数据权限申请流程 / CHEN, Mengyuan's apply data permission ",
+ "threadId": "DzzzzyKIHke---.goV93L."
+ },
+ {
+ "date": "2026-07-15T02:06:21Z",
+ "from": [
+ "dingtalk_recruitment@alibaba-inc.com"
+ ],
+ "subject": "【校招】简历即将超期/[Campus Recruitment] Resumes Are About to Expire",
+ "threadId": "DzzzzyJjBhI---.i911RPE"
+ },
+ {
+ "date": "2026-07-15T02:00:05Z",
+ "from": [
+ "dingtalk_recruitment@alibaba-inc.com"
+ ],
+ "subject": "【校招】2026-07-15 面试邀约任务通知/【Campus Recruitment】 2026-07-15 Interview Invitation Task Notice",
+ "threadId": "DzzzzyJeFNO---.iLVkwOD"
+ },
+ {
+ "date": "2026-07-15T01:42:44Z",
+ "from": [
+ "ATA技小蜜 <ATA@alibaba-inc.com>"
+ ],
+ "subject": "【ATA每日精选】【天猫数字分身】(上篇) - AI Native 组织协作与研发的暗物质",
+ "threadId": "DzzzzyJeFdf---.iLWDlI4"
+ },
+ {
+ "date": "2026-07-14T18:24:45Z",
+ "from": [
+ "postmaster@alibaba-inc.com"
+ ],
+ "subject": "垃圾邮件提醒2026年7月15日",
+ "threadId": "DzzzzyJeM2G---.iLDMDRq"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 10,
+ "mails": [
+ {
+ "date": "2026-07-15T06:37:28Z",
+ "from": [
+ "work@alibaba-inc.com"
+ ],
+ "subject": "牛康佳(随风)的数据权限申请流程 / NIU, Kangjia's apply data permission ",
+ "threadId": "DzzzzyJeBJL---.iLmnRnm"
+ },
+ {
+ "date": "2026-07-15T06:35:49Z",
+ "from": [
+ "work@alibaba-inc.com"
+ ],
+ "subject": "changefree:diamond应用【albert-agent-2】变更 ",
+ "threadId": "DzzzzyJo3ZK---.hyYf9dO"
+ },
+ {
+ "date": "2026-07-15T06:00:39Z",
+ "from": [
+ "安全服务中心 <snotice@alibaba-inc.com>"
+ ],
+ "subject": "您的名下有1个风险尚未修复,请立即修复! You have 1 vulnerabilities that have not been fixed, please fix them as soon as possible!",
+ "threadId": "DzzzzyKaAwA---.g643XXa"
+ },
+ {
+ "date": "2026-07-15T05:48:41Z",
+ "from": [
+ "aone@alibaba-inc.com <aone@alibaba-inc.com>"
+ ],
+ "subject": "[Aone]应用albert-agent-2预发发布成功",
+ "threadId": "DzzzzyJi7OS---.iCFAI0A"
+ },
+ {
+ "date": "2026-07-15T02:54:00Z",
+ "from": [
+ "work@alibaba-inc.com"
+ ],
+ "subject": "代成俊(璟琦)的数据权限申请流程 / DAI, Chengjun's apply data permission ",
+ "threadId": "DzzzzyKTIMD---.gOEBekI"
+ },
+ {
+ "date": "2026-07-15T02:51:12Z",
+ "from": [
+ "work@alibaba-inc.com"
+ ],
+ "subject": "陈梦媛(星莫)的数据权限申请流程 / CHEN, Mengyuan's apply data permission ",
+ "threadId": "DzzzzyKIHke---.goV93L."
+ },
+ {
+ "date": "2026-07-15T02:06:21Z",
+ "from": [
+ "dingtalk_recruitment@alibaba-inc.com"
+ ],
+ "subject": "【校招】简历即将超期/[Campus Recruitment] Resumes Are About to Expire",
+ "threadId": "DzzzzyJjBhI---.i911RPE"
+ },
+ {
+ "date": "2026-07-15T02:00:05Z",
+ "from": [
+ "dingtalk_recruitment@alibaba-inc.com"
+ ],
+ "subject": "【校招】2026-07-15 面试邀约任务通知/【Campus Recruitment】 2026-07-15 Interview Invitation Task Notice",
+ "threadId": "DzzzzyJeFNO---.iLVkwOD"
+ },
+ {
+ "date": "2026-07-15T01:42:44Z",
+ "from": [
+ "ATA技小蜜 <ATA@alibaba-inc.com>"
+ ],
+ "subject": "【ATA每日精选】【天猫数字分身】(上篇) - AI Native 组织协作与研发的暗物质",
+ "threadId": "DzzzzyJeFdf---.iLWDlI4"
+ },
+ {
+ "date": "2026-07-14T18:24:45Z",
+ "from": [
+ "postmaster@alibaba-inc.com"
+ ],
+ "subject": "垃圾邮件提醒2026年7月15日",
+ "threadId": "DzzzzyJeM2G---.iLDMDRq"
+ }
+ ]
+} |
dws mail +search-mail --query <query> --email <email> --size <size>read按 KQL 关键词搜索邮件并投影列表(主题/发件人/时间/messageId) |
-dws mcp mail <tool> |
+dws mail +search-mail --query <query> --email <email> --size <size>read复合/智能型按 KQL 关键词搜索邮件并投影列表(主题/发件人/时间/messageId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark mail 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; mail/search_emails输入 / CLI 输出输入 dws mail +search-mail --query x --email x --size x --yes stdout {
+ "email": "x",
+ "messages": []
+}stderr / error (空) 最终用于判定的返回 {
+ "email": "x",
+ "messages": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1985ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test mail +search-mail --query 'subject:测试' --email xinyang.dxy@alibaba-inc.com --size 10 --yes --format json 真实 stdout {
+ "email": "xinyang.dxy@alibaba-inc.com",
+ "messages": [
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNklS",
+ "subject": "[Aone]实验室[lippi-calladmin单元测试]的构建[#1723]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkml",
+ "subject": "[Aone]实验室[mozi-engine-admin单元测试-Jacoco]的构建[#2611]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNknb",
+ "subject": "[Aone]实验室[lippi-calladmin单元测试]的构建[#1646]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkoy",
+ "subject": "[Aone]实验室[mozi-engine-admin单元测试-Jacoco]的构建[#2609]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkp.",
+ "subject": "[Aone]实验室[mozi-channel-admin-单元测试]的构建[#1498]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkp0",
+ "subject": "[Aone]实验室[mozi-channel-admin-单元测试]的构建[#1497]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkpJ",
+ "subject": "[Aone]实验室[mozi-channel-admin-单元测试]的构建[#1493]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkpL",
+ "subject": "[Aone]实验室[mozi-channel-admin-单元测试]的构建[#1492]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkph",
+ "subject": "[Aone]实验室[mozi-channel-admin-单元测试]的构建[#1491]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkpj",
+ "subject": "[Aone]实验室[mozi-channel-admin-单元测试]的构建[#1490]失败"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "email": "xinyang.dxy@alibaba-inc.com",
+ "messages": [
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNklS",
+ "subject": "[Aone]实验室[lippi-calladmin单元测试]的构建[#1723]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkml",
+ "subject": "[Aone]实验室[mozi-engine-admin单元测试-Jacoco]的构建[#2611]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNknb",
+ "subject": "[Aone]实验室[lippi-calladmin单元测试]的构建[#1646]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkoy",
+ "subject": "[Aone]实验室[mozi-engine-admin单元测试-Jacoco]的构建[#2609]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkp.",
+ "subject": "[Aone]实验室[mozi-channel-admin-单元测试]的构建[#1498]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkp0",
+ "subject": "[Aone]实验室[mozi-channel-admin-单元测试]的构建[#1497]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkpJ",
+ "subject": "[Aone]实验室[mozi-channel-admin-单元测试]的构建[#1493]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkpL",
+ "subject": "[Aone]实验室[mozi-channel-admin-单元测试]的构建[#1492]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkph",
+ "subject": "[Aone]实验室[mozi-channel-admin-单元测试]的构建[#1491]失败"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkpj",
+ "subject": "[Aone]实验室[mozi-channel-admin-单元测试]的构建[#1490]失败"
+ }
+ ]
+} |
dws mail +tag-list --email <email>read列出指定邮箱下的所有邮件标签 |
dws mcp mail <tool> |
lark mail 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; mail/list_tags输入 / CLI 输出输入 dws mail +tag-list --email x --yes stdout {
+ "count": 0,
+ "tags": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "tags": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2606ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test mail +tag-list --email xinyang.dxy@alibaba-inc.com --yes --format json 真实 stdout {
+ "count": 3,
+ "tags": [
+ {
+ "id": "1",
+ "name": "Flagged",
+ "parentId": "0"
+ },
+ {
+ "id": "2",
+ "name": "Completed",
+ "parentId": "0"
+ },
+ {
+ "id": "3",
+ "name": "task",
+ "parentId": "0"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 3,
+ "tags": [
+ {
+ "id": "1",
+ "name": "Flagged",
+ "parentId": "0"
+ },
+ {
+ "id": "2",
+ "name": "Completed",
+ "parentId": "0"
+ },
+ {
+ "id": "3",
+ "name": "task",
+ "parentId": "0"
+ }
+ ]
+} |
||
dws mail +template-list --email <email> --limit <limit> --cursor <cursor>read列出指定邮箱的所有邮件模板 |
dws mcp mail <tool> |
lark mail 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; mail/list_user_message_templates输入 / CLI 输出输入 dws mail +template-list --email x --limit x --cursor x --yes stdout {
+ "count": 0,
+ "templates": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "templates": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=3083ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test mail +template-list --email xinyang.dxy@alibaba-inc.com --limit 10 --cursor '' --yes --format json 真实 stdout {
+ "count": 0,
+ "templates": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "templates": []
+} |
||
dws mail +thread-list --email <email> --folder <folder> --limit <limit> --cursor <cursor> --start <start> --end <end> --ascending <ascending>read列出指定邮箱文件夹下的邮件会话(thread) |
dws mcp mail <tool> |
lark mail 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; mail/list_mailbox_threads输入 / CLI 输出输入 dws mail +thread-list --email x --folder x --limit 1 --cursor x --start x --end x --ascending --yes stdout {
+ "count": 0,
+ "threads": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "threads": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=6434ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test mail +thread-list --email xinyang.dxy@alibaba-inc.com --folder 2 --limit 10 --cursor '' --start 2026-07-16T10:00:00+08:00 --end 2026-07-16T11:00:00+08:00 --ascending --yes --format json 真实 stdout {
+ "count": 0,
+ "threads": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "threads": []
+} |
||
dws mail +unread-mail --email <email> --size <size>read列出未读邮件并投影列表(主题/发件人/时间/messageId) |
-dws mcp mail <tool> |
+dws mail +unread-mail --email <email> --size <size>read复合/智能型列出未读邮件并投影列表(主题/发件人/时间/messageId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark mail 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; mail/search_emails输入 / CLI 输出输入 dws mail +unread-mail --email x --size x --yes stdout {
+ "email": "x",
+ "messages": []
+}stderr / error (空) 最终用于判定的返回 {
+ "email": "x",
+ "messages": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=3469ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test mail +unread-mail --email xinyang.dxy@alibaba-inc.com --size 10 --yes --format json 真实 stdout {
+ "email": "xinyang.dxy@alibaba-inc.com",
+ "messages": [
+ {
+ "date": null,
+ "from": "work@alibaba-inc.com",
+ "messageId": "DzzzzzzNkk0",
+ "subject": "牛康佳(随风)的数据权限申请流程 / NIU, Kangjia's apply data permission "
+ },
+ {
+ "date": null,
+ "from": "work@alibaba-inc.com",
+ "messageId": "DzzzzzzNkk1",
+ "subject": "changefree:diamond应用【albert-agent-2】变更 "
+ },
+ {
+ "date": null,
+ "from": "安全服务中心 <snotice@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkk2",
+ "subject": "您的名下有1个风险尚未修复,请立即修复! You have 1 vulnerabilities that have not been fixed, please fix them as soon as possible!"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkk3",
+ "subject": "[Aone]应用albert-agent-2预发发布成功"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkk4",
+ "subject": "[Aone]应用albert-agent-2预发发布成功"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkk5",
+ "subject": "[Aone]应用albert-agent-2预发发布成功"
+ },
+ {
+ "date": null,
+ "from": "work@alibaba-inc.com",
+ "messageId": "DzzzzzzNkk6",
+ "subject": "代成俊(璟琦)的数据权限申请流程 / DAI, Chengjun's apply data permission "
+ },
+ {
+ "date": null,
+ "from": "work@alibaba-inc.com",
+ "messageId": "DzzzzzzNkk7",
+ "subject": "陈梦媛(星莫)的数据权限申请流程 / CHEN, Mengyuan's apply data permission "
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkk8",
+ "subject": "[Aone]应用albert-agent-2预发发布成功"
+ },
+ {
+ "date": null,
+ "from": "dingtalk_recruitment@alibaba-inc.com",
+ "messageId": "DzzzzzzNkk9",
+ "subject": "【校招】简历即将超期/[Campus Recruitment] Resumes Are About to Expire"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "email": "xinyang.dxy@alibaba-inc.com",
+ "messages": [
+ {
+ "date": null,
+ "from": "work@alibaba-inc.com",
+ "messageId": "DzzzzzzNkk0",
+ "subject": "牛康佳(随风)的数据权限申请流程 / NIU, Kangjia's apply data permission "
+ },
+ {
+ "date": null,
+ "from": "work@alibaba-inc.com",
+ "messageId": "DzzzzzzNkk1",
+ "subject": "changefree:diamond应用【albert-agent-2】变更 "
+ },
+ {
+ "date": null,
+ "from": "安全服务中心 <snotice@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkk2",
+ "subject": "您的名下有1个风险尚未修复,请立即修复! You have 1 vulnerabilities that have not been fixed, please fix them as soon as possible!"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkk3",
+ "subject": "[Aone]应用albert-agent-2预发发布成功"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkk4",
+ "subject": "[Aone]应用albert-agent-2预发发布成功"
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkk5",
+ "subject": "[Aone]应用albert-agent-2预发发布成功"
+ },
+ {
+ "date": null,
+ "from": "work@alibaba-inc.com",
+ "messageId": "DzzzzzzNkk6",
+ "subject": "代成俊(璟琦)的数据权限申请流程 / DAI, Chengjun's apply data permission "
+ },
+ {
+ "date": null,
+ "from": "work@alibaba-inc.com",
+ "messageId": "DzzzzzzNkk7",
+ "subject": "陈梦媛(星莫)的数据权限申请流程 / CHEN, Mengyuan's apply data permission "
+ },
+ {
+ "date": null,
+ "from": "aone@alibaba-inc.com <aone@alibaba-inc.com>",
+ "messageId": "DzzzzzzNkk8",
+ "subject": "[Aone]应用albert-agent-2预发发布成功"
+ },
+ {
+ "date": null,
+ "from": "dingtalk_recruitment@alibaba-inc.com",
+ "messageId": "DzzzzzzNkk9",
+ "subject": "【校招】简历即将超期/[Campus Recruitment] Resumes Are About to Expire"
+ }
+ ]
+} |
dws mail +user-search --keyword <keyword> --employee-no <employee-no> --email <email> --cursor <cursor> --limit <limit>read按关键词或工号搜索邮箱用户(仅企业邮箱) |
dws mcp mail <tool> |
lark mail 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; mail/search_mail_users输入 / CLI 输出输入 dws mail +user-search --keyword x --employee-no x --email x --cursor x --limit x --yes stdout {
+ "count": 0,
+ "users": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "users": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2836ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test mail +user-search --keyword '董鑫阳' --employee-no 202397 --email xinyang.dxy@alibaba-inc.com --cursor '' --limit 10 --yes --format json 真实 stdout {
+ "count": 1,
+ "users": [
+ {
+ "email": "xinyang.dxy@alibaba-inc.com",
+ "employeeNo": "202397",
+ "name": "董鑫阳",
+ "userId": "----.l------oBfPl:0:----HI-----HWk9nI"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 1,
+ "users": [
+ {
+ "email": "xinyang.dxy@alibaba-inc.com",
+ "employeeNo": "202397",
+ "name": "董鑫阳",
+ "userId": "----.l------oBfPl:0:----HI-----HWk9nI"
+ }
+ ]
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 | ||
|---|---|---|---|---|---|
dws oa +approve-by --keyword <keyword> --comment <comment>write按关键词把我的一条待审批单据一键通过(自动定位实例与任务 ID) |
-dws mcp oa approve_processInstance --json '{"starTime":<..>, "endTime":<..>, "query":<..>, "processInstanceId":<..>, "taskId":<..>}' |
+dws oa +approve-by --keyword <keyword> --comment <comment>write复合/智能型按关键词把我的一条待审批单据一键通过(自动定位实例与任务 ID) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 approve_processInstance |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; oa/list_pending_approvals;没找到待审批单据:待我处理的审批里没有标题/单号包含 "x" 的单据。输入 / CLI 输出输入 dws oa +approve-by --keyword x --comment x --yes stdout (空) stderr / error 没找到待审批单据:待我处理的审批里没有标题/单号包含 "x" 的单据。 最终用于判定的返回 没找到待审批单据:待我处理的审批里没有标题/单号包含 "x" 的单据。 真实后端测试输入 / 输出真实后端返回错误exit=3;duration=1318ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test oa +approve-by --keyword __DWS_SHORTCUT_REAL_TEST_NO_SUCH_APPROVAL_20260715-151724__ --comment 'DWS shortcut 真实测试 20260715-151724,安全负向输入,请忽略。' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "没找到待审批单据:待我处理的审批里没有标题/单号包含 \"__DWS_SHORTCUT_REAL_TEST_NO_SUCH_APPROVAL_20260715-151724__\" 的单据。"
+ }
+}真实返回 {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "没找到待审批单据:待我处理的审批里没有标题/单号包含 \"__DWS_SHORTCUT_REAL_TEST_NO_SUCH_APPROVAL_20260715-151724__\" 的单据。"
+ }
+} |
dws oa +done-approvals --limit <limit>read只读列出我已处理过的审批任务(审批历史)并投影为可读列表 |
-dws mcp oa <tool> |
+dws oa +done-approvals --limit <limit>read复合/智能型只读列出我已处理过的审批任务(审批历史)并投影为可读列表 |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; oa/get_done_tasks;没有已处理的审批记录输入 / CLI 输出输入 dws oa +done-approvals --limit 1 --yes stdout (空) stderr / error 没有已处理的审批记录 最终用于判定的返回 没有已处理的审批记录 真实后端测试输入 / 输出真实后端返回错误exit=3;duration=1244ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test oa +done-approvals --limit 10 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "没有已处理的审批记录"
+ }
+}真实返回 {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "没有已处理的审批记录"
+ }
+} |
dws oa +list-cc --page <page> --limit <limit> --query <query>read获取抄送当前用户的审批单列表 |
dws mcp oa <tool> |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; oa/get_noticed_instances输入 / CLI 输出输入 dws oa +list-cc --page x --limit x --query x --yes stdout {
+ "count": 0,
+ "instances": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "instances": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=8468ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test oa +list-cc --page 1 --limit 10 --query '测试' --yes --format json 真实 stdout {
+ "count": 0,
+ "instances": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "instances": []
+} |
||
dws oa +list-executed --page <page> --limit <limit> --query <query>read获取当前用户已经处理过的审批单列表 |
dws mcp oa <tool> |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; oa/get_done_tasks输入 / CLI 输出输入 dws oa +list-executed --page x --limit x --query x --yes stdout {
+ "count": 0,
+ "instances": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "instances": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=29589ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test oa +list-executed --page 1 --limit 10 --query '测试' --yes --format json 真实 stdout {
+ "count": 0,
+ "instances": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "instances": []
+} |
||
dws oa +list-forms --cursor <cursor> --limit <limit>read获取当前用户可见的审批表单列表 |
dws mcp oa <tool> |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; oa/list_user_visible_process输入 / CLI 输出输入 dws oa +list-forms --cursor 1 --limit 1 --yes stdout {
+ "count": 0,
+ "forms": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "forms": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=25611ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test oa +list-forms --cursor 0 --limit 10 --yes --format json 真实 stdout {
+ "count": 0,
+ "forms": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "forms": []
+} |
||
dws oa +list-pending --start <start> --end <end> --page <page> --limit <limit> --query <query>read查询待我处理的审批(时间范围为 epoch 毫秒) |
dws mcp oa <tool> |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; oa/list_pending_approvals输入 / CLI 输出输入 dws oa +list-pending --start 1 --end 1 --page x --limit x --query x --yes stdout {
+ "count": 0,
+ "instances": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "instances": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=8328ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test oa +list-pending --start 1783494851348 --end 1784099651348 --page 1 --limit 10 --query '测试' --yes --format json 真实 stdout {
+ "count": 0,
+ "instances": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "instances": []
+} |
||
dws oa +list-submitted --page <page> --limit <limit> --query <query>read获取当前用户已发起的审批单列表 |
dws mcp oa <tool> |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; oa/get_submitted_instances输入 / CLI 输出输入 dws oa +list-submitted --page x --limit x --query x --yes stdout {
+ "count": 0,
+ "instances": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "instances": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=12793ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test oa +list-submitted --page 1 --limit 10 --query '测试' --yes --format json 真实 stdout {
+ "count": 0,
+ "instances": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "instances": []
+} |
||
dws oa +my-initiated --query <query> --page <page> --limit <limit>read列出我发起(提交)的审批单据 |
-dws mcp oa <tool> |
+dws oa +my-initiated --query <query> --page <page> --limit <limit>read复合/智能型列出我发起(提交)的审批单据 |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; oa/get_submitted_instances输入 / CLI 输出输入 dws oa +my-initiated --query x --page 1 --limit 1 --yes stdout {
+ "_fake": true,
+ "args": {
+ "pageNumber": 1,
+ "pageSize": 1,
+ "query": "x"
+ },
+ "product": "oa",
+ "tool": "get_submitted_instances"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "pageNumber": 1,
+ "pageSize": 1,
+ "query": "x"
+ },
+ "product": "oa",
+ "tool": "get_submitted_instances"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=3564ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test oa +my-initiated --query '测试' --page 1 --limit 10 --yes --format json 真实 stdout {
+ "result": {
+ "values": []
+ },
+ "success": "true"
+}真实 stderr / error (空) 真实返回 {
+ "result": {
+ "values": []
+ },
+ "success": "true"
+} |
dws oa +pending --limit <limit>read只读列出待我审批的审批任务并投影为可读列表(只看不批) |
-dws mcp oa <tool> |
+dws oa +pending --limit <limit>read复合/智能型只读列出待我审批的审批任务并投影为可读列表(只看不批) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; oa/list_pending_approvals;当前没有待我审批的任务输入 / CLI 输出输入 dws oa +pending --limit 1 --yes stdout (空) stderr / error 当前没有待我审批的任务 最终用于判定的返回 当前没有待我审批的任务 真实后端测试输入 / 输出真实后端返回错误exit=3;duration=1357ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test oa +pending --limit 10 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "当前没有待我审批的任务"
+ }
+}真实返回 {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "当前没有待我审批的任务"
+ }
+} |
dws oa +search-forms --query <query>read按关键字模糊搜索当前用户可见的审批表单 |
dws mcp oa <tool> |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; oa/search_form输入 / CLI 输出输入 dws oa +search-forms --query x --yes stdout {
+ "count": 0,
+ "forms": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "forms": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1759ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test oa +search-forms --query '测试' --yes --format json 真实 stdout {
+ "count": 0,
+ "forms": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "forms": []
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 | ||
|---|---|---|---|---|---|
dws drive +copy --node <node> --folder <folder> --workspace <workspace>write复制文件/文档到指定位置 |
dws mcp doc copy_document --json '{"nodeId":<..>, "targetFolderId":<..>, "workspaceId":<..>}' |
lark drive 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/copy_document输入 / CLI 输出输入 dws drive +copy --node x --folder x --workspace x --yes stdout {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "targetFolderId": "x",
+ "workspaceId": "x"
+ },
+ "product": "doc",
+ "tool": "copy_document"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "targetFolderId": "x",
+ "workspaceId": "x"
+ },
+ "product": "doc",
+ "tool": "copy_document"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1329ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test drive +copy --node P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --folder Amq4vjg89ZOAdqyaSMKpApXdW3kdP0wQ --yes --format json 真实 stdout {
+ "docUrl": "https://alidocs.dingtalk.com/i/nodes/np9zOoBVBy2AdzEjuP40bzg4W1DK0g6l",
+ "message": "节点复制成功,已复制到目标文件夹。sourceNodeId: P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO,targetFolderId: Amq4vjg89ZOAdqyaSMKpApXdW3kdP0wQ,新节点 ID: np9zOoBVBy2AdzEjuP40bzg4W1DK0g6l",
+ "nodeId": "np9zOoBVBy2AdzEjuP40bzg4W1DK0g6l",
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "docUrl": "https://alidocs.dingtalk.com/i/nodes/np9zOoBVBy2AdzEjuP40bzg4W1DK0g6l",
+ "message": "节点复制成功,已复制到目标文件夹。sourceNodeId: P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO,targetFolderId: Amq4vjg89ZOAdqyaSMKpApXdW3kdP0wQ,新节点 ID: np9zOoBVBy2AdzEjuP40bzg4W1DK0g6l",
+ "nodeId": "np9zOoBVBy2AdzEjuP40bzg4W1DK0g6l",
+ "success": true
+} |
||
dws drive +download --node <node> --space-id <space-id>read获取钉盘文件下载链接 |
dws mcp drive download_file --json '{"fileId":<..>, "spaceId":<..>}' |
lark-cli drive +download |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; drive/download_file输入 / CLI 输出输入 dws drive +download --node x --space-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "fileId": "x",
+ "spaceId": "x"
+ },
+ "product": "drive",
+ "tool": "download_file"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "fileId": "x",
+ "spaceId": "x"
+ },
+ "product": "drive",
+ "tool": "download_file"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1192ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test drive +download --node P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --space-id 1 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 该文件类型不支持通过 download_file 下载。download_file 仅支持普通文件(如 PDF、Word、Excel 等),不支持钉钉在线文档/表格/脑图等在线编辑类型。如需导出在线文档内容,请使用钉钉文档导出相关接口。 (operation: drive/download_file)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "invalidRequest.document.typeIllegal",
+ "server_key": "drive",
+ "trace_id": "0bab027317840997956923965e08c9"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] 该文件类型不支持通过 download_file 下载。download_file 仅支持普通文件(如 PDF、Word、Excel 等),不支持钉钉在线文档/表格/脑图等在线编辑类型。如需导出在线文档内容,请使用钉钉文档导出相关接口。 (operation: drive/download_file)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "invalidRequest.document.typeIllegal",
+ "server_key": "drive",
+ "trace_id": "0bab027317840997956923965e08c9"
+ }
+} |
||
dws drive +find-file --query <query>read按名称关键词搜索钉盘文件并投影关键字段(只读) |
-dws mcp drive <tool> |
+dws drive +find-file --query <query>read复合/智能型按名称关键词搜索钉盘文件并投影关键字段(只读) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark drive 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; drive/search_files输入 / CLI 输出输入 dws drive +find-file --query x --yes stdout {
+ "files": []
+}stderr / error (空) 最终用于判定的返回 {
+ "files": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1913ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test drive +find-file --query '测试' --yes --format json 真实 stdout {
+ "files": [
+ {
+ "dentryId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "fileSize": 0,
+ "name": "DWS shortcut 真实测试文档 20260715",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r",
+ "fileSize": 0,
+ "name": "🧪测试 工作区目录扫描 - 2026-04-27 21:27:03",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm",
+ "fileSize": 0,
+ "name": "文件扫描测试 -20260414",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N",
+ "fileSize": 0,
+ "name": "文件扫描测试(25)",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq",
+ "fileSize": 0,
+ "name": "文件扫描测试(5)",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4",
+ "fileSize": 0,
+ "name": "文件扫描测试(24)",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4",
+ "fileSize": 0,
+ "name": "文件扫描测试(22)",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4",
+ "fileSize": 0,
+ "name": "文件扫描测试(26)(2)",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "np9zOoBVBy2AdzEjuP40bzg4W1DK0g6l",
+ "fileSize": 0,
+ "name": "DWS shortcut 真实测试文档 20260715(2)",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "7dx2rn0Jbakrq9O5tZvQ1bG9VMGjLRb3",
+ "fileSize": 0,
+ "name": "DWS shortcut 真实测试文档 20260715(1)",
+ "type": "ALIDOC"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "files": [
+ {
+ "dentryId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "fileSize": 0,
+ "name": "DWS shortcut 真实测试文档 20260715",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r",
+ "fileSize": 0,
+ "name": "🧪测试 工作区目录扫描 - 2026-04-27 21:27:03",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm",
+ "fileSize": 0,
+ "name": "文件扫描测试 -20260414",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N",
+ "fileSize": 0,
+ "name": "文件扫描测试(25)",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq",
+ "fileSize": 0,
+ "name": "文件扫描测试(5)",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4",
+ "fileSize": 0,
+ "name": "文件扫描测试(24)",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4",
+ "fileSize": 0,
+ "name": "文件扫描测试(22)",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4",
+ "fileSize": 0,
+ "name": "文件扫描测试(26)(2)",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "np9zOoBVBy2AdzEjuP40bzg4W1DK0g6l",
+ "fileSize": 0,
+ "name": "DWS shortcut 真实测试文档 20260715(2)",
+ "type": "ALIDOC"
+ },
+ {
+ "dentryId": "7dx2rn0Jbakrq9O5tZvQ1bG9VMGjLRb3",
+ "fileSize": 0,
+ "name": "DWS shortcut 真实测试文档 20260715(1)",
+ "type": "ALIDOC"
+ }
+ ]
+} |
dws drive +info --node <node> --space-id <space-id>read获取钉盘文件/文件夹元数据 |
dws mcp drive get_file_info --json '{"fileId":<..>, "spaceId":<..>}' |
lark drive 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; drive/get_file_info输入 / CLI 输出输入 dws drive +info --node x --space-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "fileId": "x",
+ "spaceId": "x"
+ },
+ "product": "drive",
+ "tool": "get_file_info"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "fileId": "x",
+ "spaceId": "x"
+ },
+ "product": "drive",
+ "tool": "get_file_info"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2605ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test drive +info --node P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --space-id 1 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "createTime": 1784082107000,
+ "dentryId": "228840832141",
+ "docUrl": "https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "extension": "adoc",
+ "fileId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "fileSize": 0,
+ "message": "该文件属于钉钉文档(在线文档/表格/脑图等),通过钉盘接口获取的元数据(如文件名称)可能不准确。建议使用钉钉文档相关接口获取更准确的文档信息。",
+ "modifyTime": 1784082137000,
+ "name": "7691256802.adoc",
+ "path": "/6342122716/7691256801/7691256802.adoc",
+ "status": "NORMAL",
+ "type": "ALIDOC"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "createTime": 1784082107000,
+ "dentryId": "228840832141",
+ "docUrl": "https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "extension": "adoc",
+ "fileId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "fileSize": 0,
+ "message": "该文件属于钉钉文档(在线文档/表格/脑图等),通过钉盘接口获取的元数据(如文件名称)可能不准确。建议使用钉钉文档相关接口获取更准确的文档信息。",
+ "modifyTime": 1784082137000,
+ "name": "7691256802.adoc",
+ "path": "/6342122716/7691256801/7691256802.adoc",
+ "status": "NORMAL",
+ "type": "ALIDOC"
+ },
+ "success": true
+} |
||
dws drive +list --space-id <space-id> --folder <folder> --limit <limit> --cursor <cursor> --order-by <order-by> --order <order> --thumbnail <thumbnail>read列出钉盘文件/文件夹 |
dws mcp drive <tool> |
lark drive 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; drive/list_files输入 / CLI 输出输入 dws drive +list --space-id x --folder x --limit 1 --cursor x --order-by x --order x --thumbnail --yes stdout {
+ "count": 0,
+ "files": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "files": []
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1090ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test drive +list --space-id 1 --folder Amq4vjg89ZOAdqyaSMKpApXdW3kdP0wQ --limit 10 --cursor 0 --order-by name --order asc --thumbnail --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] parentId 不属于指定的 spaceId,请确认 parentId 和 spaceId 属于同一个钉盘空间。\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "paramError",
+ "server_key": "drive",
+ "trace_id": "2106d98117840997968627612e087b"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] parentId 不属于指定的 spaceId,请确认 parentId 和 spaceId 属于同一个钉盘空间。\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "paramError",
+ "server_key": "drive",
+ "trace_id": "2106d98117840997968627612e087b"
+ }
+} |
||
dws drive +move --node <node> --folder <folder> --workspace <workspace>write移动文件/文档到指定位置 |
dws mcp doc move_document --json '{"nodeId":<..>, "targetFolderId":<..>, "workspaceId":<..>}' |
lark-cli drive +move |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/move_document输入 / CLI 输出输入 dws drive +move --node x --folder x --workspace x --yes stdout {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "targetFolderId": "x",
+ "workspaceId": "x"
+ },
+ "product": "doc",
+ "tool": "move_document"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "targetFolderId": "x",
+ "workspaceId": "x"
+ },
+ "product": "doc",
+ "tool": "move_document"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=3380ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test drive +move --node P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO --folder Amq4vjg89ZOAdqyaSMKpApXdW3kdP0wQ --yes --format json 真实 stdout {
+ "docUrl": "https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "message": "节点移动成功,已移动到目标文件夹。nodeId: P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO,targetFolderId: Amq4vjg89ZOAdqyaSMKpApXdW3kdP0wQ",
+ "nodeId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "docUrl": "https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "message": "节点移动成功,已移动到目标文件夹。nodeId: P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO,targetFolderId: Amq4vjg89ZOAdqyaSMKpApXdW3kdP0wQ",
+ "nodeId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "success": true
+} |
||
dws drive +recent --operate-type <operate-type> --creator-type <creator-type> --limit <limit> --cursor <cursor>read获取最近访问/编辑的文档列表 |
dws mcp doc <tool> |
lark drive 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/get_recent_list输入 / CLI 输出输入 dws drive +recent --operate-type 1 --creator-type 1 --limit 1 --cursor x --yes stdout {
+ "count": 0,
+ "items": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "items": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2087ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test drive +recent --operate-type 1 --creator-type 1 --limit 10 --cursor 0 --yes --format json 真实 stdout {
+ "count": 0,
+ "hasMore": false,
+ "items": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "hasMore": false,
+ "items": []
+} |
||
dws drive +search --query <query> --target <target> --file-types <file-types> --extensions <extensions> --creator-uids <creator-uids> --created-from <created-from> --created-to <created-to> --modified-from <modified-from> --modified-to <modified-to> --limit <limit> --cursor <cursor>read搜索钉盘文件 |
dws mcp drive <tool> |
lark-cli drive +search |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; drive/search_files输入 / CLI 输出输入 dws drive +search --query x --target file --file-types x --extensions x --creator-uids x --created-from 1 --created-to 1 --modified-from 1 --modified-to 1 --limit 1 --cursor x --yes stdout {
+ "count": 0,
+ "files": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "files": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2091ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test drive +search --query '测试' --target file --file-types alidoc --extensions x --creator-uids x --created-from 1 --created-to 1 --modified-from 1 --modified-to 1 --limit 10 --cursor 0 --yes --format json 真实 stdout {
+ "count": 0,
+ "files": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "files": []
+} |
||
dws drive +search-docs --query <query> --limit <limit>read搜索文档空间文档 |
dws mcp doc <tool> |
lark drive 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/search_documents输入 / CLI 输出输入 dws drive +search-docs --query x --limit 1 --yes stdout {
+ "count": 0,
+ "docs": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "docs": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=2507ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test drive +search-docs --query '测试' --limit 10 --yes --format json 真实 stdout {
+ "count": 10,
+ "docs": [
+ {
+ "name": "DWS shortcut 真实测试文档 20260715",
+ "nodeId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO?utm_scene=person_space"
+ },
+ {
+ "name": "🧪测试 工作区目录扫描 - 2026-04-27 21:27:03",
+ "nodeId": "yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r?utm_scene=person_space"
+ },
+ {
+ "name": "文件扫描测试 -20260414",
+ "nodeId": "3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm?utm_scene=person_space"
+ },
+ {
+ "name": "文件扫描测试(25)",
+ "nodeId": "QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N?utm_scene=person_space"
+ },
+ {
+ "name": "文件扫描测试(5)",
+ "nodeId": "Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq?utm_scene=person_space"
+ },
+ {
+ "name": "文件扫描测试(24)",
+ "nodeId": "OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4?utm_scene=person_space"
+ },
+ {
+ "name": "文件扫描测试(22)",
+ "nodeId": "OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4?utm_scene=person_space"
+ },
+ {
+ "name": "文件扫描测试(26)(2)",
+ "nodeId": "l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4?utm_scene=person_space"
+ },
+ {
+ "name": "悟空DWS全部测试账号信息",
+ "nodeId": "X6GRezwJlYxMoDeBsQkxqNQ38dqbropQ",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/X6GRezwJlYxMoDeBsQkxqNQ38dqbropQ?utm_scene=team_space"
+ },
+ {
+ "name": "测试",
+ "nodeId": "1OQX0akWmBejogd0TvQ7oN4oVGlDd3mE",
+ "type": "folder",
+ "url": "https://alidocs.dingtalk.com/i/nodes/1OQX0akWmBejogd0TvQ7oN4oVGlDd3mE?utm_scene=team_space"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 10,
+ "docs": [
+ {
+ "name": "DWS shortcut 真实测试文档 20260715",
+ "nodeId": "P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/P0MALyR8knpgo9GycY7ZlMxlJ3bzYmDO?utm_scene=person_space"
+ },
+ {
+ "name": "🧪测试 工作区目录扫描 - 2026-04-27 21:27:03",
+ "nodeId": "yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/yQod3RxJKQz4jm9xS4kw7dnmWkb4Mw9r?utm_scene=person_space"
+ },
+ {
+ "name": "文件扫描测试 -20260414",
+ "nodeId": "3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/3NwLYZXWyrmRolXLcZ7QaMDkVkyEqBQm?utm_scene=person_space"
+ },
+ {
+ "name": "文件扫描测试(25)",
+ "nodeId": "QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/QPGYqjpJYRyab0nxsZ7a9L5R8akx1Z5N?utm_scene=person_space"
+ },
+ {
+ "name": "文件扫描测试(5)",
+ "nodeId": "Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/Exel2BLV5gOAdXr1umNwXGBA8gk9rpMq?utm_scene=person_space"
+ },
+ {
+ "name": "文件扫描测试(24)",
+ "nodeId": "OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/OG9lyrgJPL7M2ONQSzqYlPzmJzN67Mw4?utm_scene=person_space"
+ },
+ {
+ "name": "文件扫描测试(22)",
+ "nodeId": "OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/OG9lyrgJPL7M2ONQSzQ4k0bRJzN67Mw4?utm_scene=person_space"
+ },
+ {
+ "name": "文件扫描测试(26)(2)",
+ "nodeId": "l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/l6Pm2Db8DQyAKmGkS90GX4ndWxLq0Ee4?utm_scene=person_space"
+ },
+ {
+ "name": "悟空DWS全部测试账号信息",
+ "nodeId": "X6GRezwJlYxMoDeBsQkxqNQ38dqbropQ",
+ "type": "file",
+ "url": "https://alidocs.dingtalk.com/i/nodes/X6GRezwJlYxMoDeBsQkxqNQ38dqbropQ?utm_scene=team_space"
+ },
+ {
+ "name": "测试",
+ "nodeId": "1OQX0akWmBejogd0TvQ7oN4oVGlDd3mE",
+ "type": "folder",
+ "url": "https://alidocs.dingtalk.com/i/nodes/1OQX0akWmBejogd0TvQ7oN4oVGlDd3mE?utm_scene=team_space"
+ }
+ ]
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 | ||
|---|---|---|---|---|---|
dws wiki +node-copy --workspace <workspace> --node <node> --folder <folder>write复制知识库节点 |
dws mcp doc copy_document --json '{"nodeId":<..>, "workspaceId":<..>, "targetFolderId":<..>}' |
lark-cli wiki +node-copy |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/copy_document输入 / CLI 输出输入 dws wiki +node-copy --workspace x --node x --folder x --yes stdout {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "targetFolderId": "x",
+ "workspaceId": "x"
+ },
+ "product": "doc",
+ "tool": "copy_document"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "targetFolderId": "x",
+ "workspaceId": "x"
+ },
+ "product": "doc",
+ "tool": "copy_document"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1000ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test wiki +node-copy --workspace DWSREALTESTNOSUCHID0000000000000 --node DWSREALTESTNOSUCHID0000000000000 --folder DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[TABLE_NOT_FOUND] Requested resource not found (operation: doc/copy_document)\n hint: Document may have been deleted or moved",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "invalidRequest.inputArgs.invalid",
+ "server_key": "doc",
+ "trace_id": "0bb7c36217840999769818495e0779"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[TABLE_NOT_FOUND] Requested resource not found (operation: doc/copy_document)\n hint: Document may have been deleted or moved",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "invalidRequest.inputArgs.invalid",
+ "server_key": "doc",
+ "trace_id": "0bb7c36217840999769818495e0779"
+ }
+} |
||
dws wiki +node-list --workspace <workspace> --folder <folder> --limit <limit> --cursor <cursor>read列出知识库节点 |
dws mcp doc <tool> |
lark-cli wiki +node-list |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; wiki/list_nodes输入 / CLI 输出输入 dws wiki +node-list --workspace x --folder x --limit 1 --cursor x --yes stdout {
+ "count": 0,
+ "nodes": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "nodes": []
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1120ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test wiki +node-list --workspace DWSREALREADNOSUCHID0000000000000 --folder DWSREALREADNOSUCHID0000000000000 --limit 10 --cursor 0 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "wiki",
+ "technical_detail": "PARAM_ERROR - 未找到指定工具",
+ "trace_id": "2132f5ca17840998189126304e08d9"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] business error: success=false\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "wiki",
+ "technical_detail": "PARAM_ERROR - 未找到指定工具",
+ "trace_id": "2132f5ca17840998189126304e08d9"
+ }
+} |
||
dws wiki +node-move --workspace <workspace> --node <node> --folder <folder>write移动知识库节点 |
dws mcp doc move_document --json '{"nodeId":<..>, "workspaceId":<..>, "targetFolderId":<..>}' |
lark wiki 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; doc/move_document输入 / CLI 输出输入 dws wiki +node-move --workspace x --node x --folder x --yes stdout {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "targetFolderId": "x",
+ "workspaceId": "x"
+ },
+ "product": "doc",
+ "tool": "move_document"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "targetFolderId": "x",
+ "workspaceId": "x"
+ },
+ "product": "doc",
+ "tool": "move_document"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1053ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test wiki +node-move --workspace DWSREALTESTNOSUCHID0000000000000 --node DWSREALTESTNOSUCHID0000000000000 --folder DWSREALTESTNOSUCHID0000000000000 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[TABLE_NOT_FOUND] Requested resource not found (operation: doc/move_document)\n hint: Document may have been deleted or moved",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "invalidRequest.inputArgs.invalid",
+ "server_key": "doc",
+ "trace_id": "0bb7c36217840999780286509e07fe"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[TABLE_NOT_FOUND] Requested resource not found (operation: doc/move_document)\n hint: Document may have been deleted or moved",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "invalidRequest.inputArgs.invalid",
+ "server_key": "doc",
+ "trace_id": "0bb7c36217840999780286509e07fe"
+ }
+} |
||
dws wiki +resolve-space --name <name>read按名称搜索知识空间并解析出唯一 spaceId(只读) |
-dws mcp wiki <tool> |
+dws wiki +resolve-space --name <name>read复合/智能型按名称搜索知识空间并解析出唯一 spaceId(只读) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark wiki 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; wiki/search_wikiSpaces;没有找到名称包含 x 的知识空间输入 / CLI 输出输入 dws wiki +resolve-space --name x --yes stdout (空) stderr / error 没有找到名称包含 x 的知识空间 最终用于判定的返回 没有找到名称包含 x 的知识空间 真实后端测试输入 / 输出真实后端返回错误exit=3;duration=1533ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test wiki +resolve-space --name 'DWS shortcut 真实测试' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "没有找到名称包含 DWS shortcut 真实测试 的知识空间"
+ }
+}真实返回 {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "没有找到名称包含 DWS shortcut 真实测试 的知识空间"
+ }
+} |
dws wiki +space-list --type <type> --limit <limit> --cursor <cursor>read列出组织 / 个人知识库 |
dws mcp wiki <tool> |
lark-cli wiki +space-list |
+已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; wiki/list_wikiSpaces输入 / CLI 输出输入 dws wiki +space-list --type orgWikiSpace --limit x --cursor x --yes stdout {
+ "count": 0,
+ "spaces": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "spaces": []
+}真实后端测试输入 / 输出真实后端返回错误exit=3;duration=759ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test wiki +space-list --type ALL --limit 10 --cursor 0 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "参数 --type 取值 \"ALL\" 不合法,允许值:orgWikiSpace, myWikiSpace"
+ }
+}真实返回 {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "参数 --type 取值 \"ALL\" 不合法,允许值:orgWikiSpace, myWikiSpace"
+ }
+} |
||
dws wiki +space-search --query <query> --limit <limit>read搜索知识库 |
dws mcp wiki <tool> |
lark wiki 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; wiki/search_wikiSpaces输入 / CLI 输出输入 dws wiki +space-search --query x --limit x --yes stdout {
+ "count": 0,
+ "spaces": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "spaces": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1951ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test wiki +space-search --query '测试' --limit 10 --yes --format json 真实 stdout {
+ "count": 0,
+ "spaces": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "spaces": []
+} |
||
dws wiki +wiki-new-doc --space <space> --title <title>write在指定名称的知识库下新建一个文档节点(自动按空间名解析 workspaceId) |
-dws mcp wiki <tool> |
+dws wiki +wiki-new-doc --space <space> --title <title>write复合/智能型在指定名称的知识库下新建一个文档节点(自动按空间名解析 workspaceId) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚 |
lark wiki 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; wiki/search_wikiSpaces;没找到名为 "x" 的知识库;换个更完整/精确的空间名再试。输入 / CLI 输出输入 dws wiki +wiki-new-doc --space x --title x --yes stdout (空) stderr / error 没找到名为 "x" 的知识库;换个更完整/精确的空间名再试。 最终用于判定的返回 没找到名为 "x" 的知识库;换个更完整/精确的空间名再试。 真实后端测试输入 / 输出真实后端返回错误exit=3;duration=1152ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 缺真实资源 fixture / 需真实 fixture,非 CLI 可直接修 +真实测试使用的资源/单据/消息/群/文档不存在;需要准备对应 fixture 后才能期望成功,不属于 shortcut 参数投影错误。 真实输入 /private/tmp/dws-real-test wiki +wiki-new-doc --space __DWS_SHORTCUT_REAL_TEST_NO_SUCH_SPACE__ --title 'DWS shortcut 真实测试 20260715-151724' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "没找到名为 \"__DWS_SHORTCUT_REAL_TEST_NO_SUCH_SPACE__\" 的知识库;换个更完整/精确的空间名再试。"
+ }
+}真实返回 {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "没找到名为 \"__DWS_SHORTCUT_REAL_TEST_NO_SUCH_SPACE__\" 的知识库;换个更完整/精确的空间名再试。"
+ }
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 |
|---|---|---|---|
dws ding +list --cursor <cursor> --type <type>read查询 DING 消息列表 |
dws mcp im list_ding_messages --json '{"type":<..>, "cursor":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/list_ding_messages输入 / CLI 输出输入 dws ding +list --cursor 1 --type x --yes stdout {
+ "_fake": true,
+ "args": {
+ "cursor": 1,
+ "type": "x"
+ },
+ "product": "im",
+ "tool": "list_ding_messages"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "cursor": 1,
+ "type": "x"
+ },
+ "product": "im",
+ "tool": "list_ding_messages"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1459ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test ding +list --cursor 0 --type ALL --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "dingMessages": [
+ {
+ "openDingId": "5D73E3AC29C780072D1CD56C6874ACC2",
+ "sendTime": "2026-07-14 20:30:06",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "6DE6EC00AEBEF6839CA5F309371550DA",
+ "sendTime": "2026-07-10 16:17:20",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "4DE0B0D90A94683CE1A9E12CBBB82883",
+ "sendTime": "2026-07-10 12:38:47",
+ "senderNick": "思敏"
+ },
+ {
+ "openDingId": "B1CF538F2A3CAD8F78E863BCFF10E90F",
+ "sendTime": "2026-07-10 11:47:07",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "72D79962A868374366AF4FCA6946D49F",
+ "sendTime": "2026-07-10 11:44:27",
+ "senderNick": "汀葻"
+ },
+ {
+ "openDingId": "A290A8F6D35CC8E712E3E4C30D915263",
+ "sendTime": "2026-07-10 11:10:52",
+ "senderNick": "楠者"
+ },
+ {
+ "openDingId": "7B7BA69E68F85A3948B70A1BD79C9DF2",
+ "sendTime": "2026-07-09 20:43:36",
+ "senderNick": "楠者"
+ },
+ {
+ "openDingId": "0D59FF6F871900140BD65422184C410C",
+ "sendTime": "2026-07-09 17:25:36",
+ "senderNick": "楠者"
+ },
+ {
+ "openDingId": "B6072FCC82D85A343EE7834A70293F09",
+ "sendTime": "2026-07-09 16:37:54",
+ "senderNick": "王玮(哈瑞)"
+ },
+ {
+ "openDingId": "91DFBF0D54B7A0DCC8F7EAF58560586C",
+ "sendTime": "2026-07-09 15:17:19",
+ "senderNick": "楠者"
+ },
+ {
+ "openDingId": "EA1F2A52C13954855A3D0D7A32A973F6",
+ "sendTime": "2026-07-09 11:52:15",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "340C8FD58735886D44B5EA46921F8AAD",
+ "sendTime": "2026-07-07 11:48:58",
+ "senderNick": "穆伦"
+ },
+ {
+ "openDingId": "A389AD2799303C13C15BB6EF014D3B39",
+ "sendTime": "2026-07-07 11:34:34",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "A26385411682C6C5042D775B25DA8F08",
+ "sendTime": "2026-07-06 11:37:05",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "C42A8B86D5453197F79645460E0B7A99",
+ "sendTime": "2026-07-03 17:41:43",
+ "senderNick": "楠者"
+ },
+ {
+ "openDingId": "5AEF5D3CF756F23345F86FF5E7544E73",
+ "sendTime": "2026-07-03 15:40:52",
+ "senderNick": "楠者"
+ },
+ {
+ "openDingId": "EA0E39C793A943797EEDEA9B00740A72",
+ "sendTime": "2026-07-03 14:40:23",
+ "senderNick": "粤腾"
+ },
+ {
+ "openDingId": "753EC85C1FA6E50D82EB5C19940F340E",
+ "sendTime": "2026-07-02 20:26:38",
+ "senderNick": "思敏"
+ },
+ {
+ "openDingId": "782B702452A410EC6D30ADC9D4E95FDB",
+ "sendTime": "2026-07-02 09:49:45",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "983C2C5A65CAE1A86D8C6BC272E73D11",
+ "sendTime": "2026-07-02 09:48:09",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "40B84F9DF18DE299C2B2D712E7D01114",
+ "sendTime": "2026-06-29 17:59:37",
+ "senderNick": "穆伦"
+ },
+ {
+ "openDingId": "F799B63D8EDDB7915C80159BD355704F",
+ "sendTime": "2026-06-25 19:53:17",
+ "senderNick": "文靖"
+ },
+ {
+ "openDingId": "33C1238264ACA098634569396F60EE7A",
+ "sendTime": "2026-06-25 18:10:19",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "2A05EE1E37F7EB023C3146819156E9A8",
+ "sendTime": "2026-06-25 11:49:24",
+ "senderNick": "穆伦"
+ },
+ {
+ "openDingId": "29FBFA46D6F07ED25378F2871E24A1DC",
+ "sendTime": "2026-06-24 12:00:32",
+ "senderNick": "云欢"
+ },
+ {
+ "openDingId": "2CE4C4F3EE8C332884FA1673C064921C",
+ "sendTime": "2026-06-22 20:47:14",
+ "senderNick": "黎常"
+ },
+ {
+ "openDingId": "8A2B1A1F7E508B2F08A52FEDD9365843",
+ "sendTime": "2026-06-18 13:41:19",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "7F7671C7853D88C92DE6EE0A671CB57B",
+ "sendTime": "2026-06-17 10:52:34",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "9539E8D27A51F204197E326F94650279",
+ "sendTime": "2026-06-16 11:50:18",
+ "senderNick": "穆伦"
+ },
+ {
+ "openDingId": "DE9E8FAFC8125BC715B999AC4267E2CA",
+ "sendTime": "2026-06-15 21:35:40",
+ "senderNick": "西渐(主用钉)"
+ },
+ {
+ "openDingId": "A5D83E673DC5A97F38D95F3E135C7824",
+ "sendTime": "2026-06-12 22:08:36",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "5360613B1FC2389E8435CFABC57CC012",
+ "sendTime": "2026-06-12 13:51:21",
+ "senderNick": "鱼非"
+ },
+ {
+ "openDingId": "3AB6395324A62CB2B4B513D0A02F67FA",
+ "sendTime": "2026-06-11 11:23:39",
+ "senderNick": "徐潇扬"
+ },
+ {
+ "openDingId": "FB9FB2808D6ADF7464F5F1ACBA8A6704",
+ "sendTime": "2026-06-11 09:51:55",
+ "senderNick": "徐潇扬"
+ },
+ {
+ "openDingId": "4D094E702716D4A46015CDC12B8F216B",
+ "sendTime": "2026-06-10 22:04:05",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "74E2B3EB36EE99E6D88744F6B2C4C265",
+ "sendTime": "2026-06-10 18:14:48",
+ "senderNick": "古榕"
+ },
+ {
+ "openDingId": "CAEF5614C47B65CDF10AED44BDFC7D9F",
+ "sendTime": "2026-06-10 16:02:42",
+ "senderNick": "徐潇扬"
+ },
+ {
+ "openDingId": "F2C3A0F51AC502E84AECB932C227AAED",
+ "sendTime": "2026-06-09 17:43:20",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "8AB2C3B891D931D8D650D41CA6205BCE",
+ "sendTime": "2026-06-09 15:50:23",
+ "senderNick": "可菡"
+ },
+ {
+ "openDingId": "0456CE6A50FD2902B68D772DA37A96BC",
+ "sendTime": "2026-06-09 09:45:43",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "6CB0E9E1D2CC344CB9217C97550BC6C6",
+ "sendTime": "2026-06-08 21:42:37",
+ "senderNick": "林弈"
+ },
+ {
+ "openDingId": "0DEFB0942003A059C230BE1D262CAC8C",
+ "sendTime": "2026-06-08 21:27:39",
+ "senderNick": "林弈"
+ },
+ {
+ "openDingId": "6B600C709E7468700F208B5DBB7ED888",
+ "sendTime": "2026-06-08 15:42:05",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "B3502CC153C09A27AADE63A0BDF94C4A",
+ "sendTime": "2026-06-05 17:38:44",
+ "senderNick": "慧德"
+ },
+ {
+ "openDingId": "07EC05F3E019605304D3C8216C6F7A32",
+ "sendTime": "2026-06-05 17:19:52",
+ "senderNick": "弈宇(Alpha)"
+ },
+ {
+ "openDingId": "1C25016699ADE6DE66C6C9ECAE8C83B2",
+ "sendTime": "2026-06-05 14:46:54",
+ "senderNick": "弈宇(Alpha)"
+ },
+ {
+ "openDingId": "AF79C95530607985A95866F7DE45F45E",
+ "sendTime": "2026-06-05 14:39:48",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "4BFEE560E26AA24C1966A4D6EB722B89",
+ "sendTime": "2026-06-05 09:28:42",
+ "senderNick": "慧德"
+ },
+ {
+ "openDingId": "B7F170045D3C6CC9D37DE356276BF084",
+ "sendTime": "2026-06-04 23:07:57",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "A04A3D9659BD8FBDCF0C5E28EB2314F7",
+ "sendTime": "2026-06-04 17:30:21",
+ "senderNick": "念晨"
+ }
+ ],
+ "hasMore": true,
+ "nextCursor": 1780565411433
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "dingMessages": [
+ {
+ "openDingId": "5D73E3AC29C780072D1CD56C6874ACC2",
+ "sendTime": "2026-07-14 20:30:06",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "6DE6EC00AEBEF6839CA5F309371550DA",
+ "sendTime": "2026-07-10 16:17:20",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "4DE0B0D90A94683CE1A9E12CBBB82883",
+ "sendTime": "2026-07-10 12:38:47",
+ "senderNick": "思敏"
+ },
+ {
+ "openDingId": "B1CF538F2A3CAD8F78E863BCFF10E90F",
+ "sendTime": "2026-07-10 11:47:07",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "72D79962A868374366AF4FCA6946D49F",
+ "sendTime": "2026-07-10 11:44:27",
+ "senderNick": "汀葻"
+ },
+ {
+ "openDingId": "A290A8F6D35CC8E712E3E4C30D915263",
+ "sendTime": "2026-07-10 11:10:52",
+ "senderNick": "楠者"
+ },
+ {
+ "openDingId": "7B7BA69E68F85A3948B70A1BD79C9DF2",
+ "sendTime": "2026-07-09 20:43:36",
+ "senderNick": "楠者"
+ },
+ {
+ "openDingId": "0D59FF6F871900140BD65422184C410C",
+ "sendTime": "2026-07-09 17:25:36",
+ "senderNick": "楠者"
+ },
+ {
+ "openDingId": "B6072FCC82D85A343EE7834A70293F09",
+ "sendTime": "2026-07-09 16:37:54",
+ "senderNick": "王玮(哈瑞)"
+ },
+ {
+ "openDingId": "91DFBF0D54B7A0DCC8F7EAF58560586C",
+ "sendTime": "2026-07-09 15:17:19",
+ "senderNick": "楠者"
+ },
+ {
+ "openDingId": "EA1F2A52C13954855A3D0D7A32A973F6",
+ "sendTime": "2026-07-09 11:52:15",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "340C8FD58735886D44B5EA46921F8AAD",
+ "sendTime": "2026-07-07 11:48:58",
+ "senderNick": "穆伦"
+ },
+ {
+ "openDingId": "A389AD2799303C13C15BB6EF014D3B39",
+ "sendTime": "2026-07-07 11:34:34",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "A26385411682C6C5042D775B25DA8F08",
+ "sendTime": "2026-07-06 11:37:05",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "C42A8B86D5453197F79645460E0B7A99",
+ "sendTime": "2026-07-03 17:41:43",
+ "senderNick": "楠者"
+ },
+ {
+ "openDingId": "5AEF5D3CF756F23345F86FF5E7544E73",
+ "sendTime": "2026-07-03 15:40:52",
+ "senderNick": "楠者"
+ },
+ {
+ "openDingId": "EA0E39C793A943797EEDEA9B00740A72",
+ "sendTime": "2026-07-03 14:40:23",
+ "senderNick": "粤腾"
+ },
+ {
+ "openDingId": "753EC85C1FA6E50D82EB5C19940F340E",
+ "sendTime": "2026-07-02 20:26:38",
+ "senderNick": "思敏"
+ },
+ {
+ "openDingId": "782B702452A410EC6D30ADC9D4E95FDB",
+ "sendTime": "2026-07-02 09:49:45",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "983C2C5A65CAE1A86D8C6BC272E73D11",
+ "sendTime": "2026-07-02 09:48:09",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "40B84F9DF18DE299C2B2D712E7D01114",
+ "sendTime": "2026-06-29 17:59:37",
+ "senderNick": "穆伦"
+ },
+ {
+ "openDingId": "F799B63D8EDDB7915C80159BD355704F",
+ "sendTime": "2026-06-25 19:53:17",
+ "senderNick": "文靖"
+ },
+ {
+ "openDingId": "33C1238264ACA098634569396F60EE7A",
+ "sendTime": "2026-06-25 18:10:19",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "2A05EE1E37F7EB023C3146819156E9A8",
+ "sendTime": "2026-06-25 11:49:24",
+ "senderNick": "穆伦"
+ },
+ {
+ "openDingId": "29FBFA46D6F07ED25378F2871E24A1DC",
+ "sendTime": "2026-06-24 12:00:32",
+ "senderNick": "云欢"
+ },
+ {
+ "openDingId": "2CE4C4F3EE8C332884FA1673C064921C",
+ "sendTime": "2026-06-22 20:47:14",
+ "senderNick": "黎常"
+ },
+ {
+ "openDingId": "8A2B1A1F7E508B2F08A52FEDD9365843",
+ "sendTime": "2026-06-18 13:41:19",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "7F7671C7853D88C92DE6EE0A671CB57B",
+ "sendTime": "2026-06-17 10:52:34",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "9539E8D27A51F204197E326F94650279",
+ "sendTime": "2026-06-16 11:50:18",
+ "senderNick": "穆伦"
+ },
+ {
+ "openDingId": "DE9E8FAFC8125BC715B999AC4267E2CA",
+ "sendTime": "2026-06-15 21:35:40",
+ "senderNick": "西渐(主用钉)"
+ },
+ {
+ "openDingId": "A5D83E673DC5A97F38D95F3E135C7824",
+ "sendTime": "2026-06-12 22:08:36",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "5360613B1FC2389E8435CFABC57CC012",
+ "sendTime": "2026-06-12 13:51:21",
+ "senderNick": "鱼非"
+ },
+ {
+ "openDingId": "3AB6395324A62CB2B4B513D0A02F67FA",
+ "sendTime": "2026-06-11 11:23:39",
+ "senderNick": "徐潇扬"
+ },
+ {
+ "openDingId": "FB9FB2808D6ADF7464F5F1ACBA8A6704",
+ "sendTime": "2026-06-11 09:51:55",
+ "senderNick": "徐潇扬"
+ },
+ {
+ "openDingId": "4D094E702716D4A46015CDC12B8F216B",
+ "sendTime": "2026-06-10 22:04:05",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "74E2B3EB36EE99E6D88744F6B2C4C265",
+ "sendTime": "2026-06-10 18:14:48",
+ "senderNick": "古榕"
+ },
+ {
+ "openDingId": "CAEF5614C47B65CDF10AED44BDFC7D9F",
+ "sendTime": "2026-06-10 16:02:42",
+ "senderNick": "徐潇扬"
+ },
+ {
+ "openDingId": "F2C3A0F51AC502E84AECB932C227AAED",
+ "sendTime": "2026-06-09 17:43:20",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "8AB2C3B891D931D8D650D41CA6205BCE",
+ "sendTime": "2026-06-09 15:50:23",
+ "senderNick": "可菡"
+ },
+ {
+ "openDingId": "0456CE6A50FD2902B68D772DA37A96BC",
+ "sendTime": "2026-06-09 09:45:43",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "6CB0E9E1D2CC344CB9217C97550BC6C6",
+ "sendTime": "2026-06-08 21:42:37",
+ "senderNick": "林弈"
+ },
+ {
+ "openDingId": "0DEFB0942003A059C230BE1D262CAC8C",
+ "sendTime": "2026-06-08 21:27:39",
+ "senderNick": "林弈"
+ },
+ {
+ "openDingId": "6B600C709E7468700F208B5DBB7ED888",
+ "sendTime": "2026-06-08 15:42:05",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "B3502CC153C09A27AADE63A0BDF94C4A",
+ "sendTime": "2026-06-05 17:38:44",
+ "senderNick": "慧德"
+ },
+ {
+ "openDingId": "07EC05F3E019605304D3C8216C6F7A32",
+ "sendTime": "2026-06-05 17:19:52",
+ "senderNick": "弈宇(Alpha)"
+ },
+ {
+ "openDingId": "1C25016699ADE6DE66C6C9ECAE8C83B2",
+ "sendTime": "2026-06-05 14:46:54",
+ "senderNick": "弈宇(Alpha)"
+ },
+ {
+ "openDingId": "AF79C95530607985A95866F7DE45F45E",
+ "sendTime": "2026-06-05 14:39:48",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "4BFEE560E26AA24C1966A4D6EB722B89",
+ "sendTime": "2026-06-05 09:28:42",
+ "senderNick": "慧德"
+ },
+ {
+ "openDingId": "B7F170045D3C6CC9D37DE356276BF084",
+ "sendTime": "2026-06-04 23:07:57",
+ "senderNick": "念晨"
+ },
+ {
+ "openDingId": "A04A3D9659BD8FBDCF0C5E28EB2314F7",
+ "sendTime": "2026-06-04 17:30:21",
+ "senderNick": "念晨"
+ }
+ ],
+ "hasMore": true,
+ "nextCursor": 1780565411433
+ },
+ "success": true
+} |
dws ding +recall-personal --id <id>high-risk-write撤回本人发起的 DING |
dws mcp im recall_personal_ding --json '{"openDingId":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/recall_personal_ding输入 / CLI 输出输入 dws ding +recall-personal --id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openDingId": "x"
+ },
+ "product": "im",
+ "tool": "recall_personal_ding"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openDingId": "x"
+ },
+ "product": "im",
+ "tool": "recall_personal_ding"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1415ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test ding +recall-personal --id 8508193BEA49427AA9FFE94EB9D6B28E --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {},
+ "success": true
+} |
dws ding +receiver-status --ding-id <ding-id>read查询 DING 消息接收人已读状态 |
dws mcp im list_ding_receiver_status --json '{"openDingId":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/list_ding_receiver_status输入 / CLI 输出输入 dws ding +receiver-status --ding-id x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openDingId": "x"
+ },
+ "product": "im",
+ "tool": "list_ding_receiver_status"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openDingId": "x"
+ },
+ "product": "im",
+ "tool": "list_ding_receiver_status"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1823ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test ding +receiver-status --ding-id 5D73E3AC29C780072D1CD56C6874ACC2 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "receivers": [
+ {
+ "confirmedStatus": 1,
+ "openDingId": "5D73E3AC29C780072D1CD56C6874ACC2",
+ "receiverNick": "粤腾"
+ }
+ ]
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "receivers": [
+ {
+ "confirmedStatus": 1,
+ "openDingId": "5D73E3AC29C780072D1CD56C6874ACC2",
+ "receiverNick": "粤腾"
+ }
+ ]
+ },
+ "success": true
+} |
dws ding +send-by-message --group <group> --message-id <message-id> --users <users> --type <type> --uuid <uuid>write针对某条消息发起 DING 提醒 |
dws mcp im send_ding_by_message --json '{"openConversationId":<..>, "openMessageId":<..>, "receiverOpenDingTalkIds":<..>, "remindType":<..>, "uuid":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/send_ding_by_message输入 / CLI 输出输入 dws ding +send-by-message --group x --message-id x --users x --type x --uuid x --yes stdout {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openMessageId": "x",
+ "receiverOpenDingTalkIds": [
+ "x"
+ ],
+ "remindType": "x",
+ "uuid": "x"
+ },
+ "product": "im",
+ "tool": "send_ding_by_message"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "openConversationId": "x",
+ "openMessageId": "x",
+ "receiverOpenDingTalkIds": [
+ "x"
+ ],
+ "remindType": "x",
+ "uuid": "x"
+ },
+ "product": "im",
+ "tool": "send_ding_by_message"
+}真实后端测试输入 / 输出真实后端返回错误exit=1;duration=1058ms;real-backend-safe-negative-write; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test ding +send-by-message --group cidDWSREALTESTNOSUCHCONV --message-id DWSREALTESTNOSUCHID0000000000000 --users __DWS_SHORTCUT_REAL_TEST_NO_SUCH_USER__ --type FIXED --uuid dws-shortcut-real-negative-20260715-151724 --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] remindType非法,合法值:APP/SMS/PHONE (operation: im/send_ding_by_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999678466213e0853"
+ }
+}真实返回 {
+ "error": {
+ "category": "api",
+ "code": 1,
+ "hint": "The API returned a business-level error. Check required parameters and values.",
+ "message": "[UNCLASSIFIED] remindType非法,合法值:APP/SMS/PHONE (operation: im/send_ding_by_message)\n hint: Use --verbose for detailed error logs",
+ "operation": "tools/call",
+ "reason": "business_error",
+ "server_error_code": "PARAM_ERROR",
+ "server_key": "im",
+ "trace_id": "0b5deb3217840999678466213e0853"
+ }
+} |
dws ding +send-personal --users <users> --content <content> --type <type> --uuid <uuid>write以本人身份发送 DING 给指定人 |
dws mcp im send_personal_ding --json '{"receiverOpenDingTalkIds":<..>, "content":<..>, "remindType":<..>, "uuid":<..>}' |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; im/send_personal_ding输入 / CLI 输出输入 dws ding +send-personal --users x --content x --type x --uuid x --yes stdout {
+ "_fake": true,
+ "args": {
+ "content": "x",
+ "receiverOpenDingTalkIds": [
+ "x"
+ ],
+ "remindType": "x",
+ "uuid": "x"
+ },
+ "product": "im",
+ "tool": "send_personal_ding"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "content": "x",
+ "receiverOpenDingTalkIds": [
+ "x"
+ ],
+ "remindType": "x",
+ "uuid": "x"
+ },
+ "product": "im",
+ "tool": "send_personal_ding"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1338ms;real-backend-manual-write; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test ding +send-personal --users 103262 --content 'DWS shortcut 真实测试 20260715:验证 ding +send-personal,请忽略。' --type app --uuid dws-shortcut-ding-20260715-001 --yes --format json 真实 stdout {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "openDingId": "8508193BEA49427AA9FFE94EB9D6B28E"
+ },
+ "success": true
+}真实 stderr / error (空) 真实返回 {
+ "arguments": [],
+ "errorCode": null,
+ "errorMsg": null,
+ "result": {
+ "openDingId": "8508193BEA49427AA9FFE94EB9D6B28E"
+ },
+ "success": true
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 | ||
|---|---|---|---|---|---|
dws report +inbox-list --start <start> --end <end> --cursor <cursor> --size <size> --sender-user-ids <sender-user-ids>read列出我收到的日报(按时间范围分页) |
dws mcp report <tool> |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--start 时间格式无效,需 ISO-8601(如 2026-03-10T00:00:00+08:00): parsing time "x" as "2006-01-02T15:04:05Z07:00": cannot parse "x" as "2006"输入 / CLI 输出输入 dws report +inbox-list --start x --end x --cursor 1 --size 1 --sender-user-ids x --yes stdout (空) stderr / error --start 时间格式无效,需 ISO-8601(如 2026-03-10T00:00:00+08:00): parsing time "x" as "2006-01-02T15:04:05Z07:00": cannot parse "x" as "2006" 最终用于判定的返回 --start 时间格式无效,需 ISO-8601(如 2026-03-10T00:00:00+08:00): parsing time "x" as "2006-01-02T15:04:05Z07:00": cannot parse "x" as "2006" 真实后端测试输入 / 输出真实后端成功exit=0;duration=2130ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test report +inbox-list --start 2026-07-08T15:14:39+08:00 --end 2026-07-15T15:14:39+08:00 --cursor 0 --size 1 --sender-user-ids x --yes --format json 真实 stdout {
+ "count": 0,
+ "reports": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "reports": []
+} |
||
dws report +outbox-list --cursor <cursor> --size <size> --start <start> --end <end> --modified-start <modified-start> --modified-end <modified-end> --template-name <template-name>read列出我发出的日报(可选时间/模版名过滤) |
dws mcp report <tool> |
无对应(钉钉特有服务) | +实测校验拦截 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 0;tool 已校验; 无 MCP 调用(校验前拦截);--start 时间格式无效,需 ISO-8601(如 2026-03-10T00:00:00+08:00): parsing time "x" as "2006-01-02T15:04:05Z07:00": cannot parse "x" as "2006"输入 / CLI 输出输入 dws report +outbox-list --cursor 1 --size 1 --start x --end x --modified-start x --modified-end x --template-name x --yes stdout (空) stderr / error --start 时间格式无效,需 ISO-8601(如 2026-03-10T00:00:00+08:00): parsing time "x" as "2006-01-02T15:04:05Z07:00": cannot parse "x" as "2006" 最终用于判定的返回 --start 时间格式无效,需 ISO-8601(如 2026-03-10T00:00:00+08:00): parsing time "x" as "2006-01-02T15:04:05Z07:00": cannot parse "x" as "2006" 真实后端测试输入 / 输出真实后端成功exit=0;duration=1584ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test report +outbox-list --cursor 0 --size 1 --start 2026-07-08T15:14:41+08:00 --end 2026-07-15T15:14:41+08:00 --modified-start 2026-07-08T15:14:41+08:00 --modified-end 2026-07-15T15:14:41+08:00 --yes --format json 真实 stdout {
+ "count": 0,
+ "reports": []
+}真实 stderr / error (空) 真实返回 {
+ "count": 0,
+ "reports": []
+} |
||
dws report +report-latest --keyword <keyword>read取我最新提交的一篇日志/汇报详情(钉钉原生) |
-dws mcp report get_report_entry_details --json '{"cursor":<..>, "size":<..>, "startTime":<..>, "endTime":<..>, "report_id":<..>}' |
+dws report +report-latest --keyword <keyword>read复合/智能型取我最新提交的一篇日志/汇报详情(钉钉原生) |
+复合编排:多次 MCP 调用 / 分页、消歧、聚合或回滚;入口工具 get_report_entry_details |
无对应(钉钉特有服务) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; report/get_send_report_list;暂无日志输入 / CLI 输出输入 dws report +report-latest --keyword x --yes stdout (空) stderr / error 暂无日志 最终用于判定的返回 暂无日志 真实后端测试输入 / 输出真实后端返回错误exit=3;duration=1259ms;real-backend-read; no --mock; no --dry-run 失败归因 / 可修复性 输入或业务校验失败 / 需区分测试输入或后端规则 +命令已真实进入本地/后端校验;若该项仍使用安全负向输入,则失败符合预期;若使用真实 fixture 仍失败,再作为 CLI bug 处理。 真实输入 /private/tmp/dws-real-test report +report-latest --keyword '测试' --yes --format json 真实 stdout (空) 真实 stderr / error {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "暂无日志"
+ }
+}真实返回 {
+ "error": {
+ "category": "validation",
+ "code": 3,
+ "message": "暂无日志"
+ }
+} |
| dws shortcut(新增) | dws 原生 MCP 组合(等价裸命令) | lark-cli 对应 |
|---|
| dws shortcut(新增) | 原生 MCP / 编排说明 | lark-cli 对应 | 实际测试情况 |
|---|---|---|---|
dws sheet +list-sheets --node <node>read获取表格文档中全部工作表列表 |
dws mcp sheet <tool> |
lark sheets 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; sheet/get_all_sheets输入 / CLI 输出输入 dws sheet +list-sheets --node x --yes stdout {
+ "count": 0,
+ "sheets": []
+}stderr / error (空) 最终用于判定的返回 {
+ "count": 0,
+ "sheets": []
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1690ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test sheet +list-sheets --node mweZ92PV6O36dZbnsMZx70ylJxEKBD6p --yes --format json 真实 stdout {
+ "count": 1,
+ "sheets": [
+ {
+ "sheetId": "kgqie6hm",
+ "title": "Sheet1"
+ }
+ ]
+}真实 stderr / error (空) 真实返回 {
+ "count": 1,
+ "sheets": [
+ {
+ "sheetId": "kgqie6hm",
+ "title": "Sheet1"
+ }
+ ]
+} |
dws sheet +read --node <node> --sheet-id <sheet-id> --range <range> --value-render-option <value-render-option>read读取工作表指定范围的结构化单元格数据 |
dws mcp sheet get_cell_infos --json '{"nodeId":<..>, "sheetId":<..>, "range":<..>, "valueRenderOption":<..>}' |
lark sheets 无同名命令(能力/命名不同) | +已实测装配 cobra 实际执行 + fake MCP 拦截,零网络/零副作用;调用数 1;tool 已校验; sheet/get_cell_infos输入 / CLI 输出输入 dws sheet +read --node x --sheet-id x --range x --value-render-option formatted_value --yes stdout {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "range": "x",
+ "sheetId": "x",
+ "valueRenderOption": "formatted_value"
+ },
+ "product": "sheet",
+ "tool": "get_cell_infos"
+}stderr / error (空) 最终用于判定的返回 {
+ "_fake": true,
+ "args": {
+ "nodeId": "x",
+ "range": "x",
+ "sheetId": "x",
+ "valueRenderOption": "formatted_value"
+ },
+ "product": "sheet",
+ "tool": "get_cell_infos"
+}真实后端测试输入 / 输出真实后端成功exit=0;duration=1589ms;real-backend-read; no --mock; no --dry-run 真实输入 /private/tmp/dws-real-test sheet +read --node DWSREALREADNOSUCHID0000000000000 --sheet-id x --range x --value-render-option formatted_value --yes --format json 真实 stdout null 真实 stderr / error (空) 真实返回 null |