Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ jobs:
host-ref: "dsh-v0.1.2-rc.1"
role: minimum
- node: 22
host-ref: "dsh-v0.1.7-rc.2"
host-ref: "dsh-v0.2.0-rc.2"
role: current
- node: 24
host-ref: "dsh-v0.1.7-rc.2"
host-ref: "dsh-v0.2.0-rc.2"
role: current
- node: 24
host-ref: "dsh-v0.2.0-rc.2"
host-ref: "dsh-v0.2.1-alpha.1"
role: next
runs-on: ubuntu-latest
timeout-minutes: 40
Expand Down Expand Up @@ -63,7 +63,7 @@ jobs:
if: matrix.role == 'minimum'
run: pnpm run build

- name: Check published host API (typecheck + build)
- name: Check published host API (typecheck + plugin lifecycle + build)
if: matrix.role != 'minimum'
run: pnpm run check:host-api "${{ matrix.host-ref }}"

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ jobs:
env:
RELEASE_TAG: ${{ github.event.release.tag_name }}
PRERELEASE: ${{ github.event.release.prerelease }}
HOST_REF: dsh-v0.1.7-rc.2
NEXT_HOST_REF: dsh-v0.2.0-rc.2
HOST_REF: dsh-v0.2.0-rc.2
NEXT_HOST_REF: dsh-v0.2.1-alpha.1

steps:
# actions/checkout@v4
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

## [Unreleased]

### 兼容性

- 将 DSH 当前宿主与下一测试版的接口、打包安装和发布验证目标更新为 `0.2.0-rc.2` 与 `0.2.1-alpha.1`。
- 移除 DSH 已废弃的运行时诊断配套入口 `./invariant`、对应构建产物与 `@deepseek-ai/dsh-invariants` 直接依赖。
- 对应宿主版本的公开依赖检查加入技能注册、插件重载和持久化纠错恢复测试;会话样本补齐新版要求的消息记录字段。

## [0.11.4] - 2026-10-08

### 修复
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ The repository ships both renderer channels, the host plugin, and the built brow

Prerequisites — all required:

1. **dsh `^0.1.2-rc.1 || ^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1 || >=0.2.0-rc.1 <0.3.0-0`** (DSH `0.2.0-rc.1` is currently a prerelease; verified host roles: minimum `dsh-v0.1.2-rc.1`, current `dsh-v0.1.7-rc.2`, next `dsh-v0.2.0-rc.2`; users on DSH `<=0.1.1-rc.x` should use dsh-genui `0.9.8`)
1. **dsh `^0.1.2-rc.1 || ^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1 || >=0.2.0-rc.1 <0.3.0-0`** (DSH `0.2.1-alpha.1` is currently a prerelease; verified host roles: minimum `dsh-v0.1.2-rc.1`, current `dsh-v0.2.0-rc.2`, next `dsh-v0.2.1-alpha.1`; users on DSH `<=0.1.1-rc.x` should use dsh-genui `0.9.8`)
2. **`pnpm` on your PATH**: the `dsh plugin` command depends on it. If missing: `corepack enable` (or `npm i -g pnpm`), then **open a new terminal** and confirm `pnpm -v` prints a version

Install and activate in DSH (one command, all dependencies included):
Expand Down Expand Up @@ -246,9 +246,9 @@ pnpm run check # type check + full tests + build

With the locked dependencies installed, the check script (`pnpm run check` or `npm run check`) uses the pinned DSH `0.1.2-rc.1` release packages.

The verified host roles are minimum `dsh-v0.1.2-rc.1`, current `dsh-v0.1.7-rc.2`, and next `dsh-v0.2.0-rc.1`. DSH `0.2.0-rc.1` is currently a prerelease. CI keeps four primary lanes: Node 22 + current, and Node 24 + minimum/current/next. Replace these pinned tags as DSH publishes newer versions.
The verified host roles are minimum `dsh-v0.1.2-rc.1`, current `dsh-v0.2.0-rc.2`, and next `dsh-v0.2.1-alpha.1`. DSH `0.2.1-alpha.1` is currently a prerelease. CI keeps four primary lanes: Node 22 + current, and Node 24 + minimum/current/next. Replace these pinned tags as DSH publishes newer versions.

`pnpm run check:host-api dsh-v0.1.7-rc.2` and `pnpm run check:host-api dsh-v0.2.0-rc.1` install the corresponding published DSH packages and run TypeScript typecheck plus tsdown build. Each CI host lane then installs the generated tarball in its pinned DSH host and runs the packed smoke.
`pnpm run check:host-api dsh-v0.2.0-rc.2` and `pnpm run check:host-api dsh-v0.2.1-alpha.1` install the corresponding published DSH packages and run TypeScript typecheck, plugin lifecycle tests (including skill registration and persisted feedback recovery), and tsdown build. Each CI host lane then installs the generated tarball in its pinned DSH host and runs the packed smoke.

Run `node scripts/verify-pack.mjs --keep` to retain the verified tarball for inspection or e2e use. The default `node scripts/verify-pack.mjs` removes its temporary directory after verification.

Expand Down
6 changes: 3 additions & 3 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ CI 的 packed host smoke 会把实际生成的 npm tarball 安装到真实 DSH

前置条件,缺一不可:

1. **dsh `^0.1.2-rc.1 || ^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1 || >=0.2.0-rc.1 <0.3.0-0`**(DSH `0.2.0-rc.1` 当前属于预发布版本;已验证宿主角色:minimum `dsh-v0.1.2-rc.1`、current `dsh-v0.1.7-rc.2`、next `dsh-v0.2.0-rc.2`;使用 DSH `<=0.1.1-rc.x` 的用户请使用 dsh-genui `0.9.8`)
1. **dsh `^0.1.2-rc.1 || ^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1 || >=0.2.0-rc.1 <0.3.0-0`**(DSH `0.2.1-alpha.1` 当前属于预发布版本;已验证宿主角色:minimum `dsh-v0.1.2-rc.1`、current `dsh-v0.2.0-rc.2`、next `dsh-v0.2.1-alpha.1`;使用 DSH `<=0.1.1-rc.x` 的用户请使用 dsh-genui `0.9.8`)
2. **`pnpm` 在 PATH 上**:`dsh plugin` 命令依赖它。没有就 `corepack enable`(或 `npm i -g pnpm`),然后**新开一个终端**,确认 `pnpm -v` 有输出

安装并在 DSH 中激活(一行命令,自动带上全部依赖):
Expand Down Expand Up @@ -260,9 +260,9 @@ pnpm run check # 类型检查 + 全量测试 + 构建

安装锁定依赖后,检查脚本(`pnpm run check` 或 `npm run check`)使用固定的 DSH `0.1.2-rc.1` 发布包。

已验证宿主角色为 minimum `dsh-v0.1.2-rc.1`、current `dsh-v0.1.7-rc.2`、next `dsh-v0.2.0-rc.1`。DSH `0.2.0-rc.1` 当前属于预发布版本。CI 保持四条主要 lane:Node 22 + current,以及 Node 24 + minimum/current/next。DSH 发布新版本后,替换对应固定标签。
已验证宿主角色为 minimum `dsh-v0.1.2-rc.1`、current `dsh-v0.2.0-rc.2`、next `dsh-v0.2.1-alpha.1`。DSH `0.2.1-alpha.1` 当前属于预发布版本。CI 保持四条主要 lane:Node 22 + current,以及 Node 24 + minimum/current/next。DSH 发布新版本后,替换对应固定标签。

`pnpm run check:host-api dsh-v0.1.7-rc.2` 与 `pnpm run check:host-api dsh-v0.2.0-rc.1` 会安装对应 DSH 发布包,运行 TypeScript 类型检查与 tsdown 构建。每条 CI 宿主 lane 随后会把生成的 tarball 安装到固定版本的 DSH 宿主并运行 packed smoke。
`pnpm run check:host-api dsh-v0.2.0-rc.2` 与 `pnpm run check:host-api dsh-v0.2.1-alpha.1` 会安装对应 DSH 发布包,运行 TypeScript 类型检查、插件生命周期测试(包括技能注册与持久化纠错恢复)和 tsdown 构建。每条 CI 宿主 lane 随后会把生成的 tarball 安装到固定版本的 DSH 宿主并运行 packed smoke。

运行 `node scripts/verify-pack.mjs --keep` 可保留已验收的 tarball,便于检查或运行 e2e;默认的 `node scripts/verify-pack.mjs` 会在验收后清理临时目录。

Expand Down
11 changes: 0 additions & 11 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@
"types": "./lib/types/plugin/index.d.ts",
"default": "./lib/index.js"
},
"./invariant": {
"types": "./lib/types/plugin/invariant.d.ts",
"default": "./lib/invariant.js"
},
"./client": {
"types": "./lib/types/client/index.d.ts",
"default": "./lib/client.js"
Expand All @@ -29,12 +25,10 @@
},
"files": [
"lib/index.js",
"lib/invariant.js",
"lib/client.js",
"lib/assets/mermaid.js",
"lib/assets/three.js",
"lib/types/plugin/index.d.ts",
"lib/types/plugin/invariant.d.ts",
"lib/types/client/index.d.ts",
"SKILL.md",
"README.md",
Expand Down Expand Up @@ -86,7 +80,6 @@
"@deepseek-ai/dsh-client-ui-session": "^0.1.2-rc.1 || ^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1 || >=0.2.0-rc.1 <0.3.0-0",
"@deepseek-ai/dsh-client-ui-slots": "^0.1.2-rc.1 || ^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1 || >=0.2.0-rc.1 <0.3.0-0",
"@deepseek-ai/dsh-client-ui-tool": "^0.1.2-rc.1 || ^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1 || >=0.2.0-rc.1 <0.3.0-0",
"@deepseek-ai/dsh-invariants": "^0.1.2-rc.1 || ^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1 || >=0.2.0-rc.1 <0.3.0-0",
"@deepseek-ai/dsh-llm": "^0.1.2-rc.1 || ^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1 || >=0.2.0-rc.1 <0.3.0-0",
"@deepseek-ai/dsh-session": "^0.1.2-rc.1 || ^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1 || >=0.2.0-rc.1 <0.3.0-0",
"@deepseek-ai/dsh-skill": "^0.1.2-rc.1 || ^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1 || >=0.2.0-rc.1 <0.3.0-0",
Expand Down Expand Up @@ -122,7 +115,6 @@
"@deepseek-ai/dsh-deque": "0.1.2-rc.1",
"@deepseek-ai/dsh-file-reference": "0.1.2-rc.1",
"@deepseek-ai/dsh-home-paths": "0.1.2-rc.1",
"@deepseek-ai/dsh-invariants": "0.1.2-rc.1",
"@deepseek-ai/dsh-jobs": "0.1.2-rc.1",
"@deepseek-ai/dsh-llm": "0.1.2-rc.1",
"@deepseek-ai/dsh-native-command": "0.1.2-rc.1",
Expand Down Expand Up @@ -226,9 +218,6 @@
"@deepseek-ai/dsh-client-ui-tool": {
"optional": true
},
"@deepseek-ai/dsh-invariants": {
"optional": true
},
"@deepseek-ai/dsh-llm": {
"optional": true
},
Expand Down
27 changes: 24 additions & 3 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion pnpm-workspace.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ minimumReleaseAgeExclude:
- '@deepseek-ai/dsh-deque@0.1.2-rc.1'
- '@deepseek-ai/dsh-file-reference@0.1.2-rc.1'
- '@deepseek-ai/dsh-home-paths@0.1.2-rc.1'
- '@deepseek-ai/dsh-invariants@0.1.2-rc.1'
- '@deepseek-ai/dsh-jobs@0.1.2-rc.1'
- '@deepseek-ai/dsh-llm@0.1.2-rc.1'
- '@deepseek-ai/dsh-native-command@0.1.2-rc.1'
Expand Down
6 changes: 4 additions & 2 deletions scripts/check-host-api.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@ const dshPackages = Object.keys(pkg.peerDependencies).filter(name => name.starts
const checkRoot = await mkdtemp(join(tmpdir(), 'dsh-genui-host-api-'))

try {
for (const name of ['package.json', 'pnpm-lock.yaml', 'pnpm-workspace.yaml', '.npmrc', 'tsconfig.json', 'tsdown.config.ts']) {
for (const name of ['package.json', 'pnpm-lock.yaml', 'pnpm-workspace.yaml', '.npmrc', 'tsconfig.json', 'tsdown.config.ts', 'vitest.config.ts', 'SKILL.md']) {
await cp(join(repoRoot, name), join(checkRoot, name))
}
await cp(join(repoRoot, 'src'), join(checkRoot, 'src'), { recursive: true })
await cp(join(repoRoot, 'tests'), join(checkRoot, 'tests'), { recursive: true })

// pnpm 在隔离目录安装发布包,源码中的 import 由该目录的 node_modules 解析。
execFileSync('pnpm', ['add', '--save-dev', '--save-exact', ...dshPackages.map(name => `${name}@${version}`)], { cwd: checkRoot, stdio: 'inherit' })
Expand All @@ -26,8 +27,9 @@ try {
assert.equal(installed.version, version, `${name} 必须使用 ${version} 的公开类型`)
}
execFileSync('pnpm', ['exec', 'tsc', '-p', 'tsconfig.json'], { cwd: checkRoot, stdio: 'inherit' })
execFileSync('pnpm', ['exec', 'vitest', 'run', 'tests/fence-feedback.spec.ts', 'tests/plugin-genui.spec.ts'], { cwd: checkRoot, stdio: 'inherit' })
execFileSync('pnpm', ['exec', 'tsdown'], { cwd: checkRoot, stdio: 'inherit' })
console.log(`${hostRef} API typecheck 与 tsdown build 通过`)
console.log(`${hostRef} API typecheck、插件生命周期测试与 tsdown build 通过`)
} finally {
await rm(checkRoot, { recursive: true, force: true })
}
30 changes: 0 additions & 30 deletions src/plugin/invariant.ts

This file was deleted.

Loading
Loading