dsh-prime-memory 0.26.15 → 0.26.17
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 +16 -0
- package/README.de.md +1 -1
- package/README.en.md +1 -1
- package/README.es.md +1 -1
- package/README.fr.md +1 -1
- package/README.it.md +1 -1
- package/README.ja.md +1 -1
- package/README.ko.md +1 -1
- package/README.md +1 -1
- package/README.ru.md +1 -1
- package/dist/clients/drsc.d.ts +33 -9
- package/dist/clients/drsc.js +43 -11
- package/dist/clients/web-server-origin.d.ts +35 -0
- package/dist/clients/web-server-origin.js +70 -0
- package/dist/hooks/recall.js +5 -0
- package/dist/index.js +8 -2
- package/dist/tools/index.js +7 -1
- package/dsh.plugin.json +3 -3
- package/package.json +12 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# 更新日志(Changelog)
|
|
2
2
|
|
|
3
|
+
## [0.26.17] — 2026-11-02
|
|
4
|
+
|
|
5
|
+
> **三条声明面修复:`memory:profile` 显式关插值(issue #24)、`memory_conflicts` 补两笔成熟度声明(issue #23)、DRSC 基址不再写死 8080(issue #20)**,并把「改视图忘改 schema」从注释纪律改成 CI 闸。无配置变更、无默认行为变更、`engines.dsh` 不动。
|
|
6
|
+
|
|
7
|
+
### 修复
|
|
8
|
+
|
|
9
|
+
- **`memory:profile` 关插值(#24)**:宿主对 systemPrompt 贡献项的 `interpolate` **缺省按 true 处理**,而画像正文由蒸馏产出、库里可能存着宿主自己发的字面 `{{TYPE_id}}` 脱敏 token——不合 `/^[a-z][a-z0-9_]*$/` 即在 prompt 组装期抛错、**整轮报废**。该正文从来不含宿主变量,插值只有风险没有收益,故注册时显式 `interpolate: false` 按原文注入。全 `src` 实测 `systemPrompt.context/section` 只有这一处注册点。
|
|
10
|
+
- **`memory_conflicts` 补声明(#23)**:Phase 3 arm-2/arm-3 给视图加的两笔成熟度旁注(`maturityOf`)没同步到输出 schema,而该 schema 是 `additionalProperties: false`——宿主无损校验对每条返回逐字段拒结,工具自 0.26.11 起**任何调用都读不出**(`memory_resolve_conflict` 的描述还在把人往它指,公示的「先看后裁决」工作流事实上断链)。补 `winner_maturity`/`loser_maturity` 两键(用 `enum ['low','mid','high']` 钉死 `computeMaturity` 的三档值域)。该文件自己就写着「schema 必须跟视图同步」——纪律在注释里,闸在运行期,两者此前没有任何机械约束连着。
|
|
11
|
+
- **DRSC 基址取宿主真实监听口(#20)**:`trustedHosts` 为空时回退写死 `http://127.0.0.1:8080`,而 DSH Desktop App 走随机端口 → `conversation_search` 与蒸馏背景窗在**默认配置下必坏**(0.26.x 的 L0 正文已停写、历史面完全依赖 DRSC,这条链是 load-bearing 的,不是可选增强)。现在第三档兜底取宿主监听 origin,取数逻辑抽到 `src/clients/web-server-origin.ts`(两条取数路径 + 三个抛错入口,需被单测钉住,而不是靠人肉真机核对)。**优先级与降级面钉死四件事**:① origin 只替换那句 8080,不抢 `trustedHosts` 位——现状 `explicit` 是死分支(插件没有该设置项),唯一真实旋钮是宿主 trustedHosts,放上去会把靠 `--trusted-host` 已能工作的用户改到另一个 authority,那是回归;② **优先 `getOrigin()`、再退 `port`**——两条宿主线不同形,已逐线实测取证,别拿一条线当事实:0.2.0-rc.2 源码仓的 webServer **没有** getOrigin(只有 `get port()`/`get host()`),而 0.2.1-rc.5 装机宿主(app.asar 类体)**已有** `getOrigin()`,返回 `${protocol}//${bindUrlHost(host)}:${listenedPort}`,protocol 认 TLS、bind host 走 URL 形式转换,这两个细节插件自己算不出;③ Host 头只在存在非空 trustedHosts 条目时回显(与旧版逐字同口径)——collector 信任门精确匹配 authority,拿条目原串去配带真实端口的 URL 只会把「端口不对」换成「Host 不被信任」;collector 把路由注册在宿主 webServer 上(同监听口),所以宿主 origin 就是正确基址;④ `getOrigin()` 在未 listen / 绑定地址带 zone id 时**主动抛错**(宿主类体原话:`origin read before the listener bound a port`),退 `port` 时又必须 `typeof port === 'number' && port > 0`(`listenedPort` 未 listen 读到 undefined,naive 拼接会产出 `http://127.0.0.1:undefined` 这种能发出但永远错的 URL)——取不到/抛错一律返回 undefined = **逐字节等价旧行为**。`inject` 未动(`webServer` 已在声明里),故老线零变更、`engines.dsh` 不动。
|
|
12
|
+
|
|
13
|
+
### 纪律
|
|
14
|
+
|
|
15
|
+
- 新增 `tests/tool-output-view-sync.test.ts`:对读工具**真实执行一次**,把返回对象的键路径拿去对照它自己声明的 `output.schema`,多一个键即红(`additionalProperties: false` 下这正是宿主的拒绝判据)。同文件另扫每个 `systemPrompt.context({`/`section({` 入参块必须显式含 `interpolate`。两条守卫均已做**红绿验证**:临时撤掉 #23/#24 的修复 → 分别报出 `$.items[0].winner_maturity` 与 `src/hooks/recall.ts:892`。
|
|
16
|
+
- 覆盖面边界(文件头已如实标注):只守「未声明的多余键」这一种(即 #23 的形状),不校验值类型/枚举,不含会改库的写侧工具。
|
|
17
|
+
- 全量 **1880 例**/188 文件绿(基线 1863 例/186 文件;本版新增 ests/tool-output-view-sync.test.ts 10 例与 ests/web-server-origin.test.ts 7 例)。
|
|
18
|
+
|
|
3
19
|
## [0.26.15] — 2026-10-28
|
|
4
20
|
|
|
5
21
|
> 真宿主验证(1197 条 L1 / 380 条 `work_method` 的真实库副本)发现 0.26.14 的**写放大**缺陷,本版修掉。单测没抱住它,因为夹具只有几条记录。
|
package/README.de.md
CHANGED
|
@@ -61,7 +61,7 @@ alt="DeepSeek Harness Hero-Banner: Unterhaltungen werden automatisch zu mehrschi
|
|
|
61
61
|
> Kompatibilitätsmechanismus: Die Settings-Registrierung durchläuft zur Laufzeit drei Zweige
|
|
62
62
|
> (`register` → `installSection`-Brücke → Dauerein-Notbetrieb), siehe Eintrag 0.11.0 im
|
|
63
63
|
> [CHANGELOG.md](./CHANGELOG.md). `dsh.plugin.json` deklariert
|
|
64
|
-
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.
|
|
64
|
+
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.5,20 rc).
|
|
65
65
|
|
|
66
66
|
## Schnellstart
|
|
67
67
|
|
package/README.en.md
CHANGED
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
> Compatibility mechanism: settings registration uses a three-way runtime branch
|
|
62
62
|
> (`register` → `installSection` bridge → always-on degradation); see the 0.11.0 entry
|
|
63
63
|
> in [CHANGELOG.md](./CHANGELOG.md). `dsh.plugin.json` declares
|
|
64
|
-
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.
|
|
64
|
+
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.5,20 rc).
|
|
65
65
|
|
|
66
66
|
## Getting Started
|
|
67
67
|
|
package/README.es.md
CHANGED
|
@@ -61,7 +61,7 @@ alt="Banner hero de DeepSeek Harness: las conversaciones se destilan automática
|
|
|
61
61
|
> Mecanismo de compatibilidad: el registro de ajustes pasa en tiempo de ejecución por tres ramas
|
|
62
62
|
> (`register` → puente `installSection` → degradación a siempre activado),
|
|
63
63
|
> ver la entrada 0.11.0 del [CHANGELOG.md](./CHANGELOG.md). `dsh.plugin.json` declara
|
|
64
|
-
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.
|
|
64
|
+
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.5,20 rc).
|
|
65
65
|
|
|
66
66
|
## Inicio rápido
|
|
67
67
|
|
package/README.fr.md
CHANGED
|
@@ -61,7 +61,7 @@ alt="Bannière hero de DeepSeek Harness : les conversations sont automatiquement
|
|
|
61
61
|
> Mécanisme de compatibilité : l'enregistrement settings passe par trois branches à l'exécution
|
|
62
62
|
> (`register` → pont `installSection` → dégradation en mode toujours actif),
|
|
63
63
|
> voir l'entrée 0.11.0 du [CHANGELOG.md](./CHANGELOG.md). `dsh.plugin.json` déclare
|
|
64
|
-
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.
|
|
64
|
+
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.5,20 rc).
|
|
65
65
|
|
|
66
66
|
## Démarrage rapide
|
|
67
67
|
|
package/README.it.md
CHANGED
|
@@ -61,7 +61,7 @@ alt="Banner hero di DeepSeek Harness: le conversazioni vengono distillate automa
|
|
|
61
61
|
> Meccanismo di compatibilità: la registrazione delle impostazioni passa per tre rami a runtime
|
|
62
62
|
> (`register` → ponte `installSection` → degrado a sempre-attivo),
|
|
63
63
|
> vedi la voce 0.11.0 del [CHANGELOG.md](./CHANGELOG.md). `dsh.plugin.json` dichiara
|
|
64
|
-
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.
|
|
64
|
+
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.5,20 rc).
|
|
65
65
|
|
|
66
66
|
## Avvio rapido
|
|
67
67
|
|
package/README.ja.md
CHANGED
|
@@ -62,7 +62,7 @@ alt="DeepSeek Harness ヒーロー画像:会話がバックグラウンドで
|
|
|
62
62
|
|
|
63
63
|
> 互換メカニズム:settings 登録は 3 分岐のランタイム判定(`register` → `installSection` ブリッジ → 常時オン縮退)。
|
|
64
64
|
> 詳細は [CHANGELOG.md](./CHANGELOG.md) の 0.11.0 エントリ参照。`dsh.plugin.json` は
|
|
65
|
-
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.
|
|
65
|
+
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.5,20 rc) を宣言。
|
|
66
66
|
|
|
67
67
|
## クイックスタート
|
|
68
68
|
|
package/README.ko.md
CHANGED
|
@@ -62,7 +62,7 @@ alt="DeepSeek Harness 히어로 이미지: 대화가 백그라운드에서 계
|
|
|
62
62
|
|
|
63
63
|
> 호환 메커니즘: settings 등록은 3분기 런타임 분기(`register` → `installSection` 브리지 → 상시 온 강등).
|
|
64
64
|
> 자세한 내용은 [CHANGELOG.md](./CHANGELOG.md)의 0.11.0 항목 참조. `dsh.plugin.json`은
|
|
65
|
-
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.
|
|
65
|
+
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.5,20 rc) 선언.
|
|
66
66
|
|
|
67
67
|
## 빠른 시작
|
|
68
68
|
|
package/README.md
CHANGED
|
@@ -60,7 +60,7 @@ alt="DeepSeek Harness hero 横幅:对话自动分层蒸馏成记忆,模型
|
|
|
60
60
|
|
|
61
61
|
> 兼容机制:settings 注册走运行时三分支(`register` → `installSection` 桥接 → 恒开降级),
|
|
62
62
|
> 详见 [CHANGELOG.md](./CHANGELOG.md) 的 0.11.0 条目。`dsh.plugin.json` 声明
|
|
63
|
-
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.
|
|
63
|
+
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.5,20 rc)。
|
|
64
64
|
|
|
65
65
|
## 快速开始
|
|
66
66
|
|
package/README.ru.md
CHANGED
|
@@ -61,7 +61,7 @@ alt="Баннер hero DeepSeek Harness: диалоги автоматическ
|
|
|
61
61
|
> Механизм совместимости: регистрация настроек на этапе исполнения идёт по трём ветвям
|
|
62
62
|
> (`register` → мост `installSection` → деградация в режим «всегда включено»),
|
|
63
63
|
> подробнее — запись 0.11.0 в [CHANGELOG.md](./CHANGELOG.md). `dsh.plugin.json` объявляет
|
|
64
|
-
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.
|
|
64
|
+
> `engines.dsh` 为逐 rc 精确枚举串(0.1.0-rc.2 → 0.2.1-rc.5,20 rc).
|
|
65
65
|
|
|
66
66
|
## Быстрый старт
|
|
67
67
|
|
package/dist/clients/drsc.d.ts
CHANGED
|
@@ -17,10 +17,13 @@
|
|
|
17
17
|
* 分口径处理:蒸馏背景窗空窗降级(runner),工具面显式报错(tools)。
|
|
18
18
|
*
|
|
19
19
|
* 同源 Host 解析(steward drs-source 的 resolveDrsBaseUrl 同款):
|
|
20
|
-
* 显式 baseUrl > 首个 trustedHosts 条目(补 http://)>
|
|
21
|
-
* (
|
|
22
|
-
*
|
|
23
|
-
*
|
|
20
|
+
* 显式 baseUrl > 首个 trustedHosts 条目(补 http://)> 宿主实际监听 origin
|
|
21
|
+
* (issue #20:Desktop App 走随机端口,写死 8080 永远对不上)> `http://127.0.0.1:8080`
|
|
22
|
+
* (宿主缺省口)。Host 头**只回显被选作基址的那个 trustedHosts 条目**:collector
|
|
23
|
+
* 信任门是精确匹配,条目省略端口而 URL 带端口会失配——所以基址来自 origin 兜底时
|
|
24
|
+
* 索性不回显(等价于旧版 trustedHosts 为空时的形状),而不是拿另一个 authority 去撞门。
|
|
25
|
+
* trustedHosts / origin 均惰性读取(webStartup、webServer 可能晚于本插件就绪),
|
|
26
|
+
* 每次请求现算,无缓存陈旧面。
|
|
24
27
|
*/
|
|
25
28
|
import type { ConversationMessage } from '../types.js';
|
|
26
29
|
/** collector API 路径(与其 DRS_API_PATH 字面一致;不跨包 import)。 */
|
|
@@ -33,11 +36,25 @@ export declare class DrscClientError extends Error {
|
|
|
33
36
|
cause?: unknown;
|
|
34
37
|
});
|
|
35
38
|
}
|
|
39
|
+
/** 基址与其来源。 */
|
|
40
|
+
export interface ResolvedDrscBase {
|
|
41
|
+
url: string;
|
|
42
|
+
/** 基址是否取自显式配置或 trustedHosts 条目(即解析序的前两档)。 */
|
|
43
|
+
fromConfigured: boolean;
|
|
44
|
+
}
|
|
45
|
+
/** 供 Host 回显的条目:须与 {@link resolveDrscBaseUrl} 的选取口径逐字一致。 */
|
|
46
|
+
export declare function firstDrscTrustedHost(trustedHosts?: readonly string[]): string | undefined;
|
|
36
47
|
/**
|
|
37
|
-
* 基址解析:显式配置 > 首个 trustedHosts 条目(补 http:// 前缀)>
|
|
38
|
-
* `http://127.0.0.1:8080`(宿主默认口;trustedHosts
|
|
48
|
+
* 基址解析:显式配置 > 首个 trustedHosts 条目(补 http:// 前缀)> 宿主实际监听
|
|
49
|
+
* origin(issue #20 新增的兜底)> `http://127.0.0.1:8080`(宿主默认口;trustedHosts
|
|
50
|
+
* 缺席的老线 collector 门本就放行)。
|
|
51
|
+
*
|
|
52
|
+
* origin 刻意排在 trustedHosts **之下**:它只替换那句写死的 8080。放上去会把
|
|
53
|
+
* 已经能工作的配置(靠 `--trusted-host` 指过地址)改到另一个 authority 上,那是回归。
|
|
39
54
|
*/
|
|
40
|
-
export declare function resolveDrscBaseUrl(explicit: string | undefined, trustedHosts?: readonly string[]): string;
|
|
55
|
+
export declare function resolveDrscBaseUrl(explicit: string | undefined, trustedHosts?: readonly string[], fallbackOrigin?: string): string;
|
|
56
|
+
/** {@link resolveDrscBaseUrl} 的带来源形态,供客户端决定 Host 回显。 */
|
|
57
|
+
export declare function resolveDrscBaseUrlDetail(explicit: string | undefined, trustedHosts?: readonly string[], fallbackOrigin?: string): ResolvedDrscBase;
|
|
41
58
|
/** `op=session` 的一个 segment 行(redact=1 时 text 为脱敏正文;wire 蛇形直取)。 */
|
|
42
59
|
export interface DrscSessionRow {
|
|
43
60
|
seq: number;
|
|
@@ -79,10 +96,15 @@ export declare function drscRoleOf(kind: string): 'user' | 'assistant' | undefin
|
|
|
79
96
|
*/
|
|
80
97
|
export declare function drscRowToConversationMessage(row: DrscSessionRow, sessionId: string): ConversationMessage | undefined;
|
|
81
98
|
export interface DrscClientOptions {
|
|
82
|
-
/** 显式基址(缺省走 trustedHosts → 127.0.0.1:8080,见 resolveDrscBaseUrl)。 */
|
|
99
|
+
/** 显式基址(缺省走 trustedHosts → 宿主 origin → 127.0.0.1:8080,见 resolveDrscBaseUrl)。 */
|
|
83
100
|
baseUrl?: string;
|
|
84
101
|
/** trustedHosts 惰性读取(webStartup 服务可能晚于装配;每次请求现取)。 */
|
|
85
102
|
trustedHosts?: () => readonly string[] | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* 宿主实际监听 origin 惰性读取(issue #20)。webServer 服务可能晚就绪/换实例/
|
|
105
|
+
* 下线,故与 trustedHosts 同款每次现取;取不到即返回 undefined → 落回 8080 老行为。
|
|
106
|
+
*/
|
|
107
|
+
origin?: () => string | undefined;
|
|
86
108
|
/** 注入面(单测);缺省全局 fetch。 */
|
|
87
109
|
fetchImpl?: typeof fetch;
|
|
88
110
|
/** 单请求超时 ms;缺省 {@link DRSC_DEFAULT_TIMEOUT_MS}。 */
|
|
@@ -93,8 +115,10 @@ export declare class DrscClient {
|
|
|
93
115
|
private readonly fetchImpl;
|
|
94
116
|
private readonly timeoutMs;
|
|
95
117
|
constructor(options?: DrscClientOptions);
|
|
96
|
-
/** 每次请求现算基址与 Host 回显(trustedHosts 惰性;无缓存陈旧面)。 */
|
|
118
|
+
/** 每次请求现算基址与 Host 回显(trustedHosts/origin 惰性;无缓存陈旧面)。 */
|
|
97
119
|
private base;
|
|
120
|
+
/** origin 探针失败(服务未就绪/属性读抛)不得影响请求:视作取不到,落老行为。 */
|
|
121
|
+
private safeOrigin;
|
|
98
122
|
/** 一个 GET 的 JSON 包络(非 2xx / ok!==true / 超时 / 断网一律抛 DrscClientError)。 */
|
|
99
123
|
private getJson;
|
|
100
124
|
/**
|
package/dist/clients/drsc.js
CHANGED
|
@@ -9,16 +9,32 @@ export class DrscClientError extends Error {
|
|
|
9
9
|
this.name = 'DrscClientError';
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
|
+
/** 供 Host 回显的条目:须与 {@link resolveDrscBaseUrl} 的选取口径逐字一致。 */
|
|
13
|
+
export function firstDrscTrustedHost(trustedHosts) {
|
|
14
|
+
return trustedHosts?.find((entry) => entry.trim() !== '')?.trim();
|
|
15
|
+
}
|
|
12
16
|
/**
|
|
13
|
-
* 基址解析:显式配置 > 首个 trustedHosts 条目(补 http:// 前缀)>
|
|
14
|
-
* `http://127.0.0.1:8080`(宿主默认口;trustedHosts
|
|
17
|
+
* 基址解析:显式配置 > 首个 trustedHosts 条目(补 http:// 前缀)> 宿主实际监听
|
|
18
|
+
* origin(issue #20 新增的兜底)> `http://127.0.0.1:8080`(宿主默认口;trustedHosts
|
|
19
|
+
* 缺席的老线 collector 门本就放行)。
|
|
20
|
+
*
|
|
21
|
+
* origin 刻意排在 trustedHosts **之下**:它只替换那句写死的 8080。放上去会把
|
|
22
|
+
* 已经能工作的配置(靠 `--trusted-host` 指过地址)改到另一个 authority 上,那是回归。
|
|
15
23
|
*/
|
|
16
|
-
export function resolveDrscBaseUrl(explicit, trustedHosts) {
|
|
24
|
+
export function resolveDrscBaseUrl(explicit, trustedHosts, fallbackOrigin) {
|
|
25
|
+
return resolveDrscBaseUrlDetail(explicit, trustedHosts, fallbackOrigin).url;
|
|
26
|
+
}
|
|
27
|
+
/** {@link resolveDrscBaseUrl} 的带来源形态,供客户端决定 Host 回显。 */
|
|
28
|
+
export function resolveDrscBaseUrlDetail(explicit, trustedHosts, fallbackOrigin) {
|
|
17
29
|
const trimmed = explicit?.trim() ?? '';
|
|
18
|
-
const pick = trimmed !== '' ? trimmed : trustedHosts
|
|
19
|
-
if (pick
|
|
20
|
-
return
|
|
21
|
-
|
|
30
|
+
const pick = trimmed !== '' ? trimmed : firstDrscTrustedHost(trustedHosts);
|
|
31
|
+
if (pick !== undefined && pick !== '') {
|
|
32
|
+
return { url: /^https?:\/\//u.test(pick) ? pick : `http://${pick}`, fromConfigured: true };
|
|
33
|
+
}
|
|
34
|
+
const origin = fallbackOrigin?.trim() ?? '';
|
|
35
|
+
if (origin !== '')
|
|
36
|
+
return { url: origin, fromConfigured: false };
|
|
37
|
+
return { url: 'http://127.0.0.1:8080', fromConfigured: false };
|
|
22
38
|
}
|
|
23
39
|
/** kind → L0 角色词表(memory 只收 user/assistant 两类,其余(tool/* 等)不映射)。 */
|
|
24
40
|
export function drscRoleOf(kind) {
|
|
@@ -80,12 +96,28 @@ export class DrscClient {
|
|
|
80
96
|
this.fetchImpl = options.fetchImpl ?? fetch;
|
|
81
97
|
this.timeoutMs = options.timeoutMs ?? DRSC_DEFAULT_TIMEOUT_MS;
|
|
82
98
|
}
|
|
83
|
-
/** 每次请求现算基址与 Host 回显(trustedHosts 惰性;无缓存陈旧面)。 */
|
|
99
|
+
/** 每次请求现算基址与 Host 回显(trustedHosts/origin 惰性;无缓存陈旧面)。 */
|
|
84
100
|
base() {
|
|
85
101
|
const trusted = this.options.trustedHosts?.() ?? [];
|
|
86
|
-
const
|
|
87
|
-
const
|
|
88
|
-
|
|
102
|
+
const origin = this.safeOrigin();
|
|
103
|
+
const resolved = resolveDrscBaseUrlDetail(this.options.baseUrl, trusted, origin);
|
|
104
|
+
const base = resolved.url.replace(/\/+$/u, '');
|
|
105
|
+
// Host 头只在**存在非空 trustedHosts 条目**时回显(与旧版逐字同口径)。基址来自
|
|
106
|
+
// origin 兜底时本来就没有条目可回显,而 collector 信任门精确匹配 authority,
|
|
107
|
+
// 拿条目原串去配一个带真实端口的 URL 只会失配(#20 的报错面)。
|
|
108
|
+
const echo = resolved.fromConfigured ? firstDrscTrustedHost(trusted) : undefined;
|
|
109
|
+
return { url: `${base}${DRSC_API_PATH}`, ...(echo !== undefined ? { hostHeader: echo } : {}) };
|
|
110
|
+
}
|
|
111
|
+
/** origin 探针失败(服务未就绪/属性读抛)不得影响请求:视作取不到,落老行为。 */
|
|
112
|
+
safeOrigin() {
|
|
113
|
+
if (this.options.origin === undefined)
|
|
114
|
+
return undefined;
|
|
115
|
+
try {
|
|
116
|
+
return this.options.origin();
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
89
121
|
}
|
|
90
122
|
/** 一个 GET 的 JSON 包络(非 2xx / ok!==true / 超时 / 断网一律抛 DrscClientError)。 */
|
|
91
123
|
async getJson(query) {
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* issue #20:宿主实际监听 origin 的降级读取(DrscClient 的第三档兜底)。
|
|
3
|
+
*
|
|
4
|
+
* 为何不写在 index.ts 里:它有两条取数路径 + 三个抛错入口,是需要被单测钉住的可判定
|
|
5
|
+
* 逻辑;埋在装配文件里就只能靠人肉真机核对,而 #20 的整条因果链正是「没人核对过」。
|
|
6
|
+
*
|
|
7
|
+
* 优先取 `getOrigin()`,再退 `port`——两者的可用性已逐线实测取证,别拿一条线当事实:
|
|
8
|
+
* ・0.2.0-rc.2 源码仓的 webServer **没有** getOrigin(),只有 `get port()` / `get host()`;
|
|
9
|
+
* ・0.2.1-rc.5 装机宿主(app.asar 内类体)已有 `getOrigin()`,返回
|
|
10
|
+
* `${protocol}//${bindUrlHost(host)}:${listenedPort}`——protocol 认 TLS、bind host 走
|
|
11
|
+
* URL 形式转换,这两个细节本插件自己算不出来,所以新线一律用它。
|
|
12
|
+
*
|
|
13
|
+
* 三条硬降级理由(缺一就不能发):
|
|
14
|
+
* ① `getOrigin()` 在未 listen / 绑定地址带 zone id 时**主动抛错**(不是返回 undefined),
|
|
15
|
+
* 所以必须包 try——这里抛错是预期的「还没就绪」,不是异常;
|
|
16
|
+
* ② 老线无 getOrigin 时退 `port`:宿主侧 `listenedPort` 未 listen 时读到 undefined,
|
|
17
|
+
* naive 模板串会产出 `http://127.0.0.1:undefined` 这种能发出去但永远错的 URL,
|
|
18
|
+
* 故仅当 `typeof port === 'number' && port > 0` 才用(这条退化路径把 TLS / 非 loopback
|
|
19
|
+
* 绑定当作 http+127.0.0.1 处理——那正是旧版本写死 8080 也没解决的面,不比旧行为更差);
|
|
20
|
+
* ③ cordis Proxy 面对未授权属性会直接抛,故与 webStartup 的 trustedHosts 读取同款两层 try。
|
|
21
|
+
*
|
|
22
|
+
* 一律「取不到就返回 undefined」:调用方据此落回写死的 8080,即逐字节等价旧行为。
|
|
23
|
+
*/
|
|
24
|
+
/** 本模块用到的 webServer 服务面(结构类型,不依赖宿主包类型导出)。 */
|
|
25
|
+
export interface WebServerOriginFace {
|
|
26
|
+
/** 0.2.1-rc.5 起存在;未 listen / 绑定地址无 URL 形式时抛错。 */
|
|
27
|
+
getOrigin?: () => unknown;
|
|
28
|
+
/** OS 分配的实际监听口;未 listen 时为 undefined(老线只有这一档)。 */
|
|
29
|
+
port?: unknown;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 读取宿主监听 origin;任何取不到/抛错都返回 undefined(不抛,不影响请求)。
|
|
33
|
+
* @param ctx - 只用到 webServer 属性与可选的 ctx.get,故类型刻意收窄。
|
|
34
|
+
*/
|
|
35
|
+
export declare function readWebServerOrigin(ctx: unknown): string | undefined;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* issue #20:宿主实际监听 origin 的降级读取(DrscClient 的第三档兜底)。
|
|
3
|
+
*
|
|
4
|
+
* 为何不写在 index.ts 里:它有两条取数路径 + 三个抛错入口,是需要被单测钉住的可判定
|
|
5
|
+
* 逻辑;埋在装配文件里就只能靠人肉真机核对,而 #20 的整条因果链正是「没人核对过」。
|
|
6
|
+
*
|
|
7
|
+
* 优先取 `getOrigin()`,再退 `port`——两者的可用性已逐线实测取证,别拿一条线当事实:
|
|
8
|
+
* ・0.2.0-rc.2 源码仓的 webServer **没有** getOrigin(),只有 `get port()` / `get host()`;
|
|
9
|
+
* ・0.2.1-rc.5 装机宿主(app.asar 内类体)已有 `getOrigin()`,返回
|
|
10
|
+
* `${protocol}//${bindUrlHost(host)}:${listenedPort}`——protocol 认 TLS、bind host 走
|
|
11
|
+
* URL 形式转换,这两个细节本插件自己算不出来,所以新线一律用它。
|
|
12
|
+
*
|
|
13
|
+
* 三条硬降级理由(缺一就不能发):
|
|
14
|
+
* ① `getOrigin()` 在未 listen / 绑定地址带 zone id 时**主动抛错**(不是返回 undefined),
|
|
15
|
+
* 所以必须包 try——这里抛错是预期的「还没就绪」,不是异常;
|
|
16
|
+
* ② 老线无 getOrigin 时退 `port`:宿主侧 `listenedPort` 未 listen 时读到 undefined,
|
|
17
|
+
* naive 模板串会产出 `http://127.0.0.1:undefined` 这种能发出去但永远错的 URL,
|
|
18
|
+
* 故仅当 `typeof port === 'number' && port > 0` 才用(这条退化路径把 TLS / 非 loopback
|
|
19
|
+
* 绑定当作 http+127.0.0.1 处理——那正是旧版本写死 8080 也没解决的面,不比旧行为更差);
|
|
20
|
+
* ③ cordis Proxy 面对未授权属性会直接抛,故与 webStartup 的 trustedHosts 读取同款两层 try。
|
|
21
|
+
*
|
|
22
|
+
* 一律「取不到就返回 undefined」:调用方据此落回写死的 8080,即逐字节等价旧行为。
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* 读取宿主监听 origin;任何取不到/抛错都返回 undefined(不抛,不影响请求)。
|
|
26
|
+
* @param ctx - 只用到 webServer 属性与可选的 ctx.get,故类型刻意收窄。
|
|
27
|
+
*/
|
|
28
|
+
export function readWebServerOrigin(ctx) {
|
|
29
|
+
const svc = getWebServerFace(ctx);
|
|
30
|
+
if (svc === undefined)
|
|
31
|
+
return undefined;
|
|
32
|
+
// 首选宿主自算的 origin:protocol 与 bind host 形式都由它给定
|
|
33
|
+
try {
|
|
34
|
+
if (typeof svc.getOrigin === 'function') {
|
|
35
|
+
const origin = svc.getOrigin();
|
|
36
|
+
if (typeof origin === 'string' && origin.trim() !== '')
|
|
37
|
+
return origin.trim();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
/* 未 listen / 绑定地址带 zone id:落到 port 一档,再落不动即交给调用方缺省 */
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const port = svc.port;
|
|
45
|
+
if (typeof port !== 'number' || !Number.isFinite(port) || port <= 0)
|
|
46
|
+
return undefined;
|
|
47
|
+
return `http://127.0.0.1:${port}`;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** webServer 实例读取(服务可能晚于本插件就绪;属性读抛则当作未就绪)。 */
|
|
54
|
+
function getWebServerFace(ctx) {
|
|
55
|
+
if (typeof ctx !== 'object' || ctx === null)
|
|
56
|
+
return undefined;
|
|
57
|
+
const carrier = ctx;
|
|
58
|
+
try {
|
|
59
|
+
const direct = carrier.webServer;
|
|
60
|
+
const svc = direct !== undefined
|
|
61
|
+
? direct
|
|
62
|
+
: typeof carrier.get === 'function'
|
|
63
|
+
? carrier.get('webServer')
|
|
64
|
+
: undefined;
|
|
65
|
+
return typeof svc === 'object' && svc !== null ? svc : undefined;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
package/dist/hooks/recall.js
CHANGED
|
@@ -723,6 +723,11 @@ usage) {
|
|
|
723
723
|
contextDisposers.push(agent.ctx.systemPrompt.context({
|
|
724
724
|
name: 'memory:profile',
|
|
725
725
|
order: 510,
|
|
726
|
+
// issue #24:正文由蒸馏产出(L3 画像),库里可能存着宿主自己发的字面
|
|
727
|
+
// `{{TYPE_id}}` 脱敏 token。宿主对 interpolate 缺省按 true 处理,遇到不合
|
|
728
|
+
// `/^[a-z][a-z0-9_]*$/` 的变量组即在 prompt 组装期抛错、整轮报废——而本
|
|
729
|
+
// 文本从来不含宿主变量,插值只有风险没有收益,故显式关闭按原文注入。
|
|
730
|
+
interpolate: false,
|
|
726
731
|
text: () => {
|
|
727
732
|
const final = composeStableText(agent.id);
|
|
728
733
|
const ledger = ledgerFor(agent.id);
|
package/dist/index.js
CHANGED
|
@@ -53,6 +53,7 @@ import { ObsoleteNoticeStore } from './store/obsolete-notices.js';
|
|
|
53
53
|
import { registerSlotsProjection } from './projection/slots.js';
|
|
54
54
|
import { registerRecallProjection } from './projection/recall.js';
|
|
55
55
|
import { DrscClient } from './clients/drsc.js';
|
|
56
|
+
import { readWebServerOrigin } from './clients/web-server-origin.js';
|
|
56
57
|
import { errDetail, withFileLog } from './util/filelog.js';
|
|
57
58
|
import { buildRouteChain, resolveModelRoute, invalidateEffortCache } from './llm.js';
|
|
58
59
|
import { effectiveCfg } from './pipeline/runner.js';
|
|
@@ -84,6 +85,8 @@ function readStartupTrustedHosts(ctx) {
|
|
|
84
85
|
}
|
|
85
86
|
return undefined;
|
|
86
87
|
}
|
|
88
|
+
// issue #20:DrscClient 的第三档兜底。取数逻辑已抽到 clients/web-server-origin.ts
|
|
89
|
+
// (两条取数路径 + 三个抛错入口,需要被单测钉住而不是靠人肉真机核对),此处只接线。
|
|
87
90
|
/**
|
|
88
91
|
* 硬依赖:蒸馏要用 llm,工具注册要用 tools,召回注入要用 systemPrompt。
|
|
89
92
|
* 0.1.5 起 connection.rpc.handle() 把 /rpc 路由登记到 webServer 时按**调用方
|
|
@@ -213,8 +216,11 @@ export async function apply(ctx, config) {
|
|
|
213
216
|
// 轨2 技能结晶生产者(issue #15 的缺失环节):装配于下方(依赖 skillStore 就绪)。
|
|
214
217
|
skills: undefined,
|
|
215
218
|
// DRSC 客户端(T8.4 读切):蒸馏背景窗 + conversation_search 工具面的历史供给。
|
|
216
|
-
// 硬依赖无本地回退(l0 表退役);trustedHosts
|
|
217
|
-
drsc: new DrscClient({
|
|
219
|
+
// 硬依赖无本地回退(l0 表退役);trustedHosts 与宿主 origin 均惰性读取(两者可能晚于本插件就绪)。
|
|
220
|
+
drsc: new DrscClient({
|
|
221
|
+
trustedHosts: () => readStartupTrustedHosts(ctx),
|
|
222
|
+
origin: () => readWebServerOrigin(ctx),
|
|
223
|
+
}),
|
|
218
224
|
l0: new L0Store(db),
|
|
219
225
|
l1: new L1Store(dataDir, db, embed, config.recall.strategy, logger, config.recall.decayHalfLifeDays,
|
|
220
226
|
// §D 第 3 路:图谱回链(声明于 stores 之前,embed 查询在下方接线)。
|
package/dist/tools/index.js
CHANGED
|
@@ -1666,7 +1666,7 @@ graphWrite) {
|
|
|
1666
1666
|
loser_id: { type: 'string' },
|
|
1667
1667
|
loser_content: { type: 'string', description: '同上' },
|
|
1668
1668
|
created_at: { type: 'string' },
|
|
1669
|
-
// 以下
|
|
1669
|
+
// 以下 12 项与 conflict-service.listConflictPairs 视图逐一对齐(task 三轴/R1/Phase3):
|
|
1670
1670
|
// execute 直接返回该视图,additionalProperties:false 下少声明任何一个,
|
|
1671
1671
|
// 宿主无损校验即拒("not a declared property"),整工具读不出——schema 必须跟视图同步。
|
|
1672
1672
|
winner_valid_from_ms: { oneOf: [{ type: 'number' }, { type: 'null' }] },
|
|
@@ -1679,6 +1679,12 @@ graphWrite) {
|
|
|
1679
1679
|
defer_count: { type: 'number', description: '复看次数(defer 上限 3)' },
|
|
1680
1680
|
conflict_type: { type: 'string', description: '冲突类型(默认 hard)' },
|
|
1681
1681
|
claim_key: { type: 'string', description: '同主题多对冲突的归并键(空串=未分组)' },
|
|
1682
|
+
// issue #23:Phase 3 arm-2/arm-3 给视图加了两笔成熟度旁注
|
|
1683
|
+
// (conflict-service.ts 的 maturityOf),声明面没跟着走 → `additionalProperties: false`
|
|
1684
|
+
// 下宿主无损校验逐条拒结,整工具读不出。`computeMaturity` 恒返三档、
|
|
1685
|
+
// 无 undefined 无第四值,故用 enum 而不是 free string。
|
|
1686
|
+
winner_maturity: { type: 'string', enum: ['low', 'mid', 'high'], description: '胜方成熟度(读时派生,不参与自动裁决)' },
|
|
1687
|
+
loser_maturity: { type: 'string', enum: ['low', 'mid', 'high'], description: '同上,败方' },
|
|
1682
1688
|
},
|
|
1683
1689
|
additionalProperties: false,
|
|
1684
1690
|
},
|
package/dsh.plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "dsh-prime-memory",
|
|
3
3
|
"name": "dsh-prime-memory",
|
|
4
|
-
"version": "0.26.
|
|
4
|
+
"version": "0.26.17",
|
|
5
5
|
"description": {
|
|
6
6
|
"en": "Layered distilled memory plugin (L0 capture → L1 atomic memory → L2 scenes → L3 persona) with automatic recall injection before each model step.",
|
|
7
7
|
"zh": "L0~L3 分层蒸馏记忆插件:自动捕获对话、抽取原子记忆、整合场景块、蒸馏核心画像,并在模型步骤前自动召回注入。"
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
},
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"engines": {
|
|
16
|
-
"dsh": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4"
|
|
16
|
+
"dsh": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5"
|
|
17
17
|
},
|
|
18
18
|
"components": {
|
|
19
19
|
"host": "dist/index.js",
|
|
20
20
|
"client": "dist/client.js"
|
|
21
21
|
}
|
|
22
|
-
}
|
|
22
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-prime-memory",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.17",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"registry": "https://registry.npmjs.org",
|
|
6
6
|
"access": "public",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
},
|
|
81
81
|
"engines": {
|
|
82
82
|
"node": ">=22.16.0",
|
|
83
|
-
"dsh": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4"
|
|
83
|
+
"dsh": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5"
|
|
84
84
|
},
|
|
85
85
|
"keywords": [
|
|
86
86
|
"dsh",
|
|
@@ -104,15 +104,15 @@
|
|
|
104
104
|
},
|
|
105
105
|
"peerDependencies": {
|
|
106
106
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
107
|
-
"@deepseek-ai/dsh-agent": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4",
|
|
108
|
-
"@deepseek-ai/dsh-client-connection": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4",
|
|
109
|
-
"@deepseek-ai/dsh-client-ui-primitives": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4",
|
|
110
|
-
"@deepseek-ai/dsh-home-paths": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4",
|
|
111
|
-
"@deepseek-ai/dsh-llm": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4",
|
|
112
|
-
"@deepseek-ai/dsh-session": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4",
|
|
113
|
-
"@deepseek-ai/dsh-settings": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4",
|
|
114
|
-
"@deepseek-ai/dsh-system-prompt": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4",
|
|
115
|
-
"@deepseek-ai/dsh-tools": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4"
|
|
107
|
+
"@deepseek-ai/dsh-agent": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5",
|
|
108
|
+
"@deepseek-ai/dsh-client-connection": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5",
|
|
109
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5",
|
|
110
|
+
"@deepseek-ai/dsh-home-paths": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5",
|
|
111
|
+
"@deepseek-ai/dsh-llm": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5",
|
|
112
|
+
"@deepseek-ai/dsh-session": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5",
|
|
113
|
+
"@deepseek-ai/dsh-settings": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5",
|
|
114
|
+
"@deepseek-ai/dsh-system-prompt": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5",
|
|
115
|
+
"@deepseek-ai/dsh-tools": "0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5"
|
|
116
116
|
},
|
|
117
117
|
"peerDependenciesMeta": {
|
|
118
118
|
"@deepseek-ai/dsh-agent": {
|
|
@@ -168,4 +168,4 @@
|
|
|
168
168
|
"typescript-eslint": "^8.69.0",
|
|
169
169
|
"vitest": "^4.1.11"
|
|
170
170
|
}
|
|
171
|
-
}
|
|
171
|
+
}
|