dsh-session-curator 0.1.2 → 0.2.0
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 -2
- package/README.zh-CN.md +1 -1
- package/lib/client.js +1645 -328
- package/lib/host/fs-utils.js +44 -3
- package/lib/host/open.js +104 -0
- package/lib/host/retention.js +24 -0
- package/lib/host/routes.js +22 -1
- package/lib/host/session-manager.js +267 -20
- package/lib/host/trash.js +99 -10
- package/lib/index.js +6 -2
- package/package.json +13 -10
- package/scripts/activation.mjs +0 -358
- package/scripts/build.mjs +0 -96
- package/scripts/client.mjs +0 -691
- package/scripts/smoke.mjs +0 -382
package/scripts/build.mjs
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 构建:`src/`(TypeScript,唯一真源)→ `lib/`(提交进仓库的产物,DSH 直接加载的就是它)。
|
|
3
|
-
*
|
|
4
|
-
* 两个半区各走一条路,因为运行环境不同:
|
|
5
|
-
* 1. 宿主半区:`tsc` 直接输出**多文件 ESM**(`lib/index.js` + `lib/host/*.js`)——
|
|
6
|
-
* Electron 主进程就是 Node,相对 import 天然可用。
|
|
7
|
-
* 2. 客户端半区:`esbuild` 先把 `src/client` 打成一份 CJS,再由本脚本包进 DSH 的手写束
|
|
8
|
-
* `window.__ModuleLoader__.load({id, factory})`。浏览器那边拿到的是 classic script
|
|
9
|
-
* (loader 走 `document.createElement("script")` + `el.src`),**不能**是 ESM,
|
|
10
|
-
* 所以客户端多文件必须在构建期合回一份。
|
|
11
|
-
*
|
|
12
|
-
* `react` 与 `@deepseek-ai/*` 保持 external:它们由 DSH 的模块表在运行时注入,
|
|
13
|
-
* 也就是束里 `factory(require)` 收到的那个 `require`。
|
|
14
|
-
*
|
|
15
|
-
* 用法:`npm run build`(或 `node scripts/build.mjs`)。
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
/** 构建期依赖只在开发 / 发布时存在(发布包不发 devDependencies),先给一句人话再退出。 */
|
|
19
|
-
const MISSING = "build 需要 devDependencies(esbuild + typescript):先在本仓库里跑 npm install。";
|
|
20
|
-
|
|
21
|
-
let esbuild;
|
|
22
|
-
try {
|
|
23
|
-
esbuild = await import("esbuild");
|
|
24
|
-
} catch {
|
|
25
|
-
console.error(MISSING);
|
|
26
|
-
process.exit(1);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const { spawnSync } = await import("node:child_process");
|
|
30
|
-
const { readFile, rm, writeFile } = await import("node:fs/promises");
|
|
31
|
-
const { createRequire } = await import("node:module");
|
|
32
|
-
const { join } = await import("node:path");
|
|
33
|
-
|
|
34
|
-
const root = join(import.meta.dirname, "..");
|
|
35
|
-
const lib = join(root, "lib");
|
|
36
|
-
const manifest = JSON.parse(await readFile(join(root, "package.json"), "utf8"));
|
|
37
|
-
|
|
38
|
-
/** 客户端束里必须在线的外部模块:DSH 的模块表注入它们,别打进产物。 */
|
|
39
|
-
const CLIENT_EXTERNAL = ["react", "@deepseek-ai/*"];
|
|
40
|
-
|
|
41
|
-
// 只清自己产出的东西(`lib/` 是提交进仓库的产物,别顺手扫掉别的)。
|
|
42
|
-
await rm(join(lib, "host"), { recursive: true, force: true });
|
|
43
|
-
await rm(join(lib, "index.js"), { force: true });
|
|
44
|
-
await rm(join(lib, "client.js"), { force: true });
|
|
45
|
-
|
|
46
|
-
// ── 1) 宿主半区:tsc 输出多文件 ESM ──────────────────────────────────────
|
|
47
|
-
let tsc;
|
|
48
|
-
try {
|
|
49
|
-
tsc = createRequire(import.meta.url).resolve("typescript/bin/tsc");
|
|
50
|
-
} catch {
|
|
51
|
-
console.error(MISSING);
|
|
52
|
-
process.exit(1);
|
|
53
|
-
}
|
|
54
|
-
const emitted = spawnSync(process.execPath, [tsc, "-p", join(root, "tsconfig.build.json")], {
|
|
55
|
-
stdio: "inherit",
|
|
56
|
-
cwd: root
|
|
57
|
-
});
|
|
58
|
-
if (emitted.status !== 0) process.exit(emitted.status ?? 1);
|
|
59
|
-
|
|
60
|
-
// ── 2) 客户端半区:esbuild → CJS → DSH 手写束 ────────────────────────────
|
|
61
|
-
const client = await esbuild.build({
|
|
62
|
-
entryPoints: [join(root, "src", "client", "index.ts")],
|
|
63
|
-
bundle: true,
|
|
64
|
-
format: "cjs",
|
|
65
|
-
platform: "browser",
|
|
66
|
-
target: ["es2020"],
|
|
67
|
-
external: CLIENT_EXTERNAL,
|
|
68
|
-
write: false,
|
|
69
|
-
legalComments: "none",
|
|
70
|
-
charset: "utf8",
|
|
71
|
-
logLevel: "warning"
|
|
72
|
-
});
|
|
73
|
-
const body = client.outputFiles[0].text.trimEnd();
|
|
74
|
-
|
|
75
|
-
await writeFile(
|
|
76
|
-
join(lib, "client.js"),
|
|
77
|
-
[
|
|
78
|
-
"// 本文件由 `node scripts/build.mjs` 从 src/client/**/*.ts 生成,不要手改。",
|
|
79
|
-
"window.__ModuleLoader__.load({",
|
|
80
|
-
`\tid: ${JSON.stringify(manifest.name)},`,
|
|
81
|
-
"\t// 浏览器只认这种「工厂 + 局部 require」的束:factory 收到的 require 就是 DSH 的模块表,",
|
|
82
|
-
"\t// esbuild 把 external 的 import 编译成了对这个参数的调用。",
|
|
83
|
-
"\tfactory: (require) => {",
|
|
84
|
-
"\t\tconst module = { exports: {} };",
|
|
85
|
-
"\t\t(function (module, exports, require) {",
|
|
86
|
-
body,
|
|
87
|
-
"\t\t})(module, module.exports, require);",
|
|
88
|
-
"\t\treturn module.exports;",
|
|
89
|
-
"\t}",
|
|
90
|
-
"});",
|
|
91
|
-
""
|
|
92
|
-
].join("\n"),
|
|
93
|
-
"utf8"
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
console.log(`built: lib/index.js + lib/host/*.js (tsc) and lib/client.js (esbuild ${body.length} B)`);
|