@omdp/dsh-archived-sessions 0.3.1 → 0.3.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/README.md +2 -0
- package/lib/client.js +1 -1
- package/lib/index.js +38 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -65,6 +65,7 @@ pnpm add @omdp/dsh-archived-sessions -w
|
|
|
65
65
|
|
|
66
66
|
### 变更记录
|
|
67
67
|
|
|
68
|
+
- **0.3.2**(2026-09-10):修两处 fork 遗留——① client 半区的模块 id 仍是 `@muwinds/dsh-archived-sessions`(未随包名改),浏览器端按 `@omdp/...` 找不到模块、设置页不显示;② 会话根目录改为从 `DSH_HOME` 环境变量推导(`<DSH_HOME>/sessions`,缺省 `~/.dsh/sessions`),不再硬编码本机路径。
|
|
68
69
|
- **0.3.1**(2026-09-10):**修复 0.3.0 的发布事故**——0.3.0 的 tarball 里没有 `lib/`(仓库 `.gitignore` 的 `**/lib/` 规则把源码吞了,npm 只打包到 4 个文件),安装后插件加载失败会拖垮 DSH;0.3.1 补回 `lib/index.js` + `lib/client.js`(发布前已核对 tarball 内容)。
|
|
69
70
|
- **0.3.0**(2026-09-10):fork 自 0.2.0;适配 DSH 0.1.5-rc.1(list 快照形状 + 路径自解析);按树删除子会话;孤儿清理;删除路径安全校验。
|
|
70
71
|
|
|
@@ -127,6 +128,7 @@ pnpm add @omdp/dsh-archived-sessions -w
|
|
|
127
128
|
|
|
128
129
|
### Changelog
|
|
129
130
|
|
|
131
|
+
- **0.3.2** (2026-09-10): fixes two fork leftovers — ① the client half's module id was still `@muwinds/dsh-archived-sessions` (not renamed with the package), so the browser could not find the module and the settings page never rendered; ② the session root is now derived from the `DSH_HOME` environment variable (`<DSH_HOME>/sessions`, falling back to `~/.dsh/sessions`) instead of a hard-coded local path.
|
|
130
132
|
- **0.3.1** (2026-09-10): **fixes a 0.3.0 release accident** — the 0.3.0 tarball contained no `lib/` (the repo's `**/lib/` gitignore rule swallowed the source, so npm packed only 4 files); installing it broke the plugin load and could take DSH down. 0.3.1 restores `lib/index.js` + `lib/client.js` (tarball contents verified before publishing).
|
|
131
133
|
- **0.3.0** (2026-09-10): forked from 0.2.0; DSH 0.1.5-rc.1 support (snapshot list shape + self path resolution); tree delete; orphan sweep; deletion path safety check.
|
|
132
134
|
|
package/lib/client.js
CHANGED
package/lib/index.js
CHANGED
|
@@ -256,8 +256,39 @@ function projectKey(cwd) {
|
|
|
256
256
|
return `--${(readable.replace(/^-+/, "") || "root").slice(0, 251)}--`;
|
|
257
257
|
}
|
|
258
258
|
|
|
259
|
-
/**
|
|
260
|
-
|
|
259
|
+
/** Read an environment variable without assuming `process` exists. */
|
|
260
|
+
function env(name) {
|
|
261
|
+
try {
|
|
262
|
+
return typeof process !== "undefined" && process.env ? process.env[name] : undefined;
|
|
263
|
+
} catch (e) {
|
|
264
|
+
return undefined;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Candidate JSONL session roots, probed in order at call time.
|
|
270
|
+
*
|
|
271
|
+
* DSH stores every session under `<DSH_HOME>/sessions` (DSH_HOME defaults to
|
|
272
|
+
* `~/.dsh`), and the abstract sessionPersistence service exposes no root, so the
|
|
273
|
+
* location is derived from the environment rather than hard-coded — the plugin
|
|
274
|
+
* then works on any machine and any DSH_HOME.
|
|
275
|
+
*/
|
|
276
|
+
function candidateRoots() {
|
|
277
|
+
const out = [];
|
|
278
|
+
const push = (p) => {
|
|
279
|
+
if (typeof p !== "string" || p.length === 0) return;
|
|
280
|
+
const trimmed = p.replace(/[\\/]+$/, "");
|
|
281
|
+
if (trimmed.length > 0 && !out.includes(trimmed)) out.push(trimmed);
|
|
282
|
+
};
|
|
283
|
+
const home = env("DSH_HOME");
|
|
284
|
+
if (typeof home === "string" && home.replace(/[\\/]+$/, "").length > 0) {
|
|
285
|
+
push(home + "/sessions");
|
|
286
|
+
} else {
|
|
287
|
+
const userHome = env("USERPROFILE") || env("HOME");
|
|
288
|
+
if (typeof userHome === "string" && userHome.length > 0) push(userHome + "/.dsh/sessions");
|
|
289
|
+
}
|
|
290
|
+
return out;
|
|
291
|
+
}
|
|
261
292
|
|
|
262
293
|
/** Build one session's on-disk directory path under a candidate root. */
|
|
263
294
|
function buildSessionDir(root, header) {
|
|
@@ -275,8 +306,10 @@ function buildSessionDir(root, header) {
|
|
|
275
306
|
async function resolveSessionLocation(ctx, header) {
|
|
276
307
|
const fsSvc = ctx.get("fs");
|
|
277
308
|
const backend = jsonlBackend && typeof jsonlBackend.sessionDir === "function" ? jsonlBackend : null;
|
|
309
|
+
const roots = candidateRoots();
|
|
310
|
+
if (roots.length === 0) return { path: "", found: false };
|
|
278
311
|
let last = null;
|
|
279
|
-
for (const root of
|
|
312
|
+
for (const root of roots) {
|
|
280
313
|
let dirPath;
|
|
281
314
|
if (backend && typeof jsonlBackend.projectDir === "function") {
|
|
282
315
|
try {
|
|
@@ -611,7 +644,7 @@ async function handleOrphans(ctx) {
|
|
|
611
644
|
} catch (e) {
|
|
612
645
|
location = null;
|
|
613
646
|
}
|
|
614
|
-
if (!location) continue;
|
|
647
|
+
if (!location || typeof location.path !== "string" || location.path.length === 0) continue;
|
|
615
648
|
const dirPath = location.path;
|
|
616
649
|
let sizeBytes = 0;
|
|
617
650
|
if (fsSvc) {
|
|
@@ -655,7 +688,7 @@ async function handleSweep(ctx) {
|
|
|
655
688
|
} catch (e) {
|
|
656
689
|
location = null;
|
|
657
690
|
}
|
|
658
|
-
if (!location) continue;
|
|
691
|
+
if (!location || typeof location.path !== "string" || location.path.length === 0) continue;
|
|
659
692
|
const dirPath = location.path;
|
|
660
693
|
try {
|
|
661
694
|
await removeDir(ctx, dirPath);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@omdp/dsh-archived-sessions",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Archived-sessions manager for the DeepSeek Harness web UI: list / unarchive / delete / detail from Settings. · DSH 归档会话管理:设置页查看、释放、删除已归档会话(含按树删除子会话与孤儿清理)。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|