@goodandready/dsh-clinebot 0.6.30 → 0.6.31
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 +6 -0
- package/README.md +1 -1
- package/README.ru.md +1 -1
- package/README.zh.md +1 -1
- package/lib/http.js +2 -2
- package/lib/index.js +427 -426
- package/lib/path-safety.js +57 -4
- package/lib/price-sync.js +2 -5
- package/lib/provider-sync.js +258 -275
- package/lib/stats-storage.js +2 -27
- package/lib/transport/cline-transport.js +1 -1
- package/lib/updater.js +4 -9
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,12 @@ All notable changes to `@goodandready/dsh-clinebot` will be documented in this f
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.6.31] - 2026-11-07
|
|
9
|
+
|
|
10
|
+
### Security & Bug Fixes
|
|
11
|
+
- **Profile Data Isolation (`DSH_HOME`)**: Stats, event logs, price cache, and models cache resolve strictly within the active `DSH_HOME` directory, preventing data leakage into `$HOME/.dsh` when isolated profiles are configured (#299).
|
|
12
|
+
- **Updater Hostname Hardening**: Origin hostname verification in `isTrustedUpdateRequest` now strictly uses `isLoopbackHostname`, rejecting non-loopback domains starting with `127.` such as `127.attacker.example` (#294).
|
|
13
|
+
|
|
8
14
|
## [0.6.30] - 2026-11-06
|
|
9
15
|
|
|
10
16
|
### Fixed
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
<h3>Native ClineBot / ClinePass Provider Companion for DeepSeek Harness</h3>
|
|
6
6
|
|
|
7
|
-
<p><b>0.6.
|
|
7
|
+
<p><b>0.6.31</b> ensures strict profile data isolation (telemetry, stats, events, and price cache resolve strictly inside active <code>DSH_HOME</code> without leaking into <code>~/.dsh</code>, #299) and hardens updater loopback verification (origin hostname check with <code>isLoopbackHostname</code> rejects external domains like <code>127.attacker.example</code>, #294). Maintains full security boundary, default-disabled screen badges (#297), DSH <code>0.2.2-rc.1</code> compatibility, and native <code>ctx.llm</code> adapter.</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
10
|
<a href="https://www.npmjs.com/package/@goodandready/dsh-clinebot"><img src="https://img.shields.io/npm/v/@goodandready/dsh-clinebot.svg?style=for-the-badge&color=6366f1&labelColor=1e1b4b" alt="npm version"></a>
|
package/README.ru.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
<h3>Нативное подключение провайдера ClineBot / ClinePass для DeepSeek Harness</h3>
|
|
6
6
|
|
|
7
|
-
<p><b>0.6.
|
|
7
|
+
<p><b>0.6.31</b> обеспечивает строгую изоляцию профилей (телеметрия, статистика, логи событий и кэш цен сохраняются строго внутри активного <code>DSH_HOME</code> без утечки в <code>~/.dsh</code>, #299) и усиливает безопасность updater'а (проверка origin hostname через <code>isLoopbackHostname</code> отклоняет домены вида <code>127.attacker.example</code>, #294). Сохраняются полная security-граница, экранные значки, отключенные по умолчанию (#297), поддержка DSH <code>0.2.2-rc.1</code> и нативный адаптер <code>ctx.llm</code>.</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
10
|
<a href="https://www.npmjs.com/package/@goodandready/dsh-clinebot"><img src="https://img.shields.io/npm/v/@goodandready/dsh-clinebot.svg?style=for-the-badge&color=6366f1&labelColor=1e1b4b" alt="npm version"></a>
|
package/README.zh.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
<h3>适用于 DeepSeek Harness 的 ClineBot / ClinePass 原生模型提供商伴侣插件</h3>
|
|
6
6
|
|
|
7
|
-
<p><b>0.6.
|
|
7
|
+
<p><b>0.6.31</b> 保证严格的配置隔离(统计信息、遥测、事件日志与价格缓存严格存储在激活的 <code>DSH_HOME</code> 目录中,防止泄露至 <code>~/.dsh</code>,#299),并加固更新器的回环验证(通过 <code>isLoopbackHostname</code> 拒绝形如 <code>127.attacker.example</code> 的域名,#294)。保留完整安全边界、默认禁用的屏幕指示器 (#297)、DSH <code>0.2.2-rc.1</code> 兼容性及原生 <code>ctx.llm</code> 适配器。</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
10
|
<a href="https://www.npmjs.com/package/@goodandready/dsh-clinebot"><img src="https://img.shields.io/npm/v/@goodandready/dsh-clinebot.svg?style=for-the-badge&color=6366f1&labelColor=1e1b4b" alt="npm version"></a>
|
package/lib/http.js
CHANGED
|
@@ -46,14 +46,14 @@ function header(request, name) {
|
|
|
46
46
|
return Array.isArray(value) ? value[0] : value
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
function isLoopbackAddress(value) {
|
|
49
|
+
export function isLoopbackAddress(value) {
|
|
50
50
|
const address = String(value || '').toLowerCase().replace(/^\[|\]$/g, '')
|
|
51
51
|
return address === 'localhost' || address === 'localhost.' || address === '::1'
|
|
52
52
|
|| address.startsWith('127.')
|
|
53
53
|
|| address.startsWith('::ffff:127.')
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
function isLoopbackHostname(value) {
|
|
56
|
+
export function isLoopbackHostname(value) {
|
|
57
57
|
const host = String(value || '').toLowerCase().replace(/^\[|\]$/g, '')
|
|
58
58
|
if (host === 'localhost' || host === 'localhost.' || host === '::1') return true
|
|
59
59
|
const parts = host.split('.')
|