# 更新日志

[英文](CHANGELOG.md) | 中文

**dsh-kingdee** 的所有关键版本演进记录均归档于此。格式遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/)，并严格遵循 [语义化版本规范](https://semver.org/lang/zh-CN/)。

---

## [0.14.0] - 2026-10-16

**适配 DeepSeek Harness 0.2.1-alpha.4，并修正许可证声明** —— 不改运行时逻辑、不改配置项、不改工具接口。

### 变更

- **宿主对齐**：`@deepseek-ai/dsh-*` 的全部开发依赖由 `0.2.1-alpha.2` 升至 `0.2.1-alpha.4`，锁文件按 `0.2.1-alpha.4` 重新生成；`@deepseek-ai/cordis` 保持 `^4.0.4`、`@deepseek-ai/schemastery` 保持 `^3.18.4`。
- **供应链闸门**：工作区文件现对 `0.2.1-alpha.4` 的各包豁免 pnpm 的最小发布年龄闸门 —— 否则 DSH 持续发布的预发行版会被拦下。此前的豁免名单还含有一个重复的 `minimumReleaseAgeExclude` 键，其过期的 `0.2.0-rc.2` 条目会让 pnpm 拒绝重新生成的锁文件；该名单现为单一且由锁文件推导的区块。
- **peer 区间不变**：仍为 `>=0.1.7-alpha.2 <0.3.0`，因此本版**不是**强制升级：`dsh-kingdee@0.13.0` 在 DeepSeek Harness 0.2.1-alpha.4 上同样被准入。
- **源码改动**：无。`src/`、`test/`、`scripts/`、`.github/`、`skills/`、`cordis.patch.yml` 与构建配置下均无文件改动，配置字段也没有任何迁移：插件行为与 0.13.0 完全一致。0.2.1-alpha.3 与 0.2.1-alpha.4 两个版本未改动本插件所消费的 `@deepseek-ai/dsh-web`、`@deepseek-ai/dsh-tools`、`@deepseek-ai/dsh-credentials` 或 `ctx.configForms.get()` 契约。

### 修复

- **两个语种的 README 许可证章节都与 LICENSE 文件矛盾。** `README.md` 与 `README.zh.md` 把本仓库描述为采用「专有许可证（保留所有权利）」，而 `LICENSE` 与 `package.json.license` 自 `0.5.0` 起一直是 MIT 许可证；GitHub 与 npm 对已发布包的识别结果也都是 `MIT`。两个 README 现均写明 MIT 并链接 LICENSE 文件。
- **更新日志从未记录许可证回退。** `0.2.0` 条目仍把专有授权描述为现行状态。该条目现标注该授权已被撤销，并在 `0.5.0` 条目中记录 MIT 的恢复，使版本历史与实际发布物一致。

### 验证

- `pnpm run typecheck` 零错误、`pnpm run build` 干净（`tsc -p tsconfig.build.json` 加 `tsdown` 客户端 bundle），**15** 项单元测试（`pnpm test`）在 DeepSeek Harness 0.2.1-alpha.4 上全部通过。
- `node scripts/check-docs-language.ts` 检查全部通过，零语言混淆或链接跳转错误。
- 未验证项：在真实 `0.2.1-alpha.4` profile 中的实际启动；以及一如既往，未做真实金蝶账套联调。

---

## [0.13.0] - 2026-10-11

**适配 DeepSeek Harness 0.2.1-alpha.2 与插件展示元数据规范** —— 规范展示资产、自包含 prepare 构建、纯 TypeScript 架构与最新命令行选项语法。

### 新增

- **展示元数据与专属图标**：内置原生 `icon.svg` 矢量图标与中英双语展示清单（`locale/en.json`、`locale/zh.json`），完全符合 DeepSeek Harness 0.2.1-alpha.2 插件管理器规范。在 `package.json` 中声明顶层 `icon` 字段（指向 `./icon.svg`），并规范导出 `./locale/*.json` 与 `./icon` 资源。
- **自包含构建脚本**：在 `package.json` 中配置 `prepare` 脚本（执行 `tsc -p tsconfig.build.json && tsdown`），支持直接通过 Git 仓库安装，不依赖宿主环境是否预装全局 `pnpm`。

### 变更

- **开发依赖对齐**：全部 `@deepseek-ai/dsh-*` 开发依赖由 `0.2.0-rc.2` 升级至 `0.2.1-alpha.2`；`@deepseek-ai/cordis` 保持 `^4.0.4`，`@deepseek-ai/schemastery` 保持 `^3.18.4`。
- **兼容性区间保持稳定**：peer 依赖区间保持 `>=0.1.7-alpha.2 <0.3.0`，因此 `0.12.0` 与 `0.11.1` 在 DeepSeek Harness 0.2.1-alpha.2 上同样受支持，本版本非强制升级。
- **纯 TypeScript 架构**：优化 `src/config.ts` 中 `Config` 架构导出类型声明，消除 TS2742 类型不可便携警告，全库保持 100% 纯 TypeScript。
- **规范化命令行选项**：更新各文档中的 CLI 命令，遵循 DeepSeek Harness 0.2.1-alpha.1 规范，统一将 `--profile <name>` 参数置于 `add`、`remove`、`update` 等子命令之前。

### 验证

- `pnpm run typecheck` 零错误、`pnpm run build` 构建干净，**15** 项单元测试（`pnpm test`）在 DeepSeek Harness 0.2.1-alpha.2 上全部通过。
- `node scripts/check-docs-language.ts` 检查全部通过，零语言混淆或链接跳转错误。

---

## [0.12.0] - 2026-09-29

**适配 DeepSeek Harness 0.2.0-rc.2** —— 不改运行时逻辑、不改配置项、不改工具接口。

### 变更

- **宿主对齐**：`@deepseek-ai/dsh-*` 的全部开发依赖由 `0.2.0-rc.1` 升至 `0.2.0-rc.2`，锁文件按 `0.2.0-rc.2` 重新生成；`@deepseek-ai/cordis` 保持 `^4.0.4`、`@deepseek-ai/schemastery` 保持 `^3.18.4`。
- **peer 区间不变**：仍为 `>=0.1.7-alpha.2 <0.3.0`，即 0.11.0 放宽后的区间，因此本版**不是**强制升级：`dsh-kingdee@0.11.1` 在 DeepSeek Harness 0.2.0-rc.2 上同样被准入。0.12.0 是已针对 0.2.0-rc.2 完成验证、并对齐其开发依赖的版本。
- **供应链闸门**：工作区文件现对 `0.2.0-rc.2` 的各包豁免 pnpm 的最小发布年龄闸门 —— 否则 DSH 持续发布的预发行版会被拦下。
- **源码改动**：无。`src/`、`test/`、`scripts/`、`.github/`、`skills/`、`cordis.patch.yml` 与构建配置下均无文件改动，配置字段也没有任何迁移：插件行为与 0.11.1 完全一致。

### 验证

- `pnpm run typecheck` 零错误、`pnpm run build` 干净（`tsc -p tsconfig.build.json` 加 `tsdown` 客户端 bundle），**15** 项单元测试（`pnpm test`）在 DeepSeek Harness 0.2.0-rc.2 上全部通过。
- 宿主自带的已发布实现 `evaluatePluginCompatibility` / `getDshRuntimeVersion`（来自 `@deepseek-ai/dsh-app-boot@0.2.0-rc.2`）报告运行时为 `0.2.0-rc.2`，在 `0.2.0-rc.2`、`0.2.0-rc.1`、`0.2.0`、`0.1.7-rc.2`、`0.1.7-alpha.2` 上均准入 `dsh-kingdee@0.12.0`；对 `0.1.6-alpha.2` 上的 `0.12.0` 则拒绝。更早的 `dsh-kingdee@0.10.0`（peer 为 `^0.1.7-alpha.2`）在 `0.2.0-rc.2` 上仍被拒绝。
- 未验证项：在真实 `0.2.0-rc.2` profile 中的实际启动（验证机器上没有 `dsh` CLI）；以及一如既往，未做真实金蝶账套联调。

---

## [0.11.1] - 2026-09-28

**纯文档修正版本** —— 不改运行时逻辑、不改配置、不改工具接口。

### 修复

- **英文 0.7.0 条目比中文单薄。** 缺少第三方 `LoginByAppSecret` 登录、`app` 模式取消伪造 `KDAuthentication` 请求头并新增 `userNameRef` 必填要求，以及曾导致真实账套认证失败的登录响应修复（`parseLoginOutcome`）。三项均已补齐。
- **中文 0.6.1 的分类标题与一条空泛条目。** `### 移除与代码精简` 改为 `### 移除`，与英文分类一致；末尾那条英文侧没有对应内容的填充条目已删除。
- **同一示例出现两个占位域名。** 配置指南用 `https://erp.mycompany.com/K3Cloud`，其他指南用 `https://erp.example.com/K3Cloud`；两侧现统一为 `erp.example.com`。
- **中文配置指南把凭据缝契约写成散文**，而英文为两条列表；中文侧现改为相同的两条列表。
- **中文安装指南漏列 `172.16.0.0/12`** 这一被拦截的私网网段。
- **中文指南的章节编号现与英文一致。** 安装与卸载指南的顶层章节原用中文数字，而英文用 `1.`–`5.`；两侧现统一编号，可逐节对齐。

### 验证

- `pnpm run typecheck` 零错误、`pnpm run build` 干净，**15** 项单元测试在 DeepSeek Harness 0.2.0-rc.1 上全部通过；`package.json` 仅版本号变化，peer 声明与已被闸门准入的 0.11.0 相同。
- `node scripts/check-docs-language.ts` 通过；另对全部双语文档做了两遍机械校对（结构与代码围栏对齐、乱码与控制字符扫描、更新日志由新到旧排序、链接引用覆盖、逐节条目对应）。

## [0.11.0] - 2026-09-28

**适配 DeepSeek Harness 0.2.0-rc.1，并放宽 peer 区间** —— 不改运行时逻辑、不改配置项、不改工具接口。

### 变更

- **宿主对齐**：开发依赖升级到 DeepSeek Harness 0.2.0-rc.1，并已针对该版本完成验证；`@deepseek-ai/cordis` 保持 `^4.0.4`、`@deepseek-ai/schemastery` 保持 `^3.18.4`。
- **peer 区间放宽为 `>=0.1.7-alpha.2 <0.3.0`**：DeepSeek Harness 0.2.0-rc.1 引入了硬性 peer 兼容性闸门 —— 在插件行加载之前，宿主会用唯一的运行时版本校验每一处名为 `@deepseek-ai/dsh` / `@deepseek-ai/dsh-*` 的 peer 依赖，预发行版参与区间匹配，不兼容的行会被拒绝。此前的 `^0.1.7-alpha.2` 区间不含 0.2.x，因此凭据与工具两个 peer 现放宽为可准入 `0.1.7-alpha.2` 至 `0.2.x`：插件在两条发布线上均可加载，但在 `0.1.6-alpha.2` 上仍会被拒绝。闸门读取的**不是** `engines.dsh`。
- **供应链闸门**：工作区文件现对 `0.2.0-rc.1` 的各包豁免 pnpm 的最小发布年龄闸门 —— 否则 DSH 持续发布的预发行版会被拦下；锁文件已按 `0.2.0-rc.1` 重新生成。
- **源码改动**：无。`src/`、`test/`、`scripts/`、`.github/`、`skills/`、`cordis.patch.yml` 与构建配置下均无文件改动，配置字段也没有任何迁移。

### 修复

- **0.10.0 在 DeepSeek Harness 0.2.0-rc.1 上会在加载阶段被拒绝**：它声明的 `@deepseek-ai/dsh-*` peer 区间不含 0.2.x，因此被新闸门拒绝。放宽区间后，插件无需豁免即可在 0.2.0-rc.1 上准入；各指南也已写明 0.2.0-rc.1 上的用户必须升级到 0.11.0。`dsh plugin allow-version <package@version> --dsh-version <runtime> --accept-risk` 仅作为记录在 profile `compatibility.json` 中的确切版本风险确认而存在 —— 插件升级与宿主升级都不会继承该授权。

### 验证

- 类型检查与构建均干净，15 项单元测试在 DeepSeek Harness 0.2.0-rc.1 上全部通过。
- `pnpm install` 通过 pnpm 的供应链闸门。
- 宿主自带的已发布实现 `evaluatePluginCompatibility` / `getDshRuntimeVersion`（来自 `@deepseek-ai/dsh-app-boot@0.2.0-rc.1`）报告运行时为 `0.2.0-rc.1`，在 `0.2.0-rc.1`、`0.2.0`、`0.1.7-rc.2`、`0.1.7-alpha.2` 上均准入 `dsh-kingdee@0.11.0`，并在 `0.2.0-rc.1` 上以 `@deepseek-ai/dsh-credentials`、`@deepseek-ai/dsh-tools`（`^0.1.7-alpha.2`）peer 不满足为由拒绝 `dsh-kingdee@0.10.0`；对 `0.1.6-alpha.2` 上的 `0.11.0` 同样拒绝。
- 实际打包的 0.11.0 压缩包含构建产物 `lib/`、`cordis.patch.yml`、`skills/kingdee-bos` 技能与中英双语指南，其清单即上述闸门所准入的那一份。
- 未验证项：在真实 `0.2.0-rc.1` profile 中的实际启动；以及一如既往，未做真实金蝶账套联调。

---

## [0.10.0] - 2026-09-24

**适配 DeepSeek Harness 0.1.7-rc.2** —— 不改运行时逻辑、不改配置项、不改工具接口。

### 变更

- **宿主对齐**：开发依赖升级到 DeepSeek Harness 0.1.7-rc.2，并已针对该版本完成验证。
- **peer 区间不变**：仍为 ^0.1.7-alpha.2，即引入易变配置的那条发布线，因此插件在 0.1.7-alpha.2 至 0.1.7-rc.2 的每一个预发行版上仍可安装。宿主引擎区间与 Node 引擎区间均未改动。
- **接缝核对**：本插件使用的全部接口在 rc.1 与 rc.2 源码中完全一致——Host 读取的配置 schema、按条目渲染的设置表单、工具注册、凭据解析，以及浏览器半端读取的配置表单、语言与槽位注册表。
- **源码改动**：无。本插件所消费的包中唯一变动的文件，只是给它并不使用的某个类型加了两个可选字段。
- **供应链闸门**：工作区文件现对 rc.2 的各包豁免 pnpm 的最小发布年龄闸门，否则 DSH 持续发布的预发行版会被拦下。

### 修复

- **一处中文条目对同一版本的覆盖深度低于英文。** 0.3.0 条目原先只有一行，而英文条目包含接缝说明、依赖升级与文档刷新三项内容；现已在中文侧对齐。中文文档列表也改为指向 CHANGELOG.zh.md，不再指向英文更新日志。

### 验证

- 类型检查与构建均干净，15 项单元测试在 DeepSeek Harness 0.1.7-rc.2 上全部通过。
- 冻结锁文件安装通过 pnpm 的供应链策略校验。
- 声明的 peer 依赖经宿主自带的兼容性校验在 rc.2、rc.1、alpha.2 上均准入，无需豁免。
- 实际发布的 0.10.0 压缩包可装入真实的 0.1.7-rc.2 profile，并以行 id kingdee 组合出 dsh-kingdee 图层，各项 schema 默认值均已生效。

---

## [0.9.1] - 2026-09-23

**文档与仓库工程化修补版本** —— 不改运行时逻辑、不改配置项、不改工具接口。

### 变更

- **仓库现只保留 TypeScript 源码**：双语文档闸门由 `scripts/check-docs-language.mjs` 迁至 `scripts/check-docs-language.ts`。Node ≥22.19 会剥离类型，因此该闸门依旧无需安装任何依赖即可运行，CI 中也仍在安装依赖之前执行。`tsconfig.json` 的 include 新增 `scripts/**/*.ts`，`pnpm run typecheck` 会一并检查该闸门；`.gitattributes` 同时移除了针对 JavaScript 的换行规则。

### 修复

- **更新日志正文丢失**：英文更新日志的 0.4.0、0.3.0、0.2.3、0.2.2 四个版本只剩空标题，0.1.0 的 `Documentation` 条目同样被截断。现全部恢复，且中文 0.1.0 条目已补齐到与英文同等的详略程度。
- **配置文档章节编号错乱**：该文档出现过两个 `## 3.` 章节，且 `2.1` / `2.2` 两个子节挂在错误的父节之下。现编号为 1–6，子节为 3.1 / 3.2，并已把「第 5 节」的交叉引用改指重编号后的 V9.1 符合性章节。
- **清单顺序**：README 工具表现与 USAGE 的逐工具参考章节顺序保持一致；文档列表补上了此前遗漏的配置文档。
- **重复分隔线与标题层级**：移除中文更新日志中 6 处重复的 `---`；两侧现逐版本使用一致的标题层级，并各自补齐了此前缺失的链接定义块。

### 验证

- `pnpm run typecheck` 零错误（现覆盖 `scripts/`）、构建干净（`tsc` + `tsdown`）、**15** 项单元测试在 DeepSeek Harness `0.1.7-rc.1` 上全部通过。
- `node scripts/check-docs-language.ts` 通过；发现上述缺陷的文档审计已无剩余发现。

---

## [0.9.0] - 2026-09-23

**适配 DeepSeek Harness 0.1.7-rc.1：schema 驱动的易变配置**

### 变更

- **宿主对齐**：开发依赖锁定至 DeepSeek Harness `0.1.7-rc.1`（最新发行版），并已针对该版本完成验证。`@deepseek-ai/dsh-*` peer 区间为 `^0.1.7-alpha.2`——即引入易变配置的那条发布线——因此插件在 `0.1.7-alpha.2` 与 `0.1.7-rc.1` 上均可安装；对本插件消费的全部包而言，这两个版本的源码完全一致。`engines.dsh` 为 `^0.1.7-alpha.2`，`@deepseek-ai/cordis` 升至 `4.0.4`，`@deepseek-ai/schemastery` 升至 `3.18.4`。
- **配置迁移至 0.1.7 的易变 schema**：每个可编辑字段都声明为 `.volatile()`，`apply` 因此收到逐字段的活引用。插件不再注册设置节——`ctx.settings.installSection` 调用、`ctx.inject(['settings'])` 与 `@deepseek-ai/dsh-settings` 依赖均已移除。Host 自行读取导出的 `Config` schema（`entry.fiber.runtime.Config`），并以 profile 行 id `kingdee` 为键渲染该条目的表单。
- **每次操作一次配置快照**：`captureConfig` 在操作开始时一次性读取全部引用，因此单次操作绝不会混用「保存前读到的 `baseUrl`」与「保存后读到的凭据引用」。凭据仍逐次操作解析，轮换后的密钥同样对下一次调用生效。
- **`pnpm-workspace.yaml`**：为 `0.1.7-rc.1` 的确切包集合显式豁免 pnpm 的最小发布年龄闸门——否则 DSH 持续发布的预发行版会被该闸门拦下。
- **构建产物不再纳入版本库**：`lib/` 已加入忽略列表，由 `pnpm build`（以及 npm 的 `prepublishOnly` 钩子）在打包前生成。

### 新增

- **补充宿主兼容性闸门说明**：DeepSeek Harness 0.1.7-rc.1 会在加载前用运行时版本校验插件的 `@deepseek-ai/dsh*` peer 依赖，不兼容的行会被直接拒绝。本发行版声明的 peer 均实际满足，无需豁免；README 与升级文档均写明了该拒绝行为及 `dsh plugin allow-version` 豁免方式。
- **补充客户端卡片契约说明**：`src/client/settings-card.ts` 已写明是 Plugins 页所拥有的同一个逐条目 `ConfigForm` 的浏览器半端。

### 修复

- **补齐客户端半端的 `dsh.client.inject` 声明**：该卡片注册到 `plugins.row.config` / `plugins.bundle.config`（由 `@deepseek-ai/dsh-client-ui-plugin-manager` 提供），并读取 `ctx.remote` 与 `ctx.connection`，但此前只声明了 `@deepseek-ai/dsh-client-locale` 与 `@deepseek-ai/dsh-client-ui-settings`。现补齐 `@deepseek-ai/dsh-client-ui-plugin-manager`、`@deepseek-ai/dsh-api-remotes` 与 `@deepseek-ai/dsh-client-connection`，与使用同一批服务的官方客户端卡片保持一致。

### 验证

- `pnpm run typecheck` 零错误、**15** 项单元测试通过（`pnpm test`）、构建干净（`tsc` + `tsdown`），且 `node scripts/check-docs-language.mjs` 全绿。
- `pnpm install --frozen-lockfile` 通过 pnpm 的供应链策略校验；声明的 DSH peer 依赖经 DeepSeek Harness 自带的 `evaluatePluginCompatibility` 对运行时 `0.1.7-rc.1` 校验通过。

---

## [0.8.1] - 2026-09-18

### 变更

- **语言边界补齐**：运行时文案全部英文化 —— `kingdee_delete_draft` 工具描述、设置卡的用户名标签、`authMode: "app"` 的报错文案，以及全部源码注释。按设计保留两处中文：`src/kd-core/errors.ts` 中用于识别金蝶 WebAPI 中文报错的 `登录` 匹配式，以及插件卡片上的中文产品显示名。
- **双语文档规范化**：所有文档一文件一语言（`X.md` 英文、`X.zh.md` 中文），成对齐全、切换行统一；两份更新日志现覆盖同样的 13 个版本。

### 新增

- `scripts/check-docs-language.mjs` 在本地与 CI 中检查文档、源码文案与配对（CI 在安装依赖前运行）。

## [0.8.0] - 2026-09-18

### 变更

- **全面适配 DeepSeek Harness 0.1.6-alpha.2**：
  - **客户端配置插槽迁移**：DeepSeek Harness `0.1.6-alpha.2` 将插件配置表面从已废弃的 `settings.plugin.item` 插槽迁移至独立的插件管理页面（`ui-plugin-manager`）。`dsh-kingdee` 现注册至 `plugins.row.config`（键名 `dsh-kingdee#kingdee`）与 `plugins.bundle.config`（键名 `dsh-kingdee`）；
  - **双视图渲染（`summary` 与 `page`）**：遵循新规范中的 `PluginConfigViewProps` 契约，卡片在 `view: 'summary'` 下提供紧凑的单行描述，在 `view: 'page'` 下挂载完整的带版本围栏保存能力的配置表单；
  - **依赖与引擎范围更新**：所有 `@deepseek-ai/dsh-*` peer 依赖更新为 `^0.1.6-alpha.2`，开发依赖锁定至 `0.1.6-alpha.2`，`engines.dsh` 更新为 `^0.1.6-alpha.2`；新增 `@deepseek-ai/dsh-client-ui-plugin-manager` 开发依赖；
  - **全面刷新双语文档**（`README`、`INSTALL`、`USAGE`、`CONFIG`、`UPDATE`、`UNINSTALL`、`CHANGELOG`、`docs/RELEASE`），对齐 `0.1.6-alpha.2` 适配与验证。

---

## [0.7.0] - 2026-09-16

### 新增

- **全面适配金蝶云·星空 V9.1 企业版**：
  - **第三方应用登录（`AuthService.LoginByAppSecret`）**：`authMode: "app"` 现执行真实的 `LoginByAppSecret` 登录（载荷 `acctID` / `username` / `appid` / `appsecret` / `lcid`），除 `appId` / `appSecret` 外还必须提供 `userNameRef`（集成用户），并与 `user` 模式建立同一个 `kdservice-sessionid` 会话。金蝶对 2022-11-29 之后开通的公有云账套拒绝账号密码登录，此类账套必须使用该模式。
  - **`lcid` 配置项**：新增可选区域 id（数字，默认 `2052`，即 zh-CN），同时发送给两个登录服务。
  - **新增端点字段**：`serviceEndpoints` 增加 `loginByAppSecretService`（默认 `Kingdee.BOS.WebApi.ServicesStub.AuthService.LoginByAppSecret`）与 `stubSuffix`（默认 `.common.kdsvc`）。
  - **双通道会话**：会话同时以裸 `kdservice-sessionid` 请求头与 `Cookie`（`kdservice-sessionid=…; kdsvc=…`）发出。

### 变更

- **近似破坏性变更**：
  - `app` 模式不再伪造 `KDAuthentication` 请求头，改为经 `LoginByAppSecret` 认证后与 `user` 模式一样复用会话；并新增集成用户名（`userNameRef`）必填要求；
  - 所有 stub URL 统一以 `.common.kdsvc` 结尾；登录 stub 为 `AuthService.ValidateUser`、登出 stub 为 `AuthService.LogOut`（此前文档写的是 `LoginService.*`）；
  - `kingdee_invoke` 的 `serviceName` 现取自定义 stub 路径 `{namespace}.{class}.{method},{assembly}`（如 `GetCust.GetCust.ExecuteService,GetCust`），该段**直接替换** dynamic-form URL 段，`.common.kdsvc` 自动追加；
  - `serviceEndpoints.servicePrefix` 已移除，由 `loginByAppSecretService` + `stubSuffix` 取代；
  - DSH 锁定至 `0.1.6-alpha.1`（peer 范围、devDependencies、`engines.dsh`）。
- **全面刷新双语文档**（`README`、`INSTALL`、`USAGE`、`CONFIG`、`UPDATE`、`UNINSTALL`、`CHANGELOG`、`docs/RELEASE`），对齐 V9.1 目标与 `0.1.6-alpha.1` 验证。

### 修复

- **登录响应被当成业务信封解析，导致登录成功却报失败**：登录服务返回的是它**自己**的结构（`{"LoginResultType": 1}`），而不是其他所有操作返回的 `Result`/`IsSuccess` 业务信封。此前把登录响应送进业务信封断言，导致 `IsSuccess` 缺失 → 被判为 `false` → **在真实账套上认证永远无法成功**。现在登录结果由 `parseLoginOutcome`（从 `kd-core` 子路径导出）单独判定：存在数字型 `LoginResultType` 时以它为准（`1` 为成功，其余抛 `kd/auth-failed`）；没有 `LoginResultType` 时回退到业务信封。离线 mock 也改为用真实的 `{"LoginResultType": 1}` 结构应答登录 stub，确保该路径始终被覆盖；
- **自定义 BOS stub URL**：此前会被拼上 `Kingdee.BOS.WebApi.ServicesStub.` 前缀，任何 BOS 自定义服务都无法解析；现由自定义路径整段替换；
- **补上缺失的 `lcid`**：登录载荷现携带此前缺失的 `lcid`；
- 从 `user` 模式登录载荷中移除无意义的 `license: appId` 字段。

### 移除

- 从 `kd-core` 子路径 API 移除 `buildAppAuthHeader`（由 `buildAppSecretLoginPayload` 取代）。

---
## [0.6.1] - 2026-09-13

### 移除

- **清理死代码与未使用的遗留接口**：
  - 彻底移除 `src/kd-core/types.ts` 中废弃未被引用的 `KdToolResult` 接口定义及核心导出（工具输出全面统一为 `@deepseek-ai/dsh-util-values` 规范的 `JsonValue` 开放值模型）；
  - 移除 `src/kd-core/envelope.ts` 中内部未引用的 `parseEnvelopeFromText` 函数及其单测；
  - 移除 `src/kd-core/errors.ts` 中从未被业务或捕获层消费的死错误码 `'kd/not-found'`；
  - 精简 `pnpm-workspace.yaml` 中的历史多版本白名单规则，统一锁定为 `0.1.5-rc.2`。

---

## [0.6.0] - 2026-09-13

### 新增

- **全面适配金蝶云·星空 V9.0 企业版**：
  - **官方标准会话 Cookie（`kdservice-sessionid`）**：支持解析和回传金蝶星空 V9.0 企业版官方标准响应头 `kdservice-sessionid`，并在业务请求中同时回传 `kdservice-sessionid` 与兼容字段 `kdsvc`，实现跨版本与星空微服务网关的稳定连接。
  - **大表防全量扫表与稳定游标分页（`orderString`、`limit`、`startRow`）**：为 `ExecuteBillQuery` 及 `QueryBusinessData` 接口补全了 `OrderString`（排序子句）、`Limit`（分页大小）与 `StartRow`（起始行偏移量），对齐星空 V9.0 性能与查询规范，确保 AI 在处理万级以上单据大表时避免全表锁定和游标抖动。
  - **业务单据编号驱动操作（`numbers`）**：针对 AI 智能体直接基于业务单号交互的特点，为单据审批（`kingdee_audit`）、反审（`kingdee_unaudit`）、删除（`kingdee_delete`）、反提交（`kingdee_unsubmit`）和暂存删除（`kingdee_delete_draft`）扩展了 `numbers` 数组参数，支持直接使用业务单号（例如 `SO-20260901`）执行批量操作，省去底层内部物理自增 `FID` 的中间查询。
  - **按单据编号直接查单（`kingdee_view`）**：增强了单据查看工具，除原有的 `id` 外，新增支持传入 `number` 参数直接定位并获取单张单据的完整 JSON 结构。
  - **保存时自动提审（`isAutoSubmitAndAudit`）**：在单据保存（`kingdee_save`）和批量保存（`kingdee_batch_save`）中新增 `isAutoSubmitAndAudit` 参数，充分利用星空 V9.0 企业版的“一步保存提审”原生能力。

### 安全

- **SSRF 深度防御与严格主机校验**：
  - 纯 TypeScript 零依赖实现，全面落实网络边界安全审计；
  - **协议白名单**：仅允许 `http:` 与 `https:` 请求，坚决拦截 `file:`、`ftp:`、`gopher:` 等非安全协议；
  - **网络边界拦截**：全面拦截并拒绝指向 `localhost`、环回地址（`127.0.0.0/8`、`::1`）、RFC1918 私网网段（`10.0.0.0/8`、`172.16.0.0/12`、`192.168.0.0/16`、`169.254.0.0/16` 链路本地）、运营商 NAT（`100.64.0.0/10`）、IPv6 链路本地（`fe80::/10`）以及唯一本地地址（`fc00::/7`）的请求；
  - 在配置验证层（`validateConfig`）与网络请求实际发出层（`HttpTransport.request`）双重设防，杜绝内网横向扫描与伪造请求风险。

---
## [0.5.0] - 2026-09-11

### 变更

- **适配 DeepSeek Harness `0.1.5-rc.2` 与插件清单规范现代化**：
  - 在 `package.json.dsh` 下补充 `manifestVersion: 1`，完全对齐 `@deepseek-ai/dsh-package-manifest`；
  - 在 `package.json.engines` 中显式约束宿主引擎兼容范围：`"dsh": "^0.1.5-rc.2"`；
  - 将所有 `@deepseek-ai/dsh-*` peerDependencies 与 devDependencies 升级至 `0.1.5-rc.2`；
  - 全面刷新双语文档，标注针对 `0.1.5-rc.2` 的验证。
- **许可证改回 MIT。** `0.2.0` 引入的专有许可被替换为 MIT 许可证，使本包与 harness 核心及其姊妹插件保持一致；自此 `LICENSE` 与 `package.json.license` 均为 MIT。本条是该回退的首次更新日志记录。下方 `0.2.0` 条目仍描述该版本实际发布的状态，而 `README` 的许可证章节误留专有措辞，直至 `0.14.0` 才修正。

---
## [0.4.0] - 2026-09-10

### 变更

- **按官方插件开发规范全面适配 deepseek-harness `0.1.5-rc.1`。** 将所有 `@deepseek-ai/dsh-*` 开发依赖升级至 `0.1.5-rc.1`。
- 全面刷新双语文档，标注针对 `0.1.5-rc.1` 的验证。

### 新增

- 新增独立双语使用说明文档（`USAGE.md` / `USAGE.zh.md`），详述 14 个 `kingdee_*` 工具参数与示例。

---
## [0.3.0] - 2026-09-09

### 变更

- **按官方插件开发文档适配 deepseek-harness `0.1.5-alpha.1`**：将所有 `@deepseek-ai/dsh-*` 开发依赖升级至 `0.1.5-alpha.1`。运行时各项缝（`defineTool`、`ctx.tools.register`、`ctx.credentials.resolve`、`ctx.settings.installSection`）继续正常工作。
- **刷新双语文档**（`README.md`、`README.zh.md`、`INSTALL.md`、`INSTALL.zh.md`、`UPDATE.md`、`UPDATE.zh.md`、`UNINSTALL.md`、`UNINSTALL.zh.md`），标注已在 DeepSeek Harness `0.1.5-alpha.1` 上验证。

### 新增

- **独立双语配置说明文档**（`CONFIG.md` / `CONFIG.zh.md`）。

---
## [0.2.4] - 2026-09-03

### 变更

- 按官方插件开发规范适配 deepseek-harness `0.1.2-rc.1`（`docs/user/develop/basic/config|tool|publish`、`docs/cookbook/adding-a-settings-card`）。本插件使用的 DSH 缝 —— `defineTool`、`ctx.tools.register`、`ctx.credentials.resolve`、`ctx.settings.installSection` —— 自 `0.1.2-alpha.5` 以来未变，工具集与凭据流行为一致。

### 修复

- 以真实已发布的 peer 包替换原来的 ambient `any` peer 声明（`src/types/peers.d.ts`），版本为 `0.1.2-rc.1`（`@deepseek-ai/dsh-tools`、`dsh-settings`、`dsh-credentials`、`cordis`、`schemastery`）。`npm run typecheck` 现为 0 错误（此前 43 个隐式 `any`）；`apply` 不再以 `Context = any` 编译。凭据引用现完全按凭据缝文档的约定，经带品牌的 `credentialRef()` 辅助函数流转。
- **设置卡片的浏览器半端现已真正构建并对外提供。** 新增 `dsh.client` 清单（`platform: web`，注入语言包与客户端设置包）、`./client` 导出，以及一份自包含的 `tsdown.config.ts`，用以复现客户端模块系统的懒加载 CJS 工厂产物（`window.__ModuleLoader__.load(...)`、`lib/client.js`）。卡片绑定 `ctx.settingsScope`（命名空间 `kingdee`），注册到 `settings.plugin.item` 槽位，注册自己的 `settings.kingdee` 语言字典，并自行渲染卡片外观（不做跨插件取值导入 —— bundle 纯净性闸门）。
- **修正 `installSection` 钩子用法**：按设置缝契约，`setSource` 接收一个返回权威配置的 thunk（`() => Config`）；插件现经由该 thunk 重新读取，因此设置修改（或提供方脱离）都能对下一次工具调用生效。测试 7/7 通过；构建产出 `lib/`（Node 半端经 tsc，浏览器半端经 tsdown）。

---
## [0.2.3] - 2026-09-02

### 变更
- **已在 deepseek-harness `0.1.2-alpha.5` 最新 `master` 上验证。** 自 `0.1.2-alpha.4` 以来无影响本插件的 DSH 缝变更 —— `defineTool` / `ctx.credentials` / `ctx.settings` 契约及 WebAPI 传输保持稳定，无需代码改动。版本升至 `0.2.3`，并刷新双语文档（发行版 / 更新说明 / 安装 / 卸载 / 使用 / 配置）。

---

## [0.2.2] - 2026-09-02

### 变更
- **已在 deepseek-harness `0.1.2-alpha.4` 最新 `master` 上验证。** 自 `0.1.2-alpha.3` 以来无影响本插件的 DSH 缝变更 —— `defineTool` / `ctx.credentials` / `ctx.settings` 契约及 WebAPI 传输保持稳定，无需代码改动。版本升至 `0.2.2`，并刷新双语文档（发行版 / 更新说明 / 安装 / 卸载 / 使用 / 配置）。

---

## [0.2.1] - 2026-09-01

### 修复

- 重写 README 的功能要点（英文 + 中文），使 `kingdee_*` 工具列表在 npm 上渲染正确（避免过长的逗号分隔行内代码段）。完整列表见工具表。

---

## [0.2.0] - 2026-09-01

### 新增

- **`kd-core` 与对应 DSH 工具新增数据/服务层操作**：
  - `kingdee_logout` —— `LoginService.LogOut`，清除已存会话 cookie；
  - `kingdee_list_datacenters` —— 列出基址可达的数据中心/账套；
  - `kingdee_query_business_data` —— 新版结构化 `QueryBusinessData` 查询；
  - `kingdee_unsubmit` —— 反提交单据（撤销提交）；
  - `kingdee_delete_draft` —— 删除暂存/创建状态的记录；
  - `kingdee_batch_save` —— 单次批量保存多条记录。
- **可覆盖的服务端点**（`KdConfig.endpoints` / `serviceEndpoints` 配置），便于把 WebAPI 服务名对齐到具体的金蝶版本。
- 覆盖上述新操作的单元测试（7/7 通过）。

### 变更

- 在 `INSTALL.md` / `INSTALL.zh.md` 与 `README.md` / `README.zh.md` 中补充跨平台密钥配置说明 —— Linux/macOS 的 `export`、Windows PowerShell 的 `$env:`、Windows CMD 的 `set` / `setx`，以及 DSH 凭据存储。
- 许可证由 MIT 变更为**专有许可（保留所有权利）**，仓库仅供阅读/评估：未经所有者事先书面许可，禁止在整体或部分上复制、复刻/fork、再托管、再发布、修改或制作衍生作品。**该授权已在 `0.5.0` 中撤销，并恢复为 MIT 许可证。**

---


## [0.1.0] - 2026-09-01

初始发布。

### 新增

- **`kd-core`** —— 无框架依赖的金蝶云·星空 WebAPI 客户端：
  - 两种认证模式：`user`（账套用户名/密码，经 `LoginService.ValidateUser`，使用 `kdsvc` 会话 cookie）与 `app`（appId/appSecret）。
  - 类型化操作：`executeBillQuery`、`save`、`submit`、`audit`、`unaudit`、`view`、`delete`、`invokeService`。
  - 信封解析/规范化与类型化错误映射（`kd/business-error`、`kd/auth-failed`、`kd/not-found`、`kd/invalid-config`、`kd/network`、`kd/timeout`、`kd/unknown`）。
  - 传输留缝：真实 `HttpTransport`（全局 `fetch`）与离线 `MockTransport`。
- **DSH 插件** —— 经 `defineTool` 注册的类型化工具：
  - `kingdee_query`、`kingdee_save`、`kingdee_submit`、`kingdee_audit`、`kingdee_unaudit`、`kingdee_view`、`kingdee_delete`、`kingdee_invoke`。
  - 凭据安全配置：密钥每次操作经 DSH 凭据缝（`ctx.credentials.resolve`）解析。
  - `kingdee` 设置命名空间（Host 半端）与浏览器设置卡片脚手架（Client 半端，`dsh.client`）。
- **配套技能** —— `kingdee-bos`：字段/枚举/状态约定、单据状态机、工具用法，以及数据层与平台插件层的边界。
- **文档** —— 中英双语（英文 + 简体中文）`README` 与逐版本发行说明。
- **测试** —— 内核单元测试（信封解析、配置校验、认证头、完整 mock 流程与错误映射），使用 Node 内置测试运行器。

### 安全

- 配置中不存储任何明文密钥；密钥每次操作从环境变量引用解析。

### 说明

- 平台插件层（服务端 C# 表单/列表插件、UI 布局）**无法**经 WebAPI 触达，已在 `kingdee-bos` 技能中明确记录该边界。
- DSH host/插件半区需在 DSH profile 内编译（其 `@deepseek-ai/*` peer 在其中解析）；仅 `kd-core` 可独立构建与测试。

[0.12.0]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.12.0
[0.11.1]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.11.1
[0.11.0]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.11.0
[0.10.0]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.10.0
[0.9.1]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.9.1
[0.9.0]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.9.0
[0.8.1]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.8.1
[0.8.0]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.8.0
[0.7.0]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.7.0
[0.6.1]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.6.1
[0.6.0]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.6.0
[0.5.0]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.5.0
[0.4.0]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.4.0
[0.3.0]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.3.0
[0.2.4]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.2.4
[0.2.3]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.2.3
[0.2.2]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.2.2
[0.2.1]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.2.1
[0.2.0]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.2.0
[0.1.0]: https://github.com/maxwell-feng/dsh-kingdee/releases/tag/v0.1.0
