@songsid/agend 2.3.0-beta.20 → 2.3.0-beta.22
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/dist/agent-endpoint.d.ts +8 -0
- package/dist/agent-endpoint.js +11 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/auth-api.js +2 -1
- package/dist/auth-api.js.map +1 -1
- package/dist/backend/grok.js +56 -3
- package/dist/backend/grok.js.map +1 -1
- package/dist/channel/mcp-tools.js +2 -2
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/config-validator.js +8 -1
- package/dist/config-validator.js.map +1 -1
- package/dist/config.d.ts +2 -2
- package/dist/config.js +14 -2
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +6 -0
- package/dist/daemon.js +14 -0
- package/dist/daemon.js.map +1 -1
- package/dist/fleet-manager.d.ts +28 -2
- package/dist/fleet-manager.js +102 -15
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/fleet-restart/SKILL.md +1 -1
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +3 -1
- package/dist/instance-config-impact.js +3 -0
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.js +2 -2
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.js +2 -1
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +19 -6
- package/dist/locale.js.map +1 -1
- package/dist/outbound-handlers.js +25 -10
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/provider-secret-registry.d.ts +5 -3
- package/dist/provider-secret-registry.js +8 -2
- package/dist/provider-secret-registry.js.map +1 -1
- package/dist/public-tunnel-config.d.ts +6 -0
- package/dist/public-tunnel-config.js +24 -0
- package/dist/public-tunnel-config.js.map +1 -0
- package/dist/public-web-gateway.d.ts +2 -0
- package/dist/public-web-gateway.js +3 -2
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +13 -2
- package/dist/public-web-link.js +35 -9
- package/dist/public-web-link.js.map +1 -1
- package/dist/secret-store.d.ts +2 -0
- package/dist/secret-store.js +21 -0
- package/dist/secret-store.js.map +1 -1
- package/dist/settings-api.d.ts +1 -0
- package/dist/settings-api.js +13 -9
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +2 -2
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-effect.js +4 -1
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.js +1 -1
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/tunnel/cloudflared.d.ts +6 -15
- package/dist/tunnel/cloudflared.js +20 -9
- package/dist/tunnel/cloudflared.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/ui/app.html +2 -0
- package/dist/ui/chat-render.js +39 -0
- package/dist/ui/chat-store.js +8 -0
- package/dist/ui/chat-strings.js +2 -2
- package/dist/ui/chat-thread.js +1 -1
- package/dist/ui/fleet-canvas.js +14 -6
- package/dist/ui/fleet-route-scene.js +86 -21
- package/dist/ui/fleet-traffic.js +57 -10
- package/dist/ui/icons/icon-192.png +0 -0
- package/dist/ui/icons/icon-512.png +0 -0
- package/dist/ui/panel-settings.js +57 -4
- package/dist/ui/settings-appearance.js +126 -1
- package/dist/ui/settings-learn.js +1 -0
- package/dist/ui/settings-strings.js +78 -0
- package/dist/ui/shared/app-stream.js +2 -1
- package/dist/ui/shared/app.css +48 -21
- package/dist/ui/signin.html +2 -0
- package/dist/web-api.d.ts +6 -2
- package/dist/web-api.js +114 -4
- package/dist/web-api.js.map +1 -1
- package/dist/web-app-icon-worker.d.ts +1 -0
- package/dist/web-app-icon-worker.js +15 -0
- package/dist/web-app-icon-worker.js.map +1 -0
- package/dist/web-app-icon.d.ts +107 -0
- package/dist/web-app-icon.js +256 -0
- package/dist/web-app-icon.js.map +1 -0
- package/dist/web-chat-history.d.ts +23 -0
- package/dist/web-chat-history.js +32 -2
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-guest-access.js +7 -1
- package/dist/web-guest-access.js.map +1 -1
- package/dist/web-icons.d.ts +33 -1
- package/dist/web-icons.js +83 -11
- package/dist/web-icons.js.map +1 -1
- package/dist/web-png.d.ts +29 -0
- package/dist/web-png.js +321 -0
- package/dist/web-png.js.map +1 -0
- package/dist/web-reactions.d.ts +34 -0
- package/dist/web-reactions.js +47 -0
- package/dist/web-reactions.js.map +1 -0
- package/package.json +1 -1
package/dist/web-png.js
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #2308: just enough PNG for the app icon, on Node's zlib (no image library). Decode a PNG the person uploaded — every
|
|
3
|
+
* chunk's CRC, the IHDR, the image data inflating to exactly its expected size (a decompression bomb cannot grow),
|
|
4
|
+
* each row's filter — into RGBA; resample it (area average, alpha premultiplied); encode PNGs; pack an ICO of PNGs.
|
|
5
|
+
* Anything malformed is a PngError with a short reason, never a crash.
|
|
6
|
+
*/
|
|
7
|
+
import { deflateSync, inflateSync } from "node:zlib";
|
|
8
|
+
export class PngError extends Error {
|
|
9
|
+
}
|
|
10
|
+
const SIGNATURE = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
|
|
11
|
+
const CRC_TABLE = (() => {
|
|
12
|
+
const t = new Uint32Array(256);
|
|
13
|
+
for (let n = 0; n < 256; n++) {
|
|
14
|
+
let c = n;
|
|
15
|
+
for (let k = 0; k < 8; k++)
|
|
16
|
+
c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
17
|
+
t[n] = c >>> 0;
|
|
18
|
+
}
|
|
19
|
+
return t;
|
|
20
|
+
})();
|
|
21
|
+
function crc32(...parts) {
|
|
22
|
+
let c = 0xffffffff;
|
|
23
|
+
for (const p of parts)
|
|
24
|
+
for (let i = 0; i < p.length; i++)
|
|
25
|
+
c = CRC_TABLE[(c ^ p[i]) & 0xff] ^ (c >>> 8);
|
|
26
|
+
return (c ^ 0xffffffff) >>> 0;
|
|
27
|
+
}
|
|
28
|
+
export function isPng(bytes) {
|
|
29
|
+
return bytes.length >= 8 && SIGNATURE.equals(Buffer.from(bytes.buffer, bytes.byteOffset, 8));
|
|
30
|
+
}
|
|
31
|
+
/** Channels per colour type, and the bit depths each allows (PNG spec, table 11.1). */
|
|
32
|
+
const COLOR = {
|
|
33
|
+
0: { channels: 1, depths: [1, 2, 4, 8, 16] },
|
|
34
|
+
2: { channels: 3, depths: [8, 16] },
|
|
35
|
+
3: { channels: 1, depths: [1, 2, 4, 8] },
|
|
36
|
+
4: { channels: 2, depths: [8, 16] },
|
|
37
|
+
6: { channels: 4, depths: [8, 16] },
|
|
38
|
+
};
|
|
39
|
+
/** A PNG's pixels as RGBA, or a PngError naming what is wrong. Interlaced images are refused (the page never sends one). */
|
|
40
|
+
export function decodePng(bytes, limits) {
|
|
41
|
+
const buf = Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
42
|
+
if (!isPng(buf))
|
|
43
|
+
throw new PngError("not a PNG");
|
|
44
|
+
let pos = 8;
|
|
45
|
+
let ihdr = null;
|
|
46
|
+
let palette = null;
|
|
47
|
+
let trns = null;
|
|
48
|
+
const idat = [];
|
|
49
|
+
let ended = false;
|
|
50
|
+
while (pos < buf.length) {
|
|
51
|
+
if (pos + 12 > buf.length)
|
|
52
|
+
throw new PngError("truncated chunk");
|
|
53
|
+
const len = buf.readUInt32BE(pos);
|
|
54
|
+
if (len > 0x7fffffff || pos + 12 + len > buf.length)
|
|
55
|
+
throw new PngError("truncated chunk");
|
|
56
|
+
const type = buf.subarray(pos + 4, pos + 8);
|
|
57
|
+
const data = buf.subarray(pos + 8, pos + 8 + len);
|
|
58
|
+
if (crc32(type, data) !== buf.readUInt32BE(pos + 8 + len))
|
|
59
|
+
throw new PngError("bad chunk CRC");
|
|
60
|
+
const name = type.toString("latin1");
|
|
61
|
+
pos += 12 + len;
|
|
62
|
+
if (!ihdr && name !== "IHDR")
|
|
63
|
+
throw new PngError("IHDR must come first");
|
|
64
|
+
if (name === "IHDR") {
|
|
65
|
+
if (ihdr || len !== 13)
|
|
66
|
+
throw new PngError("bad IHDR");
|
|
67
|
+
const width = data.readUInt32BE(0), height = data.readUInt32BE(4), depth = data[8], colorType = data[9];
|
|
68
|
+
if (!width || !height)
|
|
69
|
+
throw new PngError("empty image");
|
|
70
|
+
if (width > limits.maxSide || height > limits.maxSide)
|
|
71
|
+
throw new PngError(`larger than ${limits.maxSide}×${limits.maxSide}`);
|
|
72
|
+
const spec = COLOR[colorType];
|
|
73
|
+
if (!spec || !spec.depths.includes(depth))
|
|
74
|
+
throw new PngError("unknown colour type or bit depth");
|
|
75
|
+
if (data[10] !== 0 || data[11] !== 0)
|
|
76
|
+
throw new PngError("unknown compression or filter method");
|
|
77
|
+
if (data[12] === 1)
|
|
78
|
+
throw new PngError("interlaced PNGs are not supported");
|
|
79
|
+
if (data[12] !== 0)
|
|
80
|
+
throw new PngError("unknown interlace method");
|
|
81
|
+
ihdr = { width, height, depth, type: colorType };
|
|
82
|
+
}
|
|
83
|
+
else if (name === "PLTE") {
|
|
84
|
+
if (len % 3 || len === 0 || len > 768)
|
|
85
|
+
throw new PngError("bad palette");
|
|
86
|
+
palette = data;
|
|
87
|
+
}
|
|
88
|
+
else if (name === "tRNS") {
|
|
89
|
+
trns = data;
|
|
90
|
+
}
|
|
91
|
+
else if (name === "IDAT") {
|
|
92
|
+
idat.push(data);
|
|
93
|
+
}
|
|
94
|
+
else if (name === "IEND") {
|
|
95
|
+
ended = true;
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
else if (type[0] & 0x20) {
|
|
99
|
+
// Ancillary chunk (lower-case first letter): skipped.
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
throw new PngError(`unknown critical chunk ${name}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (!ihdr)
|
|
106
|
+
throw new PngError("no IHDR");
|
|
107
|
+
if (!ended)
|
|
108
|
+
throw new PngError("no IEND");
|
|
109
|
+
if (!idat.length)
|
|
110
|
+
throw new PngError("no image data");
|
|
111
|
+
if (ihdr.type === 3 && !palette)
|
|
112
|
+
throw new PngError("palette image without a palette");
|
|
113
|
+
const { width, height, depth, type } = ihdr;
|
|
114
|
+
const channels = COLOR[type].channels;
|
|
115
|
+
const bitsPerPixel = channels * depth;
|
|
116
|
+
const rowBytes = Math.ceil((width * bitsPerPixel) / 8);
|
|
117
|
+
const expected = height * (rowBytes + 1);
|
|
118
|
+
let raw;
|
|
119
|
+
try {
|
|
120
|
+
raw = inflateSync(Buffer.concat(idat), { maxOutputLength: expected });
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
throw new PngError("image data does not inflate to its size");
|
|
124
|
+
}
|
|
125
|
+
if (raw.length !== expected)
|
|
126
|
+
throw new PngError("image data does not inflate to its size");
|
|
127
|
+
// Unfilter in place, row by row (filter byte, then the row).
|
|
128
|
+
const bpp = Math.max(1, Math.ceil(bitsPerPixel / 8));
|
|
129
|
+
const pixels = Buffer.alloc(height * rowBytes);
|
|
130
|
+
for (let y = 0; y < height; y++) {
|
|
131
|
+
const f = raw[y * (rowBytes + 1)];
|
|
132
|
+
const src = y * (rowBytes + 1) + 1;
|
|
133
|
+
const out = y * rowBytes;
|
|
134
|
+
const prev = y > 0 ? out - rowBytes : -1;
|
|
135
|
+
for (let x = 0; x < rowBytes; x++) {
|
|
136
|
+
const a = x >= bpp ? pixels[out + x - bpp] : 0;
|
|
137
|
+
const b = prev >= 0 ? pixels[prev + x] : 0;
|
|
138
|
+
const c = x >= bpp && prev >= 0 ? pixels[prev + x - bpp] : 0;
|
|
139
|
+
const v = raw[src + x];
|
|
140
|
+
let r;
|
|
141
|
+
switch (f) {
|
|
142
|
+
case 0:
|
|
143
|
+
r = v;
|
|
144
|
+
break;
|
|
145
|
+
case 1:
|
|
146
|
+
r = v + a;
|
|
147
|
+
break;
|
|
148
|
+
case 2:
|
|
149
|
+
r = v + b;
|
|
150
|
+
break;
|
|
151
|
+
case 3:
|
|
152
|
+
r = v + ((a + b) >> 1);
|
|
153
|
+
break;
|
|
154
|
+
case 4: {
|
|
155
|
+
const p = a + b - c, pa = Math.abs(p - a), pb = Math.abs(p - b), pc = Math.abs(p - c);
|
|
156
|
+
r = v + (pa <= pb && pa <= pc ? a : pb <= pc ? b : c);
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
default: throw new PngError("bad filter type");
|
|
160
|
+
}
|
|
161
|
+
pixels[out + x] = r & 0xff;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// To RGBA, 8 bits.
|
|
165
|
+
const rgba = new Uint8Array(width * height * 4);
|
|
166
|
+
const sample = (row, i) => {
|
|
167
|
+
// The i-th sample of a row, scaled to 0–255.
|
|
168
|
+
const base = row * rowBytes;
|
|
169
|
+
if (depth === 8)
|
|
170
|
+
return pixels[base + i];
|
|
171
|
+
if (depth === 16)
|
|
172
|
+
return pixels[base + i * 2]; // the high byte
|
|
173
|
+
const bit = i * depth;
|
|
174
|
+
const v = (pixels[base + (bit >> 3)] >> (8 - depth - (bit & 7))) & ((1 << depth) - 1);
|
|
175
|
+
return type === 3 ? v : Math.round((v * 255) / ((1 << depth) - 1));
|
|
176
|
+
};
|
|
177
|
+
const raw16 = (row, i) => pixels.readUInt16BE(row * rowBytes + i * 2);
|
|
178
|
+
const trnsKey = trns && (type === 0 || type === 2) ? (type === 0 ? [trns.length >= 2 ? trns.readUInt16BE(0) : -1] : trns.length >= 6 ? [trns.readUInt16BE(0), trns.readUInt16BE(2), trns.readUInt16BE(4)] : null) : null;
|
|
179
|
+
const rawGray = (row, x) => (depth === 16 ? raw16(row, x) : depth === 8 ? pixels[row * rowBytes + x] : (pixels[row * rowBytes + ((x * depth) >> 3)] >> (8 - depth - ((x * depth) & 7))) & ((1 << depth) - 1));
|
|
180
|
+
for (let y = 0; y < height; y++) {
|
|
181
|
+
for (let x = 0; x < width; x++) {
|
|
182
|
+
const o = (y * width + x) * 4;
|
|
183
|
+
let r, g, b, a = 255;
|
|
184
|
+
if (type === 0) {
|
|
185
|
+
r = g = b = sample(y, x);
|
|
186
|
+
if (trnsKey && rawGray(y, x) === trnsKey[0])
|
|
187
|
+
a = 0;
|
|
188
|
+
}
|
|
189
|
+
else if (type === 2) {
|
|
190
|
+
r = sample(y, x * 3);
|
|
191
|
+
g = sample(y, x * 3 + 1);
|
|
192
|
+
b = sample(y, x * 3 + 2);
|
|
193
|
+
if (trnsKey) {
|
|
194
|
+
const k = depth === 16 ? [raw16(y, x * 3), raw16(y, x * 3 + 1), raw16(y, x * 3 + 2)] : [r, g, b];
|
|
195
|
+
if (k[0] === trnsKey[0] && k[1] === trnsKey[1] && k[2] === trnsKey[2])
|
|
196
|
+
a = 0;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else if (type === 3) {
|
|
200
|
+
const i = sample(y, x);
|
|
201
|
+
if (i * 3 + 2 >= palette.length)
|
|
202
|
+
throw new PngError("palette index out of range");
|
|
203
|
+
r = palette[i * 3];
|
|
204
|
+
g = palette[i * 3 + 1];
|
|
205
|
+
b = palette[i * 3 + 2];
|
|
206
|
+
if (trns && i < trns.length)
|
|
207
|
+
a = trns[i];
|
|
208
|
+
}
|
|
209
|
+
else if (type === 4) {
|
|
210
|
+
r = g = b = sample(y, x * 2);
|
|
211
|
+
a = sample(y, x * 2 + 1);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
r = sample(y, x * 4);
|
|
215
|
+
g = sample(y, x * 4 + 1);
|
|
216
|
+
b = sample(y, x * 4 + 2);
|
|
217
|
+
a = sample(y, x * 4 + 3);
|
|
218
|
+
}
|
|
219
|
+
rgba[o] = r;
|
|
220
|
+
rgba[o + 1] = g;
|
|
221
|
+
rgba[o + 2] = b;
|
|
222
|
+
rgba[o + 3] = a;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return { width, height, data: rgba };
|
|
226
|
+
}
|
|
227
|
+
function chunk(name, data) {
|
|
228
|
+
const type = Buffer.from(name, "latin1");
|
|
229
|
+
const head = Buffer.alloc(4);
|
|
230
|
+
head.writeUInt32BE(data.length);
|
|
231
|
+
const crc = Buffer.alloc(4);
|
|
232
|
+
crc.writeUInt32BE(crc32(type, data));
|
|
233
|
+
return Buffer.concat([head, type, data, crc]);
|
|
234
|
+
}
|
|
235
|
+
/** An RGBA image as a PNG (colour type 6, 8 bits, filter 0 per row — small icons, size does not matter much). */
|
|
236
|
+
export function encodePng(img) {
|
|
237
|
+
const { width, height, data } = img;
|
|
238
|
+
const ihdr = Buffer.alloc(13);
|
|
239
|
+
ihdr.writeUInt32BE(width, 0);
|
|
240
|
+
ihdr.writeUInt32BE(height, 4);
|
|
241
|
+
ihdr[8] = 8;
|
|
242
|
+
ihdr[9] = 6;
|
|
243
|
+
ihdr[10] = 0;
|
|
244
|
+
ihdr[11] = 0;
|
|
245
|
+
ihdr[12] = 0;
|
|
246
|
+
const raw = Buffer.alloc(height * (width * 4 + 1));
|
|
247
|
+
for (let y = 0; y < height; y++) {
|
|
248
|
+
raw[y * (width * 4 + 1)] = 0;
|
|
249
|
+
Buffer.from(data.buffer, data.byteOffset + y * width * 4, width * 4).copy(raw, y * (width * 4 + 1) + 1);
|
|
250
|
+
}
|
|
251
|
+
return Buffer.concat([SIGNATURE, chunk("IHDR", ihdr), chunk("IDAT", deflateSync(raw, { level: 9 })), chunk("IEND", new Uint8Array(0))]);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Resize by area average: each target pixel is the coverage-weighted mean of the source pixels under it, with alpha
|
|
255
|
+
* premultiplied so transparent edges do not darken. Good for shrinking (the icon's case); enlarging stays smooth enough.
|
|
256
|
+
*/
|
|
257
|
+
export function resize(src, width, height) {
|
|
258
|
+
const out = new Uint8Array(width * height * 4);
|
|
259
|
+
const sx = src.width / width, sy = src.height / height;
|
|
260
|
+
for (let y = 0; y < height; y++) {
|
|
261
|
+
const y0 = y * sy, y1 = y0 + sy;
|
|
262
|
+
for (let x = 0; x < width; x++) {
|
|
263
|
+
const x0 = x * sx, x1 = x0 + sx;
|
|
264
|
+
let r = 0, g = 0, b = 0, a = 0, w = 0;
|
|
265
|
+
for (let yy = Math.floor(y0); yy < Math.min(src.height, Math.ceil(y1)); yy++) {
|
|
266
|
+
const wy = Math.min(yy + 1, y1) - Math.max(yy, y0);
|
|
267
|
+
for (let xx = Math.floor(x0); xx < Math.min(src.width, Math.ceil(x1)); xx++) {
|
|
268
|
+
const wx = Math.min(xx + 1, x1) - Math.max(xx, x0);
|
|
269
|
+
const k = wx * wy;
|
|
270
|
+
const i = (yy * src.width + xx) * 4;
|
|
271
|
+
const al = src.data[i + 3] / 255;
|
|
272
|
+
r += src.data[i] * al * k;
|
|
273
|
+
g += src.data[i + 1] * al * k;
|
|
274
|
+
b += src.data[i + 2] * al * k;
|
|
275
|
+
a += al * k;
|
|
276
|
+
w += k;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
const o = (y * width + x) * 4;
|
|
280
|
+
const alpha = w ? a / w : 0;
|
|
281
|
+
out[o] = alpha ? Math.round(r / a) : 0;
|
|
282
|
+
out[o + 1] = alpha ? Math.round(g / a) : 0;
|
|
283
|
+
out[o + 2] = alpha ? Math.round(b / a) : 0;
|
|
284
|
+
out[o + 3] = Math.round(alpha * 255);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return { width, height, data: out };
|
|
288
|
+
}
|
|
289
|
+
/** The image over a solid colour (iOS shows a touch icon's transparency as black). */
|
|
290
|
+
export function flatten(img, rgb) {
|
|
291
|
+
const out = new Uint8Array(img.data.length);
|
|
292
|
+
for (let i = 0; i < img.data.length; i += 4) {
|
|
293
|
+
const a = img.data[i + 3] / 255;
|
|
294
|
+
for (let c = 0; c < 3; c++)
|
|
295
|
+
out[i + c] = Math.round(img.data[i + c] * a + rgb[c] * (1 - a));
|
|
296
|
+
out[i + 3] = 255;
|
|
297
|
+
}
|
|
298
|
+
return { width: img.width, height: img.height, data: out };
|
|
299
|
+
}
|
|
300
|
+
/** An ICO of PNG entries (Vista and every browser since): a 6-byte header, a 16-byte entry each, then the PNGs. */
|
|
301
|
+
export function encodeIco(pngs) {
|
|
302
|
+
const header = Buffer.alloc(6 + 16 * pngs.length);
|
|
303
|
+
header.writeUInt16LE(0, 0);
|
|
304
|
+
header.writeUInt16LE(1, 2); // 1 = icon
|
|
305
|
+
header.writeUInt16LE(pngs.length, 4);
|
|
306
|
+
let offset = header.length;
|
|
307
|
+
pngs.forEach(({ size, png }, i) => {
|
|
308
|
+
const e = 6 + 16 * i;
|
|
309
|
+
header[e] = size >= 256 ? 0 : size; // 0 means 256
|
|
310
|
+
header[e + 1] = size >= 256 ? 0 : size;
|
|
311
|
+
header[e + 2] = 0;
|
|
312
|
+
header[e + 3] = 0; // no palette, reserved
|
|
313
|
+
header.writeUInt16LE(1, e + 4); // planes
|
|
314
|
+
header.writeUInt16LE(32, e + 6); // bits per pixel
|
|
315
|
+
header.writeUInt32LE(png.length, e + 8);
|
|
316
|
+
header.writeUInt32LE(offset, e + 12);
|
|
317
|
+
offset += png.length;
|
|
318
|
+
});
|
|
319
|
+
return Buffer.concat([header, ...pngs.map((p) => p.png)]);
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=web-png.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-png.js","sourceRoot":"","sources":["../src/web-png.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #2305: which emojis an instance may react with on a web chat message — the minimal reply ("OK", "thanks") the
|
|
3
|
+
* platforms already have.
|
|
4
|
+
* - The set is Telegram's fixed reaction set (status-emojis.ts TELEGRAM_REACTION_EMOJIS), one set on every surface:
|
|
5
|
+
* each of them is a valid reaction on Discord and on Telegram, so the web message's channel copy can carry it too.
|
|
6
|
+
* A variation selector in the input is accepted (👍️ = 👍); the stored form is the set's own spelling.
|
|
7
|
+
* - Never AgEnD's own delivery marks: the instance's resolved status emojis (statusAvoidList), which the instance is
|
|
8
|
+
* told to avoid on the platforms already.
|
|
9
|
+
*/
|
|
10
|
+
import type { ChannelAdapter } from "./channel/types.js";
|
|
11
|
+
/** A web message's copy in a channel (the echo): where a reaction to the web message is put too. */
|
|
12
|
+
export interface WebEchoCopy {
|
|
13
|
+
adapter: Pick<ChannelAdapter, "react" | "type">;
|
|
14
|
+
chatId: string;
|
|
15
|
+
threadId?: string;
|
|
16
|
+
messageId: string;
|
|
17
|
+
}
|
|
18
|
+
/** How many web messages' copies the fleet remembers (the newest; this process only). */
|
|
19
|
+
export declare const WEB_ECHO_COPIES_MAX = 2000;
|
|
20
|
+
/** How long one copy's reaction may take before it is given up (logged): it never holds the tool's answer. */
|
|
21
|
+
export declare const WEB_MIRROR_TIMEOUT_MS = 10000;
|
|
22
|
+
/** The most distinct reactions one web message keeps. */
|
|
23
|
+
export declare const WEB_REACTIONS_MAX = 8;
|
|
24
|
+
/** A few allowed emojis, named in the error for one that is not. */
|
|
25
|
+
export declare const WEB_REACTION_SUGGESTIONS: readonly string[];
|
|
26
|
+
/** The stored spelling of an emoji the web takes (the set's own), or null when it is not one. */
|
|
27
|
+
export declare function webReactionEmoji(raw: unknown): string | null;
|
|
28
|
+
/**
|
|
29
|
+
* Why `raw` cannot be a web reaction, or null when it can. `avoid`: the status emojis in display form (statusAvoidList),
|
|
30
|
+
* compared without variation selectors.
|
|
31
|
+
*/
|
|
32
|
+
export declare function webReactionProblem(raw: unknown, avoid: readonly string[]): string | null;
|
|
33
|
+
/** Whether a value read back from disk (or a stream) is a list of web reactions: distinct, in the set, at most the max. */
|
|
34
|
+
export declare function webReactionsOf(raw: unknown): string[] | undefined;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { TELEGRAM_REACTION_EMOJIS, normalizeEmoji } from "./status-emojis.js";
|
|
2
|
+
/** How many web messages' copies the fleet remembers (the newest; this process only). */
|
|
3
|
+
export const WEB_ECHO_COPIES_MAX = 2000;
|
|
4
|
+
/** How long one copy's reaction may take before it is given up (logged): it never holds the tool's answer. */
|
|
5
|
+
export const WEB_MIRROR_TIMEOUT_MS = 10_000;
|
|
6
|
+
/** The most distinct reactions one web message keeps. */
|
|
7
|
+
export const WEB_REACTIONS_MAX = 8;
|
|
8
|
+
/** A few allowed emojis, named in the error for one that is not. */
|
|
9
|
+
export const WEB_REACTION_SUGGESTIONS = ["👍", "👌", "❤", "🙏", "🎉", "🔥", "💯", "🫡", "🤝", "👏"];
|
|
10
|
+
const stripVariation = (s) => s.replace(/\uFE0F/g, "");
|
|
11
|
+
/** The stored spelling of an emoji the web takes (the set's own), or null when it is not one. */
|
|
12
|
+
export function webReactionEmoji(raw) {
|
|
13
|
+
const e = normalizeEmoji(raw);
|
|
14
|
+
if (!e || e.kind !== "unicode")
|
|
15
|
+
return null;
|
|
16
|
+
const bare = stripVariation(e.value);
|
|
17
|
+
return TELEGRAM_REACTION_EMOJIS.has(bare) ? bare : null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Why `raw` cannot be a web reaction, or null when it can. `avoid`: the status emojis in display form (statusAvoidList),
|
|
21
|
+
* compared without variation selectors.
|
|
22
|
+
*/
|
|
23
|
+
export function webReactionProblem(raw, avoid) {
|
|
24
|
+
const shown = typeof raw === "string" ? raw.trim().slice(0, 32) : String(raw).slice(0, 32);
|
|
25
|
+
const emoji = webReactionEmoji(raw);
|
|
26
|
+
const offer = WEB_REACTION_SUGGESTIONS.filter(e => !avoid.some(a => stripVariation(a) === e)).join(" ");
|
|
27
|
+
if (!emoji)
|
|
28
|
+
return `react: "${shown}" cannot be a web reaction — use one emoji from the reaction set, e.g. ${offer}`;
|
|
29
|
+
if (avoid.some(a => stripVariation(a) === emoji))
|
|
30
|
+
return `react: ${emoji} is one of AgEnD's delivery marks here — use another, e.g. ${offer}`;
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
/** Whether a value read back from disk (or a stream) is a list of web reactions: distinct, in the set, at most the max. */
|
|
34
|
+
export function webReactionsOf(raw) {
|
|
35
|
+
if (!Array.isArray(raw))
|
|
36
|
+
return undefined;
|
|
37
|
+
const out = [];
|
|
38
|
+
for (const r of raw) {
|
|
39
|
+
const e = typeof r === "string" ? webReactionEmoji(r) : null;
|
|
40
|
+
if (e && !out.includes(e))
|
|
41
|
+
out.push(e);
|
|
42
|
+
if (out.length >= WEB_REACTIONS_MAX)
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
return out.length ? out : undefined;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=web-reactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-reactions.js","sourceRoot":"","sources":["../src/web-reactions.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAI9E,yFAAyF;AACzF,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACxC,8GAA8G;AAC9G,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,yDAAyD;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,oEAAoE;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEvH,MAAM,cAAc,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AAEvE,iGAAiG;AACjG,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY,EAAE,KAAwB;IACvE,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3F,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxG,IAAI,CAAC,KAAK;QAAE,OAAO,WAAW,KAAK,0EAA0E,KAAK,EAAE,CAAC;IACrH,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,UAAU,KAAK,8DAA8D,KAAK,EAAE,CAAC;IAC9I,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2HAA2H;AAC3H,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,GAAG,CAAC,MAAM,IAAI,iBAAiB;YAAE,MAAM;IAC7C,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACtC,CAAC"}
|
package/package.json
CHANGED