Product Requirements Document · dsh 插件

dsh-multi-user
DeepSeek Harness 多用户插件需求文档

在一台 DeepSeek Harness(dsh)上,为多个用户提供独立的登录、工作区与插件环境,模型与凭据由主管理员统一管控。

版本 v0.1 草案 日期 2026-08-17 文档类型 插件 PRD(基于生态调研) 目标平台 dsh Web(127.0.0.1:3080)
dsh-multi-user 推荐仓库名 · 已核验未被占用(2026-08-17)· GitHub topic:dsh-plugin / multi-user

1需求背景

DeepSeek 于 2026 年 8 月 13 日开源了 agent 运行时 DeepSeek Harness(dsh),其核心主张是"一切皆插件":模型、工具、会话存储、沙箱、调度循环乃至 Web 界面全部以插件形式挂载在 Cordis 内核上,注册即可逆、热插拔、无需修改框架源码[1][2]。项目上线数日即获得超过 12 万 Star,围绕 dsh-plugin GitHub topic 已形成 5700+ 插件仓库的生态[3]。

dsh 的典型运行形态是一台主机上的个人服务:执行 npx @deepseek-ai/dsh web 后在浏览器打开 127.0.0.1:3080,选择工作区目录、配置模型 API Key 即可使用[4]。所有个人状态集中存放在 $DSH_HOME(默认 ~/.dsh)下:各 profile 的插件组合清单、settings.yaml 配置,以及写入 .credentials.yaml 的模型凭据(页面只能看到脱敏描述符)[12]。这是一套明确面向单人的设计——官方社区对"团队怎么共用 dsh"的答复是"共享 profile,不共享凭据",即仍然各起各的服务[12]。

但共用一台 dsh 的需求真实存在,而且没有一个现成方案能接住:

生态调研(见第 2 章)确认:现有插件覆盖了提供商登录、账号池、插件市场、用量统计等方向,但没有一款插件做"多用户"——登录墙、按用户隔离的工作区与插件、模型配置权限分级、按用户用量统计这四件事都是空白(生态外仅有一个独立网关形态的多用户方案,非插件[14])。本插件即为此空白而生。

2生态调研与功能综合

2.1调研范围

调研覆盖三层数据源:dsh 官方仓库与文档(P0)、GitHub dsh-plugin topic 与 awesome 清单(P1)、插件目录站 dsh-plugins.top 于 2026-08-17 的快照(收录 307 款精选插件、10 个分类、共 23772 Star,全量生态 1000+ 收录)[3][5]。筛选标准:与"多用户、登录鉴权、隔离、账号与凭据管理、插件管理"直接相关的插件,逐个阅读其 README 提取功能与设计模式。

2.2相关插件盘点

类别代表插件核心功能对本插件的借鉴
提供商登录鉴权 dsh-AuthInOne[6] 9 家 Provider 的 OAuth / 设备流登录(OpenAI Codex、Kimi、xAI、Anthropic 等)、API Key 与自定义 OpenAI 兼容提供商管理、默认模型切换、token/成本统计 登录事务模型(start / redacted status / cancel / refresh / logout);凭证只存 Host 侧、浏览器仅获脱敏状态;自包含安装器 + 同端口替换重启;卸载自动还原官方组件
账号池 dockyard-dsh[7] macOS 原生账号池:扫描导入本机已有登录态,manual / sticky-session / round-robin / failover 调度策略,实时模型目录与额度窗口 多凭据统一持有、按策略分发的思路;但它是"多人共用多个提供商账号",不是"多用户各用各的环境"
多用户网关先例 dsh-server-deployment[14](曾用名 dsh-multi-user-gateway) DSH Web 的多用户网关:在 dsh 之外部署一层网关做多人接入 证明"多人共用一台 dsh"需求真实存在;但它是外部网关形态,本插件以无侵入插件形态在 dsh 内部实现,安装与还原体验完全不同
插件管理 dsh-web-plugin-manager[8]、dsh-plugin-hub、dsh-market Web UI 内查看、实时启停、安装卸载、更新检测、健康检查(依赖 / 冲突 / 兼容性分析)、环境管理、内置插件市场 插件级控制面板的交互范式;健康检查中的依赖冲突分析可用于"给子用户分配插件"时的依赖提示
配置安全 dsh-undo-plugin[9] 配置与插件代码变更撤销、脱敏快照、一键安全模式、DSH 无法启动时仍可用的离线 CLI/GUI 变更前快照 + 一键回滚机制,直接用于本插件"启用 / 卸载"的可逆性保障
用量统计 dsh-usage-stats[10]、dsh-cost-meter token 热力图、按模型分解、账户余额、会话费用与预算显示 多租户天然要求按用户统计与配额——将"按模型"维度扩展出"按用户"维度(列入 FR-7)
Agent 团队 dsh-agent-teams[11] 给子 Agent 增加队长 / 成员 / 任务依赖 / 活动面板 负样本:命名与定位上须与"用户团队"明确切割,避免被误认为同类插件
harness 级登录先例 deepseek-helmsman[13] pi harness 的 fork,DeepSeek-only 终端 agent,/login 输入 API Key,凭据存本地 auth.json 证明"登录态"可以放进 harness 层;但它是 fork 且仍是单用户,本插件以无侵入插件形态实现同等能力

2.3空白点分析

把上述插件的能力放到"多租户"的四个核心诉求下检视,结论是全部落空:

多租户诉求现有最接近的方案差距
登录墙与用户身份dsh-AuthInOne(提供商 OAuth 登录)登录对象是"模型提供商账号",不是"使用 dsh 的人";无本地用户体系
工作区 / 会话按人隔离无(dsh 工作区为目录级全局列表)所有访客看到同一个工作区与会话列表
插件按人可见dsh-web-plugin-manager(启停管理)启停是 profile 级全局开关,影响所有人,无按用户过滤
模型配置权限分级无(设置页对所有人开放)任何访客可增删提供商、更换默认模型、看到 Key 脱敏信息
调研结论
"一切皆插件"的架构恰好给了本插件完整的落点:登录墙可以作为一个 UI 层插件挂载,工作区列表、插件可见性、模型设置页均可通过插件扩展点替换或过滤,而无需修改 dsh 内核——AuthInOne 已经验证了"替换设置页组件、卸载时还原官方组件"这条路是可行的[6]。

3产品定位与命名

一句话定位:dsh-multi-user 把一台个人 dsh 变成一台多人可用的 dsh——登录才可进入,每人有自己的工作区、会话与插件,模型与凭据只有主管理员能动。

命名分析

生态内的检索路径决定了命名策略:用户在 GitHub 搜 dsh-plugin topic、在目录站按关键词(Web、Agent、工具、安全……)浏览[5],插件名的功能词直接决定被发现的概率。现有命名规律是 dsh-<功能词>(dsh-web-ui、dsh-cost-meter、dsh-notification)。候选评估如下:

候选名优点风险结论
dsh-multi-user最直白,任何背景的人一眼可懂;dsh- 前缀锚定生态检索,multi-user 是覆盖面最广的功能词;已核验 GitHub 无同名仓库(2026-08-17),仅存在名称不同的相近方案[14]"multi-user" 裸词在 GitHub 噪声大,但配合 dsh- 前缀与 topics 后检索精度可控推荐
dsh-multiuser合成词写法,含义相同,撞名概率更低可读性略逊于带连字符写法备选
dsh-tenancy行业术语 tenancy(租户制),偏 B2B 语境,独特性高对非企业背景用户不直观备选
dsh-multi-tenant术语准确名称已被其他仓库占用(用户反馈,2026-08-17)放弃
dsh-team / dsh-team-space好记与 dsh-agent-teams(子 Agent 团队)[11]强烈撞名,会被误认放弃

配套的仓库呈现(让 GitHub 首屏即可读懂):

4角色与总体架构

4.1角色与术语

术语定义
主管理员(Owner)启用插件时绑定的第一个用户,是原 dsh 个人配置的继承者。全插件周期内唯一可配置模型与凭据、管理子用户、管理插件安装的角色。
子用户(Member)由主管理员创建的普通用户,登录后进入自己的隔离环境:只见自己的工作区、会话与被授权的插件。
租户环境一个用户名下的工作区集合、会话存储、插件可见集与个性化设置的总和。
未启用态插件安装但未开启的状态,此状态下 dsh 行为与未安装时完全一致。

4.2权限矩阵

能力主管理员子用户
配置模型提供商与 API Key可不可(只读可见可用模型清单)
选择会话内使用的模型可(全部)可(限管理员开放的模型集合)
安装 / 卸载插件可不可
启用插件可(全部)可(仅被授权的插件)
工作区全部 + 目录授权管理仅自己被授权的目录
会话与历史记录全部仅自己的
子用户管理(创建 / 停用 / 插件授权)可不可
登录方式与认证接口配置可不可
查看用量统计全部用户仅自己

4.3总体架构

唯一可写 用户 A 主管理员 用户 B 子用户 用户 C 子用户 外部认证接口 管理员在设置中配置 内置用户库 开箱默认 登录页 未登录一律重定向 认证适配器 四种登录方式 会话与身份 HttpOnly 会话 可见性路由层 工作区 · 会话 · 插件 按用户过滤 租户环境 A 工作区·插件集 租户环境 B 互相不可见 租户环境 C 互相不可见 模型与凭据配置 仅主管理员可写 dsh 内核(Cordis) 官方能力零修改
图 1:dsh-multi-user 分层架构。登录与可见性过滤全部通过插件扩展点实现,dsh 内核与官方组件零修改。
三条不可妥协的设计原则
  1. 无侵入:只通过 dsh 插件扩展点注册能力,不 patch 内核、不改官方源码;未启用态行为与原版逐位一致。
  2. 可逆:启用前快照个人配置;停用保留数据;卸载自动还原原 dsh 个人配置(对齐 dsh "所有注册皆可逆"的内核承诺[2]与 AuthInOne 的卸载还原先例[6])。
  3. 凭证不降级:模型 API Key 等敏感凭据仍走 dsh 原生 Host 侧凭据体系,浏览器与子用户永远只见脱敏信息,权限收紧而不放松。

5功能需求详述

本章按六个功能模块展开,每个模块附可交互原型。原型用于确认交互逻辑,不代表最终视觉稿。优先级标注:P0 = 首个可用版本必须交付;P1 = 紧随其后的第一批增强。

FR-1插件生命周期与无侵入设计 P0

127.0.0.1:3080 · 设置 → 多用户(dsh-multi-user)
插件状态 未启用 主管理员:未设置
卸载行为

卸载插件将自动停用多用户功能并恢复原 dsh 个人配置(工作区、模型、会话回到启用前的全局默认视角);各子用户的租户数据默认保留在插件数据目录,可在卸载时勾选"同时彻底清除用户数据"。

多用户模式已启用,页面即将自动刷新…
刷新后未登录访问将重定向到登录页
可交互:点击"设置主管理员"填写后保存 → "启用"按钮激活 → 点击启用观察自动刷新流程 → 刷新后进入已启用态,可体验"停用"。
原型 1:设置页的多用户卡片。未设置主管理员时启用按钮不可点。

业务逻辑

安装(dsh plugin --profile web add …)完成后,插件处于未启用态:不注册登录路由、不替换任何官方组件,dsh 的启动配置树与安装前一致(可用 dsh web --dump-config 验证)。用户在设置页看到"多用户"卡片,卡片上明确提示启用前置条件——必须先设置主管理员:填写用户名、初始密码并选择一种初始登录方式。主管理员保存后,"启用"按钮方可点击;在此之前按钮置灰并附原因文案,避免出现"启用了却没有管理员能进去"的死锁。

点击启用后,插件做三件事:对当前 $DSH_HOME 的个人配置(模型提供商、默认工作区、既有会话归属)做一次快照并把它们绑定给主管理员;写入启用状态;触发页面自动刷新。刷新完成后,登录墙生效——此后任何未携带有效会话的访问都会被重定向到登录页,主管理员用刚才设置的账号登录后,看到的正是启用前自己的环境(模型、会话、工作区原样继承),实现了"单人无缝过渡为多人的管理员"。

停用是可逆操作:登录墙撤下、回到单用户视角(即主管理员视角成为全局默认),所有租户数据保留,再次启用无需重设。卸载则遵循还原承诺:插件通过官方 CLI 卸载时自动执行还原流程——若从未启用过,dsh 不受任何影响;若启用过,则把主管理员的环境恢复为全局默认配置,等同于回到安装前。子用户数据默认保留(目录可手动清理),卸载对话框中提供"同时彻底清除用户数据"选项。

状态转换

当前状态允许操作下一状态触发条件
已安装 · 未启用设置 / 修改主管理员已安装 · 未启用(管理员已设置)保存管理员表单且校验通过
未启用(管理员已设置)启用已启用点击启用 → 快照 → 自动刷新
已启用停用未启用(管理员与数据保留)管理员确认停用
任意状态卸载还原为原 dsh 个人配置执行插件卸载(未启用过则无任何影响)
设置主管理员(启用前置) 启用:快照 + 自动刷新 停用:数据保留 卸载 卸载(从未启用过,无影响) 已安装 · 未启用 行为与未安装时一致 已启用 登录墙与隔离生效 还原为原 dsh 个人配置 回到安装前的状态
图 2:插件生命周期状态机。

FR-2多方式登录 P0

127.0.0.1:3080 / login
可交互:四个页签均可试。账号密码:用户名非空且密码 ≥6 位即成功;验证码页签点击"获取验证码"进入 60s 倒计时,输入任意 6 位数字登录;微信页签点击"模拟手机扫码"走完 待扫码 → 已扫码 → 确认登录 三态。
原型 2:登录页。仅显示管理员已启用的登录方式,此处为全量演示。

业务逻辑

启用后,登录页成为 dsh Web 的唯一入口:任何未携带有效会话的页面访问(包括刷新、直达 URL、API 调用)一律重定向到 /login。页面上呈现的登录方式集合由管理员在 FR-3 中配置的启用项决定——只开账号密码就只显示一个页签,全部开启则显示四个,登录方式对用户是"被动可选集",不能自行增减。

四种方式的交互流程:账号密码为用户名 + 密码直接提交校验;邮箱与短信验证码均为"输入账号标识 → 获取验证码(按钮进入 60 秒倒计时防重发)→ 输入验证码提交";微信扫码展示二维码占位并轮询状态,依次经过待扫码 → 已扫码待确认 → 确认登录三态,二维码有效期 2 分钟,过期可手动刷新。任一方式登录成功后建立会话(HttpOnly Cookie,有效期可配,默认 7 天),根据账号解析出的用户身份进入对应租户环境;主管理员账号登录则进入管理员视角。

边界与异常

FR-3认证方式可配置:接口与参数 P0

127.0.0.1:3080 · 设置 → 多租户 → 登录方式
账号密码 已启用 · 外部接口模式
邮箱验证码 已启用 · 外部接口模式
微信扫码 未启用
短信验证码 未启用
可交互:点卡片头展开 / 收起配置;拨动开关切换启用状态;"测试连接"模拟探测结果。此页仅主管理员可见。
原型 3:登录方式配置页。每种方式独立开关 + 独立接口参数组。

业务逻辑

本模块回答"每种登录方式调什么接口、带什么参数"。设计为双模式:内置模式开箱即用,插件自带本地用户库,账号密码本地校验,验证码由插件配置的发送通道(SMTP 参数 / 短信服务商 API)发出,适合没有任何账号体系的个人与小团队;外部接口模式面向已有账号体系的部署者(公司统一认证、自建用户服务),每种登录方式的每个动作都映射到一个可配置的 HTTP 接口,插件按字段映射组装请求、解析响应。

每种方式的配置项由"动作 → 接口 → 参数"三元组构成。账号密码只需一个校验接口(URL、方法、用户名/密码字段名、成功判定表达式、用户标识取值路径);邮箱与短信各需"发送 + 校验"两个接口并共享字段映射;微信扫码需 AppID / AppSecret(走官方开放平台),或在有自建微信网关时覆盖二维码获取与轮询两个接口。所有接口配置含超时(默认 5 秒)与失败重试次数(默认 0 次)。保存时插件对配置做连通性校验("测试连接"发送探测请求),通过后方可保存并即时生效,无需重启。

字段规则

字段类型必填约束默认
方式启用开关布尔是至少启用一种方式,否则保存被拒账号密码开,其余关
模式枚举是内置 / 外部接口内置
接口 URL文本外部模式必填合法 http(s) URL空
请求方法枚举外部模式必填GET / POSTPOST
字段映射键值对外部模式必填键为插件标准参数名,值为目标接口字段名预填常用名
成功判定表达式文本外部模式必填对响应 JSON 的取值/比较表达式data.ok == true
超时数字否1–30 秒5
安全约束
外部接口模式的探测与调用均从 Host 侧发起;接口返回的用户标识仅用于匹配本地租户,插件不在日志与前端落盘明文密码或验证码;AppSecret、API Key 类配置项保存后界面仅显示掩码。

FR-4工作区与会话隔离 P0

127.0.0.1:3080 · 切换用户观察隔离效果
我的工作区
我的插件
其他
可交互:点击顶部用户切换,观察左右两栏(工作区 / 插件 / 会话数 / 可用模型)随之整体变化。
原型 4:三个用户的租户环境对比。每个用户进来看到的工作区与插件互不相同。

业务逻辑

隔离的落点是 dsh 的两个全局列表:工作区列表与会话历史。启用后,这两份列表按登录身份过滤——每个租户环境持有独立的工作区授权集合与会话存储命名空间,用户 A 的工作区目录、会话记录、附件与运行轨迹对用户 B 完全不可见,反之亦然。主管理员额外持有全部工作区的可见性与目录授权管理权。

工作区采用授权制而非自由浏览制:新用户默认没有任何工作区,主管理员在用户管理页为其授权一个或多个主机目录(或在该用户租户目录下新建空工作区),用户登录后只能在授权集合内选择与切换。会话内文件操作沿用 dsh 原生沙箱(workspace-write 限制在当前工作区内[2]),插件不改变沙箱行为,只在入口层收敛"哪些目录可以成为工作区"。会话数据按用户命名空间分目录存储,登录后 dsh 原生的会话恢复、历史列表、轨迹回放功能照常工作,只是数据源被限定为本命名空间。

边界与例外

FR-5插件可见性与子用户默认插件 P0

127.0.0.1:3080 · 用户管理 → 新建子用户
子用户列表
新建子用户
可交互:点击"新建子用户"打开弹窗,尝试勾选 dsh-vision-router(会自动带出依赖 modlens 的提示),创建后用户追加进列表。
原型 5:新建子用户时指定默认开放插件。依赖检查借鉴插件管理器的健康检查思路。

业务逻辑

插件的安装与可见是两件事:安装由主管理员全局操作(沿用 dsh 官方 CLI 或插件市场),安装后的插件进入"可分配池";可见性按用户授予——每个子用户持有一个被授权插件集合,dsh 界面的插件列表、插件设置页、会话内插件能力均按该集合过滤,未授权插件对该用户等于不存在。主管理员默认可见全部已安装插件。

新建子用户时指定默认开放插件是本模块的核心交互:创建表单中列出可分配池,管理员勾选该用户初始可用的插件;勾选存在依赖的插件时(例:视觉类插件依赖模型工具插件),界面自动带出依赖提示并可一键连选依赖项——依赖关系数据来自插件清单,校验思路对齐 dsh-web-plugin-manager 的依赖 / 冲突分析[8]。存量用户的插件授权可随时增删,调整即时生效(用户下次加载页面即更新,进行中的会话不受影响直到其结束)。

子用户不能安装、卸载或更新插件,也不能看到"未分配给自己"的插件条目;插件市场类页面(若管理员安装了市场插件)对子用户同样按授权过滤展示与操作。全局插件启停(影响所有人的操作)仅管理员面板可见。

FR-6模型配置权限 P0

127.0.0.1:3080 · 设置 → 模型(两种视角)
DeepSeek 官方 API已连接
sk-*****************************3f9a · 默认模型 DeepSeek-V4-Pro
OpenAI 兼容 · 自定义网关已连接
sk-*****************************7c02 · 默认模型 glm-5-air
Kimi Code(AuthInOne 登录)实验性
OAuth 凭据 · 刷新于 2 小时前
可交互:切换顶部视角。管理员视角可增删改提供商;子用户视角无任何 Key 信息与编辑入口,只能选择默认模型。
原型 6:模型设置页的权限分视角渲染。

业务逻辑

模型提供商、API Key、OAuth 登录、Base URL 与模型映射这些配置的写权限收敛到主管理员一人:设置 → 模型页对子用户渲染为只读视图。管理员可进一步指定"对全员开放的模型集合"(按提供商或按具体模型粒度),子用户在该集合内选择自己的默认模型与会话内模型(dsh 原生的会话级模型选择器保留,但选项被限定在开放集合内);集合外的提供商在子用户视角显示"未对你开放"或不显示,两种展示策略由管理员设置决定。

凭据可见性遵循"只紧不松"原则:dsh 原生设计中页面本就只能拿到 Key 的脱敏描述符、真实凭据存于 Host 侧 .credentials.yaml[12];本插件进一步把脱敏描述符也从子用户界面移除。子用户的任何请求由 Host 按管理员配置的提供商路由,全程不接触凭据材料。管理员在用户维度可设置"默认模型",新建用户时沿用,用户可自行覆盖(若管理员未锁定)。

FR-7综合增强能力(吸收现有插件功能)P1

以下能力不是多租户的必要条件,但都是调研中已被验证的高价值功能,在多租户语境下价值放大,规划为首个可用版本之后的第二批交付:

能力借鉴来源多租户下的增量价值
按用户用量统计与成本分账dsh-usage-stats[10] / dsh-cost-meter把 token 热力图、费用统计从"按模型"扩展出"按用户"维度:管理员看全员,用户看自己;共享一个 API Key 的成本第一次可以算清归属
用户配额与限速(生态空白,配额语义源自多租户刚需)按用户设日 / 月 token 或请求次数上限,超额提醒或限流,防止个别用户吃光共享额度
插件依赖与冲突检查dsh-web-plugin-manager[8]在给子用户分配插件时即时校验依赖完整性与版本冲突,分配面板内置健康检查
配置快照与一键回滚dsh-undo-plugin[9]每次启用 / 停用 / 升级前自动快照多租户配置,出问题一键回到上一个已知良好状态
操作审计日志(多租户合规刚需)记录登录、授权变更、插件分配、模型配置修改的操作者与时间,供管理员回溯"谁改了什么"

6安全与数据边界

7数据存储设计

存储设计遵循三条约束:零外部依赖(不引入 MySQL / Redis 等外部服务,NAS 与家用服务器开箱可用)、自包含可备份(一个数据目录打包即完整备份)、命名空间映射而非复制(会话历史等大体积数据仍存 dsh 原生存储,插件只维护映射)。首个可用版本以带原子写入的 JSON 文件为载体;P1 起引入嵌入式 SQLite(单文件,仍无服务依赖)承载用量与审计的聚合查询。

7.1目录布局

所有插件数据集中落在 $DSH_HOME 下的插件数据目录,与 dsh 原生文件(profiles、settings.yaml、.credentials.yaml)物理分离,互不污染:

$DSH_HOME/ └─ plugins-data/dsh-multi-user/ ├─ settings.json # 插件级配置:启用状态、主管理员绑定、登录方式开关、开放模型集合 ├─ users.json # 用户库:用户 ID、角色、认证方式绑定、加盐口令哈希、状态 ├─ sessions.json # 活动会话表:会话令牌哈希 → 用户 ID、过期时间 ├─ tenants/ │ └─ u_8f3a…/ # 每用户一个租户目录(以内部 ID 命名,重命名用户不受影响) │ ├─ grants.json # 工作区目录授权、插件可见集、模型选择集 │ ├─ preferences.json # 默认模型等个性化设置 │ ├─ sessions/ # dsh 会话历史命名空间(映射原生存储,见 7.3) │ └─ usage.jsonl # 用量流水(追加写,FR-7 按用户分账的数据源) ├─ audit.jsonl # 全局审计日志:登录、授权变更、插件分配、模型配置修改 └─ snapshots/ # 启用 / 停用 / 升级前的配置快照(对齐 undo 机制[9])

7.2数据分类与职责

数据类别载体写入方生命周期
插件配置settings.json仅 Host 进程(管理员操作)停用保留;卸载时随数据目录按 FR-1 处置
用户账户与口令哈希users.json仅 Host 进程(管理员操作)删除用户后条目匿名化保留(供审计追溯),不留口令哈希
登录会话sessions.jsonHost(认证适配器)登出或过期即删除;停用时全量失效
授权与偏好grants.json / preferences.jsonHost(管理员授权;用户改自己的偏好)停用保留;卸载时随租户目录处置
会话历史与附件dsh 原生会话存储 + 命名空间映射dsh 原生机制不复制、不迁移;卸载后原生数据完整可读
用量流水usage.jsonl(P1 起 SQLite 聚合)Host 代理层自动追加明细默认保留 180 天(可配);聚合视图可由流水重建
审计日志audit.jsonlHost 自动追加默认保留 365 天(可配),按大小轮转
模型凭据dsh 原生 .credentials.yaml仅主管理员经原生体系不落本插件——与插件数据目录完全隔离,卸载不受影响

7.3存储原则

8兼容与性能约束