@barryfan2045/dsh-matrix 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 +21 -0
- package/README.md +286 -0
- package/THIRD_PARTY_NOTICES.md +53 -0
- package/assets/avatars/instance-01.png +0 -0
- package/assets/avatars/instance-02.png +0 -0
- package/assets/avatars/instance-03.png +0 -0
- package/assets/avatars/instance-04.png +0 -0
- package/assets/avatars/instance-05.png +0 -0
- package/assets/avatars/instance-06.png +0 -0
- package/assets/avatars/instance-07.png +0 -0
- package/assets/avatars/instance-08.png +0 -0
- package/assets/avatars/instance-09.png +0 -0
- package/assets/avatars/instance-10.png +0 -0
- package/assets/avatars/instance-11.png +0 -0
- package/assets/avatars/instance-12.png +0 -0
- package/assets/avatars/management.png +0 -0
- package/cordis.patch.yml +13 -0
- package/dist/auth/admin-commands.d.ts +47 -0
- package/dist/auth/admin-commands.d.ts.map +1 -0
- package/dist/auth/admin-commands.js +112 -0
- package/dist/auth/admin-commands.js.map +1 -0
- package/dist/auth/challenge.d.ts +93 -0
- package/dist/auth/challenge.d.ts.map +1 -0
- package/dist/auth/challenge.js +104 -0
- package/dist/auth/challenge.js.map +1 -0
- package/dist/auth/store.d.ts +55 -0
- package/dist/auth/store.d.ts.map +1 -0
- package/dist/auth/store.js +124 -0
- package/dist/auth/store.js.map +1 -0
- package/dist/bridge/agent-commands.d.ts +39 -0
- package/dist/bridge/agent-commands.d.ts.map +1 -0
- package/dist/bridge/agent-commands.js +243 -0
- package/dist/bridge/agent-commands.js.map +1 -0
- package/dist/bridge/attachments-ledger.d.ts +54 -0
- package/dist/bridge/attachments-ledger.d.ts.map +1 -0
- package/dist/bridge/attachments-ledger.js +68 -0
- package/dist/bridge/attachments-ledger.js.map +1 -0
- package/dist/bridge/commands.d.ts +28 -0
- package/dist/bridge/commands.d.ts.map +1 -0
- package/dist/bridge/commands.js +18 -0
- package/dist/bridge/commands.js.map +1 -0
- package/dist/bridge/crypto-health.d.ts +37 -0
- package/dist/bridge/crypto-health.d.ts.map +1 -0
- package/dist/bridge/crypto-health.js +38 -0
- package/dist/bridge/crypto-health.js.map +1 -0
- package/dist/bridge/group-gate.d.ts +38 -0
- package/dist/bridge/group-gate.d.ts.map +1 -0
- package/dist/bridge/group-gate.js +49 -0
- package/dist/bridge/group-gate.js.map +1 -0
- package/dist/bridge/instance-lock.d.ts +10 -0
- package/dist/bridge/instance-lock.d.ts.map +1 -0
- package/dist/bridge/instance-lock.js +82 -0
- package/dist/bridge/instance-lock.js.map +1 -0
- package/dist/bridge/interactions.d.ts +62 -0
- package/dist/bridge/interactions.d.ts.map +1 -0
- package/dist/bridge/interactions.js +237 -0
- package/dist/bridge/interactions.js.map +1 -0
- package/dist/bridge/management-room.d.ts +13 -0
- package/dist/bridge/management-room.d.ts.map +1 -0
- package/dist/bridge/management-room.js +27 -0
- package/dist/bridge/management-room.js.map +1 -0
- package/dist/bridge/multi-project.d.ts +34 -0
- package/dist/bridge/multi-project.d.ts.map +1 -0
- package/dist/bridge/multi-project.js +44 -0
- package/dist/bridge/multi-project.js.map +1 -0
- package/dist/bridge/pipeline.d.ts +151 -0
- package/dist/bridge/pipeline.d.ts.map +1 -0
- package/dist/bridge/pipeline.js +502 -0
- package/dist/bridge/pipeline.js.map +1 -0
- package/dist/bridge/pmctl.d.ts +50 -0
- package/dist/bridge/pmctl.d.ts.map +1 -0
- package/dist/bridge/pmctl.js +272 -0
- package/dist/bridge/pmctl.js.map +1 -0
- package/dist/bridge/power-levels.d.ts +57 -0
- package/dist/bridge/power-levels.d.ts.map +1 -0
- package/dist/bridge/power-levels.js +92 -0
- package/dist/bridge/power-levels.js.map +1 -0
- package/dist/bridge/power-sync.d.ts +64 -0
- package/dist/bridge/power-sync.d.ts.map +1 -0
- package/dist/bridge/power-sync.js +121 -0
- package/dist/bridge/power-sync.js.map +1 -0
- package/dist/bridge/projects.d.ts +97 -0
- package/dist/bridge/projects.d.ts.map +1 -0
- package/dist/bridge/projects.js +288 -0
- package/dist/bridge/projects.js.map +1 -0
- package/dist/bridge/quote-cache.d.ts +38 -0
- package/dist/bridge/quote-cache.d.ts.map +1 -0
- package/dist/bridge/quote-cache.js +56 -0
- package/dist/bridge/quote-cache.js.map +1 -0
- package/dist/bridge/reply.d.ts +31 -0
- package/dist/bridge/reply.d.ts.map +1 -0
- package/dist/bridge/reply.js +122 -0
- package/dist/bridge/reply.js.map +1 -0
- package/dist/bridge/space-identity.d.ts +43 -0
- package/dist/bridge/space-identity.d.ts.map +1 -0
- package/dist/bridge/space-identity.js +92 -0
- package/dist/bridge/space-identity.js.map +1 -0
- package/dist/bridge/space-sync.d.ts +94 -0
- package/dist/bridge/space-sync.d.ts.map +1 -0
- package/dist/bridge/space-sync.js +137 -0
- package/dist/bridge/space-sync.js.map +1 -0
- package/dist/bridge/turn-commands.d.ts +28 -0
- package/dist/bridge/turn-commands.d.ts.map +1 -0
- package/dist/bridge/turn-commands.js +97 -0
- package/dist/bridge/turn-commands.js.map +1 -0
- package/dist/cli/config-store.d.ts +32 -0
- package/dist/cli/config-store.d.ts.map +1 -0
- package/dist/cli/config-store.js +118 -0
- package/dist/cli/config-store.js.map +1 -0
- package/dist/cli/crypto-store.d.ts +42 -0
- package/dist/cli/crypto-store.d.ts.map +1 -0
- package/dist/cli/crypto-store.js +70 -0
- package/dist/cli/crypto-store.js.map +1 -0
- package/dist/cli/device-prune.d.ts +105 -0
- package/dist/cli/device-prune.d.ts.map +1 -0
- package/dist/cli/device-prune.js +163 -0
- package/dist/cli/device-prune.js.map +1 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +584 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/log-filter.d.ts +32 -0
- package/dist/cli/log-filter.d.ts.map +1 -0
- package/dist/cli/log-filter.js +40 -0
- package/dist/cli/log-filter.js.map +1 -0
- package/dist/cli/pnpm-builds.d.ts +32 -0
- package/dist/cli/pnpm-builds.d.ts.map +1 -0
- package/dist/cli/pnpm-builds.js +73 -0
- package/dist/cli/pnpm-builds.js.map +1 -0
- package/dist/cli/profile-patch.d.ts +26 -0
- package/dist/cli/profile-patch.d.ts.map +1 -0
- package/dist/cli/profile-patch.js +56 -0
- package/dist/cli/profile-patch.js.map +1 -0
- package/dist/cli/setup.d.ts +39 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +234 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/systemd-hint.d.ts +11 -0
- package/dist/cli/systemd-hint.d.ts.map +1 -0
- package/dist/cli/systemd-hint.js +46 -0
- package/dist/cli/systemd-hint.js.map +1 -0
- package/dist/cli/systemd.d.ts +32 -0
- package/dist/cli/systemd.d.ts.map +1 -0
- package/dist/cli/systemd.js +58 -0
- package/dist/cli/systemd.js.map +1 -0
- package/dist/config.d.ts +54 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +107 -0
- package/dist/config.js.map +1 -0
- package/dist/dsh/backend.d.ts +110 -0
- package/dist/dsh/backend.d.ts.map +1 -0
- package/dist/dsh/backend.js +481 -0
- package/dist/dsh/backend.js.map +1 -0
- package/dist/dsh/interactions.d.ts +50 -0
- package/dist/dsh/interactions.d.ts.map +1 -0
- package/dist/dsh/interactions.js +141 -0
- package/dist/dsh/interactions.js.map +1 -0
- package/dist/dsh/stream.d.ts +32 -0
- package/dist/dsh/stream.d.ts.map +1 -0
- package/dist/dsh/stream.js +109 -0
- package/dist/dsh/stream.js.map +1 -0
- package/dist/formatting.d.ts +14 -0
- package/dist/formatting.d.ts.map +1 -0
- package/dist/formatting.js +63 -0
- package/dist/formatting.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +232 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +9 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +28 -0
- package/dist/logger.js.map +1 -0
- package/dist/matrix/matrix-events.d.ts +49 -0
- package/dist/matrix/matrix-events.d.ts.map +1 -0
- package/dist/matrix/matrix-events.js +89 -0
- package/dist/matrix/matrix-events.js.map +1 -0
- package/dist/matrix/transport.d.ts +192 -0
- package/dist/matrix/transport.d.ts.map +1 -0
- package/dist/matrix/transport.js +510 -0
- package/dist/matrix/transport.js.map +1 -0
- package/dist/ports/attachments.d.ts +51 -0
- package/dist/ports/attachments.d.ts.map +1 -0
- package/dist/ports/attachments.js +27 -0
- package/dist/ports/attachments.js.map +1 -0
- package/dist/ports/backend.d.ts +159 -0
- package/dist/ports/backend.d.ts.map +1 -0
- package/dist/ports/backend.js +25 -0
- package/dist/ports/backend.js.map +1 -0
- package/dist/ports/interactions.d.ts +65 -0
- package/dist/ports/interactions.d.ts.map +1 -0
- package/dist/ports/interactions.js +15 -0
- package/dist/ports/interactions.js.map +1 -0
- package/dist/ports/streaming.d.ts +45 -0
- package/dist/ports/streaming.d.ts.map +1 -0
- package/dist/ports/streaming.js +23 -0
- package/dist/ports/streaming.js.map +1 -0
- package/dist/ports/transport.d.ts +68 -0
- package/dist/ports/transport.d.ts.map +1 -0
- package/dist/ports/transport.js +2 -0
- package/dist/ports/transport.js.map +1 -0
- package/dist/types.d.ts +53 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* systemd user unit 生成(纯函数)+ homeserver→NO_PROXY 提取。
|
|
3
|
+
*
|
|
4
|
+
* 移植自 pi-courier src/cli.ts 的 buildUnit(111-142 行),语义改为:
|
|
5
|
+
* ExecStart 不再是本包 dist,而是当前 node bin 目录里的 dsh 启动器
|
|
6
|
+
* (`<nodeBin> <dshBin> --profile <name>`),并把 nvm bin 目录置于 PATH 首位
|
|
7
|
+
* (systemd 默认 PATH 会找到旧版系统 node——pi-courier 实测坑)。
|
|
8
|
+
* NO_PROXY 从配置 homeserver 提取 host(主会话实测:坏代理会卡死桥连接)。
|
|
9
|
+
*/
|
|
10
|
+
export interface UnitInput {
|
|
11
|
+
/** process.execPath,例如 ~/.nvm/versions/node/v24.20.0/bin/node。 */
|
|
12
|
+
nodeBin: string;
|
|
13
|
+
/** dsh 启动器的绝对路径(node 可直接执行)。 */
|
|
14
|
+
dshBin: string;
|
|
15
|
+
/** dsh profile 名(实例名),如 "matrix"。 */
|
|
16
|
+
profile: string;
|
|
17
|
+
/**
|
|
18
|
+
* 桥所在的 dsh 家目录(绝对路径)。**必须写进 unit**:systemd user 管理器的
|
|
19
|
+
* 环境里没有 DSH_HOME,dsh 会回落到 ~/.dsh —— 用自定义家目录的人会看到服务
|
|
20
|
+
* 反复 exit 1 重启(journal 里是 `profile "x" does not exist`)。
|
|
21
|
+
*/
|
|
22
|
+
dshHome?: string;
|
|
23
|
+
/** 提取好的 homeserver host;undefined = 不写 NO_PROXY。 */
|
|
24
|
+
noProxyHost?: string;
|
|
25
|
+
/** unit 文件名(不含 .service),默认 "dsh-matrix"。 */
|
|
26
|
+
serviceName?: string;
|
|
27
|
+
}
|
|
28
|
+
/** 从 homeserver URL 提取 NO_PROXY 主机名;解析失败返回 null。 */
|
|
29
|
+
export declare function homeserverProxyHost(homeserver: string | undefined): string | null;
|
|
30
|
+
/** 生成 systemd user unit 文本(确定性输出,便于快照测试)。 */
|
|
31
|
+
export declare function buildUserUnit(input: UnitInput): string;
|
|
32
|
+
//# sourceMappingURL=systemd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemd.d.ts","sourceRoot":"","sources":["../../src/cli/systemd.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,SAAS;IACxB,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAA;IACf,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAID,oDAAoD;AACpD,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CASjF;AAED,6CAA6C;AAC7C,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CA8BtD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* systemd user unit 生成(纯函数)+ homeserver→NO_PROXY 提取。
|
|
3
|
+
*
|
|
4
|
+
* 移植自 pi-courier src/cli.ts 的 buildUnit(111-142 行),语义改为:
|
|
5
|
+
* ExecStart 不再是本包 dist,而是当前 node bin 目录里的 dsh 启动器
|
|
6
|
+
* (`<nodeBin> <dshBin> --profile <name>`),并把 nvm bin 目录置于 PATH 首位
|
|
7
|
+
* (systemd 默认 PATH 会找到旧版系统 node——pi-courier 实测坑)。
|
|
8
|
+
* NO_PROXY 从配置 homeserver 提取 host(主会话实测:坏代理会卡死桥连接)。
|
|
9
|
+
*/
|
|
10
|
+
const SYSTEM_PATHS = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin';
|
|
11
|
+
/** 从 homeserver URL 提取 NO_PROXY 主机名;解析失败返回 null。 */
|
|
12
|
+
export function homeserverProxyHost(homeserver) {
|
|
13
|
+
if (!homeserver)
|
|
14
|
+
return null;
|
|
15
|
+
try {
|
|
16
|
+
const url = new URL(homeserver);
|
|
17
|
+
if (!url.hostname)
|
|
18
|
+
return null;
|
|
19
|
+
return url.hostname.toLowerCase();
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** 生成 systemd user unit 文本(确定性输出,便于快照测试)。 */
|
|
26
|
+
export function buildUserUnit(input) {
|
|
27
|
+
const serviceName = input.serviceName ?? 'dsh-matrix';
|
|
28
|
+
const nodeDir = input.nodeBin.replace(/[/\\][^/\\]*$/, '');
|
|
29
|
+
const noProxy = input.noProxyHost
|
|
30
|
+
? `localhost,127.0.0.1,${input.noProxyHost}`
|
|
31
|
+
: undefined;
|
|
32
|
+
const envLines = [`Environment=PATH=${nodeDir}:${SYSTEM_PATHS}`];
|
|
33
|
+
// profile 装在 $DSH_HOME 下,而 systemd user 管理器不带 DSH_HOME:
|
|
34
|
+
// 不显式写死,dsh 会去找 ~/.dsh,自定义家目录下服务会反复 exit 1 重启。
|
|
35
|
+
if (input.dshHome)
|
|
36
|
+
envLines.push(`Environment=DSH_HOME=${input.dshHome}`);
|
|
37
|
+
if (noProxy) {
|
|
38
|
+
envLines.push(`Environment=NO_PROXY=${noProxy}`);
|
|
39
|
+
envLines.push(`Environment=no_proxy=${noProxy}`);
|
|
40
|
+
}
|
|
41
|
+
return `[Unit]
|
|
42
|
+
Description=dsh-matrix (Matrix chat -> DSH agent sessions, profile ${input.profile})
|
|
43
|
+
After=default.target
|
|
44
|
+
|
|
45
|
+
[Service]
|
|
46
|
+
Type=simple
|
|
47
|
+
${envLines.join('\n')}
|
|
48
|
+
ExecStart=${input.nodeBin} ${input.dshBin} --profile ${input.profile}
|
|
49
|
+
Restart=on-failure
|
|
50
|
+
RestartSec=5
|
|
51
|
+
NoNewPrivileges=true
|
|
52
|
+
PrivateTmp=true
|
|
53
|
+
|
|
54
|
+
[Install]
|
|
55
|
+
WantedBy=default.target
|
|
56
|
+
`;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=systemd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemd.js","sourceRoot":"","sources":["../../src/cli/systemd.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAqBH,MAAM,YAAY,GAAG,8DAA8D,CAAA;AAEnF,oDAAoD;AACpD,MAAM,UAAU,mBAAmB,CAAC,UAA8B;IAChE,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAA;QAC/B,IAAI,CAAC,GAAG,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAA;QAC9B,OAAO,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAA;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,aAAa,CAAC,KAAgB;IAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,YAAY,CAAA;IACrD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW;QAC/B,CAAC,CAAC,uBAAuB,KAAK,CAAC,WAAW,EAAE;QAC5C,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,QAAQ,GAAG,CAAC,oBAAoB,OAAO,IAAI,YAAY,EAAE,CAAC,CAAA;IAChE,wDAAwD;IACxD,+CAA+C;IAC/C,IAAI,KAAK,CAAC,OAAO;QAAE,QAAQ,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IACzE,IAAI,OAAO,EAAE,CAAC;QACZ,QAAQ,CAAC,IAAI,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAA;QAChD,QAAQ,CAAC,IAAI,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAA;IAClD,CAAC;IACD,OAAO;qEAC4D,KAAK,CAAC,OAAO;;;;;EAKhF,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACT,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,cAAc,KAAK,CAAC,OAAO;;;;;;;;CAQnE,CAAA;AACD,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export type LogLevelName = 'debug' | 'info' | 'warn' | 'error';
|
|
2
|
+
export interface BridgeConfig {
|
|
3
|
+
homeserver: string;
|
|
4
|
+
username?: string;
|
|
5
|
+
password?: string;
|
|
6
|
+
accessToken?: string;
|
|
7
|
+
trustedUsers: string[];
|
|
8
|
+
workdir: string;
|
|
9
|
+
logLevel: LogLevelName;
|
|
10
|
+
/** Runtime auth persistence (T2). trustedUsers stays a boot snapshot. */
|
|
11
|
+
auth: {
|
|
12
|
+
storePath: string;
|
|
13
|
+
};
|
|
14
|
+
/** Fixed provider/model route; omitted → deployment default at create time. */
|
|
15
|
+
provider?: string;
|
|
16
|
+
model?: string;
|
|
17
|
+
/** true = edit one message as the turn streams (ticket T7). */
|
|
18
|
+
streamReplies?: boolean;
|
|
19
|
+
maxChunkChars?: number;
|
|
20
|
+
/** E2EE 默认开;false 强制明文。 */
|
|
21
|
+
encryption?: boolean;
|
|
22
|
+
/** Matrix 状态目录(sync store + crypto keys);默认由入口给 ~/.dsh/dsh-matrix。 */
|
|
23
|
+
dataDir?: string;
|
|
24
|
+
/** T6 附件策略(US28/41):单附件上限 MB(默认 10);dir 为桥的兜底落盘目录。 */
|
|
25
|
+
attachments: {
|
|
26
|
+
maxMb: number;
|
|
27
|
+
dir?: string;
|
|
28
|
+
};
|
|
29
|
+
/** 一个项目的房间映射条目:cwd + 展示名(US34)。 */
|
|
30
|
+
projects?: Record<string, {
|
|
31
|
+
name?: string;
|
|
32
|
+
workdir: string;
|
|
33
|
+
}>;
|
|
34
|
+
/** true = 多项目模式(pipeline 装配时组合 ProjectMap 提供 resolveCwd)。 */
|
|
35
|
+
multiProject: boolean;
|
|
36
|
+
/** 管理房间持久层在 ProjectMap 存储里;config 值仅作 boot 种子(T12 空间票再扩)。 */
|
|
37
|
+
managementRooms?: string[];
|
|
38
|
+
/** 实例名(管理房间文案 + /pmctl 建房房名);缺省由入口给 os.hostname()。 */
|
|
39
|
+
instanceName?: string;
|
|
40
|
+
/**
|
|
41
|
+
* T12 空间与头像(US38)。`enabled` 打开后,桥把它建的管理房与项目房都归进一个
|
|
42
|
+
* 私有 space(`π <实例名>`),并按名字哈希给每个房间挂内置头像池里的图。
|
|
43
|
+
* `roomId` 是已认领的 space(自愈时复用,不重复建);`avatarPoolVersion` 是
|
|
44
|
+
* 已铺过的头像池版本,落后于 AVATAR_POOL_VERSION 时启动自愈会重铺一次。
|
|
45
|
+
*/
|
|
46
|
+
space?: SpaceConfig;
|
|
47
|
+
}
|
|
48
|
+
export interface SpaceConfig {
|
|
49
|
+
enabled: boolean;
|
|
50
|
+
roomId?: string;
|
|
51
|
+
avatarPoolVersion?: number;
|
|
52
|
+
}
|
|
53
|
+
export declare function loadConfig(row: Record<string, unknown>, env?: NodeJS.ProcessEnv): BridgeConfig;
|
|
54
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE9D,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,YAAY,CAAA;IACtB,yEAAyE;IACzE,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+DAA+D;IAC/D,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sDAAsD;IACtD,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC7D,6DAA6D;IAC7D,YAAY,EAAE,OAAO,CAAA;IACrB,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAwCD,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,YAAY,CAgEd"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* T1 config resolution: row config (from the cordis patch, overridable per
|
|
3
|
+
* profile layer) merged with environment overrides. Pure function - the
|
|
4
|
+
* on-disk ConfigStore (~/.dsh/dsh-matrix.json) arrives with the ops ticket.
|
|
5
|
+
*/
|
|
6
|
+
import { DEFAULT_AUTH_STORE_PATH } from "./auth/store.js";
|
|
7
|
+
/** T12: 逐项校验 space 配置 —— enabled 必须是布尔;roomId/版本可选。 */
|
|
8
|
+
function parseSpace(value) {
|
|
9
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
10
|
+
return undefined;
|
|
11
|
+
const row = value;
|
|
12
|
+
if (typeof row.enabled !== 'boolean')
|
|
13
|
+
return undefined;
|
|
14
|
+
const out = { enabled: row.enabled };
|
|
15
|
+
if (typeof row.roomId === 'string' && row.roomId)
|
|
16
|
+
out.roomId = row.roomId;
|
|
17
|
+
if (typeof row.avatarPoolVersion === 'number' && Number.isFinite(row.avatarPoolVersion)) {
|
|
18
|
+
out.avatarPoolVersion = row.avatarPoolVersion;
|
|
19
|
+
}
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
function isLogLevel(value) {
|
|
23
|
+
return value === 'debug' || value === 'info' || value === 'warn' || value === 'error';
|
|
24
|
+
}
|
|
25
|
+
/** T9: 逐项校验项目映射 —— workdir 必须是非空字符串;name 可选字符串。 */
|
|
26
|
+
function parseProjects(value) {
|
|
27
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
28
|
+
return undefined;
|
|
29
|
+
const out = {};
|
|
30
|
+
for (const [roomId, raw] of Object.entries(value)) {
|
|
31
|
+
if (typeof raw !== 'object' || raw === null)
|
|
32
|
+
continue;
|
|
33
|
+
const entry = raw;
|
|
34
|
+
if (typeof entry.workdir !== 'string' || !entry.workdir)
|
|
35
|
+
continue;
|
|
36
|
+
out[roomId] = typeof entry.name === 'string' && entry.name
|
|
37
|
+
? { name: entry.name, workdir: entry.workdir }
|
|
38
|
+
: { workdir: entry.workdir };
|
|
39
|
+
}
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
function parseStringList(value) {
|
|
43
|
+
if (!Array.isArray(value))
|
|
44
|
+
return undefined;
|
|
45
|
+
const out = value.filter((x) => typeof x === 'string' && x.length > 0);
|
|
46
|
+
return out.length > 0 ? out : undefined;
|
|
47
|
+
}
|
|
48
|
+
export function loadConfig(row, env = process.env) {
|
|
49
|
+
const homeserver = env.PI_MATRIX_HOMESERVER ?? row.homeserver;
|
|
50
|
+
const rowToken = row.accessToken;
|
|
51
|
+
const accessToken = env.PI_MATRIX_ACCESS_TOKEN ?? rowToken;
|
|
52
|
+
const username = row.username;
|
|
53
|
+
const password = row.password;
|
|
54
|
+
const trustedRaw = env.PI_MATRIX_TRUSTED_USERS ?? row.trustedUsers;
|
|
55
|
+
const trustedUsers = typeof trustedRaw === 'string'
|
|
56
|
+
? trustedRaw.split(',').map((s) => s.trim()).filter(Boolean)
|
|
57
|
+
: Array.isArray(trustedRaw) ? trustedRaw.map(String) : [];
|
|
58
|
+
const logLevelEnv = env.PI_LOG_LEVEL;
|
|
59
|
+
const logLevel = isLogLevel(logLevelEnv) ? logLevelEnv : isLogLevel(row.logLevel) ? row.logLevel : 'info';
|
|
60
|
+
const workdir = env.PI_WORKDIR ?? row.workdir ?? '~';
|
|
61
|
+
const rowAuth = typeof row.auth === 'object' && row.auth !== null ? row.auth : {};
|
|
62
|
+
const authStorePath = env.PI_MATRIX_AUTH_STORE
|
|
63
|
+
?? (typeof rowAuth.storePath === 'string' && rowAuth.storePath ? rowAuth.storePath : undefined)
|
|
64
|
+
?? DEFAULT_AUTH_STORE_PATH;
|
|
65
|
+
// T6 attachments: nested row object; env wins over the row; junk falls back
|
|
66
|
+
// to the 10 MB default rather than throwing at boot.
|
|
67
|
+
const rowAtt = typeof row.attachments === 'object' && row.attachments !== null ? row.attachments : {};
|
|
68
|
+
const envMaxMb = env.PI_MATRIX_ATTACH_MAX_MB !== undefined ? Number(env.PI_MATRIX_ATTACH_MAX_MB) : Number.NaN;
|
|
69
|
+
const maxMb = Number.isFinite(envMaxMb) && envMaxMb > 0
|
|
70
|
+
? envMaxMb
|
|
71
|
+
: (typeof rowAtt.maxMb === 'number' && rowAtt.maxMb > 0 ? rowAtt.maxMb : 10);
|
|
72
|
+
const attachDir = typeof rowAtt.dir === 'string' && rowAtt.dir ? rowAtt.dir : undefined;
|
|
73
|
+
const missing = [];
|
|
74
|
+
if (!homeserver)
|
|
75
|
+
missing.push('homeserver');
|
|
76
|
+
if (!accessToken && !(username && password))
|
|
77
|
+
missing.push('accessToken(或 username+password)');
|
|
78
|
+
if (missing.length > 0) {
|
|
79
|
+
throw new Error(`dsh-matrix 配置缺少: ${missing.join('、')}(用 dsh plugin add 后在 profile 的 cordis.patch.yml 按 id matrix-bridge 覆盖 config)`);
|
|
80
|
+
}
|
|
81
|
+
const parsedProjects = parseProjects(row.projects);
|
|
82
|
+
const parsedManagementRooms = parseStringList(row.managementRooms);
|
|
83
|
+
const parsedSpace = parseSpace(row.space);
|
|
84
|
+
return {
|
|
85
|
+
homeserver: String(homeserver),
|
|
86
|
+
...(username ? { username: String(username) } : {}),
|
|
87
|
+
...(password ? { password: String(password) } : {}),
|
|
88
|
+
...(accessToken ? { accessToken: String(accessToken) } : {}),
|
|
89
|
+
trustedUsers,
|
|
90
|
+
workdir: String(workdir),
|
|
91
|
+
logLevel,
|
|
92
|
+
auth: { storePath: authStorePath },
|
|
93
|
+
...(typeof row.provider === 'string' && row.provider ? { provider: row.provider } : {}),
|
|
94
|
+
...(typeof row.model === 'string' && row.model ? { model: row.model } : {}),
|
|
95
|
+
...(typeof row.streamReplies === 'boolean' ? { streamReplies: row.streamReplies } : {}),
|
|
96
|
+
...(typeof row.maxChunkChars === 'number' ? { maxChunkChars: row.maxChunkChars } : {}),
|
|
97
|
+
...(typeof row.encryption === 'boolean' ? { encryption: row.encryption } : {}),
|
|
98
|
+
...(typeof row.dataDir === 'string' && row.dataDir ? { dataDir: row.dataDir } : {}),
|
|
99
|
+
attachments: { maxMb, ...(attachDir ? { dir: attachDir } : {}) },
|
|
100
|
+
...(parsedProjects ? { projects: parsedProjects } : {}),
|
|
101
|
+
multiProject: row.multiProject === true,
|
|
102
|
+
...(parsedManagementRooms ? { managementRooms: parsedManagementRooms } : {}),
|
|
103
|
+
...(typeof row.instanceName === 'string' && row.instanceName ? { instanceName: row.instanceName } : {}),
|
|
104
|
+
...(parsedSpace ? { space: parsedSpace } : {}),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAiDzD,uDAAuD;AACvD,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACzF,MAAM,GAAG,GAAG,KAAgC,CAAA;IAC5C,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACtD,MAAM,GAAG,GAAgB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAA;IACjD,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM;QAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;IACzE,IAAI,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACxF,GAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC,iBAAiB,CAAA;IAC/C,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,CAAA;AACvF,CAAC;AAED,mDAAmD;AACnD,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACzF,MAAM,GAAG,GAAuD,EAAE,CAAA;IAClE,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QAC7E,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAE,SAAQ;QACrD,MAAM,KAAK,GAAG,GAA8B,CAAA;QAC5C,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,SAAQ;QACjE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI;YACxD,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;YAC9C,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAA;IAChC,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACnF,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,GAA4B,EAC5B,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,UAAU,GAAG,GAAG,CAAC,oBAAoB,IAAK,GAAG,CAAC,UAAiC,CAAA;IACrF,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAiC,CAAA;IACtD,MAAM,WAAW,GAAG,GAAG,CAAC,sBAAsB,IAAI,QAAQ,CAAA;IAC1D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAA8B,CAAA;IACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAA8B,CAAA;IAEnD,MAAM,UAAU,GAAG,GAAG,CAAC,uBAAuB,IAAK,GAAG,CAAC,YAA8C,CAAA;IACrG,MAAM,YAAY,GAAG,OAAO,UAAU,KAAK,QAAQ;QACjD,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAC5D,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAE3D,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAA;IACpC,MAAM,QAAQ,GAAiB,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAA;IAEvH,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,IAAK,GAAG,CAAC,OAA8B,IAAI,GAAG,CAAA;IAE5E,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAA+B,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5G,MAAM,aAAa,GAAG,GAAG,CAAC,oBAAoB;WACzC,CAAC,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;WAC5F,uBAAuB,CAAA;IAE5B,4EAA4E;IAC5E,qDAAqD;IACrD,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,WAAsC,CAAC,CAAC,CAAC,EAAE,CAAA;IAChI,MAAM,QAAQ,GAAG,GAAG,CAAC,uBAAuB,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA;IAC7G,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;QACrD,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC9E,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;IAEvF,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC3C,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IAC7F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAA;IACvI,CAAC;IAED,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAClD,MAAM,qBAAqB,GAAG,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IAClE,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAEzC,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;QAC9B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,YAAY;QACZ,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;QACxB,QAAQ;QACR,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE;QAClC,GAAG,CAAC,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,GAAG,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,OAAO,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,GAAG,CAAC,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,GAAG,CAAC,OAAO,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QAChE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,YAAY,EAAE,GAAG,CAAC,YAAY,KAAK,IAAI;QACvC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/C,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { Backend, ModelInfo, ModelSelection, PassthroughCommandInfo, SessionHandle, SessionListEntry, ThinkingEffort } from '../ports/backend.ts';
|
|
3
|
+
import type { Logger } from '../types.ts';
|
|
4
|
+
interface UserMessageLike {
|
|
5
|
+
content?: unknown[];
|
|
6
|
+
}
|
|
7
|
+
/** Structural view of dsh-agent's public `Inbox` (nextTurn/nextStep pending). */
|
|
8
|
+
interface InboxLike {
|
|
9
|
+
readonly nextTurn?: readonly UserMessageLike[];
|
|
10
|
+
readonly nextStep?: readonly UserMessageLike[];
|
|
11
|
+
}
|
|
12
|
+
interface AgentLike {
|
|
13
|
+
readonly session: {
|
|
14
|
+
id: string;
|
|
15
|
+
snapshotEvents(): readonly unknown[];
|
|
16
|
+
};
|
|
17
|
+
readonly status: string;
|
|
18
|
+
/** Durable pending work; present with the default loop driver, absent-safe. */
|
|
19
|
+
readonly inbox?: InboxLike;
|
|
20
|
+
/** Live route of this agent (dsh-agent runtime-types Agent.options). */
|
|
21
|
+
readonly options?: {
|
|
22
|
+
provider?: string;
|
|
23
|
+
model?: string;
|
|
24
|
+
reasoningEffort?: string;
|
|
25
|
+
};
|
|
26
|
+
followup(message: unknown): void;
|
|
27
|
+
steer(message: unknown): void;
|
|
28
|
+
inject(message: unknown): void;
|
|
29
|
+
whenIdle(): Promise<void>;
|
|
30
|
+
cancel(cause: unknown, options?: {
|
|
31
|
+
keepInbox?: boolean;
|
|
32
|
+
}): void;
|
|
33
|
+
}
|
|
34
|
+
interface AgentHandleLike {
|
|
35
|
+
readonly agent: AgentLike;
|
|
36
|
+
dispose(): Promise<void> | void;
|
|
37
|
+
}
|
|
38
|
+
interface AgentsServiceLike {
|
|
39
|
+
create(options: {
|
|
40
|
+
sessionId: string;
|
|
41
|
+
meta?: Record<string, unknown>;
|
|
42
|
+
agentOptions?: Record<string, unknown>;
|
|
43
|
+
setup?: (agentCtx: unknown, agent: AgentLike) => unknown;
|
|
44
|
+
}): Promise<AgentHandleLike>;
|
|
45
|
+
/** Resume one persisted session (room sessions survive bridge restarts).
|
|
46
|
+
* NOTE: Cordis service proxies prepend the caller context automatically -
|
|
47
|
+
* call sites pass ONLY the options object (verified against dsh-acp callers). */
|
|
48
|
+
resume(options: {
|
|
49
|
+
resumeSessionId: string;
|
|
50
|
+
agentOptions?: Record<string, unknown>;
|
|
51
|
+
}): Promise<AgentHandleLike>;
|
|
52
|
+
get(id: string): AgentLike | undefined;
|
|
53
|
+
}
|
|
54
|
+
/** 房间 ID → 安全子目录名(pi-courier sanitizeRoomKey 同式)。 */
|
|
55
|
+
export declare function sanitizeRoomDir(roomId: string): string;
|
|
56
|
+
/** 文件名消毒:去路径分隔符与控制字符,限长;空回退 attachment。 */
|
|
57
|
+
export declare function safeFileName(name: string | undefined): string;
|
|
58
|
+
/** Structural slice of the host context this adapter consumes. */
|
|
59
|
+
export interface DshContext {
|
|
60
|
+
agents: AgentsServiceLike;
|
|
61
|
+
get?(name: string): unknown;
|
|
62
|
+
}
|
|
63
|
+
export interface DshBackendOptions {
|
|
64
|
+
logger: Logger;
|
|
65
|
+
/** Provider/model route; omitted → the deployment's current default. */
|
|
66
|
+
provider?: string;
|
|
67
|
+
model?: string;
|
|
68
|
+
/** T6: 附件服务不可用时的兜底落盘目录(config attachments.dir ?? <dataDir>/attachments)。 */
|
|
69
|
+
attachmentsDir?: string;
|
|
70
|
+
}
|
|
71
|
+
export declare class DshBackend implements Backend {
|
|
72
|
+
private readonly opts;
|
|
73
|
+
private readonly handles;
|
|
74
|
+
private readonly sessions;
|
|
75
|
+
/** sessionId → roomId 归属表:T5 interactions 用它判定"这是不是桥的会话"。 */
|
|
76
|
+
private readonly sessionRoom;
|
|
77
|
+
private readonly ctx;
|
|
78
|
+
constructor(ctx: Context, opts: DshBackendOptions);
|
|
79
|
+
/** Stable, idempotent session id for a Matrix room id. */
|
|
80
|
+
static sessionIdFor(roomId: string): string;
|
|
81
|
+
/** Late-read the attachments service (profile may mount it after us). */
|
|
82
|
+
private attachmentsService;
|
|
83
|
+
private makeSession;
|
|
84
|
+
executeCommand(roomId: string, line: string): Promise<string | undefined>;
|
|
85
|
+
listPassthroughCommands(roomId: string): Promise<PassthroughCommandInfo[]>;
|
|
86
|
+
getSession(roomId: string, cwd: string): Promise<SessionHandle>;
|
|
87
|
+
peekSession(roomId: string): SessionHandle | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* T11(/sessions):本进程已知的房间↔会话绑定,只读。
|
|
90
|
+
* 归属表是新增会话时写进去的(T5 也用它判定"这是不是桥的会话"),这里按
|
|
91
|
+
* roomId 排序输出,保证同一状态下列表稳定(便于人读与测试)。
|
|
92
|
+
*/
|
|
93
|
+
listSessions(): Promise<SessionListEntry[]>;
|
|
94
|
+
/**
|
|
95
|
+
* T9: 放掉房间的会话句柄(dispose + 清 map),持久会话数据保留(US35)。
|
|
96
|
+
* 幂等:未开过的房间直接返回。
|
|
97
|
+
*/
|
|
98
|
+
dropRoomSession(roomId: string): Promise<void>;
|
|
99
|
+
private llmService;
|
|
100
|
+
listModels(): Promise<ModelInfo[]>;
|
|
101
|
+
currentModel(roomId: string): Promise<ModelSelection | undefined>;
|
|
102
|
+
selectModel(roomId: string, provider: string, model: string, reasoningEffort?: string): Promise<ModelSelection>;
|
|
103
|
+
renameSession(roomId: string, title: string): Promise<void>;
|
|
104
|
+
listThinkingEfforts(provider: string, model: string): Promise<ThinkingEffort[]>;
|
|
105
|
+
/** 反查:该桥会话 id 属于哪个房间?非桥会话返回 undefined。(T5 归属判定) */
|
|
106
|
+
roomIdForSession(sessionId: string): string | undefined;
|
|
107
|
+
dispose(): Promise<void>;
|
|
108
|
+
}
|
|
109
|
+
export {};
|
|
110
|
+
//# sourceMappingURL=backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/dsh/backend.ts"],"names":[],"mappings":"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"}
|