diff --git a/CHANGELOG.md b/CHANGELOG.md index 75ffdc50..bdc323cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,9 +6,13 @@ The format is inspired by [Keep a Changelog](https://keepachangelog.com/) and th ## [Unreleased] +### Added + +- **MCP URL resolution** — adds `dws mcp url get ` for resolving a DingTalk MCP Market ID to the current user and organization scoped Streamable HTTP URL, while keeping the helper-only `mcp-meta` endpoint out of the public product command surface. + ### Changed -- **Chat local-file sending** — deprecates the open-source-only `chat media upload` compatibility command and removes its legacy AppKey/AppSecret OAPI path. Send local images and files through `chat message send --msg-type file --file-path`; callers that already hold a mediaId may continue to use `--msg-type image --media-id`. +- **Chat local-file sending** — hides the open-source-only `chat media upload` compatibility command from Help, Schema, and bundled Skills, and removes its legacy AppKey/AppSecret OAPI path. Historical argv still receives an actionable migration error. Send local images and files through `chat message send --msg-type file --file-path`; callers that already hold a mediaId may continue to use `--msg-type image --media-id`. ### Fixed diff --git a/internal/app/mcp_url_command.go b/internal/app/mcp_url_command.go new file mode 100644 index 00000000..00333f96 --- /dev/null +++ b/internal/app/mcp_url_command.go @@ -0,0 +1,108 @@ +// Copyright 2026 Alibaba Group +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package app + +import ( + "encoding/json" + "fmt" + "strings" + + "github.com/DingTalk-Real-AI/dingtalk-workspace-cli/internal/cli" + apperrors "github.com/DingTalk-Real-AI/dingtalk-workspace-cli/internal/errors" + "github.com/DingTalk-Real-AI/dingtalk-workspace-cli/internal/output" + "github.com/DingTalk-Real-AI/dingtalk-workspace-cli/pkg/edition" + "github.com/spf13/cobra" +) + +const ( + mcpMetaServerID = "mcp-meta" + mcpMetaURLTool = "get_mcp_server_url" +) + +func newMCPURLGroup(caller edition.ToolCaller) *cobra.Command { + group := &cobra.Command{ + Use: "url", + Short: "管理 MCP 服务连接地址", + Args: cobra.NoArgs, + DisableAutoGenTag: true, + RunE: func(cmd *cobra.Command, _ []string) error { + return cmd.Help() + }, + } + group.AddCommand(newMCPURLGetCommand(caller)) + return group +} + +func newMCPURLGetCommand(caller edition.ToolCaller) *cobra.Command { + cmd := &cobra.Command{ + Use: "get ", + Short: "按 mcpId 获取 MCP 的 Streamable HTTP 服务地址", + Long: "输入 MCP 市场 mcpId,返回以当前用户和组织身份访问该 MCP 的 " + + "Streamable HTTP 服务地址。\n\n" + + "安全提示:返回的 mcpURL 和 mcpJSON 可能包含身份凭据,仅限个人使用," + + "请勿分享到群聊、文档、邮件、代码仓库或日志。", + Example: " dws mcp url get 2480\n" + + " dws mcp url get 2480 --format json", + Args: cobra.ExactArgs(1), + DisableAutoGenTag: true, + RunE: func(cmd *cobra.Command, args []string) error { + if caller == nil { + return fmt.Errorf("MCP tool caller is not configured") + } + mcpID := strings.TrimSpace(args[0]) + if mcpID == "" { + return fmt.Errorf("mcpId 不能为空") + } + + result, err := caller.CallTool(cmd.Context(), mcpMetaServerID, mcpMetaURLTool, map[string]any{ + "mcpId": mcpID, + }) + if err != nil { + return fmt.Errorf("获取 MCP 服务地址: %w", err) + } + return writeMCPURLResult(cmd, result) + }, + } + cli.AnnotateRuntimePositionals(cmd, cli.RuntimeSchemaPositional{ + Name: "mcp_id", + Type: "string", + Description: "钉钉 MCP 市场中的 mcpId", + Required: true, + Index: 0, + }) + return cmd +} + +func writeMCPURLResult(cmd *cobra.Command, result *edition.ToolResult) error { + if result == nil { + return fmt.Errorf("MCP 元服务返回空结果") + } + // get_mcp_server_url returns one JSON document in its first non-empty text + // block. Other block types and trailing blocks are intentionally ignored. + for _, block := range result.Content { + if block.Type != "text" || strings.TrimSpace(block.Text) == "" { + continue + } + if err := apperrors.ClassifyMCPResponseText(block.Text); err != nil { + return err + } + + var payload any + if err := json.Unmarshal([]byte(block.Text), &payload); err != nil { + return fmt.Errorf("MCP 元服务返回了无效 JSON: %w", err) + } + return output.WriteCommandPayload(cmd, payload, output.FormatJSON) + } + return fmt.Errorf("MCP 元服务返回空结果") +} diff --git a/internal/app/mcp_url_command_test.go b/internal/app/mcp_url_command_test.go new file mode 100644 index 00000000..c8c8ae0e --- /dev/null +++ b/internal/app/mcp_url_command_test.go @@ -0,0 +1,194 @@ +// Copyright 2026 Alibaba Group +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package app + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "strings" + "testing" + + apperrors "github.com/DingTalk-Real-AI/dingtalk-workspace-cli/internal/errors" + "github.com/DingTalk-Real-AI/dingtalk-workspace-cli/pkg/edition" + "github.com/spf13/cobra" +) + +type mcpURLTestCaller struct { + productID string + toolName string + args map[string]any + result *edition.ToolResult + err error +} + +func (c *mcpURLTestCaller) CallTool(_ context.Context, productID, toolName string, args map[string]any) (*edition.ToolResult, error) { + c.productID = productID + c.toolName = toolName + c.args = args + return c.result, c.err +} + +func (*mcpURLTestCaller) Format() string { return "json" } +func (*mcpURLTestCaller) DryRun() bool { return false } +func (*mcpURLTestCaller) Fields() string { return "" } +func (*mcpURLTestCaller) JQ() string { return "" } + +func executeMCPURLCommand(t *testing.T, caller edition.ToolCaller, args ...string) (string, error) { + t.Helper() + root := &cobra.Command{Use: "mcp", SilenceErrors: true, SilenceUsage: true} + root.AddCommand(newMCPURLGroup(caller)) + var out bytes.Buffer + root.SetOut(&out) + root.SetErr(&out) + root.SetArgs(args) + err := root.ExecuteContext(t.Context()) + return out.String(), err +} + +func TestMCPURLGetCallsMetaServerAndPreservesResponse(t *testing.T) { + const response = `{"result":{"mcpURL":"https://example.test/mcp?key=one&token=two","mcpJSON":{"transport":"streamable-http"},"name":"Example"}}` + caller := &mcpURLTestCaller{ + result: &edition.ToolResult{Content: []edition.ContentBlock{{Type: "text", Text: response}}}, + } + + out, err := executeMCPURLCommand(t, caller, "url", "get", " 10043 ") + if err != nil { + t.Fatalf("execute mcp url get: %v", err) + } + if caller.productID != mcpMetaServerID { + t.Fatalf("productID = %q, want %q", caller.productID, mcpMetaServerID) + } + if caller.toolName != mcpMetaURLTool { + t.Fatalf("toolName = %q, want %q", caller.toolName, mcpMetaURLTool) + } + if got := caller.args["mcpId"]; got != "10043" { + t.Fatalf("mcpId = %#v, want %q", got, "10043") + } + + var payload map[string]any + if err := json.Unmarshal([]byte(out), &payload); err != nil { + t.Fatalf("output is not JSON: %v\n%s", err, out) + } + result, ok := payload["result"].(map[string]any) + if !ok { + t.Fatalf("output result = %#v", payload["result"]) + } + if got := result["mcpURL"]; got != "https://example.test/mcp?key=one&token=two" { + t.Fatalf("result.mcpURL = %#v", got) + } +} + +func TestMCPURLGetRejectsBlankID(t *testing.T) { + _, err := executeMCPURLCommand(t, &mcpURLTestCaller{}, "url", "get", " ") + if err == nil || !strings.Contains(err.Error(), "mcpId 不能为空") { + t.Fatalf("error = %v, want blank mcpId error", err) + } +} + +func TestMCPURLGroupShowsHelp(t *testing.T) { + out, err := executeMCPURLCommand(t, nil, "url") + if err != nil { + t.Fatalf("execute mcp url: %v", err) + } + if !strings.Contains(out, "get") { + t.Fatalf("help output does not list get command:\n%s", out) + } +} + +func TestMCPURLGetRejectsMissingCaller(t *testing.T) { + _, err := executeMCPURLCommand(t, nil, "url", "get", "10043") + if err == nil || !strings.Contains(err.Error(), "caller is not configured") { + t.Fatalf("error = %v, want missing caller error", err) + } +} + +func TestMCPURLGetPropagatesCallError(t *testing.T) { + caller := &mcpURLTestCaller{err: errors.New("permission denied")} + _, err := executeMCPURLCommand(t, caller, "url", "get", "10043") + if err == nil || !strings.Contains(err.Error(), "permission denied") { + t.Fatalf("error = %v, want call error", err) + } +} + +func TestMCPURLGetRejectsInvalidJSON(t *testing.T) { + caller := &mcpURLTestCaller{ + result: &edition.ToolResult{Content: []edition.ContentBlock{{Type: "text", Text: "not-json"}}}, + } + _, err := executeMCPURLCommand(t, caller, "url", "get", "10043") + if err == nil || !strings.Contains(err.Error(), "无效 JSON") { + t.Fatalf("error = %v, want invalid JSON error", err) + } +} + +func TestMCPURLGetRejectsEmptyResults(t *testing.T) { + tests := []struct { + name string + result *edition.ToolResult + }{ + {name: "nil result"}, + { + name: "no usable text content", + result: &edition.ToolResult{Content: []edition.ContentBlock{ + {Type: "image", Text: "ignored"}, + {Type: "text", Text: " "}, + }}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + caller := &mcpURLTestCaller{result: tt.result} + _, err := executeMCPURLCommand(t, caller, "url", "get", "10043") + if err == nil || !strings.Contains(err.Error(), "返回空结果") { + t.Fatalf("error = %v, want empty result error", err) + } + }) + } +} + +func TestMCPURLGetClassifiesBusinessError(t *testing.T) { + caller := &mcpURLTestCaller{ + result: &edition.ToolResult{Content: []edition.ContentBlock{{ + Type: "text", + Text: `{"success":false,"errorMsg":"搜索内容不能为空"}`, + }}}, + } + _, err := executeMCPURLCommand(t, caller, "url", "get", "10043") + if err == nil { + t.Fatal("expected classified business error") + } + var typed *apperrors.Error + if !errors.As(err, &typed) || typed.Reason != "business_error" { + t.Fatalf("error = %#v, want classified business error", err) + } +} + +func TestRootRegistersMCPURLGet(t *testing.T) { + root := NewRootCommand(t.Context()) + mcp, _, err := root.Find([]string{"mcp"}) + if err != nil { + t.Fatalf("find mcp: %v", err) + } + if mcp.Hidden { + t.Fatal("mcp command must be public when it contains reviewed public helpers") + } + cmd, _, err := root.Find([]string{"mcp", "url", "get"}) + if err != nil { + t.Fatalf("find mcp url get: %v", err) + } + if got := cmd.CommandPath(); got != "dws mcp url get" { + t.Fatalf("command path = %q, want %q", got, "dws mcp url get") + } +} diff --git a/internal/app/root.go b/internal/app/root.go index 2d9db090..a51a24f5 100644 --- a/internal/app/root.go +++ b/internal/app/root.go @@ -385,11 +385,16 @@ func newRootCommandWithEngine(rootCtx context.Context, engine *pipeline.Engine, schemaCmd := newSchemaCommand(loader) mcpCmd := newMCPCommand(rootCtx, loader, runner, engine) - mcpCmd.Hidden = true + // The legacy dynamic MCP surface remains disabled, but reviewed static MCP + // helpers registered below are part of the public CLI and Schema surface. + mcpCmd.Hidden = false + mcpCmd.Short = "管理 MCP 服务连接信息" + mcpCmd.Long = "管理经过审核并纳入 Schema 的 MCP 服务连接辅助能力。" // Wrap the caller so every MCP tool call's shape is recorded to the local // usage log (privacy-preserving; see internal/shortcut/usage). Powers // `dws shortcut stats` and future high-frequency shortcut distillation. patCaller := newRecordingToolCaller(newToolCallerAdapter(runner, flags)) + mcpCmd.AddCommand(newMCPURLGroup(patCaller)) utilityCommands := []*cobra.Command{ newAuthCommand(patCaller), diff --git a/internal/app/root_help_test.go b/internal/app/root_help_test.go index 6ee9f50a..3282ea40 100644 --- a/internal/app/root_help_test.go +++ b/internal/app/root_help_test.go @@ -79,11 +79,11 @@ func TestRootKeepsMainBranchChatCompatibilityCommands(t *testing.T) { } mediaGroup := mustFindCommand(t, root, "chat", "media") - if mediaGroup.Deprecated == "" || mediaGroup.Hidden || !mediaGroup.Runnable() { + if mediaGroup.Deprecated == "" || !mediaGroup.Hidden || !mediaGroup.Runnable() { t.Fatalf("chat media compatibility contract: deprecated=%q hidden=%v runnable=%v", mediaGroup.Deprecated, mediaGroup.Hidden, mediaGroup.Runnable()) } mediaUpload := mustFindCommand(t, mediaGroup, "upload") - if mediaUpload.Deprecated == "" || mediaUpload.Hidden || !mediaUpload.Runnable() { + if mediaUpload.Deprecated == "" || !mediaUpload.Hidden || !mediaUpload.Runnable() { t.Fatalf("chat media upload compatibility contract: deprecated=%q hidden=%v runnable=%v", mediaUpload.Deprecated, mediaUpload.Hidden, mediaUpload.Runnable()) } for _, flag := range []string{"file", "type"} { @@ -98,6 +98,41 @@ func TestRootKeepsMainBranchChatCompatibilityCommands(t *testing.T) { mustFindCommand(t, root, "conference", "meeting", "reserve") } +func TestChatHelpAndSchemaHideRetiredMediaUpload(t *testing.T) { + for _, args := range [][]string{ + {"chat", "--help"}, + {"chat", "media", "--help"}, + } { + root := NewRootCommand() + var output bytes.Buffer + root.SetOut(&output) + root.SetErr(&output) + root.SetArgs(args) + if err := root.Execute(); err != nil { + t.Fatalf("dws %s: %v\n%s", strings.Join(args, " "), err, output.String()) + } + for _, line := range strings.Split(output.String(), "\n") { + fields := strings.Fields(line) + if len(fields) > 0 && (fields[0] == "media" || fields[0] == "upload") { + t.Fatalf("dws %s exposes retired command in Help line %q:\n%s", strings.Join(args, " "), line, output.String()) + } + } + } + + root := NewRootCommand() + var output bytes.Buffer + root.SetOut(&output) + root.SetErr(&output) + root.SetArgs([]string{"schema", "--cli-path", "chat media upload", "--format", "json"}) + err := root.Execute() + if err == nil { + t.Fatalf("retired chat media upload remains queryable from Schema:\n%s", output.String()) + } + if !strings.Contains(err.Error(), "unknown runtime schema path") { + t.Fatalf("retired chat media upload Schema error = %v, want unknown path", err) + } +} + func TestRootChatMediaUploadWithoutAppCredentialsReturnsMigrationValidation(t *testing.T) { for _, key := range []string{"DWS_CLIENT_ID", "DWS_CLIENT_SECRET"} { value, existed := os.LookupEnv(key) diff --git a/internal/cli/schema_agent_metadata/index.json b/internal/cli/schema_agent_metadata/index.json index a63268fd..768daa91 100644 --- a/internal/cli/schema_agent_metadata/index.json +++ b/internal/cli/schema_agent_metadata/index.json @@ -1,17 +1,17 @@ { "version": 1, - "source_hash": "sha256:89ec25b13e7aecd4586a776febdda07678b47498c37924411ea38ee8be0aa50c", - "surface_hash": "sha256:7ef588f38052f0104e027c8daff5fefd68698781f2c87715461183d4058288ed", + "source_hash": "sha256:0977e2b3d4af77d348318fd0cd7ce36d325ba9ca4e7c9ed0d6daeb1be0a0c4ec", + "surface_hash": "sha256:e85148774f65d34b01d50ebdc702b785afdb8ea78663b6f2eeecc35bc3cb3fd5", "coverage": { - "surface_products": 22, - "products_with_metadata": 22, - "surface_tools": 572, - "tools_with_metadata": 572, - "tools_with_agent_summary": 572, - "tools_with_use_when": 572, - "tools_with_avoid_when": 572, - "tools_with_examples": 572, - "tools_with_interface_mode": 572, + "surface_products": 23, + "products_with_metadata": 23, + "surface_tools": 573, + "tools_with_metadata": 573, + "tools_with_agent_summary": 573, + "tools_with_use_when": 573, + "tools_with_avoid_when": 573, + "tools_with_examples": 573, + "tools_with_interface_mode": 573, "unmatched_skill_tools": 119, "unreviewed_skill_tools": 7 }, @@ -1089,6 +1089,74 @@ "查收、搜索、阅读、回复、发送或整理邮件" ] }, + "mcp": { + "agent_summary": "解析和管理当前身份可用的 MCP 服务连接信息", + "agent_summary_source": "dws-agent-selection/mcp", + "avoid_when": [ + "查询普通钉钉业务数据时使用对应产品命令,不要使用 mcp" + ], + "field_provenance": { + "agent_summary": { + "value": "解析和管理当前身份可用的 MCP 服务连接信息", + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "candidates": [ + { + "value": "解析和管理当前身份可用的 MCP 服务连接信息", + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "selected": true + } + ] + }, + "avoid_when": { + "value": [ + "查询普通钉钉业务数据时使用对应产品命令,不要使用 mcp" + ], + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "candidates": [ + { + "value": [ + "查询普通钉钉业务数据时使用对应产品命令,不要使用 mcp" + ], + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "selected": true + } + ] + }, + "use_when": { + "value": [ + "需要把钉钉 MCP 市场中的服务连接到支持 Streamable HTTP 的 Agent 或客户端" + ], + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "candidates": [ + { + "value": [ + "需要把钉钉 MCP 市场中的服务连接到支持 Streamable HTTP 的 Agent 或客户端" + ], + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "selected": true + } + ] + } + }, + "source_refs": [ + "CommandRegistry:product=mcp", + "cobra-help:dws mcp --help", + "internal/cli/schema_command_registry.json#mcp", + "internal/cli/schema_hints/selection/mcp.json" + ], + "use_when": [ + "需要把钉钉 MCP 市场中的服务连接到支持 Streamable HTTP 的 Agent 或客户端" + ] + }, "minutes": { "agent_summary": "查询和维护钉钉听记的转写、摘要、待办、权限、录音、标签、说话人总结及文件上传会话。", "agent_summary_source": "dws-agent-selection/minutes", @@ -1605,6 +1673,7 @@ "event", "live", "mail", + "mcp", "minutes", "oa", "pat", diff --git a/internal/cli/schema_agent_metadata/mcp.json b/internal/cli/schema_agent_metadata/mcp.json new file mode 100644 index 00000000..e506fd28 --- /dev/null +++ b/internal/cli/schema_agent_metadata/mcp.json @@ -0,0 +1,267 @@ +{ + "product_id": "mcp", + "tools": { + "mcp url get": { + "agent_summary": "按 MCP 市场 mcpId 获取当前用户和组织可用的 Streamable HTTP 地址", + "agent_summary_source": "dws-agent-selection/mcp", + "availability": "available", + "avoid_when": [ + "只是查询 DWS 已公开命令或参数时使用 dws schema", + "用户要求把返回的凭据 URL 发送到群聊、文档、邮件、日志或代码仓库时不要执行或传播" + ], + "confirmation": "not_required", + "effect": "read", + "effect_source": "agent-hint", + "examples": [ + "dws mcp url get 10043 --format json" + ], + "field_provenance": { + "agent_summary": { + "value": "按 MCP 市场 mcpId 获取当前用户和组织可用的 Streamable HTTP 地址", + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。", + "candidates": [ + { + "value": "按 MCP 市场 mcpId 获取当前用户和组织可用的 Streamable HTTP 地址", + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。" + } + ] + }, + "availability": { + "value": "available", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "candidates": [ + { + "value": "available", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output." + } + ] + }, + "avoid_when": { + "value": [ + "只是查询 DWS 已公开命令或参数时使用 dws schema", + "用户要求把返回的凭据 URL 发送到群聊、文档、邮件、日志或代码仓库时不要执行或传播" + ], + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。", + "candidates": [ + { + "value": [ + "只是查询 DWS 已公开命令或参数时使用 dws schema", + "用户要求把返回的凭据 URL 发送到群聊、文档、邮件、日志或代码仓库时不要执行或传播" + ], + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。" + } + ] + }, + "confirmation": { + "value": "not_required", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "candidates": [ + { + "value": "not_required", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output." + } + ] + }, + "effect": { + "value": "read", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "candidates": [ + { + "value": "read", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output." + } + ] + }, + "examples": { + "value": [ + "dws mcp url get 10043 --format json" + ], + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。", + "candidates": [ + { + "value": [ + "dws mcp url get 10043 --format json" + ], + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。" + } + ] + }, + "idempotency": { + "value": "idempotent", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "candidates": [ + { + "value": "idempotent", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output." + } + ] + }, + "interface_mode": { + "value": "composite", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "candidates": [ + { + "value": "composite", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output." + } + ] + }, + "interface_reason": { + "value": "Reviewed unpinned remote adapter: the public CLI wrapper calls the helper-only mcp-meta/get_mcp_server_url endpoint, which is intentionally absent from the public product catalog and pinned MCP metadata.", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "candidates": [ + { + "value": "Reviewed unpinned remote adapter: the public CLI wrapper calls the helper-only mcp-meta/get_mcp_server_url endpoint, which is intentionally absent from the public product catalog and pinned MCP metadata.", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output." + } + ] + }, + "interface_ref": { + "value": null, + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "interface_disposition_matrix", + "review_reason": "final interface mode composite forbids a direct MCP interface_ref", + "candidates": [ + { + "value": null, + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "final interface mode composite forbids a direct MCP interface_ref" + } + ] + }, + "reviewed": { + "value": true, + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "candidates": [ + { + "value": true, + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output." + }, + { + "value": true, + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "selected": false, + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。" + } + ] + }, + "risk": { + "value": "medium", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "candidates": [ + { + "value": "medium", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output." + } + ] + }, + "use_when": { + "value": [ + "已知钉钉 MCP 市场 mcpId,需要获得当前身份可用的 Streamable HTTP 连接地址" + ], + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。", + "candidates": [ + { + "value": [ + "已知钉钉 MCP 市场 mcpId,需要获得当前身份可用的 Streamable HTTP 连接地址" + ], + "source": "internal/cli/schema_hints/selection/mcp.json", + "precedence": "reviewed_explicit", + "selected": true, + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。" + } + ] + } + }, + "idempotency": "idempotent", + "interface_mode": "composite", + "interface_reason": "Reviewed unpinned remote adapter: the public CLI wrapper calls the helper-only mcp-meta/get_mcp_server_url endpoint, which is intentionally absent from the public product catalog and pinned MCP metadata.", + "reviewed": true, + "risk": "medium", + "source_refs": [ + "cobra-help:dws mcp url get --help", + "internal/app/mcp_url_command.go", + "internal/cli/schema_command_registry.json#mcp.url_get", + "internal/cli/schema_hints/metadata/mcp.json", + "internal/cli/schema_hints/selection/mcp.json", + "pkg/edition/default.go#openSupplementServers" + ], + "use_when": [ + "已知钉钉 MCP 市场 mcpId,需要获得当前身份可用的 Streamable HTTP 连接地址" + ] + } + } +} diff --git a/internal/cli/schema_agent_metadata_audit.json b/internal/cli/schema_agent_metadata_audit.json index 31f43129..d48bb5d5 100644 --- a/internal/cli/schema_agent_metadata_audit.json +++ b/internal/cli/schema_agent_metadata_audit.json @@ -1,11 +1,11 @@ { "version": 1, - "source_hash": "sha256:89ec25b13e7aecd4586a776febdda07678b47498c37924411ea38ee8be0aa50c", - "surface_hash": "sha256:7ef588f38052f0104e027c8daff5fefd68698781f2c87715461183d4058288ed", - "source_files": 150, - "hint_files": 46, - "hint_products": 39, - "hint_tools": 1296, + "source_hash": "sha256:0977e2b3d4af77d348318fd0cd7ce36d325ba9ca4e7c9ed0d6daeb1be0a0c4ec", + "surface_hash": "sha256:e85148774f65d34b01d50ebdc702b785afdb8ea78663b6f2eeecc35bc3cb3fd5", + "source_files": 152, + "hint_files": 48, + "hint_products": 40, + "hint_tools": 1298, "interface_metadata": { "source": "mcp-tools-list+cli-registry", "revision": "4574f7022c32cf4c033e9b7b4156e2fec815fed8", @@ -27,15 +27,15 @@ ] }, "coverage": { - "surface_products": 22, - "products_with_metadata": 22, - "surface_tools": 572, - "tools_with_metadata": 572, - "tools_with_agent_summary": 572, - "tools_with_use_when": 572, - "tools_with_avoid_when": 572, - "tools_with_examples": 572, - "tools_with_interface_mode": 572, + "surface_products": 23, + "products_with_metadata": 23, + "surface_tools": 573, + "tools_with_metadata": 573, + "tools_with_agent_summary": 573, + "tools_with_use_when": 573, + "tools_with_avoid_when": 573, + "tools_with_examples": 573, + "tools_with_interface_mode": 573, "unmatched_skill_tools": 119, "unreviewed_skill_tools": 7 }, @@ -60,6 +60,7 @@ "generate-topic-report", "live", "mail", + "mcp", "meeting-followup", "minutes", "oa", @@ -1507,7 +1508,7 @@ { "tool_path": "chat message list-emotion-replies", "source": "skills/mono/references/products/chat.md", - "line": 1076, + "line": 1061, "candidates": [ "chat message add-emoji", "chat message add-favorite", @@ -1521,7 +1522,7 @@ { "tool_path": "chat category create", "source": "skills/mono/references/products/chat.md", - "line": 1431, + "line": 1416, "candidates": [ "chat group create", "chat category create-smart", @@ -1535,7 +1536,7 @@ { "tool_path": "chat category delete", "source": "skills/mono/references/products/chat.md", - "line": 1456, + "line": 1441, "candidates": [ "chat category create-smart", "chat category list", @@ -1549,7 +1550,7 @@ { "tool_path": "chat category rename", "source": "skills/mono/references/products/chat.md", - "line": 1467, + "line": 1452, "candidates": [ "chat group rename", "chat category create-smart", @@ -1563,7 +1564,7 @@ { "tool_path": "chat category add-conv", "source": "skills/mono/references/products/chat.md", - "line": 1479, + "line": 1464, "candidates": [ "chat category create-smart", "chat category list", @@ -1577,7 +1578,7 @@ { "tool_path": "chat category remove-conv", "source": "skills/mono/references/products/chat.md", - "line": 1492, + "line": 1477, "candidates": [ "chat category create-smart", "chat category list", @@ -1591,7 +1592,7 @@ { "tool_path": "chat text translate", "source": "skills/mono/references/products/chat.md", - "line": 1507, + "line": 1492, "candidates": [ "chat bot find", "chat bot search", @@ -1605,7 +1606,7 @@ { "tool_path": "chat text translate", "source": "skills/mono/references/products/chat.md", - "line": 1508, + "line": 1493, "candidates": [ "chat bot find", "chat bot search", @@ -1619,7 +1620,7 @@ { "tool_path": "chat text translate", "source": "skills/mono/references/products/chat.md", - "line": 1509, + "line": 1494, "candidates": [ "chat bot find", "chat bot search", @@ -1633,7 +1634,7 @@ { "tool_path": "chat hide", "source": "skills/mono/references/products/chat.md", - "line": 1546, + "line": 1531, "candidates": [ "chat bot find", "chat bot search", @@ -1647,7 +1648,7 @@ { "tool_path": "chat hide", "source": "skills/mono/references/products/chat.md", - "line": 1547, + "line": 1532, "candidates": [ "chat bot find", "chat bot search", @@ -1661,7 +1662,7 @@ { "tool_path": "chat mute-at-all", "source": "skills/mono/references/products/chat.md", - "line": 1569, + "line": 1554, "candidates": [ "chat bot find", "chat bot search", @@ -1675,7 +1676,7 @@ { "tool_path": "chat mute-at-all", "source": "skills/mono/references/products/chat.md", - "line": 1570, + "line": 1555, "candidates": [ "chat bot find", "chat bot search", @@ -1689,7 +1690,7 @@ { "tool_path": "chat mute-red-envelope", "source": "skills/mono/references/products/chat.md", - "line": 1592, + "line": 1577, "candidates": [ "chat bot find", "chat bot search", @@ -1703,7 +1704,7 @@ { "tool_path": "chat mute-red-envelope", "source": "skills/mono/references/products/chat.md", - "line": 1593, + "line": 1578, "candidates": [ "chat bot find", "chat bot search", @@ -1717,7 +1718,7 @@ { "tool_path": "chat mark-unread", "source": "skills/mono/references/products/chat.md", - "line": 1613, + "line": 1598, "candidates": [ "chat bot find", "chat bot search", @@ -1731,7 +1732,7 @@ { "tool_path": "chat mark-unread", "source": "skills/mono/references/products/chat.md", - "line": 1614, + "line": 1599, "candidates": [ "chat bot find", "chat bot search", @@ -1745,7 +1746,7 @@ { "tool_path": "chat clear-red-point", "source": "skills/mono/references/products/chat.md", - "line": 1632, + "line": 1617, "candidates": [ "chat bot find", "chat bot search", @@ -1759,7 +1760,7 @@ { "tool_path": "chat clear-red-point", "source": "skills/mono/references/products/chat.md", - "line": 1633, + "line": 1618, "candidates": [ "chat bot find", "chat bot search", @@ -1773,7 +1774,7 @@ { "tool_path": "chat clear-all-red-point", "source": "skills/mono/references/products/chat.md", - "line": 1649, + "line": 1634, "candidates": [ "chat bot find", "chat bot search", @@ -1787,6 +1788,34 @@ { "tool_path": "chat clear-all-red-point", "source": "skills/mono/references/products/chat.md", + "line": 1636, + "candidates": [ + "chat bot find", + "chat bot search", + "chat category create-smart" + ], + "review": { + "status": "stale", + "reason": "旧版 Skill 或说明性引用,当前公开命令面无等价 leaf,禁止词法模糊映射" + } + }, + { + "tool_path": "chat list-all-conversations", + "source": "skills/mono/references/products/chat.md", + "line": 1650, + "candidates": [ + "chat bot find", + "chat bot search", + "chat category create-smart" + ], + "review": { + "status": "stale", + "reason": "旧版 Skill 或说明性引用,当前公开命令面无等价 leaf,禁止词法模糊映射" + } + }, + { + "tool_path": "chat list-all-conversations", + "source": "skills/mono/references/products/chat.md", "line": 1651, "candidates": [ "chat bot find", @@ -1801,7 +1830,7 @@ { "tool_path": "chat list-all-conversations", "source": "skills/mono/references/products/chat.md", - "line": 1665, + "line": 1652, "candidates": [ "chat bot find", "chat bot search", @@ -1815,35 +1844,7 @@ { "tool_path": "chat list-all-conversations", "source": "skills/mono/references/products/chat.md", - "line": 1666, - "candidates": [ - "chat bot find", - "chat bot search", - "chat category create-smart" - ], - "review": { - "status": "stale", - "reason": "旧版 Skill 或说明性引用,当前公开命令面无等价 leaf,禁止词法模糊映射" - } - }, - { - "tool_path": "chat list-all-conversations", - "source": "skills/mono/references/products/chat.md", - "line": 1667, - "candidates": [ - "chat bot find", - "chat bot search", - "chat category create-smart" - ], - "review": { - "status": "stale", - "reason": "旧版 Skill 或说明性引用,当前公开命令面无等价 leaf,禁止词法模糊映射" - } - }, - { - "tool_path": "chat list-all-conversations", - "source": "skills/mono/references/products/chat.md", - "line": 1668, + "line": 1653, "candidates": [ "chat bot find", "chat bot search", @@ -1857,7 +1858,7 @@ { "tool_path": "chat clear-messages", "source": "skills/mono/references/products/chat.md", - "line": 1688, + "line": 1673, "candidates": [ "chat bot find", "chat bot search", @@ -1871,7 +1872,7 @@ { "tool_path": "chat clear-messages", "source": "skills/mono/references/products/chat.md", - "line": 1689, + "line": 1674, "candidates": [ "chat bot find", "chat bot search", @@ -1885,7 +1886,7 @@ { "tool_path": "chat mark-read", "source": "skills/mono/references/products/chat.md", - "line": 1707, + "line": 1692, "candidates": [ "chat bot find", "chat bot search", @@ -1899,7 +1900,7 @@ { "tool_path": "chat mark-read", "source": "skills/mono/references/products/chat.md", - "line": 1708, + "line": 1693, "candidates": [ "chat bot find", "chat bot search", @@ -1913,7 +1914,7 @@ { "tool_path": "chat group list-join-validations", "source": "skills/mono/references/products/chat.md", - "line": 1751, + "line": 1736, "candidates": [ "chat group bots", "chat group create", @@ -1927,7 +1928,7 @@ { "tool_path": "chat group list-join-validations", "source": "skills/mono/references/products/chat.md", - "line": 1752, + "line": 1737, "candidates": [ "chat group bots", "chat group create", @@ -1941,7 +1942,7 @@ { "tool_path": "chat group list-join-validations", "source": "skills/mono/references/products/chat.md", - "line": 1753, + "line": 1738, "candidates": [ "chat group bots", "chat group create", @@ -1955,7 +1956,7 @@ { "tool_path": "chat group audit-join-validation", "source": "skills/mono/references/products/chat.md", - "line": 1773, + "line": 1758, "candidates": [ "chat group bots", "chat group create", @@ -1969,7 +1970,7 @@ { "tool_path": "chat group audit-join-validation", "source": "skills/mono/references/products/chat.md", - "line": 1774, + "line": 1759, "candidates": [ "chat group bots", "chat group create", @@ -1983,7 +1984,7 @@ { "tool_path": "chat group members", "source": "skills/mono/references/products/chat.md", - "line": 1806, + "line": 1791, "candidates": [ "chat group members add", "chat group members add-bot", @@ -1997,7 +1998,7 @@ { "tool_path": "chat group update-alias", "source": "skills/mono/references/products/chat.md", - "line": 1811, + "line": 1796, "candidates": [ "chat group bots", "chat group create", @@ -2011,7 +2012,7 @@ { "tool_path": "chat group update-nick", "source": "skills/mono/references/products/chat.md", - "line": 1812, + "line": 1797, "candidates": [ "chat group bots", "chat group create", @@ -2025,7 +2026,7 @@ { "tool_path": "chat group members list-by-ids", "source": "skills/mono/references/products/chat.md", - "line": 1813, + "line": 1798, "candidates": [ "chat message list-by-ids", "chat group members add", @@ -2039,7 +2040,7 @@ { "tool_path": "chat category create", "source": "skills/mono/references/products/chat.md", - "line": 1837, + "line": 1822, "candidates": [ "chat group create", "chat category create-smart", @@ -2053,7 +2054,7 @@ { "tool_path": "chat category delete", "source": "skills/mono/references/products/chat.md", - "line": 1839, + "line": 1824, "candidates": [ "chat category create-smart", "chat category list", @@ -2067,7 +2068,7 @@ { "tool_path": "chat category rename", "source": "skills/mono/references/products/chat.md", - "line": 1840, + "line": 1825, "candidates": [ "chat group rename", "chat category create-smart", @@ -2081,7 +2082,7 @@ { "tool_path": "chat category add-conv", "source": "skills/mono/references/products/chat.md", - "line": 1841, + "line": 1826, "candidates": [ "chat category create-smart", "chat category list", @@ -2095,7 +2096,7 @@ { "tool_path": "chat category remove-conv", "source": "skills/mono/references/products/chat.md", - "line": 1842, + "line": 1827, "candidates": [ "chat category create-smart", "chat category list", @@ -2109,7 +2110,7 @@ { "tool_path": "chat group share-invite", "source": "skills/mono/references/products/chat.md", - "line": 1853, + "line": 1838, "candidates": [ "chat group bots", "chat group create", @@ -2123,7 +2124,7 @@ { "tool_path": "chat group notice create/edit/get/list", "source": "skills/mono/references/products/chat.md", - "line": 1854, + "line": 1839, "candidates": [ "chat group bots", "chat group create", @@ -2137,7 +2138,7 @@ { "tool_path": "chat message list-emotion-replies", "source": "skills/mono/references/products/chat.md", - "line": 1856, + "line": 1841, "candidates": [ "chat message add-emoji", "chat message add-favorite", @@ -2151,7 +2152,7 @@ { "tool_path": "chat hide", "source": "skills/mono/references/products/chat.md", - "line": 1863, + "line": 1848, "candidates": [ "chat bot find", "chat bot search", @@ -2165,7 +2166,7 @@ { "tool_path": "chat mute-at-all", "source": "skills/mono/references/products/chat.md", - "line": 1864, + "line": 1849, "candidates": [ "chat bot find", "chat bot search", @@ -2179,7 +2180,7 @@ { "tool_path": "chat mute-at-all", "source": "skills/mono/references/products/chat.md", - "line": 1865, + "line": 1850, "candidates": [ "chat bot find", "chat bot search", @@ -2193,7 +2194,7 @@ { "tool_path": "chat mute-red-envelope", "source": "skills/mono/references/products/chat.md", - "line": 1866, + "line": 1851, "candidates": [ "chat bot find", "chat bot search", @@ -2207,7 +2208,7 @@ { "tool_path": "chat mute-red-envelope", "source": "skills/mono/references/products/chat.md", - "line": 1867, + "line": 1852, "candidates": [ "chat bot find", "chat bot search", @@ -2221,7 +2222,7 @@ { "tool_path": "chat mark-unread", "source": "skills/mono/references/products/chat.md", - "line": 1868, + "line": 1853, "candidates": [ "chat bot find", "chat bot search", @@ -2235,7 +2236,7 @@ { "tool_path": "chat mark-read", "source": "skills/mono/references/products/chat.md", - "line": 1869, + "line": 1854, "candidates": [ "chat bot find", "chat bot search", @@ -2249,7 +2250,7 @@ { "tool_path": "chat clear-red-point", "source": "skills/mono/references/products/chat.md", - "line": 1870, + "line": 1855, "candidates": [ "chat bot find", "chat bot search", @@ -2263,7 +2264,7 @@ { "tool_path": "chat clear-all-red-point", "source": "skills/mono/references/products/chat.md", - "line": 1871, + "line": 1856, "candidates": [ "chat bot find", "chat bot search", @@ -2277,7 +2278,7 @@ { "tool_path": "chat list-all-conversations", "source": "skills/mono/references/products/chat.md", - "line": 1872, + "line": 1857, "candidates": [ "chat bot find", "chat bot search", @@ -2291,7 +2292,7 @@ { "tool_path": "chat clear-messages", "source": "skills/mono/references/products/chat.md", - "line": 1873, + "line": 1858, "candidates": [ "chat bot find", "chat bot search", @@ -2305,7 +2306,7 @@ { "tool_path": "chat group list-join-validations", "source": "skills/mono/references/products/chat.md", - "line": 1875, + "line": 1860, "candidates": [ "chat group bots", "chat group create", @@ -2319,7 +2320,7 @@ { "tool_path": "chat group audit-join-validation", "source": "skills/mono/references/products/chat.md", - "line": 1876, + "line": 1861, "candidates": [ "chat group bots", "chat group create", @@ -2333,7 +2334,7 @@ { "tool_path": "chat text translate", "source": "skills/mono/references/products/chat.md", - "line": 1896, + "line": 1881, "candidates": [ "chat bot find", "chat bot search", diff --git a/internal/cli/schema_catalog.json b/internal/cli/schema_catalog.json index f117bd0d..ef3996ee 100644 --- a/internal/cli/schema_catalog.json +++ b/internal/cli/schema_catalog.json @@ -1,21 +1,21 @@ { "version": 1, - "source_hash": "sha256:f27d0e45d3501183e5cc1b57690e78a4e939e6d07299dcb939b73e105ea03ca9", - "surface_hash": "sha256:7ef588f38052f0104e027c8daff5fefd68698781f2c87715461183d4058288ed", + "source_hash": "sha256:360114d03cc3e8dc6cef30c6e617cc40f88e5577c29dd5b5946fe1cde91eb9de", + "surface_hash": "sha256:e85148774f65d34b01d50ebdc702b785afdb8ea78663b6f2eeecc35bc3cb3fd5", "catalog": { "agent_metadata": { - "products_with_metadata": 22, + "products_with_metadata": 23, "source": "embedded-skill-metadata", - "source_hash": "sha256:89ec25b13e7aecd4586a776febdda07678b47498c37924411ea38ee8be0aa50c", - "surface_hash": "sha256:7ef588f38052f0104e027c8daff5fefd68698781f2c87715461183d4058288ed", - "surface_products": 22, - "surface_tools": 572, - "tools_with_agent_summary": 572, - "tools_with_metadata": 572, + "source_hash": "sha256:0977e2b3d4af77d348318fd0cd7ce36d325ba9ca4e7c9ed0d6daeb1be0a0c4ec", + "surface_hash": "sha256:e85148774f65d34b01d50ebdc702b785afdb8ea78663b6f2eeecc35bc3cb3fd5", + "surface_products": 23, + "surface_tools": 573, + "tools_with_agent_summary": 573, + "tools_with_metadata": 573, "unmatched_skill_tools": 119, "version": 1 }, - "count": 22, + "count": 23, "interface_metadata": { "coverage": { "aliased_tools": 178, @@ -13476,6 +13476,110 @@ "查收、搜索、阅读、回复、发送或整理邮件" ] }, + { + "agent_metadata_source": "embedded-skill-metadata", + "agent_source_refs": [ + "CommandRegistry:product=mcp", + "cobra-help:dws mcp --help", + "internal/cli/schema_command_registry.json#mcp", + "internal/cli/schema_hints/selection/mcp.json" + ], + "agent_summary": "解析和管理当前身份可用的 MCP 服务连接信息", + "agent_summary_source": "dws-agent-selection/mcp", + "avoid_when": [ + "查询普通钉钉业务数据时使用对应产品命令,不要使用 mcp" + ], + "description": "管理 MCP 服务连接信息", + "field_provenance": { + "agent_summary": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "selected": true, + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": "解析和管理当前身份可用的 MCP 服务连接信息" + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": "解析和管理当前身份可用的 MCP 服务连接信息" + }, + "avoid_when": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "selected": true, + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": [ + "查询普通钉钉业务数据时使用对应产品命令,不要使用 mcp" + ] + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": [ + "查询普通钉钉业务数据时使用对应产品命令,不要使用 mcp" + ] + }, + "use_when": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "selected": true, + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": [ + "需要把钉钉 MCP 市场中的服务连接到支持 Streamable HTTP 的 Agent 或客户端" + ] + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": [ + "需要把钉钉 MCP 市场中的服务连接到支持 Streamable HTTP 的 Agent 或客户端" + ] + } + }, + "id": "mcp", + "name": "管理 MCP 服务连接信息", + "runtime": true, + "tool_count": 1, + "tools": [ + { + "agent_metadata_source": "embedded-skill-metadata", + "agent_summary": "按 MCP 市场 mcpId 获取当前用户和组织可用的 Streamable HTTP 地址", + "agent_summary_source": "dws-agent-selection/mcp", + "availability": "available", + "avoid_when": [ + "只是查询 DWS 已公开命令或参数时使用 dws schema", + "用户要求把返回的凭据 URL 发送到群聊、文档、邮件、日志或代码仓库时不要执行或传播" + ], + "canonical_path": "mcp.url_get", + "cli_name": "get", + "cli_path": "mcp url get", + "confirmation": "not_required", + "description": "输入 MCP 市场 mcpId,返回以当前用户和组织身份访问该 MCP 的 Streamable HTTP 服务地址。\n\n安全提示:返回的 mcpURL 和 mcpJSON 可能包含身份凭据,仅限个人使用,请勿分享到群聊、文档、邮件、代码仓库或日志。", + "effect": "read", + "group": "url", + "idempotency": "idempotent", + "interface_mode": "composite", + "interface_reason": "Reviewed unpinned remote adapter: the public CLI wrapper calls the helper-only mcp-meta/get_mcp_server_url endpoint, which is intentionally absent from the public product catalog and pinned MCP metadata.", + "name": "url_get", + "primary_cli_path": "mcp url get", + "reviewed": true, + "risk": "medium", + "title": "按 mcpId 获取 MCP 的 Streamable HTTP 服务地址", + "use_when": [ + "已知钉钉 MCP 市场 mcpId,需要获得当前身份可用的 Streamable HTTP 连接地址" + ] + } + ], + "use_when": [ + "需要把钉钉 MCP 市场中的服务连接到支持 Streamable HTTP 的 Agent 或客户端" + ] + }, { "agent_metadata_source": "embedded-skill-metadata", "agent_source_refs": [ @@ -19153,7 +19257,7 @@ } ], "source": "embedded-command-catalog", - "tool_count": 572 + "tool_count": 573 }, "tools": { "aisearch.enterprise_person_search": { @@ -319775,6 +319879,338 @@ "已知 templateId 并需要修改名称、主题、正文或收件人时" ] }, + "mcp.url_get": { + "agent_metadata_source": "embedded-skill-metadata", + "agent_source_refs": [ + "cobra-help:dws mcp url get --help", + "internal/app/mcp_url_command.go", + "internal/cli/schema_command_registry.json#mcp.url_get", + "internal/cli/schema_hints/metadata/mcp.json", + "internal/cli/schema_hints/selection/mcp.json", + "pkg/edition/default.go#openSupplementServers" + ], + "agent_summary": "按 MCP 市场 mcpId 获取当前用户和组织可用的 Streamable HTTP 地址", + "agent_summary_source": "dws-agent-selection/mcp", + "availability": "available", + "avoid_when": [ + "只是查询 DWS 已公开命令或参数时使用 dws schema", + "用户要求把返回的凭据 URL 发送到群聊、文档、邮件、日志或代码仓库时不要执行或传播" + ], + "canonical_path": "mcp.url_get", + "cli_name": "get", + "cli_path": "mcp url get", + "confirmation": "not_required", + "description": "输入 MCP 市场 mcpId,返回以当前用户和组织身份访问该 MCP 的 Streamable HTTP 服务地址。\n\n安全提示:返回的 mcpURL 和 mcpJSON 可能包含身份凭据,仅限个人使用,请勿分享到群聊、文档、邮件、代码仓库或日志。", + "display": "管理 MCP 服务连接信息", + "effect": "read", + "effect_source": "agent-hint", + "examples": [ + "dws mcp url get 10043 --format json" + ], + "field_provenance": { + "agent_summary": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。", + "selected": true, + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": "按 MCP 市场 mcpId 获取当前用户和组织可用的 Streamable HTTP 地址" + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。", + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": "按 MCP 市场 mcpId 获取当前用户和组织可用的 Streamable HTTP 地址" + }, + "availability": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "selected": true, + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": "available" + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": "available" + }, + "avoid_when": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。", + "selected": true, + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": [ + "只是查询 DWS 已公开命令或参数时使用 dws schema", + "用户要求把返回的凭据 URL 发送到群聊、文档、邮件、日志或代码仓库时不要执行或传播" + ] + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。", + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": [ + "只是查询 DWS 已公开命令或参数时使用 dws schema", + "用户要求把返回的凭据 URL 发送到群聊、文档、邮件、日志或代码仓库时不要执行或传播" + ] + }, + "canonical_path": { + "candidates": [ + { + "precedence": "command_registry", + "selected": true, + "source": "reviewed_command_registry", + "source_ref": "mcp url get", + "value": "mcp.url_get" + } + ], + "precedence": "command_registry", + "resolution": "registry_identity", + "source": "reviewed_command_registry", + "source_ref": "mcp url get", + "value": "mcp.url_get" + }, + "confirmation": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "selected": true, + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": "not_required" + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": "not_required" + }, + "description": { + "candidates": [ + { + "precedence": "cobra_help", + "selected": true, + "source": "cobra_help", + "value": "输入 MCP 市场 mcpId,返回以当前用户和组织身份访问该 MCP 的 Streamable HTTP 服务地址。\n\n安全提示:返回的 mcpURL 和 mcpJSON 可能包含身份凭据,仅限个人使用,请勿分享到群聊、文档、邮件、代码仓库或日志。" + } + ], + "precedence": "cobra_help", + "resolution": "highest_precedence", + "source": "cobra_help", + "value": "输入 MCP 市场 mcpId,返回以当前用户和组织身份访问该 MCP 的 Streamable HTTP 服务地址。\n\n安全提示:返回的 mcpURL 和 mcpJSON 可能包含身份凭据,仅限个人使用,请勿分享到群聊、文档、邮件、代码仓库或日志。" + }, + "effect": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "selected": true, + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": "read" + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": "read" + }, + "examples": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。", + "selected": true, + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": [ + "dws mcp url get 10043 --format json" + ] + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。", + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": [ + "dws mcp url get 10043 --format json" + ] + }, + "idempotency": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "selected": true, + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": "idempotent" + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": "idempotent" + }, + "interface_mode": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "selected": true, + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": "composite" + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": "composite" + }, + "interface_reason": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "selected": true, + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": "Reviewed unpinned remote adapter: the public CLI wrapper calls the helper-only mcp-meta/get_mcp_server_url endpoint, which is intentionally absent from the public product catalog and pinned MCP metadata." + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": "Reviewed unpinned remote adapter: the public CLI wrapper calls the helper-only mcp-meta/get_mcp_server_url endpoint, which is intentionally absent from the public product catalog and pinned MCP metadata." + }, + "interface_ref": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "final interface mode composite forbids a direct MCP interface_ref", + "selected": true, + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": null + } + ], + "precedence": "reviewed_explicit", + "resolution": "interface_disposition_matrix", + "review_reason": "final interface mode composite forbids a direct MCP interface_ref", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": null + }, + "reviewed": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "selected": true, + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": true + }, + { + "precedence": "reviewed_explicit", + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。", + "selected": false, + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": true + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": true + }, + "risk": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "selected": true, + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": "medium" + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output.", + "source": "internal/cli/schema_hints/metadata/mcp.json", + "value": "medium" + }, + "title": { + "candidates": [ + { + "precedence": "cobra_help", + "selected": true, + "source": "cobra_help", + "value": "按 mcpId 获取 MCP 的 Streamable HTTP 服务地址" + } + ], + "precedence": "cobra_help", + "resolution": "highest_precedence", + "source": "cobra_help", + "value": "按 mcpId 获取 MCP 的 Streamable HTTP 服务地址" + }, + "use_when": { + "candidates": [ + { + "precedence": "reviewed_explicit", + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。", + "selected": true, + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": [ + "已知钉钉 MCP 市场 mcpId,需要获得当前身份可用的 Streamable HTTP 连接地址" + ] + } + ], + "precedence": "reviewed_explicit", + "resolution": "highest_precedence", + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。", + "source": "internal/cli/schema_hints/selection/mcp.json", + "value": [ + "已知钉钉 MCP 市场 mcpId,需要获得当前身份可用的 Streamable HTTP 连接地址" + ] + } + }, + "group": "url", + "has_parameters": false, + "idempotency": "idempotent", + "interface_mode": "composite", + "interface_reason": "Reviewed unpinned remote adapter: the public CLI wrapper calls the helper-only mcp-meta/get_mcp_server_url endpoint, which is intentionally absent from the public product catalog and pinned MCP metadata.", + "is_alias": false, + "name": "url_get", + "parameter_count": 0, + "parameters": {}, + "path": "mcp.url_get", + "positionals": [ + { + "description": "钉钉 MCP 市场中的 mcpId", + "index": 0, + "name": "mcp_id", + "required": true, + "type": "string" + } + ], + "primary_cli_path": "mcp url get", + "product_id": "mcp", + "reviewed": true, + "risk": "medium", + "source": "reviewed_command_registry", + "title": "按 mcpId 获取 MCP 的 Streamable HTTP 服务地址", + "use_when": [ + "已知钉钉 MCP 市场 mcpId,需要获得当前身份可用的 Streamable HTTP 连接地址" + ] + }, "minutes.add_member_permission": { "agent_metadata_source": "embedded-skill-metadata", "agent_source_refs": [ diff --git a/internal/cli/schema_command_registry.json b/internal/cli/schema_command_registry.json index 075707a2..960ba50e 100644 --- a/internal/cli/schema_command_registry.json +++ b/internal/cli/schema_command_registry.json @@ -1700,6 +1700,15 @@ } ] }, + { + "id": "mcp", + "tools": [ + { + "canonical_path": "mcp.url_get", + "cli_path": "mcp url get" + } + ] + }, { "id": "minutes", "tools": [ diff --git a/internal/cli/schema_hints/index.json b/internal/cli/schema_hints/index.json index 9b619661..7e220cd6 100644 --- a/internal/cli/schema_hints/index.json +++ b/internal/cli/schema_hints/index.json @@ -23,6 +23,7 @@ "event": "metadata/event.json", "live": "metadata/live.json", "mail": "metadata/mail.json", + "mcp": "metadata/mcp.json", "minutes": "metadata/minutes.json", "oa": "metadata/oa.json", "pat": "metadata/pat.json", @@ -47,6 +48,7 @@ "event": "selection/event.json", "live": "selection/live.json", "mail": "selection/mail.json", + "mcp": "selection/mcp.json", "minutes": "selection/minutes.json", "oa": "selection/oa.json", "pat": "selection/pat.json", @@ -434,10 +436,6 @@ "status": "stale", "reason": "旧版 Skill 或说明性引用,当前公开命令面无等价 leaf,禁止词法模糊映射" }, - "chat media upload": { - "status": "stale", - "reason": "旧版 Skill 或说明性引用,当前公开命令面无等价 leaf,禁止词法模糊映射" - }, "chat message list-emotion-replies": { "status": "stale", "reason": "旧版 Skill 或说明性引用,当前公开命令面无等价 leaf,禁止词法模糊映射" diff --git a/internal/cli/schema_hints/metadata/mcp.json b/internal/cli/schema_hints/metadata/mcp.json new file mode 100644 index 00000000..9b8e39c2 --- /dev/null +++ b/internal/cli/schema_hints/metadata/mcp.json @@ -0,0 +1,24 @@ +{ + "version": 1, + "source": { + "kind": "explicit", + "name": "dws-tool-metadata/mcp", + "repository": "DingTalk-Real-AI/dingtalk-workspace-cli", + "channel": "open-source", + "reviewed": true + }, + "tools": { + "mcp.url_get": { + "effect": "read", + "risk": "medium", + "confirmation": "not_required", + "idempotency": "idempotent", + "interface_mode": "composite", + "availability": "available", + "interface_reason": "Reviewed unpinned remote adapter: the public CLI wrapper calls the helper-only mcp-meta/get_mcp_server_url endpoint, which is intentionally absent from the public product catalog and pinned MCP metadata.", + "runtime_gate": "none", + "reviewed": true, + "review_reason": "Expose the reviewed MCP URL resolver through the public CLI and Agent Schema while preserving the helper endpoint as a non-product supplemental server. The returned URL contains user- and organization-scoped credentials and must be treated as sensitive output." + } + } +} diff --git a/internal/cli/schema_hints/reference-review.json b/internal/cli/schema_hints/reference-review.json index d939bfb2..62a9fb03 100644 --- a/internal/cli/schema_hints/reference-review.json +++ b/internal/cli/schema_hints/reference-review.json @@ -385,10 +385,6 @@ "status": "stale", "reason": "旧版 Skill 或说明性引用,当前公开命令面无等价 leaf,禁止词法模糊映射" }, - "chat media upload": { - "status": "stale", - "reason": "旧版 Skill 或说明性引用,当前公开命令面无等价 leaf,禁止词法模糊映射" - }, "chat message list-emotion-replies": { "status": "stale", "reason": "旧版 Skill 或说明性引用,当前公开命令面无等价 leaf,禁止词法模糊映射" diff --git a/internal/cli/schema_hints/runtime-surface-completeness.json b/internal/cli/schema_hints/runtime-surface-completeness.json index 11fed0ed..17227d9e 100644 --- a/internal/cli/schema_hints/runtime-surface-completeness.json +++ b/internal/cli/schema_hints/runtime-surface-completeness.json @@ -7,7 +7,7 @@ "channel": "open-source" }, "coverage": { - "source_tools": 572, + "source_tools": 573, "matched_tools": 71 }, "tools": { diff --git a/internal/cli/schema_hints/selection/mcp.json b/internal/cli/schema_hints/selection/mcp.json new file mode 100644 index 00000000..9f642132 --- /dev/null +++ b/internal/cli/schema_hints/selection/mcp.json @@ -0,0 +1,51 @@ +{ + "version": 1, + "source": { + "kind": "explicit", + "name": "dws-agent-selection/mcp", + "repository": "DingTalk-Real-AI/dingtalk-workspace-cli", + "channel": "open-source", + "reviewed": true + }, + "tools": { + "mcp.url_get": { + "agent_summary": "按 MCP 市场 mcpId 获取当前用户和组织可用的 Streamable HTTP 地址", + "use_when": [ + "已知钉钉 MCP 市场 mcpId,需要获得当前身份可用的 Streamable HTTP 连接地址" + ], + "avoid_when": [ + "只是查询 DWS 已公开命令或参数时使用 dws schema", + "用户要求把返回的凭据 URL 发送到群聊、文档、邮件、日志或代码仓库时不要执行或传播" + ], + "examples": [ + "dws mcp url get 10043 --format json" + ], + "reviewed": true, + "review_reason": "正式公开 MCP URL 解析命令的 Agent 选型文案,并明确凭据 URL 只能返回给当前用户、不得二次传播。", + "source_refs": [ + "internal/cli/schema_command_registry.json#mcp.url_get", + "cobra-help:dws mcp url get --help", + "internal/app/mcp_url_command.go", + "pkg/edition/default.go#openSupplementServers" + ] + } + }, + "products": { + "mcp": { + "agent_summary": "解析和管理当前身份可用的 MCP 服务连接信息", + "use_when": [ + "需要把钉钉 MCP 市场中的服务连接到支持 Streamable HTTP 的 Agent 或客户端" + ], + "avoid_when": [ + "查询普通钉钉业务数据时使用对应产品命令,不要使用 mcp" + ], + "reviewed": true, + "review_reason": "为公开 mcp 命令提供产品级 Agent 路由,并强调连接信息属于敏感凭据。", + "source_refs": [ + "internal/cli/schema_command_registry.json#mcp", + "cobra-help:dws mcp --help", + "CommandRegistry:product=mcp" + ] + } + } +} diff --git a/internal/helpers/chat_media_upload.go b/internal/helpers/chat_media_upload.go index 80e26cc9..e48d9370 100644 --- a/internal/helpers/chat_media_upload.go +++ b/internal/helpers/chat_media_upload.go @@ -25,6 +25,7 @@ func newChatMediaGroup() *cobra.Command { Use: "media", Short: "已下线:媒体文件上传兼容入口", Deprecated: "本地图片和文件请改用 " + chatMediaUploadReplacement, + Hidden: true, Args: cobra.NoArgs, TraverseChildren: true, DisableAutoGenTag: true, @@ -41,6 +42,7 @@ func newChatMediaUploadCommand() *cobra.Command { Use: "upload", Short: "已下线:请通过 chat message send 直接发送本地文件", Deprecated: "请改用 " + chatMediaUploadReplacement, + Hidden: true, Long: `此命令仅为 1.x 命令行兼容保留,不再读取应用凭证或调用旧版媒体上传接口。 发送本地图片或文件时,请使用 chat message send --msg-type file --file-path。 diff --git a/internal/helpers/chat_media_upload_coverage_more_test.go b/internal/helpers/chat_media_upload_coverage_more_test.go index 298fcbc6..5e16336e 100644 --- a/internal/helpers/chat_media_upload_coverage_more_test.go +++ b/internal/helpers/chat_media_upload_coverage_more_test.go @@ -7,12 +7,12 @@ import ( func TestCrossPlatformCoverageChatMediaUploadIsDeprecatedCompatibilityStub(t *testing.T) { group := newChatMediaGroup() - if group.Deprecated == "" || group.Hidden || !group.Runnable() { + if group.Deprecated == "" || !group.Hidden || !group.Runnable() { t.Fatalf("media group compatibility contract: deprecated=%q hidden=%v runnable=%v", group.Deprecated, group.Hidden, group.Runnable()) } cmd := newChatMediaUploadCommand() - if cmd.Deprecated == "" || cmd.Hidden || !cmd.Runnable() { + if cmd.Deprecated == "" || !cmd.Hidden || !cmd.Runnable() { t.Fatalf("media upload compatibility contract: deprecated=%q hidden=%v runnable=%v", cmd.Deprecated, cmd.Hidden, cmd.Runnable()) } for _, flag := range []string{"file", "type"} { diff --git a/internal/interfacesnapshot/compare.go b/internal/interfacesnapshot/compare.go index 79fcd2d3..d665b2ae 100644 --- a/internal/interfacesnapshot/compare.go +++ b/internal/interfacesnapshot/compare.go @@ -66,9 +66,9 @@ func CompareAll(current Snapshot, references map[string]Snapshot) Report { } // Compare enforces the deliberately small admission policy: -// - every previously accepted command path must still resolve to a runnable, -// visible-compatible target (a rename may preserve the old path as an -// alias), +// - every previously accepted command path must still resolve to a runnable +// target (a rename may preserve the old path as an alias); a command may +// leave Help only as a deprecated, still-runnable compatibility tombstone, // - flags accepted at each command path may not disappear, change type, or // become required; an existing path may not gain a new required flag, // - new commands and flags are allowed. @@ -157,7 +157,7 @@ func compareCommandContract(result *Comparison, acceptedPath string, oldCommand, After: "non-runnable", }) } - if !oldCommand.Hidden && newCommand.Hidden { + if !oldCommand.Hidden && newCommand.Hidden && !isDeprecatedRunnableTombstone(newCommand) { result.Blocking = append(result.Blocking, Change{ Kind: "command_became_hidden", Path: acceptedPath, @@ -167,6 +167,10 @@ func compareCommandContract(result *Comparison, acceptedPath string, oldCommand, } } +func isDeprecatedRunnableTombstone(command Command) bool { + return command.Hidden && command.Runnable && strings.TrimSpace(command.Deprecated) != "" +} + func compareEffectiveFlags(result *Comparison, acceptedPath string, oldCommand, newCommand Command) { oldFlags := effectiveFlagIndex(oldCommand) newFlags := effectiveFlagIndex(newCommand) diff --git a/internal/interfacesnapshot/compare_test.go b/internal/interfacesnapshot/compare_test.go index 5e5b0ba0..c7f389a1 100644 --- a/internal/interfacesnapshot/compare_test.go +++ b/internal/interfacesnapshot/compare_test.go @@ -147,6 +147,22 @@ func TestCrossPlatformCoverageCompareBlocksRemovedAlias(t *testing.T) { } } +func TestCrossPlatformCoverageCompareAllowsDeprecatedRunnableHiddenTombstone(t *testing.T) { + base := testSnapshot( + testCommand("dws"), + testCommand("dws media upload", testFlag("file", "string", false)), + ) + tombstone := testCommand("dws media upload", testFlag("file", "string", false)) + tombstone.Hidden = true + tombstone.Deprecated = "use dws message send --file" + current := testSnapshot(testCommand("dws"), tombstone) + + comparison := Compare(current, base, "base") + if !comparison.Compatible { + t.Fatalf("deprecated runnable hidden tombstone was blocked: %#v", comparison.Blocking) + } +} + func TestCrossPlatformCoverageCompareBlocksAliasRetargetedToIncompatibleCommand(t *testing.T) { base := testSnapshot( testCommand("dws"), diff --git a/pkg/edition/default.go b/pkg/edition/default.go index a6084374..b3d79f62 100644 --- a/pkg/edition/default.go +++ b/pkg/edition/default.go @@ -39,8 +39,24 @@ func defaultHooks() *Hooks { base["claw-type"] = DefaultOSSClawType return base }, - StaticServers: openStaticServers, - VisibleProducts: openVisibleProducts, + StaticServers: openStaticServers, + SupplementServers: openSupplementServers, + VisibleProducts: openVisibleProducts, + } +} + +// openSupplementServers returns helper-only MCP endpoints owned by the open +// CLI. They are callable by explicit server ID but are deliberately excluded +// from VisibleProducts, so no top-level product command is generated. They +// stay separate from syncdata.StaticServers because only explicitly wired CLI +// helpers may call them; they are not public MCP product surfaces. +func openSupplementServers() []ServerInfo { + return []ServerInfo{ + { + ID: "mcp-meta", + Name: "MCP 元服务", + Endpoint: "https://mcp-gw.dingtalk.com/server/89833ea5debf30c260a07ffcb5127ffa3bf0c830cd76babadb293d9861485d44", + }, } } diff --git a/pkg/edition/edition_test.go b/pkg/edition/edition_test.go index 6b5faffa..2412b20b 100644 --- a/pkg/edition/edition_test.go +++ b/pkg/edition/edition_test.go @@ -70,4 +70,24 @@ func TestOpenVisibleProductsExcludesCompatibilityOnlyCommands(t *testing.T) { t.Fatal("conference must remain compatibility-only and not be added to StaticServers") } } + if byID["mcp-meta"] { + t.Fatal("mcp-meta is helper-only and must not appear in VisibleProducts") + } +} + +func TestOpenSupplementServersIncludesMCPMeta(t *testing.T) { + servers := openSupplementServers() + for _, server := range servers { + if server.ID != "mcp-meta" { + continue + } + if server.Endpoint == "" { + t.Fatal("mcp-meta has empty endpoint") + } + if len(server.Prefixes) != 0 { + t.Fatal("mcp-meta must remain helper-only without command prefixes") + } + return + } + t.Fatal("openSupplementServers() missing mcp-meta") } diff --git a/scripts/policy/interface-baseline/contract.go b/scripts/policy/interface-baseline/contract.go index bee33435..5f944912 100644 --- a/scripts/policy/interface-baseline/contract.go +++ b/scripts/policy/interface-baseline/contract.go @@ -295,7 +295,11 @@ func checkCompatibility(root *cobra.Command, baseline interfaceContract) []strin if expected.RunnableSet && expected.Runnable && !cmd.Runnable() { failures = append(failures, fmt.Sprintf("historical command %q became non-runnable", displayPath(path))) } - if expected.HiddenSet && !expected.Hidden && cmd.Hidden { + // A hidden, deprecated, still-runnable command is an intentional + // compatibility tombstone: it leaves Help without breaking historical + // argv. Commands that disappear, stop running, or are hidden without an + // actionable deprecation remain compatibility failures. + if expected.HiddenSet && !expected.Hidden && cmd.Hidden && !isDeprecatedRunnableTombstone(cmd) { failures = append(failures, fmt.Sprintf("historical command %q became hidden", displayPath(path))) } for _, alias := range sortedSet(expected.Aliases) { @@ -357,6 +361,10 @@ func checkCompatibility(root *cobra.Command, baseline interfaceContract) []strin return failures } +func isDeprecatedRunnableTombstone(cmd *cobra.Command) bool { + return cmd != nil && cmd.Hidden && cmd.Runnable() && strings.TrimSpace(cmd.Deprecated) != "" +} + func resolveCommand(root *cobra.Command, path string) (*cobra.Command, bool) { if path == "root" { return root, true diff --git a/scripts/policy/interface-baseline/contract_test.go b/scripts/policy/interface-baseline/contract_test.go index 9911bd1a..208b72c0 100644 --- a/scripts/policy/interface-baseline/contract_test.go +++ b/scripts/policy/interface-baseline/contract_test.go @@ -159,6 +159,25 @@ func TestCompatibilityRejectsCommandContractRegressions(t *testing.T) { } } +func TestCompatibilityAllowsDeprecatedRunnableCommandToBecomeHidden(t *testing.T) { + baselineRoot := &cobra.Command{Use: "dws"} + baselineRoot.AddCommand(&cobra.Command{Use: "old", Run: func(*cobra.Command, []string) {}}) + baselineRoot.InitDefaultHelpCmd() + baseline := snapshot(baselineRoot) + + currentRoot := &cobra.Command{Use: "dws"} + currentRoot.AddCommand(&cobra.Command{ + Use: "old", + Hidden: true, + Deprecated: "use dws replacement", + Run: func(*cobra.Command, []string) {}, + }) + currentRoot.InitDefaultHelpCmd() + if failures := checkCompatibility(currentRoot, baseline); len(failures) != 0 { + t.Fatalf("deprecated runnable tombstone should be compatible: %v", failures) + } +} + func TestCompatibilityRejectsFlagContractRegressions(t *testing.T) { newRoot := func(persistent bool) (*cobra.Command, *cobra.Command) { root := &cobra.Command{Use: "dws"} diff --git a/skills/mono/references/products/chat.md b/skills/mono/references/products/chat.md index 7ee7e228..a7d07c60 100644 --- a/skills/mono/references/products/chat.md +++ b/skills/mono/references/products/chat.md @@ -593,21 +593,6 @@ Flags: - 发送文字 + 文件时,先发送 `--msg-type file --file-path` 文件消息,再补一条文本或 Markdown 说明;这是两条独立消息 ``` -### media(兼容入口,已下线) - -`dws chat media upload` 仅为 1.x 命令行兼容保留,不再读取 AppKey/AppSecret,也不再调用旧版 OAPI 媒体上传接口。 - -发送本地图片、文件或音视频时统一使用: - -```bash -dws chat message send --group --msg-type file --file-path ./screenshot.png --format json -dws chat message send --open-dingtalk-id --msg-type file --file-path ./report.pdf --format json -``` - -注意: -- `.png` / `.jpg` 经 `--file-path` 发送的是可下载的 file 消息,不会生成 mediaId,也不会渲染成内联 image。 -- 仅当上游已经提供有效 mediaId 时,才使用 `chat message send --msg-type image --media-id `。 - ### file (会话文件上传,已下线) #### chat file upload 已下线 diff --git a/skills/mono/scripts/extract_media_id.py b/skills/mono/scripts/extract_media_id.py deleted file mode 100644 index 7e2a3c23..00000000 --- a/skills/mono/scripts/extract_media_id.py +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env python3 -""" -从 dt_media_upload 返回的 URL 中提取 mediaId。 - -用法: - python extract_media_id.py - python extract_media_id.py "https://down.dingtalk.com/media/lQLPD4JNnliqBq3NBQDNA8Cw_960_1280.png" - # 输出: @lQLPD4JNnliqBq3NBQDNA8Cw - -依赖: 无(纯 Python 标准库) - -典型工作流(发送图片/语音/视频消息): - # 1. 用 dt_media_upload 上传文件,获得 URL - # 2. 用本脚本从 URL 提取 mediaId - python extract_media_id.py "" - # 输出: @lQLPxxx(直接用于 --media-id 或 --pic-url 参数) -""" - -import argparse -import re -import sys -from urllib.parse import urlparse - - -def extract_media_id(url: str) -> str: - """从 dt_media_upload 返回的 URL 中提取 mediaId。 - - 支持的 URL 格式示例: - https://down.dingtalk.com/media/lQLPD4JNnliqBq3NBQDNA8Cw_960_1280.png - https://down.dingtalk.com/media/lQLPD4JNnliqBq3NBQDNA8Cw.png - https://down.dingtalk.com/media/lQLPD4JNnliqBq3NBQDNA8Cw - - 提取规则: - 1. 取 URL 路径中 /media/ 之后的部分 - 2. 去除尾部的 _数字_数字.扩展名 后缀(如 _960_1280.png) - 3. 如果没有尺寸后缀,去除尾部的 .扩展名 - 4. 加上 @ 前缀 - - 返回: @lQLPD4JNnliqBq3NBQDNA8Cw - """ - url = url.strip() - - # 提取路径部分 - parsed = urlparse(url) - path = parsed.path # e.g. /media/lQLPxxx_960_1280.png - - # 取 /media/ 之后的部分 - media_prefix = "/media/" - idx = path.find(media_prefix) - if idx == -1: - print(f"错误:URL 中未找到 /media/ 路径: {url}", file=sys.stderr) - sys.exit(1) - raw = path[idx + len(media_prefix):] # e.g. lQLPxxx_960_1280.png - - if not raw: - print(f"错误:/media/ 后无内容: {url}", file=sys.stderr) - sys.exit(1) - - # 尝试去除 _数字_数字.扩展名 后缀(如 _960_1280.png) - match = re.match(r'^(.+?)(_\d+_\d+\.\w+)$', raw) - if match: - media_id = match.group(1) - else: - # 没有尺寸后缀,尝试去除 .扩展名 - match2 = re.match(r'^(.+)\.\w+$', raw) - if match2: - media_id = match2.group(1) - else: - # 无后缀,直接使用 - media_id = raw - - return f"@{media_id}" - - -def main(): - parser = argparse.ArgumentParser( - description="从 dt_media_upload 返回的 URL 中提取 mediaId" - ) - parser.add_argument("url", help="dt_media_upload 返回的文件 URL") - args = parser.parse_args() - - media_id = extract_media_id(args.url) - print(media_id) - - -if __name__ == "__main__": - main() diff --git a/skills/multi/dingtalk-chat/references/chat.md b/skills/multi/dingtalk-chat/references/chat.md index dfe645b1..5d7350f8 100644 --- a/skills/multi/dingtalk-chat/references/chat.md +++ b/skills/multi/dingtalk-chat/references/chat.md @@ -1506,21 +1506,6 @@ Flags: - 支持单聊和群聊,openConversationId 可通过 chat search(群聊)或 chat conversation-info(单聊)获取 ``` -### media(兼容入口,已下线) - -`dws chat media upload` 仅为 1.x 命令行兼容保留,不再读取 AppKey/AppSecret,也不再调用旧版 OAPI 媒体上传接口。 - -发送本地图片、文件或音视频时统一使用: - -```bash -dws chat message send --group --msg-type file --file-path ./screenshot.png --format json -dws chat message send --open-dingtalk-id --msg-type file --file-path ./report.pdf --format json -``` - -注意: -- `.png` / `.jpg` 经 `--file-path` 发送的是可下载的 file 消息,不会生成 mediaId,也不会渲染成内联 image。 -- 仅当上游已经提供有效 mediaId 时,才使用 `chat message send --msg-type image --media-id `。 - ### hide (隐藏会话) #### 隐藏会话 — 在会话列表中隐藏指定会话(支持单聊/群聊),收到新消息时会重新出现 diff --git a/skills/multi/dingtalk-chat/scripts/extract_media_id.py b/skills/multi/dingtalk-chat/scripts/extract_media_id.py deleted file mode 100644 index 7e2a3c23..00000000 --- a/skills/multi/dingtalk-chat/scripts/extract_media_id.py +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env python3 -""" -从 dt_media_upload 返回的 URL 中提取 mediaId。 - -用法: - python extract_media_id.py - python extract_media_id.py "https://down.dingtalk.com/media/lQLPD4JNnliqBq3NBQDNA8Cw_960_1280.png" - # 输出: @lQLPD4JNnliqBq3NBQDNA8Cw - -依赖: 无(纯 Python 标准库) - -典型工作流(发送图片/语音/视频消息): - # 1. 用 dt_media_upload 上传文件,获得 URL - # 2. 用本脚本从 URL 提取 mediaId - python extract_media_id.py "" - # 输出: @lQLPxxx(直接用于 --media-id 或 --pic-url 参数) -""" - -import argparse -import re -import sys -from urllib.parse import urlparse - - -def extract_media_id(url: str) -> str: - """从 dt_media_upload 返回的 URL 中提取 mediaId。 - - 支持的 URL 格式示例: - https://down.dingtalk.com/media/lQLPD4JNnliqBq3NBQDNA8Cw_960_1280.png - https://down.dingtalk.com/media/lQLPD4JNnliqBq3NBQDNA8Cw.png - https://down.dingtalk.com/media/lQLPD4JNnliqBq3NBQDNA8Cw - - 提取规则: - 1. 取 URL 路径中 /media/ 之后的部分 - 2. 去除尾部的 _数字_数字.扩展名 后缀(如 _960_1280.png) - 3. 如果没有尺寸后缀,去除尾部的 .扩展名 - 4. 加上 @ 前缀 - - 返回: @lQLPD4JNnliqBq3NBQDNA8Cw - """ - url = url.strip() - - # 提取路径部分 - parsed = urlparse(url) - path = parsed.path # e.g. /media/lQLPxxx_960_1280.png - - # 取 /media/ 之后的部分 - media_prefix = "/media/" - idx = path.find(media_prefix) - if idx == -1: - print(f"错误:URL 中未找到 /media/ 路径: {url}", file=sys.stderr) - sys.exit(1) - raw = path[idx + len(media_prefix):] # e.g. lQLPxxx_960_1280.png - - if not raw: - print(f"错误:/media/ 后无内容: {url}", file=sys.stderr) - sys.exit(1) - - # 尝试去除 _数字_数字.扩展名 后缀(如 _960_1280.png) - match = re.match(r'^(.+?)(_\d+_\d+\.\w+)$', raw) - if match: - media_id = match.group(1) - else: - # 没有尺寸后缀,尝试去除 .扩展名 - match2 = re.match(r'^(.+)\.\w+$', raw) - if match2: - media_id = match2.group(1) - else: - # 无后缀,直接使用 - media_id = raw - - return f"@{media_id}" - - -def main(): - parser = argparse.ArgumentParser( - description="从 dt_media_upload 返回的 URL 中提取 mediaId" - ) - parser.add_argument("url", help="dt_media_upload 返回的文件 URL") - args = parser.parse_args() - - media_id = extract_media_id(args.url) - print(media_id) - - -if __name__ == "__main__": - main() diff --git a/test/cli/root_command_test.go b/test/cli/root_command_test.go index fc2db003..b4c72857 100644 --- a/test/cli/root_command_test.go +++ b/test/cli/root_command_test.go @@ -13,7 +13,7 @@ import ( // MCP architecture, products are discovered dynamically from MCP servers, // and their availability depends on the test environment's fixture data. -func TestHiddenMCPHelpIsReachable(t *testing.T) { +func TestPublicMCPHelpShowsReviewedURLCommand(t *testing.T) { cmd := app.NewRootCommand() var out strings.Builder cmd.SetOut(&out) @@ -25,7 +25,8 @@ func TestHiddenMCPHelpIsReachable(t *testing.T) { } got := out.String() - if !strings.Contains(got, "canonical MCP command surface is disabled") { + if !strings.Contains(got, "管理经过审核并纳入 Schema 的 MCP 服务连接辅助能力") || + !strings.Contains(got, "url") { t.Fatalf("mcp help missing expected text:\n%s", got) } } diff --git a/test/fixtures/cli-interface-baseline.txt b/test/fixtures/cli-interface-baseline.txt index 169f440b..d788bb1f 100644 --- a/test/fixtures/cli-interface-baseline.txt +++ b/test/fixtures/cli-interface-baseline.txt @@ -1,7 +1,7 @@ [root] runnable: true hidden: false - commands: agoal, aisearch, aitable, api, attendance, audit, auth, calendar, chat, completion, config, contact, dev, devapp, devdoc, ding, doc, doctor, drive, event, help, live, mail, minutes, oa, pat, plugin, profile, recovery, report, schema, sheet, skill, todo, upgrade, version, wiki + commands: agoal, aisearch, aitable, api, attendance, audit, auth, calendar, chat, completion, config, contact, dev, devapp, devdoc, ding, doc, doctor, drive, event, help, live, mail, mcp, minutes, oa, pat, plugin, profile, recovery, report, schema, sheet, skill, todo, upgrade, version, wiki flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=persistent, --client-secret:string|required=false|hidden=false|no-opt=""|scope=persistent, --debug:bool|required=false|hidden=false|no-opt="true"|scope=persistent, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=persistent, --fields:string|required=false|hidden=false|no-opt=""|scope=persistent, -f/--format:string|required=false|hidden=false|no-opt=""|scope=persistent, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=persistent, --mock:bool|required=false|hidden=false|no-opt="true"|scope=persistent, -o/--output:string|required=false|hidden=true|no-opt=""|scope=persistent, --profile:string|required=false|hidden=false|no-opt=""|scope=persistent, --timeout:int|required=false|hidden=false|no-opt=""|scope=persistent, --token:string|required=false|hidden=true|no-opt=""|scope=persistent, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=persistent, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=persistent [agoal] @@ -1738,7 +1738,7 @@ [chat.+bot-find] runnable: true hidden: false - flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --cursor:string|required=false|hidden=false|no-opt=""|scope=local, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --limit:int|required=false|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --query:string|required=false|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --cursor:string|required=false|hidden=false|no-opt=""|scope=local, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --keyword:string|required=false|hidden=true|no-opt=""|scope=local, --limit:int|required=false|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --query:string|required=false|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [chat.+bot-search] runnable: true @@ -1748,7 +1748,7 @@ [chat.+broadcast] runnable: true hidden: false - flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --text:string|required=false|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --to:stringSlice|required=false|hidden=false|no-opt=""|scope=local, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + flags: --ai-tag:bool|required=false|hidden=false|no-opt="true"|scope=local, --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --text:string|required=false|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --to:stringSlice|required=false|hidden=false|no-opt=""|scope=local, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [chat.+category-create] runnable: true @@ -1833,7 +1833,7 @@ [chat.+chat-search] runnable: true hidden: false - flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --cursor:string|required=false|hidden=false|no-opt=""|scope=local, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --exclude-muted:bool|required=false|hidden=false|no-opt="true"|scope=local, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --limit:int|required=false|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --query:string|required=false|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --cursor:string|required=false|hidden=false|no-opt=""|scope=local, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --exclude-muted:bool|required=false|hidden=false|no-opt="true"|scope=local, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --keyword:string|required=false|hidden=true|no-opt=""|scope=local, --limit:int|required=false|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --query:string|required=false|hidden=false|no-opt=""|scope=local, --size:int|required=false|hidden=true|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [chat.+chat-set-admin] runnable: true @@ -1878,7 +1878,7 @@ [chat.+dm] runnable: true hidden: false - flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --text:string|required=false|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --to:string|required=false|hidden=false|no-opt=""|scope=local, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + flags: --ai-tag:bool|required=false|hidden=false|no-opt="true"|scope=local, --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --text:string|required=false|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --to:string|required=false|hidden=false|no-opt=""|scope=local, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [chat.+group-members] runnable: true @@ -1888,7 +1888,7 @@ [chat.+messages-list-direct] runnable: true hidden: false - flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, --forward:bool|required=false|hidden=false|no-opt="true"|scope=local, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --limit:int|required=false|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --open-dingtalk-id:string|required=false|hidden=false|no-opt=""|scope=local, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --time:string|required=false|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, --user:string|required=false|hidden=false|no-opt=""|scope=local, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, --forward:bool|required=false|hidden=false|no-opt="true"|scope=local, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --limit:int|required=false|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --open-dingtalk-id:string|required=false|hidden=false|no-opt=""|scope=local, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --size:int|required=false|hidden=true|no-opt=""|scope=local, --time:string|required=false|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, --user:string|required=false|hidden=false|no-opt=""|scope=local, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [chat.+messages-list-pin] runnable: true @@ -1913,7 +1913,7 @@ [chat.+messages-read-status] runnable: true hidden: false - flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --conversation-id:string|required=false|hidden=false|no-opt=""|scope=local, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --message-id:string|required=false|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, --users:stringSlice|required=false|hidden=false|no-opt=""|scope=local, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --conversation-id:string|required=false|hidden=false|no-opt=""|scope=local, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, --group:string|required=false|hidden=true|no-opt=""|scope=local, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --id:string|required=false|hidden=true|no-opt=""|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --message-id:string|required=false|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, --users:stringSlice|required=false|hidden=false|no-opt=""|scope=local, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [chat.+messages-send-by-webhook] runnable: true @@ -1933,7 +1933,7 @@ [chat.+send-to-group] runnable: true hidden: false - flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, --group:string|required=false|hidden=false|no-opt=""|scope=local, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --text:string|required=false|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + flags: --ai-tag:bool|required=false|hidden=false|no-opt="true"|scope=local, --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, --group:string|required=false|hidden=false|no-opt=""|scope=local, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --text:string|required=false|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [chat.+unread-chats] runnable: true @@ -2317,7 +2317,7 @@ [chat.message.download-media] runnable: true hidden: false - flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --message-id:string|required=true|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --open-conversation-id:string|required=true|hidden=false|no-opt=""|scope=local, --output:string|required=true|hidden=false|no-opt=""|scope=local, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --resource-id:string|required=true|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, --type:string|required=true|hidden=false|no-opt=""|scope=local, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --message-id:string|required=true|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --msg-id:string|required=false|hidden=true|no-opt=""|scope=local, --open-conversation-id:string|required=true|hidden=false|no-opt=""|scope=local, --open-message-id:string|required=false|hidden=true|no-opt=""|scope=local, --output:string|required=true|hidden=false|no-opt=""|scope=local, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --resource-id:string|required=true|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, --type:string|required=true|hidden=false|no-opt=""|scope=local, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [chat.message.forward] runnable: true @@ -2539,7 +2539,7 @@ [contact] runnable: true hidden: false - commands: +by-mobile, +dept-members, +list-dept-members, +list-followings, +list-role-members, +list-roles, +list-sub-depts, +lookup, +me, +org, +resolve-dept, +search-mobile, +search-user, +team, dept, label, relation, user + commands: +by-mobile, +dept-members, +list-dept-members, +list-followings, +list-role-members, +list-roles, +list-sub-depts, +lookup, +me, +org, +resolve-dept, +search-mobile, +search-user, +team, account, dept, label, org, relation, user flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [contact.+by-mobile] @@ -2612,6 +2612,17 @@ hidden: false flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --name:string|required=false|hidden=false|no-opt=""|scope=local, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited +[contact.account] + runnable: true + hidden: false + commands: create + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + +[contact.account.create] + runnable: true + hidden: false + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dept-ids:string|required=false|hidden=false|no-opt=""|scope=local, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --email:string|required=false|hidden=false|no-opt=""|scope=local, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --login-id:string|required=false|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --org-user-mobile:string|required=false|hidden=false|no-opt=""|scope=local, --org-user-name:string|required=false|hidden=false|no-opt=""|scope=local, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --send-pwd-via-sms:bool|required=false|hidden=false|no-opt="true"|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + [contact.dept] runnable: true hidden: false @@ -2660,6 +2671,17 @@ hidden: false flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --id:string|required=false|hidden=false|no-opt=""|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --label-id:string|required=false|hidden=true|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --role-id:string|required=false|hidden=true|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited +[contact.org] + runnable: true + hidden: false + commands: create + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + +[contact.org.create] + runnable: true + hidden: false + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --creator-username:string|required=false|hidden=false|no-opt=""|scope=local, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --org-name:string|required=false|hidden=false|no-opt=""|scope=local, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + [contact.relation] runnable: true hidden: false @@ -2674,7 +2696,7 @@ [contact.user] runnable: true hidden: false - commands: dismission, get, get-self, profile, search, search-mobile + commands: dismission, get, get-self, invite, profile, search, search-mobile flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [contact.user.dismission] @@ -2699,6 +2721,11 @@ aliases: current, me, self, whoami flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited +[contact.user.invite] + runnable: true + hidden: false + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --depts:string|required=false|hidden=false|no-opt=""|scope=local, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --org-user-mobile:string|required=false|hidden=false|no-opt=""|scope=local, --org-user-name:string|required=false|hidden=false|no-opt=""|scope=local, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + [contact.user.profile] runnable: true hidden: false @@ -2792,7 +2819,7 @@ [dev.app.get] runnable: true hidden: false - flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, --unified-app-id:string|required=false|hidden=false|no-opt=""|scope=local, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + flags: --app-key:string|required=false|hidden=false|no-opt=""|scope=local, --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, --unified-app-id:string|required=false|hidden=false|no-opt=""|scope=local, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [dev.app.list] runnable: true @@ -3232,7 +3259,7 @@ [doc.+share-doc] runnable: true hidden: false - flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --note:string|required=false|hidden=false|no-opt=""|scope=local, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --to:string|required=false|hidden=false|no-opt=""|scope=local, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, --url:string|required=false|hidden=false|no-opt=""|scope=local, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + flags: --ai-tag:bool|required=false|hidden=false|no-opt="true"|scope=local, --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --note:string|required=false|hidden=false|no-opt=""|scope=local, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --to:string|required=false|hidden=false|no-opt=""|scope=local, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, --url:string|required=false|hidden=false|no-opt=""|scope=local, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [doc.+template-list] runnable: true @@ -3637,7 +3664,7 @@ [event.consume] runnable: true hidden: false - flags: --as:string|required=false|hidden=true|no-opt=""|scope=local, --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --compact:bool|required=false|hidden=false|no-opt="true"|scope=local, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --debug-raw-events:bool|required=false|hidden=false|no-opt="true"|scope=local, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=local, --duration:duration|required=false|hidden=false|no-opt=""|scope=local, --ephemeral:bool|required=false|hidden=false|no-opt="true"|scope=local, --event-types:stringSlice|required=false|hidden=false|no-opt=""|scope=local, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, --filter:string|required=false|hidden=false|no-opt=""|scope=local, --filter-json:string|required=false|hidden=false|no-opt=""|scope=local, --force:bool|required=false|hidden=false|no-opt="true"|scope=local, --foreground:bool|required=false|hidden=false|no-opt="true"|scope=local, -f/--format:string|required=false|hidden=false|no-opt=""|scope=local, --group:string|required=false|hidden=false|no-opt=""|scope=local, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --max-events:int|required=false|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --name:string|required=false|hidden=false|no-opt=""|scope=local, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --output-dir:string|required=false|hidden=false|no-opt=""|scope=local, --personal-event-base-url:string|required=false|hidden=false|no-opt=""|scope=local, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --query:string|required=false|hidden=false|no-opt=""|scope=local, --quiet:bool|required=false|hidden=false|no-opt="true"|scope=local, --route:stringArray|required=false|hidden=false|no-opt=""|scope=local, --rule:string|required=false|hidden=false|no-opt=""|scope=local, --stream-source-id:string|required=false|hidden=false|no-opt=""|scope=local, --stream-ticket-mode:string|required=false|hidden=false|no-opt=""|scope=local, --stream-ticket-url:string|required=false|hidden=false|no-opt=""|scope=local, --subscribe-id:string|required=false|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, --ttl:duration|required=false|hidden=false|no-opt=""|scope=local, --user:string|required=false|hidden=false|no-opt=""|scope=local, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + flags: --as:string|required=false|hidden=true|no-opt=""|scope=local, --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --compact:bool|required=false|hidden=false|no-opt="true"|scope=local, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --debug-raw-events:bool|required=false|hidden=false|no-opt="true"|scope=local, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=local, --duration:duration|required=false|hidden=false|no-opt=""|scope=local, --ephemeral:bool|required=false|hidden=false|no-opt="true"|scope=local, --event-types:stringSlice|required=false|hidden=false|no-opt=""|scope=local, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, --filter:string|required=false|hidden=false|no-opt=""|scope=local, --filter-json:string|required=false|hidden=false|no-opt=""|scope=local, --flatten:bool|required=false|hidden=false|no-opt="true"|scope=local, --force:bool|required=false|hidden=false|no-opt="true"|scope=local, --foreground:bool|required=false|hidden=false|no-opt="true"|scope=local, -f/--format:string|required=false|hidden=false|no-opt=""|scope=local, --group:string|required=false|hidden=false|no-opt=""|scope=local, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --max-events:int|required=false|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --name:string|required=false|hidden=false|no-opt=""|scope=local, --open-dingtalk-id:string|required=false|hidden=false|no-opt=""|scope=local, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --output-dir:string|required=false|hidden=false|no-opt=""|scope=local, --personal-event-base-url:string|required=false|hidden=false|no-opt=""|scope=local, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --query:string|required=false|hidden=false|no-opt=""|scope=local, --quiet:bool|required=false|hidden=false|no-opt="true"|scope=local, --route:stringArray|required=false|hidden=false|no-opt=""|scope=local, --rule:string|required=false|hidden=false|no-opt=""|scope=local, --stream-source-id:string|required=false|hidden=false|no-opt=""|scope=local, --stream-ticket-mode:string|required=false|hidden=false|no-opt=""|scope=local, --stream-ticket-url:string|required=false|hidden=false|no-opt=""|scope=local, --subscribe-id:string|required=false|hidden=false|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, --ttl:duration|required=false|hidden=false|no-opt=""|scope=local, --user:string|required=false|hidden=false|no-opt=""|scope=local, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [event.list] runnable: true @@ -3647,7 +3674,7 @@ [event.schema] runnable: true hidden: false - flags: --as:string|required=false|hidden=true|no-opt=""|scope=local, --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=local, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + flags: --as:string|required=false|hidden=true|no-opt=""|scope=local, --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, --flatten:bool|required=false|hidden=false|no-opt="true"|scope=local, -f/--format:string|required=false|hidden=false|no-opt=""|scope=local, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited [event.status] runnable: true @@ -4117,6 +4144,23 @@ hidden: false flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --cursor:string|required=false|hidden=false|no-opt=""|scope=local, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --email:string|required=false|hidden=false|no-opt=""|scope=local, --employee-no:string|required=false|hidden=false|no-opt=""|scope=local, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --keyword:string|required=false|hidden=false|no-opt=""|scope=local, --limit:string|required=false|hidden=false|no-opt=""|scope=local, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --size:string|required=false|hidden=true|no-opt=""|scope=local, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited +[mcp] + runnable: true + hidden: false + commands: url + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + +[mcp.url] + runnable: true + hidden: false + commands: get + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + +[mcp.url.get] + runnable: true + hidden: false + flags: --client-id:string|required=false|hidden=false|no-opt=""|scope=inherited, --client-secret:string|required=false|hidden=false|no-opt=""|scope=inherited, --debug:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --dry-run:bool|required=false|hidden=false|no-opt="true"|scope=inherited, --fields:string|required=false|hidden=false|no-opt=""|scope=inherited, -f/--format:string|required=false|hidden=false|no-opt=""|scope=inherited, -h/--help:bool|required=false|hidden=false|no-opt="true"|scope=local, --jq:string|required=false|hidden=false|no-opt=""|scope=inherited, --mock:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -o/--output:string|required=false|hidden=true|no-opt=""|scope=inherited, --profile:string|required=false|hidden=false|no-opt=""|scope=inherited, --timeout:int|required=false|hidden=false|no-opt=""|scope=inherited, --token:string|required=false|hidden=true|no-opt=""|scope=inherited, -v/--verbose:bool|required=false|hidden=false|no-opt="true"|scope=inherited, -y/--yes:bool|required=false|hidden=false|no-opt="true"|scope=inherited + [minutes] runnable: true hidden: false