@xrn1997/dsh-session-delete 0.0.0-stage → 0.1.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/LICENSE +201 -0
- package/README.md +138 -3
- package/cordis.patch.yml +3 -0
- package/icon.svg +18 -0
- package/lib/client.js +25233 -0
- package/lib/client.js.map +1 -0
- package/lib/index.d.ts +65 -0
- package/lib/index.js +1182 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +95 -6
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
//#region src/trash/entry.d.ts
|
|
3
|
+
/** 回收站的一条记录。`id` 由 `makeEntryId` 生成(`<删除时刻>-<原目录名>`)——**它不是随手起的键**:
|
|
4
|
+
* 回收站目录名就是它,恢复也按它反推出原目录名放回(设计稿 §3),所以 id 的形状有契约意义。
|
|
5
|
+
* 其余字段在删除那一刻就地取。 */
|
|
6
|
+
interface TrashEntry {
|
|
7
|
+
id: string;
|
|
8
|
+
sessionId: string;
|
|
9
|
+
projectDir: string;
|
|
10
|
+
/** 删除时它所属的工作区;**空串 = 删除时就没有账目**(「未分组」的会话,宿主的"删除工作区"会造出这种),
|
|
11
|
+
* 恢复时据此跳过 `attach`。 */
|
|
12
|
+
workspaceId: string;
|
|
13
|
+
/** 删除**之前**的归档态。删除会把"原本未归档"的会话归档(藏起来,免得它掉进「未分组」),
|
|
14
|
+
* 恢复时按这个字段还原可见性:true ⇒ 仍处归档态,false ⇒ 取消归档放回树里。 */
|
|
15
|
+
wasArchived: boolean;
|
|
16
|
+
deletedAt: number;
|
|
17
|
+
/** 删除时**尽力**取的会话标题(来源:`storages/session_projcache/sessions/<会话id>.json`
|
|
18
|
+
* 里的 `rows.title.val`);取不到存空串,绝不因此让删除失败。 */
|
|
19
|
+
title: string;
|
|
20
|
+
/** 删除时用 `fs.sizeOfDir` 量到的会话目录字节数。 */
|
|
21
|
+
sizeBytes: number;
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
//#region src/trash/manifest.d.ts
|
|
25
|
+
/** 回收站清单的**唯一**读法(动词只依赖这个端口,不认 storage domain 的形状)。 */
|
|
26
|
+
interface ManifestPort {
|
|
27
|
+
list(): Promise<TrashEntry[]>;
|
|
28
|
+
add(e: TrashEntry): Promise<void>;
|
|
29
|
+
remove(id: string): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
//#region src/index.d.ts
|
|
33
|
+
export declare const name = "@xrn1997/dsh-session-delete";
|
|
34
|
+
/**
|
|
35
|
+
* 插件依赖:**只写字符串数组**(隔离数据根上实测:写成 `{ required, optional }` 会让插件停在
|
|
36
|
+
* `pending (waiting for services: required, optional)`)。
|
|
37
|
+
*
|
|
38
|
+
* 三项都是在隔离数据根上实测注入成功、且本插件真正用到的宿主服务。三个**故意不写**的:
|
|
39
|
+
* - `remote`:那是**浏览器半**的服务(asar `dsh-api-gateway/lib/client.js`:`super(ctx, "remote")`),
|
|
40
|
+
* Node 半挂的是 `ctx.typertGateway`。把它写进 Node 半的 inject 会让插件永远 pending(同 `slots` 那次的形状)。
|
|
41
|
+
* - `sessions` / `sessionProjectionCache`:前者本实现不用(活跃判据走 waterfall,见设计稿 §5);后者是**可选**服务,
|
|
42
|
+
* 官方消费方也按可选读(`ctx.get('sessionProjectionCache')?.…`),inject 一个可能没挂的服务 = 整个插件 pending。
|
|
43
|
+
* 它取不到时 `titleOf` 返回空串,正是契约允许的降级。
|
|
44
|
+
*
|
|
45
|
+
* `webServer` 是**浏览器半取数通道的承载者**(那条薄线):插件用它注册 `/dsh-session-delete-api`
|
|
46
|
+
* 前缀路由,浏览器半同源 fetch 那五个端点。它是宿主 web 组成里的硬依赖(`dsh-host-webserver` 的
|
|
47
|
+
* `super(ctx, "webServer")`),服务名与 `register({kind:'prefix', path, handler})` 的形状按
|
|
48
|
+
* `dsh-host-webserver/lib/index.js` 与 `README.md` 原文读实,不是猜的。
|
|
49
|
+
*/
|
|
50
|
+
export declare const inject: string[];
|
|
51
|
+
/**
|
|
52
|
+
* 清单的真实绑定:官方 storage domain → `ManifestPort`(`StorageDomainLike` 在动词层保持一种读法)。
|
|
53
|
+
* 域**懒开**且只开一次(`apply` 是同步的,而 `open()` 是异步的),并挂一条 `ctx.effect` 清理:
|
|
54
|
+
* 插件卸载时关掉句柄(句柄归调用方所有,这是 `open()` 的 JSDoc 明写的契约)。
|
|
55
|
+
*/
|
|
56
|
+
export declare function createStorageManifest(ctx: Context): ManifestPort;
|
|
57
|
+
/**
|
|
58
|
+
* 装配顺序:**清单 → 端口 → 动词依赖 → 前缀路由**(`DeleteDeps` 就是前两者的合一)。
|
|
59
|
+
*
|
|
60
|
+
* 路由用 `ctx.effect` 挂、disposer 归装载它的那根 fiber:插件卸载即摘路由(`register` 返回的
|
|
61
|
+
* disposer 是官方契约)。**同一进程里只注册一次**这件事由宿主把住:重复的 `(kind, path)`
|
|
62
|
+
* 在 `register` 里直接抛(`webserver: duplicate prefix route "…"`),响亮失败而不是悄悄覆盖。
|
|
63
|
+
*/
|
|
64
|
+
export declare function apply(ctx: Context): void;
|
|
65
|
+
//#endregion
|