blun-king-cli 9.1.513 → 9.1.514
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 9.1.514 - 2026-08-31
|
|
4
|
+
|
|
5
|
+
- Rejects nonnumeric Telegram message IDs and malformed precomputed chat hashes before they can enter the content-free delivery lifecycle journal.
|
|
6
|
+
- Closes a fail-open diagnostic edge where a forged queue envelope could smuggle text through the field named `message_id`, even though normal Telegram message IDs are positive decimal numbers.
|
|
7
|
+
- Adds a negative privacy regression and keeps the complete package suite green at 133 tests without changing Telegram routing, queueing, acknowledgement, or replay behavior.
|
|
8
|
+
|
|
3
9
|
## 9.1.513 - 2026-08-31
|
|
4
10
|
|
|
5
11
|
- Adds one bounded Telegram delivery lifecycle journal that connects bridge receipt, TUI injection, queue class, attempt, acceptance, commit or restore, quarantine, and durable acknowledgement by message ID.
|
package/LIESMICH.txt
CHANGED
|
@@ -9,18 +9,11 @@ Installation
|
|
|
9
9
|
------------
|
|
10
10
|
Die geprüfte Version exakt global installieren:
|
|
11
11
|
|
|
12
|
-
npm install -g blun-king-cli@9.1.
|
|
12
|
+
npm install -g blun-king-cli@9.1.514
|
|
13
13
|
|
|
14
14
|
AgentSpine 0.10.1
|
|
15
15
|
-----------------
|
|
16
|
-
Version 9.1.
|
|
17
|
-
Pluginfassung. Der Preflight prueft weiterhin jede aktive Host-Anweisungsdatei
|
|
18
|
-
race-sicher und bindet SHA-256 sowie Dateiidentitaet an den Zug, dupliziert den
|
|
19
|
-
bereits vom Host geladenen Volltext aber nicht mehr in den Laufzeitkontext.
|
|
20
|
-
Die reale 15.519-Byte-CLAUDE.md-Probe blieb dadurch bei 5.667 injizierten Byte.
|
|
21
|
-
Der Stand enthaelt ausserdem den selbstheilenden Persona- und Beziehungsgraphen,
|
|
22
|
-
die begrenzte Telegram-Mnemo-Abfrage und eine sichtbare Fuenf-Sekunden-Grenze
|
|
23
|
-
fuer lokale Beziehungsabfragen.
|
|
16
|
+
Version 9.1.514 enthält weiterhin AgentSpine 0.10.1 als inhaltsadressierte Pluginfassung. Der Preflight prüft jede aktive Host-Anweisungsdatei weiterhin race-sicher und bindet SHA-256 sowie Dateiidentität an den Zug, dupliziert den bereits vom Host geladenen Volltext aber nicht im Laufzeitkontext. Die reale Probe mit einer 15.519 Byte großen `CLAUDE.md` blieb dadurch bei 5.667 injizierten Byte. Der Stand enthält außerdem den selbstheilenden Persona- und Beziehungsgraphen, die begrenzte Telegram-Mnemo-Abfrage und eine sichtbare Fünf-Sekunden-Grenze für lokale Beziehungsabfragen.
|
|
24
17
|
|
|
25
18
|
Start
|
|
26
19
|
-----
|
package/README.md
CHANGED
|
@@ -9,19 +9,12 @@ Voraussetzung ist Node.js 24.15 oder neuer. Die geprüfte Version wird exakt
|
|
|
9
9
|
installiert:
|
|
10
10
|
|
|
11
11
|
```powershell
|
|
12
|
-
npm install -g blun-king-cli@9.1.
|
|
12
|
+
npm install -g blun-king-cli@9.1.514
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
## AgentSpine 0.10.1
|
|
16
16
|
|
|
17
|
-
Version 9.1.
|
|
18
|
-
Pluginfassung. Der Preflight prueft weiterhin jede aktive Host-Anweisungsdatei
|
|
19
|
-
race-sicher und bindet SHA-256 sowie Dateiidentitaet an den Zug, dupliziert den
|
|
20
|
-
bereits vom Host geladenen Volltext aber nicht mehr in den Laufzeitkontext.
|
|
21
|
-
Die reale 15.519-Byte-`CLAUDE.md`-Probe blieb dadurch bei 5.667 injizierten Byte.
|
|
22
|
-
Der Stand enthaelt ausserdem den selbstheilenden Persona- und Beziehungsgraphen,
|
|
23
|
-
die begrenzte Telegram-Mnemo-Abfrage und eine sichtbare Fuenf-Sekunden-Grenze
|
|
24
|
-
fuer lokale Beziehungsabfragen.
|
|
17
|
+
Version 9.1.514 enthält weiterhin AgentSpine 0.10.1 als inhaltsadressierte Pluginfassung. Der Preflight prüft jede aktive Host-Anweisungsdatei weiterhin race-sicher und bindet SHA-256 sowie Dateiidentität an den Zug, dupliziert den bereits vom Host geladenen Volltext aber nicht im Laufzeitkontext. Die reale Probe mit einer 15.519 Byte großen `CLAUDE.md` blieb dadurch bei 5.667 injizierten Byte. Der Stand enthält außerdem den selbstheilenden Persona- und Beziehungsgraphen, die begrenzte Telegram-Mnemo-Abfrage und eine sichtbare Fünf-Sekunden-Grenze für lokale Beziehungsabfragen.
|
|
25
18
|
|
|
26
19
|
## Reproduzierbares Staging und Packen
|
|
27
20
|
|
|
@@ -20,13 +20,25 @@ function boundedInteger(value) {
|
|
|
20
20
|
return Math.min(number, Number.MAX_SAFE_INTEGER);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
function numericMessageId(value) {
|
|
24
|
+
if (value === undefined || value === null) return undefined;
|
|
25
|
+
const text = String(value);
|
|
26
|
+
return /^[1-9][0-9]{0,39}$/u.test(text) ? text : undefined;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function strictChatHash(value) {
|
|
30
|
+
if (value === undefined || value === null) return undefined;
|
|
31
|
+
const text = String(value);
|
|
32
|
+
return /^[a-f0-9]{12}$/u.test(text) ? text : undefined;
|
|
33
|
+
}
|
|
34
|
+
|
|
23
35
|
function hashChatId(chatId) {
|
|
24
36
|
if (chatId === undefined || chatId === null || String(chatId).length === 0) return undefined;
|
|
25
37
|
return crypto.createHash('sha256').update(String(chatId)).digest('hex').slice(0, 12);
|
|
26
38
|
}
|
|
27
39
|
|
|
28
40
|
function telegramDeliveryIdentity(meta = {}) {
|
|
29
|
-
const messageId =
|
|
41
|
+
const messageId = numericMessageId(meta.message_id ?? meta.messageId);
|
|
30
42
|
const chatHash = hashChatId(meta.chat_id ?? meta.chatId);
|
|
31
43
|
return {
|
|
32
44
|
...(messageId === undefined ? {} : { messageId }),
|
|
@@ -35,11 +47,15 @@ function telegramDeliveryIdentity(meta = {}) {
|
|
|
35
47
|
}
|
|
36
48
|
|
|
37
49
|
function lifecycleRecord(event, now, pid) {
|
|
50
|
+
const messageId = numericMessageId(event.messageId);
|
|
51
|
+
const chatHash = event.chatHash === undefined
|
|
52
|
+
? undefined
|
|
53
|
+
: strictChatHash(event.chatHash);
|
|
38
54
|
const identity = {
|
|
39
|
-
...(
|
|
55
|
+
...(messageId === undefined ? {} : { messageId }),
|
|
40
56
|
...(event.chatHash === undefined
|
|
41
57
|
? telegramDeliveryIdentity({ chatId: event.chatId })
|
|
42
|
-
: {
|
|
58
|
+
: chatHash === undefined ? {} : { chatHash }),
|
|
43
59
|
};
|
|
44
60
|
const record = {
|
|
45
61
|
version: 1,
|
package/package.json
CHANGED
|
@@ -20,13 +20,25 @@ function boundedInteger(value) {
|
|
|
20
20
|
return Math.min(number, Number.MAX_SAFE_INTEGER);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
function numericMessageId(value) {
|
|
24
|
+
if (value === undefined || value === null) return undefined;
|
|
25
|
+
const text = String(value);
|
|
26
|
+
return /^[1-9][0-9]{0,39}$/u.test(text) ? text : undefined;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function strictChatHash(value) {
|
|
30
|
+
if (value === undefined || value === null) return undefined;
|
|
31
|
+
const text = String(value);
|
|
32
|
+
return /^[a-f0-9]{12}$/u.test(text) ? text : undefined;
|
|
33
|
+
}
|
|
34
|
+
|
|
23
35
|
function hashChatId(chatId) {
|
|
24
36
|
if (chatId === undefined || chatId === null || String(chatId).length === 0) return undefined;
|
|
25
37
|
return crypto.createHash('sha256').update(String(chatId)).digest('hex').slice(0, 12);
|
|
26
38
|
}
|
|
27
39
|
|
|
28
40
|
function telegramDeliveryIdentity(meta = {}) {
|
|
29
|
-
const messageId =
|
|
41
|
+
const messageId = numericMessageId(meta.message_id ?? meta.messageId);
|
|
30
42
|
const chatHash = hashChatId(meta.chat_id ?? meta.chatId);
|
|
31
43
|
return {
|
|
32
44
|
...(messageId === undefined ? {} : { messageId }),
|
|
@@ -35,11 +47,15 @@ function telegramDeliveryIdentity(meta = {}) {
|
|
|
35
47
|
}
|
|
36
48
|
|
|
37
49
|
function lifecycleRecord(event, now, pid) {
|
|
50
|
+
const messageId = numericMessageId(event.messageId);
|
|
51
|
+
const chatHash = event.chatHash === undefined
|
|
52
|
+
? undefined
|
|
53
|
+
: strictChatHash(event.chatHash);
|
|
38
54
|
const identity = {
|
|
39
|
-
...(
|
|
55
|
+
...(messageId === undefined ? {} : { messageId }),
|
|
40
56
|
...(event.chatHash === undefined
|
|
41
57
|
? telegramDeliveryIdentity({ chatId: event.chatId })
|
|
42
|
-
: {
|
|
58
|
+
: chatHash === undefined ? {} : { chatHash }),
|
|
43
59
|
};
|
|
44
60
|
const record = {
|
|
45
61
|
version: 1,
|