@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.
Files changed (206) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +286 -0
  3. package/THIRD_PARTY_NOTICES.md +53 -0
  4. package/assets/avatars/instance-01.png +0 -0
  5. package/assets/avatars/instance-02.png +0 -0
  6. package/assets/avatars/instance-03.png +0 -0
  7. package/assets/avatars/instance-04.png +0 -0
  8. package/assets/avatars/instance-05.png +0 -0
  9. package/assets/avatars/instance-06.png +0 -0
  10. package/assets/avatars/instance-07.png +0 -0
  11. package/assets/avatars/instance-08.png +0 -0
  12. package/assets/avatars/instance-09.png +0 -0
  13. package/assets/avatars/instance-10.png +0 -0
  14. package/assets/avatars/instance-11.png +0 -0
  15. package/assets/avatars/instance-12.png +0 -0
  16. package/assets/avatars/management.png +0 -0
  17. package/cordis.patch.yml +13 -0
  18. package/dist/auth/admin-commands.d.ts +47 -0
  19. package/dist/auth/admin-commands.d.ts.map +1 -0
  20. package/dist/auth/admin-commands.js +112 -0
  21. package/dist/auth/admin-commands.js.map +1 -0
  22. package/dist/auth/challenge.d.ts +93 -0
  23. package/dist/auth/challenge.d.ts.map +1 -0
  24. package/dist/auth/challenge.js +104 -0
  25. package/dist/auth/challenge.js.map +1 -0
  26. package/dist/auth/store.d.ts +55 -0
  27. package/dist/auth/store.d.ts.map +1 -0
  28. package/dist/auth/store.js +124 -0
  29. package/dist/auth/store.js.map +1 -0
  30. package/dist/bridge/agent-commands.d.ts +39 -0
  31. package/dist/bridge/agent-commands.d.ts.map +1 -0
  32. package/dist/bridge/agent-commands.js +243 -0
  33. package/dist/bridge/agent-commands.js.map +1 -0
  34. package/dist/bridge/attachments-ledger.d.ts +54 -0
  35. package/dist/bridge/attachments-ledger.d.ts.map +1 -0
  36. package/dist/bridge/attachments-ledger.js +68 -0
  37. package/dist/bridge/attachments-ledger.js.map +1 -0
  38. package/dist/bridge/commands.d.ts +28 -0
  39. package/dist/bridge/commands.d.ts.map +1 -0
  40. package/dist/bridge/commands.js +18 -0
  41. package/dist/bridge/commands.js.map +1 -0
  42. package/dist/bridge/crypto-health.d.ts +37 -0
  43. package/dist/bridge/crypto-health.d.ts.map +1 -0
  44. package/dist/bridge/crypto-health.js +38 -0
  45. package/dist/bridge/crypto-health.js.map +1 -0
  46. package/dist/bridge/group-gate.d.ts +38 -0
  47. package/dist/bridge/group-gate.d.ts.map +1 -0
  48. package/dist/bridge/group-gate.js +49 -0
  49. package/dist/bridge/group-gate.js.map +1 -0
  50. package/dist/bridge/instance-lock.d.ts +10 -0
  51. package/dist/bridge/instance-lock.d.ts.map +1 -0
  52. package/dist/bridge/instance-lock.js +82 -0
  53. package/dist/bridge/instance-lock.js.map +1 -0
  54. package/dist/bridge/interactions.d.ts +62 -0
  55. package/dist/bridge/interactions.d.ts.map +1 -0
  56. package/dist/bridge/interactions.js +237 -0
  57. package/dist/bridge/interactions.js.map +1 -0
  58. package/dist/bridge/management-room.d.ts +13 -0
  59. package/dist/bridge/management-room.d.ts.map +1 -0
  60. package/dist/bridge/management-room.js +27 -0
  61. package/dist/bridge/management-room.js.map +1 -0
  62. package/dist/bridge/multi-project.d.ts +34 -0
  63. package/dist/bridge/multi-project.d.ts.map +1 -0
  64. package/dist/bridge/multi-project.js +44 -0
  65. package/dist/bridge/multi-project.js.map +1 -0
  66. package/dist/bridge/pipeline.d.ts +151 -0
  67. package/dist/bridge/pipeline.d.ts.map +1 -0
  68. package/dist/bridge/pipeline.js +502 -0
  69. package/dist/bridge/pipeline.js.map +1 -0
  70. package/dist/bridge/pmctl.d.ts +50 -0
  71. package/dist/bridge/pmctl.d.ts.map +1 -0
  72. package/dist/bridge/pmctl.js +272 -0
  73. package/dist/bridge/pmctl.js.map +1 -0
  74. package/dist/bridge/power-levels.d.ts +57 -0
  75. package/dist/bridge/power-levels.d.ts.map +1 -0
  76. package/dist/bridge/power-levels.js +92 -0
  77. package/dist/bridge/power-levels.js.map +1 -0
  78. package/dist/bridge/power-sync.d.ts +64 -0
  79. package/dist/bridge/power-sync.d.ts.map +1 -0
  80. package/dist/bridge/power-sync.js +121 -0
  81. package/dist/bridge/power-sync.js.map +1 -0
  82. package/dist/bridge/projects.d.ts +97 -0
  83. package/dist/bridge/projects.d.ts.map +1 -0
  84. package/dist/bridge/projects.js +288 -0
  85. package/dist/bridge/projects.js.map +1 -0
  86. package/dist/bridge/quote-cache.d.ts +38 -0
  87. package/dist/bridge/quote-cache.d.ts.map +1 -0
  88. package/dist/bridge/quote-cache.js +56 -0
  89. package/dist/bridge/quote-cache.js.map +1 -0
  90. package/dist/bridge/reply.d.ts +31 -0
  91. package/dist/bridge/reply.d.ts.map +1 -0
  92. package/dist/bridge/reply.js +122 -0
  93. package/dist/bridge/reply.js.map +1 -0
  94. package/dist/bridge/space-identity.d.ts +43 -0
  95. package/dist/bridge/space-identity.d.ts.map +1 -0
  96. package/dist/bridge/space-identity.js +92 -0
  97. package/dist/bridge/space-identity.js.map +1 -0
  98. package/dist/bridge/space-sync.d.ts +94 -0
  99. package/dist/bridge/space-sync.d.ts.map +1 -0
  100. package/dist/bridge/space-sync.js +137 -0
  101. package/dist/bridge/space-sync.js.map +1 -0
  102. package/dist/bridge/turn-commands.d.ts +28 -0
  103. package/dist/bridge/turn-commands.d.ts.map +1 -0
  104. package/dist/bridge/turn-commands.js +97 -0
  105. package/dist/bridge/turn-commands.js.map +1 -0
  106. package/dist/cli/config-store.d.ts +32 -0
  107. package/dist/cli/config-store.d.ts.map +1 -0
  108. package/dist/cli/config-store.js +118 -0
  109. package/dist/cli/config-store.js.map +1 -0
  110. package/dist/cli/crypto-store.d.ts +42 -0
  111. package/dist/cli/crypto-store.d.ts.map +1 -0
  112. package/dist/cli/crypto-store.js +70 -0
  113. package/dist/cli/crypto-store.js.map +1 -0
  114. package/dist/cli/device-prune.d.ts +105 -0
  115. package/dist/cli/device-prune.d.ts.map +1 -0
  116. package/dist/cli/device-prune.js +163 -0
  117. package/dist/cli/device-prune.js.map +1 -0
  118. package/dist/cli/index.d.ts +4 -0
  119. package/dist/cli/index.d.ts.map +1 -0
  120. package/dist/cli/index.js +584 -0
  121. package/dist/cli/index.js.map +1 -0
  122. package/dist/cli/log-filter.d.ts +32 -0
  123. package/dist/cli/log-filter.d.ts.map +1 -0
  124. package/dist/cli/log-filter.js +40 -0
  125. package/dist/cli/log-filter.js.map +1 -0
  126. package/dist/cli/pnpm-builds.d.ts +32 -0
  127. package/dist/cli/pnpm-builds.d.ts.map +1 -0
  128. package/dist/cli/pnpm-builds.js +73 -0
  129. package/dist/cli/pnpm-builds.js.map +1 -0
  130. package/dist/cli/profile-patch.d.ts +26 -0
  131. package/dist/cli/profile-patch.d.ts.map +1 -0
  132. package/dist/cli/profile-patch.js +56 -0
  133. package/dist/cli/profile-patch.js.map +1 -0
  134. package/dist/cli/setup.d.ts +39 -0
  135. package/dist/cli/setup.d.ts.map +1 -0
  136. package/dist/cli/setup.js +234 -0
  137. package/dist/cli/setup.js.map +1 -0
  138. package/dist/cli/systemd-hint.d.ts +11 -0
  139. package/dist/cli/systemd-hint.d.ts.map +1 -0
  140. package/dist/cli/systemd-hint.js +46 -0
  141. package/dist/cli/systemd-hint.js.map +1 -0
  142. package/dist/cli/systemd.d.ts +32 -0
  143. package/dist/cli/systemd.d.ts.map +1 -0
  144. package/dist/cli/systemd.js +58 -0
  145. package/dist/cli/systemd.js.map +1 -0
  146. package/dist/config.d.ts +54 -0
  147. package/dist/config.d.ts.map +1 -0
  148. package/dist/config.js +107 -0
  149. package/dist/config.js.map +1 -0
  150. package/dist/dsh/backend.d.ts +110 -0
  151. package/dist/dsh/backend.d.ts.map +1 -0
  152. package/dist/dsh/backend.js +481 -0
  153. package/dist/dsh/backend.js.map +1 -0
  154. package/dist/dsh/interactions.d.ts +50 -0
  155. package/dist/dsh/interactions.d.ts.map +1 -0
  156. package/dist/dsh/interactions.js +141 -0
  157. package/dist/dsh/interactions.js.map +1 -0
  158. package/dist/dsh/stream.d.ts +32 -0
  159. package/dist/dsh/stream.d.ts.map +1 -0
  160. package/dist/dsh/stream.js +109 -0
  161. package/dist/dsh/stream.js.map +1 -0
  162. package/dist/formatting.d.ts +14 -0
  163. package/dist/formatting.d.ts.map +1 -0
  164. package/dist/formatting.js +63 -0
  165. package/dist/formatting.js.map +1 -0
  166. package/dist/index.d.ts +8 -0
  167. package/dist/index.d.ts.map +1 -0
  168. package/dist/index.js +232 -0
  169. package/dist/index.js.map +1 -0
  170. package/dist/logger.d.ts +9 -0
  171. package/dist/logger.d.ts.map +1 -0
  172. package/dist/logger.js +28 -0
  173. package/dist/logger.js.map +1 -0
  174. package/dist/matrix/matrix-events.d.ts +49 -0
  175. package/dist/matrix/matrix-events.d.ts.map +1 -0
  176. package/dist/matrix/matrix-events.js +89 -0
  177. package/dist/matrix/matrix-events.js.map +1 -0
  178. package/dist/matrix/transport.d.ts +192 -0
  179. package/dist/matrix/transport.d.ts.map +1 -0
  180. package/dist/matrix/transport.js +510 -0
  181. package/dist/matrix/transport.js.map +1 -0
  182. package/dist/ports/attachments.d.ts +51 -0
  183. package/dist/ports/attachments.d.ts.map +1 -0
  184. package/dist/ports/attachments.js +27 -0
  185. package/dist/ports/attachments.js.map +1 -0
  186. package/dist/ports/backend.d.ts +159 -0
  187. package/dist/ports/backend.d.ts.map +1 -0
  188. package/dist/ports/backend.js +25 -0
  189. package/dist/ports/backend.js.map +1 -0
  190. package/dist/ports/interactions.d.ts +65 -0
  191. package/dist/ports/interactions.d.ts.map +1 -0
  192. package/dist/ports/interactions.js +15 -0
  193. package/dist/ports/interactions.js.map +1 -0
  194. package/dist/ports/streaming.d.ts +45 -0
  195. package/dist/ports/streaming.d.ts.map +1 -0
  196. package/dist/ports/streaming.js +23 -0
  197. package/dist/ports/streaming.js.map +1 -0
  198. package/dist/ports/transport.d.ts +68 -0
  199. package/dist/ports/transport.d.ts.map +1 -0
  200. package/dist/ports/transport.js +2 -0
  201. package/dist/ports/transport.js.map +1 -0
  202. package/dist/types.d.ts +53 -0
  203. package/dist/types.d.ts.map +1 -0
  204. package/dist/types.js +2 -0
  205. package/dist/types.js.map +1 -0
  206. package/package.json +80 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/bridge/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { Backend } from '../ports/backend.ts';
2
+ import type { Transport } from '../ports/transport.ts';
3
+ import type { Logger } from '../types.ts';
4
+ import { type ProjectMap } from './projects.ts';
5
+ export interface PmctlCall {
6
+ /** 命令来源房间(也是 /pmctl rm 两步确认的键)。 */
7
+ roomId: string;
8
+ /** /pmctl new 的邀请对象(transport 原生 MXID)。 */
9
+ sender: string;
10
+ /** 该房是否管理房间。 */
11
+ isManagementRoom: boolean;
12
+ }
13
+ export type PmctlReply = (text: string) => Promise<void>;
14
+ export interface PmctlDeps {
15
+ map: ProjectMap;
16
+ transport: Transport;
17
+ backend: Backend;
18
+ logger: Logger;
19
+ instanceName: string;
20
+ multiProject: boolean;
21
+ /**
22
+ * T12(US37):房间建好后按**提权账本**给 trusted 提权(由装配层注入,因为它同时
23
+ * 需要 trusted 名单、账本与持久层)。不注入 → 退回旧的"只给创建者提 PL100"。
24
+ */
25
+ onRoomCreated?: (roomId: string) => Promise<void>;
26
+ /** 缺省时间源(测试注入假时钟做两步确认超时)。 */
27
+ now?: () => number;
28
+ }
29
+ export declare function isPmctlText(text: string): boolean;
30
+ export declare class PmctlController {
31
+ private readonly deps;
32
+ private readonly pendingRm;
33
+ private readonly now;
34
+ constructor(deps: PmctlDeps);
35
+ /** 处理一条 /pmctl 家族文本。返回 false = 不是本家族命令(上层回落);
36
+ * 被拒的命令也算已处理(回执过)返回 true。 */
37
+ handle(text: string, call: PmctlCall, reply: PmctlReply): Promise<boolean>;
38
+ /** 当前全部项目标签(名字/缺省 workdir basename)——重名校验集。 */
39
+ private currentLabels;
40
+ /** 目标(名字或房间 ID)解析到 [roomId, entry];照蓝本用 projectLabelOf 匹配。 */
41
+ private findProject;
42
+ private isRunning;
43
+ private listText;
44
+ private newProject;
45
+ private show;
46
+ private rm;
47
+ private mv;
48
+ private rename;
49
+ }
50
+ //# sourceMappingURL=pmctl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pmctl.d.ts","sourceRoot":"","sources":["../../src/bridge/pmctl.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAA2D,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AAExG,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB;IAChB,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAExD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,UAAU,CAAA;IACf,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,OAAO,CAAA;IACrB;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAYD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,qBAAa,eAAe;IAId,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;gBAEL,IAAI,EAAE,SAAS;IAI5C;kCAC8B;IACxB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAyChF,+CAA+C;IAC/C,OAAO,CAAC,aAAa;IAIrB,8DAA8D;IAC9D,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,QAAQ;YAUF,UAAU;YA0CV,IAAI;YAcJ,EAAE;YAwCF,EAAE;YAmBF,MAAM;CAmBrB"}
@@ -0,0 +1,272 @@
1
+ /**
2
+ * T9: /pmctl 命令家族(多项目管理)—— 移植 pi-courier pmctl-controller.ts
3
+ * 的门禁与五操作(new/list/show/rm/mv/rename),按 DSH 桥差异裁剪:
4
+ * - 项目 = 同进程内不同 cwd 的会话映射(pi-courier 是每项目一子进程);
5
+ * - rm/mv 的"停进程"换成 backend.dropRoomSession(放句柄、留持久会话);
6
+ * - 不做空间挂接/头像(留给 T12 空间票)。
7
+ *
8
+ * 门禁(照蓝本 66-132):multiProject on → 管理房间 → 房间能力可用;任一不过
9
+ * 都是"已处理并回执"。命令门之外的 trusted 判定由 pipeline 上游完成。
10
+ */
11
+ import { mkdirSync } from 'node:fs';
12
+ import { projectLabelOf, validateProjectLabel } from "./projects.js";
13
+ /** /pmctl rm 两步确认:键 = 发起房间,60 秒窗口。 */
14
+ const RM_CONFIRM_WINDOW_MS = 60_000;
15
+ /** 拆前导词("op rest")。 */
16
+ function splitFirst(s) {
17
+ const sp = s.indexOf(' ');
18
+ return sp === -1 ? [s.trim(), ''] : [s.slice(0, sp).trim(), s.slice(sp + 1).trim()];
19
+ }
20
+ export function isPmctlText(text) {
21
+ return /^\/(pmctl|newproject|projects)(\s|$)/.test(text.trim());
22
+ }
23
+ export class PmctlController {
24
+ deps;
25
+ pendingRm = new Map();
26
+ now;
27
+ constructor(deps) {
28
+ this.deps = deps;
29
+ this.now = deps.now ?? Date.now;
30
+ }
31
+ /** 处理一条 /pmctl 家族文本。返回 false = 不是本家族命令(上层回落);
32
+ * 被拒的命令也算已处理(回执过)返回 true。 */
33
+ async handle(text, call, reply) {
34
+ const trimmed = text.trim();
35
+ if (!isPmctlText(trimmed))
36
+ return false;
37
+ if (!this.deps.multiProject) {
38
+ await reply('❌ 当前为单工程模式,未启用项目管理。');
39
+ return true;
40
+ }
41
+ if (!call.isManagementRoom) {
42
+ await reply('❌ /pmctl 仅可在管理房间(与 bot 的私聊)使用');
43
+ return true;
44
+ }
45
+ if (!this.deps.transport.createRoom) {
46
+ await reply('❌ /pmctl 不可用(仅 Matrix 部署支持)');
47
+ return true;
48
+ }
49
+ const spaceIndex = trimmed.indexOf(' ');
50
+ const args = spaceIndex === -1 ? '' : trimmed.slice(spaceIndex + 1).trim();
51
+ let op;
52
+ let rest;
53
+ if (trimmed.startsWith('/newproject')) {
54
+ op = 'new';
55
+ rest = args;
56
+ }
57
+ else if (trimmed.startsWith('/projects')) {
58
+ op = 'list';
59
+ rest = args;
60
+ }
61
+ else {
62
+ ;
63
+ [op, rest] = splitFirst(args);
64
+ if (!op)
65
+ op = 'list';
66
+ }
67
+ switch (op) {
68
+ case 'new':
69
+ await this.newProject(rest, call, reply);
70
+ return true;
71
+ case 'list':
72
+ await reply(this.listText());
73
+ return true;
74
+ case 'show':
75
+ await this.show(rest, reply);
76
+ return true;
77
+ case 'rm':
78
+ await this.rm(rest, call, reply);
79
+ return true;
80
+ case 'mv':
81
+ await this.mv(rest, reply);
82
+ return true;
83
+ case 'rename':
84
+ await this.rename(rest, reply);
85
+ return true;
86
+ default:
87
+ await reply(`❌ 未知操作: ${op}\n可用操作: new / list / show / rm / mv / rename`);
88
+ return true;
89
+ }
90
+ }
91
+ /** 当前全部项目标签(名字/缺省 workdir basename)——重名校验集。 */
92
+ currentLabels() {
93
+ return this.deps.map.list().map(([, p]) => projectLabelOf(p));
94
+ }
95
+ /** 目标(名字或房间 ID)解析到 [roomId, entry];照蓝本用 projectLabelOf 匹配。 */
96
+ findProject(target) {
97
+ for (const [roomId, p] of this.deps.map.list()) {
98
+ if (projectLabelOf(p) === target || roomId === target)
99
+ return [roomId, p];
100
+ }
101
+ return undefined;
102
+ }
103
+ isRunning(roomId) {
104
+ return this.deps.backend.peekSession(roomId) !== undefined;
105
+ }
106
+ listText() {
107
+ const projects = this.deps.map.list();
108
+ if (projects.length === 0)
109
+ return '暂无项目(用 /pmctl new <名称> [路径] 创建)';
110
+ const lines = projects.map(([roomId, p]) => {
111
+ const status = this.isRunning(roomId) ? '✅ 运行中' : '⏸️ 未启动';
112
+ return `• ${projectLabelOf(p)} — ${status}\n ${p.workdir} (${roomId})`;
113
+ });
114
+ return `**项目列表** (${projects.length}):\n${lines.join('\n')}`;
115
+ }
116
+ async newProject(rest, call, reply) {
117
+ const [pname, workdirArg] = splitFirst(rest);
118
+ if (!pname) {
119
+ await reply('用法: /pmctl new <项目名> [路径]\n' +
120
+ '路径可选:缺省为工程根下同名目录(newapp → <工程根>/newapp);也可用相对或绝对路径。');
121
+ return;
122
+ }
123
+ const labelError = validateProjectLabel(pname, this.currentLabels());
124
+ if (labelError) {
125
+ await reply(`❌ ${labelError}`);
126
+ return;
127
+ }
128
+ if (!call.sender) {
129
+ await reply('❌ 缺少邀请对象(未配置信任用户)');
130
+ return;
131
+ }
132
+ // 路径缺省 = 工程根下同名目录;相对路径按工程根解析,绝对原样。
133
+ const workdir = this.deps.map.resolvePath(workdirArg || pname);
134
+ const { transport } = this.deps;
135
+ try {
136
+ const roomId = await transport.createRoom({ name: `${pname}(${this.deps.instanceName})`, inviteUserId: call.sender });
137
+ this.deps.map.register(roomId, workdir, pname);
138
+ // 项目目录不存在则创建(蓝本:PiRpc.doStart mkdir -p cwd)
139
+ try {
140
+ mkdirSync(workdir, { recursive: true });
141
+ }
142
+ catch (err) {
143
+ await reply(`⚠️ 目录创建失败(发消息时会自动重试): ${workdir}`);
144
+ }
145
+ // T12(US37):trusted → PL100。有账本挂钩就走账本(只记真正发生的提升,
146
+ // /revoke 才敢按账降级);没有挂钩就退回旧的"只提创建者"。失败不拦建房。
147
+ try {
148
+ if (this.deps.onRoomCreated)
149
+ await this.deps.onRoomCreated(roomId);
150
+ else
151
+ await transport.setUserPowerLevel?.(roomId, call.sender, 100);
152
+ }
153
+ catch (err) {
154
+ await reply(`⚠️ 房间已创建,但提权失败(可手动设置): ${err instanceof Error ? err.message : err}`);
155
+ }
156
+ await reply(`✅ 项目「${pname}」创建完成!\n\n` +
157
+ `• 房间: ${roomId}\n` +
158
+ `• 工作目录: ${workdir}\n` +
159
+ `• 已邀请你进入新房间\n\n` +
160
+ `项目对话请到新房间进行(独立上下文与工作目录)。`);
161
+ }
162
+ catch (err) {
163
+ await reply(`❌ 创建项目失败: ${err instanceof Error ? err.message : err}`);
164
+ }
165
+ }
166
+ async show(rest, reply) {
167
+ const target = rest.trim();
168
+ if (!target) {
169
+ await reply('用法: /pmctl show <项目名|房间ID>');
170
+ return;
171
+ }
172
+ const found = this.findProject(target);
173
+ if (!found) {
174
+ await reply(`❌ 未找到项目: ${target}(用 /pmctl list 查看)`);
175
+ return;
176
+ }
177
+ const [roomId, entry] = found;
178
+ await reply(`📁 项目: ${projectLabelOf(entry)}\n` +
179
+ `• 房间: ${roomId}\n` +
180
+ `• 工作目录: ${entry.workdir}\n` +
181
+ `• 状态: ${this.isRunning(roomId) ? '✅ 运行中' : '⏸️ 未启动(lazy)'}`);
182
+ }
183
+ async rm(rest, call, reply) {
184
+ const target = rest.trim();
185
+ if (!target) {
186
+ await reply('用法: /pmctl rm <项目名|房间ID>');
187
+ return;
188
+ }
189
+ if (target === 'cancel' || target === 'no' || target === '取消') {
190
+ const had = this.pendingRm.delete(call.roomId);
191
+ await reply(had ? '✅ 已取消删除' : '当前没有待确认的删除操作');
192
+ return;
193
+ }
194
+ const found = this.findProject(target);
195
+ if (!found) {
196
+ this.pendingRm.delete(call.roomId);
197
+ await reply(`❌ 未找到项目: ${target}(用 /pmctl list 查看)`);
198
+ return;
199
+ }
200
+ const [roomId, entry] = found;
201
+ const pending = this.pendingRm.get(call.roomId);
202
+ if (pending && this.now() - pending.ts > RM_CONFIRM_WINDOW_MS) {
203
+ this.pendingRm.delete(call.roomId);
204
+ await reply('⏳ 上次确认已超时(60 秒),需重新确认。');
205
+ }
206
+ // 只有本房为该项目armed 的确认才生效(过期/他房 pending 绝不删错)。
207
+ if (this.pendingRm.get(call.roomId)?.roomId === roomId) {
208
+ this.pendingRm.delete(call.roomId);
209
+ await this.deps.backend.dropRoomSession(roomId);
210
+ this.deps.map.unregister(roomId);
211
+ await reply(`🗑️ 项目「${projectLabelOf(entry)}」已删除\n` +
212
+ `• 已解除映射并放掉会话句柄(持久会话数据保留)\n` +
213
+ `• 工作目录保留: ${entry.workdir}(如需删除请自行处理)`);
214
+ return;
215
+ }
216
+ // 第一条:只布防,绝不删。
217
+ this.pendingRm.set(call.roomId, { roomId, ts: this.now() });
218
+ await reply(`⚠️ 确认删除项目「${projectLabelOf(entry)}」?\n\n` +
219
+ `再次发送 \`/pmctl rm ${projectLabelOf(entry)}\` 确认删除。\n` +
220
+ `(发送 \`/pmctl rm cancel\` 取消)`);
221
+ }
222
+ async mv(rest, reply) {
223
+ const [target, newWorkdir] = splitFirst(rest);
224
+ if (!target || !newWorkdir) {
225
+ await reply('用法: /pmctl mv <项目名|房间ID> <新路径>(相对路径基于工程根)');
226
+ return;
227
+ }
228
+ const workdir = this.deps.map.resolvePath(newWorkdir);
229
+ const found = this.findProject(target);
230
+ if (!found) {
231
+ await reply(`❌ 未找到项目: ${target}(用 /pmctl list 查看)`);
232
+ return;
233
+ }
234
+ const [roomId, entry] = found;
235
+ this.deps.map.setWorkdir(roomId, workdir);
236
+ // 放句柄:同房间下一条消息按新 cwd 重开/resume(蓝本换目录语义)。
237
+ await this.deps.backend.dropRoomSession(roomId);
238
+ await reply(`🚚 项目「${projectLabelOf(entry)}」已迁移\n` +
239
+ `• 新工作目录: ${workdir}\n` +
240
+ `• 会话将重新开始(旧持久会话按房间 id 保留)`);
241
+ }
242
+ async rename(rest, reply) {
243
+ const [target, newName] = splitFirst(rest);
244
+ if (!target || !newName) {
245
+ await reply('用法: /pmctl rename <项目名|房间ID> <新名称>');
246
+ return;
247
+ }
248
+ const found = this.findProject(target);
249
+ if (!found) {
250
+ await reply(`❌ 未找到项目: ${target}(用 /pmctl list 查看)`);
251
+ return;
252
+ }
253
+ const [roomId] = found;
254
+ // 与被改名项目自身当前标签冲突不算冲突(改成同名/仅大小写不同视作允许)。
255
+ const existing = this.deps.map.list().filter(([id]) => id !== roomId).map(([, p]) => projectLabelOf(p));
256
+ const labelError = validateProjectLabel(newName, existing);
257
+ if (labelError) {
258
+ await reply(`❌ ${labelError}`);
259
+ return;
260
+ }
261
+ this.deps.map.rename(roomId, newName);
262
+ const done = `✏️ 项目已重命名为「${newName}」`;
263
+ try {
264
+ await this.deps.transport.setRoomName?.(roomId, newName);
265
+ await reply(done);
266
+ }
267
+ catch (err) {
268
+ await reply(`${done}(房间改名失败: ${err instanceof Error ? err.message : err})`);
269
+ }
270
+ }
271
+ }
272
+ //# sourceMappingURL=pmctl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pmctl.js","sourceRoot":"","sources":["../../src/bridge/pmctl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * T12 (US37):trusted 用户的房间权限 —— 提权与降级的**账本**。
3
+ *
4
+ * 规则(移植自 pi-courier src/space.ts 的 power 部分,MIT,按本仓库语境收紧):
5
+ *
6
+ * - 桥建的管理房/项目房里,trusted 用户自动持有 PL100;
7
+ * - **只把真正发生的"低 → 100"提升记进账本**:本来就 >= 100 的人(比如管理员自己
8
+ * 手工提上去的、或者 bot 自己)不记账 —— 否则 `/revoke` 会把人家手工给的权
9
+ * 一起降掉,那是"误伤人工授权";
10
+ * - `/revoke` 只降账本里记过的(房间, 用户)对,且降级成功后才抹账;
11
+ * - 账本按**房间**记账(不是全局一份用户名),所以"在 A 房我们提过他"不会导致
12
+ * 在 B 房把他手工授予的权限也降掉。
13
+ *
14
+ * 本模块是纯逻辑:不碰网络、不碰磁盘。读写房间真实权限由调用方通过
15
+ * Transport.getUserPowerLevel / setUserPowerLevel 完成,账本对象由持久层持有。
16
+ */
17
+ /** trusted 用户拿到的权限等级。 */
18
+ export declare const TRUSTED_POWER_LEVEL = 100;
19
+ /**
20
+ * 桥自己的权限等级 —— **必须严格高于 trusted**,否则降不动人。
21
+ *
22
+ * Matrix 的规则:不能改动权限等级**等于或高于自己**的用户。桥若也是 100,
23
+ * 那么"把某个 100 的 trusted 降回 0"会被 homeserver 直接拒掉:
24
+ * M_FORBIDDEN: You don't have permission to remove ops level equal to your own
25
+ * (提权之所以一直能成功,是因为对象当时是 0,低于桥。)
26
+ *
27
+ * 所以桥建的房间里把 bot 放在 101:用户仍是 100(满足 US37),桥高一级(降得动)。
28
+ */
29
+ export declare const BOT_POWER_LEVEL = 101;
30
+ /** 降级目标等级。我们建的房间 users_default 是 0,所以降到 0 = 回到普通成员。 */
31
+ export declare const DEMOTED_POWER_LEVEL = 0;
32
+ /** 提权账本:roomId → 我们**实际**提过权的用户(去重;顺序无关)。 */
33
+ export type PowerLedger = Record<string, string[]>;
34
+ /** 读某个房间的记账(不存在 → 空数组,调用方不必判空)。 */
35
+ export declare function bookedIn(ledger: PowerLedger, roomId: string): string[];
36
+ /** 该用户是否在**这个房间**被我们提过权。 */
37
+ export declare function isBooked(ledger: PowerLedger, roomId: string, userId: string): boolean;
38
+ /** 记一笔提升(幂等)。返回账本是否因此变化。 */
39
+ export declare function bookElevation(ledger: PowerLedger, roomId: string, userId: string): boolean;
40
+ /** 抹掉某房间的一笔记账。返回账本是否因此变化。 */
41
+ export declare function unbookElevation(ledger: PowerLedger, roomId: string, userId: string): boolean;
42
+ /** 抹掉某用户在所有房间的记账,返回受影响的房间(用于 /revoke 的清理)。 */
43
+ export declare function unbookUserEverywhere(ledger: PowerLedger, userId: string): string[];
44
+ /**
45
+ * 计划:这个房间里还需要提权到 100 的人。
46
+ *
47
+ * `current` 是各用户当前的 PL(缺省视作 0)。已经 >= 100 的人**不在计划里** ——
48
+ * 我们不动他,也不记账。
49
+ */
50
+ export declare function planElevation(current: Record<string, number>, trusted: readonly string[]): string[];
51
+ /**
52
+ * 计划:这个房间里该降级的人 —— 只降"账本里记过、且当前确实到了 100"的。
53
+ *
54
+ * 当前已经低于 100 的(别人先降过了)不重复写,但仍该抹账(调用方处理)。
55
+ */
56
+ export declare function planDemotion(current: Record<string, number>, booked: readonly string[]): string[];
57
+ //# sourceMappingURL=power-levels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"power-levels.d.ts","sourceRoot":"","sources":["../../src/bridge/power-levels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,yBAAyB;AACzB,eAAO,MAAM,mBAAmB,MAAM,CAAA;AAEtC;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,MAAM,CAAA;AAElC,uDAAuD;AACvD,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;AAElD,mCAAmC;AACnC,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAEtE;AAED,4BAA4B;AAC5B,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAErF;AAED,4BAA4B;AAC5B,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAK1F;AAED,6BAA6B;AAC7B,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAO5F;AAED,8CAA8C;AAC9C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAMlF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAOnG;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAEjG"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * T12 (US37):trusted 用户的房间权限 —— 提权与降级的**账本**。
3
+ *
4
+ * 规则(移植自 pi-courier src/space.ts 的 power 部分,MIT,按本仓库语境收紧):
5
+ *
6
+ * - 桥建的管理房/项目房里,trusted 用户自动持有 PL100;
7
+ * - **只把真正发生的"低 → 100"提升记进账本**:本来就 >= 100 的人(比如管理员自己
8
+ * 手工提上去的、或者 bot 自己)不记账 —— 否则 `/revoke` 会把人家手工给的权
9
+ * 一起降掉,那是"误伤人工授权";
10
+ * - `/revoke` 只降账本里记过的(房间, 用户)对,且降级成功后才抹账;
11
+ * - 账本按**房间**记账(不是全局一份用户名),所以"在 A 房我们提过他"不会导致
12
+ * 在 B 房把他手工授予的权限也降掉。
13
+ *
14
+ * 本模块是纯逻辑:不碰网络、不碰磁盘。读写房间真实权限由调用方通过
15
+ * Transport.getUserPowerLevel / setUserPowerLevel 完成,账本对象由持久层持有。
16
+ */
17
+ /** trusted 用户拿到的权限等级。 */
18
+ export const TRUSTED_POWER_LEVEL = 100;
19
+ /**
20
+ * 桥自己的权限等级 —— **必须严格高于 trusted**,否则降不动人。
21
+ *
22
+ * Matrix 的规则:不能改动权限等级**等于或高于自己**的用户。桥若也是 100,
23
+ * 那么"把某个 100 的 trusted 降回 0"会被 homeserver 直接拒掉:
24
+ * M_FORBIDDEN: You don't have permission to remove ops level equal to your own
25
+ * (提权之所以一直能成功,是因为对象当时是 0,低于桥。)
26
+ *
27
+ * 所以桥建的房间里把 bot 放在 101:用户仍是 100(满足 US37),桥高一级(降得动)。
28
+ */
29
+ export const BOT_POWER_LEVEL = 101;
30
+ /** 降级目标等级。我们建的房间 users_default 是 0,所以降到 0 = 回到普通成员。 */
31
+ export const DEMOTED_POWER_LEVEL = 0;
32
+ /** 读某个房间的记账(不存在 → 空数组,调用方不必判空)。 */
33
+ export function bookedIn(ledger, roomId) {
34
+ return ledger[roomId] ?? [];
35
+ }
36
+ /** 该用户是否在**这个房间**被我们提过权。 */
37
+ export function isBooked(ledger, roomId, userId) {
38
+ return bookedIn(ledger, roomId).includes(userId);
39
+ }
40
+ /** 记一笔提升(幂等)。返回账本是否因此变化。 */
41
+ export function bookElevation(ledger, roomId, userId) {
42
+ const current = ledger[roomId] ?? [];
43
+ if (current.includes(userId))
44
+ return false;
45
+ ledger[roomId] = [...current, userId];
46
+ return true;
47
+ }
48
+ /** 抹掉某房间的一笔记账。返回账本是否因此变化。 */
49
+ export function unbookElevation(ledger, roomId, userId) {
50
+ const current = ledger[roomId];
51
+ if (!current || !current.includes(userId))
52
+ return false;
53
+ const next = current.filter((u) => u !== userId);
54
+ if (next.length > 0)
55
+ ledger[roomId] = next;
56
+ else
57
+ delete ledger[roomId];
58
+ return true;
59
+ }
60
+ /** 抹掉某用户在所有房间的记账,返回受影响的房间(用于 /revoke 的清理)。 */
61
+ export function unbookUserEverywhere(ledger, userId) {
62
+ const touched = [];
63
+ for (const roomId of Object.keys(ledger)) {
64
+ if (unbookElevation(ledger, roomId, userId))
65
+ touched.push(roomId);
66
+ }
67
+ return touched;
68
+ }
69
+ /**
70
+ * 计划:这个房间里还需要提权到 100 的人。
71
+ *
72
+ * `current` 是各用户当前的 PL(缺省视作 0)。已经 >= 100 的人**不在计划里** ——
73
+ * 我们不动他,也不记账。
74
+ */
75
+ export function planElevation(current, trusted) {
76
+ const plan = [];
77
+ for (const userId of trusted) {
78
+ const level = current[userId] ?? 0;
79
+ if (level < TRUSTED_POWER_LEVEL)
80
+ plan.push(userId);
81
+ }
82
+ return plan;
83
+ }
84
+ /**
85
+ * 计划:这个房间里该降级的人 —— 只降"账本里记过、且当前确实到了 100"的。
86
+ *
87
+ * 当前已经低于 100 的(别人先降过了)不重复写,但仍该抹账(调用方处理)。
88
+ */
89
+ export function planDemotion(current, booked) {
90
+ return booked.filter((userId) => (current[userId] ?? 0) >= TRUSTED_POWER_LEVEL);
91
+ }
92
+ //# sourceMappingURL=power-levels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"power-levels.js","sourceRoot":"","sources":["../../src/bridge/power-levels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,yBAAyB;AACzB,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAEtC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAA;AAElC,uDAAuD;AACvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AAKpC,mCAAmC;AACnC,MAAM,UAAU,QAAQ,CAAC,MAAmB,EAAE,MAAc;IAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;AAC7B,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,QAAQ,CAAC,MAAmB,EAAE,MAAc,EAAE,MAAc;IAC1E,OAAO,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAClD,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,aAAa,CAAC,MAAmB,EAAE,MAAc,EAAE,MAAc;IAC/E,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IACpC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAA;IAC1C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAA;IACrC,OAAO,IAAI,CAAA;AACb,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,eAAe,CAAC,MAAmB,EAAE,MAAc,EAAE,MAAc;IACjF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAA;IACvD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAA;IAChD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;;QACrC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;IAC1B,OAAO,IAAI,CAAA;AACb,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,oBAAoB,CAAC,MAAmB,EAAE,MAAc;IACtE,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,IAAI,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACnE,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,OAA+B,EAAE,OAA0B;IACvF,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAClC,IAAI,KAAK,GAAG,mBAAmB;YAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,OAA+B,EAAE,MAAyB;IACrF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAA;AACjF,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * T12 (US37):把权限账本落到真实房间上 —— 提权、`/revoke` 降级、启动对账。
3
+ *
4
+ * 规则全在 `power-levels.ts` 里(纯逻辑,已有单测);这一层只做编排,并守住三条不变量:
5
+ *
6
+ * 1. **先读后写**:提权前必须读当前 PL —— 只有真正发生的"低 → 100"才记账,
7
+ * 否则 `/revoke` 会把管理员手工给的权限一起降掉;
8
+ * 2. **写成功才记账 / 降成功才抹账**:失败时保留记账,留给下次启动自愈重试
9
+ * (写是幂等的,所以宁可晚抹);
10
+ * 3. **失败只记不抛**:权限是附加能力,提权失败不该把桥启动带崩(与 T9 房间操作
11
+ * 同一条纪律),失败收进返回值供调用方记日志。
12
+ */
13
+ import type { Logger } from '../types.ts';
14
+ import { type PowerLedger } from './power-levels.ts';
15
+ /** 权限操作需要的两个原语(Transport 上是可选的,缺一个就整体跳过)。 */
16
+ export interface PowerOps {
17
+ getUserPowerLevel?(roomId: string, userId: string): Promise<number>;
18
+ setUserPowerLevel?(roomId: string, userId: string, level: number): Promise<void>;
19
+ }
20
+ export interface PowerFailure {
21
+ roomId: string;
22
+ userId: string;
23
+ error: string;
24
+ }
25
+ export interface PowerSyncResult {
26
+ elevated: {
27
+ roomId: string;
28
+ userId: string;
29
+ }[];
30
+ demoted: {
31
+ roomId: string;
32
+ userId: string;
33
+ }[];
34
+ /** 记账被清掉但没写权限的(别人先降过了)。 */
35
+ forgotten: {
36
+ roomId: string;
37
+ userId: string;
38
+ }[];
39
+ failures: PowerFailure[];
40
+ }
41
+ /** 两个原语都在才做权限管理(否则调用方直接跳过,不报错)。 */
42
+ export declare function canManagePower(ops: PowerOps): boolean;
43
+ /**
44
+ * 在这个房间里把 trusted 用户提到 PL100。
45
+ *
46
+ * 先批量读当前等级(读失败的收进 failures、不参与计划),再用纯规划器决定谁要提 ——
47
+ * 已经 >= 100 的人不动、也不记账(那是管理员手工给的,不是我们的功劳)。
48
+ */
49
+ export declare function elevateTrustedInRoom(roomId: string, trusted: readonly string[], ledger: PowerLedger, ops: PowerOps, logger?: Logger): Promise<PowerSyncResult>;
50
+ /**
51
+ * 把某用户**在所有记过账的房间里**降回普通成员。
52
+ *
53
+ * 只碰账本里有记账的房间(绝不盲扫全部房间,避免误伤管理员在别处的手工授权)。
54
+ * 当前已经低于 100 的只抹账、不写(别人先降过了)。
55
+ */
56
+ export declare function demoteUserEverywhere(userId: string, ledger: PowerLedger, ops: PowerOps, logger?: Logger): Promise<PowerSyncResult>;
57
+ /**
58
+ * 启动对账(幂等):
59
+ * 1. 先把"账本里记过、但现在不在 trusted 里"的用户在各处降掉并抹账
60
+ * (从信任名单里拿掉的人,不该继续持有权限);
61
+ * 2. 再给给定房间里的当前 trusted 提权(补上之前失败或被漏掉的)。
62
+ */
63
+ export declare function healPowerLevels(rooms: readonly string[], trusted: readonly string[], ledger: PowerLedger, ops: PowerOps, logger?: Logger): Promise<PowerSyncResult>;
64
+ //# sourceMappingURL=power-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"power-sync.d.ts","sourceRoot":"","sources":["../../src/bridge/power-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAQL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAA;AAE1B,6CAA6C;AAC7C,MAAM,WAAW,QAAQ;IACvB,iBAAiB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnE,iBAAiB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACjF;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC9C,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC7C,2BAA2B;IAC3B,SAAS,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC/C,QAAQ,EAAE,YAAY,EAAE,CAAA;CACzB;AAeD,mCAAmC;AACnC,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAErD;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,QAAQ,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC,CA0B1B;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,QAAQ,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC,CA+B1B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,QAAQ,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC,CAyB1B"}