@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 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
@@ -1,5 +1,5 @@
1
1
  window.__ModuleLoader__.load({
2
- id: "@muwinds/dsh-archived-sessions",
2
+ id: "@omdp/dsh-archived-sessions",
3
3
  factory: (require) => {
4
4
  var module = { exports: {} };
5
5
  var exports = module.exports;
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
- /** Candidate JSONL session roots, probed in order. */
260
- const CANDIDATE_ROOTS = ["C:\\Users\\xj\\.dsh\\sessions"];
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 CANDIDATE_ROOTS) {
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.1",
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",