blun-king-cli 9.1.123 → 9.1.125
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/LIESMICH.txt +17 -0
- package/README.md +17 -0
- package/bin/telegram-remote-status-policy.cjs +41 -0
- package/blun.mjs +1 -1
- package/package.json +1 -1
- package/telegram-plugin/dist/bridge.mjs +30 -3
package/LIESMICH.txt
CHANGED
|
@@ -226,6 +226,16 @@ Im automatisch angebundenen Telegram-Kanal werden ausschließlich /loop, /goal,
|
|
|
226
226
|
sie in der Warteschlange. Andere Slash-Eingaben werden aus Sicherheitsgründen
|
|
227
227
|
als normale Chatnachrichten behandelt.
|
|
228
228
|
|
|
229
|
+
Rechner aus Telegram prüfen
|
|
230
|
+
----------------------------
|
|
231
|
+
Der Telegram-Befehl /status prüft die lokale Verbindung ohne Modellaufruf. Er
|
|
232
|
+
zeigt den Rechnernamen, die installierte BLUN-Version, die Laufzeit der
|
|
233
|
+
Telegram-Brücke, die Verbindung zur Konsole, den aktuellen Zustellweg und die
|
|
234
|
+
Größe der Eingangswarteschlange. Damit bleibt der Zustand auch dann abfragbar,
|
|
235
|
+
wenn die Konsole hängt oder der Modellanbieter ausgelastet ist. Die Ausgabe enthält keine
|
|
236
|
+
Chat-IDs, Dateipfade, Zugangsdaten oder Nachrichteninhalte. Nicht verbundene
|
|
237
|
+
Absender erhalten weiterhin nur die Kopplungsanweisung.
|
|
238
|
+
|
|
229
239
|
Nachweisbare Arbeitsabläufe
|
|
230
240
|
---------------------------
|
|
231
241
|
|
|
@@ -317,6 +327,13 @@ AGENTS.md-Anweisungen und die kompakte Skill-Liste. Lediglich doppelte
|
|
|
317
327
|
Dauerhinweise entfallen. Das spart rund 4.565 geschätzte Prompt-Token je
|
|
318
328
|
vollständiger Anfrage, ohne Gesprächsverlauf oder Werkzeugergebnisse zu kürzen.
|
|
319
329
|
|
|
330
|
+
Korrigierte Markenfarben in der Fußzeile
|
|
331
|
+
-----------------------------------------
|
|
332
|
+
|
|
333
|
+
Das kompakte BLUN-Zeichen unter der Eingabe zeigt die Markenfarben wieder in
|
|
334
|
+
der richtigen Reihenfolge: Der Statuspunkt und UN verwenden die Primärfarbe,
|
|
335
|
+
BL bleibt weiß. Statuswerte, Profilname und Persona bleiben unverändert.
|
|
336
|
+
|
|
320
337
|
Aktualisieren
|
|
321
338
|
-------------
|
|
322
339
|
|
package/README.md
CHANGED
|
@@ -242,6 +242,16 @@ Im automatisch angebundenen Telegram-Kanal werden ausschließlich `/loop`,
|
|
|
242
242
|
beschäftigt, bleiben sie in der Warteschlange. Andere Slash-Eingaben werden aus
|
|
243
243
|
Sicherheitsgründen als normale Chatnachrichten behandelt.
|
|
244
244
|
|
|
245
|
+
### Rechner aus Telegram prüfen
|
|
246
|
+
|
|
247
|
+
Der Telegram-Befehl `/status` prüft die lokale Verbindung ohne Modellaufruf.
|
|
248
|
+
Er zeigt den Rechnernamen, die installierte BLUN-Version, die Laufzeit der
|
|
249
|
+
Telegram-Brücke, die Verbindung zur Konsole, den aktuellen Zustellweg und die
|
|
250
|
+
Größe der Eingangswarteschlange. Damit bleibt der Zustand auch dann abfragbar,
|
|
251
|
+
wenn die Konsole hängt oder der Modellanbieter ausgelastet ist. Die Ausgabe enthält keine
|
|
252
|
+
Chat-IDs, Dateipfade, Zugangsdaten oder Nachrichteninhalte. Nicht verbundene
|
|
253
|
+
Absender erhalten weiterhin nur die Kopplungsanweisung.
|
|
254
|
+
|
|
245
255
|
Beim ersten Start werden das Telegram-Plugin und die mitgelieferten Skills
|
|
246
256
|
eingerichtet. Die Anmeldung erfolgt anschließend in der
|
|
247
257
|
Konsole mit `/login` über den BLUN-OAuth-Server. Das Paket erzeugt keine
|
|
@@ -327,6 +337,13 @@ Seele, die Sprache des Nutzers, den aktuellen Arbeitsordner, geltende
|
|
|
327
337
|
Dauerhinweise entfallen. Das spart rund 4.565 geschätzte Prompt-Token je
|
|
328
338
|
vollständiger Anfrage, ohne Gesprächsverlauf oder Werkzeugergebnisse zu kürzen.
|
|
329
339
|
|
|
340
|
+
## Korrigierte Markenfarben in der Fußzeile
|
|
341
|
+
|
|
342
|
+
Das kompakte BLUN-Zeichen unter der Eingabe zeigt die Markenfarben wieder in
|
|
343
|
+
der richtigen Reihenfolge: Der Statuspunkt und `UN` verwenden die Primärfarbe,
|
|
344
|
+
`BL` bleibt weiß. Die Korrektur betrifft nur die Darstellung; Statuswerte,
|
|
345
|
+
Profilname und Persona bleiben unverändert.
|
|
346
|
+
|
|
330
347
|
## Aktualisieren
|
|
331
348
|
|
|
332
349
|
`blun update`, `king update` und die jeweilige Variante `upgrade` verwenden
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function formatDuration(seconds) {
|
|
4
|
+
const minutes = Math.max(0, Math.floor(Number(seconds) / 60));
|
|
5
|
+
if (minutes < 60) return `${minutes} min`;
|
|
6
|
+
const hours = Math.floor(minutes / 60);
|
|
7
|
+
return `${hours} h ${minutes % 60} min`;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function formatBytes(bytes) {
|
|
11
|
+
const value = Math.max(0, Number(bytes) || 0);
|
|
12
|
+
if (value < 1024) return `${Math.round(value)} B`;
|
|
13
|
+
if (value < 1024 * 1024) return `${(value / 1024).toFixed(1)} KB`;
|
|
14
|
+
return `${(value / (1024 * 1024)).toFixed(1)} MB`;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function buildTelegramRemoteStatus(input) {
|
|
18
|
+
if (!input?.access?.allowFrom?.includes(String(input.senderId))) {
|
|
19
|
+
return 'Nicht verbunden. Sende eine Nachricht, um einen Verbindungscode zu erhalten.';
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const username = input.username ? `@${String(input.username).replace(/^@/u, '')}` : 'verbundener Nutzer';
|
|
23
|
+
const tui = input.tuiFresh
|
|
24
|
+
? `verbunden${Number.isInteger(input.tuiPid) ? ` (PID ${input.tuiPid})` : ''}`
|
|
25
|
+
: 'nicht verbunden';
|
|
26
|
+
const delivery = input.deliveryTarget === 'tui'
|
|
27
|
+
? 'Konsolen-Warteschlange'
|
|
28
|
+
: 'Brücke ohne Konsole';
|
|
29
|
+
return [
|
|
30
|
+
`BLUN-Fernstatus für ${username}`,
|
|
31
|
+
`Rechner: ${input.machineName || 'unbekannt'}`,
|
|
32
|
+
`Version: ${input.version || 'unbekannt'}`,
|
|
33
|
+
`Brücke: aktiv (PID ${input.bridgePid}, ${formatDuration(input.bridgeUptimeSeconds)})`,
|
|
34
|
+
`Konsole: ${tui}`,
|
|
35
|
+
`Zustellung: ${delivery}`,
|
|
36
|
+
`Warteschlange: ${formatBytes(input.queueBytes)}`,
|
|
37
|
+
`Gemessen: ${input.capturedAt}`,
|
|
38
|
+
].join('\n');
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
module.exports = { buildTelegramRemoteStatus, formatBytes, formatDuration };
|
package/blun.mjs
CHANGED
|
@@ -509420,7 +509420,7 @@ var FooterComponent = class {
|
|
|
509420
509420
|
const persona = personaName();
|
|
509421
509421
|
const profileLabel = process.env["BLUN_PROFILE"]?.trim();
|
|
509422
509422
|
const profile = profileLabel !== void 0 && profileLabel.length > 0 && profileLabel.toLowerCase() !== "default" ? chalk.hex(colors.textDim)(profileLabel) + sep : "";
|
|
509423
|
-
const brand = chalk.hex(colors.primary).bold("●
|
|
509423
|
+
const brand = chalk.hex(colors.primary).bold("● ") + chalk.hex(colors.text).bold("BL") + chalk.hex(colors.primary).bold("UN") + sep + profile + (persona !== void 0 ? chalk.hex(colors.text)(persona) + sep : "");
|
|
509424
509424
|
const modelLabel = model;
|
|
509425
509425
|
const modeLabel = uiText(state.permissionMode === "yolo" ? "footer.mode.god" : state.permissionMode === "auto" ? "footer.mode.auto" : "footer.mode.manual");
|
|
509426
509426
|
const modeSuffix = sep + chalk.hex(colors.textDim)(uiText("footer.mode", { mode: modeLabel }));
|
package/package.json
CHANGED
|
@@ -5,6 +5,9 @@ import { randomBytes } from "node:crypto";
|
|
|
5
5
|
import { spawn } from "node:child_process";
|
|
6
6
|
import { Readable, Writable } from "node:stream";
|
|
7
7
|
import { fileURLToPath } from "node:url";
|
|
8
|
+
import { hostname } from "node:os";
|
|
9
|
+
import remoteStatusPolicy from "../../bin/telegram-remote-status-policy.cjs";
|
|
10
|
+
const { buildTelegramRemoteStatus } = remoteStatusPolicy;
|
|
8
11
|
//#region ../../node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs
|
|
9
12
|
const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
|
|
10
13
|
function normalizeWindowsPath(input = "") {
|
|
@@ -4451,7 +4454,7 @@ async function pollWithBackoff(bot, isShuttingDown, onStarted) {
|
|
|
4451
4454
|
},
|
|
4452
4455
|
{
|
|
4453
4456
|
command: "status",
|
|
4454
|
-
description: "Check
|
|
4457
|
+
description: "Check machine and delivery status"
|
|
4455
4458
|
}
|
|
4456
4459
|
], { scope: { type: "all_private_chats" } }).catch(() => {});
|
|
4457
4460
|
} });
|
|
@@ -4672,8 +4675,32 @@ bot.command("status", async (ctx) => {
|
|
|
4672
4675
|
if (gated === null) return;
|
|
4673
4676
|
const { access, senderId } = gated;
|
|
4674
4677
|
if (access.allowFrom.includes(senderId)) {
|
|
4675
|
-
|
|
4676
|
-
|
|
4678
|
+
let version = "unbekannt";
|
|
4679
|
+
let tuiPid;
|
|
4680
|
+
let queueBytes = 0;
|
|
4681
|
+
try {
|
|
4682
|
+
version = JSON.parse(readFileSync(join(dirname(KING_ENTRY), "package.json"), "utf8")).version ?? version;
|
|
4683
|
+
} catch {}
|
|
4684
|
+
try {
|
|
4685
|
+
tuiPid = parseInt(readFileSync(tuiPidFile(), "utf8"), 10);
|
|
4686
|
+
} catch {}
|
|
4687
|
+
try {
|
|
4688
|
+
queueBytes = statSync(tuiInboundQueueFile()).size;
|
|
4689
|
+
} catch {}
|
|
4690
|
+
await ctx.reply(buildTelegramRemoteStatus({
|
|
4691
|
+
access,
|
|
4692
|
+
bridgePid: process.pid,
|
|
4693
|
+
bridgeUptimeSeconds: process.uptime(),
|
|
4694
|
+
capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
4695
|
+
deliveryTarget: deliveryTarget(),
|
|
4696
|
+
machineName: hostname(),
|
|
4697
|
+
queueBytes,
|
|
4698
|
+
senderId,
|
|
4699
|
+
tuiFresh: isTuiLeaseFresh(),
|
|
4700
|
+
tuiPid: Number.isInteger(tuiPid) ? tuiPid : void 0,
|
|
4701
|
+
username: ctx.from?.username,
|
|
4702
|
+
version
|
|
4703
|
+
}));
|
|
4677
4704
|
return;
|
|
4678
4705
|
}
|
|
4679
4706
|
for (const [code, pending] of Object.entries(access.pending)) if (pending.senderId === senderId) {
|