@llblab/pi-telegram 0.52.2 → 0.53.0
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 +11 -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 +61 -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 +249 -126
- 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 +125 -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 +511 -300
- 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/menu-status.ts
CHANGED
|
@@ -5,12 +5,11 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { formatTelegramCommandEmojiPrefix } from "./commands.ts";
|
|
8
|
+
import { refuseUnavailableTelegramThinkingControls } from "./menu-thinking.ts";
|
|
8
9
|
import {
|
|
9
|
-
|
|
10
|
-
type TelegramSectionRegistry,
|
|
11
|
-
} from "./sections.ts";
|
|
12
|
-
import {
|
|
10
|
+
editTelegramMenuMessage,
|
|
13
11
|
formatStatusButtonLabel,
|
|
12
|
+
sendTelegramMenuMessage,
|
|
14
13
|
type TelegramMenuMessageRuntimeDeps,
|
|
15
14
|
type TelegramMenuRenderPayload,
|
|
16
15
|
type TelegramModelMenuState,
|
|
@@ -21,6 +20,10 @@ import {
|
|
|
21
20
|
type MenuModel,
|
|
22
21
|
type ThinkingLevel,
|
|
23
22
|
} from "./model.ts";
|
|
23
|
+
import {
|
|
24
|
+
getTelegramSectionMainMenuRows,
|
|
25
|
+
type TelegramSectionRegistry,
|
|
26
|
+
} from "./sections.ts";
|
|
24
27
|
|
|
25
28
|
export interface TelegramStatusMenuCallbackDeps {
|
|
26
29
|
updateModelMenuMessage: () => Promise<void>;
|
|
@@ -60,46 +63,6 @@ function isTelegramStatusMenuCallbackAction(
|
|
|
60
63
|
return data === `menu:${action}` || data === `status:${action}`;
|
|
61
64
|
}
|
|
62
65
|
|
|
63
|
-
function applyTelegramMenuRenderPayload(
|
|
64
|
-
state: TelegramModelMenuState,
|
|
65
|
-
payload: TelegramMenuRenderPayload,
|
|
66
|
-
): TelegramMenuRenderPayload {
|
|
67
|
-
state.mode = payload.nextMode;
|
|
68
|
-
return payload;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
async function editTelegramMenuMessage(
|
|
72
|
-
state: TelegramModelMenuState,
|
|
73
|
-
payload: TelegramMenuRenderPayload,
|
|
74
|
-
deps: TelegramMenuMessageRuntimeDeps,
|
|
75
|
-
): Promise<void> {
|
|
76
|
-
const appliedPayload = applyTelegramMenuRenderPayload(state, payload);
|
|
77
|
-
await deps.editInteractiveMessage(
|
|
78
|
-
state.chatId,
|
|
79
|
-
state.messageId,
|
|
80
|
-
appliedPayload.text,
|
|
81
|
-
appliedPayload.mode,
|
|
82
|
-
appliedPayload.replyMarkup,
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function sendTelegramMenuMessage(
|
|
87
|
-
state: TelegramModelMenuState,
|
|
88
|
-
payload: TelegramMenuRenderPayload,
|
|
89
|
-
deps: TelegramMenuMessageRuntimeDeps,
|
|
90
|
-
): Promise<number | undefined> {
|
|
91
|
-
const appliedPayload = applyTelegramMenuRenderPayload(state, payload);
|
|
92
|
-
return deps.sendInteractiveMessage(
|
|
93
|
-
state.chatId,
|
|
94
|
-
appliedPayload.text,
|
|
95
|
-
appliedPayload.mode,
|
|
96
|
-
appliedPayload.replyMarkup,
|
|
97
|
-
state.threadId !== undefined
|
|
98
|
-
? { target: { chatId: state.chatId, threadId: state.threadId } }
|
|
99
|
-
: undefined,
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
66
|
export async function openTelegramStatusMenu<
|
|
104
67
|
TModel extends MenuModel = MenuModel,
|
|
105
68
|
>(deps: TelegramStatusMenuOpenDeps<TModel>): Promise<void> {
|
|
@@ -135,20 +98,14 @@ export async function handleTelegramStatusMenuCallbackAction(
|
|
|
135
98
|
return true;
|
|
136
99
|
}
|
|
137
100
|
if (!isTelegramStatusMenuCallbackAction(data, "thinking")) return false;
|
|
138
|
-
if (
|
|
139
|
-
await
|
|
140
|
-
callbackQueryId,
|
|
141
|
-
"Thinking controls are disabled during voice replies.",
|
|
142
|
-
);
|
|
143
|
-
return true;
|
|
144
|
-
}
|
|
145
|
-
if (!activeModel?.reasoning) {
|
|
146
|
-
await deps.answerCallbackQuery(
|
|
101
|
+
if (
|
|
102
|
+
await refuseUnavailableTelegramThinkingControls(
|
|
147
103
|
callbackQueryId,
|
|
148
|
-
|
|
149
|
-
|
|
104
|
+
activeModel,
|
|
105
|
+
deps,
|
|
106
|
+
)
|
|
107
|
+
)
|
|
150
108
|
return true;
|
|
151
|
-
}
|
|
152
109
|
await deps.updateThinkingMenuMessage();
|
|
153
110
|
await deps.answerCallbackQuery(callbackQueryId);
|
|
154
111
|
return true;
|
|
@@ -189,10 +146,13 @@ export function buildStatusReplyMarkup(
|
|
|
189
146
|
callback_data: "menu:queue",
|
|
190
147
|
},
|
|
191
148
|
]);
|
|
192
|
-
if (pendingCancellationCount > 0)
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
149
|
+
if (pendingCancellationCount > 0)
|
|
150
|
+
rows.push([
|
|
151
|
+
{
|
|
152
|
+
text: `❌ Pending cancellations: ${pendingCancellationCount}`,
|
|
153
|
+
callback_data: "reroutecancel:review:open",
|
|
154
|
+
},
|
|
155
|
+
]);
|
|
196
156
|
if (sectionRegistry) {
|
|
197
157
|
const sectionRows = getTelegramSectionMainMenuRows(sectionRegistry);
|
|
198
158
|
for (const row of sectionRows) {
|
package/lib/menu-thinking.ts
CHANGED
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
* Owns thinking-menu text, reply markup, callback handling, and thinking-menu message rendering
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
import {
|
|
8
|
+
editTelegramMenuMessage,
|
|
9
|
+
sendTelegramMenuMessage,
|
|
10
|
+
type TelegramMenuMessageRuntimeDeps,
|
|
11
|
+
type TelegramMenuRenderPayload,
|
|
12
|
+
type TelegramModelMenuState,
|
|
13
|
+
type TelegramReplyMarkup,
|
|
12
14
|
} from "./menu-model.ts";
|
|
13
15
|
import {
|
|
14
16
|
isThinkingLevel,
|
|
@@ -45,72 +47,55 @@ function parseTelegramThinkingMenuCallbackAction(
|
|
|
45
47
|
return { kind: "thinking:set", level: data.slice("thinking:set:".length) };
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
payload: TelegramMenuRenderPayload,
|
|
51
|
-
): TelegramMenuRenderPayload {
|
|
52
|
-
state.mode = payload.nextMode;
|
|
53
|
-
return payload;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
async function editTelegramMenuMessage(
|
|
57
|
-
state: TelegramModelMenuState,
|
|
58
|
-
payload: TelegramMenuRenderPayload,
|
|
59
|
-
deps: TelegramMenuMessageRuntimeDeps,
|
|
60
|
-
): Promise<void> {
|
|
61
|
-
const appliedPayload = applyTelegramMenuRenderPayload(state, payload);
|
|
62
|
-
await deps.editInteractiveMessage(
|
|
63
|
-
state.chatId,
|
|
64
|
-
state.messageId,
|
|
65
|
-
appliedPayload.text,
|
|
66
|
-
appliedPayload.mode,
|
|
67
|
-
appliedPayload.replyMarkup,
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function sendTelegramMenuMessage(
|
|
72
|
-
state: TelegramModelMenuState,
|
|
73
|
-
payload: TelegramMenuRenderPayload,
|
|
74
|
-
deps: TelegramMenuMessageRuntimeDeps,
|
|
75
|
-
): Promise<number | undefined> {
|
|
76
|
-
const appliedPayload = applyTelegramMenuRenderPayload(state, payload);
|
|
77
|
-
return deps.sendInteractiveMessage(
|
|
78
|
-
state.chatId,
|
|
79
|
-
appliedPayload.text,
|
|
80
|
-
appliedPayload.mode,
|
|
81
|
-
appliedPayload.replyMarkup,
|
|
82
|
-
state.threadId !== undefined
|
|
83
|
-
? { target: { chatId: state.chatId, threadId: state.threadId } }
|
|
84
|
-
: undefined,
|
|
85
|
-
);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export async function handleTelegramThinkingMenuCallbackAction(
|
|
50
|
+
/** Answers and returns true when voice replies or a non-reasoning model disable thinking controls. */
|
|
51
|
+
export async function refuseUnavailableTelegramThinkingControls(
|
|
89
52
|
callbackQueryId: string,
|
|
90
|
-
data: string | undefined,
|
|
91
53
|
activeModel: MenuModel | undefined,
|
|
92
|
-
deps:
|
|
54
|
+
deps: {
|
|
55
|
+
answerCallbackQuery: (
|
|
56
|
+
callbackQueryId: string,
|
|
57
|
+
text?: string,
|
|
58
|
+
) => Promise<void>;
|
|
59
|
+
isVoiceReplyActive?: () => boolean;
|
|
60
|
+
},
|
|
93
61
|
): Promise<boolean> {
|
|
94
|
-
const action = parseTelegramThinkingMenuCallbackAction(data);
|
|
95
|
-
if (!action) return false;
|
|
96
|
-
if (!isThinkingLevel(action.level)) {
|
|
97
|
-
await deps.answerCallbackQuery(callbackQueryId, "Invalid thinking level.");
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
62
|
if (deps.isVoiceReplyActive?.()) {
|
|
101
63
|
await deps.answerCallbackQuery(
|
|
102
64
|
callbackQueryId,
|
|
103
|
-
"Thinking controls are disabled during voice replies
|
|
65
|
+
"Thinking controls are disabled during voice replies",
|
|
104
66
|
);
|
|
105
67
|
return true;
|
|
106
68
|
}
|
|
107
69
|
if (!activeModel?.reasoning) {
|
|
108
70
|
await deps.answerCallbackQuery(
|
|
109
71
|
callbackQueryId,
|
|
110
|
-
"This model has no reasoning controls
|
|
72
|
+
"This model has no reasoning controls",
|
|
111
73
|
);
|
|
112
74
|
return true;
|
|
113
75
|
}
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export async function handleTelegramThinkingMenuCallbackAction(
|
|
80
|
+
callbackQueryId: string,
|
|
81
|
+
data: string | undefined,
|
|
82
|
+
activeModel: MenuModel | undefined,
|
|
83
|
+
deps: TelegramThinkingMenuCallbackDeps,
|
|
84
|
+
): Promise<boolean> {
|
|
85
|
+
const action = parseTelegramThinkingMenuCallbackAction(data);
|
|
86
|
+
if (!action) return false;
|
|
87
|
+
if (!isThinkingLevel(action.level)) {
|
|
88
|
+
await deps.answerCallbackQuery(callbackQueryId, "Invalid thinking level");
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
if (
|
|
92
|
+
await refuseUnavailableTelegramThinkingControls(
|
|
93
|
+
callbackQueryId,
|
|
94
|
+
activeModel,
|
|
95
|
+
deps,
|
|
96
|
+
)
|
|
97
|
+
)
|
|
98
|
+
return true;
|
|
114
99
|
deps.setThinkingLevel(action.level);
|
|
115
100
|
await deps.updateThinkingMenuMessage();
|
|
116
101
|
await deps.answerCallbackQuery(
|