@llblab/pi-telegram 0.52.2 → 0.53.1
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/AGENTS.md +9 -7
- package/BACKLOG.md +1 -18
- package/CHANGELOG.md +15 -0
- package/README.md +7 -11
- package/api/commands.ts +3 -0
- package/dist/api/commands.d.ts +1 -1
- package/dist/lib/activity-verbosity.d.ts +1 -5
- package/dist/lib/activity-verbosity.js +15 -42
- package/dist/lib/activity.d.ts +9 -0
- package/dist/lib/activity.js +39 -10
- package/dist/lib/agent-messages.js +7 -3
- package/dist/lib/bindings.d.ts +43 -5
- package/dist/lib/bindings.js +163 -20
- package/dist/lib/bus-api.d.ts +12 -0
- package/dist/lib/bus-api.js +182 -79
- package/dist/lib/bus-follower.d.ts +111 -31
- package/dist/lib/bus-follower.js +1324 -359
- package/dist/lib/bus-leader.d.ts +41 -91
- package/dist/lib/bus-leader.js +969 -637
- package/dist/lib/bus-transport.js +16 -9
- package/dist/lib/bus.d.ts +215 -18
- package/dist/lib/bus.js +1048 -327
- package/dist/lib/channel-posts.d.ts +5 -0
- package/dist/lib/channel-posts.js +434 -261
- package/dist/lib/command-templates.d.ts +26 -5
- package/dist/lib/command-templates.js +92 -176
- package/dist/lib/commands.d.ts +168 -82
- package/dist/lib/commands.js +1409 -291
- package/dist/lib/config.d.ts +1 -8
- package/dist/lib/config.js +34 -76
- package/dist/lib/delivery.d.ts +2 -2
- package/dist/lib/delivery.js +16 -16
- package/dist/lib/extension.js +639 -171
- package/dist/lib/generative-app-worker.mjs +19 -7
- package/dist/lib/generative-apps.d.ts +0 -5
- package/dist/lib/generative-apps.js +61 -49
- package/dist/lib/inbound.d.ts +5 -0
- package/dist/lib/inbound.js +35 -59
- package/dist/lib/journal.d.ts +33 -3
- package/dist/lib/journal.js +2063 -782
- package/dist/lib/lifecycle.d.ts +2 -6
- package/dist/lib/lifecycle.js +75 -58
- package/dist/lib/locks.d.ts +29 -3
- package/dist/lib/locks.js +289 -108
- package/dist/lib/logging.js +50 -14
- package/dist/lib/media.d.ts +22 -1
- package/dist/lib/media.js +46 -28
- package/dist/lib/menu-model.d.ts +19 -5
- package/dist/lib/menu-model.js +53 -11
- package/dist/lib/menu-queue.d.ts +5 -4
- package/dist/lib/menu-queue.js +45 -63
- package/dist/lib/menu-settings.d.ts +5 -4
- package/dist/lib/menu-settings.js +114 -78
- package/dist/lib/menu-status.d.ts +1 -1
- package/dist/lib/menu-status.js +8 -25
- package/dist/lib/menu-thinking.d.ts +6 -1
- package/dist/lib/menu-thinking.js +14 -21
- package/dist/lib/menu.d.ts +8 -61
- package/dist/lib/menu.js +92 -164
- package/dist/lib/model.d.ts +1 -1
- package/dist/lib/model.js +2 -16
- package/dist/lib/outbound-attachments.d.ts +6 -27
- package/dist/lib/outbound-attachments.js +45 -38
- package/dist/lib/outbound-buttons.js +22 -16
- package/dist/lib/outbound-markup.d.ts +0 -2
- package/dist/lib/outbound-markup.js +51 -64
- package/dist/lib/outbound-voice.js +6 -3
- package/dist/lib/outbound.d.ts +6 -6
- package/dist/lib/outbound.js +65 -51
- package/dist/lib/ownership.js +6 -2
- package/dist/lib/paths.d.ts +5 -0
- package/dist/lib/paths.js +37 -21
- package/dist/lib/pi.d.ts +2 -0
- package/dist/lib/pi.js +8 -1
- package/dist/lib/polling.d.ts +21 -37
- package/dist/lib/polling.js +59 -50
- package/dist/lib/preview.js +39 -19
- package/dist/lib/process-identity.d.ts +24 -0
- package/dist/lib/process-identity.js +133 -0
- package/dist/lib/prompts.js +2 -7
- package/dist/lib/queue.d.ts +14 -16
- package/dist/lib/queue.js +252 -127
- package/dist/lib/recovery.d.ts +2 -83
- package/dist/lib/recovery.js +20 -274
- package/dist/lib/replies.d.ts +16 -24
- package/dist/lib/replies.js +99 -116
- package/dist/lib/routing.d.ts +120 -7
- package/dist/lib/routing.js +4667 -1152
- package/dist/lib/runtime.d.ts +1 -11
- package/dist/lib/sections.d.ts +4 -29
- package/dist/lib/sections.js +7 -20
- package/dist/lib/skills.js +4 -3
- package/dist/lib/status.js +86 -57
- package/dist/lib/sync.d.ts +1 -3
- package/dist/lib/sync.js +67 -43
- package/dist/lib/target.d.ts +4 -0
- package/dist/lib/target.js +18 -0
- package/dist/lib/telegram-api.d.ts +18 -13
- package/dist/lib/telegram-api.js +148 -53
- package/dist/lib/text-groups.js +4 -39
- package/dist/lib/thread-cleanup-manager.d.ts +6 -27
- package/dist/lib/thread-cleanup-manager.js +369 -186
- package/dist/lib/thread-display.d.ts +1 -2
- package/dist/lib/thread-display.js +58 -38
- package/dist/lib/thread-naming.d.ts +28 -8
- package/dist/lib/thread-naming.js +175 -66
- package/dist/lib/thread-reconciler.d.ts +42 -16
- package/dist/lib/thread-reconciler.js +90 -50
- package/dist/lib/threads.d.ts +82 -20
- package/dist/lib/threads.js +2247 -855
- package/dist/lib/time-injection.js +1 -2
- package/dist/lib/turns.js +1 -19
- package/dist/lib/updates.d.ts +169 -80
- package/dist/lib/updates.js +2418 -641
- package/dist/lib/voice.d.ts +7 -22
- package/dist/lib/voice.js +7 -22
- package/dist/lib/wire.js +1 -1
- package/dist/lib/workspace-admission.d.ts +3 -1
- package/dist/lib/workspace-admission.js +425 -211
- package/dist/lib/workspace-identity.js +8 -13
- package/dist/lib/workspace-retirement.d.ts +1 -1
- package/dist/lib/workspace-retirement.js +328 -140
- package/dist/lib/workspace-slots.js +8 -4
- package/dist/package.json +1 -1
- package/docs/architecture.md +31 -29
- package/docs/inbound.md +1 -1
- package/docs/multi-instance-bus.md +15 -3
- package/docs/outbound.md +1 -1
- package/docs/public-api.md +29 -1
- package/docs/ui-style.md +25 -8
- package/lib/activity-verbosity.ts +59 -82
- package/lib/activity.ts +146 -102
- package/lib/agent-messages.ts +12 -5
- package/lib/bindings.ts +389 -82
- package/lib/bus-api.ts +263 -102
- package/lib/bus-follower.ts +2440 -601
- package/lib/bus-leader.ts +2209 -1290
- package/lib/bus-transport.ts +46 -12
- package/lib/bus.ts +1673 -444
- package/lib/channel-posts.ts +848 -327
- package/lib/command-templates.ts +152 -265
- package/lib/commands.ts +2398 -555
- package/lib/config.ts +177 -170
- package/lib/delivery.ts +41 -29
- package/lib/extension.ts +1206 -433
- package/lib/generative-app-worker.mjs +19 -7
- package/lib/generative-apps.ts +324 -211
- package/lib/inbound.ts +95 -97
- package/lib/journal.ts +5311 -1763
- package/lib/keyboard.ts +1 -3
- package/lib/lifecycle.ts +128 -78
- package/lib/locks.ts +677 -203
- package/lib/logging.ts +147 -58
- package/lib/media.ts +82 -43
- package/lib/menu-model.ts +85 -18
- package/lib/menu-queue.ts +88 -129
- package/lib/menu-settings.ts +260 -155
- package/lib/menu-status.ts +20 -60
- package/lib/menu-thinking.ts +41 -56
- package/lib/menu.ts +112 -285
- package/lib/model.ts +8 -22
- package/lib/outbound-attachments.ts +156 -125
- package/lib/outbound-buttons.ts +76 -49
- package/lib/outbound-markup.ts +96 -94
- package/lib/outbound-voice.ts +33 -27
- package/lib/outbound.ts +128 -125
- package/lib/ownership.ts +19 -10
- package/lib/paths.ts +148 -49
- package/lib/pi.ts +35 -15
- package/lib/polling.ts +144 -147
- package/lib/preview.ts +93 -40
- package/lib/process-identity.ts +164 -0
- package/lib/prompts.ts +4 -11
- package/lib/queue.ts +516 -301
- package/lib/recovery.ts +50 -454
- package/lib/rendering.ts +1 -3
- package/lib/replies.ts +248 -209
- package/lib/routing.ts +8509 -2186
- package/lib/runtime.ts +1 -12
- package/lib/sections.ts +24 -89
- package/lib/setup.ts +1 -3
- package/lib/skills.ts +9 -4
- package/lib/status.ts +215 -110
- package/lib/sync.ts +448 -361
- package/lib/target.ts +22 -3
- package/lib/telegram-api.ts +302 -127
- package/lib/text-groups.ts +5 -39
- package/lib/thread-cleanup-manager.ts +833 -331
- package/lib/thread-display.ts +213 -97
- package/lib/thread-naming.ts +232 -87
- package/lib/thread-reconciler.ts +155 -72
- package/lib/threads.ts +5318 -1845
- package/lib/time-injection.ts +1 -4
- package/lib/turns.ts +15 -28
- package/lib/updates.ts +5184 -1612
- package/lib/voice.ts +7 -35
- package/lib/wire.ts +1 -1
- package/lib/workspace-admission.ts +996 -416
- package/lib/workspace-identity.ts +14 -17
- package/lib/workspace-retirement.ts +878 -376
- package/lib/workspace-slots.ts +22 -13
- package/package.json +1 -1
- package/scripts/check-downgrade.mjs +0 -472
- package/scripts/measure-workspace.mjs +0 -108
package/lib/runtime.ts
CHANGED
|
@@ -558,19 +558,8 @@ export interface TelegramPromptDispatchLifecycleDeps<
|
|
|
558
558
|
|
|
559
559
|
export interface TelegramPromptDispatchRuntimeDeps<
|
|
560
560
|
TContext,
|
|
561
|
-
> extends
|
|
561
|
+
> extends TelegramTypingLoopStarterDeps<TContext> {
|
|
562
562
|
lifecycle: TelegramPromptDispatchLifecycleDeps<TContext>["lifecycle"];
|
|
563
|
-
typing: TelegramRuntimeTypingPort;
|
|
564
|
-
getDefaultChatId: () => number | undefined;
|
|
565
|
-
sendTypingAction: (
|
|
566
|
-
chatId: number,
|
|
567
|
-
options?: { message_thread_id?: number },
|
|
568
|
-
) => Promise<unknown>;
|
|
569
|
-
updateStatus: (ctx: TContext, error?: string) => void;
|
|
570
|
-
isContextActive?: (ctx: TContext) => boolean;
|
|
571
|
-
isTransportAvailable?: () => boolean;
|
|
572
|
-
getTransportAuthority?: () => string | number | undefined;
|
|
573
|
-
intervalMs?: number;
|
|
574
563
|
}
|
|
575
564
|
|
|
576
565
|
export interface TelegramPromptDispatchRuntime<TContext> {
|
package/lib/sections.ts
CHANGED
|
@@ -12,8 +12,6 @@ import type { TelegramInputRichMessage } from "./telegram-api.ts";
|
|
|
12
12
|
|
|
13
13
|
const SECTION_REGISTRY_KEY = "__piTelegramSectionRegistry__";
|
|
14
14
|
|
|
15
|
-
// --- Core Types ---
|
|
16
|
-
|
|
17
15
|
/** @internal */
|
|
18
16
|
export type TelegramSectionId = string;
|
|
19
17
|
|
|
@@ -74,20 +72,9 @@ export interface TelegramSectionContext {
|
|
|
74
72
|
deleteMessage(): Promise<void>;
|
|
75
73
|
}
|
|
76
74
|
|
|
77
|
-
export interface TelegramSectionCallbackContext {
|
|
78
|
-
sectionId: string;
|
|
79
|
-
chatId: number;
|
|
80
|
-
messageId?: number;
|
|
75
|
+
export interface TelegramSectionCallbackContext extends TelegramSectionContext {
|
|
81
76
|
action: string;
|
|
82
77
|
payload: string;
|
|
83
|
-
answerCallback(text?: string): Promise<void>;
|
|
84
|
-
edit(view: TelegramSectionView): Promise<void>;
|
|
85
|
-
open(view: TelegramSectionView): Promise<void>;
|
|
86
|
-
openRich(message: TelegramInputRichMessage): Promise<void>;
|
|
87
|
-
enqueuePrompt(prompt: string): Promise<void>;
|
|
88
|
-
callbackData(action: string, payload?: string): string;
|
|
89
|
-
/** Delete the message that triggered this callback (dialog cleanup) */
|
|
90
|
-
deleteMessage(): Promise<void>;
|
|
91
78
|
}
|
|
92
79
|
|
|
93
80
|
/** @internal */
|
|
@@ -211,11 +198,13 @@ function buildTelegramSectionContext(
|
|
|
211
198
|
)
|
|
212
199
|
.then(() => {}),
|
|
213
200
|
openRich: (message) =>
|
|
214
|
-
deps
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
201
|
+
deps
|
|
202
|
+
.sendRichMessage(
|
|
203
|
+
chatId,
|
|
204
|
+
message,
|
|
205
|
+
deps.target ? { target: deps.target } : undefined,
|
|
206
|
+
)
|
|
207
|
+
.then(() => {}),
|
|
219
208
|
enqueuePrompt: deps.enqueuePrompt,
|
|
220
209
|
callbackData: (action, payload) =>
|
|
221
210
|
buildTelegramSectionCallbackData(token, action, payload),
|
|
@@ -239,45 +228,18 @@ function buildTelegramSectionCallbackContext(
|
|
|
239
228
|
backLabel = "⬆️ Back",
|
|
240
229
|
): TelegramSectionCallbackContext {
|
|
241
230
|
return {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
231
|
+
...buildTelegramSectionContext(
|
|
232
|
+
sectionId,
|
|
233
|
+
token,
|
|
234
|
+
chatId,
|
|
235
|
+
messageId,
|
|
236
|
+
callbackQueryId,
|
|
237
|
+
deps,
|
|
238
|
+
backCallback,
|
|
239
|
+
backLabel,
|
|
240
|
+
),
|
|
245
241
|
action,
|
|
246
242
|
payload,
|
|
247
|
-
answerCallback: (text) => deps.answerCallbackQuery(callbackQueryId, text),
|
|
248
|
-
edit: (view) =>
|
|
249
|
-
messageId !== undefined
|
|
250
|
-
? deps.editInteractiveMessage(
|
|
251
|
-
chatId,
|
|
252
|
-
messageId,
|
|
253
|
-
view.text,
|
|
254
|
-
view.parseMode ?? "html",
|
|
255
|
-
prependBackRow(view.replyMarkup, backCallback, backLabel),
|
|
256
|
-
)
|
|
257
|
-
: Promise.resolve(),
|
|
258
|
-
open: (view) =>
|
|
259
|
-
deps
|
|
260
|
-
.sendInteractiveMessage(
|
|
261
|
-
chatId,
|
|
262
|
-
view.text,
|
|
263
|
-
view.parseMode ?? "html",
|
|
264
|
-
view.replyMarkup ?? { inline_keyboard: [] },
|
|
265
|
-
deps.target ? { target: deps.target } : undefined,
|
|
266
|
-
)
|
|
267
|
-
.then(() => {}),
|
|
268
|
-
openRich: (message) =>
|
|
269
|
-
deps.sendRichMessage(
|
|
270
|
-
chatId,
|
|
271
|
-
message,
|
|
272
|
-
deps.target ? { target: deps.target } : undefined,
|
|
273
|
-
).then(() => {}),
|
|
274
|
-
enqueuePrompt: deps.enqueuePrompt,
|
|
275
|
-
callbackData: (action, payload) =>
|
|
276
|
-
buildTelegramSectionCallbackData(token, action, payload),
|
|
277
|
-
deleteMessage: () =>
|
|
278
|
-
messageId !== undefined
|
|
279
|
-
? deps.deleteMessage(chatId, messageId)
|
|
280
|
-
: Promise.resolve(),
|
|
281
243
|
};
|
|
282
244
|
}
|
|
283
245
|
|
|
@@ -528,46 +490,19 @@ export function parseTelegramSectionCallback(
|
|
|
528
490
|
};
|
|
529
491
|
}
|
|
530
492
|
|
|
531
|
-
/** @internal */
|
|
532
|
-
export interface TelegramSectionCallbackHandlerDeps {
|
|
533
|
-
answerCallbackQuery: (id: string, text?: string) => Promise<void>;
|
|
534
|
-
target?: TelegramSectionTarget;
|
|
535
|
-
editInteractiveMessage: (
|
|
536
|
-
chatId: number,
|
|
537
|
-
messageId: number,
|
|
538
|
-
text: string,
|
|
539
|
-
mode: "markdown" | "html" | "plain",
|
|
540
|
-
replyMarkup: TelegramInlineKeyboardMarkup,
|
|
541
|
-
) => Promise<void>;
|
|
542
|
-
sendInteractiveMessage: (
|
|
543
|
-
chatId: number,
|
|
544
|
-
text: string,
|
|
545
|
-
mode: "markdown" | "html" | "plain",
|
|
546
|
-
replyMarkup: TelegramInlineKeyboardMarkup,
|
|
547
|
-
options?: { target?: TelegramSectionTarget },
|
|
548
|
-
) => Promise<number | undefined>;
|
|
549
|
-
sendRichMessage: (
|
|
550
|
-
chatId: number,
|
|
551
|
-
message: TelegramInputRichMessage,
|
|
552
|
-
options?: { target?: TelegramSectionTarget },
|
|
553
|
-
) => Promise<number | undefined>;
|
|
554
|
-
enqueuePrompt: (prompt: string) => Promise<void>;
|
|
555
|
-
deleteMessage: (chatId: number, messageId: number) => Promise<void>;
|
|
556
|
-
}
|
|
557
|
-
|
|
558
493
|
export async function handleTelegramSectionOpen(
|
|
559
494
|
registry: TelegramSectionRegistry,
|
|
560
495
|
token: TelegramSectionToken,
|
|
561
496
|
chatId: number,
|
|
562
497
|
messageId: number,
|
|
563
498
|
callbackQueryId: string,
|
|
564
|
-
deps:
|
|
499
|
+
deps: TelegramSectionRuntimeDeps,
|
|
565
500
|
): Promise<boolean> {
|
|
566
501
|
const section = registry.getByToken(token);
|
|
567
502
|
if (!section) {
|
|
568
503
|
await deps.answerCallbackQuery(
|
|
569
504
|
callbackQueryId,
|
|
570
|
-
"This section is no longer available
|
|
505
|
+
"This section is no longer available",
|
|
571
506
|
);
|
|
572
507
|
return true;
|
|
573
508
|
}
|
|
@@ -618,13 +553,13 @@ export async function handleTelegramSectionCallback(
|
|
|
618
553
|
chatId: number,
|
|
619
554
|
messageId: number,
|
|
620
555
|
callbackQueryId: string,
|
|
621
|
-
deps:
|
|
556
|
+
deps: TelegramSectionRuntimeDeps,
|
|
622
557
|
): Promise<boolean> {
|
|
623
558
|
const section = registry.getByToken(token);
|
|
624
559
|
if (!section) {
|
|
625
560
|
await deps.answerCallbackQuery(
|
|
626
561
|
callbackQueryId,
|
|
627
|
-
"This section is no longer available
|
|
562
|
+
"This section is no longer available",
|
|
628
563
|
);
|
|
629
564
|
return true;
|
|
630
565
|
}
|
|
@@ -687,13 +622,13 @@ export async function handleTelegramSectionSettingsOpen(
|
|
|
687
622
|
chatId: number,
|
|
688
623
|
messageId: number,
|
|
689
624
|
callbackQueryId: string,
|
|
690
|
-
deps:
|
|
625
|
+
deps: TelegramSectionRuntimeDeps,
|
|
691
626
|
): Promise<boolean> {
|
|
692
627
|
const section = registry.getByToken(token);
|
|
693
628
|
if (!section || !section.registration.settings) {
|
|
694
629
|
await deps.answerCallbackQuery(
|
|
695
630
|
callbackQueryId,
|
|
696
|
-
"This section is no longer available
|
|
631
|
+
"This section is no longer available",
|
|
697
632
|
);
|
|
698
633
|
return true;
|
|
699
634
|
}
|
package/lib/setup.ts
CHANGED
|
@@ -105,9 +105,7 @@ function resolveSubmittedTelegramBotToken(value: string): string | undefined {
|
|
|
105
105
|
return trimmed;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
function describeSubmittedTelegramBotToken(
|
|
109
|
-
value: string,
|
|
110
|
-
): string | undefined {
|
|
108
|
+
function describeSubmittedTelegramBotToken(value: string): string | undefined {
|
|
111
109
|
return value.trim().startsWith("$")
|
|
112
110
|
? "Telegram bot token environment reference is unavailable in this setup environment."
|
|
113
111
|
: undefined;
|
package/lib/skills.ts
CHANGED
|
@@ -8,8 +8,8 @@ import { existsSync } from "node:fs";
|
|
|
8
8
|
import { basename, dirname, join, resolve } from "node:path";
|
|
9
9
|
import { fileURLToPath } from "node:url";
|
|
10
10
|
|
|
11
|
-
import type { ExtensionAPI } from "./pi.ts";
|
|
12
11
|
import { resolveAgentDir } from "./paths.ts";
|
|
12
|
+
import type { ExtensionAPI } from "./pi.ts";
|
|
13
13
|
|
|
14
14
|
const TELEGRAM_SKILLS_MODULE_PATH = fileURLToPath(import.meta.url);
|
|
15
15
|
|
|
@@ -18,7 +18,10 @@ export function getTelegramExtensionPackageRoot(modulePath: string): string {
|
|
|
18
18
|
while (true) {
|
|
19
19
|
if (existsSync(join(current, "package.json"))) {
|
|
20
20
|
const parent = dirname(current);
|
|
21
|
-
if (
|
|
21
|
+
if (
|
|
22
|
+
basename(current) === "dist" &&
|
|
23
|
+
existsSync(join(parent, "package.json"))
|
|
24
|
+
) {
|
|
22
25
|
return parent;
|
|
23
26
|
}
|
|
24
27
|
return current;
|
|
@@ -41,8 +44,10 @@ export function isRawTelegramExtensionCheckout(
|
|
|
41
44
|
const packageRoot = resolve(getTelegramExtensionPackageRoot(modulePath));
|
|
42
45
|
const agentDir = resolve(options.agentDir ?? resolveAgentDir());
|
|
43
46
|
const cwd = resolve(options.cwd ?? process.cwd());
|
|
44
|
-
return
|
|
45
|
-
dirname(packageRoot) === join(
|
|
47
|
+
return (
|
|
48
|
+
dirname(packageRoot) === join(agentDir, "extensions") ||
|
|
49
|
+
dirname(packageRoot) === join(cwd, ".pi", "extensions")
|
|
50
|
+
);
|
|
46
51
|
}
|
|
47
52
|
|
|
48
53
|
export const TELEGRAM_SKILLS_PATH = join(
|