feat(dsh-sdk): launcher telemetry reporting around every command

Wrap runDshSdkCommand so each command times itself and, in a finally block,
resolves consent (option A) and sends one best-effort, fire-and-forget telemetry
event (redacted cordis.yml + package.json content; never reads .env). Never
affects the command's exit code. Adds dsh-scripts -> dsh-telemetry dependency.
Default-on via absent consent entry; opt-out by a disabled telemetry entry.
The config/create wizard opt-out toggle is deferred (see design doc).
This commit is contained in:
imccyu
2026-07-17 20:28:31 +08:00
parent ca7533880e
commit 560ce3b539
7 changed files with 132 additions and 1 deletions

View File

@@ -133,6 +133,9 @@ SDK 初版(`packages/sdk/*`)已经落地三个包:
- **endpoint**:内置在代码里。
- **consent 承载**:遥测作为 `create` 时默认打开的 feature 写进 cordis.yml对用户可见、随项目
> **接线现状(读码修正)**launcher 上报已接通——`runDshSdkCommand` 计时包住每条命令,`finally` 里 resolve consent→ 建 redacted payloadcordis.yml+package.json 全文、不读 .env→ fire-and-forget 上报 + flushbest-effort 永不影响命令结果。**默认开**:无遥测条目 → 甲 → 上报。**opt-out 现状**:在 cordis.yml 手动加一条 `disabled` 的 `@deepseek-ai/dsh-telemetry` 条目即关(`ConsentResolver` 读到 disabled → 不报disabled 条目 cordis 不加载,故不会因"它不是运行时插件"而 boot 失败)。
> **暂缓(催表 opt-out 开关)**:把"关遥测"做成 config/create 向导里的勾选项还没做。关键约束:`@deepseek-ai/dsh-telemetry` 是 **launcher 库、不是 cordis 运行时插件**,所以 consent 条目只能以 **disabled 形态**存在enabled=无条目=甲默认报;要关才写 disabled 条目),不能像普通 feature 那样挂一个 enabled 的可 boot 条目。向导化这个"只在关闭时才出现条目"的特殊语义留作后续。
**在案取舍**:发全文会把第三方(含私有 scoped包名、cordis 配置值base-url/路径)暴露给 endpoint 持有方主流工具都不发这些Turbo 排除包名、Angular 禁模块名。ccyu 作为本 SDK 维护者接受此暴露——目的即掌握开发者用了哪些 plugin/依赖/配置。
### 4.4 交互测试(#4