dsh-prime-memory 0.26.0 → 0.26.2
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.en.md +20 -0
- package/CHANGELOG.ja.md +20 -0
- package/CHANGELOG.ko.md +20 -0
- package/CHANGELOG.md +24 -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/client.js +73 -16
- package/dist/config.d.ts +9 -0
- package/dist/config.js +6 -0
- package/dist/contract.d.ts +16 -2
- package/dist/index.js +3 -3
- package/dist/keyword-backfill.d.ts +17 -1
- package/dist/keyword-backfill.js +72 -5
- package/dist/llm.d.ts +9 -0
- package/dist/llm.js +7 -4
- package/dist/memport/format.js +1 -1
- package/dist/pipeline/md-sync.js +1 -1
- package/dist/prompts/examples.js +1 -1
- package/dist/redistill-backfill.d.ts +16 -1
- package/dist/redistill-backfill.js +74 -6
- package/dist/room-review.js +2 -0
- package/dist/settings.js +2 -0
- package/dist/stats.js +25 -5
- package/dist/store/l1-snapshot.js +1 -1
- package/dist/tools/index.d.ts +10 -1
- package/dist/tools/index.js +7 -1
- package/dist/tools/skills.d.ts +7 -4
- package/dist/tools/skills.js +9 -11
- package/dist/util/md-name.js +1 -0
- package/dist/util/md-normalize.js +1 -1
- package/dist/wing-backfill.d.ts +10 -1
- package/dist/wing-backfill.js +62 -5
- package/dsh.plugin.json +2 -2
- package/package.json +11 -11
package/dist/tools/skills.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { defineTool } from '@deepseek-ai/dsh-tools';
|
|
2
2
|
const MUTATE_OFF_NOTICE = '记忆写删未开放:请在记忆库面板开启「高权限模式」后,模型才能改动技能。';
|
|
3
|
-
export function registerSkillTools(ctx,
|
|
4
|
-
if (!(cfg.skills.enabled === true || live.get().skillsEnabled === true))
|
|
5
|
-
return; // 默认关:部署 cfg 或看板 live 任一开才注册
|
|
3
|
+
export function registerSkillTools(ctx, skills, logger, live, seals) {
|
|
6
4
|
// memory_skill_list:列全部技能摘要(含 status/sessionCount,candidate 也列出供审阅)。
|
|
7
|
-
ctx.tools.register(defineTool({
|
|
5
|
+
seals.reg('skills', () => ctx.tools.register(defineTool({
|
|
8
6
|
name: 'memory_skill_list',
|
|
9
7
|
description: '列出已沉淀的技能(程序性记忆)摘要:id/标题/状态/档位/覆盖会话数。用于查看技能库现状与候选晋升情况。',
|
|
10
8
|
parameters: {},
|
|
@@ -44,9 +42,9 @@ export function registerSkillTools(ctx, cfg, skills, logger, live) {
|
|
|
44
42
|
}));
|
|
45
43
|
return { skills: list, notice: `共 ${list.length} 个技能` };
|
|
46
44
|
},
|
|
47
|
-
}));
|
|
45
|
+
})));
|
|
48
46
|
// memory_skill_read:取某技能完整正文 + 步骤。
|
|
49
|
-
ctx.tools.register(defineTool({
|
|
47
|
+
seals.reg('skills', () => ctx.tools.register(defineTool({
|
|
50
48
|
name: 'memory_skill_read',
|
|
51
49
|
description: '读取一条技能的完整正文与步骤清单(按 id)。用于展开注入里被截断/excerpt 档的技能细节。',
|
|
52
50
|
parameters: { id: { type: 'string', required: true, description: '技能 id(来自 memory_skill_list 或注入头)' } },
|
|
@@ -76,9 +74,9 @@ export function registerSkillTools(ctx, cfg, skills, logger, live) {
|
|
|
76
74
|
return { id, title: '', body: '', steps: [], notice: `未找到技能 ${id}` };
|
|
77
75
|
return { id: s.id, title: s.title, body: s.body, steps: s.steps };
|
|
78
76
|
},
|
|
79
|
-
}));
|
|
77
|
+
})));
|
|
80
78
|
// memory_skill_pin:pin/unpin(高权限门)。pinned 技能不受闲置归档影响。
|
|
81
|
-
ctx.tools.register(defineTool({
|
|
79
|
+
seals.reg('skills', () => ctx.tools.register(defineTool({
|
|
82
80
|
name: 'memory_skill_pin',
|
|
83
81
|
description: '固定/取消固定一条技能(按 id)。固定后不参与闲置自动归档。仅用户显式要求时用;需高权限模式。',
|
|
84
82
|
parameters: {
|
|
@@ -100,9 +98,9 @@ export function registerSkillTools(ctx, cfg, skills, logger, live) {
|
|
|
100
98
|
const changed = await skills.update(id, { pinned: args?.pinned === true });
|
|
101
99
|
return { notice: changed ? `已${args?.pinned === true ? '固定' : '取消固定'}技能 ${id}` : `未找到技能 ${id} 或无变化` };
|
|
102
100
|
},
|
|
103
|
-
}));
|
|
101
|
+
})));
|
|
104
102
|
// memory_skill_archive:归档(高权限门);走 sidecar 生命周期,不触碰 l1_records 退场。
|
|
105
|
-
ctx.tools.register(defineTool({
|
|
103
|
+
seals.reg('skills', () => ctx.tools.register(defineTool({
|
|
106
104
|
name: 'memory_skill_archive',
|
|
107
105
|
description: '归档一条技能(按 id,可给原因)。归档后不再注入,但记录保留可恢复。仅用户显式要求时用;需高权限模式。',
|
|
108
106
|
parameters: {
|
|
@@ -126,5 +124,5 @@ export function registerSkillTools(ctx, cfg, skills, logger, live) {
|
|
|
126
124
|
logger.info(`[memory] 技能归档 ${id}`);
|
|
127
125
|
return { notice: done ? `已归档技能 ${id}` : `未找到技能 ${id} 或已归档` };
|
|
128
126
|
},
|
|
129
|
-
}));
|
|
127
|
+
})));
|
|
130
128
|
}
|
package/dist/util/md-name.js
CHANGED
|
@@ -242,6 +242,7 @@ function startsNarrativeLeadIn(s) {
|
|
|
242
242
|
* 真机坏味 `buildTurnCompactSystemPr`(ASCII 函数名硬切腰斩)即此类。
|
|
243
243
|
*/
|
|
244
244
|
function isBareCodeIdentifier(s) {
|
|
245
|
+
// eslint-disable-next-line no-control-regex -- 这里就是要按 ASCII 码位段判非 ASCII(CJK 等),\x00 是语义本身不是笔误
|
|
245
246
|
if (/[^\x00-\x7F]/.test(s))
|
|
246
247
|
return false; // 含非 ASCII(CJK 等)不算
|
|
247
248
|
if (/[\s\-_]/.test(s))
|
|
@@ -113,7 +113,7 @@ export function normalizeContentMd(text) {
|
|
|
113
113
|
out.push(raw);
|
|
114
114
|
continue;
|
|
115
115
|
}
|
|
116
|
-
|
|
116
|
+
const line = settleBullet(settleHeading(settleEol(raw)));
|
|
117
117
|
if (line.trim().length === 0) {
|
|
118
118
|
blanks += 1;
|
|
119
119
|
// 空行只在已有内容时才可能保留,且最多一个
|
package/dist/wing-backfill.d.ts
CHANGED
|
@@ -28,7 +28,14 @@ export interface HallBackfillState {
|
|
|
28
28
|
/** 本进程累计成功打标条数(重启归零;仅作观测,不作账)。 */
|
|
29
29
|
updated: number;
|
|
30
30
|
failed: number;
|
|
31
|
+
/** 本轮被人工中止(进端点 cancel)——与“跑完”分开报文案。 */
|
|
32
|
+
cancelled: boolean;
|
|
31
33
|
}
|
|
34
|
+
/** 请求中止本轮(空闲时无副作用);返回后中止是**有界**的:最多等 graceMs(≤30s)。 */
|
|
35
|
+
export declare function cancelWingBackfill(): {
|
|
36
|
+
cancelled: boolean;
|
|
37
|
+
running: boolean;
|
|
38
|
+
};
|
|
32
39
|
export declare function wingBackfillState(): HallBackfillState;
|
|
33
40
|
/** 启动后台回填;已在运行返回 false(单飞)。 */
|
|
34
41
|
export declare function startWingBackfill(deps: HallBackfillDeps): {
|
|
@@ -41,7 +48,9 @@ export declare function startWingBackfill(deps: HallBackfillDeps): {
|
|
|
41
48
|
* **一个请求只装一条**(旧名 `labelWingChunk`,多条一次,已废)。返回该条的 wing,
|
|
42
49
|
* 失败/字段缺失/值非法返回 null(记账归调用方,本函数不动全局状态)。
|
|
43
50
|
*/
|
|
44
|
-
export declare function labelWingOne(ctx: Context, cfg: MemoryConfig, logger: MemoryLogger, rec: MemoryRecord, candidates: string, callTimeoutMs?: number
|
|
51
|
+
export declare function labelWingOne(ctx: Context, cfg: MemoryConfig, logger: MemoryLogger, rec: MemoryRecord, candidates: string, callTimeoutMs?: number,
|
|
52
|
+
/** 本轮中止信号(可选):与单次超时**取或**,宽限到期后由它当场掐断请求。 */
|
|
53
|
+
externalSignal?: AbortSignal): Promise<string | null>;
|
|
45
54
|
/**
|
|
46
55
|
* 涌现标签标注器(导出):为**一条**记录提炼 slug 标签(tags)——Room 的前身。
|
|
47
56
|
* 一个请求只装一条(旧名 `tagChunk`,多条一次,已废)。失败返回 null;合法但为空返回 []。
|
package/dist/wing-backfill.js
CHANGED
|
@@ -10,7 +10,40 @@ const DEFAULT_MAX_RECORDS = 40;
|
|
|
10
10
|
const DEFAULT_TIME_BUDGET_MS = 1_800_000;
|
|
11
11
|
/** 单次 LLM 请求默认超时(可被 cfg.backfill.callTimeoutMs 覆盖)。 */
|
|
12
12
|
const DEFAULT_CALL_TIMEOUT_MS = 240_000;
|
|
13
|
-
const state = { running: false, updated: 0, failed: 0 };
|
|
13
|
+
const state = { running: false, updated: 0, failed: 0, cancelled: false };
|
|
14
|
+
/**
|
|
15
|
+
* 人工中止信号。置位后:①不再取新记录;②在飞的那条先拿**宽限**(cancelGraceMs)
|
|
16
|
+
* 自然收工;③**宽限到期强杀**在飞请求——没有③的话「中止」最坏要等满 callTimeoutMs。
|
|
17
|
+
*/
|
|
18
|
+
let abortRequested = false;
|
|
19
|
+
/** 本轮在飞请求的强杀器(start 入口新建)。 */
|
|
20
|
+
let runAbort = null;
|
|
21
|
+
/** 中止宽限计时器(一次性)。 */
|
|
22
|
+
let graceTimer = null;
|
|
23
|
+
/** 本轮生效的中止宽限(启动时从 cfg 读定,已钳位)。 */
|
|
24
|
+
let graceMs = 15_000;
|
|
25
|
+
/**
|
|
26
|
+
* 中止宽限钳位。**硬界 30s**(用户定:中止必须在 30s 内强停)——无论 YAML 写了多少,
|
|
27
|
+
* 都不会超过这个值;未配置/非法取默认 15s。
|
|
28
|
+
*/
|
|
29
|
+
function clampGraceMs(raw) {
|
|
30
|
+
const n = typeof raw === 'number' && Number.isFinite(raw) ? Math.round(raw) : 15_000;
|
|
31
|
+
return Math.min(30_000, Math.max(0, n));
|
|
32
|
+
}
|
|
33
|
+
/** 请求中止本轮(空闲时无副作用);返回后中止是**有界**的:最多等 graceMs(≤30s)。 */
|
|
34
|
+
export function cancelWingBackfill() {
|
|
35
|
+
if (!state.running)
|
|
36
|
+
return { cancelled: false, running: false };
|
|
37
|
+
abortRequested = true;
|
|
38
|
+
if (graceTimer === null) {
|
|
39
|
+
graceTimer = setTimeout(() => {
|
|
40
|
+
graceTimer = null;
|
|
41
|
+
if (state.running)
|
|
42
|
+
runAbort?.abort();
|
|
43
|
+
}, Math.max(0, graceMs));
|
|
44
|
+
}
|
|
45
|
+
return { cancelled: true, running: true };
|
|
46
|
+
}
|
|
14
47
|
export function wingBackfillState() {
|
|
15
48
|
return { ...state };
|
|
16
49
|
}
|
|
@@ -24,6 +57,13 @@ export function startWingBackfill(deps) {
|
|
|
24
57
|
state.running = true;
|
|
25
58
|
state.updated = 0;
|
|
26
59
|
state.failed = 0;
|
|
60
|
+
state.cancelled = false;
|
|
61
|
+
abortRequested = false;
|
|
62
|
+
if (graceTimer !== null) {
|
|
63
|
+
clearTimeout(graceTimer);
|
|
64
|
+
graceTimer = null;
|
|
65
|
+
}
|
|
66
|
+
runAbort = new AbortController();
|
|
27
67
|
void run(deps).finally(() => {
|
|
28
68
|
state.running = false;
|
|
29
69
|
deps.logger.info(`[memory] wing 回填结束:成功 ${state.updated} 条,失败 ${state.failed} 条`);
|
|
@@ -34,6 +74,7 @@ async function run(deps) {
|
|
|
34
74
|
const { ctx, cfg, backend, logger } = deps;
|
|
35
75
|
const MAX_RECORDS = cfg.backfill?.maxRecords ?? DEFAULT_MAX_RECORDS;
|
|
36
76
|
const TIME_BUDGET_MS = cfg.backfill?.timeBudgetMs ?? DEFAULT_TIME_BUDGET_MS;
|
|
77
|
+
graceMs = clampGraceMs(cfg.backfill?.cancelGraceMs);
|
|
37
78
|
const callTimeoutMs = cfg.backfill?.callTimeoutMs ?? DEFAULT_CALL_TIMEOUT_MS;
|
|
38
79
|
const halls = normWingEnabled(cfg.hall?.enabled);
|
|
39
80
|
if (halls.length === 0) {
|
|
@@ -71,6 +112,11 @@ async function run(deps) {
|
|
|
71
112
|
// 逐条串行:取一条 → 送标 → 当场写回。不攒批、不合并(爆炸半径锁在 1 条)。
|
|
72
113
|
const ids = pendingIds.slice(0, budget);
|
|
73
114
|
for (let i = 0; i < ids.length; i++) {
|
|
115
|
+
if (abortRequested) {
|
|
116
|
+
state.cancelled = true;
|
|
117
|
+
logger.info(`[memory] wing 回填:已按请求中止,本轮完成 ${i} 条,剩 ${ids.length - i} 条留待再触发`);
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
74
120
|
if (Date.now() - startedAt > TIME_BUDGET_MS) {
|
|
75
121
|
logger.info(`[memory] wing 回填:墙钟预算(${TIME_BUDGET_MS / 1000}s)用尽,剩余 ${ids.length - i} 条留待再次触发`);
|
|
76
122
|
break;
|
|
@@ -81,9 +127,11 @@ async function run(deps) {
|
|
|
81
127
|
state.failed++;
|
|
82
128
|
continue;
|
|
83
129
|
}
|
|
84
|
-
const wing = await labelWingOne(ctx, cfg, logger, rec, candidates, callTimeoutMs);
|
|
130
|
+
const wing = await labelWingOne(ctx, cfg, logger, rec, candidates, callTimeoutMs, runAbort?.signal);
|
|
85
131
|
if (wing === null) {
|
|
86
|
-
|
|
132
|
+
// 中止强杀导致的失败不计入 failed(不是模型/网络的错,是中止信号)
|
|
133
|
+
if (!abortRequested)
|
|
134
|
+
state.failed++;
|
|
87
135
|
continue;
|
|
88
136
|
}
|
|
89
137
|
// 最小写回:只改 metadata(hall 是磁盘兼容键,不改名)。
|
|
@@ -103,7 +151,9 @@ async function run(deps) {
|
|
|
103
151
|
* **一个请求只装一条**(旧名 `labelWingChunk`,多条一次,已废)。返回该条的 wing,
|
|
104
152
|
* 失败/字段缺失/值非法返回 null(记账归调用方,本函数不动全局状态)。
|
|
105
153
|
*/
|
|
106
|
-
export async function labelWingOne(ctx, cfg, logger, rec, candidates, callTimeoutMs = DEFAULT_CALL_TIMEOUT_MS
|
|
154
|
+
export async function labelWingOne(ctx, cfg, logger, rec, candidates, callTimeoutMs = DEFAULT_CALL_TIMEOUT_MS,
|
|
155
|
+
/** 本轮中止信号(可选):与单次超时**取或**,宽限到期后由它当场掐断请求。 */
|
|
156
|
+
externalSignal) {
|
|
107
157
|
const user = `候选 Wing:${candidates}\n\n记忆:\n${rec.content.slice(0, 600)}`;
|
|
108
158
|
try {
|
|
109
159
|
const raw = await callLLM(ctx, cfg, {
|
|
@@ -111,8 +161,13 @@ export async function labelWingOne(ctx, cfg, logger, rec, candidates, callTimeou
|
|
|
111
161
|
user,
|
|
112
162
|
maxTokens: 1024,
|
|
113
163
|
layer: 'l1-extract',
|
|
164
|
+
// 打标是直答任务:显式关思考(不然思考模型把预算烧在 reasoning 上吐 0 字符)。
|
|
165
|
+
reasoningEffort: 'off',
|
|
114
166
|
logger,
|
|
115
|
-
signal:
|
|
167
|
+
signal: (() => {
|
|
168
|
+
const t = AbortSignal.timeout(callTimeoutMs > 0 ? callTimeoutMs : DEFAULT_CALL_TIMEOUT_MS);
|
|
169
|
+
return externalSignal ? AbortSignal.any([t, externalSignal]) : t;
|
|
170
|
+
})(),
|
|
116
171
|
});
|
|
117
172
|
const parsed = parseJsonLogged(raw, 'wing 回填', logger);
|
|
118
173
|
// 通吃两种形状:模型偶尔无视“只输出一个对象”而回单元素数组(或带 id 的旧形状)。
|
|
@@ -153,6 +208,8 @@ export async function tagOne(ctx, cfg, logger, rec, callTimeoutMs = DEFAULT_CALL
|
|
|
153
208
|
user,
|
|
154
209
|
maxTokens: 1024,
|
|
155
210
|
layer: 'l1-extract',
|
|
211
|
+
// 同 wing 标:直答任务,显式关思考。
|
|
212
|
+
reasoningEffort: 'off',
|
|
156
213
|
logger,
|
|
157
214
|
signal: AbortSignal.timeout(callTimeoutMs > 0 ? callTimeoutMs : DEFAULT_CALL_TIMEOUT_MS),
|
|
158
215
|
});
|
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.2",
|
|
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,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"engines": {
|
|
16
|
-
"dsh": "
|
|
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"
|
|
17
17
|
},
|
|
18
18
|
"components": {
|
|
19
19
|
"host": "dist/index.js",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-prime-memory",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.2",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"registry": "https://registry.npmjs.org",
|
|
6
6
|
"access": "public",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
},
|
|
62
62
|
"engines": {
|
|
63
63
|
"node": ">=22.16.0",
|
|
64
|
-
"dsh": "
|
|
64
|
+
"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.1 || 0.2.1-rc.2"
|
|
65
65
|
},
|
|
66
66
|
"keywords": [
|
|
67
67
|
"dsh",
|
|
@@ -84,15 +84,15 @@
|
|
|
84
84
|
},
|
|
85
85
|
"peerDependencies": {
|
|
86
86
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
87
|
-
"@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",
|
|
88
|
-
"@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",
|
|
89
|
-
"@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",
|
|
90
|
-
"@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",
|
|
91
|
-
"@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",
|
|
92
|
-
"@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",
|
|
93
|
-
"@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",
|
|
94
|
-
"@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",
|
|
95
|
-
"@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"
|
|
87
|
+
"@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",
|
|
88
|
+
"@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",
|
|
89
|
+
"@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",
|
|
90
|
+
"@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",
|
|
91
|
+
"@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",
|
|
92
|
+
"@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",
|
|
93
|
+
"@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",
|
|
94
|
+
"@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",
|
|
95
|
+
"@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"
|
|
96
96
|
},
|
|
97
97
|
"peerDependenciesMeta": {
|
|
98
98
|
"@deepseek-ai/dsh-agent": {
|