pi-courier 0.1.46 → 0.1.47
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 +1 -1
- package/README.zh-CN.md +1 -1
- 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/assets/avatars-drafts/candy-pool/instance-01.png +0 -0
- package/assets/avatars-drafts/candy-pool/instance-02.png +0 -0
- package/assets/avatars-drafts/candy-pool/instance-03.png +0 -0
- package/assets/avatars-drafts/candy-pool/instance-04.png +0 -0
- package/assets/avatars-drafts/candy-pool/instance-05.png +0 -0
- package/assets/avatars-drafts/candy-pool/instance-06.png +0 -0
- package/assets/avatars-drafts/candy-pool/instance-07.png +0 -0
- package/assets/avatars-drafts/candy-pool/instance-08.png +0 -0
- package/assets/avatars-drafts/candy-pool/instance-09.png +0 -0
- package/assets/avatars-drafts/candy-pool/instance-10.png +0 -0
- package/assets/avatars-drafts/candy-pool/instance-11.png +0 -0
- package/assets/avatars-drafts/candy-pool/instance-12.png +0 -0
- package/assets/avatars-drafts/candy-pool/management.png +0 -0
- package/assets/avatars-drafts/candy-preview-cat.png +0 -0
- package/assets/avatars-drafts/candy-v2-jewel.png +0 -0
- package/assets/avatars-drafts/candy-v2-lollipop.png +0 -0
- package/assets/avatars-drafts/candy-v2-marshmallow.png +0 -0
- package/assets/avatars-drafts/candy-v3-jelly.png +0 -0
- package/assets/avatars-drafts/candy-v3-jewel.png +0 -0
- package/assets/avatars-drafts/candy-v3-lollipop.png +0 -0
- package/assets/avatars-drafts/candy-v3-marshmallow.png +0 -0
- package/assets/avatars-drafts/candy-v4-marshmallow-eyes.png +0 -0
- package/assets/avatars-drafts/candy-v5-marshmallow-balanced.png +0 -0
- package/assets/avatars-drafts/candy-v6-marshmallow-realistic-eyes.png +0 -0
- package/assets/avatars-drafts/candy-v7-round-realistic-eyes.png +0 -0
- package/assets/avatars-drafts/candy-v8-round-realistic-eyes-nolash.png +0 -0
- package/assets/avatars-drafts/candy-v9-nosquare-neg.png +0 -0
- package/dist/rpc/pmctl-controller.js +1 -1
- package/dist/space-identity.d.ts +17 -9
- package/dist/space-identity.d.ts.map +1 -1
- package/dist/space-identity.js +18 -10
- package/dist/space-identity.js.map +1 -1
- package/dist/space.d.ts +22 -14
- package/dist/space.d.ts.map +1 -1
- package/dist/space.js +47 -21
- package/dist/space.js.map +1 -1
- package/dist/standalone.js +1 -1
- package/dist/transports/interface.d.ts +10 -4
- package/dist/transports/interface.d.ts.map +1 -1
- package/dist/transports/matrix-rooms.d.ts +10 -2
- package/dist/transports/matrix-rooms.d.ts.map +1 -1
- package/dist/transports/matrix-rooms.js +21 -4
- package/dist/transports/matrix-rooms.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/scripts/generate-avatars-candy.mjs +276 -0
package/README.md
CHANGED
|
@@ -263,7 +263,7 @@ One bot account can serve multiple projects — each project gets its own privat
|
|
|
263
263
|
|
|
264
264
|
- **Management room**: with the **space feature enabled** (fresh multi-project setups default to it), the bot **creates the management room itself at startup**, inside a private Element space `π <instance>`, and invites all trusted users — no first DM needed; trusted users who join via the challenge later are invited into the management room automatically (one invite per person, failures retried by the next-start self-heal). With the space off (or if its creation fails), the classic behavior applies: the first room where the bot **successfully accepts (authorizes) a message** — a non-project, ≤2-person room — becomes the management room (renamed to `项目管理(<instance>)`, guide sent, room ID persisted to `config.managementRooms`). Either way the room is the admin console — `/pmctl` works only there — and its ID is stable afterwards.
|
|
265
265
|
- **Space organization (Element)**: a purely cosmetic grouping — a private space `π <instanceName>` collects every room the bot creates (the management room and all `/pmctl new` project rooms) so they don't scatter across your room list. The space itself takes no part in authorization — who may send commands and who holds which room permissions is decided by the permission model below. `/pmctl rm` also removes the room from the space. Toggle it in `setup` (`启用空间组织?`, fresh configs default on, existing configs keep their current state); creation is lazy at the next start, and any failure just falls back to the unspace'd behavior with a warning and a retry on the next start. Users who pass the challenge later are invited into the space automatically (one invite per person, ever). A space still carrying the old `pi-courier · <instance>` name is renamed to the short form by the next-start self-heal (manually renamed spaces are left alone).
|
|
266
|
-
- **Room avatars (
|
|
266
|
+
- **Room avatars (candy art)**: the bot automatically sets a bundled high-res candy-style avatar (fluffy marshmallow animals on a cotton-candy background, 512×512) on every room it manages — the space and each project room pick from a 12-image pool by hashing the instance/project name (same name → same image forever, different ones usually differ), and the management room gets a dedicated image. Existing rooms are branded on the next start too; an avatar you set manually is never replaced. When the bundled pool ships a full restyle, rooms the bot itself branded get the new art automatically on the next start (your own avatars are still never touched). Not a fan of the art? Replace any PNG in `assets/avatars/` (same filename) with your own.
|
|
267
267
|
- **Permission model (trusted = admin)**: trusted users automatically hold **admin power** (PL 100) in every room the bot manages — the space, the management room and all project rooms — regardless of whether trust came from setup or the challenge, and regardless of membership (late joiners arrive with the level already in place). `/revoke <userId>` strips that admin power in every managed room at the same time (back to plain member); a failed demotion is retried by the next-start self-heal. Zero configuration — the first start after upgrading heals existing rooms too. Admins promoted by the pre-0.1.37 special case (project-room creator) are not in the demotion ledger: `/revoke` still demotes them on the spot, and only if that on-the-spot demotion fails do you need to lower them manually once in your client.
|
|
268
268
|
- **Create a project** (in the management room):
|
|
269
269
|
```
|
package/README.zh-CN.md
CHANGED
|
@@ -130,7 +130,7 @@ pi 工作目录 [默认 /home/你/Projects]: ← 回车或输
|
|
|
130
130
|
|
|
131
131
|
- **管理房间**:开启**空间组织**时(全新多工程配置默认开启),bot 在启动时**自行创建**管理房间 —— 位于私有空间 `π <实例名>` 内,并邀请全部信任用户,无需先给 bot 发 DM;后续经验证码加入的信任用户也会被自动邀请进管理房间(每人只邀一次,失败由下次启动自愈重试)。空间关闭(或创建失败)时沿用经典行为:bot **第一次成功受理(授权通过)的、非项目的私有/2 人房间**固化为管理房间(自动改名 `项目管理(<实例名>)` 并发送使用说明,房间 ID 写入 `config.managementRooms`)。两种路径下管理房间都是"管理台"(`/pmctl` 仅在此可用),且房间 ID 之后保持稳定。
|
|
132
132
|
- **空间组织(Element)**:纯展示层收纳 —— 私有空间 `π <实例名>` 收集 bot 创建的所有房间(管理房间 + `/pmctl new` 的项目房间),不再散落在房间列表里;空间本身不参与授权判定——谁能发命令、谁有什么房间权限,由下面的权限模型决定。`/pmctl rm` 删除项目时同步把房间移出空间。开关在 `setup`(`启用空间组织?`,全新配置默认开、已有配置保持现状);空间在下次启动时懒创建,失败仅警告并回退无空间行为、下次启动自动重试。后续通过验证码成为信任用户的用户会被自动邀请进空间(每人只邀请一次)。还叫旧名字 `pi-courier · <实例名>` 的空间会被下次启动自愈改成短名(手动改过名的空间不动)。
|
|
133
|
-
- **房间头像(
|
|
133
|
+
- **房间头像(糖果风)**:bot 自动为托管的所有房间设置内置高清糖果风头像(棉花糖质感小动物 + 棉花糖云背景,512×512)—— 空间和项目房间按实例名/项目名哈希从 12 张头像池中取图(同名永远同一张,不同部署基本不同),管理房间使用专属头像;存量房间下次启动自动补齐,手动设置过的头像绝不被覆盖。头像池整体换风格后,bot 自己刷过旧头像的房间会在下次启动自动换成新图(你手动设置的依然绝不碰)。不喜欢这些图?把 `assets/avatars/` 下的同名 PNG 换成你自己的即可,无需改代码。
|
|
134
134
|
- **权限模型(信任即管理员)**:信任用户在 bot 托管的所有房间——空间、管理房间、全部项目房间——自动拥有**管理员权限**(PL 100):无论信任来自 setup 还是验证码、是否已加入该房间(后加入者进房时权限已就位)。`/revoke <userId>` 撤销信任时,该用户在全部托管房间的管理员权限**同步收回**(降回普通级别),降权失败由下次启动自愈兜底。零配置,升级后的首次启动自动补齐存量房间;旧版本(≤0.1.36)由旧特例(项目房间创建者提权)成为管理员的用户不在降权簿记内——`/revoke` 仍会即时对其降权,仅当那次即时降权也失败时才需在客户端手动降一次。
|
|
135
135
|
- **创建项目**(在管理房间发):
|
|
136
136
|
```
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -161,7 +161,7 @@ export class PmctlController {
|
|
|
161
161
|
spaceNote = `\n⚠️ 挂入空间失败(不影响项目): ${err.message}`;
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
|
-
// Brand the room with its bundled
|
|
164
|
+
// Brand the room with its bundled candy avatar immediately — the
|
|
165
165
|
// startup identity heal would only reach a mid-session room on the
|
|
166
166
|
// next restart. Same 只补缺 rule; a failure is cosmetic and self-heals.
|
|
167
167
|
let avatarNote = "";
|
package/dist/space-identity.d.ts
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The space is named `π <instanceName>` (short; the old `pi-courier · <name>`
|
|
5
5
|
* template is migrated on startup — see isLegacySpaceName). Every managed room
|
|
6
|
-
* also gets a bundled
|
|
7
|
-
* scripts/generate-avatars.mjs — original artwork,
|
|
8
|
-
* space picks by instanceName hash and project
|
|
9
|
-
* each deployment lands on a stable image
|
|
10
|
-
* while different instances/projects usually
|
|
11
|
-
* the dedicated management.png. All artwork
|
|
12
|
-
*
|
|
13
|
-
* own (same filename) without touching code.
|
|
6
|
+
* also gets a bundled avatar (assets/avatars/, generated by
|
|
7
|
+
* scripts/generate-avatars-candy.mjs — original artwork, soft candy /
|
|
8
|
+
* marshmallow animal style): the space picks by instanceName hash and project
|
|
9
|
+
* rooms by project name hash, so each deployment lands on a stable image
|
|
10
|
+
* (recreates and restarts keep it) while different instances/projects usually
|
|
11
|
+
* differ. The management room uses the dedicated management.png. All artwork
|
|
12
|
+
* is original AI-generated, no third-party assets; users can swap any PNG for
|
|
13
|
+
* their own (same filename) without touching code.
|
|
14
14
|
*/
|
|
15
15
|
/** Number of images in the shared pool (instance-01 … instance-12). */
|
|
16
16
|
export declare const AVATAR_POOL_SIZE = 12;
|
|
@@ -26,9 +26,17 @@ export declare function nameHash(name: string): number;
|
|
|
26
26
|
export declare function pickPoolAvatarFile(name: string): string;
|
|
27
27
|
/** The management room's dedicated image (always the same, always one of a kind). */
|
|
28
28
|
export declare function managementAvatarFile(): string;
|
|
29
|
+
/**
|
|
30
|
+
* Version marker for the bundled avatar pool. Bump ONLY when the pool ships
|
|
31
|
+
* a full restyle (v2 pixel → v3 candy bumped 1 → 2): rooms whose avatar the
|
|
32
|
+
* bot itself set under an older marker get re-branded once by the startup
|
|
33
|
+
* identity heal (see ensureRoomAvatar). User-set avatars are never touched
|
|
34
|
+
* regardless of markers.
|
|
35
|
+
*/
|
|
36
|
+
export declare const AVATAR_POOL_VERSION = 2;
|
|
29
37
|
/** Read a bundled avatar PNG. Throws if the asset is missing — callers treat
|
|
30
38
|
* that like any other identity-heal failure (warn + retry next start). */
|
|
31
39
|
export declare function readAvatarBundled(file: string): Buffer;
|
|
32
|
-
/** m.room.avatar `info` sub-block describing the bundled
|
|
40
|
+
/** m.room.avatar `info` sub-block describing the bundled 512×512 PNGs. */
|
|
33
41
|
export declare function avatarInfo(data: Buffer): Record<string, unknown>;
|
|
34
42
|
//# sourceMappingURL=space-identity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space-identity.d.ts","sourceRoot":"","sources":["../src/space-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,uEAAuE;AACvE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;yEACyE;AACzE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED;2DAC2D;AAC3D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI7C;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;2EAC2E;AAC3E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AASD,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhE"}
|
|
1
|
+
{"version":3,"file":"space-identity.d.ts","sourceRoot":"","sources":["../src/space-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,uEAAuE;AACvE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;yEACyE;AACzE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED;2DAC2D;AAC3D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI7C;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;2EAC2E;AAC3E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AASD,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhE"}
|
package/dist/space-identity.js
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The space is named `π <instanceName>` (short; the old `pi-courier · <name>`
|
|
5
5
|
* template is migrated on startup — see isLegacySpaceName). Every managed room
|
|
6
|
-
* also gets a bundled
|
|
7
|
-
* scripts/generate-avatars.mjs — original artwork,
|
|
8
|
-
* space picks by instanceName hash and project
|
|
9
|
-
* each deployment lands on a stable image
|
|
10
|
-
* while different instances/projects usually
|
|
11
|
-
* the dedicated management.png. All artwork
|
|
12
|
-
*
|
|
13
|
-
* own (same filename) without touching code.
|
|
6
|
+
* also gets a bundled avatar (assets/avatars/, generated by
|
|
7
|
+
* scripts/generate-avatars-candy.mjs — original artwork, soft candy /
|
|
8
|
+
* marshmallow animal style): the space picks by instanceName hash and project
|
|
9
|
+
* rooms by project name hash, so each deployment lands on a stable image
|
|
10
|
+
* (recreates and restarts keep it) while different instances/projects usually
|
|
11
|
+
* differ. The management room uses the dedicated management.png. All artwork
|
|
12
|
+
* is original AI-generated, no third-party assets; users can swap any PNG for
|
|
13
|
+
* their own (same filename) without touching code.
|
|
14
14
|
*/
|
|
15
15
|
import { readFileSync } from "node:fs";
|
|
16
16
|
/** Number of images in the shared pool (instance-01 … instance-12). */
|
|
@@ -41,6 +41,14 @@ export function pickPoolAvatarFile(name) {
|
|
|
41
41
|
export function managementAvatarFile() {
|
|
42
42
|
return "management.png";
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Version marker for the bundled avatar pool. Bump ONLY when the pool ships
|
|
46
|
+
* a full restyle (v2 pixel → v3 candy bumped 1 → 2): rooms whose avatar the
|
|
47
|
+
* bot itself set under an older marker get re-branded once by the startup
|
|
48
|
+
* identity heal (see ensureRoomAvatar). User-set avatars are never touched
|
|
49
|
+
* regardless of markers.
|
|
50
|
+
*/
|
|
51
|
+
export const AVATAR_POOL_VERSION = 2;
|
|
44
52
|
/** Read a bundled avatar PNG. Throws if the asset is missing — callers treat
|
|
45
53
|
* that like any other identity-heal failure (warn + retry next start). */
|
|
46
54
|
export function readAvatarBundled(file) {
|
|
@@ -53,8 +61,8 @@ function avatarAssetUrl(file) {
|
|
|
53
61
|
throw new Error(`非法的头像文件名: ${file}`);
|
|
54
62
|
return new URL(`../assets/avatars/${file}`, import.meta.url);
|
|
55
63
|
}
|
|
56
|
-
/** m.room.avatar `info` sub-block describing the bundled
|
|
64
|
+
/** m.room.avatar `info` sub-block describing the bundled 512×512 PNGs. */
|
|
57
65
|
export function avatarInfo(data) {
|
|
58
|
-
return { mimetype: "image/png", width:
|
|
66
|
+
return { mimetype: "image/png", width: 512, height: 512, size: data.length };
|
|
59
67
|
}
|
|
60
68
|
//# sourceMappingURL=space-identity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space-identity.js","sourceRoot":"","sources":["../src/space-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,uEAAuE;AACvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACnD,OAAO,KAAK,YAAY,EAAE,CAAC;AAC7B,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,YAAoB;IAClE,OAAO,IAAI,KAAK,gBAAgB,YAAY,EAAE,CAAC;AACjD,CAAC;AAED;2DAC2D;AAC3D,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QAAE,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtD,OAAO,YAAY,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;AAC1D,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,oBAAoB;IAClC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;2EAC2E;AAC3E,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,4EAA4E;IAC5E,8EAA8E;IAC9E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IACvE,OAAO,IAAI,GAAG,CAAC,qBAAqB,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC/E,CAAC"}
|
|
1
|
+
{"version":3,"file":"space-identity.js","sourceRoot":"","sources":["../src/space-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,uEAAuE;AACvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACnD,OAAO,KAAK,YAAY,EAAE,CAAC;AAC7B,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,YAAoB;IAClE,OAAO,IAAI,KAAK,gBAAgB,YAAY,EAAE,CAAC;AACjD,CAAC;AAED;2DAC2D;AAC3D,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QAAE,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtD,OAAO,YAAY,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;AAC1D,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,oBAAoB;IAClC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC;2EAC2E;AAC3E,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,4EAA4E;IAC5E,8EAA8E;IAC9E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IACvE,OAAO,IAAI,GAAG,CAAC,qBAAqB,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC/E,CAAC"}
|
package/dist/space.d.ts
CHANGED
|
@@ -44,23 +44,31 @@ export type SpaceEnsureResult = "skipped" | "ready" | "degraded";
|
|
|
44
44
|
* rule — deliberately not configurable. */
|
|
45
45
|
export declare const TRUSTED_POWER_LEVEL = 100;
|
|
46
46
|
export declare function ensureSpaceAndManagementRoom(deps: SpaceEnsureDeps): Promise<SpaceEnsureResult>;
|
|
47
|
-
/**
|
|
48
|
-
* anything the user set themselves is
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
|
|
47
|
+
/** Brand ONE room with the bundled avatar. Default policy is 只补缺: a room
|
|
48
|
+
* that already has an avatar keeps it — anything the user set themselves is
|
|
49
|
+
* never replaced. With `rebrandIfBotOwned` (the startup heal, while an
|
|
50
|
+
* avatar-pool version migration is pending), an existing avatar is replaced
|
|
51
|
+
* ONLY when the bot itself set it — the sender check is what separates our
|
|
52
|
+
* own outdated branding from user intent. Throws on failure — callers pick
|
|
53
|
+
* the policy (the startup heal warns + retries next start; the /pmctl new
|
|
54
|
+
* path surfaces a non-fatal note). Returns what happened: "set" (room had
|
|
55
|
+
* none), "rebranded" (bot-owned old avatar replaced) or "kept" (user-owned
|
|
56
|
+
* or rebrand not requested). Shared by the startup identity heal and the
|
|
57
|
+
* project-room creation path (a mid-session room must not wait for the next
|
|
58
|
+
* restart to get its face). */
|
|
59
|
+
export declare function ensureRoomAvatar(roomOps: RoomOps, roomId: string, file: string, opts?: {
|
|
60
|
+
rebrandIfBotOwned?: boolean;
|
|
61
|
+
}): Promise<"set" | "rebranded" | "kept">;
|
|
55
62
|
/** Startup identity self-heal: brand the managed rooms with the short space
|
|
56
|
-
* name and the bundled
|
|
63
|
+
* name and the bundled candy avatars (space + management + project rooms).
|
|
57
64
|
* Space mode only — a degraded run's adopted management DM is never touched.
|
|
58
|
-
*
|
|
65
|
+
* Safety rules keep user intent sticky: a space is renamed ONLY when its
|
|
59
66
|
* name still exactly matches the legacy `pi-courier · <instance>` template,
|
|
60
|
-
* and an avatar is set
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* the
|
|
67
|
+
* and an avatar is set when the room has none — plus, while an avatar-pool
|
|
68
|
+
* version migration is pending, replaced when the bot itself set the old
|
|
69
|
+
* one. Anything a user set themselves is left alone. Per-room failures warn
|
|
70
|
+
* and retry on the next start; like healTrustedPowerLevels this never throws
|
|
71
|
+
* and never affects the startup tri-state. */
|
|
64
72
|
export declare function healRoomIdentities(roomOps: RoomOps, store: ConfigStore): Promise<void>;
|
|
65
73
|
/** Unified idempotent elevation for ONE room (#42): read the room's power
|
|
66
74
|
* levels once, then write TRUSTED_POWER_LEVEL only for trusted users whose
|
package/dist/space.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAGH,OAAO,EAAqB,KAAK,WAAW,EAAoE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAGH,OAAO,EAAqB,KAAK,WAAW,EAAoE,MAAM,aAAa,CAAC;AAYpI,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAEjE;4CAC4C;AAC5C,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkGpG;AAED;;;;;;;;;;;gCAWgC;AAChC,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAO,GACzC,OAAO,CAAC,KAAK,GAAG,WAAW,GAAG,MAAM,CAAC,CAWvC;AAED;;;;;;;;;+CAS+C;AAC/C,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD5F;AAED;;;;;;;;;6BAS6B;AAC7B,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CA8BnB;AAED;;;+CAG+C;AAC/C,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,EAAE,CAQ7D;AAED;;;;;;;gCAOgC;AAChC,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhG;AAED;;;;;;;;yDAQyD;AACzD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAoBlB;AAyBD;;;;;8DAK8D;AAC9D,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAED;;;;;;;;gBAQgB;AAChB,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAED;;qEAEqE;AACrE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAG1D"}
|
package/dist/space.js
CHANGED
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
import { activeSpaceRoomId, effectiveInstanceName, effectiveWorkdir, isSpaceMode, nativeMxid } from "./config.js";
|
|
35
35
|
import { logger } from "./logger.js";
|
|
36
36
|
import { buildManagementRoomHelp, managementRoomName } from "./management-room.js";
|
|
37
|
-
import { avatarInfo, isLegacySpaceName, managementAvatarFile, pickPoolAvatarFile, readAvatarBundled, spaceDisplayName, } from "./space-identity.js";
|
|
37
|
+
import { AVATAR_POOL_VERSION, avatarInfo, isLegacySpaceName, managementAvatarFile, pickPoolAvatarFile, readAvatarBundled, spaceDisplayName, } from "./space-identity.js";
|
|
38
38
|
/** Trusted users are admins in every room pi-courier manages (#42). A fixed
|
|
39
39
|
* rule — deliberately not configurable. */
|
|
40
40
|
export const TRUSTED_POWER_LEVEL = 100;
|
|
@@ -125,30 +125,41 @@ export async function ensureSpaceAndManagementRoom(deps) {
|
|
|
125
125
|
return "degraded";
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
|
-
/**
|
|
129
|
-
* anything the user set themselves is
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
128
|
+
/** Brand ONE room with the bundled avatar. Default policy is 只补缺: a room
|
|
129
|
+
* that already has an avatar keeps it — anything the user set themselves is
|
|
130
|
+
* never replaced. With `rebrandIfBotOwned` (the startup heal, while an
|
|
131
|
+
* avatar-pool version migration is pending), an existing avatar is replaced
|
|
132
|
+
* ONLY when the bot itself set it — the sender check is what separates our
|
|
133
|
+
* own outdated branding from user intent. Throws on failure — callers pick
|
|
134
|
+
* the policy (the startup heal warns + retries next start; the /pmctl new
|
|
135
|
+
* path surfaces a non-fatal note). Returns what happened: "set" (room had
|
|
136
|
+
* none), "rebranded" (bot-owned old avatar replaced) or "kept" (user-owned
|
|
137
|
+
* or rebrand not requested). Shared by the startup identity heal and the
|
|
138
|
+
* project-room creation path (a mid-session room must not wait for the next
|
|
139
|
+
* restart to get its face). */
|
|
140
|
+
export async function ensureRoomAvatar(roomOps, roomId, file, opts = {}) {
|
|
141
|
+
const avatar = await roomOps.getRoomAvatarEvent(roomId);
|
|
142
|
+
if (avatar?.url) {
|
|
143
|
+
const botId = roomOps.getBotUserId();
|
|
144
|
+
const botOwned = !!opts.rebrandIfBotOwned && !!botId && avatar.sender === botId;
|
|
145
|
+
if (!botOwned)
|
|
146
|
+
return "kept";
|
|
147
|
+
}
|
|
138
148
|
const data = readAvatarBundled(file);
|
|
139
149
|
const mxcUrl = await roomOps.uploadMedia(data, "image/png");
|
|
140
150
|
await roomOps.setRoomAvatar(roomId, mxcUrl, avatarInfo(data));
|
|
141
|
-
return
|
|
151
|
+
return avatar?.url ? "rebranded" : "set";
|
|
142
152
|
}
|
|
143
153
|
/** Startup identity self-heal: brand the managed rooms with the short space
|
|
144
|
-
* name and the bundled
|
|
154
|
+
* name and the bundled candy avatars (space + management + project rooms).
|
|
145
155
|
* Space mode only — a degraded run's adopted management DM is never touched.
|
|
146
|
-
*
|
|
156
|
+
* Safety rules keep user intent sticky: a space is renamed ONLY when its
|
|
147
157
|
* name still exactly matches the legacy `pi-courier · <instance>` template,
|
|
148
|
-
* and an avatar is set
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
* the
|
|
158
|
+
* and an avatar is set when the room has none — plus, while an avatar-pool
|
|
159
|
+
* version migration is pending, replaced when the bot itself set the old
|
|
160
|
+
* one. Anything a user set themselves is left alone. Per-room failures warn
|
|
161
|
+
* and retry on the next start; like healTrustedPowerLevels this never throws
|
|
162
|
+
* and never affects the startup tri-state. */
|
|
152
163
|
export async function healRoomIdentities(roomOps, store) {
|
|
153
164
|
const cfg = store.get();
|
|
154
165
|
if (!isSpaceMode(cfg))
|
|
@@ -171,7 +182,12 @@ export async function healRoomIdentities(roomOps, store) {
|
|
|
171
182
|
}
|
|
172
183
|
// Avatars: space picks by instance name, the management room has its own
|
|
173
184
|
// dedicated image, project rooms pick by project name (roomId fallback for
|
|
174
|
-
// legacy records without one) — same name, same image, forever.
|
|
185
|
+
// legacy records without one) — same name, same image, forever. While the
|
|
186
|
+
// bundled pool version in config lags behind AVATAR_POOL_VERSION (a full
|
|
187
|
+
// restyle shipped), bot-set old avatars are re-branded once; user-set ones
|
|
188
|
+
// are still never touched. The marker is booked only after every room
|
|
189
|
+
// succeeded — a failed room retries the whole migration next start.
|
|
190
|
+
const rebrandPending = (cfg.avatarPoolVersion ?? 1) < AVATAR_POOL_VERSION;
|
|
175
191
|
const targets = [
|
|
176
192
|
{ roomId: spaceId, file: pickPoolAvatarFile(instanceName), label: "空间" },
|
|
177
193
|
];
|
|
@@ -182,16 +198,26 @@ export async function healRoomIdentities(roomOps, store) {
|
|
|
182
198
|
for (const [roomId, project] of Object.entries(cfg.projects ?? {})) {
|
|
183
199
|
targets.push({ roomId, file: pickPoolAvatarFile(project.name ?? roomId), label: `项目房间 ${project.name ?? roomId}` });
|
|
184
200
|
}
|
|
201
|
+
let allOk = true;
|
|
185
202
|
for (const target of targets) {
|
|
186
203
|
try {
|
|
187
|
-
|
|
204
|
+
const result = await ensureRoomAvatar(roomOps, target.roomId, target.file, {
|
|
205
|
+
rebrandIfBotOwned: rebrandPending,
|
|
206
|
+
});
|
|
207
|
+
if (result === "set")
|
|
188
208
|
logger.info(`[identity] ${target.label}头像已设置: ${target.file}`);
|
|
189
|
-
|
|
209
|
+
if (result === "rebranded")
|
|
210
|
+
logger.info(`[identity] ${target.label}头像已升级为新风格: ${target.file}`);
|
|
190
211
|
}
|
|
191
212
|
catch (err) {
|
|
213
|
+
allOk = false;
|
|
192
214
|
logger.warn(`[identity] ${target.label}(${target.roomId})头像设置失败(跳过,下次启动自动重试): ${err.message}`);
|
|
193
215
|
}
|
|
194
216
|
}
|
|
217
|
+
// Migration done: book the marker so later starts never re-rebrand (a user
|
|
218
|
+
// who sets a custom avatar afterwards must keep it forever).
|
|
219
|
+
if (rebrandPending && allOk)
|
|
220
|
+
store.update({ avatarPoolVersion: AVATAR_POOL_VERSION });
|
|
195
221
|
}
|
|
196
222
|
/** Unified idempotent elevation for ONE room (#42): read the room's power
|
|
197
223
|
* levels once, then write TRUSTED_POWER_LEVEL only for trusted users whose
|
package/dist/space.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space.js","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"space.js","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"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"}
|
package/dist/standalone.js
CHANGED
|
@@ -239,7 +239,7 @@ export async function main(argv = process.argv.slice(2)) {
|
|
|
239
239
|
// one); per-room failures warn inside and never touch the startup
|
|
240
240
|
// tri-state above.
|
|
241
241
|
await healTrustedPowerLevels(roomOps, store);
|
|
242
|
-
// Room identity (short space name +
|
|
242
|
+
// Room identity (short space name + candy avatars): space mode only,
|
|
243
243
|
// best-effort per room — never blocks or fails the startup.
|
|
244
244
|
await healRoomIdentities(roomOps, store);
|
|
245
245
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Failure semantics are uniform for operations: every method THROWS with a
|
|
9
9
|
* meaningful message (callers reply with it). No null returns, no silent
|
|
10
10
|
* no-ops. The exceptions are the QUERY members (getBotUserId,
|
|
11
|
-
* encryptionAvailable, getPowerLevels, getRoomName,
|
|
11
|
+
* encryptionAvailable, getPowerLevels, getRoomName, getRoomAvatarEvent), which
|
|
12
12
|
* legitimately report a
|
|
13
13
|
* not-yet-connected or unavailable/not-present capability instead of
|
|
14
14
|
* throwing.
|
|
@@ -44,9 +44,15 @@ export interface RoomOps {
|
|
|
44
44
|
* has no (visible) name — 404 / M_NOT_FOUND. Query member: reports absence
|
|
45
45
|
* instead of throwing (same contract as getPowerLevels). */
|
|
46
46
|
getRoomName(roomId: string): Promise<string | null>;
|
|
47
|
-
/** Read a room's avatar mxc URL
|
|
48
|
-
*
|
|
49
|
-
|
|
47
|
+
/** Read a room's avatar state event: its mxc URL and the mxid that set it,
|
|
48
|
+
* or null when the room has none (or the event is not visible) — 404 /
|
|
49
|
+
* M_NOT_FOUND. The sender is what lets the identity heal tell "an avatar
|
|
50
|
+
* the bot itself branded" (safe to restyle on a pool upgrade) apart from
|
|
51
|
+
* "an avatar a human set" (never touched). Query member: same contract. */
|
|
52
|
+
getRoomAvatarEvent(roomId: string): Promise<{
|
|
53
|
+
url: string | null;
|
|
54
|
+
sender: string | null;
|
|
55
|
+
} | null>;
|
|
50
56
|
/** Set a room's avatar (m.room.avatar) from an already-uploaded mxc URL. */
|
|
51
57
|
setRoomAvatar(roomId: string, avatarUrl: string, info?: Record<string, unknown>): Promise<void>;
|
|
52
58
|
/** Upload media to the content repository; returns the mxc:// URL. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/transports/interface.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,OAAO;IACtB;oFACgF;IAChF,UAAU,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClG,oFAAoF;IACpF,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,wFAAwF;IACxF,WAAW,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9E;;2EAEuE;IACvE,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE;;uBAEmB;IACnB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,4EAA4E;IAC5E,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,qBAAqB;IACrB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD;;iEAE6D;IAC7D,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACpD;
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/transports/interface.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,OAAO;IACtB;oFACgF;IAChF,UAAU,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClG,oFAAoF;IACpF,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,wFAAwF;IACxF,WAAW,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9E;;2EAEuE;IACvE,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE;;uBAEmB;IACnB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,4EAA4E;IAC5E,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,qBAAqB;IACrB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD;;iEAE6D;IAC7D,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACpD;;;;gFAI4E;IAC5E,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAClG,4EAA4E;IAC5E,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChG,sEAAsE;IACtE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,qDAAqD;IACrD,YAAY,IAAI,MAAM,GAAG,IAAI,CAAC;IAC9B;;0CAEsC;IACtC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC;6CACyC;IACzC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF;;;;kBAIc;IACd,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACxE,0CAA0C;IAC1C,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D"}
|
|
@@ -49,8 +49,16 @@ export declare class MatrixRoomOps implements RoomOps {
|
|
|
49
49
|
/** Read a room's display name; null when absent (query-member contract,
|
|
50
50
|
* same 404 / M_NOT_FOUND handling as getPowerLevels). */
|
|
51
51
|
getRoomName(roomId: string): Promise<string | null>;
|
|
52
|
-
/** Read a room's avatar mxc URL; null when the
|
|
53
|
-
|
|
52
|
+
/** Read a room's avatar state event (mxc URL + who set it); null when the
|
|
53
|
+
* room has none. matrix-bot-sdk's getRoomStateEvent resolves to the event
|
|
54
|
+
* CONTENT (its own getPublishedAlias reads event['alias'] directly), so
|
|
55
|
+
* the sender is NOT on this response — the sender comes from the full
|
|
56
|
+
* state list instead. Two requests, but the avatar query is startup-only
|
|
57
|
+
* and the room state list is small. */
|
|
58
|
+
getRoomAvatarEvent(roomId: string): Promise<{
|
|
59
|
+
url: string | null;
|
|
60
|
+
sender: string | null;
|
|
61
|
+
} | null>;
|
|
54
62
|
/** Set a room's avatar from an uploaded mxc URL (m.room.avatar state). */
|
|
55
63
|
setRoomAvatar(roomId: string, avatarUrl: string, info?: Record<string, unknown>): Promise<void>;
|
|
56
64
|
/** Upload media to the homeserver's content repository; returns mxc URL. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrix-rooms.d.ts","sourceRoot":"","sources":["../../src/transports/matrix-rooms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAQ9C;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAc,YAAW,OAAO;IAKzC,OAAO,CAAC,IAAI;IAJd,gFAAgF;IAChF,mBAAmB,UAAS;gBAGlB,IAAI,EAAE;QACZ,SAAS,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC;QAC1C,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;QACvC,uEAAuE;QACvE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;KACtC;IAGH,OAAO,KAAK,MAAM,GAIjB;IAED;4EACwE;IAClE,UAAU,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBvG,0DAA0D;IACpD,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5E,iEAAiE;IAC3D,WAAW,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAUnF,mEAAmE;IAC7D,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7E,sDAAsD;IAChD,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAalF,oDAAoD;IAC9C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D,mEAAmE;IAC7D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D;8DAC0D;IACpD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUzD
|
|
1
|
+
{"version":3,"file":"matrix-rooms.d.ts","sourceRoot":"","sources":["../../src/transports/matrix-rooms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAQ9C;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAc,YAAW,OAAO;IAKzC,OAAO,CAAC,IAAI;IAJd,gFAAgF;IAChF,mBAAmB,UAAS;gBAGlB,IAAI,EAAE;QACZ,SAAS,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC;QAC1C,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;QACvC,uEAAuE;QACvE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;KACtC;IAGH,OAAO,KAAK,MAAM,GAIjB;IAED;4EACwE;IAClE,UAAU,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBvG,0DAA0D;IACpD,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5E,iEAAiE;IAC3D,WAAW,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAUnF,mEAAmE;IAC7D,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7E,sDAAsD;IAChD,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAalF,oDAAoD;IAC9C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D,mEAAmE;IAC7D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D;8DAC0D;IACpD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUzD;;;;;4CAKwC;IAClC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAwBvG,0EAA0E;IACpE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrG,4EAA4E;IACtE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrE,iFAAiF;IAC3E,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrF;6EACyE;IACnE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAY7E,8DAA8D;IACxD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D,4DAA4D;IAC5D,YAAY,IAAI,MAAM,GAAG,IAAI;CAG9B"}
|
|
@@ -119,17 +119,34 @@ export class MatrixRoomOps {
|
|
|
119
119
|
throw err;
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
|
-
/** Read a room's avatar mxc URL; null when the
|
|
123
|
-
|
|
122
|
+
/** Read a room's avatar state event (mxc URL + who set it); null when the
|
|
123
|
+
* room has none. matrix-bot-sdk's getRoomStateEvent resolves to the event
|
|
124
|
+
* CONTENT (its own getPublishedAlias reads event['alias'] directly), so
|
|
125
|
+
* the sender is NOT on this response — the sender comes from the full
|
|
126
|
+
* state list instead. Two requests, but the avatar query is startup-only
|
|
127
|
+
* and the room state list is small. */
|
|
128
|
+
async getRoomAvatarEvent(roomId) {
|
|
129
|
+
let url = null;
|
|
124
130
|
try {
|
|
125
|
-
const
|
|
126
|
-
|
|
131
|
+
const content = (await this.client.getRoomStateEvent(roomId, "m.room.avatar", ""));
|
|
132
|
+
url = content?.url ?? null;
|
|
127
133
|
}
|
|
128
134
|
catch (err) {
|
|
129
135
|
if (isStateNotFound(err))
|
|
130
136
|
return null;
|
|
131
137
|
throw err;
|
|
132
138
|
}
|
|
139
|
+
if (!url)
|
|
140
|
+
return { url: null, sender: null };
|
|
141
|
+
try {
|
|
142
|
+
const state = (await this.client.getRoomState(roomId));
|
|
143
|
+
const event = state.find((e) => e?.type === "m.room.avatar" && (e?.state_key ?? "") === "");
|
|
144
|
+
return { url, sender: event?.sender ?? null };
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Sender unknown: callers must treat the avatar as user-owned (never restyle).
|
|
148
|
+
return { url, sender: null };
|
|
149
|
+
}
|
|
133
150
|
}
|
|
134
151
|
/** Set a room's avatar from an uploaded mxc URL (m.room.avatar state). */
|
|
135
152
|
async setRoomAvatar(roomId, avatarUrl, info) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrix-rooms.js","sourceRoot":"","sources":["../../src/transports/matrix-rooms.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"matrix-rooms.js","sourceRoot":"","sources":["../../src/transports/matrix-rooms.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -124,6 +124,12 @@ export interface MsgBridgeConfig {
|
|
|
124
124
|
* 避免重启后重复改名/重复发送使用说明)。
|
|
125
125
|
*/
|
|
126
126
|
managementRooms?: string[];
|
|
127
|
+
/**
|
|
128
|
+
* 内置头像池版本簿记(见 space-identity.ts AVATAR_POOL_VERSION):
|
|
129
|
+
* 头像池整体换风格时,启动自愈把"bot 自己设的旧版头像"主动刷成新版
|
|
130
|
+
* (用户手动设置的头像绝不碰)。缺省视为 v1(像素池时代)。
|
|
131
|
+
*/
|
|
132
|
+
avatarPoolVersion?: number;
|
|
127
133
|
/**
|
|
128
134
|
* Element 空间(Space)组织视图——把本实例创建的房间收纳进一个私有空间,
|
|
129
135
|
* 便于在 Element 中管理。空间本身仍是展示层;信任用户的房间权限
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* 头像池 v3 —— 棉花糖软萌高清风(2026-09-11 定稿提示词)。
|
|
4
|
+
*
|
|
5
|
+
* 推翻 v1/v2 的像素风:每只小动物 = 棉花糖+翻糖质感圆脑袋、真实小奶猫式眼睛
|
|
6
|
+
* (非玻璃珠)、爱心糖鼻子、闭嘴 ω 笑、粉扑腮红,背景是粉紫青三色棉花糖云。
|
|
7
|
+
* 提示词经 6 轮人工审定收敛(v9 橘猫稿获用户认可),本脚本将其固化为模板:
|
|
8
|
+
* 固定"画框" + 每只动物的 subject/nose/eyes/accent 插槽。
|
|
9
|
+
*
|
|
10
|
+
* 输出:assets/avatars-drafts/candy-pool/<name>.png(实际多为 JPEG,先落草稿)
|
|
11
|
+
* 审定后用 --ship 把选中稿转成 512×512 真 PNG 写入 assets/avatars/。
|
|
12
|
+
*
|
|
13
|
+
* 用法:
|
|
14
|
+
* node scripts/generate-avatars-candy.mjs # 全量 13 张
|
|
15
|
+
* node scripts/generate-avatars-candy.mjs --only=instance-03,management
|
|
16
|
+
* node scripts/generate-avatars-candy.mjs --ship # 草稿 → 正式 512 PNG
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { execFileSync } from "node:child_process";
|
|
20
|
+
import { copyFileSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
21
|
+
import { homedir } from "node:os";
|
|
22
|
+
import { dirname, join } from "node:path";
|
|
23
|
+
import { fileURLToPath } from "node:url";
|
|
24
|
+
|
|
25
|
+
const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..");
|
|
26
|
+
const DRAFT_DIR = join(ROOT, "assets", "avatars-drafts", "candy-pool");
|
|
27
|
+
const SHIP_DIR = join(ROOT, "assets", "avatars");
|
|
28
|
+
const API = "https://openrouter.ai/api/v1/images";
|
|
29
|
+
const MODEL = process.env.OPENROUTER_IMAGE_MODEL || "bytedance-seed/seedream-4.5";
|
|
30
|
+
const SHIP_SIZE = 512;
|
|
31
|
+
|
|
32
|
+
/** 画框默认头型描述。尖耳动物够用;圆头/无耳动物(企鹅、猫头鹰、熊、青蛙、小鸡)
|
|
33
|
+
* 实测会被模型理解成"方形糖块贴脸",必须用 head 插槽显式要"完整圆球头"。 */
|
|
34
|
+
const DEFAULT_HEAD = "A single soft rounded head silhouette, like a plush round marshmallow puff.";
|
|
35
|
+
const BALL_HEAD =
|
|
36
|
+
"The whole head is one perfectly round ball of marshmallow — a complete soft sphere, " +
|
|
37
|
+
"like a round plush ball, with the face features sitting directly on the ball.";
|
|
38
|
+
|
|
39
|
+
/** 每只动物的插槽内容;画框(风格/构图/背景)对所有动物一致。 */
|
|
40
|
+
const ANIMALS = [
|
|
41
|
+
{
|
|
42
|
+
name: "instance-01",
|
|
43
|
+
subject: "an orange tabby cat's head",
|
|
44
|
+
texture: "powdery matte pastel-orange fur with darker orange tabby stripes",
|
|
45
|
+
nose: "a soft pink candy heart nose",
|
|
46
|
+
eyes: "warm amber-green iris with a vertical slit pupil",
|
|
47
|
+
accent: "Small triangular ears with pink fondant inner ears.",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "instance-02",
|
|
51
|
+
subject: "a penguin's head",
|
|
52
|
+
head: BALL_HEAD,
|
|
53
|
+
texture: "powdery matte black-and-white fondant feathers",
|
|
54
|
+
nose: "a small glossy orange candy beak",
|
|
55
|
+
eyes: "round dark brown iris with a round pupil",
|
|
56
|
+
accent: "A patch of white fondant feathers framing the face, black cap on top.",
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: "instance-03",
|
|
60
|
+
subject: "a red fox's head",
|
|
61
|
+
texture: "powdery matte rust-orange fur with a white fondant muzzle",
|
|
62
|
+
nose: "a tiny black candy nose",
|
|
63
|
+
eyes: "warm amber iris with a vertical slit pupil",
|
|
64
|
+
accent: "Tall pointed ears with dark chocolate-brown fondant tips.",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: "instance-04",
|
|
68
|
+
subject: "a brown owl's head",
|
|
69
|
+
head: BALL_HEAD,
|
|
70
|
+
texture: "powdery matte soft-brown fondant feathers with fine speckles",
|
|
71
|
+
nose: "a small sharp caramel candy beak",
|
|
72
|
+
eyes: "big round golden-amber iris with a round pupil",
|
|
73
|
+
accent: "A pale heart-shaped facial disc, tiny feather tufts above the eyes. Only the head — nothing below the chin.",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: "instance-05",
|
|
77
|
+
subject: "a white rabbit's head",
|
|
78
|
+
texture: "powdery matte snow-white fur with a dusting of powdered sugar",
|
|
79
|
+
nose: "a soft pink candy heart nose",
|
|
80
|
+
eyes: "round rose-brown iris with a round pupil",
|
|
81
|
+
accent: "Two long upright ears with pink fondant inner ears.",
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: "instance-06",
|
|
85
|
+
subject: "a shiba inu dog's head",
|
|
86
|
+
texture: "powdery matte cream-and-orange fur",
|
|
87
|
+
nose: "a small black candy nose",
|
|
88
|
+
eyes: "warm dark brown iris with a round pupil",
|
|
89
|
+
accent: "Perky triangular ears, white fondant muzzle and cheeks.",
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: "instance-07",
|
|
93
|
+
subject: "a gray cat's head",
|
|
94
|
+
texture: "powdery matte blue-gray fur",
|
|
95
|
+
nose: "a soft pink candy heart nose",
|
|
96
|
+
eyes: "yellow-green iris with a vertical slit pupil",
|
|
97
|
+
accent: "Wide triangular ears with pale pink inner ears, faint darker stripes.",
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: "instance-08",
|
|
101
|
+
subject: "a brown bear cub's head",
|
|
102
|
+
texture: "powdery matte milk-chocolate-brown fur",
|
|
103
|
+
nose: "a big soft brown candy nose",
|
|
104
|
+
eyes: "round dark honey-brown iris with a round pupil",
|
|
105
|
+
accent: "Small round fondant ears with caramel centers.",
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: "instance-09",
|
|
109
|
+
subject: "a giant panda's head",
|
|
110
|
+
texture: "powdery matte white fur with black fondant eye patches and ears",
|
|
111
|
+
nose: "a small black candy nose",
|
|
112
|
+
eyes: "round dark brown iris with a round pupil",
|
|
113
|
+
accent: "Round black fondant ears, classic black eye patches around the eyes.",
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: "instance-10",
|
|
117
|
+
subject: "a green frog's head",
|
|
118
|
+
head: BALL_HEAD,
|
|
119
|
+
texture: "powdery matte pastel-green fondant skin with tiny sugar dots",
|
|
120
|
+
nose: "two tiny nostril dots",
|
|
121
|
+
eyes: "round golden iris with a vertical slit pupil, both eyes wide open looking at the viewer",
|
|
122
|
+
accent: "Two soft bumps on top of the head where the eyes sit, wide cheerful closed mouth line.",
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: "instance-11",
|
|
126
|
+
subject: "a red squirrel's head",
|
|
127
|
+
texture: "powdery matte russet-orange fur with a cream muzzle",
|
|
128
|
+
nose: "a tiny pink candy nose",
|
|
129
|
+
eyes: "round bright dark-brown iris with a round pupil",
|
|
130
|
+
accent: "Big fluffy ears with cream tufts, cheeky alert look.",
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
name: "instance-12",
|
|
134
|
+
subject: "a yellow chick's head",
|
|
135
|
+
head: BALL_HEAD,
|
|
136
|
+
texture: "powdery matte butter-yellow fondant fluff",
|
|
137
|
+
nose: "a tiny glossy orange candy beak",
|
|
138
|
+
eyes: "round dark brown iris with a round pupil",
|
|
139
|
+
mouth: "no mouth line at all — the little beak is closed and is the only mouth",
|
|
140
|
+
accent: "A small tuft of fluff on top of the head.",
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: "management",
|
|
144
|
+
subject: "an orange tabby cat's head wearing a small golden candy crown",
|
|
145
|
+
texture: "powdery matte pastel-orange fur with darker orange tabby stripes",
|
|
146
|
+
nose: "a soft pink candy heart nose",
|
|
147
|
+
eyes: "warm amber-green iris with a vertical slit pupil",
|
|
148
|
+
accent:
|
|
149
|
+
"A tiny glossy golden candy crown with three points and a sugar gem sits between the ears; small triangular ears with pink fondant inner ears.",
|
|
150
|
+
},
|
|
151
|
+
];
|
|
152
|
+
|
|
153
|
+
/** 定稿画框(v9 模板):除插槽外逐字保留,改动需重新人工审定。 */
|
|
154
|
+
const promptFor = (a) =>
|
|
155
|
+
`A high-definition soft candy avatar of ${a.subject}, perfectly symmetrical front-facing view, ` +
|
|
156
|
+
`looking directly at the viewer, head only, no body. The animal is made of fluffy marshmallow and ` +
|
|
157
|
+
`sugar-dusted fondant: ${a.texture}, with a fine dusting of white powdered sugar, pillowy rounded ` +
|
|
158
|
+
`cheeks, ${a.nose}, ${a.mouth ?? "a sweet shy closed-mouth smile drawn as a small 'w' line"}, round ` +
|
|
159
|
+
`marshmallow blush cheeks. ${a.head ?? DEFAULT_HEAD} Natural well-proportioned cute animal face: the ` +
|
|
160
|
+
`eyes are realistic young animal eyes set naturally into the plush face — soft almond-round, ` +
|
|
161
|
+
`${a.eyes}, gentle natural shine with one small catchlight, smooth bare fur eyelids with no lashes, ` +
|
|
162
|
+
`bright and soulful, modest in size. ${a.accent} ` +
|
|
163
|
+
`Cute gentle expression. Background: a dreamy cloud of cotton candy in pastel pink, lilac and mint, ` +
|
|
164
|
+
`floating sugar floss wisps, tiny sprinkles and soft glowing bokeh, airy bright pastel palette. ` +
|
|
165
|
+
`Smooth polished 3D render, soft studio lighting, pastel candy colors, crisp details, centered ` +
|
|
166
|
+
`square composition for a profile picture.`;
|
|
167
|
+
|
|
168
|
+
// 负面词教训:绝不写 square/blocky 之外的形状否定(写 square 反而招来方头);
|
|
169
|
+
// 封杀吐舌头、张嘴、大眼、玻璃珠眼、睫毛、糖棍与像素风。
|
|
170
|
+
const NEGATIVE =
|
|
171
|
+
"eyelashes, false lashes, heavy eyeliner, makeup eyes, candy eyes, glass bead eyes, jelly eyes, " +
|
|
172
|
+
"big eyes, oversized eyes, anime eyes, star glints in eyes, tongue, sticking out tongue, open mouth, " +
|
|
173
|
+
"teeth, wink, winking, closed eye, sleepy eyes, lollipop stick, pixel art, pixels, blocky, low " +
|
|
174
|
+
"resolution, blurry, text, watermark, logo, signature, body, neck, shoulders, extra limbs, deformed " +
|
|
175
|
+
"face, scary, dark mood";
|
|
176
|
+
|
|
177
|
+
// ---- key --------------------------------------------------------------------
|
|
178
|
+
|
|
179
|
+
function apiKey() {
|
|
180
|
+
if (process.env.OPENROUTER_API_KEY) return process.env.OPENROUTER_API_KEY;
|
|
181
|
+
try {
|
|
182
|
+
const cfg = JSON.parse(readFileSync(join(homedir(), ".zcode", "v2", "config.json"), "utf8"));
|
|
183
|
+
for (const p of Object.values(cfg.provider ?? {})) {
|
|
184
|
+
const opts = p.options ?? {};
|
|
185
|
+
if (String(opts.baseURL ?? "").includes("openrouter.ai") && opts.apiKey) return opts.apiKey;
|
|
186
|
+
}
|
|
187
|
+
} catch {
|
|
188
|
+
// fall through
|
|
189
|
+
}
|
|
190
|
+
console.error("缺少 OPENROUTER_API_KEY(或 ~/.zcode 里配置 OpenRouter provider)");
|
|
191
|
+
process.exit(1);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// ---- API --------------------------------------------------------------------
|
|
195
|
+
|
|
196
|
+
async function generateImage(key, prompt) {
|
|
197
|
+
const res = await fetch(API, {
|
|
198
|
+
method: "POST",
|
|
199
|
+
headers: { authorization: `Bearer ${key}`, "content-type": "application/json" },
|
|
200
|
+
body: JSON.stringify({ model: MODEL, prompt, negative_prompt: NEGATIVE, aspect_ratio: "1:1" }),
|
|
201
|
+
signal: AbortSignal.timeout(180_000), // 挂起的连接最多等 3 分钟,失败进重试
|
|
202
|
+
});
|
|
203
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}: ${(await res.text()).slice(0, 250)}`);
|
|
204
|
+
const data = await res.json();
|
|
205
|
+
const item = data?.data?.[0];
|
|
206
|
+
if (item?.b64_json) return Buffer.from(item.b64_json, "base64");
|
|
207
|
+
if (item?.url) {
|
|
208
|
+
const img = await fetch(item.url);
|
|
209
|
+
if (!img.ok) throw new Error(`图片下载失败: HTTP ${img.status}`);
|
|
210
|
+
return Buffer.from(await img.arrayBuffer());
|
|
211
|
+
}
|
|
212
|
+
throw new Error(`响应无图: ${JSON.stringify(data).slice(0, 200)}`);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// ---- ship(草稿 → 正式 512×512 真 PNG) --------------------------------------
|
|
216
|
+
|
|
217
|
+
function shipDrafts(names) {
|
|
218
|
+
for (const name of names) {
|
|
219
|
+
const draft = join(DRAFT_DIR, `${name}.png`);
|
|
220
|
+
const out = join(SHIP_DIR, `${name}.png`);
|
|
221
|
+
// 高清平滑缩放用 lanczos(像素风时代的 neighbor 已退役)
|
|
222
|
+
execFileSync(
|
|
223
|
+
"ffmpeg",
|
|
224
|
+
["-y", "-loglevel", "error", "-i", draft, "-vf", `scale=${SHIP_SIZE}:${SHIP_SIZE}:flags=lanczos`, out],
|
|
225
|
+
{ stdio: "ignore" }
|
|
226
|
+
);
|
|
227
|
+
const magic = readFileSync(out).subarray(0, 8).toString("hex");
|
|
228
|
+
if (magic !== "89504e470d0a1a0a") throw new Error(`${out} 不是真 PNG(魔数 ${magic})`);
|
|
229
|
+
console.log(`✔ ${name} → ${out}(${SHIP_SIZE}×${SHIP_SIZE} PNG)`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// ---- run --------------------------------------------------------------------
|
|
234
|
+
|
|
235
|
+
const argv = process.argv.slice(2);
|
|
236
|
+
const flagValue = (prefix) => {
|
|
237
|
+
const hit = argv.find((a) => a.startsWith(`${prefix}=`));
|
|
238
|
+
return hit ? hit.slice(prefix.length + 1) : null;
|
|
239
|
+
};
|
|
240
|
+
const only = flagValue("--only")?.split(",").filter(Boolean) ?? null;
|
|
241
|
+
const targets = only ? ANIMALS.filter((a) => only.includes(a.name)) : ANIMALS;
|
|
242
|
+
if (only && targets.length !== only.length) {
|
|
243
|
+
const known = new Set(ANIMALS.map((a) => a.name));
|
|
244
|
+
console.error(`未知头像名: ${only.filter((n) => !known.has(n)).join(",")}`);
|
|
245
|
+
process.exit(1);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (argv.includes("--ship")) {
|
|
249
|
+
shipDrafts(targets.map((a) => a.name));
|
|
250
|
+
console.log(`\n出货完成 ${targets.length} 张 → ${SHIP_DIR}`);
|
|
251
|
+
process.exit(0);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
const key = apiKey();
|
|
255
|
+
mkdirSync(DRAFT_DIR, { recursive: true });
|
|
256
|
+
|
|
257
|
+
let ok = 0;
|
|
258
|
+
for (const avatar of targets) {
|
|
259
|
+
const attempts = 3;
|
|
260
|
+
for (let attempt = 1; attempt <= attempts; attempt++) {
|
|
261
|
+
try {
|
|
262
|
+
const bytes = await generateImage(key, promptFor(avatar));
|
|
263
|
+
const outPath = join(DRAFT_DIR, `${avatar.name}.png`);
|
|
264
|
+
writeFileSync(outPath, bytes);
|
|
265
|
+
console.log(`✔ ${avatar.name}(${(bytes.length / 1024).toFixed(0)} KB)→ ${outPath}`);
|
|
266
|
+
ok++;
|
|
267
|
+
break;
|
|
268
|
+
} catch (err) {
|
|
269
|
+
console.warn(`✗ ${avatar.name} 第 ${attempt}/${attempts} 次失败: ${err.message ?? err}`);
|
|
270
|
+
if (attempt === attempts) console.error(`✗✗ ${avatar.name} 放弃,可 --only=${avatar.name} 重试`);
|
|
271
|
+
else await new Promise((r) => setTimeout(r, 2000));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
console.log(`\n完成 ${ok}/${targets.length} → ${DRAFT_DIR}`);
|
|
276
|
+
if (ok < targets.length) process.exit(1);
|