@iasiv5/dsh-skip-browser-auth 0.3.4 → 0.3.5
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/README.md +12 -7
- package/cordis.patch.yml +4 -4
- package/lib/compatibility.js +10 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# @iasiv5/dsh-skip-browser-auth
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@iasiv5/dsh-skip-browser-auth)
|
|
4
|
-
[](#兼容版本)
|
|
5
5
|
[](./LICENSE)
|
|
6
6
|
|
|
7
7
|
个人自用的 DSH Web 插件:在已验证的 DSH compatibility profile 上自动跳过 BrowserAuth,打开 Web 地址即可直接使用,**不必每次把启动 URL 里那串随机 token 抄进浏览器**。
|
|
8
8
|
|
|
9
|
-
- **精确 profile 门控**:当前支持 `0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.7-rc.1`、`0.1.7-rc.2` 与 `0.2.0-rc.
|
|
9
|
+
- **精确 profile 门控**:当前支持 `0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.7-rc.1`、`0.1.7-rc.2`、`0.2.0-rc.1` 与 `0.2.0-rc.2`,按 host/client 兼容代际分组;不是把所有版本塞进同一个实现。
|
|
10
10
|
- **严格成对匹配**:runtime `@deepseek-ai/dsh` 与 `@deepseek-ai/dsh-client-connection` 必须组成已知版本对。混合版本、未知版本、profile 未实现或解析失败都会自动休眠。
|
|
11
|
-
- **分代适配**:`0.1.2-rc.1` 使用 `legacy-web-v1`;`0.1.5-rc.1` 与 `0.1.5-rc.2` 使用 `carrier-neutral-v2`,包含 request body mode、RPC carrier 和对应浏览器 client variant 适配;`0.1.7-rc.1`、`0.1.7-rc.2` 与 `0.2.0-rc.
|
|
11
|
+
- **分代适配**:`0.1.2-rc.1` 使用 `legacy-web-v1`;`0.1.5-rc.1` 与 `0.1.5-rc.2` 使用 `carrier-neutral-v2`,包含 request body mode、RPC carrier 和对应浏览器 client variant 适配;`0.1.7-rc.1`、`0.1.7-rc.2`、`0.2.0-rc.1` 与 `0.2.0-rc.2` 使用 `carrier-neutral-v3`,覆盖 0.1.7 引入、0.2.0 沿用的 `admit()`/OperatorPeer 准入、`connection/request` waterfall 与 mount-preserving BrowserAuth。
|
|
12
12
|
- **不修改 DSH 本体与任何机制**:仅通过 DSH 官方插件 patch 机制替换 Connection 行;卸载或禁用插件并重启,即完全恢复官方行为。
|
|
13
13
|
- **安全提醒**:跳过认证后,Web 对本机/可信网络内的访问不再有身份层,请勿把 DSH 端口暴露给不可信网络。
|
|
14
14
|
|
|
@@ -36,7 +36,7 @@ sudo systemctl restart deepseek-harness.service # 按你的部署方式重启
|
|
|
36
36
|
它支持的精确 compatibility profile:
|
|
37
37
|
- DSH 0.1.2-rc.1:legacy-web-v1
|
|
38
38
|
- DSH 0.1.5-rc.1 / 0.1.5-rc.2:carrier-neutral-v2
|
|
39
|
-
- DSH 0.1.7-rc.1 / 0.1.7-rc.2 / 0.2.0-rc.1:carrier-neutral-v3
|
|
39
|
+
- DSH 0.1.7-rc.1 / 0.1.7-rc.2 / 0.2.0-rc.1 / 0.2.0-rc.2:carrier-neutral-v3
|
|
40
40
|
其它版本或 runtime/connection 混合版本会自动休眠,不要强行处理。
|
|
41
41
|
|
|
42
42
|
1. 先执行 dsh --version 告诉我当前 DSH 版本,然后照常安装:
|
|
@@ -44,7 +44,7 @@ sudo systemctl restart deepseek-harness.service # 按你的部署方式重启
|
|
|
44
44
|
2. 重启 DSH Web 并轮询 http://127.0.0.1:3080 直到恢复 200
|
|
45
45
|
(systemd 系统级部署:sudo systemctl restart deepseek-harness.service;
|
|
46
46
|
user 级部署:systemctl --user restart dsh-web.service;端口以实际部署为准)。
|
|
47
|
-
3. 若版本是 0.1.2-rc.1、0.1.5-rc.1、0.1.5-rc.2、0.1.7-rc.1、0.1.7-rc.2 或 0.2.0-rc.
|
|
47
|
+
3. 若版本是 0.1.2-rc.1、0.1.5-rc.1、0.1.5-rc.2、0.1.7-rc.1、0.1.7-rc.2、0.2.0-rc.1 或 0.2.0-rc.2:
|
|
48
48
|
确认 journal/日志中出现固定警告
|
|
49
49
|
"BrowserAuth has been skipped",并验证浏览器直接打开 Web 地址不再要求 token。
|
|
50
50
|
4. 若版本不是精确白名单版本,或 profile/依赖契约不匹配:插件应自动休眠,
|
|
@@ -69,7 +69,8 @@ sudo systemctl restart deepseek-harness.service
|
|
|
69
69
|
| `0.1.5-rc.2` + `0.1.5-rc.2` | `carrier-neutral-v2` | 同上(rc.2 为 rc.1 的重发布:代码逐字节一致) | ✅ active(npm diff 审计 + 真实 rc.2 npm fixture 组合测试已验证;真实部署仍需按清单确认) |
|
|
70
70
|
| `0.1.7-rc.1` + `0.1.7-rc.1` | `carrier-neutral-v3` | carrier-neutral-017:admit()/OperatorPeer + `connection/request` waterfall + mount-preserving BrowserAuth + 0.1.7 client | ✅ active(npm diff 审计:插件契约面与 rc.2 逐字节一致 + 真实 rc.1 npm fixture 组合测试,见 docs/COMPATIBILITY.md §5.5;真实部署仍需按清单确认) |
|
|
71
71
|
| `0.1.7-rc.2` + `0.1.7-rc.2` | `carrier-neutral-v3` | 同上 | ✅ active(真实 npm fixture 组合测试 + 2026-09-26 实机 checklist 与回滚演练,见 docs/DESIGN.md) |
|
|
72
|
-
| `0.2.0-rc.1` + `0.2.0-rc.1` | `carrier-neutral-v3` | 同上(0.2.0-rc.1 为依赖对齐重发布:插件契约面代码逐字节一致) | ✅ active(npm diff 审计 + 真实 0.2.0-rc.1 npm fixture 组合测试,见 docs/COMPATIBILITY.md §5.6
|
|
72
|
+
| `0.2.0-rc.1` + `0.2.0-rc.1` | `carrier-neutral-v3` | 同上(0.2.0-rc.1 为依赖对齐重发布:插件契约面代码逐字节一致) | ✅ active(npm diff 审计 + 真实 0.2.0-rc.1 npm fixture 组合测试,见 docs/COMPATIBILITY.md §5.6;2026-09-29 实机 checklist 已确认) |
|
|
73
|
+
| `0.2.0-rc.2` + `0.2.0-rc.2` | `carrier-neutral-v3` | 同上(0.2.0-rc.2 为依赖对齐重发布 + 无关 Desktop CLI 演进:插件契约面代码逐字节一致) | ✅ active(npm diff 审计 + 真实 0.2.0-rc.2 npm fixture 组合测试,见 docs/COMPATIBILITY.md §5.7;实机 checklist 见当日升级记录) |
|
|
73
74
|
| 其它版本或混合版本对 | — | 😴 自动休眠:官方行为分毫不变 | dormant |
|
|
74
75
|
|
|
75
76
|
白名单匹配的是**完整版本对**,不是两个独立的 `includes()`:
|
|
@@ -86,6 +87,9 @@ runtime=0.1.7-rc.2 + connection=0.1.7-rc.2 → carrier-neutral-v3
|
|
|
86
87
|
runtime=0.1.7-rc.2 + connection=0.2.0-rc.1 → dormant(同代际跨 minor 混合同样是事故形态)
|
|
87
88
|
runtime=0.2.0-rc.1 + connection=0.1.7-rc.2 → dormant
|
|
88
89
|
runtime=0.2.0-rc.1 + connection=0.2.0-rc.1 → carrier-neutral-v3
|
|
90
|
+
runtime=0.2.0-rc.1 + connection=0.2.0-rc.2 → dormant(同代际跨 patch 混合同样是事故形态)
|
|
91
|
+
runtime=0.2.0-rc.2 + connection=0.2.0-rc.1 → dormant
|
|
92
|
+
runtime=0.2.0-rc.2 + connection=0.2.0-rc.2 → carrier-neutral-v3
|
|
89
93
|
runtime=0.1.7-rc.2 + connection=0.1.5-rc.2 → dormant(跨代际混合)
|
|
90
94
|
```
|
|
91
95
|
|
|
@@ -98,7 +102,7 @@ runtime=0.1.7-rc.2 + connection=0.1.5-rc.2 → dormant(跨代际混合)
|
|
|
98
102
|
- `legacy-web-v1` 保留 0.1.2 的 `/api` prefix 与 buffered bridge。
|
|
99
103
|
- `carrier-neutral-v2` 使用 runtime loader 取得当前 0.1.5 connection module,支持 `requestBodyMode`、exact Fetch route 和 streaming body,并将 generic `connection.rpc.handle()` 绑定到拥有 Web carrier 的 replacement context,避免 0.1.5 的 405 回归。
|
|
100
104
|
- `carrier-neutral-v3` 在 v2 契约之上复刻 0.1.7 的三处新语义:`/api` 准入改走 `admit()`(OperatorPeer 作为 RPC handler 第 4 参传入)、共享通道请求经 `connection/request` waterfall(监听插件继续可见)、BrowserAuth stub 使用 mount-preserving URL 语义(token 清理 303 `./`、启动 URL 保留 mount)。
|
|
101
|
-
- client bundle 是显式 profile dispatcher:host 通过 `webserver/index-inject` 注入 profile id,0.1.2/0.1.5/0.1.7 代际使用各自官方 factory(`0.2.0-rc.1` 与 `0.1.7` 契约逐字节一致,共用 0.1.7 factory);profile 缺失或未知时不猜测、不加载错误 variant。
|
|
105
|
+
- client bundle 是显式 profile dispatcher:host 通过 `webserver/index-inject` 注入 profile id,0.1.2/0.1.5/0.1.7 代际使用各自官方 factory(`0.2.0-rc.1`/`0.2.0-rc.2` 与 `0.1.7` 契约逐字节一致,共用 0.1.7 factory);profile 缺失或未知时不猜测、不加载错误 variant。
|
|
102
106
|
- 激活时进程逐字输出固定警告:
|
|
103
107
|
|
|
104
108
|
```text
|
|
@@ -131,6 +135,7 @@ git diff --exit-code cordis.patch.yml
|
|
|
131
135
|
- 真实 0.1.5 dedicated `connection.rpc.handle()`、exact Fetch route 和 405 回归
|
|
132
136
|
- 真实 0.1.7 `admit()`/OperatorPeer、`connection/request` waterfall、mount-preserving token 清理、同代际跨 patch 混合 dormant(rc.1 ↔ rc.2)与跨代际混合 dormant
|
|
133
137
|
- 真实 0.2.0-rc.1 `admit()`/OperatorPeer、waterfall、mount-preserving token 清理、跨 minor 混合 dormant(0.1.7 ↔ 0.2.0 双向)与 npm flat 布局
|
|
138
|
+
- 真实 0.2.0-rc.2 `admit()`/OperatorPeer、waterfall、mount-preserving token 清理、同代际跨 patch 混合 dormant(0.2.0-rc.1 ↔ 0.2.0-rc.2 双向)与 npm flat 布局
|
|
134
139
|
- 三个官方 client factory 的 materialization、profile dispatcher 和未知 profile fail-closed
|
|
135
140
|
- rc.2 dormant 基线、dispose/unload、Host/Origin/Fetch Metadata trust fence
|
|
136
141
|
|
package/cordis.patch.yml
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
disabled: !!js >-
|
|
13
13
|
(() => { try { const profile = ((() => { try { const internal = ctx.loader && ctx.loader.internal; if (!internal || typeof internal.resolveSync !== 'function') return null; const versionOfUrl = (url, patternSource) => { if (typeof url !== 'string') return null; const decoded = decodeURIComponent(url); const segmented = decoded.match(new RegExp(patternSource)); if (segmented !== null) return segmented[1]; if (decoded.slice(0, 5) === 'file:') { const processRef = globalThis.process; if (processRef === null || typeof processRef !== 'object' || typeof processRef.getBuiltinModule !== 'function') return null; const fsModule = processRef.getBuiltinModule('node:fs'); const urlModule = processRef.getBuiltinModule('node:url'); if (!fsModule || typeof fsModule.readFileSync !== 'function' || !urlModule || typeof urlModule.fileURLToPath !== 'function') return null; const manifest = JSON.parse(fsModule.readFileSync(urlModule.fileURLToPath(url), 'utf8')); return manifest !== null && typeof
|
|
14
14
|
manifest === 'object' && typeof manifest.version === 'string' ? manifest.version : null; } return null; }; const anchors = [["@deepseek-ai/dsh","[+]dsh@([^/_]+)[_/]"],["@deepseek-ai/dsh-client-connection","[+]dsh-client-connection@([^/_]+)[_/]"]]; const versions = []; for (const [anchorPackage, patternSource] of anchors) { const specifier = anchorPackage + '/package.json'; let url; try { url = internal.version === 'v2' ? internal.resolveSync(ctx.baseUrl, { specifier, attributes: {} }).url : internal.resolveSync(specifier, ctx.baseUrl, {}).url; } catch (gateError) { return null; } let anchorVersion; try { anchorVersion = versionOfUrl(url, patternSource); } catch (gateError) { return null; } if (anchorVersion === null) return null; versions.push(anchorVersion); } const profiles =
|
|
15
|
-
[{"id":"legacy-web-v1","pairs":[{"runtime":"0.1.2-rc.1","connection":"0.1.2-rc.1"}]},{"id":"carrier-neutral-v2","pairs":[{"runtime":"0.1.5-rc.1","connection":"0.1.5-rc.1"},{"runtime":"0.1.5-rc.2","connection":"0.1.5-rc.2"}]},{"id":"carrier-neutral-v3","pairs":[{"runtime":"0.1.7-rc.1","connection":"0.1.7-rc.1"},{"runtime":"0.1.7-rc.2","connection":"0.1.7-rc.2"},{"runtime":"0.2.0-rc.1","connection":"0.2.0-rc.1"}]}]; for (const profile of profiles) { if (profile.pairs.some((pair) => pair.runtime === versions[0] && pair.connection === versions[1])) return profile.id; } return null; } catch (gateError) { return null; } })()); return profile !== null && ["legacy-web-v1","carrier-neutral-v2","carrier-neutral-v3"].includes(profile); } catch (gateError) { return false; } })()
|
|
15
|
+
[{"id":"legacy-web-v1","pairs":[{"runtime":"0.1.2-rc.1","connection":"0.1.2-rc.1"}]},{"id":"carrier-neutral-v2","pairs":[{"runtime":"0.1.5-rc.1","connection":"0.1.5-rc.1"},{"runtime":"0.1.5-rc.2","connection":"0.1.5-rc.2"}]},{"id":"carrier-neutral-v3","pairs":[{"runtime":"0.1.7-rc.1","connection":"0.1.7-rc.1"},{"runtime":"0.1.7-rc.2","connection":"0.1.7-rc.2"},{"runtime":"0.2.0-rc.1","connection":"0.2.0-rc.1"},{"runtime":"0.2.0-rc.2","connection":"0.2.0-rc.2"}]}]; for (const profile of profiles) { if (profile.pairs.some((pair) => pair.runtime === versions[0] && pair.connection === versions[1])) return profile.id; } return null; } catch (gateError) { return null; } })()); return profile !== null && ["legacy-web-v1","carrier-neutral-v2","carrier-neutral-v3"].includes(profile); } catch (gateError) { return false; } })()
|
|
16
16
|
- insert:
|
|
17
17
|
- id: trusted-connection
|
|
18
18
|
name: '@iasiv5/dsh-skip-browser-auth'
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
compatibilityProfile: !!js >-
|
|
24
24
|
(() => { try { const internal = ctx.loader && ctx.loader.internal; if (!internal || typeof internal.resolveSync !== 'function') return null; const versionOfUrl = (url, patternSource) => { if (typeof url !== 'string') return null; const decoded = decodeURIComponent(url); const segmented = decoded.match(new RegExp(patternSource)); if (segmented !== null) return segmented[1]; if (decoded.slice(0, 5) === 'file:') { const processRef = globalThis.process; if (processRef === null || typeof processRef !== 'object' || typeof processRef.getBuiltinModule !== 'function') return null; const fsModule = processRef.getBuiltinModule('node:fs'); const urlModule = processRef.getBuiltinModule('node:url'); if (!fsModule || typeof fsModule.readFileSync !== 'function' || !urlModule || typeof urlModule.fileURLToPath !== 'function') return null; const manifest = JSON.parse(fsModule.readFileSync(urlModule.fileURLToPath(url), 'utf8')); return manifest !== null && typeof manifest === 'object' && typeof
|
|
25
25
|
manifest.version === 'string' ? manifest.version : null; } return null; }; const anchors = [["@deepseek-ai/dsh","[+]dsh@([^/_]+)[_/]"],["@deepseek-ai/dsh-client-connection","[+]dsh-client-connection@([^/_]+)[_/]"]]; const versions = []; for (const [anchorPackage, patternSource] of anchors) { const specifier = anchorPackage + '/package.json'; let url; try { url = internal.version === 'v2' ? internal.resolveSync(ctx.baseUrl, { specifier, attributes: {} }).url : internal.resolveSync(specifier, ctx.baseUrl, {}).url; } catch (gateError) { return null; } let anchorVersion; try { anchorVersion = versionOfUrl(url, patternSource); } catch (gateError) { return null; } if (anchorVersion === null) return null; versions.push(anchorVersion); } const profiles =
|
|
26
|
-
[{"id":"legacy-web-v1","pairs":[{"runtime":"0.1.2-rc.1","connection":"0.1.2-rc.1"}]},{"id":"carrier-neutral-v2","pairs":[{"runtime":"0.1.5-rc.1","connection":"0.1.5-rc.1"},{"runtime":"0.1.5-rc.2","connection":"0.1.5-rc.2"}]},{"id":"carrier-neutral-v3","pairs":[{"runtime":"0.1.7-rc.1","connection":"0.1.7-rc.1"},{"runtime":"0.1.7-rc.2","connection":"0.1.7-rc.2"},{"runtime":"0.2.0-rc.1","connection":"0.2.0-rc.1"}]}]; for (const profile of profiles) { if (profile.pairs.some((pair) => pair.runtime === versions[0] && pair.connection === versions[1])) return profile.id; } return null; } catch (gateError) { return null; } })()
|
|
26
|
+
[{"id":"legacy-web-v1","pairs":[{"runtime":"0.1.2-rc.1","connection":"0.1.2-rc.1"}]},{"id":"carrier-neutral-v2","pairs":[{"runtime":"0.1.5-rc.1","connection":"0.1.5-rc.1"},{"runtime":"0.1.5-rc.2","connection":"0.1.5-rc.2"}]},{"id":"carrier-neutral-v3","pairs":[{"runtime":"0.1.7-rc.1","connection":"0.1.7-rc.1"},{"runtime":"0.1.7-rc.2","connection":"0.1.7-rc.2"},{"runtime":"0.2.0-rc.1","connection":"0.2.0-rc.1"},{"runtime":"0.2.0-rc.2","connection":"0.2.0-rc.2"}]}]; for (const profile of profiles) { if (profile.pairs.some((pair) => pair.runtime === versions[0] && pair.connection === versions[1])) return profile.id; } return null; } catch (gateError) { return null; } })()
|
|
27
27
|
disabled: !!js >-
|
|
28
28
|
!((() => { try { const self = ctx[Symbol.for('cordis.entry')]; if (!self || !self.parent || !self.parent.tree) return false; const official = self.parent.tree.resolve('connection'); if (!official || official.parent !== self.parent) return false; if (official.options.id !== 'connection' || official.options.name !== '@deepseek-ai/dsh-client-connection') return false; const probeAllowed = ((() => { try { const profile = ((() => { try { const internal = ctx.loader && ctx.loader.internal; if (!internal || typeof internal.resolveSync !== 'function') return null; const versionOfUrl = (url, patternSource) => { if (typeof url !== 'string') return null; const decoded = decodeURIComponent(url); const segmented = decoded.match(new RegExp(patternSource)); if (segmented !== null) return segmented[1]; if (decoded.slice(0, 5) === 'file:') { const processRef = globalThis.process; if (processRef === null || typeof processRef !== 'object' || typeof processRef.getBuiltinModule !== 'function')
|
|
29
29
|
return null; const fsModule = processRef.getBuiltinModule('node:fs'); const urlModule = processRef.getBuiltinModule('node:url'); if (!fsModule || typeof fsModule.readFileSync !== 'function' || !urlModule || typeof urlModule.fileURLToPath !== 'function') return null; const manifest = JSON.parse(fsModule.readFileSync(urlModule.fileURLToPath(url), 'utf8')); return manifest !== null && typeof manifest === 'object' && typeof manifest.version === 'string' ? manifest.version : null; } return null; }; const anchors = [["@deepseek-ai/dsh","[+]dsh@([^/_]+)[_/]"],["@deepseek-ai/dsh-client-connection","[+]dsh-client-connection@([^/_]+)[_/]"]]; const versions = []; for (const [anchorPackage, patternSource] of anchors) { const specifier = anchorPackage + '/package.json'; let url; try { url = internal.version === 'v2' ? internal.resolveSync(ctx.baseUrl, { specifier, attributes: {} }).url : internal.resolveSync(specifier, ctx.baseUrl, {}).url; } catch (gateError) { return null; } let
|
|
30
|
-
anchorVersion; try { anchorVersion = versionOfUrl(url, patternSource); } catch (gateError) { return null; } if (anchorVersion === null) return null; versions.push(anchorVersion); } const profiles = [{"id":"legacy-web-v1","pairs":[{"runtime":"0.1.2-rc.1","connection":"0.1.2-rc.1"}]},{"id":"carrier-neutral-v2","pairs":[{"runtime":"0.1.5-rc.1","connection":"0.1.5-rc.1"},{"runtime":"0.1.5-rc.2","connection":"0.1.5-rc.2"}]},{"id":"carrier-neutral-v3","pairs":[{"runtime":"0.1.7-rc.1","connection":"0.1.7-rc.1"},{"runtime":"0.1.7-rc.2","connection":"0.1.7-rc.2"},{"runtime":"0.2.0-rc.1","connection":"0.2.0-rc.1"}]}]; for (const profile of profiles) { if (profile.pairs.some((pair) => pair.runtime === versions[0] && pair.connection === versions[1])) return profile.id; } return null; } catch (gateError) { return null; } })()); return profile !== null && ["legacy-web-v1","carrier-neutral-v2","carrier-neutral-v3"].includes(profile); } catch
|
|
31
|
-
(probeAllowed !== true) return false; return official.disabled === true; } catch (gateError) { return false; } })())
|
|
30
|
+
anchorVersion; try { anchorVersion = versionOfUrl(url, patternSource); } catch (gateError) { return null; } if (anchorVersion === null) return null; versions.push(anchorVersion); } const profiles = [{"id":"legacy-web-v1","pairs":[{"runtime":"0.1.2-rc.1","connection":"0.1.2-rc.1"}]},{"id":"carrier-neutral-v2","pairs":[{"runtime":"0.1.5-rc.1","connection":"0.1.5-rc.1"},{"runtime":"0.1.5-rc.2","connection":"0.1.5-rc.2"}]},{"id":"carrier-neutral-v3","pairs":[{"runtime":"0.1.7-rc.1","connection":"0.1.7-rc.1"},{"runtime":"0.1.7-rc.2","connection":"0.1.7-rc.2"},{"runtime":"0.2.0-rc.1","connection":"0.2.0-rc.1"},{"runtime":"0.2.0-rc.2","connection":"0.2.0-rc.2"}]}]; for (const profile of profiles) { if (profile.pairs.some((pair) => pair.runtime === versions[0] && pair.connection === versions[1])) return profile.id; } return null; } catch (gateError) { return null; } })()); return profile !== null && ["legacy-web-v1","carrier-neutral-v2","carrier-neutral-v3"].includes(profile); } catch
|
|
31
|
+
(gateError) { return false; } })()); if (probeAllowed !== true) return false; return official.disabled === true; } catch (gateError) { return false; } })())
|
package/lib/compatibility.js
CHANGED
|
@@ -56,11 +56,21 @@ export const COMPATIBILITY_PROFILES = [
|
|
|
56
56
|
// (dsh-app-boot OPTIONAL_BUNDLES, web-app patch telemetry/schedule rows)
|
|
57
57
|
// never intersect the connection contract. No second 0.1.x-line build input
|
|
58
58
|
// is introduced: the rc17 client variant keeps anchoring at 0.1.7-rc.2.
|
|
59
|
+
//
|
|
60
|
+
// 0.2.0-rc.2 joined for the same reason (§5.7): another dependency-alignment
|
|
61
|
+
// republish on the contract face — lib/+client/ byte-identical in all anchor
|
|
62
|
+
// packages (web-app's whole diff is package.json, so cordis.patch.yml and its
|
|
63
|
+
// connection row are byte-identical too) — plus unrelated Desktop-only
|
|
64
|
+
// plugin-management CLI changes in the runtime (bin.js, lib/types/*.d.ts) and
|
|
65
|
+
// a ModuleLoader chunk-hash rename whose 34 changed lines all sit in that CLI
|
|
66
|
+
// area with resolveSync usage line-identical. rc17 keeps anchoring at
|
|
67
|
+
// 0.1.7-rc.2; no second 0.2.x-line build input is introduced.
|
|
59
68
|
id: 'carrier-neutral-v3',
|
|
60
69
|
pairs: [
|
|
61
70
|
{ runtime: '0.1.7-rc.1', connection: '0.1.7-rc.1' },
|
|
62
71
|
{ runtime: '0.1.7-rc.2', connection: '0.1.7-rc.2' },
|
|
63
72
|
{ runtime: '0.2.0-rc.1', connection: '0.2.0-rc.1' },
|
|
73
|
+
{ runtime: '0.2.0-rc.2', connection: '0.2.0-rc.2' },
|
|
64
74
|
],
|
|
65
75
|
hostAdapter: 'carrier-neutral-017',
|
|
66
76
|
clientVariant: 'rc17',
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iasiv5/dsh-skip-browser-auth",
|
|
3
|
-
"version": "0.3.
|
|
4
|
-
"description": "替换官方 Connection 提供方跳过 BrowserAuth,免输 Token;已适配 0.1.2-rc.1、0.1.5-rc.1/rc.2、0.1.7-rc.1/rc.2 与 0.2.0-rc.1,详见仓库。",
|
|
3
|
+
"version": "0.3.5",
|
|
4
|
+
"description": "替换官方 Connection 提供方跳过 BrowserAuth,免输 Token;已适配 0.1.2-rc.1、0.1.5-rc.1/rc.2、0.1.7-rc.1/rc.2 与 0.2.0-rc.1/rc.2,详见仓库。",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dsh",
|
|
7
7
|
"deepseek-harness",
|