From b57cecb62d5e980958ba98aa4526a5a437816527 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=8B=E8=B0=A8?= <2940480744@qq.com> Date: Mon, 24 Aug 2026 17:47:46 +0800 Subject: [PATCH] feat(cli): optimize eight shortcut parameter aliases --- .../param_alias_payload_equivalence_test.go | 188 ++- internal/cli/param_aliases_generated.go | 919 ++++++++++- internal/cli/param_concepts.json | 1463 +++++++++-------- 3 files changed, 1912 insertions(+), 658 deletions(-) diff --git a/internal/app/param_alias_payload_equivalence_test.go b/internal/app/param_alias_payload_equivalence_test.go index cfd54910..9b2a74ce 100644 --- a/internal/app/param_alias_payload_equivalence_test.go +++ b/internal/app/param_alias_payload_equivalence_test.go @@ -153,7 +153,7 @@ var paramAliasCompleteCommands = map[string][]string{ "devdoc article search": {"devdoc", "article", "search", "--query", "fixture", "--page", "2", "--size", "7"}, "ding +receiver-status": {"ding", "+receiver-status", "--ding-id", "ding-1"}, "ding message receiver-status": {"ding", "message", "receiver-status", "--ding-id", "ding-1"}, - "ding message send": {"ding", "message", "send", "--robot-code", "robot-1", "--content", "fixture", "--users", "user-1", "--yes"}, + "ding message send": {"ding", "message", "send", "--robot-code", "robot-1", "--content", "fixture", "--users", "user-1"}, "doc +comment-create": {"doc", "+comment-create", "--node", "node-1", "--content", "fixture comment", "--yes"}, "doc +comment-list": {"doc", "+comment-list", "--node", "node-1", "--limit", "7", "--cursor", "cursor-1"}, "doc +comment-reply": {"doc", "+comment-reply", "--node", "node-1", "--comment-key", "comment-1", "--content", "fixture reply", "--yes"}, @@ -221,8 +221,8 @@ var paramAliasCompleteCommands = map[string][]string{ "drive search": {"drive", "search", "--query", "fixture", "--created-from", "1", "--created-to", "2", "--modified-from", "3", "--modified-to", "4", "--creator-uids", "user-1,user-2"}, "drive upload": {"drive", "upload", "--file", "../../go.mod", "--space-id", "space-1"}, "drive upload-info": {"drive", "upload-info", "--file-name", "fixture.txt", "--file-size", "7", "--space-id", "space-1"}, - "mail +find-mail-user": {"mail", "+find-mail-user", "--query", "fixture", "--limit", "7"}, - "mail folder update": {"mail", "folder", "update", "--email", "fixture@example.com", "--id", "folder-1", "--name", "Fixture Folder", "--yes"}, + "mail +find-mail-user": {"mail", "+find-mail-user", "--query", "fixture", "--limit", "7", "--cursor", "cursor-1"}, + "mail folder update": {"mail", "folder", "update", "--email", "fixture@example.com", "--id", "folder-1", "--name", "Fixture Folder"}, "mail message search": {"mail", "message", "search", "--email", "fixture@example.com", "--query", "subject:fixture"}, "mail thread list": {"mail", "thread", "list", "--email", "fixture@example.com", "--folder", "folder-1", "--limit", "7"}, "mail user search": {"mail", "user", "search", "--keyword", "fixture"}, @@ -231,12 +231,59 @@ var paramAliasCompleteCommands = map[string][]string{ "report list": {"report", "list", "--start", "2026-03-10T00:00:00+08:00", "--end", "2026-03-10T23:59:59+08:00"}, } -// paramAliasCandidateCompleteCommands contains complete invocations for the -// reviewed Minutes/TODO/Wiki joint draft. Keeping candidate-only commands in a -// separate map lets this test file land before the draft replaces the formal +// paramAliasCandidateCompleteCommands contains complete invocations for +// reviewed parameter-concept product drafts. Keeping candidate-only commands +// in a separate map lets a test change land before a draft replaces the formal // param_concepts.json: inactive candidate templates are ignored, while every // command becomes mandatory as soon as one of its reviewed aliases is active. var paramAliasCandidateCompleteCommands = map[string][]string{ + "attendance +check-record": {"attendance", "+check-record", "--users", "user-1,user-2", "--start", "2026-03-10 00:00:00", "--end", "2026-03-10 23:59:59"}, + "attendance +get-adjustment-rule": {"attendance", "+get-adjustment-rule", "--adjustment-id", "adjustment-1"}, + "attendance +get-approve-template": {"attendance", "+get-approve-template", "--type", "leave"}, + "attendance +get-checkin-record": {"attendance", "+get-checkin-record", "--operator-corp-id", "corp-1", "--operator-staff-id", "staff-operator", "--staff-ids", "staff-1,staff-2", "--start", "2026-03-10 00:00:00", "--end", "2026-03-10 23:59:59"}, + "attendance +get-leave-records": {"attendance", "+get-leave-records", "--user", "user-1", "--start", "2026-03-01", "--end", "2026-03-31", "--leave-code", "annual_leave"}, + "attendance +get-overtime-rule": {"attendance", "+get-overtime-rule", "--overtime-id", "overtime-1"}, + "attendance +get-schedule": {"attendance", "+get-schedule", "--users", "user-1,user-2", "--start", "2026-03-10", "--end", "2026-03-11"}, + "attendance +get-self-setting": {"attendance", "+get-self-setting", "--user", "user-1", "--setting-scene", "checkRemind"}, + "attendance +get-summary": {"attendance", "+get-summary", "--user", "user-1", "--date", "2026-03-10", "--stats-type", "week"}, + "attendance +list-approve": {"attendance", "+list-approve", "--users", "user-1,user-2", "--types", "leave", "--start", "2026-03-01", "--end", "2026-03-31"}, + "attendance +query-report-data": {"attendance", "+query-report-data", "--users", "user-1,user-2", "--columns", "attendance_days,late_count", "--start", "2026-03-01", "--end", "2026-03-31"}, + "attendance +search-adjustment-rule": {"attendance", "+search-adjustment-rule", "--query", "fixture", "--page", "2", "--limit", "7"}, + "attendance +search-class": {"attendance", "+search-class", "--filter-type", "name", "--query", "fixture"}, + "attendance +search-group": {"attendance", "+search-group", "--type", "FIXED"}, + "attendance +search-overtime-rule": {"attendance", "+search-overtime-rule", "--query", "fixture", "--page", "2", "--limit", "7"}, + "ding +list": {"ding", "+list", "--cursor", "0", "--type", "ALL"}, + "ding +recall-personal": {"ding", "+recall-personal", "--id", "ding-1", "--yes"}, + "ding +send-personal": {"ding", "+send-personal", "--users", appFixtureCurrentDOpenID, "--content", "fixture", "--yes"}, + "mail +contact-list": {"mail", "+contact-list", "--email", "fixture@example.com", "--limit", "7", "--cursor", "cursor-1"}, + "mail +folder-list": {"mail", "+folder-list", "--email", "fixture@example.com", "--folder", "folder-1"}, + "mail +message": {"mail", "+message", "--email", "fixture@example.com", "--id", "message-1"}, + "mail +messages": {"mail", "+messages", "--email", "fixture@example.com", "--ids", "message-1,message-2"}, + "mail +recent-mail": {"mail", "+recent-mail", "--limit", "7", "--cursor", "cursor-1"}, + "mail +search-mail": {"mail", "+search-mail", "--query", "fixture", "--size", "7", "--cursor", "cursor-1"}, + "mail +template-list": {"mail", "+template-list", "--email", "fixture@example.com", "--limit", "7", "--cursor", "cursor-1"}, + "mail +thread": {"mail", "+thread", "--email", "fixture@example.com", "--id", "thread-1"}, + "mail +thread-list": {"mail", "+thread-list", "--email", "fixture@example.com", "--folder", "folder-1", "--cursor", "cursor-1"}, + "mail +triage": {"mail", "+triage", "--query", "fixture", "--limit", "7", "--cursor", "cursor-1"}, + "mail +unread-mail": {"mail", "+unread-mail", "--size", "7", "--cursor", "cursor-1"}, + "mail +user-search": {"mail", "+user-search", "--keyword", "fixture", "--cursor", "cursor-1"}, + "markdown create": {"markdown", "create", "--content", "# Fixture", "--name", "fixture.md", "--space-id", "space-1"}, + "markdown diff": {"markdown", "diff", "--node", "node-1", "--version", "1", "--version2", "2", "--context", "3"}, + "markdown fetch": {"markdown", "fetch", "--node", "node-1", "--space-id", "space-1", "--output", "/tmp/dws-markdown-fixture.md"}, + "markdown overwrite": {"markdown", "overwrite", "--node", "node-1", "--content", "# Fixture", "--name", "fixture.md", "--space-id", "space-1", "--yes"}, + "markdown patch": {"markdown", "patch", "--node", "node-1", "--pattern", "old", "--content", "new", "--regex", "--space-id", "space-1", "--yes"}, + "oa +list-cc": {"oa", "+list-cc", "--page", "2"}, + "oa +list-executed": {"oa", "+list-executed", "--limit", "7", "--page", "2"}, + "oa +list-forms": {"oa", "+list-forms", "--cursor", "2"}, + "oa +list-pending": {"oa", "+list-pending", "--start", "1773072000000", "--end", "1773158399000", "--page", "2"}, + "oa +list-submitted": {"oa", "+list-submitted", "--page", "2"}, + "oa +my-initiated": {"oa", "+my-initiated", "--page", "2"}, + "report +outbox-list": {"report", "+outbox-list", "--size", "7"}, + "report +report-latest": {"report", "+report-latest", "--keyword", "Fixture", "--start", "2026-03-01T00:00:00+08:00", "--end", "2026-03-10T00:00:00+08:00"}, + "report +template-search": {"report", "+template-search", "--query", "fixture"}, + "sheet +list-sheets": {"sheet", "+list-sheets", "--node", "node-1"}, + "sheet +read": {"sheet", "+read", "--node", "node-1", "--sheet-id", "Sheet1"}, + "minutes +detail": {"minutes", "+detail", "--ids", "u1,u2"}, "minutes +latest": {"minutes", "+latest", "--keyword", "fixture"}, "minutes +list-all": {"minutes", "+list-all", "--limit", "7"}, @@ -296,6 +343,20 @@ var paramAliasCandidateCompleteCommands = map[string][]string{ // that case the shared command template above cannot contain every canonical // flag at once, so select a fixture-specific complete invocation here. var paramAliasCompleteCommandVariants = map[string]map[string][]string{ + "markdown create": { + "file": {"markdown", "create", "--file", "../../README.md", "--name", "fixture.md", "--space-id", "space-1"}, + }, + "markdown diff": { + "file": {"markdown", "diff", "--node", "node-1", "--file", "../../README.md", "--context", "3"}, + }, + "markdown overwrite": { + "file": {"markdown", "overwrite", "--node", "node-1", "--file", "../../README.md", "--name", "fixture.md", "--space-id", "space-1", "--yes"}, + "dry-run": {"markdown", "overwrite", "--node", "node-1", "--content", "# Fixture", "--name", "fixture.md", "--space-id", "space-1", "--dry-run"}, + }, + "markdown patch": { + "dry-run": {"markdown", "patch", "--node", "node-1", "--pattern", "old", "--content", "new", "--regex", "--dry-run"}, + }, + "doc +copy": { "folder": {"doc", "+copy", "--node", "node-1", "--folder", "folder-1", "--yes"}, "workspace": {"doc", "+copy", "--node", "node-1", "--workspace", "workspace-1", "--yes"}, @@ -969,6 +1030,121 @@ func assertParamAliasCannotBypassConfirmation(t *testing.T, aliasArgs []string) } } +// TestCrossPlatformCoverageEightProductTemplatedParamAliasesCannotBypassConfirmation +// exercises every distinct reviewed mutating complete-command template in the +// eight-product Shortcut expansion. The fixture gate already proves every +// alias resolves through PreParse; this gate removes the confirmation flag +// from one active alias invocation per distinct template and requires the +// runtime boundary to stop it before the first transport call. An explicit +// --dry-run is a reviewed preview path and must not carry a bypass flag. +func TestCrossPlatformCoverageEightProductTemplatedParamAliasesCannotBypassConfirmation(t *testing.T) { + concepts, err := cli.LoadParamConcepts() + if err != nil { + t.Fatalf("LoadParamConcepts() error = %v", err) + } + + requiredTemplates := make(map[string]bool) + coveredTemplates := make(map[string]bool) + for _, fixture := range concepts.Fixture { + if strings.HasPrefix(fixture.Expect, "did-you-mean:") { + continue + } + product, _, _ := strings.Cut(fixture.Command, " ") + switch product { + case "attendance", "mail", "oa", "ding", "report", "sheet", "whiteboard", "markdown": + default: + continue + } + complete, ok := paramAliasCompleteCommand(fixture.Command, fixture.Expect) + if !ok { + continue + } + _, yesCount := removeExactArg(complete, "--yes") + _, userSayYesCount := removeExactArg(complete, "--user-say-yes") + confirmationCount := yesCount + userSayYesCount + confirmationArg := "--yes" + if userSayYesCount == 1 { + confirmationArg = "--user-say-yes" + } + _, dryRunCount := removeExactArg(complete, "--dry-run") + if dryRunCount > 1 { + t.Errorf("template must contain --dry-run at most once: command=%q args=%v", fixture.Command, complete) + continue + } + if meta, exists := cli.ResolveMeta(fixture.Command); exists { + switch meta.Safety.Confirmation { + case "user_required": + if dryRunCount == 1 { + if confirmationCount != 0 { + t.Errorf("Schema-confirmed dry-run template must not contain a confirmation bypass flag: command=%q args=%v", fixture.Command, complete) + } + continue + } + if confirmationCount != 1 { + t.Errorf("Schema-confirmed template must contain exactly one reviewed confirmation flag: command=%q confirmation=%q args=%v", fixture.Command, meta.Safety.Confirmation, complete) + continue + } + case "not_required": + if confirmationCount != 0 { + t.Errorf("Schema-unconfirmed template must not contain a confirmation bypass flag: command=%q confirmation=%q args=%v", fixture.Command, meta.Safety.Confirmation, complete) + continue + } + } + } + if confirmationCount == 0 { + continue + } + if confirmationCount != 1 { + t.Errorf("confirmation template must contain exactly one reviewed confirmation flag: command=%q args=%v", fixture.Command, complete) + continue + } + + templateKey := fixture.Command + "\x00" + strings.Join(complete, "\x00") + requiredTemplates[templateKey] = true + if coveredTemplates[templateKey] { + continue + } + aliasArgs, replacements := replaceLongFlag(complete, fixture.Expect, fixture.Emitted) + if replacements != 1 { + t.Errorf("confirmation template for %q/%q must contain canonical --%s exactly once; replacements=%d args=%v", fixture.Command, fixture.Emitted, fixture.Expect, replacements, complete) + continue + } + coveredTemplates[templateKey] = true + t.Run(fixture.Command+"/"+fixture.Emitted, func(t *testing.T) { + assertTemplatedParamAliasCannotBypassConfirmation(t, fixture.Command, confirmationArg, aliasArgs) + }) + } + + if len(requiredTemplates) == 0 { + t.Fatal("reviewed complete-command templates contain no confirmation cases") + } + if len(coveredTemplates) != len(requiredTemplates) { + t.Fatalf("templated confirmation coverage = %d, want %d", len(coveredTemplates), len(requiredTemplates)) + } +} + +func assertTemplatedParamAliasCannotBypassConfirmation(t *testing.T, command, confirmationArg string, aliasArgs []string) { + t.Helper() + unconfirmedArgs, removals := removeExactArg(aliasArgs, confirmationArg) + if removals != 1 { + t.Fatalf("confirmation template must contain %s exactly once; removals=%d args=%v", confirmationArg, removals, aliasArgs) + } + + caller := ¶mAliasCaptureCaller{} + ctx, err := executeParamAliasPayloadE2E(t, caller, unconfirmedArgs...) + if ctx == nil { + t.Fatal("unconfirmed alias command skipped PreParse") + } + var appErr *apperrors.Error + if errors.As(err, &appErr) && appErr.Reason == "confirmation_required" { + if len(caller.calls) != 0 { + t.Fatalf("unconfirmed alias crossed the transport boundary before confirmation: args=%v calls=%#v", unconfirmedArgs, caller.calls) + } + return + } + t.Fatalf("unconfirmed alias command error = %#v, want confirmation_required\ncommand=%q args=%v calls=%#v", err, command, unconfirmedArgs, caller.calls) +} + func assertParamAliasFinalPayloadEquivalent(t *testing.T, command string, canonicalArgs, aliasArgs []string) { t.Helper() canonicalCaller := ¶mAliasCaptureCaller{} diff --git a/internal/cli/param_aliases_generated.go b/internal/cli/param_aliases_generated.go index 2d47b7be..b27d1e99 100644 --- a/internal/cli/param_aliases_generated.go +++ b/internal/cli/param_aliases_generated.go @@ -1759,12 +1759,326 @@ var generatedParamAliases = []ParamAliasEntry{ }, Blocked: []string{"id", "task-id"}, }, + { + CLIPath: "attendance +check-record", + Aliases: map[string]string{ + "begin": "start", + "end-date": "end", + "end-time": "end", + "from": "start", + "from-date": "start", + "max-time": "end", + "min-time": "start", + "since": "start", + "staff-ids": "users", + "start-date": "start", + "start-time": "start", + "target-user-ids": "users", + "time-max": "end", + "time-min": "start", + "to": "end", + "until": "end", + "user-id-list": "users", + "user-ids": "users", + }, + Blocked: []string{"at-user-ids", "date", "staff-id", "time", "uid", "user", "user-id", "userid"}, + }, { CLIPath: "attendance +check-result", Aliases: map[string]string{ - "user-ids": "users", + "begin": "start", + "end-date": "end", + "end-time": "end", + "from": "start", + "from-date": "start", + "max-result": "limit", + "max-results": "limit", + "max-time": "end", + "min-time": "start", + "page-size": "limit", + "per-page": "limit", + "since": "start", + "size": "limit", + "staff-ids": "users", + "start-date": "start", + "start-time": "start", + "take": "limit", + "target-user-ids": "users", + "time-max": "end", + "time-min": "start", + "to": "end", + "top": "limit", + "until": "end", + "user-id-list": "users", + "user-ids": "users", }, - Blocked: []string{"at-user-ids", "staff-id", "uid", "user", "user-id", "userid"}, + Blocked: []string{"at-user-ids", "count", "cursor", "date", "page", "page-token", "staff-id", "time", "uid", "user", "user-id", "userid"}, + }, + { + CLIPath: "attendance +get-adjustment-rule", + Aliases: map[string]string{ + "adjustment-rule-id": "adjustment-id", + "rule-id": "adjustment-id", + }, + Blocked: []string{"class-id", "group-id", "id", "overtime-id", "plan-id", "result-id"}, + }, + { + CLIPath: "attendance +get-approve-template", + Aliases: map[string]string{ + "approval-type": "type", + "biz-type": "type", + }, + Blocked: []string{"approval-types", "biz-types", "types"}, + }, + { + CLIPath: "attendance +get-checkin-record", + Aliases: map[string]string{ + "begin": "start", + "corp-id": "operator-corp-id", + "end-date": "end", + "end-time": "end", + "from": "start", + "from-date": "start", + "max-time": "end", + "min-time": "start", + "operator-company-id": "operator-corp-id", + "operator-id": "operator-staff-id", + "operator-user-id": "operator-staff-id", + "since": "start", + "start-date": "start", + "start-time": "start", + "target-user-ids": "staff-ids", + "time-max": "end", + "time-min": "start", + "to": "end", + "until": "end", + "user-id-list": "staff-ids", + "user-ids": "staff-ids", + "users": "staff-ids", + }, + Blocked: []string{"at-user-ids", "date", "name", "time", "to-user"}, + Ambiguous: []string{"staff-id", "uid", "user", "user-id", "userid"}, + }, + { + CLIPath: "attendance +get-leave-records", + Aliases: map[string]string{ + "begin": "start", + "end-date": "end", + "end-time": "end", + "from": "start", + "from-date": "start", + "max-time": "end", + "min-time": "start", + "since": "start", + "staff-id": "user", + "start-date": "start", + "start-time": "start", + "time-max": "end", + "time-min": "start", + "to": "end", + "uid": "user", + "until": "end", + "user-id": "user", + "userid": "user", + "vacation-type-code": "leave-code", + }, + Blocked: []string{"at-user-ids", "date", "id", "leave-name", "leave-names", "name", "rule-id", "time", "to-user", "user-ids", "users", "vacation-name"}, + }, + { + CLIPath: "attendance +get-overtime-rule", + Aliases: map[string]string{ + "overtime-rule-id": "overtime-id", + "rule-id": "overtime-id", + }, + Blocked: []string{"adjustment-id", "class-id", "group-id", "id", "plan-id", "result-id"}, + }, + { + CLIPath: "attendance +get-schedule", + Aliases: map[string]string{ + "begin": "start", + "end-date": "end", + "end-time": "end", + "from": "start", + "from-date": "start", + "max-time": "end", + "min-time": "start", + "since": "start", + "staff-ids": "users", + "start-date": "start", + "start-time": "start", + "target-user-ids": "users", + "time-max": "end", + "time-min": "start", + "to": "end", + "until": "end", + "user-id-list": "users", + "user-ids": "users", + "work-date-begin": "start", + "work-date-end": "end", + }, + Blocked: []string{"at-user-ids", "date", "staff-id", "time", "uid", "user", "user-id", "userid"}, + }, + { + CLIPath: "attendance +get-self-setting", + Aliases: map[string]string{ + "scene": "setting-scene", + "staff-id": "user", + "uid": "user", + "user-id": "user", + "userid": "user", + }, + Blocked: []string{"at-user-ids", "name", "setting-item", "setting-type", "to-user", "user-ids", "users"}, + }, + { + CLIPath: "attendance +get-summary", + Aliases: map[string]string{ + "attendance-date": "date", + "period": "stats-type", + "staff-id": "user", + "statistics-type": "stats-type", + "summary-type": "stats-type", + "uid": "user", + "user-id": "user", + "userid": "user", + }, + Blocked: []string{"at-user-ids", "end", "end-date", "name", "start", "start-date", "time", "to-user", "user-ids", "users"}, + }, + { + CLIPath: "attendance +list-approve", + Aliases: map[string]string{ + "approval-types": "types", + "begin": "start", + "biz-types": "types", + "end-date": "end", + "end-time": "end", + "from": "start", + "from-date": "start", + "max-time": "end", + "min-time": "start", + "since": "start", + "staff-ids": "users", + "start-date": "start", + "start-time": "start", + "target-user-ids": "users", + "time-max": "end", + "time-min": "start", + "to": "end", + "until": "end", + "user-id-list": "users", + "user-ids": "users", + }, + Blocked: []string{"at-user-ids", "date", "staff-id", "time", "uid", "user", "user-id", "userid"}, + }, + { + CLIPath: "attendance +query-report-data", + Aliases: map[string]string{ + "begin": "start", + "end-date": "end", + "end-time": "end", + "from": "start", + "from-date": "start", + "max-time": "end", + "min-time": "start", + "report-column-ids": "columns", + "since": "start", + "staff-ids": "users", + "start-date": "start", + "start-time": "start", + "target-user-ids": "users", + "time-max": "end", + "time-min": "start", + "to": "end", + "until": "end", + "user-id-list": "users", + "user-ids": "users", + }, + Blocked: []string{"at-user-ids", "column-names", "date", "leave-names", "staff-id", "time", "uid", "user", "user-id", "userid"}, + }, + { + CLIPath: "attendance +search-adjustment-rule", + Aliases: map[string]string{ + "current-page": "page", + "keyword": "query", + "keywords": "query", + "max-result": "limit", + "max-results": "limit", + "page-no": "page", + "page-num": "page", + "page-size": "limit", + "per-page": "limit", + "q": "query", + "search-word": "query", + "size": "limit", + "take": "limit", + "top": "limit", + }, + Blocked: []string{"count", "cursor", "name", "page-index", "page-token", "subject", "text", "title"}, + }, + { + CLIPath: "attendance +search-class", + Aliases: map[string]string{ + "class-filter-type": "filter-type", + "class-scope": "filter-type", + "current-page": "page", + "keyword": "query", + "keywords": "query", + "max-result": "limit", + "max-results": "limit", + "page-no": "page", + "page-num": "page", + "page-size": "limit", + "per-page": "limit", + "q": "query", + "search-word": "query", + "size": "limit", + "take": "limit", + "top": "limit", + }, + Blocked: []string{"count", "cursor", "name", "page-index", "page-token", "subject", "text", "title"}, + }, + { + CLIPath: "attendance +search-group", + Aliases: map[string]string{ + "attendance-group-type": "type", + "current-page": "page", + "group-type": "type", + "include-ble": "query-ble", + "include-position": "query-position", + "keyword": "query", + "keywords": "query", + "max-result": "limit", + "max-results": "limit", + "page-no": "page", + "page-num": "page", + "page-size": "limit", + "per-page": "limit", + "q": "query", + "search-word": "query", + "size": "limit", + "take": "limit", + "top": "limit", + }, + Blocked: []string{"count", "cursor", "name", "page-index", "page-token", "subject", "text", "title"}, + }, + { + CLIPath: "attendance +search-overtime-rule", + Aliases: map[string]string{ + "current-page": "page", + "keyword": "query", + "keywords": "query", + "max-result": "limit", + "max-results": "limit", + "page-no": "page", + "page-num": "page", + "page-size": "limit", + "per-page": "limit", + "q": "query", + "search-word": "query", + "size": "limit", + "take": "limit", + "top": "limit", + }, + Blocked: []string{"count", "cursor", "name", "page-index", "page-token", "subject", "text", "title"}, }, { CLIPath: "attendance check result", @@ -3912,11 +4226,44 @@ var generatedParamAliases = []ParamAliasEntry{ }, Blocked: []string{"count", "cursor", "page-index", "page-token"}, }, + { + CLIPath: "ding +list", + Aliases: map[string]string{ + "message-type": "type", + "next-cursor": "cursor", + }, + Blocked: []string{"next-token", "offset", "page", "page-token", "remind-type", "status"}, + }, + { + CLIPath: "ding +recall-personal", + Aliases: map[string]string{ + "ding-id": "id", + "open-ding-id": "id", + }, + Blocked: []string{"message-id", "request-id", "robot", "robot-code", "task-id", "uuid"}, + }, { CLIPath: "ding +receiver-status", Aliases: map[string]string{ - "id": "ding-id", + "id": "ding-id", + "open-ding-id": "ding-id", }, + Blocked: []string{"message-id", "request-id", "task-id", "uuid"}, + }, + { + CLIPath: "ding +send-personal", + Aliases: map[string]string{ + "body": "content", + "idempotency-key": "uuid", + "message-content": "content", + "open-dingtalk-ids": "users", + "receiver-open-dingtalk-ids": "users", + "recipient-open-dingtalk-ids": "users", + "remind-type": "type", + "request-id": "uuid", + "text": "content", + }, + Blocked: []string{"ding-id", "id", "message-type", "name", "open-ding-id", "open-dingtalk-id", "receiver-user-ids", "recipient-user-ids", "robot", "robot-code", "staff-id", "staff-ids", "status", "title", "user", "user-id", "user-ids"}, }, { CLIPath: "ding message receiver-status", @@ -6005,15 +6352,211 @@ var generatedParamAliases = []ParamAliasEntry{ }, Blocked: []string{"knowledge-base-id", "limit", "page-size", "part-size", "size", "space", "wiki-workspace-id", "workspace", "workspace-id"}, }, + { + CLIPath: "mail +contact-list", + Aliases: map[string]string{ + "max-result": "limit", + "max-results": "limit", + "next-cursor": "cursor", + "next-page-token": "cursor", + "next-token": "cursor", + "page-size": "limit", + "page-token": "cursor", + "per-page": "limit", + "size": "limit", + "take": "limit", + "top": "limit", + }, + Blocked: []string{"count", "offset", "page"}, + }, { CLIPath: "mail +find-mail-user", Aliases: map[string]string{ - "keyword": "query", - "keywords": "query", - "q": "query", - "search-word": "query", + "keyword": "query", + "keywords": "query", + "max-result": "limit", + "max-results": "limit", + "next-cursor": "cursor", + "next-page-token": "cursor", + "next-token": "cursor", + "page-size": "limit", + "page-token": "cursor", + "per-page": "limit", + "q": "query", + "search-word": "query", + "size": "limit", + "take": "limit", + "top": "limit", }, - Blocked: []string{"name", "subject", "text", "title"}, + Blocked: []string{"count", "name", "offset", "page", "subject", "text", "title"}, + }, + { + CLIPath: "mail +folder-list", + Aliases: map[string]string{ + "folder-id": "folder", + }, + Blocked: []string{"calendar-id", "name", "node-id"}, + }, + { + CLIPath: "mail +message", + Aliases: map[string]string{ + "mail-id": "id", + "message-id": "id", + }, + Blocked: []string{"attachment-id", "conversation-id", "internet-message-id", "thread-id"}, + }, + { + CLIPath: "mail +messages", + Aliases: map[string]string{ + "mail-ids": "ids", + "message-ids": "ids", + }, + Blocked: []string{"conversation-id", "conversation-ids", "mail-id", "message-id", "thread-id", "thread-ids"}, + }, + { + CLIPath: "mail +recent-mail", + Aliases: map[string]string{ + "folder-id": "folder", + "max-result": "limit", + "max-results": "limit", + "next-cursor": "cursor", + "next-page-token": "cursor", + "next-token": "cursor", + "page-size": "limit", + "page-token": "cursor", + "per-page": "limit", + "size": "limit", + "take": "limit", + "top": "limit", + }, + Blocked: []string{"calendar-id", "count", "name", "node-id", "offset", "page"}, + }, + { + CLIPath: "mail +search-mail", + Aliases: map[string]string{ + "limit": "size", + "max-result": "size", + "max-results": "size", + "next-cursor": "cursor", + "next-page-token": "cursor", + "next-token": "cursor", + "page-size": "size", + "page-token": "cursor", + "per-page": "size", + "take": "size", + "top": "size", + }, + Blocked: []string{"count", "date", "folder", "folder-id", "from", "from-address", "has-attachments", "offset", "page", "sender", "subject", "to-address"}, + }, + { + CLIPath: "mail +template-list", + Aliases: map[string]string{ + "max-result": "limit", + "max-results": "limit", + "next-cursor": "cursor", + "next-page-token": "cursor", + "next-token": "cursor", + "page-size": "limit", + "page-token": "cursor", + "per-page": "limit", + "size": "limit", + "take": "limit", + "top": "limit", + }, + Blocked: []string{"count", "offset", "page"}, + }, + { + CLIPath: "mail +thread", + Aliases: map[string]string{ + "conversation-id": "id", + "thread-id": "id", + }, + Blocked: []string{"mail-id", "mail-ids", "message-id", "message-ids"}, + }, + { + CLIPath: "mail +thread-list", + Aliases: map[string]string{ + "begin": "start", + "end-date": "end", + "end-time": "end", + "folder-id": "folder", + "from": "start", + "from-date": "start", + "max-result": "limit", + "max-results": "limit", + "max-time": "end", + "min-time": "start", + "next-cursor": "cursor", + "next-page-token": "cursor", + "next-token": "cursor", + "page-size": "limit", + "page-token": "cursor", + "per-page": "limit", + "since": "start", + "size": "limit", + "start-date": "start", + "start-time": "start", + "take": "limit", + "time-max": "end", + "time-min": "start", + "top": "limit", + }, + Blocked: []string{"calendar-id", "count", "date", "name", "node-id", "offset", "page", "time"}, + }, + { + CLIPath: "mail +triage", + Aliases: map[string]string{ + "max-result": "limit", + "max-results": "limit", + "next-cursor": "cursor", + "next-page-token": "cursor", + "next-token": "cursor", + "page-size": "limit", + "page-token": "cursor", + "per-page": "limit", + "size": "limit", + "take": "limit", + "top": "limit", + }, + Blocked: []string{"count", "date", "folder", "folder-id", "from", "from-address", "has-attachments", "offset", "page", "sender", "subject", "to-address"}, + }, + { + CLIPath: "mail +unread-mail", + Aliases: map[string]string{ + "limit": "size", + "max-result": "size", + "max-results": "size", + "next-cursor": "cursor", + "next-page-token": "cursor", + "next-token": "cursor", + "page-size": "size", + "page-token": "cursor", + "per-page": "size", + "take": "size", + "top": "size", + }, + Blocked: []string{"count", "keyword", "offset", "page", "query", "sender", "subject"}, + }, + { + CLIPath: "mail +user-search", + Aliases: map[string]string{ + "keywords": "keyword", + "max-result": "limit", + "max-results": "limit", + "next-cursor": "cursor", + "next-page-token": "cursor", + "next-token": "cursor", + "page-size": "limit", + "page-token": "cursor", + "per-page": "limit", + "q": "keyword", + "query": "keyword", + "search-word": "keyword", + "size": "limit", + "take": "limit", + "top": "limit", + }, + Blocked: []string{"count", "name", "offset", "page", "subject", "text", "title"}, }, { CLIPath: "mail folder update", @@ -6052,6 +6595,123 @@ var generatedParamAliases = []ParamAliasEntry{ }, Blocked: []string{"name", "subject", "text", "title"}, }, + { + CLIPath: "markdown create", + Aliases: map[string]string{ + "body": "content", + "dingdrive-space-id": "space-id", + "drive-space-id": "space-id", + "file-name": "name", + "filename": "name", + "folder-id": "folder", + "knowledge-base-id": "workspace", + "local-file": "file", + "markdown-content": "content", + "plan-only": "dry-run", + "preview-only": "dry-run", + "source-file": "file", + "storage-space-id": "space-id", + "text": "content", + "wiki-workspace-id": "workspace", + }, + Blocked: []string{"dentry-id", "doc-id", "document-id", "file-id", "node", "node-id", "output-path", "pattern", "regex", "replacement", "title", "url", "version", "version2"}, + Ambiguous: []string{"content-file", "destination", "id", "path", "space"}, + }, + { + CLIPath: "markdown diff", + Aliases: map[string]string{ + "base-version": "version", + "context-lines": "context", + "dentry-uuid": "node", + "diff-context": "context", + "from-version": "version", + "left-version": "version", + "local-file": "file", + "plan-only": "dry-run", + "preview-only": "dry-run", + "right-version": "version2", + "source-file": "file", + "surrounding-lines": "context", + "target-version": "version2", + "to-version": "version2", + "version-no": "version", + "version-number": "version", + }, + Blocked: []string{"body", "content", "content-file", "folder", "folder-id", "name", "output-path", "pattern", "regex", "revision", "space-id", "version-id", "workspace", "workspace-id"}, + Ambiguous: []string{"destination", "left", "path", "right"}, + }, + { + CLIPath: "markdown fetch", + Aliases: map[string]string{ + "dentry-uuid": "node", + "destination-path": "output", + "dingdrive-space-id": "space-id", + "document-id": "node", + "download-to": "output", + "drive-space-id": "space-id", + "knowledge-base-id": "workspace", + "output-file": "output", + "output-path": "output", + "save-path": "output", + "save-to": "output", + "storage-space-id": "space-id", + "wiki-workspace-id": "workspace", + }, + Blocked: []string{"content", "content-file", "dentry-id", "file", "file-path", "folder", "folder-id", "name", "parent-id", "pattern", "regex", "url", "version", "version2"}, + Ambiguous: []string{"destination", "path", "space"}, + }, + { + CLIPath: "markdown overwrite", + Aliases: map[string]string{ + "body": "content", + "dentry-uuid": "node", + "dingdrive-space-id": "space-id", + "document-id": "node", + "drive-space-id": "space-id", + "file-name": "name", + "filename": "name", + "knowledge-base-id": "workspace", + "local-file": "file", + "markdown-content": "content", + "no-write": "dry-run", + "preview-only": "dry-run", + "show-diff": "dry-run", + "source-file": "file", + "storage-space-id": "space-id", + "text": "content", + "wiki-workspace-id": "workspace", + }, + Blocked: []string{"content-file", "dentry-id", "folder", "folder-id", "output-path", "parent-id", "pattern", "regex", "replacement", "title", "url", "version", "version2"}, + Ambiguous: []string{"destination", "id", "path", "space"}, + }, + { + CLIPath: "markdown patch", + Aliases: map[string]string{ + "dentry-uuid": "node", + "dingdrive-space-id": "space-id", + "document-id": "node", + "drive-space-id": "space-id", + "find-text": "pattern", + "knowledge-base-id": "workspace", + "match-pattern": "pattern", + "new-text": "content", + "no-write": "dry-run", + "old-text": "pattern", + "preview-only": "dry-run", + "regexp": "regex", + "regular-expression": "regex", + "replace-with": "content", + "replacement": "content", + "replacement-text": "content", + "search-pattern": "pattern", + "show-diff": "dry-run", + "storage-space-id": "space-id", + "use-regex": "regex", + "wiki-workspace-id": "workspace", + }, + Blocked: []string{"content-file", "dentry-id", "file", "file-path", "folder", "folder-id", "name", "output-path", "parent-id", "query", "replacement-file", "url", "version", "version2"}, + Ambiguous: []string{"body", "destination", "id", "path", "space", "text", "value"}, + }, { CLIPath: "minutes +action-items", Aliases: map[string]string{ @@ -6655,6 +7315,128 @@ var generatedParamAliases = []ParamAliasEntry{ CLIPath: "minutes upload create", Blocked: []string{"file", "file-path", "path", "template-ids"}, }, + { + CLIPath: "oa +list-cc", + Aliases: map[string]string{ + "current-page": "page", + "keyword": "query", + "keywords": "query", + "max-result": "limit", + "max-results": "limit", + "page-no": "page", + "page-num": "page", + "page-size": "limit", + "per-page": "limit", + "q": "query", + "search-word": "query", + "size": "limit", + "take": "limit", + "top": "limit", + }, + Blocked: []string{"count", "cursor", "name", "page-index", "page-token", "subject", "text", "title"}, + }, + { + CLIPath: "oa +list-executed", + Aliases: map[string]string{ + "current-page": "page", + "keyword": "query", + "keywords": "query", + "page-no": "page", + "page-num": "page", + "q": "query", + "search-word": "query", + }, + Blocked: []string{"count", "cursor", "name", "page-index", "page-size", "page-token", "subject", "text", "title"}, + }, + { + CLIPath: "oa +list-forms", + Aliases: map[string]string{ + "max-result": "limit", + "max-results": "limit", + "next-cursor": "cursor", + "next-page-token": "cursor", + "next-token": "cursor", + "page-size": "limit", + "page-token": "cursor", + "per-page": "limit", + "size": "limit", + "take": "limit", + "top": "limit", + }, + Blocked: []string{"count", "offset", "page"}, + }, + { + CLIPath: "oa +list-pending", + Aliases: map[string]string{ + "begin": "start", + "current-page": "page", + "end-date": "end", + "end-time": "end", + "from": "start", + "from-date": "start", + "keyword": "query", + "keywords": "query", + "max-result": "limit", + "max-results": "limit", + "max-time": "end", + "min-time": "start", + "page-no": "page", + "page-num": "page", + "page-size": "limit", + "per-page": "limit", + "q": "query", + "search-word": "query", + "since": "start", + "size": "limit", + "start-date": "start", + "start-time": "start", + "take": "limit", + "time-max": "end", + "time-min": "start", + "top": "limit", + }, + Blocked: []string{"count", "cursor", "date", "name", "offset", "page-index", "page-token", "subject", "text", "time", "title"}, + }, + { + CLIPath: "oa +list-submitted", + Aliases: map[string]string{ + "current-page": "page", + "keyword": "query", + "keywords": "query", + "max-result": "limit", + "max-results": "limit", + "page-no": "page", + "page-num": "page", + "page-size": "limit", + "per-page": "limit", + "q": "query", + "search-word": "query", + "size": "limit", + "take": "limit", + "top": "limit", + }, + Blocked: []string{"count", "cursor", "name", "page-index", "page-token", "subject", "text", "title"}, + }, + { + CLIPath: "oa +my-initiated", + Aliases: map[string]string{ + "current-page": "page", + "keyword": "query", + "keywords": "query", + "max-result": "limit", + "max-results": "limit", + "page-no": "page", + "page-num": "page", + "page-size": "limit", + "per-page": "limit", + "q": "query", + "search-word": "query", + "size": "limit", + "take": "limit", + "top": "limit", + }, + Blocked: []string{"count", "cursor", "name", "page-index", "page-token", "subject", "text", "title"}, + }, { CLIPath: "oa +search-forms", Aliases: map[string]string{ @@ -6675,6 +7457,100 @@ var generatedParamAliases = []ParamAliasEntry{ }, Blocked: []string{"name", "subject", "text", "title"}, }, + { + CLIPath: "report +inbox-list", + Aliases: map[string]string{ + "begin": "start", + "end-date": "end", + "end-time": "end", + "from": "start", + "from-date": "start", + "from-staff-ids": "sender-user-ids", + "limit": "size", + "max-result": "size", + "max-results": "size", + "max-time": "end", + "min-time": "start", + "page-size": "size", + "per-page": "size", + "sender-staff-ids": "sender-user-ids", + "since": "start", + "start-date": "start", + "start-time": "start", + "take": "size", + "time-max": "end", + "time-min": "start", + "top": "size", + }, + Blocked: []string{"count", "date", "page", "sender-id", "sender-staff-id", "sender-user-id", "staff-id", "staff-ids", "time", "user-id", "user-ids"}, + }, + { + CLIPath: "report +outbox-list", + Aliases: map[string]string{ + "begin": "start", + "end-date": "end", + "end-time": "end", + "from": "start", + "from-date": "start", + "limit": "size", + "max-result": "size", + "max-results": "size", + "max-time": "end", + "min-time": "start", + "modified-from": "modified-start", + "modified-to": "modified-end", + "name": "template-name", + "page-size": "size", + "per-page": "size", + "report-template-name": "template-name", + "since": "start", + "start-date": "start", + "start-time": "start", + "take": "size", + "time-max": "end", + "time-min": "start", + "top": "size", + "update-end": "modified-end", + "update-start": "modified-start", + "updated-end": "modified-end", + "updated-start": "modified-start", + }, + Blocked: []string{"count", "date", "page", "report-template-id", "template-id", "template-type", "time"}, + Ambiguous: []string{"template"}, + }, + { + CLIPath: "report +report-latest", + Aliases: map[string]string{ + "begin": "start", + "end-date": "end", + "end-time": "end", + "from": "start", + "from-date": "start", + "max-time": "end", + "min-time": "start", + "name": "keyword", + "report-template-name": "keyword", + "since": "start", + "start-date": "start", + "start-time": "start", + "template-name": "keyword", + "time-max": "end", + "time-min": "start", + }, + Blocked: []string{"date", "modified-end", "modified-start", "report-template-id", "template-id", "time"}, + Ambiguous: []string{"template"}, + }, + { + CLIPath: "report +template-search", + Aliases: map[string]string{ + "keyword": "query", + "keywords": "query", + "q": "query", + "search-word": "query", + }, + Blocked: []string{"report-template-id", "subject", "template-id", "text", "title"}, + Ambiguous: []string{"name", "template"}, + }, { CLIPath: "report list", Aliases: map[string]string{ @@ -6693,6 +7569,33 @@ var generatedParamAliases = []ParamAliasEntry{ CLIPath: "report outbox list", Blocked: []string{"template-type"}, }, + { + CLIPath: "sheet +list-sheets", + Aliases: map[string]string{ + "dentry-uuid": "node", + "doc": "node", + "doc-id": "node", + "document-id": "node", + "file-id": "node", + "node-id": "node", + "url": "node", + }, + Blocked: []string{"block-id", "comment-id", "comment-key", "dentry-id", "folder", "folder-id", "id", "job-id", "name", "parent-id", "revision", "role", "space-id", "task-id", "template-id", "version", "workspace", "workspace-id"}, + }, + { + CLIPath: "sheet +read", + Aliases: map[string]string{ + "dentry-uuid": "node", + "doc": "node", + "doc-id": "node", + "document-id": "node", + "file-id": "node", + "node-id": "node", + "url": "node", + "worksheet-id": "sheet-id", + }, + Blocked: []string{"a1-ranges", "block-id", "cell-ranges", "comment-id", "comment-key", "dentry-id", "destination-range", "folder", "folder-id", "id", "job-id", "name", "parent-id", "ranges", "revision", "role", "source-range", "source-sheet-id", "space-id", "start-cell", "target-range", "target-sheet-id", "task-id", "template-id", "title", "version", "workspace", "workspace-id"}, + }, { CLIPath: "todo +assign", Aliases: map[string]string{ diff --git a/internal/cli/param_concepts.json b/internal/cli/param_concepts.json index f6f04ca1..1bed0a84 100644 --- a/internal/cli/param_concepts.json +++ b/internal/cli/param_concepts.json @@ -3,58 +3,58 @@ "version": 1, "morphological_rules": { - "kebab_camel_equivalence": {"desc": "--page-size == --pageSize", "enabled": true}, - "separator_normalization": {"desc": "-, _, . are equivalent separators", "enabled": true}, - "trailing_id_tolerance": {"desc": "--base tolerates --base-id when only one is a real flag on the command", "enabled": true, "guard": "the two must not both be real flags with different semantics"}, - "pluralization": {"desc": "--id<->--ids, --user<->--users", "enabled": false, "reason": "singular/list semantics can differ; handled by concept+intersection or command override instead"} + "kebab_camel_equivalence": {"desc":"--page-size == --pageSize","enabled":true}, + "separator_normalization": {"desc":"-, _, . are equivalent separators","enabled":true}, + "trailing_id_tolerance": {"desc":"--base tolerates --base-id when only one is a real flag on the command","enabled":true,"guard":"the two must not both be real flags with different semantics"}, + "pluralization": {"desc":"--id<->--ids, --user<->--users","enabled":false,"reason":"singular/list semantics can differ; handled by concept+intersection or command override instead"} }, "concepts": { - "search_query": {"denotes":"search keyword string","canonical_hint":"query","members":["query","keyword","keywords","q","search-word"],"excludes":["name","subject","text","title"],"commands":["aitable +base-search","aitable +find-record","aitable +record-bulk-patch","aitable +record-query","aitable +template-search","aitable base search","aitable field search-options","aitable record list","aitable record query","aitable search","aitable template search","contact +dept-members","contact +resolve-dept","contact +search-user","doc +create-from-template","doc +find-doc","doc +search","doc +template-search","doc template search","drive +find-file","drive +search","drive +search-docs","drive search","mail +find-mail-user","mail user search","oa +search-forms","oa approval search-forms","calendar +book-search","calendar +search-event","minutes +latest","minutes +list-all","minutes +list-mine","minutes +list-shared","minutes +search","minutes +transcript","todo +search","wiki +node-search","wiki +resolve-space","wiki +space-search","wiki node search","wiki space search"],"risk":"green"}, - "pagination_size": {"denotes":"returned item count upper bound","canonical_hint":"limit","members":["limit","size","page-size","max-results","max-result","take","top","per-page"],"excludes":["count","page","cursor"],"commands":["aitable +base-list","aitable +record-history-list","aitable +record-query","aitable +record-query-empty","aitable +template-search","aitable +workflow-list","aitable base list","aitable field search-options","aitable list","aitable record history-list","aitable record list","aitable record query","aitable record query-empty","aitable template search","aitable workflow history","aitable workflow list","calendar event list","chat message list","devdoc article search","doc +comment-list","doc +find-doc","doc +list","doc +search","doc +template-list","doc +template-search","doc +version-list","doc comment list","doc template list","doc template search","doc version list","drive +list","drive +recent","drive +recycle-list","drive +search","drive +search-docs","drive +star-list","drive +version-history","drive list","drive list-spaces","drive permission list","drive recent","drive recycle list","drive search","drive star list","mail thread list","calendar +agenda","calendar +room-groups","calendar +room-find","calendar +search-event","minutes +list-all","minutes +list-mine","minutes +list-shared","minutes +search","minutes list all","minutes list mine","minutes list shared","minutes tag query","todo +list-comment","todo comment list","wiki +member-list","wiki +node-search","wiki +space-search","wiki feed list","wiki member list","wiki node list","wiki node search","wiki space list","wiki space search"],"risk":"green"}, - "page_number": {"denotes":"one-based page number","canonical_hint":"page","members":["page","page-no","current-page","page-num"],"excludes":["cursor","page-index","page-size","page-token"],"commands":["devdoc article search","todo +get-my-tasks","todo +list-comment","todo comment list","todo task list"],"risk":"green"}, - "page_cursor": {"denotes":"pagination cursor/token","canonical_hint":"cursor","members":["cursor","next-cursor","page-token","next-token","next-page-token"],"excludes":["page","offset"],"commands":["aitable +base-list","aitable +base-search","aitable +record-query","aitable +record-query-empty","aitable +template-search","aitable base list","aitable base search","aitable list","aitable record list","aitable record query","aitable record query-empty","aitable search","aitable template search","calendar event list","doc +comment-list","doc +list","doc +search","doc +template-list","doc +template-search","doc +version-list","doc comment list","doc template list","doc template search","doc version list","drive +list","drive +recent","drive +recycle-list","drive +search","drive +star-list","drive +version-history","drive list","drive list-spaces","drive recent","drive recycle list","drive search","drive star list","calendar +agenda","calendar +search-event","minutes +detail","minutes +list-all","minutes +list-mine","minutes +list-shared","minutes +search","minutes +transcript","wiki +feed-list","wiki +node-search","wiki feed list","wiki node list","wiki node search","wiki space list"],"risk":"green"}, - "content_text": {"denotes":"text body content","canonical_hint":"text","members":["text","content","body"],"excludes":["title","name"],"commands":["doc +checkpoint-update","doc +comment-create","doc +comment-reply","doc +comment-update","doc +create","doc +doc-append","doc block insert","doc block update","doc comment create","doc comment create-inline","doc comment reply","doc comment update","doc create","minutes +summary","minutes update summary","todo +comment","todo comment add"],"risk":"green"}, - "time_start": {"denotes":"start time point with unchanged value format and unit","canonical_hint":"start","members":["start","start-time","start-date","from","from-date","begin","since","time-min","min-time"],"excludes":["date","time","end"],"commands":["calendar event list","chat message list-all","report list","calendar +agenda","calendar +free","calendar +freebusy","calendar +my-free","calendar +suggest-time","calendar +room-find","calendar +search-event","calendar +suggestion","minutes +search","minutes audio-memo list","minutes list all","minutes list mine","minutes list shared"],"risk":"yellow"}, - "time_end": {"denotes":"end time point with unchanged value format and unit","canonical_hint":"end","members":["end","end-time","end-date","time-max","max-time"],"excludes":["date","time","start"],"commands":["calendar event list","calendar +agenda","calendar +free","calendar +freebusy","calendar +my-free","calendar +suggest-time","calendar +room-find","calendar +search-event","calendar +suggestion","minutes +search","minutes audio-memo list","minutes list all","minutes list mine","minutes list shared"],"risk":"yellow"}, + "search_query": {"denotes":"search keyword string","canonical_hint":"query","members":["query","keyword","keywords","q","search-word"],"excludes":["name","subject","text","title"],"commands":["aitable +base-search","aitable +find-record","aitable +record-bulk-patch","aitable +record-query","aitable +template-search","aitable base search","aitable field search-options","aitable record list","aitable record query","aitable search","aitable template search","contact +dept-members","contact +resolve-dept","contact +search-user","doc +create-from-template","doc +find-doc","doc +search","doc +template-search","doc template search","drive +find-file","drive +search","drive +search-docs","drive search","mail +find-mail-user","mail user search","oa +search-forms","oa approval search-forms","calendar +book-search","calendar +search-event","minutes +latest","minutes +list-all","minutes +list-mine","minutes +list-shared","minutes +search","minutes +transcript","todo +search","wiki +node-search","wiki +resolve-space","wiki +space-search","wiki node search","wiki space search","attendance +search-adjustment-rule","attendance +search-class","attendance +search-group","attendance +search-overtime-rule","mail +user-search","oa +list-cc","oa +list-executed","oa +list-pending","oa +list-submitted","oa +my-initiated","report +template-search"],"risk":"green"}, + "pagination_size": {"denotes":"returned item count upper bound","canonical_hint":"limit","members":["limit","size","page-size","max-results","max-result","take","top","per-page"],"excludes":["count","page","cursor"],"commands":["aitable +base-list","aitable +record-history-list","aitable +record-query","aitable +record-query-empty","aitable +template-search","aitable +workflow-list","aitable base list","aitable field search-options","aitable list","aitable record history-list","aitable record list","aitable record query","aitable record query-empty","aitable template search","aitable workflow history","aitable workflow list","calendar event list","chat message list","devdoc article search","doc +comment-list","doc +find-doc","doc +list","doc +search","doc +template-list","doc +template-search","doc +version-list","doc comment list","doc template list","doc template search","doc version list","drive +list","drive +recent","drive +recycle-list","drive +search","drive +search-docs","drive +star-list","drive +version-history","drive list","drive list-spaces","drive permission list","drive recent","drive recycle list","drive search","drive star list","mail thread list","calendar +agenda","calendar +room-groups","calendar +room-find","calendar +search-event","minutes +list-all","minutes +list-mine","minutes +list-shared","minutes +search","minutes list all","minutes list mine","minutes list shared","minutes tag query","todo +list-comment","todo comment list","wiki +member-list","wiki +node-search","wiki +space-search","wiki feed list","wiki member list","wiki node list","wiki node search","wiki space list","wiki space search","attendance +check-result","attendance +search-adjustment-rule","attendance +search-class","attendance +search-group","attendance +search-overtime-rule","mail +contact-list","mail +find-mail-user","mail +recent-mail","mail +search-mail","mail +template-list","mail +thread-list","mail +unread-mail","mail +user-search","mail +triage","oa +list-cc","oa +list-forms","oa +list-pending","oa +list-submitted","oa +my-initiated","report +inbox-list","report +outbox-list"],"risk":"green"}, + "page_number": {"denotes":"one-based page number","canonical_hint":"page","members":["page","page-no","current-page","page-num"],"excludes":["cursor","page-index","page-size","page-token"],"commands":["devdoc article search","todo +get-my-tasks","todo +list-comment","todo comment list","todo task list","attendance +search-adjustment-rule","attendance +search-class","attendance +search-group","attendance +search-overtime-rule","oa +list-cc","oa +list-executed","oa +list-pending","oa +list-submitted","oa +my-initiated"],"risk":"green"}, + "page_cursor": {"denotes":"pagination cursor/token","canonical_hint":"cursor","members":["cursor","next-cursor","page-token","next-token","next-page-token"],"excludes":["page","offset"],"commands":["aitable +base-list","aitable +base-search","aitable +record-query","aitable +record-query-empty","aitable +template-search","aitable base list","aitable base search","aitable list","aitable record list","aitable record query","aitable record query-empty","aitable search","aitable template search","calendar event list","doc +comment-list","doc +list","doc +search","doc +template-list","doc +template-search","doc +version-list","doc comment list","doc template list","doc template search","doc version list","drive +list","drive +recent","drive +recycle-list","drive +search","drive +star-list","drive +version-history","drive list","drive list-spaces","drive recent","drive recycle list","drive search","drive star list","calendar +agenda","calendar +search-event","minutes +detail","minutes +list-all","minutes +list-mine","minutes +list-shared","minutes +search","minutes +transcript","wiki +feed-list","wiki +node-search","wiki feed list","wiki node list","wiki node search","wiki space list","mail +contact-list","mail +template-list","mail +thread-list","mail +user-search","mail +find-mail-user","mail +recent-mail","mail +search-mail","mail +triage","mail +unread-mail","oa +list-forms"],"risk":"green"}, + "content_text": {"denotes":"text body content","canonical_hint":"text","members":["text","content","body"],"excludes":["title","name"],"commands":["doc +checkpoint-update","doc +comment-create","doc +comment-reply","doc +comment-update","doc +create","doc +doc-append","doc block insert","doc block update","doc comment create","doc comment create-inline","doc comment reply","doc comment update","doc create","minutes +summary","minutes update summary","todo +comment","todo comment add","ding +send-personal","markdown create","markdown overwrite"],"risk":"green"}, + "time_start": {"denotes":"start time point with unchanged value format and unit","canonical_hint":"start","members":["start","start-time","start-date","from","from-date","begin","since","time-min","min-time"],"excludes":["date","time","end"],"commands":["calendar event list","chat message list-all","report list","calendar +agenda","calendar +free","calendar +freebusy","calendar +my-free","calendar +suggest-time","calendar +room-find","calendar +search-event","calendar +suggestion","minutes +search","minutes audio-memo list","minutes list all","minutes list mine","minutes list shared","attendance +check-record","attendance +check-result","attendance +get-checkin-record","attendance +get-leave-records","attendance +get-schedule","attendance +list-approve","attendance +query-report-data","mail +thread-list","oa +list-pending","report +inbox-list","report +outbox-list","report +report-latest"],"risk":"yellow"}, + "time_end": {"denotes":"end time point with unchanged value format and unit","canonical_hint":"end","members":["end","end-time","end-date","time-max","max-time"],"excludes":["date","time","start"],"commands":["calendar event list","calendar +agenda","calendar +free","calendar +freebusy","calendar +my-free","calendar +suggest-time","calendar +room-find","calendar +search-event","calendar +suggestion","minutes +search","minutes audio-memo list","minutes list all","minutes list mine","minutes list shared","attendance +check-record","attendance +check-result","attendance +get-checkin-record","attendance +get-leave-records","attendance +get-schedule","attendance +list-approve","attendance +query-report-data","mail +thread-list","oa +list-pending","report +inbox-list","report +outbox-list","report +report-latest"],"risk":"yellow"}, "base_id": {"denotes":"multi-dimensional table Base id","canonical_hint":"base-id","members":["base","base-id","base-token"],"excludes":[],"commands":["aitable +advperm-disable","aitable +advperm-enable","aitable +attachment-put","aitable +attachment-remove","aitable +attachment-upload","aitable +base-copy","aitable +base-delete","aitable +base-get","aitable +base-get-primary-doc-id","aitable +base-schema-snapshot","aitable +base-update","aitable +chart-delete","aitable +chart-get","aitable +chart-share-get","aitable +chart-share-update","aitable +chart-update","aitable +dashboard-arrange","aitable +dashboard-delete","aitable +dashboard-get","aitable +dashboard-share-get","aitable +dashboard-share-update","aitable +dashboard-update","aitable +export-data","aitable +field-delete","aitable +field-get","aitable +field-update","aitable +find-record","aitable +form-delete","aitable +form-field-hide","aitable +form-field-list","aitable +form-field-update","aitable +form-list","aitable +form-share-get","aitable +form-share-update","aitable +form-update","aitable +import-upload","aitable +list-tables","aitable +record-bulk-patch","aitable +record-delete","aitable +record-history-list","aitable +record-primary-doc-create","aitable +record-primary-doc-get","aitable +record-query","aitable +record-query-empty","aitable +record-share-links","aitable +record-share-url","aitable +record-update","aitable +record-upsert","aitable +record-upsert-by-key","aitable +resolve-table","aitable +role-create","aitable +role-delete","aitable +role-get","aitable +role-list","aitable +role-update","aitable +section-create","aitable +section-delete","aitable +section-list-empty","aitable +section-list-nodes","aitable +section-move-node","aitable +section-rename","aitable +section-reorder","aitable +table-delete","aitable +table-get","aitable +table-update","aitable +view-delete","aitable +view-duplicate","aitable +view-get","aitable +view-get-frozen-cols","aitable +view-get-lock","aitable +view-get-row-height","aitable +view-lock","aitable +view-preset-apply","aitable +view-set-fill-color-rule","aitable +view-set-frozen-cols","aitable +view-set-row-height","aitable +view-update","aitable +workflow-deploy","aitable +workflow-disable","aitable +workflow-enable","aitable +workflow-get","aitable +workflow-list","aitable advperm disable","aitable advperm enable","aitable advperm role-create","aitable advperm role-delete","aitable advperm role-get","aitable advperm role-list","aitable advperm role-update","aitable attachment upload","aitable base copy","aitable base delete","aitable base get","aitable base get-primary-doc-id","aitable base update","aitable chart create","aitable chart delete","aitable chart get","aitable chart share get","aitable chart share update","aitable chart update","aitable dashboard arrange","aitable dashboard create","aitable dashboard delete","aitable dashboard get","aitable dashboard share get","aitable dashboard share update","aitable dashboard update","aitable export data","aitable field create","aitable field delete","aitable field get","aitable field list","aitable field search-options","aitable field update","aitable form create","aitable form delete","aitable form field hide","aitable form field list","aitable form field update","aitable form get","aitable form list","aitable form questions create","aitable form questions delete","aitable form share get","aitable form share update","aitable form update","aitable import upload","aitable info","aitable record batch-update","aitable record create","aitable record delete","aitable record get","aitable record history-list","aitable record primary-doc-create","aitable record primary-doc-get","aitable record query","aitable record query-empty","aitable record share-url","aitable record update","aitable record upsert","aitable section create","aitable section delete","aitable section list-empty","aitable section list-nodes","aitable section move-node","aitable section rename","aitable section reorder","aitable table create","aitable table delete","aitable table get","aitable table list","aitable table update","aitable view create","aitable view delete","aitable view duplicate","aitable view get aggregate","aitable view get card","aitable view get field-widths","aitable view get fill-color-rule","aitable view get filter","aitable view get frozen-cols","aitable view get group","aitable view get lock","aitable view get row-height","aitable view get sort","aitable view get timebar","aitable view get visible-fields","aitable view list","aitable view lock","aitable view update aggregate","aitable view update card","aitable view update field-widths","aitable view update fill-color-rule","aitable view update filter","aitable view update frozen-cols","aitable view update group","aitable view update name","aitable view update row-height","aitable view update sort","aitable view update timebar","aitable view update visible-fields","aitable workflow create","aitable workflow disable","aitable workflow enable","aitable workflow get","aitable workflow history","aitable workflow list","aitable workflow run","aitable workflow update"],"risk":"green"}, "table_id": {"denotes":"single AI Table data-table Table ID","canonical_hint":"table-id","members":["table","table-id"],"excludes":["table-ids","source-table-id","target-table-id","name"],"commands":["aitable +attachment-put","aitable +attachment-remove","aitable +base-get-primary-doc-id","aitable +export-data","aitable +field-delete","aitable +field-get","aitable +field-update","aitable +find-record","aitable +form-delete","aitable +form-field-hide","aitable +form-field-list","aitable +form-field-update","aitable +form-list","aitable +form-share-get","aitable +form-share-update","aitable +form-update","aitable +import-data","aitable +record-bulk-patch","aitable +record-delete","aitable +record-history-list","aitable +record-primary-doc-create","aitable +record-primary-doc-get","aitable +record-query","aitable +record-query-empty","aitable +record-share-links","aitable +record-share-url","aitable +record-update","aitable +record-upsert","aitable +record-upsert-by-key","aitable +table-delete","aitable +table-update","aitable +view-delete","aitable +view-duplicate","aitable +view-get","aitable +view-get-frozen-cols","aitable +view-get-lock","aitable +view-get-row-height","aitable +view-lock","aitable +view-preset-apply","aitable +view-set-fill-color-rule","aitable +view-set-frozen-cols","aitable +view-set-row-height","aitable +view-update","aitable base get-primary-doc-id","aitable export data","aitable field create","aitable field delete","aitable field get","aitable field list","aitable field search-options","aitable field update","aitable form create","aitable form delete","aitable form field hide","aitable form field list","aitable form field update","aitable form get","aitable form list","aitable form questions create","aitable form questions delete","aitable form share get","aitable form share update","aitable form update","aitable import data","aitable record batch-update","aitable record create","aitable record delete","aitable record get","aitable record history-list","aitable record primary-doc-create","aitable record primary-doc-get","aitable record query","aitable record query-empty","aitable record share-url","aitable record update","aitable record upsert","aitable table delete","aitable table update","aitable view create","aitable view delete","aitable view duplicate","aitable view get aggregate","aitable view get card","aitable view get field-widths","aitable view get fill-color-rule","aitable view get filter","aitable view get frozen-cols","aitable view get group","aitable view get lock","aitable view get row-height","aitable view get sort","aitable view get timebar","aitable view get visible-fields","aitable view list","aitable view lock","aitable view update aggregate","aitable view update card","aitable view update field-widths","aitable view update fill-color-rule","aitable view update filter","aitable view update frozen-cols","aitable view update group","aitable view update name","aitable view update row-height","aitable view update sort","aitable view update timebar","aitable view update visible-fields","aitable workflow run"],"risk":"green"}, "plain_description": {"denotes":"plain-text description or remark with unchanged value","canonical_hint":"description","members":["description","desc"],"excludes":["field-description","config"],"commands":["aitable +base-update","aitable +form-update","aitable +table-update","aitable base update","aitable form create","aitable form update","aitable table update","calendar +create","calendar +update","wiki +space-create","wiki space create"],"risk":"green"}, "workflow_id": {"denotes":"single AI Table workflow identifier; service flowId and CLI workflow-id carry the same value","canonical_hint":"workflow-id","members":["workflow-id","flow-id"],"excludes":["id","task-id"],"commands":["aitable +workflow-deploy","aitable +workflow-disable","aitable +workflow-enable","aitable +workflow-get","aitable workflow disable","aitable workflow enable","aitable workflow get","aitable workflow history","aitable workflow run","aitable workflow update"],"risk":"green"}, - "dept_id": {"denotes": "single department id", "canonical_hint": "dept", "members": ["dept", "dept-id", "department", "department-id", "parent", "parent-id"], "excludes": ["depts", "dept-ids", "department-ids", "name", "query"], "commands": ["contact +list-sub-depts", "contact dept list-children"], "risk": "yellow"}, - "dept_ids": {"denotes": "department id list", "canonical_hint": "dept-ids", "members": ["depts", "dept-ids", "department-ids"], "excludes": ["dept", "dept-id", "department-id", "name", "query"], "commands": ["contact +list-dept-members"], "risk": "yellow"}, - "group_id": {"denotes": "single DingTalk numeric groupId", "canonical_hint": "group-id", "members": ["group-id"], "excludes": ["group", "conversation-id", "chat", "chat-id", "open-conversation-id", "conversation-ids", "open-conversation-ids", "group-name", "name", "id"], "commands": ["chat +chat-get-by-id", "chat group get-by-group-id"], "risk": "yellow"}, - "open_conversation_id": {"denotes": "single DingTalk openConversationId with unchanged value", "canonical_hint": "conversation-id", "members": ["group", "conversation-id", "chat", "chat-id", "open-conversation-id"], "excludes": ["group-id", "group-ids", "conversation-ids", "open-conversation-ids", "group-name", "name", "id", "source", "target", "src-conversation-id", "dest-conversation-id"], "commands": ["chat +category-add-conversation", "chat +category-remove-conversation", "chat +chat-add-bot", "chat +chat-audit-join", "chat +chat-bots", "chat +chat-dismiss", "chat +chat-invite-url", "chat +chat-members-get", "chat +chat-mute", "chat +chat-mute-member", "chat +chat-quit", "chat +chat-remove-bot", "chat +chat-role-add", "chat +chat-role-list", "chat +chat-role-query-user", "chat +chat-role-remove", "chat +chat-role-remove-user", "chat +chat-role-set-user", "chat +chat-role-update", "chat +chat-set-admin", "chat +chat-set-history", "chat +chat-transfer-owner", "chat +chat-update-alias", "chat +chat-update-icon", "chat +chat-update-nick", "chat +chat-update-settings", "chat +conversation-clear-messages", "chat +conversation-clear-red-point", "chat +conversation-hide", "chat +conversation-info", "chat +conversation-mark-read", "chat +conversation-mark-unread", "chat +conversation-mute", "chat +flag-cancel", "chat +flag-create", "chat +messages-add-emoji", "chat +messages-add-text-emotion", "chat +messages-list-pin", "chat +messages-read-status", "chat +messages-recall-by-bot", "chat +messages-remove-emoji", "chat +messages-remove-text-emotion", "chat +messages-reply", "chat +messages-resource-download", "chat +messages-resource-url", "chat +messages-send-by-bot", "chat +messages-set-pin", "chat +messages-set-top", "chat +messages-unset-pin", "chat +messages-unset-top", "chat category add-conv", "chat category remove-conv", "chat chmod", "chat clear-messages", "chat clear-red-point", "chat conversation-info", "chat group audit-join-validation", "chat group bots", "chat group dismiss", "chat group invite-url", "chat group members", "chat group members add", "chat group members add-bot", "chat group members list-by-ids", "chat group members remove", "chat group members remove-bot", "chat group notice create", "chat group notice edit", "chat group notice get", "chat group notice list", "chat group quit", "chat group rename", "chat group set-admin", "chat group set-history", "chat group transfer-owner", "chat group update-alias", "chat group update-icon", "chat group update-nick", "chat group update-settings", "chat group-mute", "chat group-mute-member", "chat group-role add", "chat group-role list", "chat group-role query-user", "chat group-role remove", "chat group-role remove-user", "chat group-role set-user", "chat group-role update", "chat hide", "chat mark-read", "chat mark-unread", "chat message add-favorite", "chat message download-media", "chat message list", "chat message list-mentions", "chat message list-pin-msg", "chat message list-topic-replies", "chat message read-status", "chat message recall", "chat message recall-by-bot", "chat message remove-favorite", "chat message reply", "chat message search", "chat message send", "chat message send-by-bot", "chat message send-card", "chat message set-pin-msg", "chat message set-top-msg", "chat message unset-pin-msg", "chat message unset-top-msg", "chat mute-at-all", "chat mute-red-envelope", "chat set-top"], "risk": "yellow"}, - "open_conversation_ids": {"denotes": "DingTalk openConversationId list with unchanged element values", "canonical_hint": "conversation-ids", "members": ["conversation-ids", "open-conversation-ids", "groups"], "excludes": ["group-id", "group-ids", "conversation-id", "open-conversation-id", "chat-id"], "commands": ["chat message search-advanced"], "risk": "yellow"}, - "group_name": {"denotes": "group-name search keyword, not a group identifier", "canonical_hint": "group-name", "members": ["group-name"], "excludes": ["group-id", "conversation-id", "open-conversation-id", "chat-id", "id"], "commands": ["chat +group-members", "chat +send-to-group"], "risk": "yellow"}, - "open_message_id": {"denotes": "single DingTalk openMessageId with unchanged value", "canonical_hint": "open-message-id", "members": ["msg-id", "message-id", "open-message-id"], "excludes": ["msg-ids", "message-ids", "open-message-ids", "ref-msg-id", "src-msg-id", "open-task-id", "topic-id", "resource-id"], "commands": ["chat +conversation-mark-read", "chat +flag-cancel", "chat +flag-create", "chat +messages-add-emoji", "chat +messages-add-text-emotion", "chat +messages-forward", "chat +messages-read-status", "chat +messages-remove-emoji", "chat +messages-remove-text-emotion", "chat +messages-resource-download", "chat +messages-set-pin", "chat +messages-set-top", "chat +messages-unset-pin", "chat +messages-unset-top", "chat mark-read", "chat message add-emoji", "chat message add-favorite", "chat message add-text-emotion", "chat message download-media", "chat message forward", "chat message read-status", "chat message recall", "chat message remove-emoji", "chat message remove-favorite", "chat message remove-text-emotion", "chat message set-pin-msg", "chat message set-top-msg", "chat message unset-pin-msg", "chat message unset-top-msg"], "risk": "yellow"}, - "open_message_ids": {"denotes": "DingTalk openMessageId list with unchanged element values", "canonical_hint": "msg-ids", "members": ["msg-ids", "message-ids", "open-message-ids"], "excludes": ["msg-id", "message-id", "open-message-id", "ref-msg-id", "src-msg-id"], "commands": ["chat +flag-cancel", "chat +flag-create", "chat +messages-combine-forward", "chat +messages-mget", "chat message combine-forward", "chat message list-by-ids", "chat message list-emotion-replies"], "risk": "yellow"}, - "referenced_open_message_id": {"denotes": "referenced DingTalk openMessageId in a reply", "canonical_hint": "ref-msg-id", "members": ["ref-msg-id", "ref-message-id"], "excludes": ["msg-id", "message-id", "open-message-id", "msg-ids", "src-msg-id"], "commands": ["chat +messages-reply", "chat message reply"], "risk": "yellow"}, - "user_id": {"denotes": "single user id", "canonical_hint": "user-id", "members": ["user", "user-id", "userid", "uid", "staff-id"], "excludes": ["at-user-ids", "to-user", "users", "user-ids", "name"], "commands": ["chat +chat-role-query-user", "chat +chat-role-set-user", "chat +messages-list-direct", "chat chmod", "chat conversation-info", "chat group transfer-owner", "chat group-role query-user", "chat group-role remove-user", "chat group-role set-user", "chat message list", "chat message send", "contact user profile get"], "risk": "yellow"}, - "user_ids": {"denotes":"user id list","canonical_hint":"user-ids","members":["users","user-ids"],"excludes":["user","user-id","userid","uid","staff-id","at-user-ids"],"commands":["attendance +check-result","attendance check result","chat +messages-batch-send-by-bot","chat group members remove","chat group set-admin","chat group-mute-member","chat message read-status","chat message search-advanced","chat message send-by-bot","calendar +freebusy","calendar +suggestion","minutes +share","minutes +unshare","minutes permission add","minutes permission remove","wiki +member-add","wiki +member-remove","wiki +member-update"],"risk":"yellow"}, - "open_dingtalk_ids": {"denotes": "DingTalk openDingTalkId list with unchanged element values", "canonical_hint": "open-dingtalk-ids", "members": ["open-dingtalk-ids"], "excludes": ["user", "user-id", "user-ids", "staff-id", "users"], "commands": ["chat +chat-members-get", "chat category create-smart", "chat group members list-by-ids", "chat message send-by-bot"], "risk": "yellow"}, - "ding_id": {"denotes": "DING id", "canonical_hint": "ding-id", "members": ["ding-id", "open-ding-id"], "excludes": ["id"], "commands": ["ding message receiver-status"], "risk": "yellow"}, - "folder_id": {"denotes": "drive folder id", "canonical_hint": "folder", "members": ["folder", "folder-id"], "excludes": ["space-id"], "commands": ["drive +copy", "drive +create-folder", "drive +create-shortcut", "drive +list", "drive +move", "drive +upload", "drive commit", "drive copy", "drive list", "drive mkdir", "drive move", "drive shortcut", "drive upload", "drive upload-info", "mail folder update"], "risk": "green"}, - "drive_storage_space_id": {"denotes": "single numeric DingDrive storage space ID with unchanged value", "canonical_hint": "space-id", "members": ["space-id", "drive-space-id", "storage-space-id", "dingdrive-space-id"], "excludes": ["space", "workspace", "workspace-id", "knowledge-base-id", "wiki-workspace-id"], "commands": ["drive +create-folder", "drive +download", "drive +info", "drive +inspect", "drive +list", "drive +recycle-list", "drive +upload", "drive commit", "drive download", "drive info", "drive list", "drive mkdir", "drive recycle list", "drive upload", "drive upload-info"], "risk": "yellow"}, - "app_id": {"denotes": "application id", "canonical_hint": "unified-app-id", "members": ["app-id", "unified-app-id", "application-id"], "excludes": ["app-key", "app-secret", "agent-id"], "commands": ["dev app get"], "risk": "yellow"}, - "robot_code": {"denotes": "robot code", "canonical_hint": "robot-code", "members": ["robot-code", "robot"], "excludes": ["robot-id", "bot-id", "open-bot-id", "bot-code"], "commands": ["chat +chat-add-bot", "chat +messages-batch-recall-by-bot", "chat +messages-batch-send-by-bot", "chat +messages-recall-by-bot", "chat +messages-send-by-bot", "chat group members add-bot", "chat message recall-by-bot", "chat message send-by-bot", "ding message send"], "risk": "yellow"}, - "open_bot_id": {"denotes": "single DingTalk openBotId with unchanged value", "canonical_hint": "bot-id", "members": ["bot-id", "open-bot-id"], "excludes": ["robot-code", "robot", "robot-id", "bot-code"], "commands": ["chat +chat-remove-bot", "chat group members remove-bot"], "risk": "yellow"}, - "doc_node_id": {"denotes": "single DingTalk document nodeId or accepted document URL/token with unchanged value", "canonical_hint": "node", "members": ["node", "node-id", "doc", "doc-id", "file-id", "document-id", "url", "dentry-uuid"], "excludes": ["id", "folder", "folder-id", "parent-id", "workspace", "workspace-id", "block-id", "comment-id", "comment-key", "job-id", "task-id", "template-id", "version", "revision", "dentry-id", "space-id", "name", "role"], "commands": ["doc +access-change", "doc +access-grant", "doc +access-revoke", "doc +background-delete", "doc +background-update", "doc +checkpoint-update", "doc +comment-create", "doc +comment-delete", "doc +comment-list", "doc +comment-reply", "doc +comment-update", "doc +copy", "doc +doc-append", "doc +export", "doc +export-submit", "doc +fetch", "doc +history-list", "doc +history-revert", "doc +history-save", "doc +inspect", "doc +move", "doc +review", "doc +version-list", "doc +version-revert", "doc +version-save", "doc block delete", "doc block insert", "doc block list", "doc block update", "doc comment create", "doc comment create-inline", "doc comment delete", "doc comment list", "doc comment reply", "doc comment update", "doc export", "doc info", "doc media download", "doc media insert", "doc media upload", "doc read", "doc style background clear", "doc style background set", "doc style cover clear", "doc style cover set", "doc style get", "doc update", "doc version list", "doc version revert", "doc version save", "doc whiteboard insert"], "risk": "yellow"}, - "doc_comment_key": {"denotes": "single DingTalk document commentKey with unchanged value", "canonical_hint": "comment-key", "members": ["comment-key", "comment-id"], "excludes": ["id", "node", "node-id", "doc-id", "block-id"], "commands": ["doc +comment-delete", "doc +comment-reply", "doc +comment-update", "doc comment delete", "doc comment reply", "doc comment update"], "risk": "yellow"}, - "doc_version_number": {"denotes": "single document or Drive ordinary-file historical version number with unchanged positive integer value", "canonical_hint": "version", "members": ["version", "version-number", "version-no"], "excludes": ["revision", "id", "node", "node-id", "doc-id"], "commands": ["doc +history-revert", "doc +version-revert", "doc version revert", "drive +version-download", "drive +version-get", "drive +version-revert", "drive download", "drive download-version", "drive revert"], "risk": "yellow"}, - "doc_content_format": {"denotes": "DingTalk document body format with unchanged markdown/jsonml value", "canonical_hint": "content-format", "members": ["content-format", "doc-format"], "excludes": ["format", "export-format", "mime-type"], "commands": ["doc +create", "doc +update", "doc create", "doc update"], "risk": "green"}, - "doc_edit_revision": {"denotes": "single optimistic-concurrency revision for a document edit", "canonical_hint": "revision", "members": ["revision", "expected-revision"], "excludes": ["version", "version-number", "version-no"], "commands": ["doc +update", "doc update"], "risk": "yellow"}, - "drive_recycle_item_id": {"denotes": "single Drive recycle-bin item ID returned by recycle list", "canonical_hint": "id", "members": ["id", "recycle-item-id", "trash-item-id", "deleted-item-id"], "excludes": ["node", "node-id", "file-id", "folder-id", "space-id", "workspace-id"], "commands": ["drive +recycle-restore", "drive recycle restore"], "risk": "yellow"}, - "drive_modified_time_start": {"denotes": "Drive search modified-time lower bound in unchanged millisecond timestamp unit", "canonical_hint": "modified-from", "members": ["modified-from", "modified-after", "modify-time-from", "modified-time-start"], "excludes": ["modified-to", "created-from", "created-to", "start", "from"], "commands": ["drive +search", "drive search"], "risk": "yellow"}, - "drive_modified_time_end": {"denotes": "Drive search modified-time upper bound in unchanged millisecond timestamp unit", "canonical_hint": "modified-to", "members": ["modified-to", "modified-before", "modify-time-to", "modified-time-end"], "excludes": ["modified-from", "created-from", "created-to", "end", "to"], "commands": ["drive +search", "drive search"], "risk": "yellow"}, - "drive_file_size_bytes": {"denotes": "file size in bytes passed unchanged", "canonical_hint": "file-size", "members": ["file-size", "file-size-bytes", "size-bytes", "content-length"], "excludes": ["part-size", "page-size", "limit", "size"], "commands": ["drive commit", "drive upload-info"], "risk": "yellow"}, - "drive_sort_direction": {"denotes": "Drive result sort direction with unchanged asc/desc enum", "canonical_hint": "order", "members": ["order", "sort", "sort-direction", "order-direction"], "excludes": ["order-by", "sort-by", "order-field"], "commands": ["drive +list", "drive list", "drive star list"], "risk": "green"}, - "workspace_id": {"denotes":"single knowledge-base or document-space workspace ID/URL passed unchanged; never a numeric DingDrive storage space ID","canonical_hint":"workspace","members":["workspace","workspace-id","knowledge-base-id","wiki-workspace-id"],"excludes":["space","space-id","drive-space-id","storage-space-id","dingdrive-space-id","folder","folder-id","node","node-id","dentry-id"],"commands":["doc +access-change","doc +access-grant","doc +access-revoke","doc +copy","doc +create","doc +create-from-template","doc +grant-and-share","doc +import","doc +list","doc +move","doc create","doc file create","doc import","doc template apply","drive +copy","drive +create-shortcut","drive +move","drive copy","drive list","drive move","drive permission add","drive permission list","drive permission remove","drive permission transfer-owner","drive permission update","drive shortcut","drive upload","wiki +delete-space","wiki +feed-list","wiki +member-add","wiki +member-list","wiki +member-remove","wiki +member-update","wiki +move","wiki +node-copy","wiki +node-create","wiki +node-delete","wiki +node-list","wiki +node-search","wiki +space-get","wiki feed list","wiki member add","wiki member list","wiki member remove","wiki member update","wiki node copy","wiki node create","wiki node delete","wiki node list","wiki node move","wiki node search","wiki space delete","wiki space get"],"risk":"yellow"}, - "created_time_start": {"denotes": "Doc/Drive search created-time lower bound in unchanged millisecond timestamp unit", "canonical_hint": "created-from", "members": ["created-from", "created-after", "create-time-from", "created-time-start", "create-time-start"], "excludes": ["created-to", "modified-from", "modified-to", "start", "from"], "commands": ["doc +search", "drive +search", "drive search"], "risk": "yellow"}, - "created_time_end": {"denotes": "Doc/Drive search created-time upper bound in unchanged millisecond timestamp unit", "canonical_hint": "created-to", "members": ["created-to", "created-before", "create-time-to", "created-time-end", "create-time-end"], "excludes": ["created-from", "modified-from", "modified-to", "end", "to"], "commands": ["doc +search", "drive +search", "drive search"], "risk": "yellow"}, - "document_permission_role": {"denotes": "direct document-space permission role on grant/apply/update, passed unchanged", "canonical_hint": "role", "members": ["role", "permission-role", "access-role", "member-role"], "excludes": ["filter-role", "reserve-role", "permission", "public-permission"], "commands": ["doc +access-change", "doc +access-grant", "doc +grant-and-share", "drive permission add", "drive permission apply", "drive permission update"], "risk": "yellow"}, - "creator_user_ids": {"denotes": "creator userId list used to filter Doc/Drive search results, passed unchanged", "canonical_hint": "creator-uids", "members": ["creator-uids", "creator-user-ids", "creator-ids", "created-by-user-ids"], "excludes": ["user", "user-id", "user-ids", "users", "owner-id", "modifier-uids"], "commands": ["doc +search", "drive +search", "drive search"], "risk": "yellow"}, - "local_output_path": {"denotes": "local destination file or directory path for a download/export result, passed unchanged", "canonical_hint": "output", "members": ["output", "output-path", "destination-path", "save-path"], "excludes": ["file", "file-path", "folder", "folder-id", "content-file"], "commands": ["doc +export", "doc +export-get", "doc +media-download", "doc +resource-download", "doc read", "drive +download", "drive +version-download", "drive download", "drive download-version"], "risk": "green"}, + "dept_id": {"denotes":"single department id","canonical_hint":"dept","members":["dept","dept-id","department","department-id","parent","parent-id"],"excludes":["depts","dept-ids","department-ids","name","query"],"commands":["contact +list-sub-depts","contact dept list-children"],"risk":"yellow"}, + "dept_ids": {"denotes":"department id list","canonical_hint":"dept-ids","members":["depts","dept-ids","department-ids"],"excludes":["dept","dept-id","department-id","name","query"],"commands":["contact +list-dept-members"],"risk":"yellow"}, + "group_id": {"denotes":"single DingTalk numeric groupId","canonical_hint":"group-id","members":["group-id"],"excludes":["group","conversation-id","chat","chat-id","open-conversation-id","conversation-ids","open-conversation-ids","group-name","name","id"],"commands":["chat +chat-get-by-id","chat group get-by-group-id"],"risk":"yellow"}, + "open_conversation_id": {"denotes":"single DingTalk openConversationId with unchanged value","canonical_hint":"conversation-id","members":["group","conversation-id","chat","chat-id","open-conversation-id"],"excludes":["group-id","group-ids","conversation-ids","open-conversation-ids","group-name","name","id","source","target","src-conversation-id","dest-conversation-id"],"commands":["chat +category-add-conversation","chat +category-remove-conversation","chat +chat-add-bot","chat +chat-audit-join","chat +chat-bots","chat +chat-dismiss","chat +chat-invite-url","chat +chat-members-get","chat +chat-mute","chat +chat-mute-member","chat +chat-quit","chat +chat-remove-bot","chat +chat-role-add","chat +chat-role-list","chat +chat-role-query-user","chat +chat-role-remove","chat +chat-role-remove-user","chat +chat-role-set-user","chat +chat-role-update","chat +chat-set-admin","chat +chat-set-history","chat +chat-transfer-owner","chat +chat-update-alias","chat +chat-update-icon","chat +chat-update-nick","chat +chat-update-settings","chat +conversation-clear-messages","chat +conversation-clear-red-point","chat +conversation-hide","chat +conversation-info","chat +conversation-mark-read","chat +conversation-mark-unread","chat +conversation-mute","chat +flag-cancel","chat +flag-create","chat +messages-add-emoji","chat +messages-add-text-emotion","chat +messages-list-pin","chat +messages-read-status","chat +messages-recall-by-bot","chat +messages-remove-emoji","chat +messages-remove-text-emotion","chat +messages-reply","chat +messages-resource-download","chat +messages-resource-url","chat +messages-send-by-bot","chat +messages-set-pin","chat +messages-set-top","chat +messages-unset-pin","chat +messages-unset-top","chat category add-conv","chat category remove-conv","chat chmod","chat clear-messages","chat clear-red-point","chat conversation-info","chat group audit-join-validation","chat group bots","chat group dismiss","chat group invite-url","chat group members","chat group members add","chat group members add-bot","chat group members list-by-ids","chat group members remove","chat group members remove-bot","chat group notice create","chat group notice edit","chat group notice get","chat group notice list","chat group quit","chat group rename","chat group set-admin","chat group set-history","chat group transfer-owner","chat group update-alias","chat group update-icon","chat group update-nick","chat group update-settings","chat group-mute","chat group-mute-member","chat group-role add","chat group-role list","chat group-role query-user","chat group-role remove","chat group-role remove-user","chat group-role set-user","chat group-role update","chat hide","chat mark-read","chat mark-unread","chat message add-favorite","chat message download-media","chat message list","chat message list-mentions","chat message list-pin-msg","chat message list-topic-replies","chat message read-status","chat message recall","chat message recall-by-bot","chat message remove-favorite","chat message reply","chat message search","chat message send","chat message send-by-bot","chat message send-card","chat message set-pin-msg","chat message set-top-msg","chat message unset-pin-msg","chat message unset-top-msg","chat mute-at-all","chat mute-red-envelope","chat set-top"],"risk":"yellow"}, + "open_conversation_ids": {"denotes":"DingTalk openConversationId list with unchanged element values","canonical_hint":"conversation-ids","members":["conversation-ids","open-conversation-ids","groups"],"excludes":["group-id","group-ids","conversation-id","open-conversation-id","chat-id"],"commands":["chat message search-advanced"],"risk":"yellow"}, + "group_name": {"denotes":"group-name search keyword, not a group identifier","canonical_hint":"group-name","members":["group-name"],"excludes":["group-id","conversation-id","open-conversation-id","chat-id","id"],"commands":["chat +group-members","chat +send-to-group"],"risk":"yellow"}, + "open_message_id": {"denotes":"single DingTalk openMessageId with unchanged value","canonical_hint":"open-message-id","members":["msg-id","message-id","open-message-id"],"excludes":["msg-ids","message-ids","open-message-ids","ref-msg-id","src-msg-id","open-task-id","topic-id","resource-id"],"commands":["chat +conversation-mark-read","chat +flag-cancel","chat +flag-create","chat +messages-add-emoji","chat +messages-add-text-emotion","chat +messages-forward","chat +messages-read-status","chat +messages-remove-emoji","chat +messages-remove-text-emotion","chat +messages-resource-download","chat +messages-set-pin","chat +messages-set-top","chat +messages-unset-pin","chat +messages-unset-top","chat mark-read","chat message add-emoji","chat message add-favorite","chat message add-text-emotion","chat message download-media","chat message forward","chat message read-status","chat message recall","chat message remove-emoji","chat message remove-favorite","chat message remove-text-emotion","chat message set-pin-msg","chat message set-top-msg","chat message unset-pin-msg","chat message unset-top-msg"],"risk":"yellow"}, + "open_message_ids": {"denotes":"DingTalk openMessageId list with unchanged element values","canonical_hint":"msg-ids","members":["msg-ids","message-ids","open-message-ids"],"excludes":["msg-id","message-id","open-message-id","ref-msg-id","src-msg-id"],"commands":["chat +flag-cancel","chat +flag-create","chat +messages-combine-forward","chat +messages-mget","chat message combine-forward","chat message list-by-ids","chat message list-emotion-replies"],"risk":"yellow"}, + "referenced_open_message_id": {"denotes":"referenced DingTalk openMessageId in a reply","canonical_hint":"ref-msg-id","members":["ref-msg-id","ref-message-id"],"excludes":["msg-id","message-id","open-message-id","msg-ids","src-msg-id"],"commands":["chat +messages-reply","chat message reply"],"risk":"yellow"}, + "user_id": {"denotes":"single user id","canonical_hint":"user-id","members":["user","user-id","userid","uid","staff-id"],"excludes":["at-user-ids","to-user","users","user-ids","name"],"commands":["chat +chat-role-query-user","chat +chat-role-set-user","chat +messages-list-direct","chat chmod","chat conversation-info","chat group transfer-owner","chat group-role query-user","chat group-role remove-user","chat group-role set-user","chat message list","chat message send","contact user profile get","attendance +get-leave-records","attendance +get-self-setting","attendance +get-summary"],"risk":"yellow"}, + "user_ids": {"denotes":"user id list","canonical_hint":"user-ids","members":["users","user-ids"],"excludes":["user","user-id","userid","uid","staff-id","at-user-ids"],"commands":["attendance +check-result","attendance check result","chat +messages-batch-send-by-bot","chat group members remove","chat group set-admin","chat group-mute-member","chat message read-status","chat message search-advanced","chat message send-by-bot","calendar +freebusy","calendar +suggestion","minutes +share","minutes +unshare","minutes permission add","minutes permission remove","wiki +member-add","wiki +member-remove","wiki +member-update","attendance +check-record","attendance +get-checkin-record","attendance +get-schedule","attendance +list-approve","attendance +query-report-data"],"risk":"yellow"}, + "open_dingtalk_ids": {"denotes":"DingTalk openDingTalkId list with unchanged element values","canonical_hint":"open-dingtalk-ids","members":["open-dingtalk-ids"],"excludes":["user","user-id","user-ids","staff-id","users"],"commands":["chat +chat-members-get","chat category create-smart","chat group members list-by-ids","chat message send-by-bot","ding +send-personal"],"risk":"yellow"}, + "ding_id": {"denotes":"DING id","canonical_hint":"ding-id","members":["ding-id","open-ding-id"],"excludes":["id"],"commands":["ding message receiver-status","ding +recall-personal","ding +receiver-status"],"risk":"yellow"}, + "folder_id": {"denotes":"drive folder id","canonical_hint":"folder","members":["folder","folder-id"],"excludes":["space-id"],"commands":["drive +copy","drive +create-folder","drive +create-shortcut","drive +list","drive +move","drive +upload","drive commit","drive copy","drive list","drive mkdir","drive move","drive shortcut","drive upload","drive upload-info","mail folder update","markdown create"],"risk":"green"}, + "drive_storage_space_id": {"denotes":"single numeric DingDrive storage space ID with unchanged value","canonical_hint":"space-id","members":["space-id","drive-space-id","storage-space-id","dingdrive-space-id"],"excludes":["space","workspace","workspace-id","knowledge-base-id","wiki-workspace-id"],"commands":["drive +create-folder","drive +download","drive +info","drive +inspect","drive +list","drive +recycle-list","drive +upload","drive commit","drive download","drive info","drive list","drive mkdir","drive recycle list","drive upload","drive upload-info","markdown fetch","markdown create","markdown overwrite","markdown patch"],"risk":"yellow"}, + "app_id": {"denotes":"application id","canonical_hint":"unified-app-id","members":["app-id","unified-app-id","application-id"],"excludes":["app-key","app-secret","agent-id"],"commands":["dev app get"],"risk":"yellow"}, + "robot_code": {"denotes":"robot code","canonical_hint":"robot-code","members":["robot-code","robot"],"excludes":["robot-id","bot-id","open-bot-id","bot-code"],"commands":["chat +chat-add-bot","chat +messages-batch-recall-by-bot","chat +messages-batch-send-by-bot","chat +messages-recall-by-bot","chat +messages-send-by-bot","chat group members add-bot","chat message recall-by-bot","chat message send-by-bot","ding message send"],"risk":"yellow"}, + "open_bot_id": {"denotes":"single DingTalk openBotId with unchanged value","canonical_hint":"bot-id","members":["bot-id","open-bot-id"],"excludes":["robot-code","robot","robot-id","bot-code"],"commands":["chat +chat-remove-bot","chat group members remove-bot"],"risk":"yellow"}, + "doc_node_id": {"denotes":"single DingTalk document nodeId or accepted document URL/token with unchanged value","canonical_hint":"node","members":["node","node-id","doc","doc-id","file-id","document-id","url","dentry-uuid"],"excludes":["id","folder","folder-id","parent-id","workspace","workspace-id","block-id","comment-id","comment-key","job-id","task-id","template-id","version","revision","dentry-id","space-id","name","role"],"commands":["doc +access-change","doc +access-grant","doc +access-revoke","doc +background-delete","doc +background-update","doc +checkpoint-update","doc +comment-create","doc +comment-delete","doc +comment-list","doc +comment-reply","doc +comment-update","doc +copy","doc +doc-append","doc +export","doc +export-submit","doc +fetch","doc +history-list","doc +history-revert","doc +history-save","doc +inspect","doc +move","doc +review","doc +version-list","doc +version-revert","doc +version-save","doc block delete","doc block insert","doc block list","doc block update","doc comment create","doc comment create-inline","doc comment delete","doc comment list","doc comment reply","doc comment update","doc export","doc info","doc media download","doc media insert","doc media upload","doc read","doc style background clear","doc style background set","doc style cover clear","doc style cover set","doc style get","doc update","doc version list","doc version revert","doc version save","doc whiteboard insert","sheet +list-sheets","sheet +read"],"risk":"yellow"}, + "doc_comment_key": {"denotes":"single DingTalk document commentKey with unchanged value","canonical_hint":"comment-key","members":["comment-key","comment-id"],"excludes":["id","node","node-id","doc-id","block-id"],"commands":["doc +comment-delete","doc +comment-reply","doc +comment-update","doc comment delete","doc comment reply","doc comment update"],"risk":"yellow"}, + "doc_version_number": {"denotes":"single document or Drive ordinary-file historical version number with unchanged positive integer value","canonical_hint":"version","members":["version","version-number","version-no"],"excludes":["revision","id","node","node-id","doc-id"],"commands":["doc +history-revert","doc +version-revert","doc version revert","drive +version-download","drive +version-get","drive +version-revert","drive download","drive download-version","drive revert","markdown diff"],"risk":"yellow"}, + "doc_content_format": {"denotes":"DingTalk document body format with unchanged markdown/jsonml value","canonical_hint":"content-format","members":["content-format","doc-format"],"excludes":["format","export-format","mime-type"],"commands":["doc +create","doc +update","doc create","doc update"],"risk":"green"}, + "doc_edit_revision": {"denotes":"single optimistic-concurrency revision for a document edit","canonical_hint":"revision","members":["revision","expected-revision"],"excludes":["version","version-number","version-no"],"commands":["doc +update","doc update"],"risk":"yellow"}, + "drive_recycle_item_id": {"denotes":"single Drive recycle-bin item ID returned by recycle list","canonical_hint":"id","members":["id","recycle-item-id","trash-item-id","deleted-item-id"],"excludes":["node","node-id","file-id","folder-id","space-id","workspace-id"],"commands":["drive +recycle-restore","drive recycle restore"],"risk":"yellow"}, + "drive_modified_time_start": {"denotes":"Drive search modified-time lower bound in unchanged millisecond timestamp unit","canonical_hint":"modified-from","members":["modified-from","modified-after","modify-time-from","modified-time-start"],"excludes":["modified-to","created-from","created-to","start","from"],"commands":["drive +search","drive search"],"risk":"yellow"}, + "drive_modified_time_end": {"denotes":"Drive search modified-time upper bound in unchanged millisecond timestamp unit","canonical_hint":"modified-to","members":["modified-to","modified-before","modify-time-to","modified-time-end"],"excludes":["modified-from","created-from","created-to","end","to"],"commands":["drive +search","drive search"],"risk":"yellow"}, + "drive_file_size_bytes": {"denotes":"file size in bytes passed unchanged","canonical_hint":"file-size","members":["file-size","file-size-bytes","size-bytes","content-length"],"excludes":["part-size","page-size","limit","size"],"commands":["drive commit","drive upload-info"],"risk":"yellow"}, + "drive_sort_direction": {"denotes":"Drive result sort direction with unchanged asc/desc enum","canonical_hint":"order","members":["order","sort","sort-direction","order-direction"],"excludes":["order-by","sort-by","order-field"],"commands":["drive +list","drive list","drive star list"],"risk":"green"}, + "workspace_id": {"denotes":"single knowledge-base or document-space workspace ID/URL passed unchanged; never a numeric DingDrive storage space ID","canonical_hint":"workspace","members":["workspace","workspace-id","knowledge-base-id","wiki-workspace-id"],"excludes":["space","space-id","drive-space-id","storage-space-id","dingdrive-space-id","folder","folder-id","node","node-id","dentry-id"],"commands":["doc +access-change","doc +access-grant","doc +access-revoke","doc +copy","doc +create","doc +create-from-template","doc +grant-and-share","doc +import","doc +list","doc +move","doc create","doc file create","doc import","doc template apply","drive +copy","drive +create-shortcut","drive +move","drive copy","drive list","drive move","drive permission add","drive permission list","drive permission remove","drive permission transfer-owner","drive permission update","drive shortcut","drive upload","wiki +delete-space","wiki +feed-list","wiki +member-add","wiki +member-list","wiki +member-remove","wiki +member-update","wiki +move","wiki +node-copy","wiki +node-create","wiki +node-delete","wiki +node-list","wiki +node-search","wiki +space-get","wiki feed list","wiki member add","wiki member list","wiki member remove","wiki member update","wiki node copy","wiki node create","wiki node delete","wiki node list","wiki node move","wiki node search","wiki space delete","wiki space get","markdown fetch","markdown create","markdown overwrite","markdown patch"],"risk":"yellow"}, + "created_time_start": {"denotes":"Doc/Drive search created-time lower bound in unchanged millisecond timestamp unit","canonical_hint":"created-from","members":["created-from","created-after","create-time-from","created-time-start","create-time-start"],"excludes":["created-to","modified-from","modified-to","start","from"],"commands":["doc +search","drive +search","drive search"],"risk":"yellow"}, + "created_time_end": {"denotes":"Doc/Drive search created-time upper bound in unchanged millisecond timestamp unit","canonical_hint":"created-to","members":["created-to","created-before","create-time-to","created-time-end","create-time-end"],"excludes":["created-from","modified-from","modified-to","end","to"],"commands":["doc +search","drive +search","drive search"],"risk":"yellow"}, + "document_permission_role": {"denotes":"direct document-space permission role on grant/apply/update, passed unchanged","canonical_hint":"role","members":["role","permission-role","access-role","member-role"],"excludes":["filter-role","reserve-role","permission","public-permission"],"commands":["doc +access-change","doc +access-grant","doc +grant-and-share","drive permission add","drive permission apply","drive permission update"],"risk":"yellow"}, + "creator_user_ids": {"denotes":"creator userId list used to filter Doc/Drive search results, passed unchanged","canonical_hint":"creator-uids","members":["creator-uids","creator-user-ids","creator-ids","created-by-user-ids"],"excludes":["user","user-id","user-ids","users","owner-id","modifier-uids"],"commands":["doc +search","drive +search","drive search"],"risk":"yellow"}, + "local_output_path": {"denotes":"local destination file or directory path for a download/export result, passed unchanged","canonical_hint":"output","members":["output","output-path","destination-path","save-path"],"excludes":["file","file-path","folder","folder-id","content-file"],"commands":["doc +export","doc +export-get","doc +media-download","doc +resource-download","doc read","drive +download","drive +version-download","drive download","drive download-version","markdown fetch"],"risk":"green"}, "calendar_event_id": {"denotes":"single calendar eventId in the target-event role","canonical_hint":"event","members":["event","event-id","calendar-event-id"],"excludes":["id","calendar-id","calendar-book-id","acl-id","room-id"],"commands":["calendar +attendee-list","calendar +cancel-event","calendar +invite","calendar +reschedule","calendar +get","calendar +rsvp","calendar +update"],"risk":"yellow"}, "calendar_book_id": {"denotes":"single calendar container calendarId, not an eventId","canonical_hint":"calendar-id","members":["calendar-id","calendar","calendar-book-id"],"excludes":["id","event","event-id","acl-id","room-id"],"commands":["calendar +agenda","calendar +attendee-list","calendar +create","calendar +get","calendar +rsvp","calendar +search-event","calendar +update"],"risk":"yellow"}, "calendar_event_title": {"denotes":"calendar event title text","canonical_hint":"title","members":["title","summary","subject"],"excludes":["name","room-name","calendar-name"],"commands":["calendar +book","calendar +create","calendar +update"],"risk":"green"}, @@ -71,34 +71,40 @@ "todo_executor_ids": {"denotes":"todo executor userId list with unchanged comma-separated value","canonical_hint":"executors","members":["executors","executor-ids"],"excludes":["executor","executor-id","participant","participant-id","participants","participant-ids","to","user","user-id","user-ids","users","name"],"commands":["todo +create","todo task add-executor","todo task create","todo task create-sub","todo task remove-executor"],"risk":"yellow"}, "todo_participant_ids": {"denotes":"todo participant userId list with unchanged comma-separated value","canonical_hint":"participants","members":["participants","participant-ids"],"excludes":["participant","participant-id","executor","executor-id","executors","executor-ids","to","user","user-id","user-ids","users","name"],"commands":["todo task add-participant","todo task remove-participant"],"risk":"yellow"}, "todo_completion_state": {"denotes":"todo completion boolean string true/false with unchanged value","canonical_hint":"status","members":["status","done","is-done","todo-status"],"excludes":["state","task-status"],"commands":["todo +get-my-tasks","todo +search","todo task done","todo task list","todo task update"],"risk":"yellow"}, - "todo_role_types": {"denotes":"todo creator/executor/participant role filter list with unchanged comma-separated value","canonical_hint":"role-types","members":["role-types","roles"],"excludes":["role","role-id","role-ids"],"commands":["todo +due-today","todo +get-my-tasks","todo +get-related-tasks","todo task list"],"risk":"yellow"} + "todo_role_types": {"denotes":"todo creator/executor/participant role filter list with unchanged comma-separated value","canonical_hint":"role-types","members":["role-types","roles"],"excludes":["role","role-id","role-ids"],"commands":["todo +due-today","todo +get-my-tasks","todo +get-related-tasks","todo task list"],"risk":"yellow"}, + "attendance_leave_code": {"denotes":"single attendance vacation or leave rule code","canonical_hint":"leave-code","members":["leave-code","vacation-type-code"],"excludes":["leave-name","leave-names","vacation-name","id","rule-id"],"commands":["attendance +get-leave-records"],"risk":"yellow"}, + "attendance_query_date": {"denotes":"single attendance query date whose supplied format is preserved","canonical_hint":"date","members":["date","attendance-date"],"excludes":["start","end","start-date","end-date","time"],"commands":["attendance +get-summary"],"risk":"yellow"}, + "sheet_a1_range": {"denotes":"single A1 worksheet range with unchanged text","canonical_hint":"range","members":["range"],"excludes":["ranges","a1-ranges","cell-ranges","source-range","target-range","destination-range","start-cell"],"commands":["sheet +read"],"risk":"yellow"}, + "sheet_tab_reference": {"denotes":"single worksheet ID accepted unchanged by a sheet command; never a worksheet display name","canonical_hint":"sheet-id","members":["sheet-id","worksheet-id"],"excludes":["id","node","node-id","document-id","target-sheet-id","source-sheet-id","name","title"],"commands":["sheet +read"],"risk":"yellow"}, + "markdown_file_name": {"denotes":"display filename for one native Markdown file, passed unchanged and required to end in .md where Runtime requires it","canonical_hint":"name","members":["name","file-name","filename"],"excludes":["file","file-path","node","node-id","title","folder","folder-id"],"commands":["markdown create","markdown overwrite"],"risk":"yellow"}, + "markdown_local_file_path": {"denotes":"local native Markdown file path passed unchanged; never a remote node ID or output destination","canonical_hint":"file","members":["file","file-path","local-file"],"excludes":["file-id","node","node-id","output","output-path","folder","folder-id","content-file"],"commands":["markdown create","markdown diff","markdown overwrite"],"risk":"yellow"} }, "command_overrides": { - "doc +version-list": {"ambiguous": ["size", "max-results", "max-result", "take", "top", "per-page", "next-cursor", "next-token", "next-page-token"], "note": "--limit/--cursor and the shipped visible compatibility flags --page-size/--page-token remain native. Other pagination spellings cannot choose between two visible real flags and must stop before execution."}, - "chat group rename": {"bind": {"id": "open_conversation_id"}, "note": "This command's real --id carries one openConversationId; aliases reduce to --id without changing the value."}, - "chat group members": {"bind": {"id": "open_conversation_id"}}, - "chat group members add": {"bind": {"id": "open_conversation_id"}, "block": ["user-id", "open-dingtalk-id"], "note": "The real --users is a list and may contain mixed userId/openDingTalkId values; singular inputs are not promoted automatically."}, - "chat group members remove": {"bind": {"id": "open_conversation_id"}}, - "chat conversation-info": {"ambiguous": ["chat-id", "open-conversation-id"], "note": "Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, - "chat group-mute": {"ambiguous": ["chat-id", "open-conversation-id"], "note": "Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, - "chat group-mute-member": {"ambiguous": ["chat-id", "open-conversation-id"], "note": "Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, - "chat message add-emoji": {"scoped_aliases": {"chat-id": "conversation-id"}, "block": ["group-id", "group-ids", "conversation-ids", "open-conversation-ids"], "ambiguous": ["open-message-id"], "note": "Native --chat/--group/--id/--conversation-id/--open-conversation-id and visible --message-id/--msg-id stay executable; numeric/list spellings are rejected."}, - "chat message add-text-emotion": {"scoped_aliases": {"chat-id": "conversation-id"}, "block": ["group-id", "group-ids", "conversation-ids", "open-conversation-ids"], "ambiguous": ["open-message-id"], "note": "Native --chat/--group/--id/--conversation-id/--open-conversation-id and visible --message-id/--msg-id stay executable; numeric/list spellings are rejected."}, - "chat message list-mentions": {"ambiguous": ["chat-id", "open-conversation-id"], "note": "Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, - "chat message recall-by-bot": {"ambiguous": ["chat-id", "open-conversation-id"], "note": "Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, - "chat message remove-emoji": {"scoped_aliases": {"chat-id": "conversation-id"}, "block": ["group-id", "group-ids", "conversation-ids", "open-conversation-ids"], "ambiguous": ["open-message-id"], "note": "Native --chat/--group/--id/--conversation-id/--open-conversation-id and visible --message-id/--msg-id stay executable; numeric/list spellings are rejected."}, - "chat message remove-text-emotion": {"scoped_aliases": {"chat-id": "conversation-id"}, "block": ["group-id", "group-ids", "conversation-ids", "open-conversation-ids"], "ambiguous": ["open-message-id"], "note": "Native --chat/--group/--id/--conversation-id/--open-conversation-id and visible --message-id/--msg-id stay executable; numeric/list spellings are rejected."}, - "chat message search": {"ambiguous": ["chat-id", "open-conversation-id"], "note": "Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, - "chat mute": {"scoped_aliases": {"chat-id": "conversation-id"}, "block": ["group-id", "group-ids", "conversation-ids", "open-conversation-ids"], "note": "Native --conversation-id and hidden compatibility --group/--id/--chat/--open-conversation-id remain unchanged; reviewed chat-id reduces to --conversation-id."}, - "drive list": {"ambiguous": ["root-id", "space"], "note": "Numeric --space-id and knowledge-base --workspace are distinct routes; bare --space/--root-id cannot select a domain or folder.", "scoped_aliases": {"document-id": "node", "dentry-uuid": "node", "directory-id": "folder", "order-field": "order-by", "sort-by": "order-by", "sort-field": "order-by"}, "scope_strict": true, "block": ["dentry-id"]}, - "drive upload": {"ambiguous": ["destination-id", "space", "target-id"], "note": "Local file, display name, MIME, overwrite node, folder, storage space, and knowledge-base workspace remain distinct roles.", "scoped_aliases": {"dentry-uuid": "node", "directory-id": "folder", "overwrite-node-id": "node", "target-folder-id": "folder", "target-workspace-id": "workspace", "source-file": "file", "content-type": "mime-type", "filename": "file-name", "name": "file-name", "display-name": "file-name", "upload-name": "file-name"}, "block": ["dentry-id", "document-url", "output-path"], "scope_strict": true}, - "ding +receiver-status": {"scoped_aliases": {"id": "ding-id"}, "note": "generic id reduces to ding-id"}, - "ding message receiver-status": {"scoped_aliases": {"id": "ding-id"}}, - "contact user profile get": {"scoped_aliases": {"id": "staff-id", "ids": "staff-id"}, "note": "user-id is reduced by the user_id concept; generic id/ids bound explicitly"}, - "mail folder update": {"bind": {"id": "folder_id"}, "note": "this command's --id is the folder id; --folder-id reduces to --id"}, - "mail message search": {"scoped_aliases": {"subject": "query"}, "scope_strict": true, "note": "never globalize: mail template create has a real and different --subject"}, - "calendar event list": {"scoped_aliases": {"date": "start"}, "note": "reviewed against ParseISOTimeToMillis and final list_calendar_events payload; --date is normalized centrally while the command's existing hidden compatibility flags remain native fallbacks"}, + "doc +version-list": {"ambiguous":["size","max-results","max-result","take","top","per-page","next-cursor","next-token","next-page-token"],"note":"--limit/--cursor and the shipped visible compatibility flags --page-size/--page-token remain native. Other pagination spellings cannot choose between two visible real flags and must stop before execution."}, + "chat group rename": {"bind":{"id":"open_conversation_id"},"note":"This command's real --id carries one openConversationId; aliases reduce to --id without changing the value."}, + "chat group members": {"bind":{"id":"open_conversation_id"}}, + "chat group members add": {"bind":{"id":"open_conversation_id"},"block":["user-id","open-dingtalk-id"],"note":"The real --users is a list and may contain mixed userId/openDingTalkId values; singular inputs are not promoted automatically."}, + "chat group members remove": {"bind":{"id":"open_conversation_id"}}, + "chat conversation-info": {"ambiguous":["chat-id","open-conversation-id"],"note":"Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, + "chat group-mute": {"ambiguous":["chat-id","open-conversation-id"],"note":"Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, + "chat group-mute-member": {"ambiguous":["chat-id","open-conversation-id"],"note":"Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, + "chat message add-emoji": {"scoped_aliases":{"chat-id":"conversation-id"},"block":["group-id","group-ids","conversation-ids","open-conversation-ids"],"ambiguous":["open-message-id"],"note":"Native --chat/--group/--id/--conversation-id/--open-conversation-id and visible --message-id/--msg-id stay executable; numeric/list spellings are rejected."}, + "chat message add-text-emotion": {"scoped_aliases":{"chat-id":"conversation-id"},"block":["group-id","group-ids","conversation-ids","open-conversation-ids"],"ambiguous":["open-message-id"],"note":"Native --chat/--group/--id/--conversation-id/--open-conversation-id and visible --message-id/--msg-id stay executable; numeric/list spellings are rejected."}, + "chat message list-mentions": {"ambiguous":["chat-id","open-conversation-id"],"note":"Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, + "chat message recall-by-bot": {"ambiguous":["chat-id","open-conversation-id"],"note":"Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, + "chat message remove-emoji": {"scoped_aliases":{"chat-id":"conversation-id"},"block":["group-id","group-ids","conversation-ids","open-conversation-ids"],"ambiguous":["open-message-id"],"note":"Native --chat/--group/--id/--conversation-id/--open-conversation-id and visible --message-id/--msg-id stay executable; numeric/list spellings are rejected."}, + "chat message remove-text-emotion": {"scoped_aliases":{"chat-id":"conversation-id"},"block":["group-id","group-ids","conversation-ids","open-conversation-ids"],"ambiguous":["open-message-id"],"note":"Native --chat/--group/--id/--conversation-id/--open-conversation-id and visible --message-id/--msg-id stay executable; numeric/list spellings are rejected."}, + "chat message search": {"ambiguous":["chat-id","open-conversation-id"],"note":"Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, + "chat mute": {"scoped_aliases":{"chat-id":"conversation-id"},"block":["group-id","group-ids","conversation-ids","open-conversation-ids"],"note":"Native --conversation-id and hidden compatibility --group/--id/--chat/--open-conversation-id remain unchanged; reviewed chat-id reduces to --conversation-id."}, + "drive list": {"ambiguous":["root-id","space"],"note":"Numeric --space-id and knowledge-base --workspace are distinct routes; bare --space/--root-id cannot select a domain or folder.","scoped_aliases":{"document-id":"node","dentry-uuid":"node","directory-id":"folder","order-field":"order-by","sort-by":"order-by","sort-field":"order-by"},"scope_strict":true,"block":["dentry-id"]}, + "drive upload": {"ambiguous":["destination-id","space","target-id"],"note":"Local file, display name, MIME, overwrite node, folder, storage space, and knowledge-base workspace remain distinct roles.","scoped_aliases":{"dentry-uuid":"node","directory-id":"folder","overwrite-node-id":"node","target-folder-id":"folder","target-workspace-id":"workspace","source-file":"file","content-type":"mime-type","filename":"file-name","name":"file-name","display-name":"file-name","upload-name":"file-name"},"block":["dentry-id","document-url","output-path"],"scope_strict":true}, + "ding +receiver-status": {"scoped_aliases":{"id":"ding-id"},"note":"The only identifier role is one openDingId. Generic id and open-ding-id reduce to ding-id; other resource and request IDs stop before dispatch.","block":["message-id","task-id","uuid","request-id"],"scope_strict":true}, + "ding message receiver-status": {"scoped_aliases":{"id":"ding-id"}}, + "contact user profile get": {"scoped_aliases":{"id":"staff-id","ids":"staff-id"},"note":"user-id is reduced by the user_id concept; generic id/ids bound explicitly"}, + "mail folder update": {"bind":{"id":"folder_id"},"note":"this command's --id is the folder id; --folder-id reduces to --id"}, + "mail message search": {"scoped_aliases":{"subject":"query"},"scope_strict":true,"note":"never globalize: mail template create has a real and different --subject"}, + "calendar event list": {"scoped_aliases":{"date":"start"},"note":"reviewed against ParseISOTimeToMillis and final list_calendar_events payload; --date is normalized centrally while the command's existing hidden compatibility flags remain native fallbacks"}, "calendar +agenda": {"block":["id"],"note":"calendarId aliases stay role-specific; bare --id could be an eventId and must not be silently treated as a calendarId. On this exact command, --to is an unchanged ISO end timestamp and normalizes to --end.","scoped_aliases":{"to":"end"},"scope_strict":true}, "calendar +attendee-list": {"ambiguous":["id"],"note":"This command carries both an eventId and an optional calendarId; bare --id cannot safely choose the role."}, "calendar +book": {"block":["user","user-id","user-ids","users","attendees","participants","open-dingtalk-ids","calendar-id","rooms","room-id","room-ids","date","time","start-date","end-date","time-min","time-max"],"note":"--with carries names resolved by the shortcut; identifier spellings and room booking inputs cannot be supplied by name-only normalization. Only explicit event-time spellings are mapped; range-bound or date-only spellings remain blocked.","scoped_aliases":{"from":"start","begin":"start","start-time":"start","to":"end","end-time":"end"},"scope_strict":true}, @@ -133,182 +139,182 @@ "calendar +search-event": {"scoped_aliases":{"to":"end","search":"query"},"block":["id","event","event-id","page","page-index","offset"],"scope_strict":true,"note":"The query searches title, description, and location within one calendar page. This route uses cursor pagination; event identifiers and page-index/offset models are different roles."}, "calendar +suggestion": {"scoped_aliases":{"to":"end"},"block":["who","with","name","names","attendee-name","attendee-names","participant-name","participant-names","open-dingtalk-ids","room-name","room-id","room-ids","rooms"],"scope_strict":true,"note":"This shortcut accepts stable userId values. Person names belong to +suggest-time, openDingTalkIds are a different value domain, and room availability is a different query."}, "calendar +update": {"scoped_aliases":{"from":"start","begin":"start","start-time":"start","to":"end","end-time":"end","freebusy":"free-busy","add-users":"add-attendees","add-user-ids":"add-attendees","remove-users":"remove-attendees","remove-user-ids":"remove-attendees"},"ambiguous":["id","attendees","users","user-ids"],"block":["who","with","attendee-name","attendee-names","participant-name","participant-names","open-dingtalk-ids","rooms","room-id","room-ids","room-name","group-id","rich-text-desc","remind-minutes","reminder-minutes","date","time","start-date","end-date","time-min","time-max"],"scope_strict":true,"note":"Bare --id cannot choose eventId versus calendarId, and a generic attendee list cannot choose add versus remove. Directional userId aliases are safe; names, openDingTalkIds, room changes, rich text, and reminders require different commands or capabilities."}, - "chat +bot-find": {"scoped_aliases": {"name": "query"}, "scope_strict": true, "note": "On this exact bot-search shortcut, --name and --query denote the same search keyword; --name must not become a global search alias."}, - "chat +chat-messages": {"scoped_aliases": {"chat": "group"}, "scope_strict": true, "note": "Evaluation compatibility: --chat carries one stable openConversationId and normalizes to the existing --group identifier route."}, - "chat +search-msg": {"scoped_aliases": {"chat": "group"}, "scope_strict": true, "note": "Evaluation compatibility: scalar --chat carries one stable openConversationId and normalizes to the existing scalar --group filter."}, - "chat bot find": {"scoped_aliases": {"name": "query"}, "scope_strict": true, "note": "On this exact bot-search command, --name and --query denote the same search keyword; --name must not become a global search alias."}, - "chat +bot-search": {"scoped_aliases": {"query": "name", "current-page": "page"}, "block": ["cursor"], "scope_strict": true, "note": "Only the reviewed bot keyword and page-number spellings are accepted; cursor pagination cannot be converted to a page number."}, - "chat bot search": {"scoped_aliases": {"query": "name", "current-page": "page"}, "block": ["cursor"], "scope_strict": true, "note": "Only the reviewed bot keyword and page-number spellings are accepted; cursor pagination cannot be converted to a page number."}, - "chat message list-favorites": {"scoped_aliases": {"limit": "size"}, "scope_strict": true, "note": "On this exact command, both names denote the same bounded result count; the numeric value is unchanged."}, - "chat +messages-list-unread-conversations": {"scoped_aliases": {"limit": "count", "size": "count"}, "scope_strict": true, "note": "On this exact command, limit and size both denote the returned unread-conversation count."}, - "chat +unread-chats": {"scoped_aliases": {"limit": "count", "size": "count"}, "scope_strict": true, "note": "On this exact command, limit and size both denote the returned unread-conversation count."}, - "chat message list-unread-conversations": {"scoped_aliases": {"limit": "count", "size": "count"}, "scope_strict": true, "note": "On this exact command, limit and size both denote the returned unread-conversation count."}, - "chat +messages-list-direct": {"scoped_aliases": {"start": "time"}, "block": ["end"], "scope_strict": true, "note": "This exact command accepts one start boundary in yyyy-MM-dd HH:mm:ss; an end-only input cannot be represented."}, - "chat message list": {"scoped_aliases": {"start": "time"}, "block": ["end"], "ambiguous": ["chat-id", "open-conversation-id"], "scope_strict": true, "note": "This exact command accepts one start boundary in yyyy-MM-dd HH:mm:ss; an end-only input cannot be represented. Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, - "chat message list-by-sender": {"scoped_aliases": {"user-id": "sender-user-id", "open-dingtalk-id": "sender-open-dingtalk-id"}, "block": ["time"], "scope_strict": true, "note": "Only same-role sender identifiers are mapped; --time cannot supply the required RFC3339 start/end range."}, - "contact +resolve-dept": {"bind": {"name": "search_query"}, "note": "The real --name is a department-name search keyword and carries the search_query concept on this shortcut."}, - "contact +list-sub-depts": {"block": ["name", "query"], "note": "--dept is an integer department id; names and search queries require a separate resolution command"}, - "contact +dept-members": {"bind": {"dept": "search_query"}, "scoped_aliases": {"name": "dept"}, "note": "The real --dept is a department-name search keyword; search spellings come from search_query, while --name remains command-scoped."}, - "chat message send": {"scoped_aliases": {"to-user": "user"}, "ambiguous": ["chat-id", "open-conversation-id"], "note": "The recipient alias remains exact to this command. --file is the visible Primary and --file-path remains a command-owned typed compatibility alias; obsolete file metadata flags remain unsupported. Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, - "chat +group-members": {"bind": {"group": "group_name"}, "note": "The real --group is a group-name search keyword on this shortcut, not an identifier."}, - "chat +category-create": {"scoped_aliases": {"name": "title"}, "scope_strict": true, "note": "The reviewed name/title mapping preserves the category display-name value on this exact shortcut."}, - "chat category create": {"scoped_aliases": {"name": "title"}, "scope_strict": true, "note": "The reviewed name/title mapping preserves the category display-name value on this exact command."}, - "chat +category-rename": {"scoped_aliases": {"name": "title"}, "block": ["category-ids"], "scope_strict": true, "note": "The display-name alias is exact; a category-id list is not accepted where one category is required."}, - "chat category rename": {"scoped_aliases": {"name": "title"}, "block": ["category-ids"], "scope_strict": true, "note": "The display-name alias is exact; a category-id list is not accepted where one category is required."}, - "chat +category-delete": {"block": ["category-ids"], "note": "This command requires one category id; list cardinality is not reduced automatically."}, - "chat category delete": {"block": ["category-ids"], "note": "This command requires one category id; list cardinality is not reduced automatically."}, - "chat category list-conversations": {"block": ["category-ids"], "note": "This command requires one category id; list cardinality is not reduced automatically."}, - "chat category add-conv": {"block": ["category-id"], "ambiguous": ["chat", "chat-id", "open-conversation-id"], "note": "This command requires a category-id list; one id is not promoted into a batch input. Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, - "chat category remove-conv": {"block": ["category-id"], "ambiguous": ["chat", "chat-id", "open-conversation-id"], "note": "This command requires a category-id list; one id is not promoted into a batch input. Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, - "chat +chat-role-update": {"block": ["role-ids"], "note": "This command requires one role id; list cardinality is not reduced automatically."}, - "chat group-role remove": {"block": ["role-ids"], "note": "This command requires one role id; list cardinality is not reduced automatically."}, - "chat group-role update": {"block": ["role-ids"], "note": "This command requires one role id; list cardinality is not reduced automatically."}, - "chat +chat-role-set-user": {"block": ["role-id"], "note": "This command requires a role-id list; one id is not promoted into a batch input."}, - "chat group-role remove-user": {"block": ["role-id"], "note": "This command requires a role-id list; one id is not promoted into a batch input."}, - "chat +messages-send-by-webhook": {"scoped_aliases": {"at-user-ids": "at-users"}, "scope_strict": true, "note": "Both names denote the same userId list used for @ mentions on this exact shortcut."}, - "chat message send-by-webhook": {"scoped_aliases": {"at-user-ids": "at-users"}, "scope_strict": true, "note": "Both names denote the same userId list used for @ mentions on this exact command."}, - "doc block insert": {"block": ["before-block-id"], "note": "Parent and reference roles remain distinct. --before-block-id needs both --ref-block and --where before, while role-free --block-id cannot choose parent versus reference.", "scoped_aliases": {"parent-block-id": "parent-block", "ref-block-id": "ref-block", "reference-block-id": "ref-block"}, "ambiguous": ["block-id"], "scope_strict": true}, - "chat message send-by-bot": {"scoped_aliases": {"at-users": "at-user-ids"}, "block": ["user-id", "to-user-id"], "ambiguous": ["at-ids", "chat-id", "open-conversation-id"], "note": "The reviewed @ userId-list alias is exact; singular recipients are not promoted, and bare --at-ids cannot choose an identifier domain. Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, - "doc +export-get": {"block": ["doc-id", "document-id", "file-id", "node", "node-id", "task-id", "url"], "note": "This command queries one export jobId. Document node identifiers and import taskId spellings are different entities and are rejected.", "scoped_aliases": {"export-job-id": "job-id"}, "scope_strict": true}, - "doc block delete": {"block": ["index"], "note": "index (position) vs node (node id) are different"}, - "doc +copy": {"scoped_aliases": {"folder-id": "folder", "parent-folder": "folder", "parent-folder-id": "folder", "parent-node-id": "folder", "space": "workspace", "space-id": "workspace"}, "block": ["parent-id"], "scope_strict": true, "note": "This exact Doc command expects a Doc folder nodeId/dentryUuid/URL. Reviewed folder spellings preserve that value; generic --parent-id stays blocked because it may carry a numeric Drive dentryId. The command-scoped --space/--space-id aliases preserve the compatibility published before workspace and numeric DingDrive storage-space concepts were split; they do not make those value domains globally equivalent."}, - "doc +list": {"scoped_aliases": {"folder-id": "folder", "parent-folder": "folder", "parent-folder-id": "folder", "parent-node-id": "folder", "space": "workspace", "space-id": "workspace"}, "block": ["parent-id"], "scope_strict": true, "note": "This exact Doc command expects a Doc folder nodeId/dentryUuid/URL. Reviewed folder spellings preserve that value; generic --parent-id stays blocked because it may carry a numeric Drive dentryId. The command-scoped --space/--space-id aliases preserve the compatibility published before workspace and numeric DingDrive storage-space concepts were split; they do not make those value domains globally equivalent."}, - "doc +move": {"scoped_aliases": {"folder-id": "folder", "parent-folder": "folder", "parent-folder-id": "folder", "parent-node-id": "folder", "space": "workspace", "space-id": "workspace"}, "block": ["parent-id"], "scope_strict": true, "note": "This exact Doc command expects a Doc folder nodeId/dentryUuid/URL. Reviewed folder spellings preserve that value; generic --parent-id stays blocked because it may carry a numeric Drive dentryId. The command-scoped --space/--space-id aliases preserve the compatibility published before workspace and numeric DingDrive storage-space concepts were split; they do not make those value domains globally equivalent."}, - "doc comment create": {"scoped_aliases": {"mentioned-open-conversation-ids": "mentioned-open-conversation-id", "open-conversation-id": "mentioned-open-conversation-id", "open-conversation-ids": "mentioned-open-conversation-id"}, "block": ["chat-id", "chat-ids", "conversation-id", "conversation-ids", "group-id", "group-ids"], "scope_strict": true, "note": "The target is a list of mentioned openConversationIds. Explicit open-conversation spellings preserve the list value; numeric groupId and role-free conversation spellings are rejected."}, - "doc comment reply": {"scoped_aliases": {"mentioned-open-conversation-ids": "mentioned-open-conversation-id", "open-conversation-id": "mentioned-open-conversation-id", "open-conversation-ids": "mentioned-open-conversation-id"}, "block": ["chat-id", "chat-ids", "conversation-id", "conversation-ids", "group-id", "group-ids"], "scope_strict": true, "note": "The target is a list of mentioned openConversationIds. Explicit open-conversation spellings preserve the list value; numeric groupId and role-free conversation spellings are rejected."}, - "doc comment update": {"scoped_aliases": {"mentioned-open-conversation-ids": "mentioned-open-conversation-id", "open-conversation-id": "mentioned-open-conversation-id", "open-conversation-ids": "mentioned-open-conversation-id"}, "block": ["chat-id", "chat-ids", "conversation-id", "conversation-ids", "group-id", "group-ids"], "scope_strict": true, "note": "The target is a list of mentioned openConversationIds. Explicit open-conversation spellings preserve the list value; numeric groupId and role-free conversation spellings are rejected."}, - "doc +comment-create": {"block": ["chat-id", "chat-ids", "conversation-id", "conversation-ids", "group-id", "group-ids", "mentioned-open-conversation-id", "mentioned-open-conversation-ids", "open-conversation-id", "open-conversation-ids"], "note": "This shortcut has no group-mention flag or payload field. Group-conversation spellings are blocked instead of inventing unsupported capability; route to the stable doc comment command when group mentions are required."}, - "doc +comment-reply": {"block": ["chat-id", "chat-ids", "conversation-id", "conversation-ids", "group-id", "group-ids", "mentioned-open-conversation-id", "mentioned-open-conversation-ids", "open-conversation-id", "open-conversation-ids"], "note": "This shortcut has no group-mention flag or payload field. Group-conversation spellings are blocked instead of inventing unsupported capability; route to the stable doc comment command when group mentions are required."}, - "doc media insert": {"scoped_aliases": {"ref-block-id": "ref-block", "reference-block-id": "ref-block"}, "block": ["before-block-id", "parent-block", "parent-block-id"], "ambiguous": ["block-id"], "scope_strict": true, "note": "Media insertion supports a reference block but no parent-block role. --before-block-id additionally needs --where before; role-free --block-id is left ambiguous."}, - "doc read": {"block": ["before-block-id", "parent-block-id", "ref-block-id", "reference-block-id"], "ambiguous": ["block-id"], "note": "A section read requires --scope section plus a start/end boundary. A role-free --block-id cannot be reduced to one flag without inventing the missing scope/boundary role."}, - "doc export get": {"scoped_aliases": {"export-job-id": "job-id"}, "block": ["doc-id", "document-id", "file-id", "node", "node-id", "url"], "scope_strict": true, "note": "This command queries one export jobId. Document node identifiers are rejected; native hidden --task-id remains the command's reviewed add-only compatibility alias for --job-id."}, - "doc import get": {"scoped_aliases": {"import-task-id": "task-id"}, "block": ["doc-id", "document-id", "file-id", "job-id", "node", "node-id", "url"], "scope_strict": true, "note": "This command queries one import taskId. Document node identifiers and export jobId spellings are different entities and are rejected."}, - "doc +share-doc": {"block": ["doc", "doc-id", "document-id", "file-id", "id", "node", "node-id"], "note": "The real --url requires a shareable document link. Name-only normalization cannot turn a document nodeId into a URL, so identifier spellings are rejected with guidance to provide --url."}, - "doc update": {"block": ["stdin", "version", "version-no", "version-number"], "note": "--revision is an optimistic-concurrency revision, not a historical document version number. Version spellings must not reduce to --revision. --stdin is not a real switch: stdin input is expressed as --content -, which requires a value-form transformation outside central name aliases."}, - "report outbox list": {"block": ["template-type"], "note": "type vs name are different fields"}, - "chat group members add-bot": {"bind": {"id": "open_conversation_id"}}, - "chat group members list-by-ids": {"bind": {"id": "open_conversation_id", "users": "open_dingtalk_ids"}, "block": ["user-id", "user-ids"], "note": "This command's --id carries openConversationId, while --users carries an openDingTalkId list."}, - "chat group members remove-bot": {"bind": {"id": "open_conversation_id"}}, - "chat +send-to-group": {"bind": {"group": "group_name"}, "note": "The real --group is a group-name search keyword on this shortcut, not an identifier."}, - "chat group share-invite": {"scoped_aliases": {"source-conversation-id": "source", "target-conversation-id": "target"}, "block": ["group-id", "group-ids", "user", "user-id", "userid", "uid", "staff-id"], "ambiguous": ["conversation-id", "open-conversation-id", "group", "chat", "chat-id", "id"], "note": "A role-free conversation identifier cannot choose between source and target; --receiver requires openDingTalkId and must not accept userId spellings."}, - "chat message combine-forward": {"scoped_aliases": {"src-open-cid": "src-conversation-id", "dest-open-cid": "dest-conversation-id", "source-conversation-id": "src-conversation-id", "target-conversation-id": "dest-conversation-id", "destination-conversation-id": "dest-conversation-id"}, "block": ["group-id", "group-ids"], "ambiguous": ["conversation-id", "open-conversation-id", "group", "chat", "chat-id", "id"], "note": "Source and destination conversation roles are preserved; a role-free identifier is ambiguous."}, - "chat message forward": {"scoped_aliases": {"src-open-cid": "src-conversation-id", "dest-open-cid": "dest-conversation-id", "source-conversation-id": "src-conversation-id", "target-conversation-id": "dest-conversation-id", "destination-conversation-id": "dest-conversation-id"}, "block": ["group-id", "group-ids"], "ambiguous": ["conversation-id", "open-conversation-id", "group", "chat", "chat-id", "id"], "note": "Source and destination conversation roles are preserved; a role-free identifier is ambiguous."}, - "chat message forward-topic": {"scoped_aliases": {"src-open-conversation-id": "src-conversation-id", "dest-open-conversation-id": "dest-conversation-id", "source-conversation-id": "src-conversation-id", "target-conversation-id": "dest-conversation-id", "destination-conversation-id": "dest-conversation-id", "src-open-message-id": "src-msg-id", "source-message-id": "src-msg-id"}, "block": ["group-id", "group-ids", "msg-id", "message-id", "open-message-id"], "ambiguous": ["conversation-id", "open-conversation-id", "group", "chat", "chat-id", "id"], "note": "Conversation and message source/destination roles are preserved; role-free identifiers are rejected."}, - "chat +conversation-info": {"block": ["user", "user-id", "userid", "uid", "staff-id"], "note": "This shortcut accepts --open-dingtalk-id, not userId; use stable chat conversation-info when userId resolution is needed."}, - "chat group create": {"block": ["user-id", "open-dingtalk-id"], "note": "The real --users is a list and may contain mixed identifier domains."}, - "chat +chat-set-admin": {"block": ["user-id", "open-dingtalk-id"], "note": "The real --users is a mixed userId/openDingTalkId list."}, - "chat +messages-read-status": {"block": ["user-id", "open-dingtalk-id"], "note": "The real --users is a mixed userId/openDingTalkId list."}, - "chat category create-smart": {"bind": {"members": "open_dingtalk_ids"}, "scoped_aliases": {"title": "name"}, "note": "The real --members is an openDingTalkId list; the reviewed title/name alias is exact to the category display name."}, - "chat group audit-join-validation": {"ambiguous": ["user", "user-id", "userid", "uid", "staff-id"], "note": "A role-free user identifier cannot choose between the required --applicant and --inviter roles."}, - "chat message reply": {"block": ["user", "user-id", "userid", "uid", "staff-id"], "note": "The required --ref-sender is a role-specific openDingTalkId and must not accept generic userId spellings."}, - "chat message send-card": {"block": ["user", "user-id", "userid", "uid", "staff-id"], "ambiguous": ["chat", "chat-id", "open-conversation-id"], "note": "The real --receiver is a role-specific openDingTalkId and must not accept generic userId spellings. Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, - "chat +category-add-conversation": {"block": ["category-id"], "note": "The real --category-ids is a list; a singular category ID is not promoted automatically."}, - "chat +category-list-conversations": {"block": ["category-ids"], "note": "The real --category-id is singular; list cardinality is not reduced automatically."}, - "chat +category-remove-conversation": {"block": ["category-id"], "note": "The real --category-ids is a list; a singular category ID is not promoted automatically."}, - "chat +chat-add-bot": {"bind": {"id": "open_conversation_id"}, "note": "The real --id is the group's openConversationId; robotCode and openBotId remain different domains."}, - "chat +chat-audit-join": {"scoped_aliases": {"applicant-user-id": "applicant", "inviter-user-id": "inviter"}, "ambiguous": ["user", "user-id", "userid", "uid", "staff-id"], "scope_strict": true, "note": "A role-free user identifier cannot choose between applicant and inviter."}, - "chat +chat-create": {"block": ["user-id", "open-dingtalk-id"], "note": "The real --users field is a list and may contain mixed identifier domains; a singular value is not promoted."}, - "chat +chat-get-by-id": {"block": ["group", "conversation-id", "chat", "chat-id", "open-conversation-id", "conversation-ids", "open-conversation-ids", "group-name", "name", "id"], "note": "The real --group-id is numeric groupId; no CID or group-name spelling can be value-preservingly converted."}, - "chat +chat-members-get": {"bind": {"id": "open_conversation_id", "users": "open_dingtalk_ids"}, "block": ["group", "group-name", "user-id", "user-ids"], "note": "The real --id is openConversationId and --users is an openDingTalkId list. The observed --group spelling carried a natural group name and is blocked; explicit CID spellings and --chat remain value-preserving aliases."}, - "chat +chat-members-list": {"scoped_aliases": {"chat-id": "conversation-id", "id": "conversation-id"}, "block": ["query", "keyword", "group-id", "group-ids", "conversation-ids", "open-conversation-ids"], "scope_strict": true, "note": "Native --chat/--open-conversation-id stay native; member filtering by query is unsupported and group-name resolution stays on --group/--chat-query."}, - "chat +chat-mute-member": {"scoped_aliases": {"user-ids": "users", "open-dingtalk-ids": "users"}, "block": ["user", "user-id", "open-dingtalk-id"], "scope_strict": true, "note": "The target accepts a mixed identifier list; list spellings preserve values, but singular inputs are not promoted."}, - "chat +chat-remove-bot": {"bind": {"id": "open_conversation_id"}, "note": "The real --id is openConversationId; --bot-id is separately governed by open_bot_id."}, - "chat +chat-role-remove": {"block": ["role-ids"], "note": "The command removes one role ID; list cardinality is not reduced."}, - "chat +chat-role-remove-user": {"scoped_aliases": {"user-id": "user", "open-dingtalk-id": "user"}, "block": ["role-id"], "scope_strict": true, "note": "The single --user accepts either identifier domain; --role-ids remains a list."}, - "chat +chat-transfer-owner": {"scoped_aliases": {"user-id": "new-owner", "open-dingtalk-id": "new-owner"}, "scope_strict": true, "note": "The only user role is the new owner, and the target accepts either userId or openDingTalkId without changing the value."}, - "chat +chat-update": {"scoped_aliases": {"conversation-id": "group", "open-conversation-id": "group", "chat-id": "group", "title": "name", "new-title": "name"}, "block": ["id", "group-id", "group-ids", "conversation-ids", "open-conversation-ids"], "scope_strict": true, "note": "--group accepts a name or CID, so only explicit CID spellings are mapped; generic --id is blocked."}, - "chat +conversation-set-top": {"scoped_aliases": {"open-conversation-id": "conversation-id", "chat-id": "conversation-id", "open-conversation-ids": "conversation-ids", "chat-ids": "conversation-ids"}, "block": ["group", "groups", "group-id", "group-ids", "top", "set-top"], "scope_strict": true, "note": "Singular/list cardinality stays explicit; top/set-top cannot be rewritten to the inverse --off switch."}, - "chat +feed-group-query-item": {"scoped_aliases": {"open-conversation-ids": "conversation-ids", "chat-ids": "conversation-ids"}, "block": ["group", "groups", "group-id", "group-ids", "conversation-id", "open-conversation-id"], "scope_strict": true, "note": "The real field is an openConversationId list; group names and singular IDs are not converted."}, - "chat +flag-list": {"scoped_aliases": {"limit": "page-size"}, "block": ["max", "max-results", "max-size", "count", "page", "per-page"], "scope_strict": true, "note": "Native --page-size is the canonical page bound, native --size is its command-owned compatibility alias, and --limit is reviewed as value-preservingly equivalent to --page-size; total-count and page-number spellings are not equivalent."}, - "chat +messages-batch-recall-by-bot": {"block": ["msg-id", "message-id", "open-message-id", "msg-ids", "message-ids", "open-message-ids"], "note": "--keys carries processQueryKey values returned by bot sending; it is not an openMessageId field."}, - "chat +messages-combine-forward": {"scoped_aliases": {"src-open-cid": "src-conversation-id", "src-open-conversation-id": "src-conversation-id", "source-conversation-id": "src-conversation-id", "dest-open-cid": "dest-conversation-id", "dest-open-conversation-id": "dest-conversation-id", "target-conversation-id": "dest-conversation-id", "destination-conversation-id": "dest-conversation-id"}, "block": ["group-id", "group-ids"], "ambiguous": ["conversation-id", "open-conversation-id", "group", "chat", "chat-id", "id"], "scope_strict": true, "note": "Source and destination conversation roles remain explicit; role-free CID spellings cannot choose a side."}, - "chat +messages-forward": {"scoped_aliases": {"src-open-cid": "src-conversation-id", "src-open-conversation-id": "src-conversation-id", "source-conversation-id": "src-conversation-id", "dest-open-cid": "dest-conversation-id", "dest-open-conversation-id": "dest-conversation-id", "target-conversation-id": "dest-conversation-id", "destination-conversation-id": "dest-conversation-id", "src-open-message-id": "msg-id", "source-message-id": "msg-id"}, "block": ["group-id", "group-ids"], "ambiguous": ["conversation-id", "open-conversation-id", "group", "chat", "chat-id", "id"], "scope_strict": true, "note": "The message role is uniquely the source message, but source/destination conversation roles cannot be inferred from a generic CID."}, - "chat +messages-forward-topic": {"scoped_aliases": {"src-open-conversation-id": "src-conversation-id", "source-conversation-id": "src-conversation-id", "dest-open-conversation-id": "dest-conversation-id", "target-conversation-id": "dest-conversation-id", "destination-conversation-id": "dest-conversation-id", "src-open-message-id": "src-msg-id", "source-message-id": "src-msg-id"}, "block": ["group-id", "group-ids", "msg-id", "message-id", "open-message-id", "msg-ids", "message-ids", "open-message-ids"], "ambiguous": ["conversation-id", "open-conversation-id", "group", "chat", "chat-id", "id"], "scope_strict": true, "note": "Source and destination conversation roles and the source-message role remain explicit; role-free message IDs and list cardinality are not inferred."}, - "chat +messages-list": {"scoped_aliases": {"start": "time"}, "block": ["before", "before-time", "end", "direction", "page-all", "count", "max", "max-results", "max-size", "page-size"], "scope_strict": true, "note": "start preserves the same boundary value; before/direction require multi-parameter or value transforms and page-all requires iteration. Native --conversation-id/--id/--size remain native."}, - "chat +messages-recall-by-bot": {"block": ["msg-id", "message-id", "open-message-id", "msg-ids", "message-ids", "open-message-ids"], "note": "--keys carries processQueryKey values, not openMessageId values."}, - "chat +messages-reply": {"scoped_aliases": {"msg-id": "ref-msg-id", "open-message-id": "ref-msg-id"}, "block": ["msg-ids", "message-ids", "open-message-ids"], "scope_strict": true, "note": "The visible --group carries the openConversationId; --conversation-id remains its command-owned typed compatibility alias, while the reviewed command-scoped concept preserves --chat/--chat-id/--open-conversation-id compatibility. The only message role is the referenced message, plural IDs are not accepted, and native --message-id stays native."}, - "chat +messages-resource-download": {"block": ["download-dir"], "note": "--output may be a file or directory under workspace safety rules; a download directory cannot be assumed equivalent."}, - "doc +access-change": {"scoped_aliases": {"space": "workspace", "space-id": "workspace"}, "scope_strict": true, "note": "Command-scoped compatibility published before the workspace/storage-space concept split: these spellings keep passing their value unchanged to this Doc command's --workspace flag and do not establish global equivalence with a numeric DingDrive storage space."}, - "doc +access-grant": {"scoped_aliases": {"space": "workspace", "space-id": "workspace"}, "block": ["target-user-id", "target-user-ids", "user-id", "user-ids"], "ambiguous": ["target-user", "user", "users"], "scope_strict": true, "note": "The real --to accepts collaborator names and resolves them before granting access. Explicit ID spellings cannot be passed through unchanged, while role-free user spellings do not prove whether their values are names or IDs. The command-scoped --space/--space-id aliases preserve previously published Doc workspace compatibility without making workspace and numeric DingDrive storage-space values globally equivalent."}, - "doc +access-revoke": {"scoped_aliases": {"space": "workspace", "space-id": "workspace"}, "scope_strict": true, "note": "Command-scoped compatibility published before the workspace/storage-space concept split: these spellings keep passing their value unchanged to this Doc command's --workspace flag and do not establish global equivalence with a numeric DingDrive storage space."}, - "doc +create": {"scoped_aliases": {"folder-id": "folder", "parent-folder": "folder", "parent-folder-id": "folder", "parent-node-id": "folder", "space": "workspace", "space-id": "workspace"}, "block": ["content-file", "parent-id"], "scope_strict": true, "note": "--content-format is value-preservingly normalized to --doc-format. A raw --content-file path cannot become --content without adding the required @file transform, so it is blocked with guidance to use @relative-path or stable doc create. The command-scoped --space/--space-id aliases preserve previously published Doc workspace compatibility without making workspace and numeric DingDrive storage-space values globally equivalent."}, - "doc +create-from-template": {"scoped_aliases": {"folder-id": "folder", "parent-folder": "folder", "parent-folder-id": "folder", "parent-node-id": "folder", "space": "workspace", "space-id": "workspace"}, "block": ["parent-id"], "scope_strict": true, "note": "This exact Doc command expects a Doc folder nodeId/dentryUuid/URL. Reviewed folder spellings preserve that value; generic --parent-id stays blocked because it may carry a numeric Drive dentryId. The command-scoped --space/--space-id aliases preserve previously published Doc workspace compatibility without making workspace and numeric DingDrive storage-space values globally equivalent."}, - "doc +import": {"scoped_aliases": {"folder-id": "folder", "parent-folder": "folder", "parent-folder-id": "folder", "parent-node-id": "folder", "space": "workspace", "space-id": "workspace"}, "block": ["parent-id"], "scope_strict": true, "note": "This exact Doc command expects a Doc folder nodeId/dentryUuid/URL. Reviewed folder spellings preserve that value; generic --parent-id stays blocked because it may carry a numeric Drive dentryId. The command-scoped --space/--space-id aliases preserve previously published Doc workspace compatibility without making workspace and numeric DingDrive storage-space values globally equivalent."}, - "doc create": {"scoped_aliases": {"space": "workspace", "space-id": "workspace"}, "scope_strict": true, "note": "Command-scoped compatibility published before the workspace/storage-space concept split: these spellings keep passing their value unchanged to this Doc command's --workspace flag and do not establish global equivalence with a numeric DingDrive storage space."}, - "doc file create": {"scoped_aliases": {"space": "workspace", "space-id": "workspace"}, "scope_strict": true, "note": "Command-scoped compatibility published before the workspace/storage-space concept split: these spellings keep passing their value unchanged to this Doc command's --workspace flag and do not establish global equivalence with a numeric DingDrive storage space."}, - "doc import": {"scoped_aliases": {"space": "workspace", "space-id": "workspace"}, "scope_strict": true, "note": "Command-scoped compatibility published before the workspace/storage-space concept split: these spellings keep passing their value unchanged to this Doc command's --workspace flag and do not establish global equivalence with a numeric DingDrive storage space."}, - "doc template apply": {"scoped_aliases": {"space": "workspace", "space-id": "workspace"}, "scope_strict": true, "note": "Command-scoped compatibility published before the workspace/storage-space concept split: these spellings keep passing their value unchanged to this Doc command's --workspace flag and do not establish global equivalence with a numeric DingDrive storage space."}, - "doc +update": {"scoped_aliases": {"mode": "command", "doc-id": "node", "document-id": "node", "file-id": "node", "node-id": "node", "url": "node"}, "block": ["content-file"], "ambiguous": ["element"], "scope_strict": true, "note": "--mode append/overwrite is the same operation selector subset as --command and preserves its value. --content-file is blocked because +update requires @relative-path or stdin and central aliases cannot read/transform a file value. --element cannot choose between document content, a block target, or an insertion reference."}, - "doc +inspect": {"scoped_aliases": {"include-access": "include-permissions", "include-member": "include-permissions", "include-members": "include-permissions", "include-versions": "include-history"}, "block": ["include", "include-blocks", "include-content", "include-info", "include-meta", "include-metadata"], "scope_strict": true, "note": "Access/member spellings denote the same optional permission list, and versions/history denote the same history section. Generic --include needs value-dependent expansion; base metadata is already returned; block/content reads belong to +fetch, so those spellings stop before fuzzy correction or dispatch."}, - "doc +fetch": {"scoped_aliases": {"start-block": "start-block-id", "end-block": "end-block-id"}, "block": ["content-format", "doc-format", "range"], "ambiguous": ["block-id"], "scope_strict": true, "note": "Start/end block roles are preserved. A role-free --block-id cannot choose a range/section boundary. --range is an invented composite argument observed alongside --scope range and cannot be split into block IDs by name-only normalization; content-format spellings do not map to the independent --detail contract."}, - "doc +export": {"block": ["wait"], "scope_strict": true, "note": "The shortcut already submits, polls, and downloads in one workflow. A generic --wait value cannot be converted into the distinct integer --max-polls contract by parameter-name normalization."}, - "doc +media-download": {"scoped_aliases": {"doc": "node", "doc-id": "node", "document-id": "node", "node-id": "node"}, "ambiguous": ["file-id", "url"], "scope_strict": true, "note": "This command has both document-node and attachment-resource roles. Strong document spellings map to --node; --file-id and --url cannot safely choose between document and media identities."}, - "doc +media-insert": {"scoped_aliases": {"doc": "node", "doc-id": "node", "document-id": "node", "node-id": "node"}, "block": ["after-block-id", "before-block-id"], "ambiguous": ["file-id", "url"], "scope_strict": true, "note": "This command has both document-node and local-media roles. Strong document spellings map to --node; --file-id and --url cannot safely choose a role. Before/after block spellings each require expansion into both --ref-block and --where, which name-only normalization cannot perform."}, - "doc +media-list": {"scoped_aliases": {"doc": "node", "doc-id": "node", "document-id": "node", "node-id": "node"}, "ambiguous": ["file-id", "url"], "scope_strict": true, "note": "The command lists media inside one document, so only strong document spellings map to --node. File and URL spellings remain role-ambiguous."}, - "doc +media-preview": {"scoped_aliases": {"doc": "node", "doc-id": "node", "document-id": "node", "node-id": "node"}, "ambiguous": ["file-id", "url"], "scope_strict": true, "note": "This command has both document-node and attachment-resource roles. Strong document spellings map to --node; --file-id and --url cannot safely choose a role."}, - "doc +resource-delete": {"scoped_aliases": {"doc": "node", "doc-id": "node", "document-id": "node", "node-id": "node"}, "ambiguous": ["file-id", "url"], "scope_strict": true, "note": "This command removes a document resource while targeting the document by --node. File and URL spellings do not uniquely identify that document role."}, - "doc +resource-download": {"scoped_aliases": {"doc": "node", "doc-id": "node", "document-id": "node", "node-id": "node"}, "ambiguous": ["file-id", "url"], "scope_strict": true, "note": "This command downloads a document resource while targeting the document by --node. File and URL spellings do not uniquely identify that document role."}, - "doc +resource-update": {"scoped_aliases": {"doc": "node", "doc-id": "node", "document-id": "node", "node-id": "node"}, "ambiguous": ["file-id", "url"], "scope_strict": true, "note": "This command has document-node, local-file, and HTTPS image URL roles. Only strong document spellings map to --node; --file-id and --url must stop as ambiguous."}, - "doc +share": {"block": ["doc", "doc-id", "document-id", "file-id", "id", "node", "node-id"], "note": "The real --url requires a shareable document link. Name-only normalization cannot turn a node identifier into a URL, so identifier spellings are rejected with guidance to provide --url."}, - "doc +grant-and-share": {"scoped_aliases": {"doc": "node", "doc-id": "node", "document-id": "node", "file-id": "node", "node-id": "node", "space": "workspace", "space-id": "workspace"}, "scope_strict": true, "note": "This workflow has two different real URL roles: --node selects the document for access control and --url is the shareable link sent to recipients. Explicit document-ID spellings map only to --node; --url remains native. The command-scoped --space/--space-id aliases preserve previously published Doc workspace compatibility without making workspace and numeric DingDrive storage-space values globally equivalent."}, - "doc +version-save": {"block": ["message", "title"], "scope_strict": true, "note": "The current snapshot API accepts only the document target. Version title/message metadata are unsupported and cannot be represented by another existing flag."}, - "drive copy": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node", "directory-id": "folder", "source-node-id": "node", "source-file-id": "node", "target-folder-id": "folder", "destination-folder-id": "folder", "target-workspace-id": "workspace", "destination-workspace-id": "workspace"}, "scope_strict": true, "note": "Source node and destination folder/workspace are different roles; role-free target IDs stop before write dispatch. --name is not a rename field on this command and must not be fuzzy-corrected to --node.", "block": ["dentry-id", "destination-node-id", "dingdrive-space-id", "drive-space-id", "name", "source-folder-id", "space-id", "storage-space-id"], "ambiguous": ["destination-id", "target-id"]}, - "drive cover": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node"}, "scope_strict": true, "note": "The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.", "block": ["dentry-id"]}, - "drive download-version": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node", "chunk-size": "part-size", "concurrency": "parallel", "parallelism": "parallel"}, "scope_strict": true, "note": "Output path, chunk size, and concurrency names preserve values; local input and remote folder roles remain blocked.", "block": ["dentry-id", "file", "file-path", "folder", "folder-id"]}, - "drive move": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node", "directory-id": "folder", "source-node-id": "node", "source-file-id": "node", "target-folder-id": "folder", "destination-folder-id": "folder", "target-workspace-id": "workspace", "destination-workspace-id": "workspace"}, "scope_strict": true, "note": "Source node and destination folder/workspace are different roles; role-free target IDs stop before write dispatch. --name is not a rename field on this command and must not be fuzzy-corrected to --node.", "block": ["dentry-id", "destination-node-id", "dingdrive-space-id", "drive-space-id", "name", "source-folder-id", "space-id", "storage-space-id"], "ambiguous": ["destination-id", "target-id"]}, - "drive permission add": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node", "member-user-ids": "users", "collaborator-ids": "users", "target-user-ids": "users", "target-node-id": "node"}, "scope_strict": true, "note": "The user list denotes target collaborators on this exact node permission command; the native singular compatibility spellings remain native.", "block": ["dentry-id", "dingdrive-space-id", "drive-space-id", "space-id", "storage-space-id"]}, - "drive permission apply": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node", "approver-user-ids": "users", "approver-ids": "users", "target-node-id": "node", "apply-reason": "reason", "notification-mode": "notify-mode"}, "scope_strict": true, "note": "The user list denotes approvers, not target collaborators; values and notification enum are passed unchanged.", "block": ["dentry-id"]}, - "drive permission apply-info": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node"}, "scope_strict": true, "note": "The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.", "block": ["dentry-id"]}, - "drive permission list": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node", "role-filter": "filter-role", "permission-role-filter": "filter-role", "target-node-id": "node"}, "scope_strict": true, "note": "Filtering by a role is not the same as granting/updating a role.", "block": ["dentry-id", "dingdrive-space-id", "drive-space-id", "permission", "role", "space-id", "storage-space-id"]}, - "drive permission remove": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node", "member-user-ids": "users", "collaborator-ids": "users", "target-user-ids": "users", "target-node-id": "node"}, "scope_strict": true, "note": "The user list denotes target collaborators on this exact node permission command; the native singular compatibility spellings remain native.", "block": ["dentry-id", "dingdrive-space-id", "drive-space-id", "space-id", "storage-space-id"]}, - "drive permission transfer-owner": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node", "target-node-id": "node", "target-workspace-id": "workspace", "old-owner-role": "reserve-role", "keep-role": "reserve-role", "new-owner-id": "new-owner", "new-owner-user-id": "new-owner"}, "scope_strict": true, "note": "Node/workspace target and new/old owner roles are distinct on this irreversible command; role-free names stop before dispatch.", "block": ["current-owner", "dentry-id", "dingdrive-space-id", "drive-space-id", "space-id", "storage-space-id", "user-ids", "users"], "ambiguous": ["owner", "owner-user-id", "target-id", "user-id"]}, - "drive permission update": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node", "member-user-ids": "users", "collaborator-ids": "users", "target-user-ids": "users", "target-node-id": "node"}, "scope_strict": true, "note": "The user list denotes target collaborators on this exact node permission command; the native singular compatibility spellings remain native.", "block": ["dentry-id", "dingdrive-space-id", "drive-space-id", "space-id", "storage-space-id"]}, - "drive publish get": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node"}, "scope_strict": true, "note": "The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.", "block": ["dentry-id"]}, - "drive publish set": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node", "public-permission": "permission", "public-role": "permission"}, "scope_strict": true, "note": "Internet-public permission is not the same as a direct collaborator role.", "block": ["access-role", "dentry-id", "permission-role", "role"]}, - "drive publish unset": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node"}, "scope_strict": true, "note": "The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.", "block": ["dentry-id"]}, - "drive rename": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node", "file-name": "name", "display-name": "name", "new-name": "name"}, "scope_strict": true, "note": "The name is this exact folder/node display name; search query and local path are different roles.", "block": ["dentry-id"]}, - "drive revert": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node"}, "scope_strict": true, "note": "The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.", "block": ["dentry-id"]}, - "drive shortcut": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node", "directory-id": "folder", "source-node-id": "node", "source-file-id": "node", "target-folder-id": "folder", "destination-folder-id": "folder", "target-workspace-id": "workspace", "destination-workspace-id": "workspace"}, "scope_strict": true, "note": "Source node and destination folder/workspace are different roles; role-free target IDs stop before write dispatch. --name is not a rename field on this command and must not be fuzzy-corrected to --node.", "block": ["dentry-id", "destination-node-id", "dingdrive-space-id", "drive-space-id", "name", "source-folder-id", "space-id", "storage-space-id"], "ambiguous": ["destination-id", "target-id"]}, - "drive star add": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node"}, "scope_strict": true, "note": "The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.", "block": ["dentry-id"]}, - "drive star remove": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node"}, "scope_strict": true, "note": "The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.", "block": ["dentry-id"]}, - "drive stats": {"scoped_aliases": {"document-id": "node", "dentry-uuid": "node"}, "scope_strict": true, "note": "The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.", "block": ["dentry-id"]}, - "drive +cover": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node", "doc-id": "node", "document-id": "node", "url": "node", "document-url": "node", "id": "node"}, "block": ["dentry-id", "doc", "folder", "folder-id", "name"], "scope_strict": true, "note": "This shortcut calls the same get_cover nodeId interface as drive cover, so its reviewed ID/URL aliases are preserved unchanged. Numeric dentryId, folder-role spellings and --name remain protected."}, - "drive +copy": {"scoped_aliases": {"dentry-uuid": "node", "directory-id": "folder", "source-node-id": "node", "source-file-id": "node", "target-folder-id": "folder", "destination-folder-id": "folder", "target-workspace-id": "workspace", "destination-workspace-id": "workspace"}, "block": ["dentry-id", "destination-node-id", "dingdrive-space-id", "document-url", "drive-space-id", "name", "source-folder-id", "space-id", "storage-space-id"], "scope_strict": true, "note": "Source node and destination folder/workspace are different roles; role-free target IDs stop before write dispatch. --name is not a rename field on this command and must not be fuzzy-corrected to --node.", "ambiguous": ["destination-id", "target-id"]}, - "drive +create-folder": {"scoped_aliases": {"directory-id": "folder", "parent-directory-id": "folder", "parent-folder-id": "folder", "folder-name": "name", "display-name": "name", "new-name": "name"}, "block": ["dentry-id", "parent-id", "knowledge-base-id", "wiki-workspace-id", "workspace", "workspace-id"], "scope_strict": true, "note": "The new shortcut creates a numeric DingDrive-space folder. Folder display name, parent dentryUuid and numeric storage space are separate roles; knowledge-base workspace spellings are not accepted."}, - "drive +create-shortcut": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node", "doc-id": "node", "document-id": "node", "url": "node", "document-url": "node", "directory-id": "folder", "source-node-id": "node", "source-file-id": "node", "target-folder-id": "folder", "destination-folder-id": "folder", "target-workspace-id": "workspace", "destination-workspace-id": "workspace"}, "block": ["dentry-id", "destination-node-id", "dingdrive-space-id", "doc", "drive-space-id", "name", "source-folder-id", "space-id", "storage-space-id"], "scope_strict": true, "note": "Source node and destination folder/workspace are different roles. The source ID/URL aliases match drive shortcut and pass through unchanged; generic target/id spellings remain ambiguous, and storage-space IDs are not knowledge-base workspace IDs.", "ambiguous": ["destination-id", "id", "target-id"]}, - "drive +delete": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node", "folder": "node", "folder-id": "node"}, "block": ["dentry-id", "doc", "doc-id", "document-id", "document-url", "id", "name", "url"], "scope_strict": true, "note": "Delete targets one already confirmed Drive file or folder dentryUuid. Folder spellings are the same single target role; numeric dentryId, unreviewed Doc URL spellings and --name stop before confirmation or write dispatch."}, - "drive +download": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node"}, "block": ["dentry-id", "doc", "doc-id", "document-id", "document-url", "file", "file-path", "folder", "folder-id", "id", "knowledge-base-id", "name", "url", "wiki-workspace-id", "workspace", "workspace-id"], "scope_strict": true, "note": "The remote ordinary-file node and local output path are different roles. Node-ID spelling is accepted, while Doc URLs, local input paths, folders, knowledge-base workspaces and numeric dentryId values are not interchangeable."}, - "drive +info": {"scoped_aliases": {"dentry-uuid": "node"}, "block": ["dentry-id", "document-url", "knowledge-base-id", "wiki-workspace-id", "workspace", "workspace-id"], "scope_strict": true, "note": "This command has only a numeric DingDrive space target; knowledge-base workspace spellings are a different value domain."}, - "drive +inspect": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node", "doc-id": "node", "document-id": "node", "folder": "node", "folder-id": "node", "include-statistics": "include-stats", "include-publish-status": "include-publish", "include-public-status": "include-publish", "include-thumbnail": "include-cover"}, "block": ["dentry-id", "doc", "document-url", "id", "include", "include-content", "include-history", "include-permissions", "name", "url"], "scope_strict": true, "note": "Drive inspect accepts one file, folder or document node ID and can aggregate only stats, public-publish status and cover. URL spellings, Doc inspect section names and a generic --include remain protected because this shortcut does not declare URL input or value splitting."}, - "drive +list": {"ambiguous": ["root-id", "space"], "scoped_aliases": {"directory-id": "folder", "parent-folder-id": "folder", "order-field": "order-by", "sort-by": "order-by", "sort-field": "order-by"}, "block": ["dentry-id", "knowledge-base-id", "wiki-workspace-id", "workspace", "workspace-id"], "scope_strict": true, "note": "This shortcut accepts one numeric DingDrive space and an optional parent dentryUuid; it does not accept a knowledge-base workspace. Sort field and direction remain separate roles."}, - "drive +move": {"scoped_aliases": {"dentry-uuid": "node", "directory-id": "folder", "source-node-id": "node", "source-file-id": "node", "target-folder-id": "folder", "destination-folder-id": "folder", "target-workspace-id": "workspace", "destination-workspace-id": "workspace"}, "block": ["dentry-id", "destination-node-id", "dingdrive-space-id", "document-url", "drive-space-id", "name", "source-folder-id", "space-id", "storage-space-id"], "scope_strict": true, "note": "Source node and destination folder/workspace are different roles; role-free target IDs stop before write dispatch. --name is not a rename field on this command and must not be fuzzy-corrected to --node.", "ambiguous": ["destination-id", "target-id"]}, - "drive +publish-get": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node", "doc-id": "node", "document-id": "node", "url": "node", "document-url": "node", "id": "node"}, "block": ["dentry-id", "doc", "folder", "folder-id", "name"], "scope_strict": true, "note": "The shortcut calls the same publication-status fileId interface as drive publish get, so its reviewed ID/URL aliases are preserved unchanged. Numeric dentryId and folder/name roles remain protected."}, - "drive +publish-unset": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node", "doc-id": "node", "document-id": "node", "url": "node", "document-url": "node", "id": "node"}, "block": ["dentry-id", "doc", "folder", "folder-id", "name"], "scope_strict": true, "note": "The shortcut calls the same set_file_publish fileId interface as drive publish unset, so its reviewed ID/URL aliases are preserved unchanged. Numeric dentryId and folder/name roles remain protected before confirmation."}, - "drive +recycle-restore": {"bind": {"id": "drive_recycle_item_id"}, "block": ["file-id", "folder-id", "node", "node-id", "space-id", "workspace-id"], "scope_strict": true, "note": "The real --id is a recycleItemId returned by drive +recycle-list, not a normal Drive node ID."}, - "drive +rename": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node", "doc-id": "node", "document-id": "node", "url": "node", "document-url": "node", "id": "node", "folder": "node", "folder-id": "node", "file-name": "name", "display-name": "name", "new-name": "name"}, "block": ["dentry-id"], "scope_strict": true, "note": "The existing document, file or folder node and the requested new display name are separate required roles. Node ID/URL aliases match drive rename and pass through unchanged; numeric dentryId remains protected."}, - "drive delete": {"scoped_aliases": {"dentry-uuid": "node"}, "block": ["dentry-id", "document-url"], "scope_strict": true, "note": "This command publicly accepts an ID-only Drive node; dentry spellings preserve the value and URL-specific spellings remain protected."}, - "drive download": {"scoped_aliases": {"dentry-uuid": "node", "chunk-size": "part-size", "concurrency": "parallel", "parallelism": "parallel"}, "block": ["dentry-id", "document-url", "file", "file-path", "folder", "folder-id", "knowledge-base-id", "wiki-workspace-id", "workspace", "workspace-id"], "scope_strict": true, "note": "Output path, chunk size, and concurrency names preserve values; local input and remote folder roles remain blocked."}, - "drive info": {"scoped_aliases": {"dentry-uuid": "node", "space": "space-id", "workspace": "space-id", "workspace-id": "space-id"}, "block": ["dentry-id", "document-url", "knowledge-base-id", "wiki-workspace-id"], "scope_strict": true, "note": "This command has only a numeric DingDrive space target. Its command-scoped --space/--workspace/--workspace-id aliases preserve compatibility published before the workspace/storage-space concept split and pass the value unchanged to --space-id; new commands must not infer that knowledge-base workspace IDs and numeric storage-space IDs are globally interchangeable."}, - "drive commit": {"scoped_aliases": {"directory-id": "folder", "parent-directory-id": "folder", "upload-session-id": "upload-id", "size-bytes": "file-size", "name": "file-name", "display-name": "file-name", "filename": "file-name", "upload-name": "file-name"}, "scope_strict": true, "note": "Upload session, file name, file size in bytes, parent folder, and storage space remain separate roles.", "block": ["knowledge-base-id", "wiki-workspace-id", "workspace", "workspace-id"]}, - "drive mkdir": {"scoped_aliases": {"directory-id": "folder", "parent-directory-id": "folder", "folder-name": "name", "display-name": "name", "new-name": "name"}, "scope_strict": true, "note": "The name is this exact folder/node display name; search query and local path are different roles.", "block": ["knowledge-base-id", "wiki-workspace-id", "workspace", "workspace-id"]}, - "drive upload-info": {"scoped_aliases": {"directory-id": "folder", "parent-directory-id": "folder", "content-type": "mime-type", "size-bytes": "file-size", "name": "file-name", "display-name": "file-name", "filename": "file-name", "upload-name": "file-name"}, "scope_strict": true, "note": "File metadata aliases preserve MIME and byte units; file path and upload session are different stages.", "block": ["knowledge-base-id", "wiki-workspace-id", "workspace", "workspace-id"]}, - "drive recycle list": {"block": ["knowledge-base-id", "wiki-workspace-id", "workspace", "workspace-id"], "scope_strict": true, "note": "This command has only a numeric DingDrive space target; knowledge-base workspace spellings are a different value domain."}, - "drive search": {"ambiguous": ["end", "from", "start", "time-from", "time-to", "to", "types"], "block": ["offset", "page"], "scope_strict": true, "note": "Created/modified ranges and file/content type arrays are separate roles; generic time/type names are not guessed."}, - "drive +search": {"ambiguous": ["end", "from", "start", "time-from", "time-to", "to", "types"], "block": ["offset", "page"], "scope_strict": true, "note": "Created/modified ranges and file/content type arrays are separate roles; generic time/type names are not guessed."}, - "drive +star-add": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node", "doc-id": "node", "document-id": "node", "url": "node", "document-url": "node", "id": "node"}, "block": ["dentry-id", "doc", "folder", "folder-id", "name"], "scope_strict": true, "note": "The shortcut calls the same mark_star nodeId interface as drive star add, so its reviewed document/node ID and URL aliases are preserved unchanged. Numeric dentryId and folder/name roles remain protected."}, - "drive +star-remove": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node", "doc-id": "node", "document-id": "node", "url": "node", "document-url": "node", "id": "node"}, "block": ["dentry-id", "doc", "folder", "folder-id", "name"], "scope_strict": true, "note": "The shortcut calls the same unmark_star nodeId interface as drive star remove, so its reviewed document/node ID and URL aliases are preserved unchanged. Numeric dentryId and folder/name roles remain protected."}, - "drive +stats": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node", "doc-id": "node", "document-id": "node", "url": "node", "document-url": "node", "id": "node"}, "block": ["dentry-id", "doc", "folder", "folder-id", "name"], "scope_strict": true, "note": "The shortcut calls the same get_node_stats nodeId interface as drive stats, so its reviewed ID/URL aliases are preserved unchanged. Numeric dentryId and folder/name roles remain protected."}, - "drive +version-download": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node"}, "block": ["dentry-id", "doc", "doc-id", "document-id", "document-url", "file", "file-path", "folder", "folder-id", "id", "name", "url"], "scope_strict": true, "note": "Ordinary-file node, positive historical version number and local output path are three distinct roles; revision and Doc URL spellings must not be guessed."}, - "drive +version-get": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node"}, "block": ["dentry-id", "doc", "doc-id", "document-id", "document-url", "folder", "folder-id", "id", "name", "url"], "scope_strict": true, "note": "This command reads one ordinary-file historical version by node ID and positive version number; document revision and URL roles are different."}, - "drive +version-history": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node"}, "block": ["dentry-id", "doc", "doc-id", "document-id", "document-url", "folder", "folder-id", "id", "name", "url"], "scope_strict": true, "note": "This command pages versions for one ordinary-file Drive node; document URLs and numeric dentryId are not accepted."}, - "drive +version-revert": {"scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node"}, "block": ["dentry-id", "doc", "doc-id", "document-id", "document-url", "folder", "folder-id", "id", "name", "url"], "scope_strict": true, "note": "The high-risk revert targets one ordinary-file Drive node and a positive historical version number. Doc revisions and URLs must stop before confirmation or write dispatch."}, - "drive recycle restore": {"bind": {"id": "drive_recycle_item_id"}, "block": ["file-id", "folder-id", "node", "node-id", "space-id", "workspace-id"], "scope_strict": true, "note": "The real --id is a recycle-item ID from recycle list, not a normal Drive node ID."}, - "drive star list": {"ambiguous": ["type", "types"], "scope_strict": true, "note": "Content types and resource types are separate arrays; a generic type list cannot choose one.", "scoped_aliases": {"order-field": "order-by", "sort-by": "order-by", "sort-field": "order-by"}}, - "drive recent": {"ambiguous": ["type", "types"], "scope_strict": true, "note": "Creator type, operation type, and file type filters are distinct and keep their enum/list forms."}, - "drive +recent": {"ambiguous": ["type", "types"], "scope_strict": true, "note": "Creator type, operation type, and file type filters are distinct and keep their enum/list forms."}, - "drive +star-list": {"ambiguous": ["type", "types"], "scope_strict": true, "note": "The shortcut exposes only the API contentTypes filter. Generic type spellings may denote file extensions or node/resource types, so the current name-only layer must not guess the value domain."}, - "drive +upload": {"ambiguous": ["destination-id", "space", "target-id"], "scoped_aliases": {"dentry-uuid": "node", "file-id": "node", "node-id": "node", "overwrite-node-id": "node", "directory-id": "folder", "parent-directory-id": "folder", "parent-folder-id": "folder", "target-folder-id": "folder", "source-file": "file", "local-file": "file", "file-path": "file", "content-type": "mime-type", "filename": "file-name", "name": "file-name", "display-name": "file-name", "upload-name": "file-name"}, "block": ["dentry-id", "document-url", "knowledge-base-id", "wiki-workspace-id", "workspace", "workspace-id", "output-path"], "scope_strict": true, "note": "Local source path, remote display name, MIME type, parent folder, numeric storage space and optional overwrite node are distinct roles. ID-suffixed file/node spellings denote the overwrite target; the shortcut does not expose a knowledge-base workspace route."}, -"aitable +export-data": {"scoped_aliases":{"export-format":"format"},"scope_strict":true,"note":"The shortcut's local --format is the export file format, unlike the root output-format flag; only the explicit --export-format spelling is mapped here."}, + "chat +bot-find": {"scoped_aliases":{"name":"query"},"scope_strict":true,"note":"On this exact bot-search shortcut, --name and --query denote the same search keyword; --name must not become a global search alias."}, + "chat +chat-messages": {"scoped_aliases":{"chat":"group"},"scope_strict":true,"note":"Evaluation compatibility: --chat carries one stable openConversationId and normalizes to the existing --group identifier route."}, + "chat +search-msg": {"scoped_aliases":{"chat":"group"},"scope_strict":true,"note":"Evaluation compatibility: scalar --chat carries one stable openConversationId and normalizes to the existing scalar --group filter."}, + "chat bot find": {"scoped_aliases":{"name":"query"},"scope_strict":true,"note":"On this exact bot-search command, --name and --query denote the same search keyword; --name must not become a global search alias."}, + "chat +bot-search": {"scoped_aliases":{"query":"name","current-page":"page"},"block":["cursor"],"scope_strict":true,"note":"Only the reviewed bot keyword and page-number spellings are accepted; cursor pagination cannot be converted to a page number."}, + "chat bot search": {"scoped_aliases":{"query":"name","current-page":"page"},"block":["cursor"],"scope_strict":true,"note":"Only the reviewed bot keyword and page-number spellings are accepted; cursor pagination cannot be converted to a page number."}, + "chat message list-favorites": {"scoped_aliases":{"limit":"size"},"scope_strict":true,"note":"On this exact command, both names denote the same bounded result count; the numeric value is unchanged."}, + "chat +messages-list-unread-conversations": {"scoped_aliases":{"limit":"count","size":"count"},"scope_strict":true,"note":"On this exact command, limit and size both denote the returned unread-conversation count."}, + "chat +unread-chats": {"scoped_aliases":{"limit":"count","size":"count"},"scope_strict":true,"note":"On this exact command, limit and size both denote the returned unread-conversation count."}, + "chat message list-unread-conversations": {"scoped_aliases":{"limit":"count","size":"count"},"scope_strict":true,"note":"On this exact command, limit and size both denote the returned unread-conversation count."}, + "chat +messages-list-direct": {"scoped_aliases":{"start":"time"},"block":["end"],"scope_strict":true,"note":"This exact command accepts one start boundary in yyyy-MM-dd HH:mm:ss; an end-only input cannot be represented."}, + "chat message list": {"scoped_aliases":{"start":"time"},"block":["end"],"ambiguous":["chat-id","open-conversation-id"],"scope_strict":true,"note":"This exact command accepts one start boundary in yyyy-MM-dd HH:mm:ss; an end-only input cannot be represented. Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, + "chat message list-by-sender": {"scoped_aliases":{"user-id":"sender-user-id","open-dingtalk-id":"sender-open-dingtalk-id"},"block":["time"],"scope_strict":true,"note":"Only same-role sender identifiers are mapped; --time cannot supply the required RFC3339 start/end range."}, + "contact +resolve-dept": {"bind":{"name":"search_query"},"note":"The real --name is a department-name search keyword and carries the search_query concept on this shortcut."}, + "contact +list-sub-depts": {"block":["name","query"],"note":"--dept is an integer department id; names and search queries require a separate resolution command"}, + "contact +dept-members": {"bind":{"dept":"search_query"},"scoped_aliases":{"name":"dept"},"note":"The real --dept is a department-name search keyword; search spellings come from search_query, while --name remains command-scoped."}, + "chat message send": {"scoped_aliases":{"to-user":"user"},"ambiguous":["chat-id","open-conversation-id"],"note":"The recipient alias remains exact to this command. --file is the visible Primary and --file-path remains a command-owned typed compatibility alias; obsolete file metadata flags remain unsupported. Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, + "chat +group-members": {"bind":{"group":"group_name"},"note":"The real --group is a group-name search keyword on this shortcut, not an identifier."}, + "chat +category-create": {"scoped_aliases":{"name":"title"},"scope_strict":true,"note":"The reviewed name/title mapping preserves the category display-name value on this exact shortcut."}, + "chat category create": {"scoped_aliases":{"name":"title"},"scope_strict":true,"note":"The reviewed name/title mapping preserves the category display-name value on this exact command."}, + "chat +category-rename": {"scoped_aliases":{"name":"title"},"block":["category-ids"],"scope_strict":true,"note":"The display-name alias is exact; a category-id list is not accepted where one category is required."}, + "chat category rename": {"scoped_aliases":{"name":"title"},"block":["category-ids"],"scope_strict":true,"note":"The display-name alias is exact; a category-id list is not accepted where one category is required."}, + "chat +category-delete": {"block":["category-ids"],"note":"This command requires one category id; list cardinality is not reduced automatically."}, + "chat category delete": {"block":["category-ids"],"note":"This command requires one category id; list cardinality is not reduced automatically."}, + "chat category list-conversations": {"block":["category-ids"],"note":"This command requires one category id; list cardinality is not reduced automatically."}, + "chat category add-conv": {"block":["category-id"],"ambiguous":["chat","chat-id","open-conversation-id"],"note":"This command requires a category-id list; one id is not promoted into a batch input. Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, + "chat category remove-conv": {"block":["category-id"],"ambiguous":["chat","chat-id","open-conversation-id"],"note":"This command requires a category-id list; one id is not promoted into a batch input. Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, + "chat +chat-role-update": {"block":["role-ids"],"note":"This command requires one role id; list cardinality is not reduced automatically."}, + "chat group-role remove": {"block":["role-ids"],"note":"This command requires one role id; list cardinality is not reduced automatically."}, + "chat group-role update": {"block":["role-ids"],"note":"This command requires one role id; list cardinality is not reduced automatically."}, + "chat +chat-role-set-user": {"block":["role-id"],"note":"This command requires a role-id list; one id is not promoted into a batch input."}, + "chat group-role remove-user": {"block":["role-id"],"note":"This command requires a role-id list; one id is not promoted into a batch input."}, + "chat +messages-send-by-webhook": {"scoped_aliases":{"at-user-ids":"at-users"},"scope_strict":true,"note":"Both names denote the same userId list used for @ mentions on this exact shortcut."}, + "chat message send-by-webhook": {"scoped_aliases":{"at-user-ids":"at-users"},"scope_strict":true,"note":"Both names denote the same userId list used for @ mentions on this exact command."}, + "doc block insert": {"block":["before-block-id"],"note":"Parent and reference roles remain distinct. --before-block-id needs both --ref-block and --where before, while role-free --block-id cannot choose parent versus reference.","scoped_aliases":{"parent-block-id":"parent-block","ref-block-id":"ref-block","reference-block-id":"ref-block"},"ambiguous":["block-id"],"scope_strict":true}, + "chat message send-by-bot": {"scoped_aliases":{"at-users":"at-user-ids"},"block":["user-id","to-user-id"],"ambiguous":["at-ids","chat-id","open-conversation-id"],"note":"The reviewed @ userId-list alias is exact; singular recipients are not promoted, and bare --at-ids cannot choose an identifier domain. Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, + "doc +export-get": {"block":["doc-id","document-id","file-id","node","node-id","task-id","url"],"note":"This command queries one export jobId. Document node identifiers and import taskId spellings are different entities and are rejected.","scoped_aliases":{"export-job-id":"job-id"},"scope_strict":true}, + "doc block delete": {"block":["index"],"note":"index (position) vs node (node id) are different"}, + "doc +copy": {"scoped_aliases":{"folder-id":"folder","parent-folder":"folder","parent-folder-id":"folder","parent-node-id":"folder","space":"workspace","space-id":"workspace"},"block":["parent-id"],"scope_strict":true,"note":"This exact Doc command expects a Doc folder nodeId/dentryUuid/URL. Reviewed folder spellings preserve that value; generic --parent-id stays blocked because it may carry a numeric Drive dentryId. The command-scoped --space/--space-id aliases preserve the compatibility published before workspace and numeric DingDrive storage-space concepts were split; they do not make those value domains globally equivalent."}, + "doc +list": {"scoped_aliases":{"folder-id":"folder","parent-folder":"folder","parent-folder-id":"folder","parent-node-id":"folder","space":"workspace","space-id":"workspace"},"block":["parent-id"],"scope_strict":true,"note":"This exact Doc command expects a Doc folder nodeId/dentryUuid/URL. Reviewed folder spellings preserve that value; generic --parent-id stays blocked because it may carry a numeric Drive dentryId. The command-scoped --space/--space-id aliases preserve the compatibility published before workspace and numeric DingDrive storage-space concepts were split; they do not make those value domains globally equivalent."}, + "doc +move": {"scoped_aliases":{"folder-id":"folder","parent-folder":"folder","parent-folder-id":"folder","parent-node-id":"folder","space":"workspace","space-id":"workspace"},"block":["parent-id"],"scope_strict":true,"note":"This exact Doc command expects a Doc folder nodeId/dentryUuid/URL. Reviewed folder spellings preserve that value; generic --parent-id stays blocked because it may carry a numeric Drive dentryId. The command-scoped --space/--space-id aliases preserve the compatibility published before workspace and numeric DingDrive storage-space concepts were split; they do not make those value domains globally equivalent."}, + "doc comment create": {"scoped_aliases":{"mentioned-open-conversation-ids":"mentioned-open-conversation-id","open-conversation-id":"mentioned-open-conversation-id","open-conversation-ids":"mentioned-open-conversation-id"},"block":["chat-id","chat-ids","conversation-id","conversation-ids","group-id","group-ids"],"scope_strict":true,"note":"The target is a list of mentioned openConversationIds. Explicit open-conversation spellings preserve the list value; numeric groupId and role-free conversation spellings are rejected."}, + "doc comment reply": {"scoped_aliases":{"mentioned-open-conversation-ids":"mentioned-open-conversation-id","open-conversation-id":"mentioned-open-conversation-id","open-conversation-ids":"mentioned-open-conversation-id"},"block":["chat-id","chat-ids","conversation-id","conversation-ids","group-id","group-ids"],"scope_strict":true,"note":"The target is a list of mentioned openConversationIds. Explicit open-conversation spellings preserve the list value; numeric groupId and role-free conversation spellings are rejected."}, + "doc comment update": {"scoped_aliases":{"mentioned-open-conversation-ids":"mentioned-open-conversation-id","open-conversation-id":"mentioned-open-conversation-id","open-conversation-ids":"mentioned-open-conversation-id"},"block":["chat-id","chat-ids","conversation-id","conversation-ids","group-id","group-ids"],"scope_strict":true,"note":"The target is a list of mentioned openConversationIds. Explicit open-conversation spellings preserve the list value; numeric groupId and role-free conversation spellings are rejected."}, + "doc +comment-create": {"block":["chat-id","chat-ids","conversation-id","conversation-ids","group-id","group-ids","mentioned-open-conversation-id","mentioned-open-conversation-ids","open-conversation-id","open-conversation-ids"],"note":"This shortcut has no group-mention flag or payload field. Group-conversation spellings are blocked instead of inventing unsupported capability; route to the stable doc comment command when group mentions are required."}, + "doc +comment-reply": {"block":["chat-id","chat-ids","conversation-id","conversation-ids","group-id","group-ids","mentioned-open-conversation-id","mentioned-open-conversation-ids","open-conversation-id","open-conversation-ids"],"note":"This shortcut has no group-mention flag or payload field. Group-conversation spellings are blocked instead of inventing unsupported capability; route to the stable doc comment command when group mentions are required."}, + "doc media insert": {"scoped_aliases":{"ref-block-id":"ref-block","reference-block-id":"ref-block"},"block":["before-block-id","parent-block","parent-block-id"],"ambiguous":["block-id"],"scope_strict":true,"note":"Media insertion supports a reference block but no parent-block role. --before-block-id additionally needs --where before; role-free --block-id is left ambiguous."}, + "doc read": {"block":["before-block-id","parent-block-id","ref-block-id","reference-block-id"],"ambiguous":["block-id"],"note":"A section read requires --scope section plus a start/end boundary. A role-free --block-id cannot be reduced to one flag without inventing the missing scope/boundary role."}, + "doc export get": {"scoped_aliases":{"export-job-id":"job-id"},"block":["doc-id","document-id","file-id","node","node-id","url"],"scope_strict":true,"note":"This command queries one export jobId. Document node identifiers are rejected; native hidden --task-id remains the command's reviewed add-only compatibility alias for --job-id."}, + "doc import get": {"scoped_aliases":{"import-task-id":"task-id"},"block":["doc-id","document-id","file-id","job-id","node","node-id","url"],"scope_strict":true,"note":"This command queries one import taskId. Document node identifiers and export jobId spellings are different entities and are rejected."}, + "doc +share-doc": {"block":["doc","doc-id","document-id","file-id","id","node","node-id"],"note":"The real --url requires a shareable document link. Name-only normalization cannot turn a document nodeId into a URL, so identifier spellings are rejected with guidance to provide --url."}, + "doc update": {"block":["stdin","version","version-no","version-number"],"note":"--revision is an optimistic-concurrency revision, not a historical document version number. Version spellings must not reduce to --revision. --stdin is not a real switch: stdin input is expressed as --content -, which requires a value-form transformation outside central name aliases."}, + "report outbox list": {"block":["template-type"],"note":"type vs name are different fields"}, + "chat group members add-bot": {"bind":{"id":"open_conversation_id"}}, + "chat group members list-by-ids": {"bind":{"id":"open_conversation_id","users":"open_dingtalk_ids"},"block":["user-id","user-ids"],"note":"This command's --id carries openConversationId, while --users carries an openDingTalkId list."}, + "chat group members remove-bot": {"bind":{"id":"open_conversation_id"}}, + "chat +send-to-group": {"bind":{"group":"group_name"},"note":"The real --group is a group-name search keyword on this shortcut, not an identifier."}, + "chat group share-invite": {"scoped_aliases":{"source-conversation-id":"source","target-conversation-id":"target"},"block":["group-id","group-ids","user","user-id","userid","uid","staff-id"],"ambiguous":["conversation-id","open-conversation-id","group","chat","chat-id","id"],"note":"A role-free conversation identifier cannot choose between source and target; --receiver requires openDingTalkId and must not accept userId spellings."}, + "chat message combine-forward": {"scoped_aliases":{"src-open-cid":"src-conversation-id","dest-open-cid":"dest-conversation-id","source-conversation-id":"src-conversation-id","target-conversation-id":"dest-conversation-id","destination-conversation-id":"dest-conversation-id"},"block":["group-id","group-ids"],"ambiguous":["conversation-id","open-conversation-id","group","chat","chat-id","id"],"note":"Source and destination conversation roles are preserved; a role-free identifier is ambiguous."}, + "chat message forward": {"scoped_aliases":{"src-open-cid":"src-conversation-id","dest-open-cid":"dest-conversation-id","source-conversation-id":"src-conversation-id","target-conversation-id":"dest-conversation-id","destination-conversation-id":"dest-conversation-id"},"block":["group-id","group-ids"],"ambiguous":["conversation-id","open-conversation-id","group","chat","chat-id","id"],"note":"Source and destination conversation roles are preserved; a role-free identifier is ambiguous."}, + "chat message forward-topic": {"scoped_aliases":{"src-open-conversation-id":"src-conversation-id","dest-open-conversation-id":"dest-conversation-id","source-conversation-id":"src-conversation-id","target-conversation-id":"dest-conversation-id","destination-conversation-id":"dest-conversation-id","src-open-message-id":"src-msg-id","source-message-id":"src-msg-id"},"block":["group-id","group-ids","msg-id","message-id","open-message-id"],"ambiguous":["conversation-id","open-conversation-id","group","chat","chat-id","id"],"note":"Conversation and message source/destination roles are preserved; role-free identifiers are rejected."}, + "chat +conversation-info": {"block":["user","user-id","userid","uid","staff-id"],"note":"This shortcut accepts --open-dingtalk-id, not userId; use stable chat conversation-info when userId resolution is needed."}, + "chat group create": {"block":["user-id","open-dingtalk-id"],"note":"The real --users is a list and may contain mixed identifier domains."}, + "chat +chat-set-admin": {"block":["user-id","open-dingtalk-id"],"note":"The real --users is a mixed userId/openDingTalkId list."}, + "chat +messages-read-status": {"block":["user-id","open-dingtalk-id"],"note":"The real --users is a mixed userId/openDingTalkId list."}, + "chat category create-smart": {"bind":{"members":"open_dingtalk_ids"},"scoped_aliases":{"title":"name"},"note":"The real --members is an openDingTalkId list; the reviewed title/name alias is exact to the category display name."}, + "chat group audit-join-validation": {"ambiguous":["user","user-id","userid","uid","staff-id"],"note":"A role-free user identifier cannot choose between the required --applicant and --inviter roles."}, + "chat message reply": {"block":["user","user-id","userid","uid","staff-id"],"note":"The required --ref-sender is a role-specific openDingTalkId and must not accept generic userId spellings."}, + "chat message send-card": {"block":["user","user-id","userid","uid","staff-id"],"ambiguous":["chat","chat-id","open-conversation-id"],"note":"The real --receiver is a role-specific openDingTalkId and must not accept generic userId spellings. Visible --conversation-id and legacy --group both remain executable outside the approved hidden-alias migration set."}, + "chat +category-add-conversation": {"block":["category-id"],"note":"The real --category-ids is a list; a singular category ID is not promoted automatically."}, + "chat +category-list-conversations": {"block":["category-ids"],"note":"The real --category-id is singular; list cardinality is not reduced automatically."}, + "chat +category-remove-conversation": {"block":["category-id"],"note":"The real --category-ids is a list; a singular category ID is not promoted automatically."}, + "chat +chat-add-bot": {"bind":{"id":"open_conversation_id"},"note":"The real --id is the group's openConversationId; robotCode and openBotId remain different domains."}, + "chat +chat-audit-join": {"scoped_aliases":{"applicant-user-id":"applicant","inviter-user-id":"inviter"},"ambiguous":["user","user-id","userid","uid","staff-id"],"scope_strict":true,"note":"A role-free user identifier cannot choose between applicant and inviter."}, + "chat +chat-create": {"block":["user-id","open-dingtalk-id"],"note":"The real --users field is a list and may contain mixed identifier domains; a singular value is not promoted."}, + "chat +chat-get-by-id": {"block":["group","conversation-id","chat","chat-id","open-conversation-id","conversation-ids","open-conversation-ids","group-name","name","id"],"note":"The real --group-id is numeric groupId; no CID or group-name spelling can be value-preservingly converted."}, + "chat +chat-members-get": {"bind":{"id":"open_conversation_id","users":"open_dingtalk_ids"},"block":["group","group-name","user-id","user-ids"],"note":"The real --id is openConversationId and --users is an openDingTalkId list. The observed --group spelling carried a natural group name and is blocked; explicit CID spellings and --chat remain value-preserving aliases."}, + "chat +chat-members-list": {"scoped_aliases":{"chat-id":"conversation-id","id":"conversation-id"},"block":["query","keyword","group-id","group-ids","conversation-ids","open-conversation-ids"],"scope_strict":true,"note":"Native --chat/--open-conversation-id stay native; member filtering by query is unsupported and group-name resolution stays on --group/--chat-query."}, + "chat +chat-mute-member": {"scoped_aliases":{"user-ids":"users","open-dingtalk-ids":"users"},"block":["user","user-id","open-dingtalk-id"],"scope_strict":true,"note":"The target accepts a mixed identifier list; list spellings preserve values, but singular inputs are not promoted."}, + "chat +chat-remove-bot": {"bind":{"id":"open_conversation_id"},"note":"The real --id is openConversationId; --bot-id is separately governed by open_bot_id."}, + "chat +chat-role-remove": {"block":["role-ids"],"note":"The command removes one role ID; list cardinality is not reduced."}, + "chat +chat-role-remove-user": {"scoped_aliases":{"user-id":"user","open-dingtalk-id":"user"},"block":["role-id"],"scope_strict":true,"note":"The single --user accepts either identifier domain; --role-ids remains a list."}, + "chat +chat-transfer-owner": {"scoped_aliases":{"user-id":"new-owner","open-dingtalk-id":"new-owner"},"scope_strict":true,"note":"The only user role is the new owner, and the target accepts either userId or openDingTalkId without changing the value."}, + "chat +chat-update": {"scoped_aliases":{"conversation-id":"group","open-conversation-id":"group","chat-id":"group","title":"name","new-title":"name"},"block":["id","group-id","group-ids","conversation-ids","open-conversation-ids"],"scope_strict":true,"note":"--group accepts a name or CID, so only explicit CID spellings are mapped; generic --id is blocked."}, + "chat +conversation-set-top": {"scoped_aliases":{"open-conversation-id":"conversation-id","chat-id":"conversation-id","open-conversation-ids":"conversation-ids","chat-ids":"conversation-ids"},"block":["group","groups","group-id","group-ids","top","set-top"],"scope_strict":true,"note":"Singular/list cardinality stays explicit; top/set-top cannot be rewritten to the inverse --off switch."}, + "chat +feed-group-query-item": {"scoped_aliases":{"open-conversation-ids":"conversation-ids","chat-ids":"conversation-ids"},"block":["group","groups","group-id","group-ids","conversation-id","open-conversation-id"],"scope_strict":true,"note":"The real field is an openConversationId list; group names and singular IDs are not converted."}, + "chat +flag-list": {"scoped_aliases":{"limit":"page-size"},"block":["max","max-results","max-size","count","page","per-page"],"scope_strict":true,"note":"Native --page-size is the canonical page bound, native --size is its command-owned compatibility alias, and --limit is reviewed as value-preservingly equivalent to --page-size; total-count and page-number spellings are not equivalent."}, + "chat +messages-batch-recall-by-bot": {"block":["msg-id","message-id","open-message-id","msg-ids","message-ids","open-message-ids"],"note":"--keys carries processQueryKey values returned by bot sending; it is not an openMessageId field."}, + "chat +messages-combine-forward": {"scoped_aliases":{"src-open-cid":"src-conversation-id","src-open-conversation-id":"src-conversation-id","source-conversation-id":"src-conversation-id","dest-open-cid":"dest-conversation-id","dest-open-conversation-id":"dest-conversation-id","target-conversation-id":"dest-conversation-id","destination-conversation-id":"dest-conversation-id"},"block":["group-id","group-ids"],"ambiguous":["conversation-id","open-conversation-id","group","chat","chat-id","id"],"scope_strict":true,"note":"Source and destination conversation roles remain explicit; role-free CID spellings cannot choose a side."}, + "chat +messages-forward": {"scoped_aliases":{"src-open-cid":"src-conversation-id","src-open-conversation-id":"src-conversation-id","source-conversation-id":"src-conversation-id","dest-open-cid":"dest-conversation-id","dest-open-conversation-id":"dest-conversation-id","target-conversation-id":"dest-conversation-id","destination-conversation-id":"dest-conversation-id","src-open-message-id":"msg-id","source-message-id":"msg-id"},"block":["group-id","group-ids"],"ambiguous":["conversation-id","open-conversation-id","group","chat","chat-id","id"],"scope_strict":true,"note":"The message role is uniquely the source message, but source/destination conversation roles cannot be inferred from a generic CID."}, + "chat +messages-forward-topic": {"scoped_aliases":{"src-open-conversation-id":"src-conversation-id","source-conversation-id":"src-conversation-id","dest-open-conversation-id":"dest-conversation-id","target-conversation-id":"dest-conversation-id","destination-conversation-id":"dest-conversation-id","src-open-message-id":"src-msg-id","source-message-id":"src-msg-id"},"block":["group-id","group-ids","msg-id","message-id","open-message-id","msg-ids","message-ids","open-message-ids"],"ambiguous":["conversation-id","open-conversation-id","group","chat","chat-id","id"],"scope_strict":true,"note":"Source and destination conversation roles and the source-message role remain explicit; role-free message IDs and list cardinality are not inferred."}, + "chat +messages-list": {"scoped_aliases":{"start":"time"},"block":["before","before-time","end","direction","page-all","count","max","max-results","max-size","page-size"],"scope_strict":true,"note":"start preserves the same boundary value; before/direction require multi-parameter or value transforms and page-all requires iteration. Native --conversation-id/--id/--size remain native."}, + "chat +messages-recall-by-bot": {"block":["msg-id","message-id","open-message-id","msg-ids","message-ids","open-message-ids"],"note":"--keys carries processQueryKey values, not openMessageId values."}, + "chat +messages-reply": {"scoped_aliases":{"msg-id":"ref-msg-id","open-message-id":"ref-msg-id"},"block":["msg-ids","message-ids","open-message-ids"],"scope_strict":true,"note":"The visible --group carries the openConversationId; --conversation-id remains its command-owned typed compatibility alias, while the reviewed command-scoped concept preserves --chat/--chat-id/--open-conversation-id compatibility. The only message role is the referenced message, plural IDs are not accepted, and native --message-id stays native."}, + "chat +messages-resource-download": {"block":["download-dir"],"note":"--output may be a file or directory under workspace safety rules; a download directory cannot be assumed equivalent."}, + "doc +access-change": {"scoped_aliases":{"space":"workspace","space-id":"workspace"},"scope_strict":true,"note":"Command-scoped compatibility published before the workspace/storage-space concept split: these spellings keep passing their value unchanged to this Doc command's --workspace flag and do not establish global equivalence with a numeric DingDrive storage space."}, + "doc +access-grant": {"scoped_aliases":{"space":"workspace","space-id":"workspace"},"block":["target-user-id","target-user-ids","user-id","user-ids"],"ambiguous":["target-user","user","users"],"scope_strict":true,"note":"The real --to accepts collaborator names and resolves them before granting access. Explicit ID spellings cannot be passed through unchanged, while role-free user spellings do not prove whether their values are names or IDs. The command-scoped --space/--space-id aliases preserve previously published Doc workspace compatibility without making workspace and numeric DingDrive storage-space values globally equivalent."}, + "doc +access-revoke": {"scoped_aliases":{"space":"workspace","space-id":"workspace"},"scope_strict":true,"note":"Command-scoped compatibility published before the workspace/storage-space concept split: these spellings keep passing their value unchanged to this Doc command's --workspace flag and do not establish global equivalence with a numeric DingDrive storage space."}, + "doc +create": {"scoped_aliases":{"folder-id":"folder","parent-folder":"folder","parent-folder-id":"folder","parent-node-id":"folder","space":"workspace","space-id":"workspace"},"block":["content-file","parent-id"],"scope_strict":true,"note":"--content-format is value-preservingly normalized to --doc-format. A raw --content-file path cannot become --content without adding the required @file transform, so it is blocked with guidance to use @relative-path or stable doc create. The command-scoped --space/--space-id aliases preserve previously published Doc workspace compatibility without making workspace and numeric DingDrive storage-space values globally equivalent."}, + "doc +create-from-template": {"scoped_aliases":{"folder-id":"folder","parent-folder":"folder","parent-folder-id":"folder","parent-node-id":"folder","space":"workspace","space-id":"workspace"},"block":["parent-id"],"scope_strict":true,"note":"This exact Doc command expects a Doc folder nodeId/dentryUuid/URL. Reviewed folder spellings preserve that value; generic --parent-id stays blocked because it may carry a numeric Drive dentryId. The command-scoped --space/--space-id aliases preserve previously published Doc workspace compatibility without making workspace and numeric DingDrive storage-space values globally equivalent."}, + "doc +import": {"scoped_aliases":{"folder-id":"folder","parent-folder":"folder","parent-folder-id":"folder","parent-node-id":"folder","space":"workspace","space-id":"workspace"},"block":["parent-id"],"scope_strict":true,"note":"This exact Doc command expects a Doc folder nodeId/dentryUuid/URL. Reviewed folder spellings preserve that value; generic --parent-id stays blocked because it may carry a numeric Drive dentryId. The command-scoped --space/--space-id aliases preserve previously published Doc workspace compatibility without making workspace and numeric DingDrive storage-space values globally equivalent."}, + "doc create": {"scoped_aliases":{"space":"workspace","space-id":"workspace"},"scope_strict":true,"note":"Command-scoped compatibility published before the workspace/storage-space concept split: these spellings keep passing their value unchanged to this Doc command's --workspace flag and do not establish global equivalence with a numeric DingDrive storage space."}, + "doc file create": {"scoped_aliases":{"space":"workspace","space-id":"workspace"},"scope_strict":true,"note":"Command-scoped compatibility published before the workspace/storage-space concept split: these spellings keep passing their value unchanged to this Doc command's --workspace flag and do not establish global equivalence with a numeric DingDrive storage space."}, + "doc import": {"scoped_aliases":{"space":"workspace","space-id":"workspace"},"scope_strict":true,"note":"Command-scoped compatibility published before the workspace/storage-space concept split: these spellings keep passing their value unchanged to this Doc command's --workspace flag and do not establish global equivalence with a numeric DingDrive storage space."}, + "doc template apply": {"scoped_aliases":{"space":"workspace","space-id":"workspace"},"scope_strict":true,"note":"Command-scoped compatibility published before the workspace/storage-space concept split: these spellings keep passing their value unchanged to this Doc command's --workspace flag and do not establish global equivalence with a numeric DingDrive storage space."}, + "doc +update": {"scoped_aliases":{"mode":"command","doc-id":"node","document-id":"node","file-id":"node","node-id":"node","url":"node"},"block":["content-file"],"ambiguous":["element"],"scope_strict":true,"note":"--mode append/overwrite is the same operation selector subset as --command and preserves its value. --content-file is blocked because +update requires @relative-path or stdin and central aliases cannot read/transform a file value. --element cannot choose between document content, a block target, or an insertion reference."}, + "doc +inspect": {"scoped_aliases":{"include-access":"include-permissions","include-member":"include-permissions","include-members":"include-permissions","include-versions":"include-history"},"block":["include","include-blocks","include-content","include-info","include-meta","include-metadata"],"scope_strict":true,"note":"Access/member spellings denote the same optional permission list, and versions/history denote the same history section. Generic --include needs value-dependent expansion; base metadata is already returned; block/content reads belong to +fetch, so those spellings stop before fuzzy correction or dispatch."}, + "doc +fetch": {"scoped_aliases":{"start-block":"start-block-id","end-block":"end-block-id"},"block":["content-format","doc-format","range"],"ambiguous":["block-id"],"scope_strict":true,"note":"Start/end block roles are preserved. A role-free --block-id cannot choose a range/section boundary. --range is an invented composite argument observed alongside --scope range and cannot be split into block IDs by name-only normalization; content-format spellings do not map to the independent --detail contract."}, + "doc +export": {"block":["wait"],"scope_strict":true,"note":"The shortcut already submits, polls, and downloads in one workflow. A generic --wait value cannot be converted into the distinct integer --max-polls contract by parameter-name normalization."}, + "doc +media-download": {"scoped_aliases":{"doc":"node","doc-id":"node","document-id":"node","node-id":"node"},"ambiguous":["file-id","url"],"scope_strict":true,"note":"This command has both document-node and attachment-resource roles. Strong document spellings map to --node; --file-id and --url cannot safely choose between document and media identities."}, + "doc +media-insert": {"scoped_aliases":{"doc":"node","doc-id":"node","document-id":"node","node-id":"node"},"block":["after-block-id","before-block-id"],"ambiguous":["file-id","url"],"scope_strict":true,"note":"This command has both document-node and local-media roles. Strong document spellings map to --node; --file-id and --url cannot safely choose a role. Before/after block spellings each require expansion into both --ref-block and --where, which name-only normalization cannot perform."}, + "doc +media-list": {"scoped_aliases":{"doc":"node","doc-id":"node","document-id":"node","node-id":"node"},"ambiguous":["file-id","url"],"scope_strict":true,"note":"The command lists media inside one document, so only strong document spellings map to --node. File and URL spellings remain role-ambiguous."}, + "doc +media-preview": {"scoped_aliases":{"doc":"node","doc-id":"node","document-id":"node","node-id":"node"},"ambiguous":["file-id","url"],"scope_strict":true,"note":"This command has both document-node and attachment-resource roles. Strong document spellings map to --node; --file-id and --url cannot safely choose a role."}, + "doc +resource-delete": {"scoped_aliases":{"doc":"node","doc-id":"node","document-id":"node","node-id":"node"},"ambiguous":["file-id","url"],"scope_strict":true,"note":"This command removes a document resource while targeting the document by --node. File and URL spellings do not uniquely identify that document role."}, + "doc +resource-download": {"scoped_aliases":{"doc":"node","doc-id":"node","document-id":"node","node-id":"node"},"ambiguous":["file-id","url"],"scope_strict":true,"note":"This command downloads a document resource while targeting the document by --node. File and URL spellings do not uniquely identify that document role."}, + "doc +resource-update": {"scoped_aliases":{"doc":"node","doc-id":"node","document-id":"node","node-id":"node"},"ambiguous":["file-id","url"],"scope_strict":true,"note":"This command has document-node, local-file, and HTTPS image URL roles. Only strong document spellings map to --node; --file-id and --url must stop as ambiguous."}, + "doc +share": {"block":["doc","doc-id","document-id","file-id","id","node","node-id"],"note":"The real --url requires a shareable document link. Name-only normalization cannot turn a node identifier into a URL, so identifier spellings are rejected with guidance to provide --url."}, + "doc +grant-and-share": {"scoped_aliases":{"doc":"node","doc-id":"node","document-id":"node","file-id":"node","node-id":"node","space":"workspace","space-id":"workspace"},"scope_strict":true,"note":"This workflow has two different real URL roles: --node selects the document for access control and --url is the shareable link sent to recipients. Explicit document-ID spellings map only to --node; --url remains native. The command-scoped --space/--space-id aliases preserve previously published Doc workspace compatibility without making workspace and numeric DingDrive storage-space values globally equivalent."}, + "doc +version-save": {"block":["message","title"],"scope_strict":true,"note":"The current snapshot API accepts only the document target. Version title/message metadata are unsupported and cannot be represented by another existing flag."}, + "drive copy": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node","directory-id":"folder","source-node-id":"node","source-file-id":"node","target-folder-id":"folder","destination-folder-id":"folder","target-workspace-id":"workspace","destination-workspace-id":"workspace"},"scope_strict":true,"note":"Source node and destination folder/workspace are different roles; role-free target IDs stop before write dispatch. --name is not a rename field on this command and must not be fuzzy-corrected to --node.","block":["dentry-id","destination-node-id","dingdrive-space-id","drive-space-id","name","source-folder-id","space-id","storage-space-id"],"ambiguous":["destination-id","target-id"]}, + "drive cover": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node"},"scope_strict":true,"note":"The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.","block":["dentry-id"]}, + "drive download-version": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node","chunk-size":"part-size","concurrency":"parallel","parallelism":"parallel"},"scope_strict":true,"note":"Output path, chunk size, and concurrency names preserve values; local input and remote folder roles remain blocked.","block":["dentry-id","file","file-path","folder","folder-id"]}, + "drive move": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node","directory-id":"folder","source-node-id":"node","source-file-id":"node","target-folder-id":"folder","destination-folder-id":"folder","target-workspace-id":"workspace","destination-workspace-id":"workspace"},"scope_strict":true,"note":"Source node and destination folder/workspace are different roles; role-free target IDs stop before write dispatch. --name is not a rename field on this command and must not be fuzzy-corrected to --node.","block":["dentry-id","destination-node-id","dingdrive-space-id","drive-space-id","name","source-folder-id","space-id","storage-space-id"],"ambiguous":["destination-id","target-id"]}, + "drive permission add": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node","member-user-ids":"users","collaborator-ids":"users","target-user-ids":"users","target-node-id":"node"},"scope_strict":true,"note":"The user list denotes target collaborators on this exact node permission command; the native singular compatibility spellings remain native.","block":["dentry-id","dingdrive-space-id","drive-space-id","space-id","storage-space-id"]}, + "drive permission apply": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node","approver-user-ids":"users","approver-ids":"users","target-node-id":"node","apply-reason":"reason","notification-mode":"notify-mode"},"scope_strict":true,"note":"The user list denotes approvers, not target collaborators; values and notification enum are passed unchanged.","block":["dentry-id"]}, + "drive permission apply-info": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node"},"scope_strict":true,"note":"The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.","block":["dentry-id"]}, + "drive permission list": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node","role-filter":"filter-role","permission-role-filter":"filter-role","target-node-id":"node"},"scope_strict":true,"note":"Filtering by a role is not the same as granting/updating a role.","block":["dentry-id","dingdrive-space-id","drive-space-id","permission","role","space-id","storage-space-id"]}, + "drive permission remove": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node","member-user-ids":"users","collaborator-ids":"users","target-user-ids":"users","target-node-id":"node"},"scope_strict":true,"note":"The user list denotes target collaborators on this exact node permission command; the native singular compatibility spellings remain native.","block":["dentry-id","dingdrive-space-id","drive-space-id","space-id","storage-space-id"]}, + "drive permission transfer-owner": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node","target-node-id":"node","target-workspace-id":"workspace","old-owner-role":"reserve-role","keep-role":"reserve-role","new-owner-id":"new-owner","new-owner-user-id":"new-owner"},"scope_strict":true,"note":"Node/workspace target and new/old owner roles are distinct on this irreversible command; role-free names stop before dispatch.","block":["current-owner","dentry-id","dingdrive-space-id","drive-space-id","space-id","storage-space-id","user-ids","users"],"ambiguous":["owner","owner-user-id","target-id","user-id"]}, + "drive permission update": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node","member-user-ids":"users","collaborator-ids":"users","target-user-ids":"users","target-node-id":"node"},"scope_strict":true,"note":"The user list denotes target collaborators on this exact node permission command; the native singular compatibility spellings remain native.","block":["dentry-id","dingdrive-space-id","drive-space-id","space-id","storage-space-id"]}, + "drive publish get": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node"},"scope_strict":true,"note":"The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.","block":["dentry-id"]}, + "drive publish set": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node","public-permission":"permission","public-role":"permission"},"scope_strict":true,"note":"Internet-public permission is not the same as a direct collaborator role.","block":["access-role","dentry-id","permission-role","role"]}, + "drive publish unset": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node"},"scope_strict":true,"note":"The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.","block":["dentry-id"]}, + "drive rename": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node","file-name":"name","display-name":"name","new-name":"name"},"scope_strict":true,"note":"The name is this exact folder/node display name; search query and local path are different roles.","block":["dentry-id"]}, + "drive revert": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node"},"scope_strict":true,"note":"The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.","block":["dentry-id"]}, + "drive shortcut": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node","directory-id":"folder","source-node-id":"node","source-file-id":"node","target-folder-id":"folder","destination-folder-id":"folder","target-workspace-id":"workspace","destination-workspace-id":"workspace"},"scope_strict":true,"note":"Source node and destination folder/workspace are different roles; role-free target IDs stop before write dispatch. --name is not a rename field on this command and must not be fuzzy-corrected to --node.","block":["dentry-id","destination-node-id","dingdrive-space-id","drive-space-id","name","source-folder-id","space-id","storage-space-id"],"ambiguous":["destination-id","target-id"]}, + "drive star add": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node"},"scope_strict":true,"note":"The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.","block":["dentry-id"]}, + "drive star remove": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node"},"scope_strict":true,"note":"The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.","block":["dentry-id"]}, + "drive stats": {"scoped_aliases":{"document-id":"node","dentry-uuid":"node"},"scope_strict":true,"note":"The command accepts a Drive node ID or URL; native file-id/node-id/doc-id/url aliases stay native and are not duplicated centrally.","block":["dentry-id"]}, + "drive +cover": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node","doc-id":"node","document-id":"node","url":"node","document-url":"node","id":"node"},"block":["dentry-id","doc","folder","folder-id","name"],"scope_strict":true,"note":"This shortcut calls the same get_cover nodeId interface as drive cover, so its reviewed ID/URL aliases are preserved unchanged. Numeric dentryId, folder-role spellings and --name remain protected."}, + "drive +copy": {"scoped_aliases":{"dentry-uuid":"node","directory-id":"folder","source-node-id":"node","source-file-id":"node","target-folder-id":"folder","destination-folder-id":"folder","target-workspace-id":"workspace","destination-workspace-id":"workspace"},"block":["dentry-id","destination-node-id","dingdrive-space-id","document-url","drive-space-id","name","source-folder-id","space-id","storage-space-id"],"scope_strict":true,"note":"Source node and destination folder/workspace are different roles; role-free target IDs stop before write dispatch. --name is not a rename field on this command and must not be fuzzy-corrected to --node.","ambiguous":["destination-id","target-id"]}, + "drive +create-folder": {"scoped_aliases":{"directory-id":"folder","parent-directory-id":"folder","parent-folder-id":"folder","folder-name":"name","display-name":"name","new-name":"name"},"block":["dentry-id","parent-id","knowledge-base-id","wiki-workspace-id","workspace","workspace-id"],"scope_strict":true,"note":"The new shortcut creates a numeric DingDrive-space folder. Folder display name, parent dentryUuid and numeric storage space are separate roles; knowledge-base workspace spellings are not accepted."}, + "drive +create-shortcut": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node","doc-id":"node","document-id":"node","url":"node","document-url":"node","directory-id":"folder","source-node-id":"node","source-file-id":"node","target-folder-id":"folder","destination-folder-id":"folder","target-workspace-id":"workspace","destination-workspace-id":"workspace"},"block":["dentry-id","destination-node-id","dingdrive-space-id","doc","drive-space-id","name","source-folder-id","space-id","storage-space-id"],"scope_strict":true,"note":"Source node and destination folder/workspace are different roles. The source ID/URL aliases match drive shortcut and pass through unchanged; generic target/id spellings remain ambiguous, and storage-space IDs are not knowledge-base workspace IDs.","ambiguous":["destination-id","id","target-id"]}, + "drive +delete": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node","folder":"node","folder-id":"node"},"block":["dentry-id","doc","doc-id","document-id","document-url","id","name","url"],"scope_strict":true,"note":"Delete targets one already confirmed Drive file or folder dentryUuid. Folder spellings are the same single target role; numeric dentryId, unreviewed Doc URL spellings and --name stop before confirmation or write dispatch."}, + "drive +download": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node"},"block":["dentry-id","doc","doc-id","document-id","document-url","file","file-path","folder","folder-id","id","knowledge-base-id","name","url","wiki-workspace-id","workspace","workspace-id"],"scope_strict":true,"note":"The remote ordinary-file node and local output path are different roles. Node-ID spelling is accepted, while Doc URLs, local input paths, folders, knowledge-base workspaces and numeric dentryId values are not interchangeable."}, + "drive +info": {"scoped_aliases":{"dentry-uuid":"node"},"block":["dentry-id","document-url","knowledge-base-id","wiki-workspace-id","workspace","workspace-id"],"scope_strict":true,"note":"This command has only a numeric DingDrive space target; knowledge-base workspace spellings are a different value domain."}, + "drive +inspect": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node","doc-id":"node","document-id":"node","folder":"node","folder-id":"node","include-statistics":"include-stats","include-publish-status":"include-publish","include-public-status":"include-publish","include-thumbnail":"include-cover"},"block":["dentry-id","doc","document-url","id","include","include-content","include-history","include-permissions","name","url"],"scope_strict":true,"note":"Drive inspect accepts one file, folder or document node ID and can aggregate only stats, public-publish status and cover. URL spellings, Doc inspect section names and a generic --include remain protected because this shortcut does not declare URL input or value splitting."}, + "drive +list": {"ambiguous":["root-id","space"],"scoped_aliases":{"directory-id":"folder","parent-folder-id":"folder","order-field":"order-by","sort-by":"order-by","sort-field":"order-by"},"block":["dentry-id","knowledge-base-id","wiki-workspace-id","workspace","workspace-id"],"scope_strict":true,"note":"This shortcut accepts one numeric DingDrive space and an optional parent dentryUuid; it does not accept a knowledge-base workspace. Sort field and direction remain separate roles."}, + "drive +move": {"scoped_aliases":{"dentry-uuid":"node","directory-id":"folder","source-node-id":"node","source-file-id":"node","target-folder-id":"folder","destination-folder-id":"folder","target-workspace-id":"workspace","destination-workspace-id":"workspace"},"block":["dentry-id","destination-node-id","dingdrive-space-id","document-url","drive-space-id","name","source-folder-id","space-id","storage-space-id"],"scope_strict":true,"note":"Source node and destination folder/workspace are different roles; role-free target IDs stop before write dispatch. --name is not a rename field on this command and must not be fuzzy-corrected to --node.","ambiguous":["destination-id","target-id"]}, + "drive +publish-get": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node","doc-id":"node","document-id":"node","url":"node","document-url":"node","id":"node"},"block":["dentry-id","doc","folder","folder-id","name"],"scope_strict":true,"note":"The shortcut calls the same publication-status fileId interface as drive publish get, so its reviewed ID/URL aliases are preserved unchanged. Numeric dentryId and folder/name roles remain protected."}, + "drive +publish-unset": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node","doc-id":"node","document-id":"node","url":"node","document-url":"node","id":"node"},"block":["dentry-id","doc","folder","folder-id","name"],"scope_strict":true,"note":"The shortcut calls the same set_file_publish fileId interface as drive publish unset, so its reviewed ID/URL aliases are preserved unchanged. Numeric dentryId and folder/name roles remain protected before confirmation."}, + "drive +recycle-restore": {"bind":{"id":"drive_recycle_item_id"},"block":["file-id","folder-id","node","node-id","space-id","workspace-id"],"scope_strict":true,"note":"The real --id is a recycleItemId returned by drive +recycle-list, not a normal Drive node ID."}, + "drive +rename": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node","doc-id":"node","document-id":"node","url":"node","document-url":"node","id":"node","folder":"node","folder-id":"node","file-name":"name","display-name":"name","new-name":"name"},"block":["dentry-id"],"scope_strict":true,"note":"The existing document, file or folder node and the requested new display name are separate required roles. Node ID/URL aliases match drive rename and pass through unchanged; numeric dentryId remains protected."}, + "drive delete": {"scoped_aliases":{"dentry-uuid":"node"},"block":["dentry-id","document-url"],"scope_strict":true,"note":"This command publicly accepts an ID-only Drive node; dentry spellings preserve the value and URL-specific spellings remain protected."}, + "drive download": {"scoped_aliases":{"dentry-uuid":"node","chunk-size":"part-size","concurrency":"parallel","parallelism":"parallel"},"block":["dentry-id","document-url","file","file-path","folder","folder-id","knowledge-base-id","wiki-workspace-id","workspace","workspace-id"],"scope_strict":true,"note":"Output path, chunk size, and concurrency names preserve values; local input and remote folder roles remain blocked."}, + "drive info": {"scoped_aliases":{"dentry-uuid":"node","space":"space-id","workspace":"space-id","workspace-id":"space-id"},"block":["dentry-id","document-url","knowledge-base-id","wiki-workspace-id"],"scope_strict":true,"note":"This command has only a numeric DingDrive space target. Its command-scoped --space/--workspace/--workspace-id aliases preserve compatibility published before the workspace/storage-space concept split and pass the value unchanged to --space-id; new commands must not infer that knowledge-base workspace IDs and numeric storage-space IDs are globally interchangeable."}, + "drive commit": {"scoped_aliases":{"directory-id":"folder","parent-directory-id":"folder","upload-session-id":"upload-id","size-bytes":"file-size","name":"file-name","display-name":"file-name","filename":"file-name","upload-name":"file-name"},"scope_strict":true,"note":"Upload session, file name, file size in bytes, parent folder, and storage space remain separate roles.","block":["knowledge-base-id","wiki-workspace-id","workspace","workspace-id"]}, + "drive mkdir": {"scoped_aliases":{"directory-id":"folder","parent-directory-id":"folder","folder-name":"name","display-name":"name","new-name":"name"},"scope_strict":true,"note":"The name is this exact folder/node display name; search query and local path are different roles.","block":["knowledge-base-id","wiki-workspace-id","workspace","workspace-id"]}, + "drive upload-info": {"scoped_aliases":{"directory-id":"folder","parent-directory-id":"folder","content-type":"mime-type","size-bytes":"file-size","name":"file-name","display-name":"file-name","filename":"file-name","upload-name":"file-name"},"scope_strict":true,"note":"File metadata aliases preserve MIME and byte units; file path and upload session are different stages.","block":["knowledge-base-id","wiki-workspace-id","workspace","workspace-id"]}, + "drive recycle list": {"block":["knowledge-base-id","wiki-workspace-id","workspace","workspace-id"],"scope_strict":true,"note":"This command has only a numeric DingDrive space target; knowledge-base workspace spellings are a different value domain."}, + "drive search": {"ambiguous":["end","from","start","time-from","time-to","to","types"],"block":["offset","page"],"scope_strict":true,"note":"Created/modified ranges and file/content type arrays are separate roles; generic time/type names are not guessed."}, + "drive +search": {"ambiguous":["end","from","start","time-from","time-to","to","types"],"block":["offset","page"],"scope_strict":true,"note":"Created/modified ranges and file/content type arrays are separate roles; generic time/type names are not guessed."}, + "drive +star-add": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node","doc-id":"node","document-id":"node","url":"node","document-url":"node","id":"node"},"block":["dentry-id","doc","folder","folder-id","name"],"scope_strict":true,"note":"The shortcut calls the same mark_star nodeId interface as drive star add, so its reviewed document/node ID and URL aliases are preserved unchanged. Numeric dentryId and folder/name roles remain protected."}, + "drive +star-remove": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node","doc-id":"node","document-id":"node","url":"node","document-url":"node","id":"node"},"block":["dentry-id","doc","folder","folder-id","name"],"scope_strict":true,"note":"The shortcut calls the same unmark_star nodeId interface as drive star remove, so its reviewed document/node ID and URL aliases are preserved unchanged. Numeric dentryId and folder/name roles remain protected."}, + "drive +stats": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node","doc-id":"node","document-id":"node","url":"node","document-url":"node","id":"node"},"block":["dentry-id","doc","folder","folder-id","name"],"scope_strict":true,"note":"The shortcut calls the same get_node_stats nodeId interface as drive stats, so its reviewed ID/URL aliases are preserved unchanged. Numeric dentryId and folder/name roles remain protected."}, + "drive +version-download": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node"},"block":["dentry-id","doc","doc-id","document-id","document-url","file","file-path","folder","folder-id","id","name","url"],"scope_strict":true,"note":"Ordinary-file node, positive historical version number and local output path are three distinct roles; revision and Doc URL spellings must not be guessed."}, + "drive +version-get": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node"},"block":["dentry-id","doc","doc-id","document-id","document-url","folder","folder-id","id","name","url"],"scope_strict":true,"note":"This command reads one ordinary-file historical version by node ID and positive version number; document revision and URL roles are different."}, + "drive +version-history": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node"},"block":["dentry-id","doc","doc-id","document-id","document-url","folder","folder-id","id","name","url"],"scope_strict":true,"note":"This command pages versions for one ordinary-file Drive node; document URLs and numeric dentryId are not accepted."}, + "drive +version-revert": {"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node"},"block":["dentry-id","doc","doc-id","document-id","document-url","folder","folder-id","id","name","url"],"scope_strict":true,"note":"The high-risk revert targets one ordinary-file Drive node and a positive historical version number. Doc revisions and URLs must stop before confirmation or write dispatch."}, + "drive recycle restore": {"bind":{"id":"drive_recycle_item_id"},"block":["file-id","folder-id","node","node-id","space-id","workspace-id"],"scope_strict":true,"note":"The real --id is a recycle-item ID from recycle list, not a normal Drive node ID."}, + "drive star list": {"ambiguous":["type","types"],"scope_strict":true,"note":"Content types and resource types are separate arrays; a generic type list cannot choose one.","scoped_aliases":{"order-field":"order-by","sort-by":"order-by","sort-field":"order-by"}}, + "drive recent": {"ambiguous":["type","types"],"scope_strict":true,"note":"Creator type, operation type, and file type filters are distinct and keep their enum/list forms."}, + "drive +recent": {"ambiguous":["type","types"],"scope_strict":true,"note":"Creator type, operation type, and file type filters are distinct and keep their enum/list forms."}, + "drive +star-list": {"ambiguous":["type","types"],"scope_strict":true,"note":"The shortcut exposes only the API contentTypes filter. Generic type spellings may denote file extensions or node/resource types, so the current name-only layer must not guess the value domain."}, + "drive +upload": {"ambiguous":["destination-id","space","target-id"],"scoped_aliases":{"dentry-uuid":"node","file-id":"node","node-id":"node","overwrite-node-id":"node","directory-id":"folder","parent-directory-id":"folder","parent-folder-id":"folder","target-folder-id":"folder","source-file":"file","local-file":"file","file-path":"file","content-type":"mime-type","filename":"file-name","name":"file-name","display-name":"file-name","upload-name":"file-name"},"block":["dentry-id","document-url","knowledge-base-id","wiki-workspace-id","workspace","workspace-id","output-path"],"scope_strict":true,"note":"Local source path, remote display name, MIME type, parent folder, numeric storage space and optional overwrite node are distinct roles. ID-suffixed file/node spellings denote the overwrite target; the shortcut does not expose a knowledge-base workspace route."}, + "aitable +export-data": {"scoped_aliases":{"export-format":"format"},"scope_strict":true,"note":"The shortcut's local --format is the export file format, unlike the root output-format flag; only the explicit --export-format spelling is mapped here."}, "aitable attachment upload": {"scoped_aliases":{"file-size":"size"},"scope_strict":true,"note":"On this upload command --size is the local file size in bytes; the mapping is command-local because size is a pagination synonym elsewhere."}, "aitable +attachment-upload": {"scoped_aliases":{"file-size":"size"},"scope_strict":true,"note":"On this upload command --size is the local file size in bytes; the mapping is command-local because size is a pagination synonym elsewhere."}, "aitable import upload": {"scoped_aliases":{"size":"file-size"},"scope_strict":true,"note":"On this import-upload command --file-size is the local file size in bytes; the mapping is command-local because size is a pagination synonym elsewhere."}, @@ -423,407 +429,444 @@ "wiki +member-remove": {"scoped_aliases":{"uid":"user","user-id":"user"},"ambiguous":["id"],"block":["name","open-dingtalk-id","open-dingtalk-ids","staff-id"],"scope_strict":true,"note":"Workspace and a 1-30 item userId list are separate ID roles. --user-id/--uid value-preservingly normalize to the real repeatable --user alias; openDingTalkId and staffId spellings remain blocked."}, "wiki member remove": {"ambiguous":["id"],"block":["name","open-dingtalk-id","open-dingtalk-ids","staff-id"],"scope_strict":true,"note":"Only canonical --users and the manually wired hidden --user are runtime-consumed. Auto-registered real hidden --user-id/--uid/--user-ids/--user-list/--user-id-list bypass central rewriting but are not read by collectUserIDs; use --users until command-owned wiring is fixed."}, "wiki +member-list": {"scoped_aliases":{"filter-roles":"filter-role","role-filter":"filter-role","roles":"filter-role"},"ambiguous":["id"],"block":["cursor","name","open-dingtalk-id","page-all","role","user-id","user-ids","users"],"scope_strict":true,"note":"This command lists members and can filter by a role list. It does not accept user filters or cursor auto-pagination, and workspace/user IDs must not be conflated."}, - "wiki member list": {"scoped_aliases":{"filter-roles":"filter-role","role-filter":"filter-role","roles":"filter-role"},"ambiguous":["id"],"block":["name","open-dingtalk-id","page-all","role","user-id","user-ids","users"],"scope_strict":true,"note":"Native hidden workspace aliases remain native. Pagination is now cursor-based via the real --next-token (auto-aliased --cursor/--page-token) with pageSize max 50; user filters are still unsupported."} + "wiki member list": {"scoped_aliases":{"filter-roles":"filter-role","role-filter":"filter-role","roles":"filter-role"},"ambiguous":["id"],"block":["name","open-dingtalk-id","page-all","role","user-id","user-ids","users"],"scope_strict":true,"note":"Native hidden workspace aliases remain native. Pagination is now cursor-based via the real --next-token (auto-aliased --cursor/--page-token) with pageSize max 50; user filters are still unsupported."}, + "attendance +check-record": {"scoped_aliases":{"until":"end","to":"end","target-user-ids":"users","staff-ids":"users","user-id-list":"users"},"scope_strict":true,"note":"These spellings all denote this command's userId list; singular user spellings remain protected by the user_ids concept."}, + "attendance +check-result": {"scoped_aliases":{"until":"end","to":"end","target-user-ids":"users","staff-ids":"users","user-id-list":"users"},"scope_strict":true,"note":"These spellings all denote this command's userId list; singular user spellings remain protected by the user_ids concept. Offset is a command-local pagination role; page-token remains explicitly blocked.","block":["page-token"]}, + "attendance +get-adjustment-rule": {"scoped_aliases":{"rule-id":"adjustment-id","adjustment-rule-id":"adjustment-id"},"scope_strict":true,"note":"On this exact command --rule-id denotes one adjustment-rule ID. The former two-command adjustment-rule concept is represented locally by this exact alias and guard set.","block":["overtime-id","class-id","group-id","plan-id","result-id","id"]}, + "attendance +get-approve-template": {"scoped_aliases":{"approval-type":"type","biz-type":"type"},"block":["approval-types","biz-types","types"],"scope_strict":true,"note":"This command accepts one approval type; list spellings are not collapsed into one value."}, + "attendance +get-checkin-record": {"scoped_aliases":{"until":"end","to":"end","operator-user-id":"operator-staff-id","operator-id":"operator-staff-id","corp-id":"operator-corp-id","operator-company-id":"operator-corp-id","target-user-ids":"staff-ids","user-id-list":"staff-ids"},"block":["name","to-user"],"ambiguous":["user","user-id","userid","uid","staff-id"],"scope_strict":true,"note":"The command has distinct operator-single-user and target-user-list roles. Only role-qualified operator aliases and list-qualified target aliases are accepted; generic singular user spellings stay ambiguous, while unrelated name/to-user spellings stay blocked.","bind":{"staff-ids":"user_ids"}}, + "attendance +get-leave-records": {"scoped_aliases":{"until":"end","to":"end"},"scope_strict":true,"note":"On this exact attendance range command, --to/--until denote the existing end boundary; the value format is preserved."}, + "attendance +get-overtime-rule": {"scoped_aliases":{"rule-id":"overtime-id","overtime-rule-id":"overtime-id"},"scope_strict":true,"note":"On this exact command --rule-id denotes one overtime-rule ID. The former two-command overtime-rule concept is represented locally by this exact alias and guard set.","block":["adjustment-id","class-id","group-id","plan-id","result-id","id"]}, + "attendance +get-schedule": {"scoped_aliases":{"until":"end","to":"end","target-user-ids":"users","staff-ids":"users","user-id-list":"users","work-date-begin":"start","work-date-end":"end"},"scope_strict":true,"note":"Compatibility for old RPC spellings on the Shortcut; the stable schedule get command already keeps these spellings as native hidden flags."}, + "attendance +get-self-setting": {"ambiguous":[],"scope_strict":true,"note":"The latest main leaf publishes --setting-scene and --user. Only scene is a value-preserving spelling; setting type/item names do not prove one of the six accepted scene enum values.","scoped_aliases":{"scene":"setting-scene"},"block":["setting-type","setting-item"]}, + "attendance +get-summary": {"scoped_aliases":{"summary-type":"stats-type","statistics-type":"stats-type","period":"stats-type"},"scope_strict":true,"note":"These aliases preserve the week/month statistics selector value."}, + "attendance +list-approve": {"scoped_aliases":{"until":"end","to":"end","target-user-ids":"users","staff-ids":"users","user-id-list":"users","approval-types":"types","biz-types":"types"},"scope_strict":true,"note":"Former single/local-role concept attendance_approval_types is intentionally command-scoped. These spellings all denote this command's userId list; singular user spellings remain protected by the user_ids concept."}, + "attendance +query-report-data": {"scoped_aliases":{"until":"end","to":"end","target-user-ids":"users","staff-ids":"users","user-id-list":"users","report-column-ids":"columns"},"scope_strict":true,"note":"These spellings all denote this command's userId list; singular user spellings remain protected by the user_ids concept. Report columns are a command-local field-ID list, so its alias and guards stay on these exact commands.","block":["column-names","leave-names"]}, + "attendance +search-class": {"scoped_aliases":{"class-filter-type":"filter-type","class-scope":"filter-type"},"scope_strict":true,"note":"These aliases denote the existing ALL/MINE_OWN class ownership filter."}, + "attendance +search-group": {"scoped_aliases":{"group-type":"type","attendance-group-type":"type","include-ble":"query-ble","include-position":"query-position"},"scope_strict":true,"note":"The type and optional projection switches are exact to attendance-group search."}, + "mail +folder-list": {"scoped_aliases":{"folder-id":"folder"},"block":["name","calendar-id","node-id"],"scope_strict":true,"note":"The real --folder is an optional parent mail folderId. Names and other product folder domains are not converted."}, + "mail +message": {"scoped_aliases":{"message-id":"id","mail-id":"id"},"block":["thread-id","conversation-id","attachment-id","internet-message-id"],"scope_strict":true,"note":"The real --id is one internal mail messageId; thread and Internet Message-ID values are different domains."}, + "mail +messages": {"scoped_aliases":{"message-ids":"ids","mail-ids":"ids"},"block":["message-id","mail-id","thread-id","thread-ids","conversation-id","conversation-ids"],"scope_strict":true,"note":"This command requires a comma-separated mail messageId list; singular IDs and thread IDs are rejected."}, + "mail +recent-mail": {"scoped_aliases":{"folder-id":"folder"},"block":["name","calendar-id","node-id"],"scope_strict":true,"note":"The real --folder is a mail folderId used by the shortcut's KQL query."}, + "mail +search-mail": {"block":["subject","sender","from","from-address","to-address","date","folder","folder-id","has-attachments"],"scope_strict":true,"note":"This shortcut also requires a complete KQL --query value. Separate condition flags cannot be converted without rewriting values."}, + "mail +thread": {"scoped_aliases":{"conversation-id":"id","thread-id":"id"},"block":["message-id","mail-id","message-ids","mail-ids"],"scope_strict":true,"note":"The real --id is a conversationId/threadId, never a mail messageId."}, + "mail +thread-list": {"scoped_aliases":{"folder-id":"folder"},"block":["name","calendar-id","node-id"],"scope_strict":true,"note":"The real --folder is a required mail folderId. Names require a prior folder lookup."}, + "mail +triage": {"block":["subject","sender","from","from-address","to-address","date","folder","folder-id","has-attachments"],"scope_strict":true,"note":"Triage accepts one complete KQL expression in --query. Field fragments are not flags and cannot be assembled by value-preserving argv normalization; pagination aliases remain independent."}, + "mail +unread-mail": {"block":["query","keyword","subject","sender"],"note":"This shortcut has a fixed isRead:false query. Additional search conditions require mail +search-mail or mail message search."}, + "oa +list-executed": {"block":["count"],"scope_strict":true,"note":"The shortcut no longer exposes a limit/take pagination alias; count remains a different parameter and must fail closed."}, + "oa +list-pending": {"block":["cursor","offset","page-token"],"scope_strict":true,"note":"Pending lists use one-based page/limit with an ISO-8601 range, not cursor pagination."}, + "ding +list": {"scoped_aliases":{"message-type":"type","next-cursor":"cursor"},"block":["remind-type","status","page","page-token","next-token","offset"],"scope_strict":true,"note":"List type uses ALL/UNREAD/SEND/NEW_COMMENT/DELETED and cursor is an integer. Reminder enums, status guesses, page indexes and opaque tokens are different domains."}, + "ding +recall-personal": {"bind":{"id":"ding_id"},"block":["robot-code","robot","message-id","task-id","uuid","request-id"],"scope_strict":true,"note":"Personal recall needs one openDingId and must not acquire a robot identity or another message/request identifier."}, + "ding +send-personal": {"bind":{"users":"open_dingtalk_ids"},"scoped_aliases":{"receiver-open-dingtalk-ids":"users","recipient-open-dingtalk-ids":"users","remind-type":"type","message-content":"content","idempotency-key":"uuid","request-id":"uuid"},"block":["robot-code","robot","user-id","user-ids","receiver-user-ids","recipient-user-ids","staff-id","staff-ids","open-dingtalk-id","message-type","status","id","ding-id","open-ding-id"],"scope_strict":true,"note":"Personal DING recipients are an openDingTalkId list. UserId/staffId and singular inputs are not promoted; reminder enum, content and idempotency aliases preserve their values, while output DING identifiers stop before send."}, + "report +inbox-list": {"scoped_aliases":{"sender-staff-ids":"sender-user-ids","from-staff-ids":"sender-user-ids"},"block":["date","sender-id","sender-user-id","sender-staff-id","user-id","user-ids","staff-id","staff-ids"],"scope_strict":true,"note":"The filter is a list of sender staffIds. Explicit plural sender-staff spellings pass through unchanged; date-only inputs, singular IDs and role-free user/staff spellings are not promoted."}, + "report +outbox-list": {"scoped_aliases":{"report-template-name":"template-name","name":"template-name","updated-start":"modified-start","update-start":"modified-start","modified-from":"modified-start","updated-end":"modified-end","update-end":"modified-end","modified-to":"modified-end"},"block":["template-type","template-id","report-template-id","date"],"ambiguous":["template"],"scope_strict":true,"note":"Template name, creation bounds and modification bounds are separate roles. Exact role-preserving spellings map; template IDs/types and date-only inputs stop before dispatch."}, + "report +report-latest": {"scoped_aliases":{"template-name":"keyword","report-template-name":"keyword","name":"keyword"},"block":["template-id","report-template-id","date","modified-start","modified-end"],"ambiguous":["template"],"scope_strict":true,"note":"Latest filters by an exact report template display name and an ISO-8601 creation window. Template IDs, modified-time bounds and date-only values are different contracts."}, + "report +template-search": {"block":["template-id","report-template-id"],"ambiguous":["template","name"],"scope_strict":true,"note":"Template search accepts a free-text name query. Stable template IDs are outputs/lookup inputs elsewhere, while role-free template/name spellings do not prove search intent."}, + "markdown create": {"bind":{"content":"content_text","file":"markdown_local_file_path","name":"markdown_file_name","folder":"folder_id","workspace":"workspace_id","space-id":"drive_storage_space_id"},"scoped_aliases":{"markdown-content":"content","plan-only":"dry-run","preview-only":"dry-run","source-file":"file"},"block":["node","node-id","doc-id","file-id","document-id","url","output-path","version","version2","pattern","regex","replacement"],"ambiguous":["id","path","space","content-file","destination"],"scope_strict":true,"note":"Create needs exactly one content transport: inline/@file/stdin through --content or one local .md through --file. The filename, parent folder, document workspace, and numeric DingDrive space keep separate roles; an existing node target belongs to overwrite."}, + "markdown diff": {"bind":{"version":"doc_version_number","file":"markdown_local_file_path"},"scoped_aliases":{"dentry-uuid":"node","left-version":"version","base-version":"version","from-version":"version","right-version":"version2","target-version":"version2","to-version":"version2","context-lines":"context","diff-context":"context","surrounding-lines":"context","plan-only":"dry-run","preview-only":"dry-run","source-file":"file"},"block":["version-id","revision","content","body","pattern","regex","output-path","workspace","workspace-id","space-id","folder","name"],"ambiguous":["path","left","right","destination"],"scope_strict":true,"note":"Diff compares remote version(s) or one remote side with a local .md. --version and --version2 are positive history numbers; --file is a local path and is mutually exclusive with --version2. Context-line spellings are local aliases for the one diff-only integer option. Hidden node aliases remain executable compatibility assertions."}, + "markdown fetch": {"bind":{"workspace":"workspace_id","space-id":"drive_storage_space_id","output":"local_output_path"},"scoped_aliases":{"document-id":"node","dentry-uuid":"node","save-to":"output","download-to":"output","output-file":"output"},"block":["url","content","file","file-path","folder","parent-id","name","version","version2","pattern","regex"],"ambiguous":["path","space","destination"],"scope_strict":true,"note":"Fetch reads one remote native .md node and may save to one local output path. Workspace IDs, numeric DingDrive space IDs, remote node IDs, local destinations, and content/upload inputs remain distinct. Hidden --id compatibility remains executable but is not promoted as a reviewed alias."}, + "markdown overwrite": {"bind":{"content":"content_text","file":"markdown_local_file_path","name":"markdown_file_name","workspace":"workspace_id","space-id":"drive_storage_space_id"},"scoped_aliases":{"document-id":"node","dentry-uuid":"node","markdown-content":"content","show-diff":"dry-run","preview-only":"dry-run","no-write":"dry-run","source-file":"file"},"block":["url","folder","folder-id","parent-id","output-path","version","version2","pattern","regex","replacement","content-file"],"ambiguous":["id","path","space","destination"],"scope_strict":true,"note":"Overwrite is destructive and needs one explicit remote node plus exactly one content transport. Local file paths, inline content, display name, workspace/space route, and command-level diff preview are not interchangeable."}, + "markdown patch": {"bind":{"workspace":"workspace_id","space-id":"drive_storage_space_id"},"scoped_aliases":{"document-id":"node","dentry-uuid":"node","match-pattern":"pattern","find-text":"pattern","old-text":"pattern","search-pattern":"pattern","regexp":"regex","use-regex":"regex","regular-expression":"regex","replacement":"content","replace-with":"content","new-text":"content","replacement-text":"content","show-diff":"dry-run","preview-only":"dry-run","no-write":"dry-run"},"block":["url","file","file-path","content-file","replacement-file","name","folder","folder-id","parent-id","output-path","version","version2","query"],"ambiguous":["id","path","space","text","body","value","destination"],"scope_strict":true,"note":"Patch downloads and reuploads one remote .md. Pattern and regex spellings are local aliases for this leaf; the match pattern and literal replacement remain distinct, and --regex changes only pattern interpretation, never replacement expansion. File-based replacement and role-free text/path inputs are not inferred."} }, "validation_fixture": { "cases": [ - {"command": "oa +search-forms", "emitted": "keyword", "expect": "query", "via": "concept:search_query", "occ": 28}, - {"command": "aitable +list-tables", "emitted": "base-id", "expect": "base", "via": "concept:base_id+morph", "occ": 26}, - {"command": "mail +find-mail-user", "emitted": "keyword", "expect": "query", "via": "concept:search_query", "occ": 18}, - {"command": "aitable +field-get", "emitted": "base", "expect": "base-id", "via": "concept:base_id+morph", "occ": 8}, - {"command": "aitable +record-query", "emitted": "base", "expect": "base-id", "via": "concept:base_id+morph", "occ": 8}, - {"command": "aitable +table-get", "emitted": "base", "expect": "base-id", "via": "concept:base_id+morph", "occ": 8}, - {"command": "doc block update", "emitted": "text", "expect": "content", "via": "native:reviewed-compatibility-alias", "occ": 6}, - {"command": "contact +resolve-dept", "emitted": "query", "expect": "name", "via": "concept:search_query+bind", "occ": 4}, - {"command": "devdoc article search", "emitted": "limit", "expect": "size", "via": "concept:pagination_size", "occ": 2}, - {"command": "devdoc article search", "emitted": "page-size", "expect": "size", "via": "concept:pagination_size", "occ": 2}, - {"command": "devdoc article search", "emitted": "current-page", "expect": "page", "via": "concept:page_number", "occ": 2}, - {"command": "mail message search", "emitted": "subject", "expect": "query", "via": "override:scoped_strict", "occ": 4}, - {"command": "aitable +record-share-url", "emitted": "base", "expect": "base-id", "via": "concept:base_id+morph", "occ": 3}, - {"command": "aitable record query", "emitted": "max-results", "expect": "limit", "via": "concept:pagination_size", "occ": 2}, - {"command": "calendar event list", "emitted": "date", "expect": "start", "via": "override:scoped(reviewed+payload)", "occ": 2}, - {"command": "calendar event list", "emitted": "start-time", "expect": "start", "via": "native:reviewed-compatibility-fallback", "occ": 2}, - {"command": "calendar event list", "emitted": "min-time", "expect": "start", "via": "native:reviewed-compatibility-fallback", "occ": 2}, - {"command": "calendar event list", "emitted": "time-min", "expect": "start", "via": "native:reviewed-compatibility-fallback", "occ": 2}, - {"command": "calendar event list", "emitted": "end-time", "expect": "end", "via": "native:reviewed-compatibility-fallback", "occ": 2}, - {"command": "calendar event list", "emitted": "time-max", "expect": "end", "via": "native:reviewed-compatibility-fallback", "occ": 2}, - {"command": "calendar event list", "emitted": "max-results", "expect": "limit", "via": "native:reviewed-compatibility-fallback", "occ": 2}, - {"command": "calendar event list", "emitted": "next-cursor", "expect": "cursor", "via": "native:reviewed-compatibility-fallback", "occ": 2}, - {"command": "calendar event list", "emitted": "calendar", "expect": "calendar-id", "via": "native:reviewed-compatibility-fallback", "occ": 2}, - {"command": "chat message list", "emitted": "max-results", "expect": "limit", "via": "concept:pagination_size", "occ": 2}, - {"command": "chat message list-by-sender", "emitted": "time", "expect": "did-you-mean:blocked", "via": "guard:time-format-boundary", "occ": 2}, - {"command": "doc +template-search", "emitted": "keyword", "expect": "query", "via": "concept:search_query", "occ": 2}, - {"command": "doc block insert", "emitted": "text", "expect": "content", "via": "native:reviewed-compatibility-alias", "occ": 2}, - {"command": "drive list", "emitted": "folder-id", "expect": "folder", "via": "concept:folder_id+morph", "occ": 2}, - {"command": "mail thread list", "emitted": "max-results", "expect": "limit", "via": "concept:pagination_size", "occ": 2}, - {"command": "mail user search", "emitted": "query", "expect": "keyword", "via": "concept:search_query", "occ": 2}, - {"command": "oa approval search-forms", "emitted": "keyword", "expect": "query", "via": "concept:search_query", "occ": 2}, - {"command": "report list", "emitted": "from-date", "expect": "start", "via": "concept:time_start", "occ": 2}, - {"command": "aitable +base-search", "emitted": "keyword", "expect": "query", "via": "concept:search_query", "occ": 1}, - {"command": "contact +search-user", "emitted": "keyword", "expect": "query", "via": "concept:search_query", "occ": 1}, - {"command": "chat group rename", "emitted": "group", "expect": "id", "via": "override:bind(open_conversation_id)", "occ": 31}, - {"command": "ding +receiver-status", "emitted": "id", "expect": "ding-id", "via": "override:scoped(ding_id)", "occ": 24}, - {"command": "chat group members", "emitted": "group", "expect": "id", "via": "override:bind(open_conversation_id)", "occ": 8}, - {"command": "contact +list-sub-depts", "emitted": "dept-id", "expect": "dept", "via": "concept:dept_id+morph", "occ": 4}, - {"command": "contact +list-sub-depts", "emitted": "name", "expect": "did-you-mean:blocked", "via": "guard:name-vs-id", "occ": 2}, - {"command": "contact +list-sub-depts", "emitted": "query", "expect": "did-you-mean:blocked", "via": "guard:query-vs-id", "occ": 2}, - {"command": "contact user profile get", "emitted": "user-id", "expect": "staff-id", "via": "concept:user_id", "occ": 2}, - {"command": "contact user profile get", "emitted": "id", "expect": "staff-id", "via": "override:scoped", "occ": 2}, - {"command": "contact user profile get", "emitted": "ids", "expect": "staff-id", "via": "override:scoped", "occ": 2}, - {"command": "chat message send-by-bot", "emitted": "user-id", "expect": "did-you-mean:blocked", "via": "guard:single-vs-list", "occ": 4}, - {"command": "chat message send-by-bot", "emitted": "to-user-id", "expect": "did-you-mean:blocked", "via": "guard:single-vs-list", "occ": 1}, - {"command": "dev app get", "emitted": "app-id", "expect": "unified-app-id", "via": "concept:app_id", "occ": 5}, - {"command": "chat message list-all", "emitted": "from", "expect": "start", "via": "concept:time_start", "occ": 2}, - {"command": "chat message list-all", "emitted": "start-time", "expect": "start", "via": "concept:time_start", "occ": 2}, - {"command": "chat message search-advanced", "emitted": "group", "expect": "conversation-ids", "via": "native:reviewed-single-to-list", "occ": 4}, - {"command": "chat message send", "emitted": "to-user", "expect": "user", "via": "override:scoped(reviewed+payload)", "occ": 4}, - {"command": "contact +dept-members", "emitted": "name", "expect": "dept", "via": "override:scoped(reviewed)", "occ": 2}, - {"command": "contact +dept-members", "emitted": "query", "expect": "dept", "via": "concept:search_query+bind", "occ": 2}, - {"command": "contact dept list-children", "emitted": "parent-id", "expect": "dept", "via": "concept:dept_id", "occ": 2}, - {"command": "contact dept list-children", "emitted": "parent", "expect": "dept", "via": "concept:dept_id", "occ": 2}, - {"command": "ding message receiver-status", "emitted": "id", "expect": "ding-id", "via": "override:scoped(ding_id)", "occ": 2}, - {"command": "ding message receiver-status", "emitted": "open-ding-id", "expect": "ding-id", "via": "concept:ding_id", "occ": 2}, - {"command": "chat group members add", "emitted": "group", "expect": "id", "via": "override:bind(open_conversation_id)", "occ": 3}, - {"command": "attendance +check-result", "emitted": "user-id", "expect": "did-you-mean:blocked", "via": "concept:user_ids+exclude", "occ": 2}, - {"command": "attendance check result", "emitted": "user-ids", "expect": "users", "via": "concept:user_ids", "occ": 2}, - {"command": "chat group members remove", "emitted": "group", "expect": "id", "via": "override:bind(open_conversation_id)", "occ": 2}, - {"command": "chat group set-admin", "emitted": "user-id", "expect": "user", "via": "native:reviewed-compatibility-alias", "occ": 2}, - {"command": "ding message send", "emitted": "robot", "expect": "robot-code", "via": "concept:robot_code", "occ": 2}, - {"command": "doc +export-get", "emitted": "node", "expect": "did-you-mean:blocked", "via": "override:block", "occ": 2}, - {"command": "doc block delete", "emitted": "index", "expect": "did-you-mean:blocked", "via": "override:block", "occ": 2}, - {"command": "doc block insert", "emitted": "before-block-id", "expect": "did-you-mean:blocked", "via": "guard:requires-multi-parameter-transform", "occ": 2}, - {"command": "drive info", "emitted": "workspace", "expect": "space-id", "via": "override:published-storage-space-compatibility", "occ": 2}, - {"command": "mail folder update", "emitted": "folder-id", "expect": "id", "via": "override:bind(folder_id)", "occ": 2}, - {"command": "report outbox list", "emitted": "template-type", "expect": "did-you-mean:blocked", "via": "override:block", "occ": 2}, - {"command": "chat +group-members", "emitted": "group-name", "expect": "group", "via": "concept:group_name+bind"}, - {"command": "chat group get-by-group-id", "emitted": "conversation-id", "expect": "did-you-mean:blocked", "via": "guard:open-conversation-id-vs-group-id"}, - {"command": "chat group get-by-group-id", "emitted": "id", "expect": "did-you-mean:blocked", "via": "guard:generic-id-vs-group-id"}, - {"command": "chat group rename", "emitted": "conversation-id", "expect": "id", "via": "concept:open_conversation_id+bind"}, - {"command": "chat group rename", "emitted": "group-id", "expect": "did-you-mean:blocked", "via": "guard:group-id-vs-open-conversation-id"}, - {"command": "chat message send", "emitted": "conversation-id", "expect": "group", "via": "concept:open_conversation_id"}, - {"command": "chat message add-emoji", "emitted": "open-conversation-id", "expect": "conversation-id", "via": "concept:open_conversation_id"}, - {"command": "chat message add-emoji", "emitted": "group-id", "expect": "did-you-mean:blocked", "via": "guard:group-id-vs-open-conversation-id"}, - {"command": "chat +group-members", "emitted": "conversation-id", "expect": "did-you-mean:blocked", "via": "guard:group-name-vs-open-conversation-id"}, - {"command": "chat +send-to-group", "emitted": "group-name", "expect": "group", "via": "concept:group_name+bind"}, - {"command": "chat message search-advanced", "emitted": "open-conversation-ids", "expect": "conversation-ids", "via": "concept:open_conversation_ids"}, - {"command": "chat message search-advanced", "emitted": "group-ids", "expect": "did-you-mean:blocked", "via": "guard:group-id-list-vs-open-conversation-id-list"}, - {"command": "chat message recall", "emitted": "message-id", "expect": "msg-id", "via": "concept:open_message_id"}, - {"command": "chat message add-favorite", "emitted": "msg-id", "expect": "open-message-id", "via": "concept:open_message_id"}, - {"command": "chat message list-by-ids", "emitted": "message-ids", "expect": "msg-ids", "via": "concept:open_message_ids"}, - {"command": "chat message list-by-ids", "emitted": "message-id", "expect": "did-you-mean:blocked", "via": "guard:single-vs-list"}, - {"command": "chat message reply", "emitted": "ref-message-id", "expect": "ref-msg-id", "via": "concept:referenced_open_message_id"}, - {"command": "chat message reply", "emitted": "message-id", "expect": "did-you-mean:blocked", "via": "guard:message-role"}, - {"command": "chat message forward-topic", "emitted": "src-open-message-id", "expect": "src-msg-id", "via": "override:scoped-role"}, - {"command": "chat message forward-topic", "emitted": "message-id", "expect": "did-you-mean:blocked", "via": "guard:message-role"}, - {"command": "chat message combine-forward", "emitted": "src-open-cid", "expect": "src-conversation-id", "via": "override:scoped-role"}, - {"command": "chat message forward-topic", "emitted": "dest-open-conversation-id", "expect": "dest-conversation-id", "via": "override:scoped-role"}, - {"command": "chat message forward", "emitted": "conversation-id", "expect": "did-you-mean:ambiguous", "via": "guard:source-vs-destination-role"}, - {"command": "chat group share-invite", "emitted": "conversation-id", "expect": "did-you-mean:ambiguous", "via": "guard:source-vs-target-role"}, - {"command": "chat message send", "emitted": "user-id", "expect": "user", "via": "concept:user_id"}, - {"command": "chat message list", "emitted": "user-id", "expect": "user", "via": "concept:user_id"}, - {"command": "chat +messages-list-direct", "emitted": "user-id", "expect": "user", "via": "concept:user_id"}, - {"command": "attendance +check-result", "emitted": "user-ids", "expect": "users", "via": "concept:user_ids"}, - {"command": "contact +list-sub-depts", "emitted": "parent-id", "expect": "dept", "via": "concept:dept_id"}, - {"command": "chat +conversation-info", "emitted": "user-id", "expect": "did-you-mean:blocked", "via": "guard:user-id-vs-open-dingtalk-id"}, - {"command": "chat group members remove", "emitted": "user-ids", "expect": "users", "via": "concept:user_ids"}, - {"command": "chat group members remove", "emitted": "user-id", "expect": "did-you-mean:blocked", "via": "guard:single-vs-list"}, - {"command": "chat group create", "emitted": "user-id", "expect": "did-you-mean:blocked", "via": "guard:single-vs-list"}, - {"command": "chat +chat-set-admin", "emitted": "user-id", "expect": "did-you-mean:blocked", "via": "guard:single-vs-list"}, - {"command": "chat +messages-read-status", "emitted": "user-id", "expect": "did-you-mean:blocked", "via": "guard:single-vs-list"}, - {"command": "chat group members list-by-ids", "emitted": "open-dingtalk-ids", "expect": "users", "via": "concept:open_dingtalk_ids+bind"}, - {"command": "chat group members remove-bot", "emitted": "open-bot-id", "expect": "bot-id", "via": "concept:open_bot_id"}, - {"command": "chat group members remove-bot", "emitted": "robot-code", "expect": "did-you-mean:blocked", "via": "guard:robot-code-vs-open-bot-id"}, - {"command": "chat group members add-bot", "emitted": "robot", "expect": "robot-code", "via": "concept:robot_code"}, - {"command": "chat +bot-find", "emitted": "name", "expect": "query", "via": "override:scoped"}, - {"command": "chat bot find", "emitted": "name", "expect": "query", "via": "override:scoped"}, - {"command": "chat +bot-search", "emitted": "query", "expect": "name", "via": "override:scoped"}, - {"command": "chat bot search", "emitted": "query", "expect": "name", "via": "override:scoped"}, - {"command": "chat message list-favorites", "emitted": "limit", "expect": "size", "via": "override:scoped"}, - {"command": "chat bot search", "emitted": "current-page", "expect": "page", "via": "override:scoped"}, - {"command": "chat bot search", "emitted": "cursor", "expect": "did-you-mean:blocked", "via": "guard:page-number-vs-cursor"}, - {"command": "chat message list-unread-conversations", "emitted": "limit", "expect": "count", "via": "override:scoped"}, - {"command": "chat +messages-list-unread-conversations", "emitted": "size", "expect": "count", "via": "override:scoped"}, - {"command": "chat message list", "emitted": "start", "expect": "time", "via": "override:scoped"}, - {"command": "chat message list", "emitted": "end", "expect": "did-you-mean:blocked", "via": "guard:single-time-vs-range"}, - {"command": "chat message list-all", "emitted": "time", "expect": "did-you-mean:blocked", "via": "guard:time-range-required"}, - {"command": "chat message list-by-sender", "emitted": "user-id", "expect": "sender-user-id", "via": "override:scoped-role"}, - {"command": "chat message list-by-sender", "emitted": "open-dingtalk-id", "expect": "sender-open-dingtalk-id", "via": "override:scoped-role"}, - {"command": "chat category create-smart", "emitted": "title", "expect": "name", "via": "override:scoped"}, - {"command": "chat category create", "emitted": "name", "expect": "title", "via": "override:scoped"}, - {"command": "chat message send", "emitted": "file-path", "expect": "file", "via": "native:reviewed-compatibility-alias"}, - {"command": "chat category add-conv", "emitted": "category-id", "expect": "did-you-mean:blocked", "via": "override:block-cardinality"}, - {"command": "chat category rename", "emitted": "category-ids", "expect": "did-you-mean:blocked", "via": "override:block-cardinality"}, - {"command": "chat group-role update", "emitted": "role-ids", "expect": "did-you-mean:blocked", "via": "override:block-cardinality"}, - {"command": "chat message send-by-webhook", "emitted": "at-user-ids", "expect": "at-users", "via": "override:scoped-role"}, - {"command": "chat message send-by-bot", "emitted": "at-users", "expect": "at-user-ids", "via": "override:scoped-role"}, - {"command": "chat message send-by-bot", "emitted": "at-ids", "expect": "did-you-mean:ambiguous", "via": "guard:user-id-vs-open-dingtalk-id"}, - {"command": "chat +bot-search", "emitted": "current-page", "expect": "page", "via": "override:scoped"}, - {"command": "chat +category-create", "emitted": "name", "expect": "title", "via": "override:scoped"}, - {"command": "chat +category-rename", "emitted": "name", "expect": "title", "via": "override:scoped"}, - {"command": "chat +messages-list-direct", "emitted": "start", "expect": "time", "via": "override:scoped"}, - {"command": "chat +messages-list-unread-conversations", "emitted": "limit", "expect": "count", "via": "override:scoped"}, - {"command": "chat +messages-send-by-webhook", "emitted": "at-user-ids", "expect": "at-users", "via": "override:scoped-role"}, - {"command": "chat +unread-chats", "emitted": "limit", "expect": "count", "via": "override:scoped"}, - {"command": "chat +unread-chats", "emitted": "size", "expect": "count", "via": "override:scoped"}, - {"command": "chat category rename", "emitted": "name", "expect": "title", "via": "override:scoped"}, - {"command": "chat message list-unread-conversations", "emitted": "size", "expect": "count", "via": "override:scoped"}, - {"command": "doc +comment-create", "emitted": "node-id", "expect": "node", "via": "concept:doc_node_id"}, - {"command": "doc +doc-append", "emitted": "node", "expect": "doc", "via": "concept:doc_node_id"}, - {"command": "doc +find-doc", "emitted": "keyword", "expect": "query", "via": "concept:search_query"}, - {"command": "doc +search", "emitted": "q", "expect": "query", "via": "concept:search_query"}, - {"command": "doc +comment-list", "emitted": "max-results", "expect": "limit", "via": "concept:pagination_size"}, - {"command": "doc +list", "emitted": "page-token", "expect": "cursor", "via": "concept:page_cursor"}, - {"command": "doc +copy", "emitted": "workspace-id", "expect": "workspace", "via": "concept:workspace_id"}, - {"command": "doc +copy", "emitted": "parent-folder-id", "expect": "folder", "via": "override:scoped-doc-folder"}, - {"command": "doc +copy", "emitted": "parent-id", "expect": "did-you-mean:blocked", "via": "guard:doc-folder-value-domain"}, - {"command": "doc +comment-reply", "emitted": "comment-id", "expect": "comment-key", "via": "concept:doc_comment_key"}, - {"command": "doc comment reply", "emitted": "mentioned-open-conversation-ids", "expect": "mentioned-open-conversation-id", "via": "override:scoped-role-list"}, - {"command": "doc comment reply", "emitted": "group-id", "expect": "did-you-mean:blocked", "via": "guard:numeric-group-id-vs-open-conversation-id"}, - {"command": "doc +comment-create", "emitted": "mentioned-open-conversation-id", "expect": "did-you-mean:blocked", "via": "guard:shortcut-missing-capability"}, - {"command": "doc block insert", "emitted": "parent-block-id", "expect": "parent-block", "via": "override:scoped-block-role"}, - {"command": "doc block insert", "emitted": "block-id", "expect": "did-you-mean:ambiguous", "via": "guard:parent-vs-reference-block-role"}, - {"command": "doc media insert", "emitted": "before-block-id", "expect": "did-you-mean:blocked", "via": "guard:requires-ref-block-plus-where"}, - {"command": "doc read", "emitted": "block-id", "expect": "did-you-mean:ambiguous", "via": "guard:requires-scope-and-boundary-role"}, - {"command": "doc export get", "emitted": "node", "expect": "did-you-mean:blocked", "via": "guard:document-node-vs-export-job"}, - {"command": "doc import get", "emitted": "job-id", "expect": "did-you-mean:blocked", "via": "guard:export-job-vs-import-task"}, - {"command": "doc +version-revert", "emitted": "version-number", "expect": "version", "via": "concept:doc_version_number"}, - {"command": "doc +version-revert", "emitted": "revision", "expect": "did-you-mean:blocked", "via": "concept:doc_version_number+exclude"}, - {"command": "doc update", "emitted": "version", "expect": "did-you-mean:blocked", "via": "guard:historical-version-vs-edit-revision"}, - {"command": "doc +share-doc", "emitted": "node-id", "expect": "did-you-mean:blocked", "via": "guard:node-id-needs-url-conversion"}, - {"command": "doc +comment-create", "emitted": "body", "expect": "content", "via": "concept:content_text"}, - {"command": "doc +doc-append", "emitted": "text", "expect": "content", "via": "native:reviewed-compatibility-alias"}, - {"command": "doc +export-submit", "emitted": "doc-id", "expect": "node", "via": "concept:doc_node_id"}, - {"command": "doc +move", "emitted": "parent-folder-id", "expect": "folder", "via": "override:scoped-doc-folder"}, - {"command": "doc +template-list", "emitted": "next-token", "expect": "cursor", "via": "concept:page_cursor"}, - {"command": "doc +version-list", "emitted": "page-size", "expect": "limit", "via": "concept:pagination_size"}, - {"command": "doc +version-save", "emitted": "file-id", "expect": "node", "via": "concept:doc_node_id"}, - {"command": "doc comment create", "emitted": "text", "expect": "content", "via": "concept:content_text"}, - {"command": "doc comment create-inline", "emitted": "body", "expect": "content", "via": "concept:content_text"}, - {"command": "doc comment delete", "emitted": "comment-id", "expect": "comment-key", "via": "concept:doc_comment_key"}, - {"command": "doc comment update", "emitted": "comment-id", "expect": "comment-key", "via": "concept:doc_comment_key"}, - {"command": "doc version revert", "emitted": "version-no", "expect": "version", "via": "concept:doc_version_number"}, - {"command": "chat +chat-messages", "emitted": "chat", "expect": "group", "via": "override:scoped-eval"}, - {"command": "chat +search-msg", "emitted": "chat", "expect": "group", "via": "override:scoped-eval"}, - {"command": "chat +chat-update", "emitted": "chat-id", "expect": "group", "via": "override:scoped-explicit-cid"}, - {"command": "chat +chat-update", "emitted": "conversation-id", "expect": "group", "via": "override:scoped-explicit-cid"}, - {"command": "chat +chat-update", "emitted": "open-conversation-id", "expect": "group", "via": "override:scoped-explicit-cid"}, - {"command": "chat +chat-update", "emitted": "id", "expect": "did-you-mean:blocked", "via": "guard:generic-id-value-domain"}, - {"command": "chat +chat-update", "emitted": "title", "expect": "name", "via": "override:scoped-group-title"}, - {"command": "chat +chat-update", "emitted": "new-title", "expect": "name", "via": "override:scoped-group-title"}, - {"command": "chat +flag-list", "emitted": "limit", "expect": "page-size", "via": "override:scoped-page-bound"}, - {"command": "chat +flag-list", "emitted": "max", "expect": "did-you-mean:blocked", "via": "guard:page-size-vs-total-count"}, - {"command": "chat +flag-list", "emitted": "max-results", "expect": "did-you-mean:blocked", "via": "guard:page-size-vs-total-count"}, - {"command": "chat +flag-list", "emitted": "max-size", "expect": "did-you-mean:blocked", "via": "guard:page-size-vs-total-count"}, - {"command": "chat +chat-members-list", "emitted": "chat-id", "expect": "conversation-id", "via": "override:scoped-explicit-cid"}, - {"command": "chat +chat-members-list", "emitted": "id", "expect": "conversation-id", "via": "override:scoped-explicit-cid"}, - {"command": "chat +chat-members-list", "emitted": "query", "expect": "did-you-mean:blocked", "via": "guard:unsupported-member-filter"}, - {"command": "chat +conversation-set-top", "emitted": "open-conversation-id", "expect": "conversation-id", "via": "override:scoped-explicit-cid"}, - {"command": "chat +conversation-set-top", "emitted": "chat-ids", "expect": "conversation-ids", "via": "override:scoped-explicit-cid-list"}, - {"command": "chat +conversation-set-top", "emitted": "groups", "expect": "did-you-mean:blocked", "via": "guard:group-name-or-list-ambiguity"}, - {"command": "chat +conversation-set-top", "emitted": "top", "expect": "did-you-mean:blocked", "via": "guard:inverse-boolean-semantics"}, - {"command": "chat +chat-members-get", "emitted": "conversation-id", "expect": "id", "via": "concept:open_conversation_id+bind"}, - {"command": "chat +chat-members-get", "emitted": "open-dingtalk-ids", "expect": "users", "via": "concept:open_dingtalk_ids+bind"}, - {"command": "chat +chat-members-get", "emitted": "group", "expect": "did-you-mean:blocked", "via": "guard:group-name-vs-open-conversation-id"}, - {"command": "chat +chat-members-get", "emitted": "chat", "expect": "id", "via": "concept:open_conversation_id+bind"}, - {"command": "chat +chat-get-by-id", "emitted": "group", "expect": "did-you-mean:blocked", "via": "guard:open-conversation-id-vs-numeric-group-id"}, - {"command": "chat +messages-list", "emitted": "start", "expect": "time", "via": "override:scoped-time-boundary"}, - {"command": "chat +messages-list", "emitted": "count", "expect": "did-you-mean:blocked", "via": "guard:page-size-vs-total-count"}, - {"command": "chat +messages-list", "emitted": "max-results", "expect": "did-you-mean:blocked", "via": "guard:page-size-vs-total-count"}, - {"command": "chat +messages-list", "emitted": "page-all", "expect": "did-you-mean:blocked", "via": "guard:requires-pagination-loop"}, - {"command": "chat +messages-reply", "emitted": "msg-id", "expect": "ref-msg-id", "via": "override:scoped-reference-message"}, - {"command": "chat +messages-reply", "emitted": "conversation-id", "expect": "group", "via": "native:reviewed-compatibility-alias"}, - {"command": "chat +messages-reply", "emitted": "chat", "expect": "group", "via": "concept:open_conversation_id"}, - {"command": "chat +messages-reply", "emitted": "open-conversation-id", "expect": "group", "via": "concept:open_conversation_id"}, - {"command": "chat +flag-cancel", "emitted": "group", "expect": "conversation-id", "via": "concept:open_conversation_id"}, - {"command": "chat +flag-cancel", "emitted": "chat", "expect": "conversation-id", "via": "concept:open_conversation_id"}, - {"command": "chat +flag-create", "emitted": "group", "expect": "conversation-id", "via": "concept:open_conversation_id"}, - {"command": "chat +chat-add-bot", "emitted": "conversation-id", "expect": "id", "via": "concept:open_conversation_id+bind"}, - {"command": "chat +chat-add-bot", "emitted": "robot", "expect": "robot-code", "via": "concept:robot_code"}, - {"command": "chat group audit-join-validation", "emitted": "user", "expect": "did-you-mean:ambiguous", "via": "guard:applicant-vs-inviter-role"}, - {"command": "chat +chat-audit-join", "emitted": "applicant-user-id", "expect": "applicant", "via": "override:scoped-user-role"}, - {"command": "chat +chat-audit-join", "emitted": "user-id", "expect": "did-you-mean:ambiguous", "via": "guard:applicant-vs-inviter-role"}, - {"command": "chat +chat-create", "emitted": "user-id", "expect": "did-you-mean:blocked", "via": "guard:single-vs-list"}, - {"command": "chat +chat-mute-member", "emitted": "user-ids", "expect": "users", "via": "override:scoped-mixed-id-list"}, - {"command": "chat +chat-mute-member", "emitted": "user-id", "expect": "did-you-mean:blocked", "via": "guard:single-vs-list"}, - {"command": "chat +chat-remove-bot", "emitted": "open-bot-id", "expect": "bot-id", "via": "concept:open_bot_id"}, - {"command": "chat +chat-role-remove", "emitted": "role-ids", "expect": "did-you-mean:blocked", "via": "guard:list-vs-single"}, - {"command": "chat +chat-role-remove-user", "emitted": "open-dingtalk-id", "expect": "user", "via": "override:scoped-mixed-id"}, - {"command": "chat +chat-transfer-owner", "emitted": "user-id", "expect": "new-owner", "via": "override:scoped-owner-role"}, - {"command": "chat +feed-group-query-item", "emitted": "chat-ids", "expect": "conversation-ids", "via": "override:scoped-explicit-cid-list"}, - {"command": "chat +feed-group-query-item", "emitted": "conversation-id", "expect": "did-you-mean:blocked", "via": "guard:single-vs-list"}, - {"command": "chat +messages-batch-recall-by-bot", "emitted": "message-id", "expect": "did-you-mean:blocked", "via": "guard:process-query-key-vs-open-message-id"}, - {"command": "chat +messages-combine-forward", "emitted": "src-open-cid", "expect": "src-conversation-id", "via": "override:scoped-source-role"}, - {"command": "chat +messages-combine-forward", "emitted": "conversation-id", "expect": "did-you-mean:ambiguous", "via": "guard:source-vs-destination-role"}, - {"command": "chat +messages-forward", "emitted": "source-message-id", "expect": "msg-id", "via": "override:scoped-source-role"}, - {"command": "chat +messages-forward", "emitted": "conversation-id", "expect": "did-you-mean:ambiguous", "via": "guard:source-vs-destination-role"}, - {"command": "chat +messages-forward-topic", "emitted": "src-open-message-id", "expect": "src-msg-id", "via": "override:scoped-source-role"}, - {"command": "chat +messages-forward-topic", "emitted": "message-id", "expect": "did-you-mean:blocked", "via": "guard:message-source-role"}, - {"command": "chat +messages-recall-by-bot", "emitted": "message-id", "expect": "did-you-mean:blocked", "via": "guard:process-query-key-vs-open-message-id"}, - {"command": "chat +messages-resource-download", "emitted": "conversation-id", "expect": "open-conversation-id", "via": "concept:open_conversation_id"}, - {"command": "chat +messages-resource-download", "emitted": "download-dir", "expect": "did-you-mean:blocked", "via": "guard:output-file-or-directory-contract"}, - {"command": "chat +messages-set-pin", "emitted": "conversation-id", "expect": "open-conversation-id", "via": "concept:open_conversation_id"}, - {"command": "doc +create", "emitted": "content-format", "expect": "doc-format", "via": "concept:doc_content_format"}, - {"command": "doc +create", "emitted": "content-file", "expect": "did-you-mean:blocked", "via": "guard:requires-file-read-transform"}, - {"command": "doc +inspect", "emitted": "include-versions", "expect": "include-history", "via": "override:scoped-section"}, - {"command": "doc +inspect", "emitted": "include", "expect": "did-you-mean:blocked", "via": "guard:requires-value-dependent-flag-expansion", "occ": 1}, - {"command": "doc +inspect", "emitted": "include-info", "expect": "did-you-mean:blocked", "via": "guard:base-info-always-returned", "occ": 1}, - {"command": "doc +update", "emitted": "mode", "expect": "command", "via": "override:scoped-operation", "occ": 5}, - {"command": "doc +update", "emitted": "revision", "expect": "expected-revision", "via": "concept:doc_edit_revision"}, - {"command": "doc +update", "emitted": "version", "expect": "did-you-mean:blocked", "via": "guard:historical-version-vs-edit-revision"}, - {"command": "doc +fetch", "emitted": "start-block", "expect": "start-block-id", "via": "override:scoped-boundary-role"}, - {"command": "doc +fetch", "emitted": "block-id", "expect": "did-you-mean:ambiguous", "via": "guard:start-vs-end-boundary-role"}, - {"command": "doc +access-grant", "emitted": "doc-id", "expect": "node", "via": "concept:doc_node_id"}, - {"command": "doc +history-revert", "emitted": "version-number", "expect": "version", "via": "concept:doc_version_number"}, - {"command": "doc +create-from-template", "emitted": "keyword", "expect": "query", "via": "concept:search_query"}, - {"command": "doc +create-from-template", "emitted": "workspace-id", "expect": "workspace", "via": "concept:workspace_id"}, - {"command": "doc +create-from-template", "emitted": "parent-folder-id", "expect": "folder", "via": "override:scoped-doc-folder"}, - {"command": "doc +media-download", "emitted": "file-id", "expect": "did-you-mean:ambiguous", "via": "guard:document-node-vs-attachment-resource-role"}, - {"command": "doc +resource-update", "emitted": "url", "expect": "did-you-mean:ambiguous", "via": "guard:document-url-vs-image-url-role"}, - {"command": "doc +share", "emitted": "node-id", "expect": "did-you-mean:blocked", "via": "guard:node-id-needs-url-conversion"}, - {"command": "doc +copy", "emitted": "dentry-uuid", "expect": "node", "via": "concept:doc_node_id"}, - {"command": "doc info", "emitted": "dentry-id", "expect": "did-you-mean:blocked", "via": "guard:dentry-id-vs-dentry-uuid"}, - {"command": "doc create", "emitted": "knowledge-base-id", "expect": "workspace", "via": "concept:workspace_id"}, - {"command": "doc create", "emitted": "space-id", "expect": "workspace", "via": "override:published-workspace-compatibility"}, - {"command": "drive list", "emitted": "knowledge-base-id", "expect": "workspace", "via": "concept:workspace_id"}, - {"command": "drive list", "emitted": "order-field", "expect": "order-by", "via": "override:scoped-sort-field"}, - {"command": "drive info", "emitted": "dentry-uuid", "expect": "node", "via": "override:scoped-node-id"}, - {"command": "drive info", "emitted": "dentry-id", "expect": "did-you-mean:blocked", "via": "guard:dentry-id-vs-dentry-uuid"}, - {"command": "drive copy", "emitted": "target-folder-id", "expect": "folder", "via": "override:scoped-destination-folder"}, - {"command": "drive copy", "emitted": "target-id", "expect": "did-you-mean:ambiguous", "via": "guard:destination-role-required"}, - {"command": "drive search", "emitted": "created-after", "expect": "created-from", "via": "concept:created_time_start"}, - {"command": "drive search", "emitted": "created-before", "expect": "created-to", "via": "concept:created_time_end"}, - {"command": "drive search", "emitted": "modified-after", "expect": "modified-from", "via": "concept:drive_modified_time_start"}, - {"command": "drive search", "emitted": "modified-before", "expect": "modified-to", "via": "concept:drive_modified_time_end"}, - {"command": "drive search", "emitted": "creator-user-ids", "expect": "creator-uids", "via": "concept:creator_user_ids"}, - {"command": "drive permission add", "emitted": "permission-role", "expect": "role", "via": "concept:document_permission_role"}, - {"command": "drive permission list", "emitted": "role", "expect": "did-you-mean:blocked", "via": "guard:permission-role-vs-filter-role"}, - {"command": "drive upload", "emitted": "source-file", "expect": "file", "via": "override:scoped-local-file"}, - {"command": "doc +search", "emitted": "created-after", "expect": "created-from", "via": "concept:created_time_start"}, - {"command": "doc +search", "emitted": "create-time-start", "expect": "created-from", "via": "concept:created_time_start", "occ": 1}, - {"command": "doc +search", "emitted": "create-time-end", "expect": "created-to", "via": "concept:created_time_end", "occ": 1}, - {"command": "doc +search", "emitted": "creator-user-ids", "expect": "creator-uids", "via": "concept:creator_user_ids"}, - {"command": "doc +access-grant", "emitted": "permission-role", "expect": "role", "via": "concept:document_permission_role"}, - {"command": "doc +export", "emitted": "output-path", "expect": "output", "via": "concept:local_output_path"}, - {"command": "drive download", "emitted": "destination-path", "expect": "output", "via": "concept:local_output_path"}, - {"command": "drive download", "emitted": "version-number", "expect": "version", "via": "concept:doc_version_number"}, - {"command": "drive recycle restore", "emitted": "recycle-item-id", "expect": "id", "via": "concept:drive_recycle_item_id"}, - {"command": "drive upload-info", "emitted": "size-bytes", "expect": "file-size", "via": "concept:drive_file_size_bytes"}, - {"command": "drive +info", "emitted": "drive-space-id", "expect": "space-id", "via": "concept:drive_storage_space_id"}, - {"command": "drive commit", "emitted": "storage-space-id", "expect": "space-id", "via": "concept:drive_storage_space_id"}, - {"command": "drive download", "emitted": "dingdrive-space-id", "expect": "space-id", "via": "concept:drive_storage_space_id"}, - {"command": "drive info", "emitted": "drive-space-id", "expect": "space-id", "via": "concept:drive_storage_space_id"}, - {"command": "drive list", "emitted": "storage-space-id", "expect": "space-id", "via": "concept:drive_storage_space_id"}, - {"command": "drive list", "emitted": "sort-direction", "expect": "order", "via": "concept:drive_sort_direction"}, - {"command": "drive mkdir", "emitted": "dingdrive-space-id", "expect": "space-id", "via": "concept:drive_storage_space_id"}, - {"command": "drive recycle list", "emitted": "drive-space-id", "expect": "space-id", "via": "concept:drive_storage_space_id"}, - {"command": "drive upload", "emitted": "storage-space-id", "expect": "space-id", "via": "concept:drive_storage_space_id"}, - {"command": "drive upload-info", "emitted": "dingdrive-space-id", "expect": "space-id", "via": "concept:drive_storage_space_id"}, - {"command": "doc +access-grant", "emitted": "user", "expect": "did-you-mean:ambiguous", "via": "guard:collaborator-name-vs-id-value-domain", "occ": 6}, - {"command": "doc +access-grant", "emitted": "target-user", "expect": "did-you-mean:ambiguous", "via": "guard:collaborator-name-vs-id-value-domain", "occ": 1}, - {"command": "doc +access-grant", "emitted": "user-id", "expect": "did-you-mean:blocked", "via": "guard:user-id-cannot-feed-name-resolver", "occ": 1}, - {"command": "doc +access-grant", "emitted": "user-ids", "expect": "did-you-mean:blocked", "via": "guard:user-id-cannot-feed-name-resolver", "occ": 1}, - {"command": "doc +access-grant", "emitted": "target-user-id", "expect": "did-you-mean:blocked", "via": "guard:user-id-cannot-feed-name-resolver"}, - {"command": "doc +access-grant", "emitted": "target-user-ids", "expect": "did-you-mean:blocked", "via": "guard:user-id-cannot-feed-name-resolver"}, - {"command": "doc +fetch", "emitted": "content-format", "expect": "did-you-mean:blocked", "via": "guard:content-format-vs-detail-contract", "occ": 3}, - {"command": "doc +fetch", "emitted": "doc-format", "expect": "did-you-mean:blocked", "via": "guard:content-format-vs-detail-contract", "occ": 1}, - {"command": "doc +fetch", "emitted": "range", "expect": "did-you-mean:blocked", "via": "guard:composite-range-needs-block-ids", "occ": 1}, - {"command": "doc +inspect", "emitted": "include-access", "expect": "include-permissions", "via": "override:scoped-permission-section", "occ": 3}, - {"command": "doc +inspect", "emitted": "include-member", "expect": "include-permissions", "via": "override:scoped-permission-section", "occ": 1}, - {"command": "doc +inspect", "emitted": "include-members", "expect": "include-permissions", "via": "override:scoped-permission-section", "occ": 2}, - {"command": "doc +inspect", "emitted": "include-meta", "expect": "did-you-mean:blocked", "via": "guard:base-metadata-already-returned", "occ": 2}, - {"command": "doc +inspect", "emitted": "include-metadata", "expect": "did-you-mean:blocked", "via": "guard:base-metadata-already-returned", "occ": 1}, - {"command": "doc +inspect", "emitted": "include-blocks", "expect": "did-you-mean:blocked", "via": "guard:content-read-belongs-to-fetch", "occ": 1}, - {"command": "doc +inspect", "emitted": "include-content", "expect": "did-you-mean:blocked", "via": "guard:content-read-belongs-to-fetch", "occ": 1}, - {"command": "doc +inspect", "emitted": "role", "expect": "did-you-mean:blocked", "via": "guard:permission-role-vs-document-node", "occ": 1}, - {"command": "doc +copy", "emitted": "name", "expect": "did-you-mean:blocked", "via": "guard:fuzzy-name-vs-node-role", "occ": 2}, - {"command": "doc +export", "emitted": "wait", "expect": "did-you-mean:blocked", "via": "guard:workflow-wait-vs-max-polls", "occ": 1}, - {"command": "doc +media-insert", "emitted": "after-block-id", "expect": "did-you-mean:blocked", "via": "guard:requires-ref-block-and-where-expansion", "occ": 1}, - {"command": "doc +media-insert", "emitted": "before-block-id", "expect": "did-you-mean:blocked", "via": "guard:requires-ref-block-and-where-expansion"}, - {"command": "doc +update", "emitted": "content-file", "expect": "did-you-mean:blocked", "via": "guard:requires-file-read-transform", "occ": 1}, - {"command": "doc +update", "emitted": "element", "expect": "did-you-mean:ambiguous", "via": "guard:content-vs-block-vs-reference-role", "occ": 1}, - {"command": "doc update", "emitted": "stdin", "expect": "did-you-mean:blocked", "via": "guard:stdin-requires-content-dash-transform", "occ": 1}, - {"command": "doc +version-save", "emitted": "title", "expect": "did-you-mean:blocked", "via": "guard:unsupported-version-metadata", "occ": 1}, - {"command": "doc +version-save", "emitted": "message", "expect": "did-you-mean:blocked", "via": "guard:unsupported-version-metadata", "occ": 1}, - {"command": "drive +search", "emitted": "keyword", "expect": "query", "via": "concept:search_query", "occ": 1}, - {"command": "contact +search-user", "emitted": "name", "expect": "did-you-mean:blocked", "via": "guard:person-name-vs-search-query", "occ": 1}, - {"command": "drive copy", "emitted": "name", "expect": "did-you-mean:blocked", "via": "guard:fuzzy-name-vs-node-role"}, - {"command": "drive +copy", "emitted": "name", "expect": "did-you-mean:blocked", "via": "guard:fuzzy-name-vs-node-role"}, - {"command": "drive move", "emitted": "name", "expect": "did-you-mean:blocked", "via": "guard:fuzzy-name-vs-node-role"}, - {"command": "drive +move", "emitted": "name", "expect": "did-you-mean:blocked", "via": "guard:fuzzy-name-vs-node-role"}, - {"command": "drive shortcut", "emitted": "name", "expect": "did-you-mean:blocked", "via": "guard:fuzzy-name-vs-node-role"}, - {"command": "drive +cover", "emitted": "dentry-uuid", "expect": "node", "via": "override:scoped-drive-node"}, - {"command": "drive +cover", "emitted": "name", "expect": "did-you-mean:blocked", "via": "guard:fuzzy-name-vs-drive-node"}, - {"command": "drive +create-folder", "emitted": "folder-name", "expect": "name", "via": "override:scoped-folder-name"}, - {"command": "drive +create-folder", "emitted": "storage-space-id", "expect": "space-id", "via": "concept:drive_storage_space_id"}, - {"command": "drive +create-shortcut", "emitted": "source-file-id", "expect": "node", "via": "override:scoped-source-node"}, - {"command": "drive +create-shortcut", "emitted": "target-folder-id", "expect": "folder", "via": "override:scoped-target-folder"}, - {"command": "drive +create-shortcut", "emitted": "target-workspace-id", "expect": "workspace", "via": "override:scoped-target-workspace"}, - {"command": "drive +create-shortcut", "emitted": "name", "expect": "did-you-mean:blocked", "via": "guard:fuzzy-name-vs-drive-node"}, - {"command": "drive +delete", "emitted": "file-id", "expect": "node", "via": "override:scoped-drive-node"}, - {"command": "drive +delete", "emitted": "dentry-id", "expect": "did-you-mean:blocked", "via": "guard:dentry-id-vs-node-id"}, - {"command": "drive +download", "emitted": "dentry-uuid", "expect": "node", "via": "override:scoped-drive-node"}, - {"command": "drive +download", "emitted": "destination-path", "expect": "output", "via": "concept:local_output_path"}, - {"command": "drive +inspect", "emitted": "include-statistics", "expect": "include-stats", "via": "override:scoped-inspect-section"}, - {"command": "drive +inspect", "emitted": "include-history", "expect": "did-you-mean:blocked", "via": "guard:doc-inspect-section"}, - {"command": "drive +list", "emitted": "folder-id", "expect": "folder", "via": "concept:folder_id"}, - {"command": "drive +list", "emitted": "page-size", "expect": "limit", "via": "concept:pagination_size"}, - {"command": "drive +list", "emitted": "next-token", "expect": "cursor", "via": "concept:page_cursor"}, - {"command": "drive +list", "emitted": "sort-direction", "expect": "order", "via": "concept:drive_sort_direction"}, - {"command": "drive +list", "emitted": "sort-by", "expect": "order-by", "via": "override:scoped-sort-field"}, - {"command": "drive +publish-get", "emitted": "dentry-uuid", "expect": "node", "via": "override:scoped-drive-node"}, - {"command": "drive +publish-unset", "emitted": "file-id", "expect": "node", "via": "override:scoped-drive-node"}, - {"command": "drive +recycle-list", "emitted": "storage-space-id", "expect": "space-id", "via": "concept:drive_storage_space_id"}, - {"command": "drive +recycle-list", "emitted": "page-token", "expect": "cursor", "via": "concept:page_cursor"}, - {"command": "drive +recycle-restore", "emitted": "recycle-item-id", "expect": "id", "via": "override:bind(drive_recycle_item_id)"}, - {"command": "drive +recycle-restore", "emitted": "node-id", "expect": "did-you-mean:blocked", "via": "guard:recycle-item-vs-node-id"}, - {"command": "drive +rename", "emitted": "file-id", "expect": "node", "via": "override:scoped-drive-node"}, - {"command": "drive +rename", "emitted": "new-name", "expect": "name", "via": "override:scoped-display-name"}, - {"command": "drive +star-add", "emitted": "dentry-uuid", "expect": "node", "via": "override:scoped-drive-node"}, - {"command": "drive +star-list", "emitted": "max-results", "expect": "limit", "via": "concept:pagination_size"}, - {"command": "drive +star-list", "emitted": "types", "expect": "did-you-mean:ambiguous", "via": "guard:content-type-value-domain"}, - {"command": "drive +star-remove", "emitted": "file-id", "expect": "node", "via": "override:scoped-drive-node"}, - {"command": "drive +stats", "emitted": "dentry-uuid", "expect": "node", "via": "override:scoped-drive-node"}, - {"command": "drive +upload", "emitted": "source-file", "expect": "file", "via": "override:scoped-local-file"}, - {"command": "drive +upload", "emitted": "name", "expect": "file-name", "via": "override:scoped-remote-name"}, - {"command": "drive +upload", "emitted": "overwrite-node-id", "expect": "node", "via": "override:scoped-overwrite-node"}, - {"command": "drive +upload", "emitted": "workspace-id", "expect": "did-you-mean:blocked", "via": "guard:unsupported-workspace-route"}, - {"command": "drive +version-download", "emitted": "version-number", "expect": "version", "via": "concept:doc_version_number"}, - {"command": "drive +version-download", "emitted": "save-path", "expect": "output", "via": "concept:local_output_path"}, - {"command": "drive +version-get", "emitted": "version-no", "expect": "version", "via": "concept:doc_version_number"}, - {"command": "drive +version-history", "emitted": "next-cursor", "expect": "cursor", "via": "concept:page_cursor"}, - {"command": "drive +version-history", "emitted": "page-size", "expect": "limit", "via": "concept:pagination_size"}, - {"command": "drive +version-revert", "emitted": "version-number", "expect": "version", "via": "concept:doc_version_number"}, - {"command": "drive +version-revert", "emitted": "revision", "expect": "did-you-mean:blocked", "via": "guard:document-revision-vs-file-version"}, - {"command": "drive +cover", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +create-shortcut", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +delete", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +download", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +inspect", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +publish-get", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +publish-unset", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +rename", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +star-add", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +star-remove", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +stats", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +upload", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +version-download", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +version-get", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +version-history", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +version-revert", "emitted": "node-id", "expect": "node", "via": "override:node-id-parity"}, - {"command": "drive +cover", "emitted": "url", "expect": "node", "via": "override:existing-command-parity"}, - {"command": "drive +create-shortcut", "emitted": "document-id", "expect": "node", "via": "override:existing-command-parity"}, - {"command": "drive +delete", "emitted": "folder-id", "expect": "node", "via": "override:single-folder-node-role"}, - {"command": "drive +inspect", "emitted": "document-id", "expect": "node", "via": "override:document-node-id"}, - {"command": "drive +inspect", "emitted": "folder-id", "expect": "node", "via": "override:single-folder-node-role"}, - {"command": "drive +publish-get", "emitted": "url", "expect": "node", "via": "override:existing-command-parity"}, - {"command": "drive +publish-unset", "emitted": "document-url", "expect": "node", "via": "override:existing-command-parity"}, - {"command": "drive +rename", "emitted": "document-id", "expect": "node", "via": "override:existing-command-parity"}, - {"command": "drive +rename", "emitted": "folder-id", "expect": "node", "via": "override:single-folder-node-role"}, - {"command": "drive +star-add", "emitted": "url", "expect": "node", "via": "override:existing-command-parity"}, - {"command": "drive +star-remove", "emitted": "doc-id", "expect": "node", "via": "override:existing-command-parity"}, - {"command": "drive +stats", "emitted": "document-url", "expect": "node", "via": "override:existing-command-parity"}, - {"command": "drive +upload", "emitted": "file-id", "expect": "node", "via": "override:overwrite-node-id-role"}, + {"command":"oa +search-forms","emitted":"keyword","expect":"query","via":"concept:search_query","occ":28}, + {"command":"aitable +list-tables","emitted":"base-id","expect":"base","via":"concept:base_id+morph","occ":26}, + {"command":"mail +find-mail-user","emitted":"keyword","expect":"query","via":"concept:search_query","occ":18}, + {"command":"aitable +field-get","emitted":"base","expect":"base-id","via":"concept:base_id+morph","occ":8}, + {"command":"aitable +record-query","emitted":"base","expect":"base-id","via":"concept:base_id+morph","occ":8}, + {"command":"aitable +table-get","emitted":"base","expect":"base-id","via":"concept:base_id+morph","occ":8}, + {"command":"doc block update","emitted":"text","expect":"content","via":"native:reviewed-compatibility-alias","occ":6}, + {"command":"contact +resolve-dept","emitted":"query","expect":"name","via":"concept:search_query+bind","occ":4}, + {"command":"devdoc article search","emitted":"limit","expect":"size","via":"concept:pagination_size","occ":2}, + {"command":"devdoc article search","emitted":"page-size","expect":"size","via":"concept:pagination_size","occ":2}, + {"command":"devdoc article search","emitted":"current-page","expect":"page","via":"concept:page_number","occ":2}, + {"command":"mail message search","emitted":"subject","expect":"query","via":"override:scoped_strict","occ":4}, + {"command":"aitable +record-share-url","emitted":"base","expect":"base-id","via":"concept:base_id+morph","occ":3}, + {"command":"aitable record query","emitted":"max-results","expect":"limit","via":"concept:pagination_size","occ":2}, + {"command":"calendar event list","emitted":"date","expect":"start","via":"override:scoped(reviewed+payload)","occ":2}, + {"command":"calendar event list","emitted":"start-time","expect":"start","via":"native:reviewed-compatibility-fallback","occ":2}, + {"command":"calendar event list","emitted":"min-time","expect":"start","via":"native:reviewed-compatibility-fallback","occ":2}, + {"command":"calendar event list","emitted":"time-min","expect":"start","via":"native:reviewed-compatibility-fallback","occ":2}, + {"command":"calendar event list","emitted":"end-time","expect":"end","via":"native:reviewed-compatibility-fallback","occ":2}, + {"command":"calendar event list","emitted":"time-max","expect":"end","via":"native:reviewed-compatibility-fallback","occ":2}, + {"command":"calendar event list","emitted":"max-results","expect":"limit","via":"native:reviewed-compatibility-fallback","occ":2}, + {"command":"calendar event list","emitted":"next-cursor","expect":"cursor","via":"native:reviewed-compatibility-fallback","occ":2}, + {"command":"calendar event list","emitted":"calendar","expect":"calendar-id","via":"native:reviewed-compatibility-fallback","occ":2}, + {"command":"chat message list","emitted":"max-results","expect":"limit","via":"concept:pagination_size","occ":2}, + {"command":"chat message list-by-sender","emitted":"time","expect":"did-you-mean:blocked","via":"guard:time-format-boundary","occ":2}, + {"command":"doc +template-search","emitted":"keyword","expect":"query","via":"concept:search_query","occ":2}, + {"command":"doc block insert","emitted":"text","expect":"content","via":"native:reviewed-compatibility-alias","occ":2}, + {"command":"drive list","emitted":"folder-id","expect":"folder","via":"concept:folder_id+morph","occ":2}, + {"command":"mail thread list","emitted":"max-results","expect":"limit","via":"concept:pagination_size","occ":2}, + {"command":"mail user search","emitted":"query","expect":"keyword","via":"concept:search_query","occ":2}, + {"command":"oa approval search-forms","emitted":"keyword","expect":"query","via":"concept:search_query","occ":2}, + {"command":"report list","emitted":"from-date","expect":"start","via":"concept:time_start","occ":2}, + {"command":"aitable +base-search","emitted":"keyword","expect":"query","via":"concept:search_query","occ":1}, + {"command":"contact +search-user","emitted":"keyword","expect":"query","via":"concept:search_query","occ":1}, + {"command":"chat group rename","emitted":"group","expect":"id","via":"override:bind(open_conversation_id)","occ":31}, + {"command":"ding +receiver-status","emitted":"id","expect":"ding-id","via":"override:scoped(ding_id)","occ":24}, + {"command":"chat group members","emitted":"group","expect":"id","via":"override:bind(open_conversation_id)","occ":8}, + {"command":"contact +list-sub-depts","emitted":"dept-id","expect":"dept","via":"concept:dept_id+morph","occ":4}, + {"command":"contact +list-sub-depts","emitted":"name","expect":"did-you-mean:blocked","via":"guard:name-vs-id","occ":2}, + {"command":"contact +list-sub-depts","emitted":"query","expect":"did-you-mean:blocked","via":"guard:query-vs-id","occ":2}, + {"command":"contact user profile get","emitted":"user-id","expect":"staff-id","via":"concept:user_id","occ":2}, + {"command":"contact user profile get","emitted":"id","expect":"staff-id","via":"override:scoped","occ":2}, + {"command":"contact user profile get","emitted":"ids","expect":"staff-id","via":"override:scoped","occ":2}, + {"command":"chat message send-by-bot","emitted":"user-id","expect":"did-you-mean:blocked","via":"guard:single-vs-list","occ":4}, + {"command":"chat message send-by-bot","emitted":"to-user-id","expect":"did-you-mean:blocked","via":"guard:single-vs-list","occ":1}, + {"command":"dev app get","emitted":"app-id","expect":"unified-app-id","via":"concept:app_id","occ":5}, + {"command":"chat message list-all","emitted":"from","expect":"start","via":"concept:time_start","occ":2}, + {"command":"chat message list-all","emitted":"start-time","expect":"start","via":"concept:time_start","occ":2}, + {"command":"chat message search-advanced","emitted":"group","expect":"conversation-ids","via":"native:reviewed-single-to-list","occ":4}, + {"command":"chat message send","emitted":"to-user","expect":"user","via":"override:scoped(reviewed+payload)","occ":4}, + {"command":"contact +dept-members","emitted":"name","expect":"dept","via":"override:scoped(reviewed)","occ":2}, + {"command":"contact +dept-members","emitted":"query","expect":"dept","via":"concept:search_query+bind","occ":2}, + {"command":"contact dept list-children","emitted":"parent-id","expect":"dept","via":"concept:dept_id","occ":2}, + {"command":"contact dept list-children","emitted":"parent","expect":"dept","via":"concept:dept_id","occ":2}, + {"command":"ding message receiver-status","emitted":"id","expect":"ding-id","via":"override:scoped(ding_id)","occ":2}, + {"command":"ding message receiver-status","emitted":"open-ding-id","expect":"ding-id","via":"concept:ding_id","occ":2}, + {"command":"chat group members add","emitted":"group","expect":"id","via":"override:bind(open_conversation_id)","occ":3}, + {"command":"attendance +check-result","emitted":"user-id","expect":"did-you-mean:blocked","via":"concept:user_ids+exclude","occ":2}, + {"command":"attendance check result","emitted":"user-ids","expect":"users","via":"concept:user_ids","occ":2}, + {"command":"chat group members remove","emitted":"group","expect":"id","via":"override:bind(open_conversation_id)","occ":2}, + {"command":"chat group set-admin","emitted":"user-id","expect":"user","via":"native:reviewed-compatibility-alias","occ":2}, + {"command":"ding message send","emitted":"robot","expect":"robot-code","via":"concept:robot_code","occ":2}, + {"command":"doc +export-get","emitted":"node","expect":"did-you-mean:blocked","via":"override:block","occ":2}, + {"command":"doc block delete","emitted":"index","expect":"did-you-mean:blocked","via":"override:block","occ":2}, + {"command":"doc block insert","emitted":"before-block-id","expect":"did-you-mean:blocked","via":"guard:requires-multi-parameter-transform","occ":2}, + {"command":"drive info","emitted":"workspace","expect":"space-id","via":"override:published-storage-space-compatibility","occ":2}, + {"command":"mail folder update","emitted":"folder-id","expect":"id","via":"override:bind(folder_id)","occ":2}, + {"command":"report outbox list","emitted":"template-type","expect":"did-you-mean:blocked","via":"override:block","occ":2}, + {"command":"chat +group-members","emitted":"group-name","expect":"group","via":"concept:group_name+bind"}, + {"command":"chat group get-by-group-id","emitted":"conversation-id","expect":"did-you-mean:blocked","via":"guard:open-conversation-id-vs-group-id"}, + {"command":"chat group get-by-group-id","emitted":"id","expect":"did-you-mean:blocked","via":"guard:generic-id-vs-group-id"}, + {"command":"chat group rename","emitted":"conversation-id","expect":"id","via":"concept:open_conversation_id+bind"}, + {"command":"chat group rename","emitted":"group-id","expect":"did-you-mean:blocked","via":"guard:group-id-vs-open-conversation-id"}, + {"command":"chat message send","emitted":"conversation-id","expect":"group","via":"concept:open_conversation_id"}, + {"command":"chat message add-emoji","emitted":"open-conversation-id","expect":"conversation-id","via":"concept:open_conversation_id"}, + {"command":"chat message add-emoji","emitted":"group-id","expect":"did-you-mean:blocked","via":"guard:group-id-vs-open-conversation-id"}, + {"command":"chat +group-members","emitted":"conversation-id","expect":"did-you-mean:blocked","via":"guard:group-name-vs-open-conversation-id"}, + {"command":"chat +send-to-group","emitted":"group-name","expect":"group","via":"concept:group_name+bind"}, + {"command":"chat message search-advanced","emitted":"open-conversation-ids","expect":"conversation-ids","via":"concept:open_conversation_ids"}, + {"command":"chat message search-advanced","emitted":"group-ids","expect":"did-you-mean:blocked","via":"guard:group-id-list-vs-open-conversation-id-list"}, + {"command":"chat message recall","emitted":"message-id","expect":"msg-id","via":"concept:open_message_id"}, + {"command":"chat message add-favorite","emitted":"msg-id","expect":"open-message-id","via":"concept:open_message_id"}, + {"command":"chat message list-by-ids","emitted":"message-ids","expect":"msg-ids","via":"concept:open_message_ids"}, + {"command":"chat message list-by-ids","emitted":"message-id","expect":"did-you-mean:blocked","via":"guard:single-vs-list"}, + {"command":"chat message reply","emitted":"ref-message-id","expect":"ref-msg-id","via":"concept:referenced_open_message_id"}, + {"command":"chat message reply","emitted":"message-id","expect":"did-you-mean:blocked","via":"guard:message-role"}, + {"command":"chat message forward-topic","emitted":"src-open-message-id","expect":"src-msg-id","via":"override:scoped-role"}, + {"command":"chat message forward-topic","emitted":"message-id","expect":"did-you-mean:blocked","via":"guard:message-role"}, + {"command":"chat message combine-forward","emitted":"src-open-cid","expect":"src-conversation-id","via":"override:scoped-role"}, + {"command":"chat message forward-topic","emitted":"dest-open-conversation-id","expect":"dest-conversation-id","via":"override:scoped-role"}, + {"command":"chat message forward","emitted":"conversation-id","expect":"did-you-mean:ambiguous","via":"guard:source-vs-destination-role"}, + {"command":"chat group share-invite","emitted":"conversation-id","expect":"did-you-mean:ambiguous","via":"guard:source-vs-target-role"}, + {"command":"chat message send","emitted":"user-id","expect":"user","via":"concept:user_id"}, + {"command":"chat message list","emitted":"user-id","expect":"user","via":"concept:user_id"}, + {"command":"chat +messages-list-direct","emitted":"user-id","expect":"user","via":"concept:user_id"}, + {"command":"attendance +check-result","emitted":"user-ids","expect":"users","via":"concept:user_ids"}, + {"command":"contact +list-sub-depts","emitted":"parent-id","expect":"dept","via":"concept:dept_id"}, + {"command":"chat +conversation-info","emitted":"user-id","expect":"did-you-mean:blocked","via":"guard:user-id-vs-open-dingtalk-id"}, + {"command":"chat group members remove","emitted":"user-ids","expect":"users","via":"concept:user_ids"}, + {"command":"chat group members remove","emitted":"user-id","expect":"did-you-mean:blocked","via":"guard:single-vs-list"}, + {"command":"chat group create","emitted":"user-id","expect":"did-you-mean:blocked","via":"guard:single-vs-list"}, + {"command":"chat +chat-set-admin","emitted":"user-id","expect":"did-you-mean:blocked","via":"guard:single-vs-list"}, + {"command":"chat +messages-read-status","emitted":"user-id","expect":"did-you-mean:blocked","via":"guard:single-vs-list"}, + {"command":"chat group members list-by-ids","emitted":"open-dingtalk-ids","expect":"users","via":"concept:open_dingtalk_ids+bind"}, + {"command":"chat group members remove-bot","emitted":"open-bot-id","expect":"bot-id","via":"concept:open_bot_id"}, + {"command":"chat group members remove-bot","emitted":"robot-code","expect":"did-you-mean:blocked","via":"guard:robot-code-vs-open-bot-id"}, + {"command":"chat group members add-bot","emitted":"robot","expect":"robot-code","via":"concept:robot_code"}, + {"command":"chat +bot-find","emitted":"name","expect":"query","via":"override:scoped"}, + {"command":"chat bot find","emitted":"name","expect":"query","via":"override:scoped"}, + {"command":"chat +bot-search","emitted":"query","expect":"name","via":"override:scoped"}, + {"command":"chat bot search","emitted":"query","expect":"name","via":"override:scoped"}, + {"command":"chat message list-favorites","emitted":"limit","expect":"size","via":"override:scoped"}, + {"command":"chat bot search","emitted":"current-page","expect":"page","via":"override:scoped"}, + {"command":"chat bot search","emitted":"cursor","expect":"did-you-mean:blocked","via":"guard:page-number-vs-cursor"}, + {"command":"chat message list-unread-conversations","emitted":"limit","expect":"count","via":"override:scoped"}, + {"command":"chat +messages-list-unread-conversations","emitted":"size","expect":"count","via":"override:scoped"}, + {"command":"chat message list","emitted":"start","expect":"time","via":"override:scoped"}, + {"command":"chat message list","emitted":"end","expect":"did-you-mean:blocked","via":"guard:single-time-vs-range"}, + {"command":"chat message list-all","emitted":"time","expect":"did-you-mean:blocked","via":"guard:time-range-required"}, + {"command":"chat message list-by-sender","emitted":"user-id","expect":"sender-user-id","via":"override:scoped-role"}, + {"command":"chat message list-by-sender","emitted":"open-dingtalk-id","expect":"sender-open-dingtalk-id","via":"override:scoped-role"}, + {"command":"chat category create-smart","emitted":"title","expect":"name","via":"override:scoped"}, + {"command":"chat category create","emitted":"name","expect":"title","via":"override:scoped"}, + {"command":"chat message send","emitted":"file-path","expect":"file","via":"native:reviewed-compatibility-alias"}, + {"command":"chat category add-conv","emitted":"category-id","expect":"did-you-mean:blocked","via":"override:block-cardinality"}, + {"command":"chat category rename","emitted":"category-ids","expect":"did-you-mean:blocked","via":"override:block-cardinality"}, + {"command":"chat group-role update","emitted":"role-ids","expect":"did-you-mean:blocked","via":"override:block-cardinality"}, + {"command":"chat message send-by-webhook","emitted":"at-user-ids","expect":"at-users","via":"override:scoped-role"}, + {"command":"chat message send-by-bot","emitted":"at-users","expect":"at-user-ids","via":"override:scoped-role"}, + {"command":"chat message send-by-bot","emitted":"at-ids","expect":"did-you-mean:ambiguous","via":"guard:user-id-vs-open-dingtalk-id"}, + {"command":"chat +bot-search","emitted":"current-page","expect":"page","via":"override:scoped"}, + {"command":"chat +category-create","emitted":"name","expect":"title","via":"override:scoped"}, + {"command":"chat +category-rename","emitted":"name","expect":"title","via":"override:scoped"}, + {"command":"chat +messages-list-direct","emitted":"start","expect":"time","via":"override:scoped"}, + {"command":"chat +messages-list-unread-conversations","emitted":"limit","expect":"count","via":"override:scoped"}, + {"command":"chat +messages-send-by-webhook","emitted":"at-user-ids","expect":"at-users","via":"override:scoped-role"}, + {"command":"chat +unread-chats","emitted":"limit","expect":"count","via":"override:scoped"}, + {"command":"chat +unread-chats","emitted":"size","expect":"count","via":"override:scoped"}, + {"command":"chat category rename","emitted":"name","expect":"title","via":"override:scoped"}, + {"command":"chat message list-unread-conversations","emitted":"size","expect":"count","via":"override:scoped"}, + {"command":"doc +comment-create","emitted":"node-id","expect":"node","via":"concept:doc_node_id"}, + {"command":"doc +doc-append","emitted":"node","expect":"doc","via":"concept:doc_node_id"}, + {"command":"doc +find-doc","emitted":"keyword","expect":"query","via":"concept:search_query"}, + {"command":"doc +search","emitted":"q","expect":"query","via":"concept:search_query"}, + {"command":"doc +comment-list","emitted":"max-results","expect":"limit","via":"concept:pagination_size"}, + {"command":"doc +list","emitted":"page-token","expect":"cursor","via":"concept:page_cursor"}, + {"command":"doc +copy","emitted":"workspace-id","expect":"workspace","via":"concept:workspace_id"}, + {"command":"doc +copy","emitted":"parent-folder-id","expect":"folder","via":"override:scoped-doc-folder"}, + {"command":"doc +copy","emitted":"parent-id","expect":"did-you-mean:blocked","via":"guard:doc-folder-value-domain"}, + {"command":"doc +comment-reply","emitted":"comment-id","expect":"comment-key","via":"concept:doc_comment_key"}, + {"command":"doc comment reply","emitted":"mentioned-open-conversation-ids","expect":"mentioned-open-conversation-id","via":"override:scoped-role-list"}, + {"command":"doc comment reply","emitted":"group-id","expect":"did-you-mean:blocked","via":"guard:numeric-group-id-vs-open-conversation-id"}, + {"command":"doc +comment-create","emitted":"mentioned-open-conversation-id","expect":"did-you-mean:blocked","via":"guard:shortcut-missing-capability"}, + {"command":"doc block insert","emitted":"parent-block-id","expect":"parent-block","via":"override:scoped-block-role"}, + {"command":"doc block insert","emitted":"block-id","expect":"did-you-mean:ambiguous","via":"guard:parent-vs-reference-block-role"}, + {"command":"doc media insert","emitted":"before-block-id","expect":"did-you-mean:blocked","via":"guard:requires-ref-block-plus-where"}, + {"command":"doc read","emitted":"block-id","expect":"did-you-mean:ambiguous","via":"guard:requires-scope-and-boundary-role"}, + {"command":"doc export get","emitted":"node","expect":"did-you-mean:blocked","via":"guard:document-node-vs-export-job"}, + {"command":"doc import get","emitted":"job-id","expect":"did-you-mean:blocked","via":"guard:export-job-vs-import-task"}, + {"command":"doc +version-revert","emitted":"version-number","expect":"version","via":"concept:doc_version_number"}, + {"command":"doc +version-revert","emitted":"revision","expect":"did-you-mean:blocked","via":"concept:doc_version_number+exclude"}, + {"command":"doc update","emitted":"version","expect":"did-you-mean:blocked","via":"guard:historical-version-vs-edit-revision"}, + {"command":"doc +share-doc","emitted":"node-id","expect":"did-you-mean:blocked","via":"guard:node-id-needs-url-conversion"}, + {"command":"doc +comment-create","emitted":"body","expect":"content","via":"concept:content_text"}, + {"command":"doc +doc-append","emitted":"text","expect":"content","via":"native:reviewed-compatibility-alias"}, + {"command":"doc +export-submit","emitted":"doc-id","expect":"node","via":"concept:doc_node_id"}, + {"command":"doc +move","emitted":"parent-folder-id","expect":"folder","via":"override:scoped-doc-folder"}, + {"command":"doc +template-list","emitted":"next-token","expect":"cursor","via":"concept:page_cursor"}, + {"command":"doc +version-list","emitted":"page-size","expect":"limit","via":"concept:pagination_size"}, + {"command":"doc +version-save","emitted":"file-id","expect":"node","via":"concept:doc_node_id"}, + {"command":"doc comment create","emitted":"text","expect":"content","via":"concept:content_text"}, + {"command":"doc comment create-inline","emitted":"body","expect":"content","via":"concept:content_text"}, + {"command":"doc comment delete","emitted":"comment-id","expect":"comment-key","via":"concept:doc_comment_key"}, + {"command":"doc comment update","emitted":"comment-id","expect":"comment-key","via":"concept:doc_comment_key"}, + {"command":"doc version revert","emitted":"version-no","expect":"version","via":"concept:doc_version_number"}, + {"command":"chat +chat-messages","emitted":"chat","expect":"group","via":"override:scoped-eval"}, + {"command":"chat +search-msg","emitted":"chat","expect":"group","via":"override:scoped-eval"}, + {"command":"chat +chat-update","emitted":"chat-id","expect":"group","via":"override:scoped-explicit-cid"}, + {"command":"chat +chat-update","emitted":"conversation-id","expect":"group","via":"override:scoped-explicit-cid"}, + {"command":"chat +chat-update","emitted":"open-conversation-id","expect":"group","via":"override:scoped-explicit-cid"}, + {"command":"chat +chat-update","emitted":"id","expect":"did-you-mean:blocked","via":"guard:generic-id-value-domain"}, + {"command":"chat +chat-update","emitted":"title","expect":"name","via":"override:scoped-group-title"}, + {"command":"chat +chat-update","emitted":"new-title","expect":"name","via":"override:scoped-group-title"}, + {"command":"chat +flag-list","emitted":"limit","expect":"page-size","via":"override:scoped-page-bound"}, + {"command":"chat +flag-list","emitted":"max","expect":"did-you-mean:blocked","via":"guard:page-size-vs-total-count"}, + {"command":"chat +flag-list","emitted":"max-results","expect":"did-you-mean:blocked","via":"guard:page-size-vs-total-count"}, + {"command":"chat +flag-list","emitted":"max-size","expect":"did-you-mean:blocked","via":"guard:page-size-vs-total-count"}, + {"command":"chat +chat-members-list","emitted":"chat-id","expect":"conversation-id","via":"override:scoped-explicit-cid"}, + {"command":"chat +chat-members-list","emitted":"id","expect":"conversation-id","via":"override:scoped-explicit-cid"}, + {"command":"chat +chat-members-list","emitted":"query","expect":"did-you-mean:blocked","via":"guard:unsupported-member-filter"}, + {"command":"chat +conversation-set-top","emitted":"open-conversation-id","expect":"conversation-id","via":"override:scoped-explicit-cid"}, + {"command":"chat +conversation-set-top","emitted":"chat-ids","expect":"conversation-ids","via":"override:scoped-explicit-cid-list"}, + {"command":"chat +conversation-set-top","emitted":"groups","expect":"did-you-mean:blocked","via":"guard:group-name-or-list-ambiguity"}, + {"command":"chat +conversation-set-top","emitted":"top","expect":"did-you-mean:blocked","via":"guard:inverse-boolean-semantics"}, + {"command":"chat +chat-members-get","emitted":"conversation-id","expect":"id","via":"concept:open_conversation_id+bind"}, + {"command":"chat +chat-members-get","emitted":"open-dingtalk-ids","expect":"users","via":"concept:open_dingtalk_ids+bind"}, + {"command":"chat +chat-members-get","emitted":"group","expect":"did-you-mean:blocked","via":"guard:group-name-vs-open-conversation-id"}, + {"command":"chat +chat-members-get","emitted":"chat","expect":"id","via":"concept:open_conversation_id+bind"}, + {"command":"chat +chat-get-by-id","emitted":"group","expect":"did-you-mean:blocked","via":"guard:open-conversation-id-vs-numeric-group-id"}, + {"command":"chat +messages-list","emitted":"start","expect":"time","via":"override:scoped-time-boundary"}, + {"command":"chat +messages-list","emitted":"count","expect":"did-you-mean:blocked","via":"guard:page-size-vs-total-count"}, + {"command":"chat +messages-list","emitted":"max-results","expect":"did-you-mean:blocked","via":"guard:page-size-vs-total-count"}, + {"command":"chat +messages-list","emitted":"page-all","expect":"did-you-mean:blocked","via":"guard:requires-pagination-loop"}, + {"command":"chat +messages-reply","emitted":"msg-id","expect":"ref-msg-id","via":"override:scoped-reference-message"}, + {"command":"chat +messages-reply","emitted":"conversation-id","expect":"group","via":"native:reviewed-compatibility-alias"}, + {"command":"chat +messages-reply","emitted":"chat","expect":"group","via":"concept:open_conversation_id"}, + {"command":"chat +messages-reply","emitted":"open-conversation-id","expect":"group","via":"concept:open_conversation_id"}, + {"command":"chat +flag-cancel","emitted":"group","expect":"conversation-id","via":"concept:open_conversation_id"}, + {"command":"chat +flag-cancel","emitted":"chat","expect":"conversation-id","via":"concept:open_conversation_id"}, + {"command":"chat +flag-create","emitted":"group","expect":"conversation-id","via":"concept:open_conversation_id"}, + {"command":"chat +chat-add-bot","emitted":"conversation-id","expect":"id","via":"concept:open_conversation_id+bind"}, + {"command":"chat +chat-add-bot","emitted":"robot","expect":"robot-code","via":"concept:robot_code"}, + {"command":"chat group audit-join-validation","emitted":"user","expect":"did-you-mean:ambiguous","via":"guard:applicant-vs-inviter-role"}, + {"command":"chat +chat-audit-join","emitted":"applicant-user-id","expect":"applicant","via":"override:scoped-user-role"}, + {"command":"chat +chat-audit-join","emitted":"user-id","expect":"did-you-mean:ambiguous","via":"guard:applicant-vs-inviter-role"}, + {"command":"chat +chat-create","emitted":"user-id","expect":"did-you-mean:blocked","via":"guard:single-vs-list"}, + {"command":"chat +chat-mute-member","emitted":"user-ids","expect":"users","via":"override:scoped-mixed-id-list"}, + {"command":"chat +chat-mute-member","emitted":"user-id","expect":"did-you-mean:blocked","via":"guard:single-vs-list"}, + {"command":"chat +chat-remove-bot","emitted":"open-bot-id","expect":"bot-id","via":"concept:open_bot_id"}, + {"command":"chat +chat-role-remove","emitted":"role-ids","expect":"did-you-mean:blocked","via":"guard:list-vs-single"}, + {"command":"chat +chat-role-remove-user","emitted":"open-dingtalk-id","expect":"user","via":"override:scoped-mixed-id"}, + {"command":"chat +chat-transfer-owner","emitted":"user-id","expect":"new-owner","via":"override:scoped-owner-role"}, + {"command":"chat +feed-group-query-item","emitted":"chat-ids","expect":"conversation-ids","via":"override:scoped-explicit-cid-list"}, + {"command":"chat +feed-group-query-item","emitted":"conversation-id","expect":"did-you-mean:blocked","via":"guard:single-vs-list"}, + {"command":"chat +messages-batch-recall-by-bot","emitted":"message-id","expect":"did-you-mean:blocked","via":"guard:process-query-key-vs-open-message-id"}, + {"command":"chat +messages-combine-forward","emitted":"src-open-cid","expect":"src-conversation-id","via":"override:scoped-source-role"}, + {"command":"chat +messages-combine-forward","emitted":"conversation-id","expect":"did-you-mean:ambiguous","via":"guard:source-vs-destination-role"}, + {"command":"chat +messages-forward","emitted":"source-message-id","expect":"msg-id","via":"override:scoped-source-role"}, + {"command":"chat +messages-forward","emitted":"conversation-id","expect":"did-you-mean:ambiguous","via":"guard:source-vs-destination-role"}, + {"command":"chat +messages-forward-topic","emitted":"src-open-message-id","expect":"src-msg-id","via":"override:scoped-source-role"}, + {"command":"chat +messages-forward-topic","emitted":"message-id","expect":"did-you-mean:blocked","via":"guard:message-source-role"}, + {"command":"chat +messages-recall-by-bot","emitted":"message-id","expect":"did-you-mean:blocked","via":"guard:process-query-key-vs-open-message-id"}, + {"command":"chat +messages-resource-download","emitted":"conversation-id","expect":"open-conversation-id","via":"concept:open_conversation_id"}, + {"command":"chat +messages-resource-download","emitted":"download-dir","expect":"did-you-mean:blocked","via":"guard:output-file-or-directory-contract"}, + {"command":"chat +messages-set-pin","emitted":"conversation-id","expect":"open-conversation-id","via":"concept:open_conversation_id"}, + {"command":"doc +create","emitted":"content-format","expect":"doc-format","via":"concept:doc_content_format"}, + {"command":"doc +create","emitted":"content-file","expect":"did-you-mean:blocked","via":"guard:requires-file-read-transform"}, + {"command":"doc +inspect","emitted":"include-versions","expect":"include-history","via":"override:scoped-section"}, + {"command":"doc +inspect","emitted":"include","expect":"did-you-mean:blocked","via":"guard:requires-value-dependent-flag-expansion","occ":1}, + {"command":"doc +inspect","emitted":"include-info","expect":"did-you-mean:blocked","via":"guard:base-info-always-returned","occ":1}, + {"command":"doc +update","emitted":"mode","expect":"command","via":"override:scoped-operation","occ":5}, + {"command":"doc +update","emitted":"revision","expect":"expected-revision","via":"concept:doc_edit_revision"}, + {"command":"doc +update","emitted":"version","expect":"did-you-mean:blocked","via":"guard:historical-version-vs-edit-revision"}, + {"command":"doc +fetch","emitted":"start-block","expect":"start-block-id","via":"override:scoped-boundary-role"}, + {"command":"doc +fetch","emitted":"block-id","expect":"did-you-mean:ambiguous","via":"guard:start-vs-end-boundary-role"}, + {"command":"doc +access-grant","emitted":"doc-id","expect":"node","via":"concept:doc_node_id"}, + {"command":"doc +history-revert","emitted":"version-number","expect":"version","via":"concept:doc_version_number"}, + {"command":"doc +create-from-template","emitted":"keyword","expect":"query","via":"concept:search_query"}, + {"command":"doc +create-from-template","emitted":"workspace-id","expect":"workspace","via":"concept:workspace_id"}, + {"command":"doc +create-from-template","emitted":"parent-folder-id","expect":"folder","via":"override:scoped-doc-folder"}, + {"command":"doc +media-download","emitted":"file-id","expect":"did-you-mean:ambiguous","via":"guard:document-node-vs-attachment-resource-role"}, + {"command":"doc +resource-update","emitted":"url","expect":"did-you-mean:ambiguous","via":"guard:document-url-vs-image-url-role"}, + {"command":"doc +share","emitted":"node-id","expect":"did-you-mean:blocked","via":"guard:node-id-needs-url-conversion"}, + {"command":"doc +copy","emitted":"dentry-uuid","expect":"node","via":"concept:doc_node_id"}, + {"command":"doc info","emitted":"dentry-id","expect":"did-you-mean:blocked","via":"guard:dentry-id-vs-dentry-uuid"}, + {"command":"doc create","emitted":"knowledge-base-id","expect":"workspace","via":"concept:workspace_id"}, + {"command":"doc create","emitted":"space-id","expect":"workspace","via":"override:published-workspace-compatibility"}, + {"command":"drive list","emitted":"knowledge-base-id","expect":"workspace","via":"concept:workspace_id"}, + {"command":"drive list","emitted":"order-field","expect":"order-by","via":"override:scoped-sort-field"}, + {"command":"drive info","emitted":"dentry-uuid","expect":"node","via":"override:scoped-node-id"}, + {"command":"drive info","emitted":"dentry-id","expect":"did-you-mean:blocked","via":"guard:dentry-id-vs-dentry-uuid"}, + {"command":"drive copy","emitted":"target-folder-id","expect":"folder","via":"override:scoped-destination-folder"}, + {"command":"drive copy","emitted":"target-id","expect":"did-you-mean:ambiguous","via":"guard:destination-role-required"}, + {"command":"drive search","emitted":"created-after","expect":"created-from","via":"concept:created_time_start"}, + {"command":"drive search","emitted":"created-before","expect":"created-to","via":"concept:created_time_end"}, + {"command":"drive search","emitted":"modified-after","expect":"modified-from","via":"concept:drive_modified_time_start"}, + {"command":"drive search","emitted":"modified-before","expect":"modified-to","via":"concept:drive_modified_time_end"}, + {"command":"drive search","emitted":"creator-user-ids","expect":"creator-uids","via":"concept:creator_user_ids"}, + {"command":"drive permission add","emitted":"permission-role","expect":"role","via":"concept:document_permission_role"}, + {"command":"drive permission list","emitted":"role","expect":"did-you-mean:blocked","via":"guard:permission-role-vs-filter-role"}, + {"command":"drive upload","emitted":"source-file","expect":"file","via":"override:scoped-local-file"}, + {"command":"doc +search","emitted":"created-after","expect":"created-from","via":"concept:created_time_start"}, + {"command":"doc +search","emitted":"create-time-start","expect":"created-from","via":"concept:created_time_start","occ":1}, + {"command":"doc +search","emitted":"create-time-end","expect":"created-to","via":"concept:created_time_end","occ":1}, + {"command":"doc +search","emitted":"creator-user-ids","expect":"creator-uids","via":"concept:creator_user_ids"}, + {"command":"doc +access-grant","emitted":"permission-role","expect":"role","via":"concept:document_permission_role"}, + {"command":"doc +export","emitted":"output-path","expect":"output","via":"concept:local_output_path"}, + {"command":"drive download","emitted":"destination-path","expect":"output","via":"concept:local_output_path"}, + {"command":"drive download","emitted":"version-number","expect":"version","via":"concept:doc_version_number"}, + {"command":"drive recycle restore","emitted":"recycle-item-id","expect":"id","via":"concept:drive_recycle_item_id"}, + {"command":"drive upload-info","emitted":"size-bytes","expect":"file-size","via":"concept:drive_file_size_bytes"}, + {"command":"drive +info","emitted":"drive-space-id","expect":"space-id","via":"concept:drive_storage_space_id"}, + {"command":"drive commit","emitted":"storage-space-id","expect":"space-id","via":"concept:drive_storage_space_id"}, + {"command":"drive download","emitted":"dingdrive-space-id","expect":"space-id","via":"concept:drive_storage_space_id"}, + {"command":"drive info","emitted":"drive-space-id","expect":"space-id","via":"concept:drive_storage_space_id"}, + {"command":"drive list","emitted":"storage-space-id","expect":"space-id","via":"concept:drive_storage_space_id"}, + {"command":"drive list","emitted":"sort-direction","expect":"order","via":"concept:drive_sort_direction"}, + {"command":"drive mkdir","emitted":"dingdrive-space-id","expect":"space-id","via":"concept:drive_storage_space_id"}, + {"command":"drive recycle list","emitted":"drive-space-id","expect":"space-id","via":"concept:drive_storage_space_id"}, + {"command":"drive upload","emitted":"storage-space-id","expect":"space-id","via":"concept:drive_storage_space_id"}, + {"command":"drive upload-info","emitted":"dingdrive-space-id","expect":"space-id","via":"concept:drive_storage_space_id"}, + {"command":"doc +access-grant","emitted":"user","expect":"did-you-mean:ambiguous","via":"guard:collaborator-name-vs-id-value-domain","occ":6}, + {"command":"doc +access-grant","emitted":"target-user","expect":"did-you-mean:ambiguous","via":"guard:collaborator-name-vs-id-value-domain","occ":1}, + {"command":"doc +access-grant","emitted":"user-id","expect":"did-you-mean:blocked","via":"guard:user-id-cannot-feed-name-resolver","occ":1}, + {"command":"doc +access-grant","emitted":"user-ids","expect":"did-you-mean:blocked","via":"guard:user-id-cannot-feed-name-resolver","occ":1}, + {"command":"doc +access-grant","emitted":"target-user-id","expect":"did-you-mean:blocked","via":"guard:user-id-cannot-feed-name-resolver"}, + {"command":"doc +access-grant","emitted":"target-user-ids","expect":"did-you-mean:blocked","via":"guard:user-id-cannot-feed-name-resolver"}, + {"command":"doc +fetch","emitted":"content-format","expect":"did-you-mean:blocked","via":"guard:content-format-vs-detail-contract","occ":3}, + {"command":"doc +fetch","emitted":"doc-format","expect":"did-you-mean:blocked","via":"guard:content-format-vs-detail-contract","occ":1}, + {"command":"doc +fetch","emitted":"range","expect":"did-you-mean:blocked","via":"guard:composite-range-needs-block-ids","occ":1}, + {"command":"doc +inspect","emitted":"include-access","expect":"include-permissions","via":"override:scoped-permission-section","occ":3}, + {"command":"doc +inspect","emitted":"include-member","expect":"include-permissions","via":"override:scoped-permission-section","occ":1}, + {"command":"doc +inspect","emitted":"include-members","expect":"include-permissions","via":"override:scoped-permission-section","occ":2}, + {"command":"doc +inspect","emitted":"include-meta","expect":"did-you-mean:blocked","via":"guard:base-metadata-already-returned","occ":2}, + {"command":"doc +inspect","emitted":"include-metadata","expect":"did-you-mean:blocked","via":"guard:base-metadata-already-returned","occ":1}, + {"command":"doc +inspect","emitted":"include-blocks","expect":"did-you-mean:blocked","via":"guard:content-read-belongs-to-fetch","occ":1}, + {"command":"doc +inspect","emitted":"include-content","expect":"did-you-mean:blocked","via":"guard:content-read-belongs-to-fetch","occ":1}, + {"command":"doc +inspect","emitted":"role","expect":"did-you-mean:blocked","via":"guard:permission-role-vs-document-node","occ":1}, + {"command":"doc +copy","emitted":"name","expect":"did-you-mean:blocked","via":"guard:fuzzy-name-vs-node-role","occ":2}, + {"command":"doc +export","emitted":"wait","expect":"did-you-mean:blocked","via":"guard:workflow-wait-vs-max-polls","occ":1}, + {"command":"doc +media-insert","emitted":"after-block-id","expect":"did-you-mean:blocked","via":"guard:requires-ref-block-and-where-expansion","occ":1}, + {"command":"doc +media-insert","emitted":"before-block-id","expect":"did-you-mean:blocked","via":"guard:requires-ref-block-and-where-expansion"}, + {"command":"doc +update","emitted":"content-file","expect":"did-you-mean:blocked","via":"guard:requires-file-read-transform","occ":1}, + {"command":"doc +update","emitted":"element","expect":"did-you-mean:ambiguous","via":"guard:content-vs-block-vs-reference-role","occ":1}, + {"command":"doc update","emitted":"stdin","expect":"did-you-mean:blocked","via":"guard:stdin-requires-content-dash-transform","occ":1}, + {"command":"doc +version-save","emitted":"title","expect":"did-you-mean:blocked","via":"guard:unsupported-version-metadata","occ":1}, + {"command":"doc +version-save","emitted":"message","expect":"did-you-mean:blocked","via":"guard:unsupported-version-metadata","occ":1}, + {"command":"drive +search","emitted":"keyword","expect":"query","via":"concept:search_query","occ":1}, + {"command":"contact +search-user","emitted":"name","expect":"did-you-mean:blocked","via":"guard:person-name-vs-search-query","occ":1}, + {"command":"drive copy","emitted":"name","expect":"did-you-mean:blocked","via":"guard:fuzzy-name-vs-node-role"}, + {"command":"drive +copy","emitted":"name","expect":"did-you-mean:blocked","via":"guard:fuzzy-name-vs-node-role"}, + {"command":"drive move","emitted":"name","expect":"did-you-mean:blocked","via":"guard:fuzzy-name-vs-node-role"}, + {"command":"drive +move","emitted":"name","expect":"did-you-mean:blocked","via":"guard:fuzzy-name-vs-node-role"}, + {"command":"drive shortcut","emitted":"name","expect":"did-you-mean:blocked","via":"guard:fuzzy-name-vs-node-role"}, + {"command":"drive +cover","emitted":"dentry-uuid","expect":"node","via":"override:scoped-drive-node"}, + {"command":"drive +cover","emitted":"name","expect":"did-you-mean:blocked","via":"guard:fuzzy-name-vs-drive-node"}, + {"command":"drive +create-folder","emitted":"folder-name","expect":"name","via":"override:scoped-folder-name"}, + {"command":"drive +create-folder","emitted":"storage-space-id","expect":"space-id","via":"concept:drive_storage_space_id"}, + {"command":"drive +create-shortcut","emitted":"source-file-id","expect":"node","via":"override:scoped-source-node"}, + {"command":"drive +create-shortcut","emitted":"target-folder-id","expect":"folder","via":"override:scoped-target-folder"}, + {"command":"drive +create-shortcut","emitted":"target-workspace-id","expect":"workspace","via":"override:scoped-target-workspace"}, + {"command":"drive +create-shortcut","emitted":"name","expect":"did-you-mean:blocked","via":"guard:fuzzy-name-vs-drive-node"}, + {"command":"drive +delete","emitted":"file-id","expect":"node","via":"override:scoped-drive-node"}, + {"command":"drive +delete","emitted":"dentry-id","expect":"did-you-mean:blocked","via":"guard:dentry-id-vs-node-id"}, + {"command":"drive +download","emitted":"dentry-uuid","expect":"node","via":"override:scoped-drive-node"}, + {"command":"drive +download","emitted":"destination-path","expect":"output","via":"concept:local_output_path"}, + {"command":"drive +inspect","emitted":"include-statistics","expect":"include-stats","via":"override:scoped-inspect-section"}, + {"command":"drive +inspect","emitted":"include-history","expect":"did-you-mean:blocked","via":"guard:doc-inspect-section"}, + {"command":"drive +list","emitted":"folder-id","expect":"folder","via":"concept:folder_id"}, + {"command":"drive +list","emitted":"page-size","expect":"limit","via":"concept:pagination_size"}, + {"command":"drive +list","emitted":"next-token","expect":"cursor","via":"concept:page_cursor"}, + {"command":"drive +list","emitted":"sort-direction","expect":"order","via":"concept:drive_sort_direction"}, + {"command":"drive +list","emitted":"sort-by","expect":"order-by","via":"override:scoped-sort-field"}, + {"command":"drive +publish-get","emitted":"dentry-uuid","expect":"node","via":"override:scoped-drive-node"}, + {"command":"drive +publish-unset","emitted":"file-id","expect":"node","via":"override:scoped-drive-node"}, + {"command":"drive +recycle-list","emitted":"storage-space-id","expect":"space-id","via":"concept:drive_storage_space_id"}, + {"command":"drive +recycle-list","emitted":"page-token","expect":"cursor","via":"concept:page_cursor"}, + {"command":"drive +recycle-restore","emitted":"recycle-item-id","expect":"id","via":"override:bind(drive_recycle_item_id)"}, + {"command":"drive +recycle-restore","emitted":"node-id","expect":"did-you-mean:blocked","via":"guard:recycle-item-vs-node-id"}, + {"command":"drive +rename","emitted":"file-id","expect":"node","via":"override:scoped-drive-node"}, + {"command":"drive +rename","emitted":"new-name","expect":"name","via":"override:scoped-display-name"}, + {"command":"drive +star-add","emitted":"dentry-uuid","expect":"node","via":"override:scoped-drive-node"}, + {"command":"drive +star-list","emitted":"max-results","expect":"limit","via":"concept:pagination_size"}, + {"command":"drive +star-list","emitted":"types","expect":"did-you-mean:ambiguous","via":"guard:content-type-value-domain"}, + {"command":"drive +star-remove","emitted":"file-id","expect":"node","via":"override:scoped-drive-node"}, + {"command":"drive +stats","emitted":"dentry-uuid","expect":"node","via":"override:scoped-drive-node"}, + {"command":"drive +upload","emitted":"source-file","expect":"file","via":"override:scoped-local-file"}, + {"command":"drive +upload","emitted":"name","expect":"file-name","via":"override:scoped-remote-name"}, + {"command":"drive +upload","emitted":"overwrite-node-id","expect":"node","via":"override:scoped-overwrite-node"}, + {"command":"drive +upload","emitted":"workspace-id","expect":"did-you-mean:blocked","via":"guard:unsupported-workspace-route"}, + {"command":"drive +version-download","emitted":"version-number","expect":"version","via":"concept:doc_version_number"}, + {"command":"drive +version-download","emitted":"save-path","expect":"output","via":"concept:local_output_path"}, + {"command":"drive +version-get","emitted":"version-no","expect":"version","via":"concept:doc_version_number"}, + {"command":"drive +version-history","emitted":"next-cursor","expect":"cursor","via":"concept:page_cursor"}, + {"command":"drive +version-history","emitted":"page-size","expect":"limit","via":"concept:pagination_size"}, + {"command":"drive +version-revert","emitted":"version-number","expect":"version","via":"concept:doc_version_number"}, + {"command":"drive +version-revert","emitted":"revision","expect":"did-you-mean:blocked","via":"guard:document-revision-vs-file-version"}, + {"command":"drive +cover","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +create-shortcut","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +delete","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +download","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +inspect","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +publish-get","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +publish-unset","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +rename","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +star-add","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +star-remove","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +stats","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +upload","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +version-download","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +version-get","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +version-history","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +version-revert","emitted":"node-id","expect":"node","via":"override:node-id-parity"}, + {"command":"drive +cover","emitted":"url","expect":"node","via":"override:existing-command-parity"}, + {"command":"drive +create-shortcut","emitted":"document-id","expect":"node","via":"override:existing-command-parity"}, + {"command":"drive +delete","emitted":"folder-id","expect":"node","via":"override:single-folder-node-role"}, + {"command":"drive +inspect","emitted":"document-id","expect":"node","via":"override:document-node-id"}, + {"command":"drive +inspect","emitted":"folder-id","expect":"node","via":"override:single-folder-node-role"}, + {"command":"drive +publish-get","emitted":"url","expect":"node","via":"override:existing-command-parity"}, + {"command":"drive +publish-unset","emitted":"document-url","expect":"node","via":"override:existing-command-parity"}, + {"command":"drive +rename","emitted":"document-id","expect":"node","via":"override:existing-command-parity"}, + {"command":"drive +rename","emitted":"folder-id","expect":"node","via":"override:single-folder-node-role"}, + {"command":"drive +star-add","emitted":"url","expect":"node","via":"override:existing-command-parity"}, + {"command":"drive +star-remove","emitted":"doc-id","expect":"node","via":"override:existing-command-parity"}, + {"command":"drive +stats","emitted":"document-url","expect":"node","via":"override:existing-command-parity"}, + {"command":"drive +upload","emitted":"file-id","expect":"node","via":"override:overwrite-node-id-role"}, {"command":"aitable +find-record","emitted":"base-id","expect":"base","via":"concept:base_id"}, {"command":"aitable record query","emitted":"base-token","expect":"base-id","via":"concept:base_id"}, {"command":"aitable +find-record","emitted":"table-id","expect":"table","via":"concept:table_id"}, @@ -1102,7 +1145,139 @@ {"command":"wiki +member-update","emitted":"user-id","expect":"user","via":"override:scoped_strict"}, {"command":"wiki +member-update","emitted":"uid","expect":"user","via":"override:scoped_strict"}, {"command":"wiki +member-remove","emitted":"user-id","expect":"user","via":"override:scoped_strict"}, - {"command":"wiki +member-remove","emitted":"uid","expect":"user","via":"override:scoped_strict"} + {"command":"wiki +member-remove","emitted":"uid","expect":"user","via":"override:scoped_strict"}, + {"command":"attendance +check-record","emitted":"at-user-ids","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +check-record","emitted":"target-user-ids","expect":"users","via":"full-product-review:alias"}, + {"command":"attendance +check-result","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +check-result","emitted":"target-user-ids","expect":"users","via":"full-product-review:alias"}, + {"command":"attendance +get-adjustment-rule","emitted":"adjustment-rule-id","expect":"adjustment-id","via":"full-product-review:alias"}, + {"command":"attendance +get-adjustment-rule","emitted":"class-id","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +get-approve-template","emitted":"approval-type","expect":"type","via":"full-product-review:alias"}, + {"command":"attendance +get-approve-template","emitted":"approval-types","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +get-checkin-record","emitted":"at-user-ids","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +get-checkin-record","emitted":"operator-company-id","expect":"operator-corp-id","via":"full-product-review:alias"}, + {"command":"attendance +get-checkin-record","emitted":"operator-user-id","expect":"operator-staff-id","via":"full-product-review:alias"}, + {"command":"attendance +get-checkin-record","emitted":"user-id","expect":"did-you-mean:ambiguous","via":"full-product-review:guard"}, + {"command":"attendance +get-leave-records","emitted":"at-user-ids","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +get-leave-records","emitted":"vacation-type-code","expect":"leave-code","via":"full-product-review:alias"}, + {"command":"attendance +get-overtime-rule","emitted":"adjustment-id","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +get-overtime-rule","emitted":"overtime-rule-id","expect":"overtime-id","via":"full-product-review:alias"}, + {"command":"attendance +get-schedule","emitted":"at-user-ids","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +get-schedule","emitted":"target-user-ids","expect":"users","via":"full-product-review:alias"}, + {"command":"attendance +get-schedule","emitted":"work-date-begin","expect":"start","via":"full-product-review:alias"}, + {"command":"attendance +get-self-setting","emitted":"scene","expect":"setting-scene","via":"override:latest-main-setting-scene"}, + {"command":"attendance +get-self-setting","emitted":"setting-type","expect":"did-you-mean:blocked","via":"guard:setting-type-vs-scene"}, + {"command":"attendance +get-self-setting","emitted":"staff-id","expect":"user","via":"full-product-review:alias"}, + {"command":"attendance +get-summary","emitted":"at-user-ids","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +get-summary","emitted":"attendance-date","expect":"date","via":"full-product-review:alias"}, + {"command":"attendance +get-summary","emitted":"statistics-type","expect":"stats-type","via":"full-product-review:alias"}, + {"command":"attendance +list-approve","emitted":"at-user-ids","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +list-approve","emitted":"target-user-ids","expect":"users","via":"full-product-review:alias"}, + {"command":"attendance +query-report-data","emitted":"at-user-ids","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +query-report-data","emitted":"report-column-ids","expect":"columns","via":"full-product-review:alias"}, + {"command":"attendance +search-adjustment-rule","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +search-adjustment-rule","emitted":"current-page","expect":"page","via":"full-product-review:alias"}, + {"command":"attendance +search-class","emitted":"class-filter-type","expect":"filter-type","via":"full-product-review:alias"}, + {"command":"attendance +search-class","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +search-group","emitted":"attendance-group-type","expect":"type","via":"full-product-review:alias"}, + {"command":"attendance +search-group","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +search-overtime-rule","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"attendance +search-overtime-rule","emitted":"current-page","expect":"page","via":"full-product-review:alias"}, + {"command":"mail +contact-list","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"mail +contact-list","emitted":"next-page-token","expect":"cursor","via":"full-product-review:alias"}, + {"command":"mail +find-mail-user","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"mail +find-mail-user","emitted":"max-results","expect":"limit","via":"full-product-review:alias"}, + {"command":"mail +find-mail-user","emitted":"next-cursor","expect":"cursor","via":"concept:page_cursor"}, + {"command":"mail +folder-list","emitted":"calendar-id","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"mail +folder-list","emitted":"folder-id","expect":"folder","via":"full-product-review:alias"}, + {"command":"mail +message","emitted":"attachment-id","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"mail +message","emitted":"message-id","expect":"id","via":"full-product-review:alias"}, + {"command":"mail +messages","emitted":"conversation-id","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"mail +messages","emitted":"message-ids","expect":"ids","via":"full-product-review:alias"}, + {"command":"mail +recent-mail","emitted":"calendar-id","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"mail +recent-mail","emitted":"max-results","expect":"limit","via":"full-product-review:alias"}, + {"command":"mail +recent-mail","emitted":"next-cursor","expect":"cursor","via":"concept:page_cursor"}, + {"command":"mail +search-mail","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"mail +search-mail","emitted":"max-results","expect":"size","via":"full-product-review:alias"}, + {"command":"mail +search-mail","emitted":"next-cursor","expect":"cursor","via":"concept:page_cursor"}, + {"command":"mail +template-list","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"mail +template-list","emitted":"next-page-token","expect":"cursor","via":"full-product-review:alias"}, + {"command":"mail +thread","emitted":"conversation-id","expect":"id","via":"full-product-review:alias"}, + {"command":"mail +thread","emitted":"mail-id","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"mail +thread-list","emitted":"calendar-id","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"mail +thread-list","emitted":"next-page-token","expect":"cursor","via":"full-product-review:alias"}, + {"command":"mail +triage","emitted":"next-cursor","expect":"cursor","via":"concept:page_cursor"}, + {"command":"mail +triage","emitted":"page-size","expect":"limit","via":"concept:pagination_size"}, + {"command":"mail +triage","emitted":"subject","expect":"did-you-mean:blocked","via":"guard:kql-field-not-flag"}, + {"command":"mail +unread-mail","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"mail +unread-mail","emitted":"max-results","expect":"size","via":"full-product-review:alias"}, + {"command":"mail +unread-mail","emitted":"next-cursor","expect":"cursor","via":"concept:page_cursor"}, + {"command":"mail +user-search","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"mail +user-search","emitted":"next-page-token","expect":"cursor","via":"full-product-review:alias"}, + {"command":"oa +list-cc","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"oa +list-cc","emitted":"current-page","expect":"page","via":"full-product-review:alias"}, + {"command":"oa +list-executed","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"oa +list-executed","emitted":"current-page","expect":"page","via":"full-product-review:alias"}, + {"command":"oa +list-forms","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"oa +list-forms","emitted":"next-page-token","expect":"cursor","via":"full-product-review:alias"}, + {"command":"oa +list-pending","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"oa +list-pending","emitted":"current-page","expect":"page","via":"full-product-review:alias"}, + {"command":"oa +list-submitted","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"oa +list-submitted","emitted":"current-page","expect":"page","via":"full-product-review:alias"}, + {"command":"oa +my-initiated","emitted":"count","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"oa +my-initiated","emitted":"current-page","expect":"page","via":"full-product-review:alias"}, + {"command":"ding +list","emitted":"message-type","expect":"type","via":"override:scoped_strict"}, + {"command":"ding +list","emitted":"next-cursor","expect":"cursor","via":"override:scoped_strict"}, + {"command":"ding +list","emitted":"page-token","expect":"did-you-mean:blocked","via":"guard:integer-cursor-vs-token"}, + {"command":"ding +list","emitted":"remind-type","expect":"did-you-mean:blocked","via":"guard:list-enum-vs-reminder-enum"}, + {"command":"ding +recall-personal","emitted":"ding-id","expect":"id","via":"concept:ding_id+bind"}, + {"command":"ding +send-personal","emitted":"open-dingtalk-ids","expect":"users","via":"concept:open_dingtalk_ids+bind"}, + {"command":"ding +send-personal","emitted":"user-ids","expect":"did-you-mean:blocked","via":"guard:open-dingtalk-id-vs-user-id"}, + {"command":"report +outbox-list","emitted":"page-size","expect":"size","via":"concept:pagination_size"}, + {"command":"report +report-latest","emitted":"end-time","expect":"end","via":"concept:time_end"}, + {"command":"report +report-latest","emitted":"start-time","expect":"start","via":"concept:time_start"}, + {"command":"report +report-latest","emitted":"template-id","expect":"did-you-mean:blocked","via":"guard:template-id-vs-name"}, + {"command":"report +report-latest","emitted":"template-name","expect":"keyword","via":"override:template-name"}, + {"command":"report +template-search","emitted":"keyword","expect":"query","via":"concept:search_query"}, + {"command":"report +template-search","emitted":"template-id","expect":"did-you-mean:blocked","via":"guard:template-id-vs-search-query"}, + {"command":"sheet +list-sheets","emitted":"block-id","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"sheet +list-sheets","emitted":"dentry-uuid","expect":"node","via":"full-product-review:alias"}, + {"command":"sheet +list-sheets","emitted":"document-id","expect":"node","via":"full-product-review:alias"}, + {"command":"sheet +read","emitted":"a1-ranges","expect":"did-you-mean:blocked","via":"full-product-review:guard"}, + {"command":"sheet +read","emitted":"worksheet-id","expect":"sheet-id","via":"full-product-review:alias"}, + {"command":"markdown create","emitted":"body","expect":"content","via":"concept:content_text"}, + {"command":"markdown create","emitted":"content-file","expect":"did-you-mean:ambiguous","via":"guard:content-source-transport"}, + {"command":"markdown create","emitted":"drive-space-id","expect":"space-id","via":"concept:drive_storage_space_id"}, + {"command":"markdown create","emitted":"filename","expect":"name","via":"concept:markdown_file_name"}, + {"command":"markdown create","emitted":"local-file","expect":"file","via":"concept:markdown_local_file_path"}, + {"command":"markdown create","emitted":"node-id","expect":"did-you-mean:blocked","via":"guard:create-vs-overwrite"}, + {"command":"markdown create","emitted":"source-file","expect":"file","via":"override:source-file"}, + {"command":"markdown diff","emitted":"context-lines","expect":"context","via":"override:diff-context-lines"}, + {"command":"markdown diff","emitted":"from-version","expect":"version","via":"override:left-version-role"}, + {"command":"markdown diff","emitted":"local-file","expect":"file","via":"concept:markdown_local_file_path"}, + {"command":"markdown diff","emitted":"path","expect":"did-you-mean:ambiguous","via":"guard:node-vs-local-file"}, + {"command":"markdown diff","emitted":"source-file","expect":"file","via":"override:source-file"}, + {"command":"markdown diff","emitted":"to-version","expect":"version2","via":"override:right-version-role"}, + {"command":"markdown diff","emitted":"version-id","expect":"did-you-mean:blocked","via":"guard:version-number-vs-id"}, + {"command":"markdown diff","emitted":"version-no","expect":"version","via":"concept:doc_version_number"}, + {"command":"markdown fetch","emitted":"path","expect":"did-you-mean:ambiguous","via":"guard:remote-node-vs-local-output"}, + {"command":"markdown fetch","emitted":"save-path","expect":"output","via":"concept:local_output_path"}, + {"command":"markdown fetch","emitted":"storage-space-id","expect":"space-id","via":"concept:drive_storage_space_id"}, + {"command":"markdown fetch","emitted":"url","expect":"did-you-mean:blocked","via":"guard:node-id-vs-url"}, + {"command":"markdown overwrite","emitted":"document-id","expect":"node","via":"override:remote-node-id"}, + {"command":"markdown overwrite","emitted":"file-name","expect":"name","via":"concept:markdown_file_name"}, + {"command":"markdown overwrite","emitted":"folder-id","expect":"did-you-mean:blocked","via":"guard:existing-node-vs-parent-folder"}, + {"command":"markdown overwrite","emitted":"id","expect":"did-you-mean:ambiguous","via":"guard:destructive-node-target"}, + {"command":"markdown overwrite","emitted":"preview-only","expect":"dry-run","via":"override:preview-safety"}, + {"command":"markdown overwrite","emitted":"source-file","expect":"file","via":"override:source-file"}, + {"command":"markdown overwrite","emitted":"text","expect":"content","via":"concept:content_text"}, + {"command":"markdown patch","emitted":"file","expect":"did-you-mean:blocked","via":"guard:no-file-replacement"}, + {"command":"markdown patch","emitted":"find-text","expect":"pattern","via":"override:patch-pattern"}, + {"command":"markdown patch","emitted":"id","expect":"did-you-mean:ambiguous","via":"guard:destructive-node-target"}, + {"command":"markdown patch","emitted":"preview-only","expect":"dry-run","via":"override:preview-safety"}, + {"command":"markdown patch","emitted":"regexp","expect":"regex","via":"override:patch-regex"}, + {"command":"markdown patch","emitted":"replacement","expect":"content","via":"override:replacement-role"}, + {"command":"markdown patch","emitted":"text","expect":"did-you-mean:ambiguous","via":"guard:pattern-vs-replacement"} ] } }