dsh-github-copilot 0.4.0-alpha.26 → 0.4.0-alpha.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +74 -67
- package/README.md +9 -9
- package/README.zh.md +9 -9
- package/deployment-baseline.json +1 -1
- package/docs/dual-model.md +11 -8
- package/lib/client.js +191 -84
- package/lib/client.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/types/current-workspace.d.ts +10 -0
- package/lib/types/dual-model-card.d.ts +2 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,67 +1,74 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
## 0.4.0-alpha.
|
|
4
|
-
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
-
|
|
55
|
-
|
|
56
|
-
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
-
|
|
66
|
-
|
|
67
|
-
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.4.0-alpha.27 (prepared)
|
|
4
|
+
|
|
5
|
+
- Remove the separate Model roles workspace dropdown: role settings remain profile-global and saving does not require a workspace (#144).
|
|
6
|
+
- Show the current workspace read-only for explicit dedicated-session creation, observing public Client lists on both legacy selection and alpha.2 main-view ownership. Missing or ambiguous selection disables creation rather than choosing a first/recent workspace.
|
|
7
|
+
- Retain one traced Remote face per UI registration so navigation preserves drafts and uncertain-create UUID/workspace/revision across footer/fallback remounts. Ordinary and existing sessions remain unchanged.
|
|
8
|
+
- Add mounted Cordis/React and current-workspace regressions without changing Core, dependencies, Host codecs or session policy.
|
|
9
|
+
|
|
10
|
+
## 0.4.0-alpha.26 (prepared)
|
|
11
|
+
|
|
12
|
+
- Fix low-contrast native dropdown options in dark mode for planning/execution models, workspaces and search providers (#142).
|
|
13
|
+
- Pair opaque application-theme surfaces with primary or secondary foreground tokens on both selects and options, with readable system-color fallbacks on hosts without those tokens.
|
|
14
|
+
- Preserve disabled/unavailable choices and all selection, CAS and session behavior. Add focused regressions and remove fixture-only option colors that masked the production bug; no Core or dependency changes are required.
|
|
15
|
+
|
|
16
|
+
## 0.4.0-alpha.25 (candidate)
|
|
17
|
+
|
|
18
|
+
- Append the ninth exact official target `dsh-v0.1.6-alpha.2` at `ddefc45fbc7f8e46dd73185e68295696d1297887`, retaining all older pins and exact `0.1.2-rc.1` development dependencies.
|
|
19
|
+
- Supply strict Remote `create()` factories with a legacy `schema` bridge over the same parser; preserve endpoint contracts and validation rather than weakening to `src-json`.
|
|
20
|
+
- Correct dedicated executor projection admission to native `subagent/descriptor` v3. Native descriptors were already v3 in rc.1; the plugin's old v1 assumption was a bug, not an upstream format migration.
|
|
21
|
+
- Bump the plugin projection cache to `stateVersion: 2` to force refolding. Unknown/v1/v2 descriptor histories fail closed and remain unmodified; recovery requires a reviewed new child, never relabeling or fabricated conversion.
|
|
22
|
+
- Add strict-codec, descriptor/projection and exact-alpha.2 contract fixtures, plus an [official-first comparison and retirement plan](./docs/official-first-016-alpha2.md) for retained custom surfaces.
|
|
23
|
+
- Evidence remains limited: source markers, local rc.1-backed focused tests and fifteen scoped exact-source runtime tests passed (alpha.2 contracts 8, Remote 1 and Session-context 6; supplemental resolver with official TypeScript `6.0.3`, declared `mime-types@3.0.2` and `ws@8.21.0`, and shared Zod `^4.4.3`, no source/dependency patches). Full local `pnpm verify` passed: 1373 Vitest tests with 2 expected skips, 176 tooling tests, typechecks/build/package smoke; pack/tarball verification passed. Broad frozen dependency installation remains blocked by the configured mirror's `node-addon-require-builtin@0.1.6` HTTP 404. Full official-root-helper and CI qualification remain pending. This candidate is not a published-artifact, live Desktop, OAuth or model-call compatibility claim.
|
|
24
|
+
|
|
25
|
+
## 0.4.0-alpha.24 (prepared)
|
|
26
|
+
|
|
27
|
+
- Declare the exact `remote.githubCopilotSearchRouting` dependency in the search UI child Fiber so the Web search card can render under Cordis service tracing (#137).
|
|
28
|
+
- Regress the actual Client apply/render callback with real Cordis traced services on both the Models footer and legacy section, including independent account activation and routing-service loss cleanup.
|
|
29
|
+
- Preserve all account, cancellation and paid-fallback guards. Isolated tests do not claim packaged Desktop activation or live search success.
|
|
30
|
+
|
|
31
|
+
## 0.4.0-alpha.23 (prepared)
|
|
32
|
+
|
|
33
|
+
- Fix Model roles loading by exposing the dedicated Host `view`, `save` and `create` methods through the public Typert Remote service, retaining strict validation, CAS and session-creation ownership (#134).
|
|
34
|
+
- Replace Copilot-specific Auto/fixed labels and static provider suggestions with a real registered search-provider catalog shared by the primary and final-fallback selectors (#135).
|
|
35
|
+
- Follow the initiating Chat provider in Auto mode, keep an explicitly selected primary independent of Chat, and attempt at most one distinct final fallback. Preserve legacy settings without automatic writes and keep model choices provider-owned.
|
|
36
|
+
- Capture registration and account continuity before asynchronous work; silently revoked Copilot proof, cancellation, unload or registration replacement cannot authorize a paid fallback.
|
|
37
|
+
- Add real Host Gateway, registration-lifecycle, provider-routing and UI regressions plus an isolated built-component browser fixture. Preserve alpha.21 shared-peer ownership and alpha.22 React Client external declarations; no Core or live-profile changes are included.
|
|
38
|
+
|
|
39
|
+
## 0.4.0-alpha.22 (prepared)
|
|
40
|
+
|
|
41
|
+
- Declare React as the DSH Client ModuleLoader external used by the actual built Client bundle, while removing it from the strict Desktop Node peer graph and retaining it only for development.
|
|
42
|
+
- Extend packed-manifest validation from Host shared-package intersection to every declared required peer and Client external, preserving required authorization/schemastery Host peers.
|
|
43
|
+
- Regress the actual packaged Desktop 0.1.5 startup failure `requires missing react@^18.2.0` without bundling a second React instance or weakening `autoInstallPeers: false` graph validation.
|
|
44
|
+
|
|
45
|
+
## 0.4.0-alpha.21 (prepared)
|
|
46
|
+
|
|
47
|
+
- Move Desktop-owned `@deepseek-ai/dsh-authorization` and `@deepseek-ai/schemastery` from private runtime dependencies to required compatible peers while retaining development copies for standalone build and test verification.
|
|
48
|
+
- Audit every declared dependency and peer against the hash-pinned actual Desktop 0.1.5 runtime descriptor and generated Desktop 0.1.6 package-set input.
|
|
49
|
+
- Make packed-tarball verification reject bundled, optional, incompatible, or newly unaudited shared-package ownership without weakening Desktop validation or changing Copilot lifecycle, image-offload, Models, or authorization behavior.
|
|
50
|
+
|
|
51
|
+
## 0.4.0-alpha.20 (prepared)
|
|
52
|
+
|
|
53
|
+
- Add opt-in, bilingual **Model roles** settings with account-discovered planning and execution models, revision-checked save, and an explicit new-session entry.
|
|
54
|
+
- Capture the two roles only for dedicated new sessions; preserve existing conversations, global defaults, OAuth ownership and ordinary Subagent settings.
|
|
55
|
+
- Delegate implementation through native continuable executors with an exact route, scoped workflow controls, durable policy replay and explicit model-unavailable errors rather than fallback.
|
|
56
|
+
- Preserve create-request identity across uncertain results, and distinguish a confirmed not-created result from failed recovery of an existing session.
|
|
57
|
+
- Add real React DOM, actual Client Gateway, and Core Session/projection/tool primitive regressions, plus an isolated built-component browser fixture. These tests do not imply a live model call or production Desktop activation.
|
|
58
|
+
|
|
59
|
+
## 0.4.0-alpha.19
|
|
60
|
+
|
|
61
|
+
- Adapt the plugin compatibility contract to DSH `0.1.6-alpha.1` at
|
|
62
|
+
`0a15e36e7f82b6ed45af6fa9759f29b40dcd965d`.
|
|
63
|
+
- Exercise awaited, serialized `agent/created` initialization before reading
|
|
64
|
+
live Session state in the unchanged tagged-source fixture.
|
|
65
|
+
- Verify the 0.1.6 Session projection/history boundary, MCP v2 resource
|
|
66
|
+
pagination, PTC runtime and `workflow-ptc` names, cancellable Sandbox/Shell
|
|
67
|
+
preparation, optional-plugin startup policy, attachment cache separation,
|
|
68
|
+
and Team task pagination without taking ownership of those Core services.
|
|
69
|
+
- Follow the 0.1.6 image-budget contract: preserve `IMAGE_OFFLOAD_REQUIRED`,
|
|
70
|
+
apply the Core durable `image/offload` projection, and prove the retried
|
|
71
|
+
Copilot request uses the mapped read-only normalized path without image bytes.
|
|
72
|
+
- Preserve provider-scoped Copilot tool-schema filtering and the existing
|
|
73
|
+
immutable GitHub Release plus npm OIDC distribution design. This version is
|
|
74
|
+
prepared for a Draft compatibility PR only; it is not published by this change.
|
package/README.md
CHANGED
|
@@ -61,7 +61,7 @@ Source markers, local rc.1-backed focused tests and fifteen scoped exact-source
|
|
|
61
61
|
|
|
62
62
|
## Install and sign in
|
|
63
63
|
|
|
64
|
-
The commands below target the package version `0.4.0-alpha.
|
|
64
|
+
The commands below target the package version `0.4.0-alpha.27`. Versioned URLs describe the intended release artifacts, not proof that publication or local activation has completed; use them only once that Release and its checksums are available. Install into the profile you use (replace `web` when targeting another profile):
|
|
65
65
|
|
|
66
66
|
Before installing/updating, unpack the **checksum-verified** archive into a temporary directory and run its read-only composition preflight (replace all paths with absolute paths for the intended profile):
|
|
67
67
|
|
|
@@ -74,7 +74,7 @@ Include any launcher patch files with repeated `--patch /absolute/file` argument
|
|
|
74
74
|
For approved online installation, the supported CLI command is:
|
|
75
75
|
|
|
76
76
|
```sh
|
|
77
|
-
dsh plugin --profile web add https://github.com/cloga/dsh-github-copilot/releases/download/v0.4.0-alpha.
|
|
77
|
+
dsh plugin --profile web add https://github.com/cloga/dsh-github-copilot/releases/download/v0.4.0-alpha.27/dsh-github-copilot-0.4.0-alpha.27.tgz
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
If registry access is blocked or unavailable, do not retry it through another network. Desktop-managed profiles may instead use the [controlled offline CLI procedure](./docs/npm-distribution.md#controlled-offline-cli-maintenance), with an approved, checksum-verified local Release and existing dependency cache (`--offline --ignore-scripts`). All preflight and approval requirements still apply.
|
|
@@ -139,7 +139,7 @@ Agents should treat the browser authorization as a human handoff, not as a token
|
|
|
139
139
|
5. Confirm **Signed in** and inspect the automatic discovery result before asking the user to choose a model. Already-signed-in Models opening ensures missing/stale metadata automatically; fresh ready cache makes no request. Use visible **Retry** for errors or **Manage → Refresh models** for an intentional forced update, not routine setup. Status alone does not discover, and login, metadata and successful model calls remain separate evidence.
|
|
140
140
|
6. Use **Sign out** only when the user explicitly asks to disconnect the account. It deletes the Copilot credential record but preserves route settings.
|
|
141
141
|
|
|
142
|
-
GitHub Releases and npm are the default distribution channels for each new version, using the same verified tarball. Pin the version and verify the evidence for the channel used: Release `SHA256SUMS`, and npm `dist.integrity` when installing from npm. The native Desktop package manager is preferred when permitted registry access is available; after npm publication is verified it accepts `dsh-github-copilot@0.4.0-alpha.
|
|
142
|
+
GitHub Releases and npm are the default distribution channels for each new version, using the same verified tarball. Pin the version and verify the evidence for the channel used: Release `SHA256SUMS`, and npm `dist.integrity` when installing from npm. The native Desktop package manager is preferred when permitted registry access is available; after npm publication is verified it accepts `dsh-github-copilot@0.4.0-alpha.27`, not a URL or file. Desktop-managed profiles also support explicitly approved [controlled offline CLI maintenance](./docs/npm-distribution.md#controlled-offline-cli-maintenance) with a verified local Release and `--offline --ignore-scripts`. Follow the mandatory search-composition preflight, backup, single-writer and post-install checks; do not bypass a corporate registry ban, disable TLS verification or restart without separate approval. Offline installation is not proof that npm networking/publication was repaired. See [distribution and publication requirements](./docs/npm-distribution.md).
|
|
143
143
|
|
|
144
144
|
No `copilot2api` process, external gateway, placeholder API key, pasted GitHub token, or separate `dsh-web-search-provider` installation is required.
|
|
145
145
|
|
|
@@ -156,13 +156,13 @@ DSH Core continues to own model selection, sandboxing, tools, attachments, and o
|
|
|
156
156
|
|
|
157
157
|
## Optional planner / executor model roles
|
|
158
158
|
|
|
159
|
-
Under **Settings → Models → Model roles**, enable dedicated dual-model sessions, select two available account models, save
|
|
159
|
+
Under **Settings → Models → Model roles**, enable dedicated dual-model sessions, select two available account models, and save the profile-global settings. No workspace is needed to save. **Create session with this configuration** uses the application's current workspace, shown read-only; open a workspace first if none is current. There is no separate workspace dropdown and no first/recent-workspace fallback. The planner handles planning and acceptance; `copilot_execute` delegates implementation to a native continuable child with a fixed execution model. Configuration is off by default and affects only sessions created through this entry. It does not change the global default, existing sessions, credentials or the ordinary Subagent model-selection setting.
|
|
160
160
|
|
|
161
|
-
Unavailable models are not substituted. Uncertain creation retries keep the same request identity. The feature requires public role/session/subagent capabilities and is visibly unavailable when they are absent; historical package compatibility is not blanket certification of this optional flow. See [setup, lifecycle, limitations and evidence](./docs/dual-model.md). The feature is included in the `0.4.0-alpha.
|
|
161
|
+
Unavailable models are not substituted. Uncertain creation retries keep the same request identity. The feature requires public role/session/subagent capabilities and is visibly unavailable when they are absent; historical package compatibility is not blanket certification of this optional flow. See [setup, lifecycle, limitations and evidence](./docs/dual-model.md). The feature is included in the `0.4.0-alpha.27` candidate; source and fixture tests are not proof of publication or Desktop activation.
|
|
162
162
|
|
|
163
163
|
If the card says **Could not load model roles**, do not change model defaults to work around it: this is a failed settings load, distinct from unsupported capabilities or unavailable models. In particular, a `githubCopilotDualModel/view` HTTP 404 indicates missing Host Remote exposure, not that the feature is off. See [troubleshooting and verification](./docs/dual-model.md#loading-and-remote-troubleshooting).
|
|
164
164
|
|
|
165
|
-
Native model
|
|
165
|
+
Native model and search-provider dropdowns use paired application-theme surface/text colors, including unavailable options, so dark mode does not leave pale labels on a white popup. Hosts without those theme tokens use readable system-color fallbacks. Appearance changes do not save or replace model/search selections.
|
|
166
166
|
|
|
167
167
|
## Shared account, independent sessions (V3)
|
|
168
168
|
|
|
@@ -385,8 +385,8 @@ Report the published Release URL, version, tag/commit and verified asset SHA-256
|
|
|
385
385
|
`package.json` declares public npm distribution. A release tag must equal `v${package.json.version}`. Versions use standard SemVer prerelease labels (`alpha`, `beta`, or `rc`), each with its matching npm dist-tag; only stable versions use `latest`. The Release workflow performs the frozen install and complete verification gate, packs once (or recovers the original archive on retry), verifies `SHA256SUMS`, publishes the immutable GitHub Release and then publishes those same bytes to npm through OIDC. Either channel failing means delivery is incomplete. First package creation needs an authorized maintainer; staging requires an existing package and is not a first-package bootstrap. Historical releases are not republished.
|
|
386
386
|
|
|
387
387
|
```sh
|
|
388
|
-
curl -LO https://github.com/cloga/dsh-github-copilot/releases/download/v0.4.0-alpha.
|
|
389
|
-
curl -LO https://github.com/cloga/dsh-github-copilot/releases/download/v0.4.0-alpha.
|
|
388
|
+
curl -LO https://github.com/cloga/dsh-github-copilot/releases/download/v0.4.0-alpha.27/dsh-github-copilot-0.4.0-alpha.27.tgz
|
|
389
|
+
curl -LO https://github.com/cloga/dsh-github-copilot/releases/download/v0.4.0-alpha.27/SHA256SUMS
|
|
390
390
|
sha256sum --check SHA256SUMS
|
|
391
391
|
```
|
|
392
392
|
|
|
@@ -394,7 +394,7 @@ PowerShell can verify the same two downloaded files with:
|
|
|
394
394
|
|
|
395
395
|
```powershell
|
|
396
396
|
$expected = (Get-Content .\SHA256SUMS).Split()[0]
|
|
397
|
-
$actual = (Get-FileHash .\dsh-github-copilot-0.4.0-alpha.
|
|
397
|
+
$actual = (Get-FileHash .\dsh-github-copilot-0.4.0-alpha.27.tgz -Algorithm SHA256).Hash.ToLowerInvariant()
|
|
398
398
|
if ($actual -cne $expected) { throw 'Release checksum mismatch' }
|
|
399
399
|
```
|
|
400
400
|
|
package/README.zh.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
一个聚焦 GitHub Copilot 登录、通用账号模型发现、Copilot 专用 Tool 兼容与供应方托管搜索的 DSH companion。插件根据供应方返回的端点和能力元数据组装模型,复用公开的 `@deepseek-ai/dsh-llm-pi-ai` adapter 与 pi-ai SDK,不另写一套通用传输/序列化器,也不维护需要逐个添加新模型 ID 的静态目录。
|
|
11
11
|
|
|
12
|
-
> 下文自动维护账号模型元数据与 provider 集成控件描述目标版本 `0.4.0-alpha.
|
|
12
|
+
> 下文自动维护账号模型元数据与 provider 集成控件描述目标版本 `0.4.0-alpha.27`;这不代表已有的两条真实路由被合并或移除。版本化 URL 不表示 Release 已发布或本机已加载;仅在该 Release 与校验和可用后使用安装命令。源码、发布制品、已安装版本和实际加载运行时需分别确认,本地升级和中断会话的重启仍需用户批准。
|
|
13
13
|
|
|
14
14
|
Alpha.24 修复 Web search 卡片缺少精确 Remote 依赖声明的问题。卡片仍位于 **Settings → Models**(`settings.models.footer`,list/root),旧 Core 回退到独立 Web search section,而非 General。搜索子 Fiber 独立等待 routing namespace,不影响账号控件和既有搜索安全检查;实际打包 Desktop 验收仍是独立关卡。
|
|
15
15
|
|
|
@@ -76,7 +76,7 @@ node package/scripts/check-search-composition.mjs --profile-dir /absolute/profil
|
|
|
76
76
|
获准且网络可用时,可通过受支持的 CLI 命令安装:
|
|
77
77
|
|
|
78
78
|
```sh
|
|
79
|
-
dsh plugin --profile web add https://github.com/cloga/dsh-github-copilot/releases/download/v0.4.0-alpha.
|
|
79
|
+
dsh plugin --profile web add https://github.com/cloga/dsh-github-copilot/releases/download/v0.4.0-alpha.27/dsh-github-copilot-0.4.0-alpha.27.tgz
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
若 registry 被公司封禁或不可用,不要更换网络绕行。Desktop 管理的 profile 可以改用[受控离线 CLI 流程](./docs/npm-distribution.md#controlled-offline-cli-maintenance):使用来源获准、校验通过的本地 Release 和已有依赖缓存(`--offline --ignore-scripts`)。预检、备份和授权要求仍然适用。
|
|
@@ -141,7 +141,7 @@ Agent 应把浏览器授权视为需要用户完成的 handoff,而不是自行
|
|
|
141
141
|
5. 确认 **Signed in** 并检查自动发现结果,再请用户选择模型。已登录时打开 Models 会自动确保缺失/过期元数据,新鲜 ready 缓存不发请求。错误可使用 **Retry**,有意强制更新时使用 **Manage → Refresh models**,不作为常规设置步骤。状态读取本身不发现;登录、元数据与真实调用成功是独立证据。
|
|
142
142
|
6. 只有用户明确要求断开账号时才使用 **Sign out**;它会删除 Copilot credential record,但保留 route settings。
|
|
143
143
|
|
|
144
|
-
每个新版本默认同时分发到 GitHub Releases 和 npm,两个渠道使用同一份已验证 tarball。应固定版本并核对所用渠道的证据:Release 的 `SHA256SUMS`;从 npm 安装时另核对 `dist.integrity`。在获准且可用的 registry 网络环境中,优先使用原生 Desktop 包管理器;确认 npm 发布后,它接受 `dsh-github-copilot@0.4.0-alpha.
|
|
144
|
+
每个新版本默认同时分发到 GitHub Releases 和 npm,两个渠道使用同一份已验证 tarball。应固定版本并核对所用渠道的证据:Release 的 `SHA256SUMS`;从 npm 安装时另核对 `dist.integrity`。在获准且可用的 registry 网络环境中,优先使用原生 Desktop 包管理器;确认 npm 发布后,它接受 `dsh-github-copilot@0.4.0-alpha.27`,不是 URL 或本地文件。Desktop 管理的 profile 也允许经明确授权的[受控离线 CLI 维护](./docs/npm-distribution.md#controlled-offline-cli-maintenance):使用已验证的本地 Release 和 `--offline --ignore-scripts`,执行必需的组合预检、私密元数据备份、单写入者控制及安装后差异核验。缓存不足或出现权限拒绝时停止,不绕过公司 registry 封禁,不关闭 TLS 校验;重启仍需单独授权。离线安装成功不表示 npm 联网或发布问题已修好。[双渠道发布与 OIDC 要求](./docs/npm-distribution.md)保持不变。
|
|
145
145
|
|
|
146
146
|
不需要运行 `copilot2api`,不需要外部 gateway、placeholder API key、原始 GitHub token 或单独安装 `dsh-web-search-provider`。
|
|
147
147
|
|
|
@@ -160,13 +160,13 @@ DSH Core 继续负责模型选择、sandbox、工具、附件与其它 provider
|
|
|
160
160
|
|
|
161
161
|
## 可选的规划/执行模型分工
|
|
162
162
|
|
|
163
|
-
在 **设置 → 模型 → 模型分工**
|
|
163
|
+
在 **设置 → 模型 → 模型分工** 中启用双模型会话,选择账号下可用的主模型和执行模型,保存全局设置(同一配置档案内通用,不按工作区保存)。保存不需要工作区;**用此配置新建会话** 使用应用当前工作区,并只读显示目标。没有当前工作区时须先打开工作区,不再提供独立下拉框,也不会默认选择第一个或最近的工作区。主模型负责规划与验收;`copilot_execute` 创建原生可继续执行的子代理,并固定其执行模型。默认关闭,仅专用入口创建的新会话采用此策略;不修改全局默认、已有会话、登录凭据或原生 Subagent 授权开关。
|
|
164
164
|
|
|
165
|
-
模型不可用时明确报错,不自动替换。创建结果不明时重试同一个请求,不为绕过未知结果另建会话。功能依赖公开的会话、策略和子代理能力;缺少接口时显示不可用,不把历史版本的包兼容范围当成此功能的全面验收。详见[配置、生命周期、限制与验证范围](./docs/dual-model.md)。本功能包含在 `0.4.0-alpha.
|
|
165
|
+
模型不可用时明确报错,不自动替换。创建结果不明时重试同一个请求,不为绕过未知结果另建会话。功能依赖公开的会话、策略和子代理能力;缺少接口时显示不可用,不把历史版本的包兼容范围当成此功能的全面验收。详见[配置、生命周期、限制与验证范围](./docs/dual-model.md)。本功能包含在 `0.4.0-alpha.27` candidate 中,源码和合成测试不代表已发布或当前 Desktop 已生效。
|
|
166
166
|
|
|
167
167
|
若卡片显示 **Could not load model roles(无法加载模型分工)**,不要通过修改默认模型绕过:这是设置加载失败,与能力不支持或模型不可用不同。尤其 `githubCopilotDualModel/view` 返回 HTTP 404,表示 Host Remote 未暴露,并非功能开关处于关闭状态。详见[加载故障排查与验证](./docs/dual-model.md#loading-and-remote-troubleshooting)。
|
|
168
168
|
|
|
169
|
-
|
|
169
|
+
模型和搜索 Provider 的原生下拉控件及不可用选项使用成对的应用主题背景/文字颜色,避免深色模式弹出白底浅字列表;缺少主题 token 的旧环境采用可读的系统颜色回退。配色变化不会保存或替换模型/搜索选择。
|
|
170
170
|
|
|
171
171
|
## 全局账号,多模型与独立会话(V3)
|
|
172
172
|
|
|
@@ -396,8 +396,8 @@ node scripts/agent.mjs attribution "DeepSeek Harness (DSH)"
|
|
|
396
396
|
`package.json` 声明公开 npm 分发。Release tag 必须严格等于 `v${package.json.version}`。预发布使用 `alpha`、`beta` 或 `rc` 及对应 npm dist-tag,只有稳定版使用 `latest`。Release workflow 执行 frozen install 和完整门禁,只打包一次(重试恢复原始归档),验证 `SHA256SUMS`,发布不可变 GitHub Release,再通过 OIDC 将同一份字节发布到 npm。任一渠道失败都表示交付未完成。首次建包须由获准环境中的维护者完成;staging 要求包已存在,不能代替首次建包。不会批量补发历史版本。
|
|
397
397
|
|
|
398
398
|
```sh
|
|
399
|
-
curl -LO https://github.com/cloga/dsh-github-copilot/releases/download/v0.4.0-alpha.
|
|
400
|
-
curl -LO https://github.com/cloga/dsh-github-copilot/releases/download/v0.4.0-alpha.
|
|
399
|
+
curl -LO https://github.com/cloga/dsh-github-copilot/releases/download/v0.4.0-alpha.27/dsh-github-copilot-0.4.0-alpha.27.tgz
|
|
400
|
+
curl -LO https://github.com/cloga/dsh-github-copilot/releases/download/v0.4.0-alpha.27/SHA256SUMS
|
|
401
401
|
sha256sum --check SHA256SUMS
|
|
402
402
|
```
|
|
403
403
|
|
|
@@ -405,7 +405,7 @@ PowerShell 可以对已下载的同一组文件执行:
|
|
|
405
405
|
|
|
406
406
|
```powershell
|
|
407
407
|
$expected = (Get-Content .\SHA256SUMS).Split()[0]
|
|
408
|
-
$actual = (Get-FileHash .\dsh-github-copilot-0.4.0-alpha.
|
|
408
|
+
$actual = (Get-FileHash .\dsh-github-copilot-0.4.0-alpha.27.tgz -Algorithm SHA256).Hash.ToLowerInvariant()
|
|
409
409
|
if ($actual -cne $expected) { throw 'Release checksum mismatch' }
|
|
410
410
|
```
|
|
411
411
|
|
package/deployment-baseline.json
CHANGED
package/docs/dual-model.md
CHANGED
|
@@ -6,8 +6,8 @@ Issue [#127](https://github.com/cloga/dsh-github-copilot/issues/127). This is an
|
|
|
6
6
|
|
|
7
7
|
1. Open **Settings → Models → Model roles** (Chinese: **模型分工**). Older supported Clients use the **Copilot · Model roles** settings section.
|
|
8
8
|
2. Enable dual-model sessions and select a **Planning model** and an **Execution model** from this account's available Copilot models. Model names and IDs come from the existing account-discovery service, never an implementation table.
|
|
9
|
-
3. Save the configuration. The revision-checked save affects only this plugin's `github-copilot-dual-model` namespace. No global model default, credential, other provider or existing session is changed.
|
|
10
|
-
4.
|
|
9
|
+
3. Save the profile-global configuration; no workspace is required. The revision-checked save affects only this plugin's `github-copilot-dual-model` namespace, not a per-workspace setting. No global model default, credential, other provider or existing session is changed.
|
|
10
|
+
4. Check the read-only current workspace under **New dedicated session**, then choose **Create session with this configuration**. There is no workspace dropdown. If no current workspace can be established, open one in the application first; the plugin never guesses the first or most recent workspace. Return to the application if the host's settings surface remains open, then enter the task in the new conversation.
|
|
11
11
|
5. The planner clarifies the task, reads evidence and performs acceptance review. `copilot_execute` creates a native continuable execution child using the captured execution route. Its result shows the actual delegated provider/model and child ID; acceptance of the prompt is not completion. The original `send_message`, `list_agents` and `interrupt_agent` capabilities continue the child and expose its status.
|
|
12
12
|
|
|
13
13
|
For example, if the account advertises them, choose GPT 6 for planning and GPT-5.6 Sol Fast for execution. These are examples, not hard-coded defaults or promises of account entitlement. Acceptance uses the planning model. Both roles share the existing Host-only Copilot OAuth lifecycle.
|
|
@@ -26,7 +26,7 @@ The ordinary **Subagent → Allow agents to choose models for subagents** settin
|
|
|
26
26
|
|
|
27
27
|
## Create, retry and recovery
|
|
28
28
|
|
|
29
|
-
The browser generates a request UUID and keeps the original workspace and settings revision after an uncertain create. It never automatically replays creation. A user retry reuses that identity; the Host derives the same session ID, checks the stored operation before mutable settings, and either returns the original session or reports a conflict. It does not create a second root to work around an unknown result. Workspace attachment and session flush use public APIs; partial creation remains explicit and recoverable.
|
|
29
|
+
The browser generates a request UUID and keeps the original workspace and settings revision after an uncertain create, even when the application's current workspace changes or the card remounts under the same Remote owner. It never automatically replays creation. A user retry reuses that identity; the Host derives the same session ID, checks the stored operation before mutable settings, and either returns the original session or reports a conflict. It does not create a second root to work around an unknown result. Workspace attachment and session flush use public APIs; partial creation remains explicit and recoverable.
|
|
30
30
|
|
|
31
31
|
After a confirmed save conflict, reload settings and review the current configuration. During an uncertain creation the original input is held until confirmation. Reloading the whole browser can lose its in-memory pending receipt; inspect the session list before issuing a fresh creation request. The same supplied request UUID remains idempotent on the Host across process restart.
|
|
32
32
|
|
|
@@ -50,7 +50,7 @@ Loading a supported view performs non-forcing account discovery and may use the
|
|
|
50
50
|
|
|
51
51
|
## UI verification captures
|
|
52
52
|
|
|
53
|
-
These
|
|
53
|
+
These historical captures show the actual built component with **synthetic** account/workspace responses, not the production Desktop. They predate the current-workspace change and still show the removed destination dropdown; use the current browser fixture for the updated layout. [Capture provenance and artifact hashes](./images/dual-model-provenance.json) identify the exact evidence.
|
|
54
54
|
|
|
55
55
|

|
|
56
56
|
|
|
@@ -58,9 +58,9 @@ These are the actual built component with **synthetic** account/workspace respon
|
|
|
58
58
|
|
|
59
59
|
## Native dropdown appearance
|
|
60
60
|
|
|
61
|
-
Model
|
|
61
|
+
Model and search-provider selects and their options use the application's surface, primary/secondary text and border tokens. They do not infer the application theme from the operating system. Hosts without the tokens use paired system-color fallbacks. This is presentation only: changing theme does not save settings or replace selections.
|
|
62
62
|
|
|
63
|
-
After building, `node tests/browser/verify-native-selects.mjs --playwright-module /absolute/path/to/existing/playwright-core/index.mjs --channel msedge` runs optional isolated browser checks without installing a browser dependency. It checks computed option/control colors, synthetic contrast, theme switching without remount or writes, 375px layout and enabled-control system fallbacks. The fixtures supply theme tokens rather than global option styling, so fixture CSS cannot hide a missing component style.
|
|
63
|
+
After building, `node tests/browser/verify-native-selects.mjs --playwright-module /absolute/path/to/existing/playwright-core/index.mjs --channel msedge` runs optional isolated browser checks without installing a browser dependency. It checks computed option/control colors, synthetic contrast, theme switching without remount or writes, 375px layout and enabled-control system fallbacks. The fixtures supply theme tokens rather than global option styling, so fixture CSS cannot hide a missing component style. It also exercises English/Chinese workspace flows: save without a workspace, preserve drafts on destination changes, block unknown destinations, and retry the original uncertain creation after navigation. These run against the built card with synthetic props/Remote responses; mounted public-list wiring is covered separately by the integration tests.
|
|
64
64
|
|
|
65
65
|
Page screenshots do not necessarily contain the OS-owned expanded popup. Check the expanded native menu separately on the target browser, including unavailable/disabled entries and the selected highlight. The automated computed-style checks are not full Windows popup-painting or live Desktop acceptance evidence; historical captures above predate this appearance fix.
|
|
66
66
|
|
|
@@ -68,12 +68,15 @@ Page screenshots do not necessarily contain the OS-owned expanded popup. Check t
|
|
|
68
68
|
|
|
69
69
|
The feature reuses public settings, account discovery, scope, Agent creation, Session projection/persistence, workspace attachment, tool restrictions/guards and native continuable subagents. It does not access Core private registries, edit prototypes, patch deployed packages, copy grants, install another wire adapter or require a Core change.
|
|
70
70
|
|
|
71
|
-
Missing
|
|
71
|
+
Missing Host role capabilities yield an unavailable card. Missing Client navigation/list capabilities disable fresh dedicated-session creation, not profile-global configuration. The package's broad compatibility range covers its existing account/search features; it is **not** a promise that this optional flow works on every historical baseline.
|
|
72
|
+
|
|
73
|
+
Current workspace observation uses only the public `sessions.list` and `workspaces.list` snapshot/subscribe faces. On [exact official alpha.2](https://github.com/deepseek-ai/deepseek-harness/blob/ddefc45fbc7f8e46dd73185e68295696d1297887/packages/api/session-controller/src/client/sessions/service.ts), `SessionListState` no longer exposes `current`: the plugin reads the unique `byId` row with positive public `retainedBy.mainView` ownership, matching the source used by [Core's UI Session adapter](https://github.com/deepseek-ai/deepseek-harness/blob/ddefc45fbc7f8e46dd73185e68295696d1297887/packages/client/ui-session/src/client/index.ts). Retained legacy Clients expose `current` directly. Both paths require ready lists and unique workspace membership through `workspaceId` / `sessionIds`. Pending, unavailable or ambiguous selection is not a creation destination. The observer never retains a Session, opens history, reads private navigation state, or calls native new-session navigation. One Remote face per registration owner preserves unsaved edits and uncertain receipts while those lists update.
|
|
72
74
|
|
|
73
75
|
Regression evidence is separated deliberately:
|
|
74
76
|
|
|
75
77
|
- `dual-model-card.spec.ts`: real React DOM/jsdom interaction, bilingual copy, CAS, unavailable models, stale responses and uncertain-create receipt handling.
|
|
76
78
|
- `dual-model-ui.spec.ts`: optional Slot registration, fallback and cleanup.
|
|
79
|
+
- `current-workspace.spec.ts` / `dual-model-workspace-ui.spec.ts`: synthetic public legacy/current-target list shapes, real Cordis dependency tracing and React-mounted Slot callbacks, current-workspace changes without draft loss, optional-service lifetime, and uncertain request retention across navigation and surface remounts. These are not live Desktop navigation certification.
|
|
77
80
|
- `dual-model-remote.spec.ts` / `dual-model-gateway.spec.ts`: strict owned codecs and the actual installed Client Gateway with synthetic RPC. Older Client Gateways do not sanitize successful values or arbitrary nested error details; the Host builds bounded DTOs, and the UI renders only its diagnostic allowlist.
|
|
78
81
|
- `tests/scripts/dual-model-host-gateway.test.mjs`: postbuild Node tests drive the real public Host Connection Fetch handler and Gateway, bypassing Vitest's protocol stub. They cover endpoint exposure, unsupported capabilities, domain input validation, private-method refusal, disposal, and synthetic model/workspace view plus CAS save. SRC JSON fallback does not inherit the Client's strict descriptors; Host validation rejects malformed nested inputs.
|
|
79
82
|
- `dual-model-host.spec.ts`: actual Core Session/projection/scope/tool primitives combined with synthetic Agent, model, persistence and workspace edges. This is not a paid live model run or a full installed Desktop certification.
|
|
@@ -85,7 +88,7 @@ Publication, Desktop installation, runtime activation and successful real model
|
|
|
85
88
|
|
|
86
89
|
## 中文摘要
|
|
87
90
|
|
|
88
|
-
|
|
91
|
+
在设置的「模型分工」卡中启用功能,选择主模型和执行模型,保存同一配置档案内通用的全局设置;保存不需要工作区。「新建专用会话」只读显示应用当前工作区,再点「用此配置新建会话」。没有当前工作区时请先打开工作区,不自动选第一个或最近的工作区,也不再提供独立工作区下拉框。主模型负责规划、读取证据和验收;执行子代理使用创建时固定的模型修改代码、运行测试。不是在同一会话里自动来回切换模型,也不是只靠提示词建议执行者换模型。
|
|
89
92
|
|
|
90
93
|
仅专用入口创建的新会话采用此策略;不修改已有会话、全局默认模型、登录凭据或原生 Subagent 授权开关。模型不可用时明确报错,不自动换模型。需要换角色模型时请另建会话,不要用普通模型选择器改专用角色。插件卸载后不再提供该策略保障;这是协作流程约束,不代替 Core 的沙箱或审批。
|
|
91
94
|
|