
人工智能AI AgentAgent 框架DeepSeek【免费下载链接】deepseek-harnessDeepSeek Harness: Everything is a Plugin.项目地址https://gitcode.com/gh_mirrors/de/deepseek-harness点击查看免费下载本文依据 DeepSeek Harness 仓库中已归档的技术决策记录 2026-08-13-remove-first-run-beta-notice.md 展开。该决策讲述了产品发布前的一次关键产品简化从打包产物中彻底移除 GUI 首次启动时的全视口内测声明及其遥测上传引导文案同时保留底层设置缝合点为后续以共享模态框形式恢复的版本化测试阶段通知铺路。读者读完后将掌握DSH_TELEMETRY_MODE遥测开关的完整语义、settings.onboarding与ui-onboarding两个持久化/UI 缝合点的设计原则以及如何在保持既有设置文档有效的前提下安全地删除或恢复首次启动引导界面。一、背景首次启动时的全视口内测声明在本次决策实施之前DeepSeek Harness 的每个 GUI 首次启动都会打开一个占满整个视口的内部测试声明内测声明页面。这个页面的内容由两部分构成内部测试框架文案向用户说明当前产品处于内测阶段遥测引导说明告知用户如何通过环境变量DSH_TELEMETRY_MODE启用 Session Log会话日志上传。这一设计在当时已经失去了存在意义。依据同期归档的决策 2026-08-10-telemetry-default-off.md会话遥测SessionTelemetryBackend在模式mode未设置时已经解析为DISABLED——即默认不发送任何遥测数据。换句话说这个全视口声明中唯一真正具有操作性的引导内容只剩下一段教用户如何主动打开遥测的说明。更根本的问题是产品边界内测框架文案本身绝不能出现在发布release构建中。一个面向正式发布的构建不应该在首次启动时向用户呈现这是内部测试的声明。无论文案如何措辞这个全视口插页的框架性语义都与发布产品的定位冲突。二、决策移除而非改写面对上述问题团队做出的决策是从装配好的产品中彻底移除首次运行通知而不是重新措辞保留。理由很清晰——在发布构建中呈现内测框架本身就是违规行为而一个没有实质性内容的强制首启插页只会给用户带来纯粹的摩擦friction。2.1 被删除的部分决策明确列出了被移除的具体实现要素通知组件notice component渲染全视口内测声明的 UI 组件确认存储acknowledgement store记录用户是否已确认该声明的状态存储文案所有者copy owner持有通知文案的模块本地化键locale keys通知文案对应的多语言键值。这些要素随本决策一起从装配产物中删除。ui-settings-general包没有为settings.onboarding安置任何步骤事实上该步骤在原始设计中就不存在于此包中后被ui-settings-models承担详见下文。2.2 被刻意保留的部分ui-onboarding 命名空间与删除动作形成鲜明对比的是Host 端保留了ui-onboarding设置命名空间的注册。这一点至关重要因为已存储的用户设置文档settings.yaml中已经包含ui-onboarding这一 section设置缝合点settings seam会针对已注册的命名空间校验已存储文档如果同时取消注册该命名空间所有已存在的设置文档都会因校验失败而失效。保留注册是一个零成本操作却能让所有存量用户文档保持有效。这一决策体现了设置系统设计中向后兼容优先的核心原则删除一个 UI 特性不等于破坏用户已有的持久化数据。对应实现位于 packages/client/ui-settings-general/src/index.ts其中apply函数在存在 settings provider 时注册ui-onboarding命名空间并绑定welcomeNoticeVersion: z.string()的 schema。三、遥测开关的源码级语义DSH_TELEMETRY_MODE 与硬性关闭开关本次移除的遥测引导文案之所以可以安全删除前提是遥测系统本身已经有了清晰的默认关闭语义。这一部分在 2026-08-10-telemetry-default-off.md 中完整记录并在当前仓库源码中落地。3.1 模式解析未设置即 DISABLED后被 feedback-gated 默认取代会话遥测后端 packages/session/session-telemetry-otel/src/index.ts 定义了模式枚举export enum SessionTelemetryMode { FEEDBACK_ONLY FEEDBACK_ONLY, DISABLED DISABLED, } export const DEFAULT_TELEMETRY_MODE SessionTelemetryMode.FEEDBACK_ONLY从源码可以看出当前仓库的默认模式已经是FEEDBACK_ONLY该默认值由 2026-08-25 的 feedback-gated 默认决策确立更早的 telemetry-default-off 决策曾将未设置模式解析为DISABLED。在DISABLED分支src/index.ts中后端不构造任何 OTel provider、processor 或 exporter只监听session/event在用户提交反馈时以日志警告形式告知反馈未通过 OpenTelemetry 上传所有数据停留在本地会话日志中。resolveModesrc/index.ts对运行时未知值采取**失败关闭fail-closed**策略任何不在枚举中的值都会被assertNever直接抛出防止绕过模式校验。3.2 硬性关闭开关DSH_TELEMETRY_DISABLED除了模式枚举还存在一个权威的、在启动早期生效的硬性关闭开关。CLI 的 profile 启动流程 apps/cli/src/profile-boot.ts 将process.env.DSH_TELEMETRY_DISABLED注入 profile 上下文其行为由 apps/cli/tests/telemetry-switch.spec.ts 的测试用例完整锁定未设置或为空保留配置的遥测模式不产生任何补丁patch任意非空值包括1、0、false、no这类看似假值的字符串生成{ id: session-telemetry-otel, disabled: true }补丁直接禁用遥测行组合中没有遥测行开关平凡满足——没有遥测行就没有可禁用的对象同样不生成补丁。这意味着部署方可以用一个环境变量在任何配置层面强制关闭遥测且该开关的判定发生在 Cordis 树挂载之前具有最高权威性。3.3 部署立场显式的环境选择CLI 行为参考文档 apps/cli/reference/README.md 的 Shared deployment behavior 一节第 110-112 行记录了当前完整的部署立场基础 bundle 默认挂载 DeepSeek 会话日志上传以及 feedback-gated 的 OTel 上传DSH_TELEMETRY_MODEDISABLED禁用 OTel 投递FULL被拒绝FULL is rejected不是别名任何非空DSH_TELEMETRY_DISABLED都会禁用遥测行DSH_TELEMETRY_OTLP_URL用于选择 collector启用的导出可能包含完整会话内容消息文本、工具参数与结果、工作区路径部署方须自行负责脱敏规则。因此遥测 opt-in 始终是部署环境的显式选择而不是产品首次启动时向最终用户呈现的引导内容。这正是本次移除通知中遥测文案的底气所在产品不再需要教用户打开遥测因为是否打开是部署者的职责。四、settings.onboarding 缝合点与 ui-onboarding 命名空间的协作本次决策的另一个技术核心是缝合点seam概念的运用删除一个 UI 步骤不代表删除它所在的扩展点恢复时只需要在新的实现者中重新注册即可。4.1 移除阶段的缝合点状态在移除阶段settings.onboarding这个 UI 槽位slot没有被任何包安置步骤。ui-settings-general只负责注册ui-onboarding持久化命名空间见上文 2.2不负责任何首启 UI。这体现了持久化契约与呈现实现的分离命名空间属于数据平面onboarding 步骤属于 UI 平面二者可以独立演进。4.2 恢复阶段的重新注册后续决策 2026-08-13-shared-modal-product-onboarding.md 恢复了简洁的测试阶段通知但刻意选择了不同的呈现方式与文案并复用了同一个settings.onboarding缝合点和同一个持久化字段。当前实现位于 packages/client/ui-settings-models/src/client/index.tsctx.slots.inject(settings.onboarding, () ctx.slots.register({ name: settings.onboarding, id: welcome-notice, order: -100, inject: welcomeInjected, }, WelcomeNotice)) ctx.slots.inject(settings.onboarding, () ctx.slots.register({ name: settings.onboarding, id: deepseek-official, order: 0, inject: deepSeekOnboardingInjected, }, DeepSeekOnboardingDialog))两个步骤由同一个客户端 Cordis 插件ui-settings-models注册步骤槽位 IDorder职责版本化内测通知welcome-notice-100展示当前文案版本的测试阶段声明仅 Continue 确认DeepSeek 凭据引导deepseek-official0当且仅当无任何可用 provider 时引导输入官方 DeepSeek Key由于 shell 只挂载第一个未完成的条目两个对话框不会堆叠welcome-noticeorder 更小先出现用户确认后才轮到deepseek-official。4.3 版本化确认字段welcomeNoticeVersion通知的文案版本与持久化字段在 packages/client/ui-settings-models/src/onboarding-copy.ts 中定义export const WELCOME_NOTICE_SETTINGS_NAMESPACE ui-onboarding export const WELCOME_NOTICE_ACK_FIELD welcomeNoticeVersion export const WELCOME_NOTICE_VERSION 2026-08-13.1注释明确说明仅当通知发生实质性变化且需要所有用户重新确认时才应递增版本号且确认比较是精确相等exact equality。这样settings.yaml中持久化的welcomeNoticeVersion字段记录的是用户确认过的具体文案版本——这与移除决策中保留字段与后端契约的目标完全一致被恢复的通知复用了welcome-notice移除前就存在的字段没有引入新的持久化契约。确认写入逻辑位于 packages/client/ui-settings-models/src/client/welcome-store.tsloopback 浏览器通过 settings scope 将welcomeNoticeVersion写入 Host 持久化若写入失败或未持久化acknowledge()返回false并进入error状态界面显示the acknowledgement did not persist。4.4 远程浏览器的进程本地回退值得注意的是确认机制的双轨设计welcome-store.tsloopback 浏览器ui-onboarding命名空间可用确认通过 settings API 持久化到 Host非 loopback远程浏览器Client 在 Host 侧禁用设置持久化scope 处于 memory 模式确认只停留在进程本地刷新后通知会再次出现。这一设计保证了即使无法持久化也不会破坏 UI 流程——通知照常展示用户照常确认只是记得住的范围不同。4.5 共享模态框不静默完成强制引导恢复后的两个步骤共享同一个OnboardingModal组件packages/client/ui-settings-models/src/client/OnboardingModal.tsx。该组件有两个关键行为#rootinert挂载期间将应用根节点设为inert页面其余部分不可交互构成真正的模态阻塞忽略隐式关闭onClose被绑定为ignoreImplicitDismissEscape 键与遮罩点击不会静默完成强制 onboarding 步骤——每个步骤只暴露自己的显式操作按钮Continue / Save / Configure later。配套的通知组件 WelcomeNotice.tsx 只在未确认当前版本时渲染已确认acknowledged或仍在加载时返回null不占任何视觉空间。4.6 凭据步骤的细粒度判定deepseek-official步骤的状态机由onboardingReadiness驱动DeepSeekOnboardingDialog.tsxloading/adapter-absent/provider-ready/unavailable返回null并直接complete()——只要用户已经能用任何一个 provider就不再打扰credential-missing当且仅当官方 DeepSeek 引用可写且缺失时在共享模态框中渲染ProviderEditor的凭据专用模式credentialOnlycredentialRequiredautoFocusCredential。该编辑器验证 Key 后调用既有的credentials.set不修改任何 provider 设置密钥只以只写方式进入.credentials.yamlsettings.yaml永不携带密钥值。保存完成后重新controller.load()由刷新后的 readiness 决定是否继续。五、替代方案与拒绝理由原决策文档系统性地评估了三个替代方案每个都因具体的技术或产品理由被拒绝替代方案拒绝理由保留通知仅删除遥测段落内测框架文案本身是发布版绝不能呈现的内容删掉遥测段落后剩下的强制首启插页没有任何实质陈述纯粹是摩擦改为请求上传同意版本化同意步骤首启询问是否上传依然是遥测提示未来的同意流程应通过不变的settings.onboarding缝合点注册并使用全新的版本化字段做重新确认连同取消注册ui-onboarding命名空间已存储的设置文档已包含该 section设置缝合点按已注册命名空间校验存储文档保留注册让存量文档保持有效且零成本第三个替代方案尤其值得展开它揭示了设置系统的一个强约束——已注册命名空间是持久化文档合法性的依据。正因为ui-onboarding的注册被保留2026-08-13 恢复的测试阶段通知才能复用该字段与后端契约而无需任何 Host schema、API-proxy allowlist 或持久化实现的变更。六、影响与最终状态本次决策的最终影响可以概括为四点全视口内测声明及其遥测文案被彻底移除发布构建不再向首启用户呈现内测框架settings.onboarding缝合点与ui-onboarding命名空间保持存活为后续恢复提供了既有的注册位置与持久化字段恢复的通知是刻意不同的形态共享模态框先于内联凭据对话框出现远程场景也覆盖了进程本地确认welcomeNoticeVersion字段记录新文案版本2026-08-13.1历史遥测提示始终缺失恢复后的通知文案完全不涉及启用遥测上传——遥测 opt-in 作为部署环境选择只存在于 CLI 行为参考文档 apps/cli/reference/README.md 中。从实现验证角度看这一整套移除—保留—恢复闭环都有可运行测试背书遥测开关的补丁行为由 apps/cli/tests/telemetry-switch.spec.ts 覆盖通知组件与确认存储由ui-settings-models的浏览器测试覆盖OTel 后端的导出与禁用路径由 session-telemetry-otel/tests/otel.spec.ts 系列用例锁定。七、相关资源决策文档本次主题2026-08-13-remove-first-run-beta-notice.md遥测默认关闭决策2026-08-10-telemetry-default-off.md共享模态框引导恢复决策2026-08-13-shared-modal-product-onboarding.mdOTel 遥测后端实现与配置packages/session/session-telemetry-otel/src/index.ts、packages/session/session-telemetry-otel/README.md首启引导插件注册与实现packages/client/ui-settings-models/src/client/index.ts、onboarding-copy.ts、welcome-store.tsui-onboarding命名空间保留注册packages/client/ui-settings-general/src/index.ts遥测开关测试apps/cli/tests/telemetry-switch.spec.tsCLI 部署立场参考apps/cli/reference/README.md赞分享人工智能AI AgentAgent 框架DeepSeek【免费下载链接】deepseek-harnessDeepSeek Harness: Everything is a Plugin.项目地址https://gitcode.com/gh_mirrors/de/deepseek-harness点击查看免费下载相关推荐DeepSeek Harness 首次启动引导演进从全屏内测声明到共用弹窗产品引导DeepSeek Harness 首次启动引导演进从全屏内测声明到共用弹窗产品引导 本文基于 DeepSeek Harness 仓库中的存档决策笔记 2026人工智能AI AgentAgent 框架DeepSeekDeepSeek Harness TUI 无横幅启动设计移除启动横幅的决策、实现与测试验证DeepSeek Harness TUI 无横幅启动设计移除启动横幅的决策、实现与测试验证 本文基于仓库内 Agent Note 2026 07 21 tui人工智能AI AgentAgent 框架DeepSeekDeepSeek Harness 会话内容搜索默认关闭设计openAt 三阶段与 SESSION_QUERY_SEARCH_DISABLED 架构解析DeepSeek Harness 会话内容搜索默认关闭设计openAt 三阶段与 SESSION_QUERY_SEARCH_DISABLED 架构解析 Dee人工智能AI AgentAgent 框架DeepSeek创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考