From 86f2b14449274f79eb6bfef2b2b784d3bc11588d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=89=E6=BE=9C?= Date: Thu, 6 Aug 2026 10:46:42 +0800 Subject: [PATCH] docs: drop multi skill experimental banners Remove EXPERIMENTAL/Preview banners from skill setup, install scripts, README, and misc references so multi mode is no longer framed as unstable preview. Co-authored-by: Cursor --- README.md | 6 ++---- README_zh.md | 6 ++---- docs/skill-mono-multi-qa.md | 2 +- internal/app/coverage_edges_test.go | 4 ++-- internal/app/skill_setup.go | 21 ++++--------------- scripts/install.ps1 | 11 +++------- scripts/install.sh | 11 +++------- .../multi/dingtalk-misc/references/hrbrain.md | 2 -- .../dingtalk-misc/references/markdown.md | 2 -- skills/multi/dingtalk-misc/references/pat.md | 2 -- .../multi/dingtalk-misc/references/profile.md | 2 -- .../multi/dingtalk-misc/references/skill.md | 2 -- 12 files changed, 17 insertions(+), 54 deletions(-) diff --git a/README.md b/README.md index c3a84ff83..1687fbe25 100644 --- a/README.md +++ b/README.md @@ -71,9 +71,7 @@ The installer ships skills in one of two layouts. CLI commands (`dws aitable ... | Mode | What gets installed | Best for | |------|----------------------|----------| | **mono** (stable, default) | One `dws` skill covering all products | Cross-product workflows; single entry point | -| **multi** 🧪 **EXPERIMENTAL** | Per-product skills (`dingtalk-aitable`, `dingtalk-calendar`, `dingtalk-chat`, ...) | Single-product tasks; smaller context per call | - -> 🧪 **`multi` is currently EXPERIMENTAL / preview.** All product-scoped skills pass the dispatch verifier, but interface, naming and cross-skill references may change in future releases. For production / shared environments, prefer `mono`. File issues if you hit problems. +| **multi** | Per-product skills (`dingtalk-aitable`, `dingtalk-calendar`, `dingtalk-chat`, ...) | Single-product tasks; smaller context per call | How to pick: @@ -394,7 +392,7 @@ dws aitable record query --base-id BASE_ID --table-id TABLE_ID --limit 10 The repo ships a complete Agent Skill system under `skills/`, organized into two layouts: - `skills/mono/` — single-skill layout (one `SKILL.md` + `references/products/`), recommended default. -- `skills/multi/` — per-product skills (`dingtalk-aitable/`, `dingtalk-calendar/`, `dingtalk-chat/`, ...), each with its own `SKILL.md`. 🧪 **EXPERIMENTAL / preview — see banner in each multi `SKILL.md` for caveats.** +- `skills/multi/` — per-product skills (`dingtalk-aitable/`, `dingtalk-calendar/`, `dingtalk-chat/`, ...), each with its own `SKILL.md`. Leaf safety/parameters/selection prose for Schema generation come from ProductDecl / ContractFinal declarations in Go. The former `internal/cli/schema_hints/` HintFile tree is fully retired and must not reappear. diff --git a/README_zh.md b/README_zh.md index 12c305584..b6dfb58bd 100644 --- a/README_zh.md +++ b/README_zh.md @@ -71,9 +71,7 @@ irm https://raw.githubusercontent.com/DingTalk-Real-AI/dingtalk-workspace-cli/ma | 模式 | 安装内容 | 适合场景 | |------|----------|----------| | **mono**(稳定,默认) | 一个 `dws` skill,覆盖全部产品 | 跨产品组合操作;单一入口召唤 | -| **multi** 🧪 **试验版 / Preview** | 按产品拆分的独立 skill(`dingtalk-aitable` / `dingtalk-calendar` / `dingtalk-chat` ...) | 单产品任务;每次召唤上下文更小 | - -> 🧪 **multi 模式当前为 EXPERIMENTAL(试验版 / Preview)**。全部独立 skill 均通过 dispatch verifier,但接口、命名、跨 skill 引用后续可能调整。生产 / 共享环境建议优先用 `mono`。问题请提 issue 反馈。 +| **multi** | 按产品拆分的独立 skill(`dingtalk-aitable` / `dingtalk-calendar` / `dingtalk-chat` ...) | 单产品任务;每次召唤上下文更小 | 怎么选: @@ -388,7 +386,7 @@ dws aitable record query --base-id BASE_ID --table-id TABLE_ID --limit 10 仓库内置完整的 Agent Skill 体系(`skills/` 目录),分为两套布局: - `skills/mono/` — 单 skill 布局(一个 `SKILL.md` + `references/products/`),默认推荐。 -- `skills/multi/` — 每个产品一个独立 skill(`dingtalk-aitable/` / `dingtalk-calendar/` / `dingtalk-chat/` ...),每个 skill 自带 `SKILL.md`。🧪 **试验版 / Preview — 各 multi `SKILL.md` 头部有详细注意事项。** +- `skills/multi/` — 每个产品一个独立 skill(`dingtalk-aitable/` / `dingtalk-calendar/` / `dingtalk-chat/` ...),每个 skill 自带 `SKILL.md`。 Schema 生成的叶子 safety/参数/选型文案由 Go 中的 ProductDecl / ContractFinal 声明驱动。原 `internal/cli/schema_hints/` HintFile 目录已完全退役,不得重新引入。 diff --git a/docs/skill-mono-multi-qa.md b/docs/skill-mono-multi-qa.md index e2302169f..aa2432a72 100644 --- a/docs/skill-mono-multi-qa.md +++ b/docs/skill-mono-multi-qa.md @@ -55,7 +55,7 @@ orphan_scripts_allowlist: | X2 | chat 死链 `extract_media_id.py` | n/a | 现仅为反模式提及 | | X3 | routing → markdown 错路径 | **done** | 已指 `dingtalk-misc/references/markdown.md`;drive 尾链已修 | | X4 | event 缺 metadata | **done** | | -| X5 | EXPERIMENTAL「优先 mono」文案 | **done** | 五 skill 已去「优先 mono」 | +| X5 | multi skill 横幅 /「优先 mono」文案 | **done** | 横幅已全部移除 | | X6 | SAFETY_PREAMBLE_INJECT 无注入器 | **done** | 标记已移除 | 产品面覆盖:见 YAML `coverage`——mono products 均有 multi 承接(misc 聚合 attendance/oa/sheet/…)。 diff --git a/internal/app/coverage_edges_test.go b/internal/app/coverage_edges_test.go index e7c3439ae..1d04c9611 100644 --- a/internal/app/coverage_edges_test.go +++ b/internal/app/coverage_edges_test.go @@ -2008,8 +2008,8 @@ func TestCrossPlatformCoverageSkillSetupRuntimeCoverage(t *testing.T) { if _, err := os.Stat(filepath.Join(home, ".agents", "skills", "dws", "SKILL.md")); err != nil { t.Fatal(err) } - if output, warnings, err := run("--mode", "multi", "--source", multi, "--target", "agents", "--yes", "--skill", "a"); err != nil || !strings.Contains(output, "installed=2") || warnings == "" { - t.Fatalf("multi setup = %q / %q, %v", output, warnings, err) + if output, _, err := run("--mode", "multi", "--source", multi, "--target", "agents", "--yes", "--skill", "a"); err != nil || !strings.Contains(output, "installed=2") { + t.Fatalf("multi setup = %q, %v", output, err) } if _, err := os.Stat(filepath.Join(home, ".agents", "skills", "dingtalk-shared", "SKILL.md")); err != nil { t.Fatal(err) diff --git a/internal/app/skill_setup.go b/internal/app/skill_setup.go index eec772fab..e7bbcf9af 100644 --- a/internal/app/skill_setup.go +++ b/internal/app/skill_setup.go @@ -75,10 +75,8 @@ func newSkillSetupCommand() *cobra.Command { Long: `安装 dws 自身 skill 文档到 AI Agent 目录(如 ~/.claude/skills/、~/.cursor/skills/ 等)。 支持两种模式: - mono 单 skill(稳定 / 推荐)—— 总入口 SKILL.md + references/products/ - multi 🧪 EXPERIMENTAL 多 skill(试验版 / Preview)—— 按产品拆 N 个独立 skill - 尚未达到 stable 标准,接口、命名与跨 skill 引用可能变动; - 生产前请评估,问题请提 issue 反馈 + mono 单 skill(稳定 / 推荐)—— 总入口 SKILL.md + references/products/ + multi 多 skill—— 按产品拆 N 个独立 skill multi 模式支持按产品挑选: -s/--skill 只装指定子 skill(可重复,短名 aitable 或全名 dingtalk-aitable 均可) @@ -177,8 +175,6 @@ func runSkillSetup(cmd *cobra.Command, _ []string) error { fmt.Fprintln(out, "已取消。") return nil } - } else if mode == skillSetupModeMulti { - fmt.Fprintln(errOut, "🧪 multi 模式当前为 EXPERIMENTAL(试验版 / Preview)—— 接口与布局可能变动,稳定版请用 --mode mono") } var installed, skipped int @@ -365,10 +361,10 @@ func resolveSkillSetupMode(mode string, autoYes bool, out io.Writer) (string, er huh.NewGroup( huh.NewSelect[string](). Title("选择 dws skill 安装模式"). - Description("mono = 单 skill 入口(稳定 / 推荐)\nmulti = 按产品拆分(🧪 EXPERIMENTAL / 试验版,未达 stable,接口可能变动)"). + Description("mono = 单 skill 入口(稳定 / 推荐)\nmulti = 按产品拆分的独立 skill"). Options( huh.NewOption("mono — 单 skill(稳定 / 推荐)", skillSetupModeMono), - huh.NewOption("multi — 多 skill(🧪 EXPERIMENTAL · 试验版)", skillSetupModeMulti), + huh.NewOption("multi — 多 skill(按产品拆分)", skillSetupModeMulti), ). Value(&choice), ), @@ -526,15 +522,6 @@ func detectExistingAgentHomes(home, mode string) []string { } func confirmSkillSetup(out io.Writer, mode, src string, dests []string, multiSkillNames []string) (bool, error) { - if mode == skillSetupModeMulti { - fmt.Fprintln(out, "\n🧪 ─────────────────────────────────────────────────────────────") - fmt.Fprintln(out, " multi 模式当前为 EXPERIMENTAL(试验版 / Preview)") - fmt.Fprintf(out, " · 当前选择的 %d 个独立 skill 均跑过 verifier,可用但未达 stable\n", len(multiSkillNames)) - fmt.Fprintln(out, " · 跨 skill 引用、bundle 命名、目录布局后续可能调整") - fmt.Fprintln(out, " · 不建议在生产 / 共享环境直接落地;问题请提 issue 反馈") - fmt.Fprintln(out, " 稳定版请用 --mode mono") - fmt.Fprintln(out, "🧪 ─────────────────────────────────────────────────────────────") - } fmt.Fprintf(out, "\n📦 将安装 skill:\n mode: %s\n source: %s\n", mode, src) if mode == skillSetupModeMulti { fmt.Fprintf(out, " 将装 %d 个独立 skill(按子目录平铺到 //):\n", len(multiSkillNames)) diff --git a/scripts/install.ps1 b/scripts/install.ps1 index 1dcaaffe9..1b4e0b31f 100644 --- a/scripts/install.ps1 +++ b/scripts/install.ps1 @@ -311,9 +311,8 @@ function Resolve-SkillMode { if ($isInteractive) { Write-Host "" Write-Say "Select skill installation mode:" - Write-Say " 1) mono — install one bundled dws skill (stable / recommended)" - Write-Say " 2) multi 🧪 EXPERIMENTAL — split each product into its own skill (preview; run 'dws skill setup --mode multi' afterwards)" - Write-Say " ⚠ multi is not yet stable — interface, naming and cross-skill references may change" + Write-Say " 1) mono — install one bundled dws skill (stable / recommended)" + Write-Say " 2) multi — split each product into its own skill (run 'dws skill setup --mode multi' afterwards)" $choice = Read-Host " Choice [1]" switch ($choice) { "" { $script:SkillMode = "mono" } @@ -335,11 +334,7 @@ function Resolve-SkillMode { function Write-MultiModeNotice { Write-Say "" - Write-Say "🧪 Skill mode: multi (EXPERIMENTAL / preview) — automatic skill install skipped." - Write-Say " ⚠ multi is not yet stable. All product-scoped skills pass dispatch verifier," - Write-Say " but interface, naming and cross-skill references may change in future releases." - Write-Say " For production / shared environments, use mono mode (--mode mono)." - Write-Say "" + Write-Say "Skill mode: multi — automatic skill install skipped." Write-Say " To install split skills, run:" Write-Say " $BinName skill setup --mode multi" Write-Say " (One skill per product family; requires the dws binary installed above.)" diff --git a/scripts/install.sh b/scripts/install.sh index 7deaa4d5b..96c140ae0 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -237,9 +237,8 @@ resolve_skill_mode() { if [ -t 0 ] && [ -t 1 ]; then printf '\n' say "Select skill installation mode:" - say " 1) mono — install one bundled dws skill (stable / recommended)" - say " 2) multi 🧪 EXPERIMENTAL — split each product into its own skill (preview; run 'dws skill setup --mode multi' afterwards)" - say " ⚠ multi is not yet stable — interface, naming and cross-skill references may change" + say " 1) mono — install one bundled dws skill (stable / recommended)" + say " 2) multi — split each product into its own skill (run 'dws skill setup --mode multi' afterwards)" printf ' Choice [1]: ' read choice || choice="" case "$choice" in @@ -259,11 +258,7 @@ resolve_skill_mode() { print_multi_mode_notice() { say "" - say "🧪 Skill mode: multi (EXPERIMENTAL / preview) — automatic skill install skipped." - say " ⚠ multi is not yet stable. All product-scoped skills pass dispatch verifier," - say " but interface, naming and cross-skill references may change in future releases." - say " For production / shared environments, use mono mode (--mode mono)." - say "" + say "Skill mode: multi — automatic skill install skipped." say " To install split skills, run:" say " ${BIN_NAME} skill setup --mode multi" say " (One skill per product family; requires the dws binary installed above.)" diff --git a/skills/multi/dingtalk-misc/references/hrbrain.md b/skills/multi/dingtalk-misc/references/hrbrain.md index 76c194d64..152a3bdaa 100644 --- a/skills/multi/dingtalk-misc/references/hrbrain.md +++ b/skills/multi/dingtalk-misc/references/hrbrain.md @@ -1,7 +1,5 @@ # Hrbrain(组织大脑) -> 🧪 **EXPERIMENTAL** — 接口、命名或跨 skill 引用可能调整;以当前 `dws` 二进制与 leaf Schema 为准。问题请提 issue。 -> > 本文件为 `dingtalk-misc` 内组织大脑产品入口。命令前缀:`dws hrbrain`。Distinct from `dingtalk-contact`(通讯录/组织架构)、考勤(本包 `attendance.md`)。 ## 产品说明 diff --git a/skills/multi/dingtalk-misc/references/markdown.md b/skills/multi/dingtalk-misc/references/markdown.md index 2d945180d..fb2f9b075 100644 --- a/skills/multi/dingtalk-misc/references/markdown.md +++ b/skills/multi/dingtalk-misc/references/markdown.md @@ -1,7 +1,5 @@ # Markdown 文件 (markdown) 命令参考 -> 🧪 **EXPERIMENTAL** — 接口、命名或跨 skill 引用可能调整;以当前 `dws` 二进制与 leaf Schema 为准。问题请提 issue。 -> > 本文件为 `dingtalk-misc` 内原生 Markdown 产品入口。命令前缀:`dws markdown`。Distinct from `dingtalk-doc`(在线富文本文档与块编辑)、`dingtalk-drive`(任意类型文件的一般存储与传输)。 `markdown` 面向钉盘或文档空间中的原生 `.md` 文件,把内容作为单个纯文本文件读写。在线富文本文档(`adoc`)仍使用 [`dingtalk-doc`](../../dingtalk-doc/references/doc.md)。 diff --git a/skills/multi/dingtalk-misc/references/pat.md b/skills/multi/dingtalk-misc/references/pat.md index 81de49a83..41de97186 100644 --- a/skills/multi/dingtalk-misc/references/pat.md +++ b/skills/multi/dingtalk-misc/references/pat.md @@ -1,7 +1,5 @@ # PAT 行为授权 (pat) 命令参考 -> 🧪 **EXPERIMENTAL** — 接口、命名或跨 skill 引用可能调整;以当前 `dws` 二进制与 leaf Schema 为准。问题请提 issue。 -> > 本文件为 `dingtalk-misc` 内 PAT 行为授权产品入口。命令前缀:`dws pat`。Distinct from 开放平台应用权限(本包 [devapp.md](./devapp.md))。 `dws pat` 管理 Agent 的行为授权。它不管理开放平台应用权限;应用权限使用 `dws dev app permission`(见 [devapp.md](./devapp.md))。 diff --git a/skills/multi/dingtalk-misc/references/profile.md b/skills/multi/dingtalk-misc/references/profile.md index 4939189a2..02e774f42 100644 --- a/skills/multi/dingtalk-misc/references/profile.md +++ b/skills/multi/dingtalk-misc/references/profile.md @@ -1,7 +1,5 @@ # 多组织 / profile -> 🧪 **EXPERIMENTAL** — 接口、命名或跨 skill 引用可能调整;以当前 `dws` 二进制与 leaf Schema 为准。问题请提 issue。 -> > 本文件为 `dingtalk-misc` 内多组织 / profile 产品入口。命令前缀:`dws profile` / `dws auth` / 全局 `--profile`。 dws 可同时登录多个钉钉账号,同一组织也可保留多个账号。一个 profile = 一个 `corpId + userId` 身份;当前 profile 决定本次命令注入哪个身份。 diff --git a/skills/multi/dingtalk-misc/references/skill.md b/skills/multi/dingtalk-misc/references/skill.md index e32b07f85..d42e4355b 100644 --- a/skills/multi/dingtalk-misc/references/skill.md +++ b/skills/multi/dingtalk-misc/references/skill.md @@ -1,7 +1,5 @@ # skill — DWS 技能管理 -> 🧪 **EXPERIMENTAL** — 接口、命名或跨 skill 引用可能调整;以当前 `dws` 二进制与 leaf Schema 为准。问题请提 issue。 -> > 这是元能力:只管理 dws 平台上的技能资源。Distinct from `dingtalk-shared`(钉钉产品路由入口)、其他 `dingtalk-*` 产品 skill(执行具体业务能力)、本地 Codex skill 开发。命令前缀:`dws skill`。 ## 意图表