@llblab/pi-telegram 0.45.11 → 0.47.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.
Files changed (204) hide show
  1. package/BACKLOG.md +5 -1
  2. package/CHANGELOG.md +12 -0
  3. package/README.md +6 -6
  4. package/dist/api/activity.d.ts +6 -0
  5. package/dist/api/activity.js +6 -0
  6. package/dist/api/commands.d.ts +6 -0
  7. package/dist/api/commands.js +6 -0
  8. package/dist/api/delivery.d.ts +6 -0
  9. package/dist/api/delivery.js +6 -0
  10. package/dist/api/inbound.d.ts +6 -0
  11. package/dist/api/inbound.js +6 -0
  12. package/dist/api/keyboard.d.ts +6 -0
  13. package/dist/api/keyboard.js +6 -0
  14. package/dist/api/outbound.d.ts +6 -0
  15. package/dist/api/outbound.js +6 -0
  16. package/dist/api/sections.d.ts +7 -0
  17. package/dist/api/sections.js +6 -0
  18. package/dist/api/status.d.ts +6 -0
  19. package/dist/api/status.js +6 -0
  20. package/dist/api/updates.d.ts +6 -0
  21. package/dist/api/updates.js +6 -0
  22. package/dist/api/voice.d.ts +6 -0
  23. package/dist/api/voice.js +6 -0
  24. package/dist/index.d.ts +6 -0
  25. package/dist/index.js +6 -0
  26. package/dist/lib/activity-verbosity.d.ts +52 -0
  27. package/dist/lib/activity-verbosity.js +596 -0
  28. package/dist/lib/activity.d.ts +220 -0
  29. package/dist/lib/activity.js +574 -0
  30. package/dist/lib/agent-messages.d.ts +28 -0
  31. package/dist/lib/agent-messages.js +86 -0
  32. package/dist/lib/bindings.d.ts +250 -0
  33. package/dist/lib/bindings.js +936 -0
  34. package/dist/lib/bus-api.d.ts +18 -0
  35. package/dist/lib/bus-api.js +254 -0
  36. package/dist/lib/bus-follower.d.ts +464 -0
  37. package/dist/lib/bus-follower.js +1686 -0
  38. package/dist/lib/bus-leader.d.ts +292 -0
  39. package/dist/lib/bus-leader.js +2242 -0
  40. package/dist/lib/bus-transport.d.ts +64 -0
  41. package/dist/lib/bus-transport.js +140 -0
  42. package/dist/lib/bus.d.ts +518 -0
  43. package/dist/lib/bus.js +2055 -0
  44. package/dist/lib/channel-posts.d.ts +170 -0
  45. package/dist/lib/channel-posts.js +611 -0
  46. package/dist/lib/command-templates.d.ts +70 -0
  47. package/dist/lib/command-templates.js +744 -0
  48. package/dist/lib/commands.d.ts +541 -0
  49. package/dist/lib/commands.js +1155 -0
  50. package/dist/lib/config.d.ts +252 -0
  51. package/dist/lib/config.js +889 -0
  52. package/dist/lib/delivery.d.ts +163 -0
  53. package/dist/lib/delivery.js +542 -0
  54. package/dist/lib/extension.d.ts +7 -0
  55. package/dist/lib/extension.js +1608 -0
  56. package/dist/lib/generative-app-worker.mjs +104 -0
  57. package/dist/lib/generative-apps.d.ts +212 -0
  58. package/dist/lib/generative-apps.js +1006 -0
  59. package/dist/lib/inbound.d.ts +91 -0
  60. package/dist/lib/inbound.js +502 -0
  61. package/dist/lib/journal.d.ts +665 -0
  62. package/dist/lib/journal.js +3701 -0
  63. package/dist/lib/keyboard.d.ts +23 -0
  64. package/dist/lib/keyboard.js +37 -0
  65. package/dist/lib/lifecycle.d.ts +157 -0
  66. package/dist/lib/lifecycle.js +395 -0
  67. package/dist/lib/locks.d.ts +164 -0
  68. package/dist/lib/locks.js +1208 -0
  69. package/dist/lib/logging.d.ts +50 -0
  70. package/dist/lib/logging.js +274 -0
  71. package/dist/lib/media.d.ts +181 -0
  72. package/dist/lib/media.js +602 -0
  73. package/dist/lib/menu-model.d.ts +217 -0
  74. package/dist/lib/menu-model.js +663 -0
  75. package/dist/lib/menu-queue.d.ts +37 -0
  76. package/dist/lib/menu-queue.js +408 -0
  77. package/dist/lib/menu-settings.d.ts +116 -0
  78. package/dist/lib/menu-settings.js +595 -0
  79. package/dist/lib/menu-status.d.ts +32 -0
  80. package/dist/lib/menu-status.js +112 -0
  81. package/dist/lib/menu-thinking.d.ts +29 -0
  82. package/dist/lib/menu-thinking.js +82 -0
  83. package/dist/lib/menu.d.ts +171 -0
  84. package/dist/lib/menu.js +323 -0
  85. package/dist/lib/model.d.ts +127 -0
  86. package/dist/lib/model.js +409 -0
  87. package/dist/lib/outbound-attachments.d.ts +241 -0
  88. package/dist/lib/outbound-attachments.js +639 -0
  89. package/dist/lib/outbound-buttons.d.ts +69 -0
  90. package/dist/lib/outbound-buttons.js +248 -0
  91. package/dist/lib/outbound-markup.d.ts +42 -0
  92. package/dist/lib/outbound-markup.js +678 -0
  93. package/dist/lib/outbound-voice.d.ts +55 -0
  94. package/dist/lib/outbound-voice.js +152 -0
  95. package/dist/lib/outbound.d.ts +185 -0
  96. package/dist/lib/outbound.js +516 -0
  97. package/dist/lib/ownership.d.ts +77 -0
  98. package/dist/lib/ownership.js +174 -0
  99. package/dist/lib/paths.d.ts +40 -0
  100. package/dist/lib/paths.js +94 -0
  101. package/dist/lib/pi.d.ts +72 -0
  102. package/dist/lib/pi.js +121 -0
  103. package/dist/lib/polling.d.ts +351 -0
  104. package/dist/lib/polling.js +1196 -0
  105. package/dist/lib/preview.d.ts +192 -0
  106. package/dist/lib/preview.js +614 -0
  107. package/dist/lib/prompt-templates.d.ts +24 -0
  108. package/dist/lib/prompt-templates.js +118 -0
  109. package/dist/lib/prompts.d.ts +57 -0
  110. package/dist/lib/prompts.js +167 -0
  111. package/dist/lib/queue.d.ts +766 -0
  112. package/dist/lib/queue.js +1965 -0
  113. package/dist/lib/recovery.d.ts +86 -0
  114. package/dist/lib/recovery.js +285 -0
  115. package/dist/lib/rendering.d.ts +20 -0
  116. package/dist/lib/rendering.js +983 -0
  117. package/dist/lib/replies.d.ts +214 -0
  118. package/dist/lib/replies.js +737 -0
  119. package/dist/lib/routing.d.ts +207 -0
  120. package/dist/lib/routing.js +2282 -0
  121. package/dist/lib/runtime.d.ts +172 -0
  122. package/dist/lib/runtime.js +402 -0
  123. package/dist/lib/sections.d.ts +165 -0
  124. package/dist/lib/sections.js +327 -0
  125. package/dist/lib/setup.d.ts +82 -0
  126. package/dist/lib/setup.js +150 -0
  127. package/dist/lib/skills.d.ts +8 -0
  128. package/dist/lib/skills.js +12 -0
  129. package/dist/lib/status.d.ts +442 -0
  130. package/dist/lib/status.js +1006 -0
  131. package/dist/lib/sync.d.ts +179 -0
  132. package/dist/lib/sync.js +782 -0
  133. package/dist/lib/target.d.ts +20 -0
  134. package/dist/lib/target.js +27 -0
  135. package/dist/lib/telegram-api.d.ts +541 -0
  136. package/dist/lib/telegram-api.js +1159 -0
  137. package/dist/lib/text-groups.d.ts +89 -0
  138. package/dist/lib/text-groups.js +317 -0
  139. package/dist/lib/thread-cleanup-manager.d.ts +288 -0
  140. package/dist/lib/thread-cleanup-manager.js +560 -0
  141. package/dist/lib/thread-display.d.ts +46 -0
  142. package/dist/lib/thread-display.js +257 -0
  143. package/dist/lib/thread-naming.d.ts +46 -0
  144. package/dist/lib/thread-naming.js +78 -0
  145. package/dist/lib/thread-reconciler.d.ts +239 -0
  146. package/dist/lib/thread-reconciler.js +644 -0
  147. package/dist/lib/threads.d.ts +621 -0
  148. package/dist/lib/threads.js +3679 -0
  149. package/dist/lib/time-injection.d.ts +15 -0
  150. package/dist/lib/time-injection.js +56 -0
  151. package/dist/lib/turns.d.ts +109 -0
  152. package/dist/lib/turns.js +500 -0
  153. package/dist/lib/updates.d.ts +1290 -0
  154. package/dist/lib/updates.js +3634 -0
  155. package/dist/lib/voice.d.ts +117 -0
  156. package/dist/lib/voice.js +174 -0
  157. package/dist/lib/workspace-admission.d.ts +264 -0
  158. package/dist/lib/workspace-admission.js +1136 -0
  159. package/dist/lib/workspace-retirement.d.ts +219 -0
  160. package/dist/lib/workspace-retirement.js +587 -0
  161. package/dist/lib/workspace-slots.d.ts +30 -0
  162. package/dist/lib/workspace-slots.js +54 -0
  163. package/dist/package.json +126 -0
  164. package/dist/pi-telegram/index.js +1 -0
  165. package/dist/skills/generated-control-surface/SKILL.md +107 -0
  166. package/dist/skills/generated-control-surface/references/capability-adapters.md +27 -0
  167. package/dist/skills/generated-control-surface/references/layout-and-state.md +37 -0
  168. package/dist/skills/generative-apps/SKILL.md +115 -0
  169. package/dist/skills/show-me/SKILL.md +166 -0
  170. package/dist/skills/show-me/references/telegram-surfaces.md +43 -0
  171. package/dist/skills/telegram-bridge/SKILL.md +129 -0
  172. package/dist/skills/telegram-bridge/references/configuration.md +15 -0
  173. package/dist/skills/telegram-bridge/references/delivery-and-threads.md +27 -0
  174. package/dist/skills/telegram-bridge/references/diagnosis.md +18 -0
  175. package/docs/architecture.md +1 -1
  176. package/docs/compact-matrix-literal.md +10 -3
  177. package/docs/generative-apps.md +15 -13
  178. package/docs/multi-instance-bus.md +17 -3
  179. package/docs/outbound.md +1 -1
  180. package/docs/public-api.md +2 -2
  181. package/lib/bindings.ts +89 -6
  182. package/lib/bus-follower.ts +11 -3
  183. package/lib/bus-leader.ts +57 -20
  184. package/lib/bus.ts +12 -2
  185. package/lib/commands.ts +2 -2
  186. package/lib/config.ts +14 -7
  187. package/lib/delivery.ts +38 -6
  188. package/lib/extension.ts +26 -1
  189. package/lib/generative-apps.ts +379 -13
  190. package/lib/menu-settings.ts +21 -5
  191. package/lib/outbound-markup.ts +16 -7
  192. package/lib/pi.ts +4 -0
  193. package/lib/sync.ts +3 -0
  194. package/lib/telegram-api.ts +12 -1
  195. package/lib/thread-cleanup-manager.ts +36 -6
  196. package/lib/thread-display.ts +96 -18
  197. package/lib/threads.ts +150 -30
  198. package/package.json +56 -13
  199. package/scripts/build-dist.mjs +44 -0
  200. package/scripts/measure-bus.mjs +8 -1
  201. package/scripts/measure-workspace.mjs +8 -1
  202. package/skills/generative-apps/SKILL.md +1 -1
  203. package/skills/show-me/SKILL.md +1 -1
  204. package/skills/telegram-bridge/SKILL.md +1 -1
@@ -0,0 +1,292 @@
1
+ /**
2
+ * Telegram bus leader orchestration
3
+ * Zones: multi-instance bus, leader polling/server lifecycle, follower routing
4
+ * Owns leader-only runtime orchestration: follower registration envelopes, follower API proxying,
5
+ * leader activation hot-switching, local bus server startup, and stale follower pruning.
6
+ */
7
+ import * as Sync from "./sync.ts";
8
+ import type { TelegramThreadDisplayMode } from "./config.ts";
9
+ import * as ThreadReconciler from "./thread-reconciler.ts";
10
+ import { type TelegramApiCallOptions } from "./telegram-api.ts";
11
+ import type { TelegramTarget } from "./target.ts";
12
+ import * as Threads from "./threads.ts";
13
+ import { type TelegramBusEnvelope, type TelegramBusFollowerRegistry, type TelegramBusFollowerView, type TelegramBusInstanceRegistration, type TelegramBusProtocolIdentity, type TelegramBusSocketPathSource } from "./bus.ts";
14
+ import type { TelegramQueueHandoffPayload } from "./queue.ts";
15
+ import { type TelegramWorkspaceOperationRunner } from "./workspace-retirement.ts";
16
+ import { type TelegramWorkspaceAdmissionLedger } from "./workspace-admission.ts";
17
+ export declare const TELEGRAM_BUS_FOLLOWER_STALE_AFTER_MS = 15000;
18
+ export type TelegramBusWorkspaceAdmissionRunner = TelegramWorkspaceOperationRunner;
19
+ export interface TelegramBusLeaderRuntime<TContext> {
20
+ runWorkspaceOperation?: TelegramBusWorkspaceAdmissionRunner;
21
+ captureWorkspaceExternalProtection?: (binding: Threads.TelegramWorkspaceThreadBinding) => Threads.TelegramWorkspaceExternalProtectionEvidence;
22
+ reconcileThreadDisplay?: () => Promise<{
23
+ changed: number;
24
+ }>;
25
+ setThreadDisplayMode?: (mode: TelegramThreadDisplayMode) => Promise<void>;
26
+ renameLeaderThread?: (threadName: string) => Promise<Threads.TelegramTopicTargetRecord>;
27
+ startPolling: (ctx: TContext) => Promise<void>;
28
+ stopPolling: () => Promise<void>;
29
+ routeQueueHandoff: (input: {
30
+ requestId: string;
31
+ auth?: string;
32
+ recipientInstanceId: string;
33
+ recipientRegistrationGeneration: string;
34
+ donorInstanceId: string;
35
+ donorProcessId: number;
36
+ donorProcessBirthId: string;
37
+ donorSessionGeneration: number;
38
+ donorAcquisitionId: string;
39
+ donorAcquiredAtMs: number;
40
+ handoffToken: string;
41
+ payload: TelegramQueueHandoffPayload;
42
+ sentAtMs: number;
43
+ }) => Promise<TelegramBusEnvelope>;
44
+ }
45
+ export interface TelegramBusFollowerLifecycleAnnouncement {
46
+ target: TelegramTarget & {
47
+ threadId: number;
48
+ };
49
+ text: string;
50
+ parseMode: "HTML";
51
+ }
52
+ export interface TelegramBusLeaderTargetProvisionerDeps<TContext> {
53
+ getAllowedUserId: () => number | undefined;
54
+ instanceId: string;
55
+ getCwd?: (ctx: TContext) => string | undefined;
56
+ getSessionId?: (ctx: TContext) => string | undefined;
57
+ getTelegramProfile?: () => string | undefined;
58
+ shouldForceFreshUnnamed?: () => boolean;
59
+ getRequestedThreadName?: () => string | undefined;
60
+ resolveInitialWorkspaceDisplayTitle?: (binding: Threads.TelegramWorkspaceDisplayBinding) => string | undefined;
61
+ topicTargetStore: Threads.TelegramTopicTargetStore;
62
+ callApi: <TResponse>(method: string, body: Record<string, unknown>, options?: TelegramApiCallOptions) => Promise<TResponse>;
63
+ getCurrentLeaderEpoch?: () => number | string | undefined;
64
+ getThreadReconciliationMachineState?: () => ThreadReconciler.ThreadReconciliationMachineState | undefined;
65
+ recordThreadReconciliationPlan?: (plan: ThreadReconciler.ThreadReconciliationPlan) => void;
66
+ getSyncState: () => Sync.TelegramSyncState;
67
+ setSyncState: (state: Sync.TelegramSyncState) => void;
68
+ setLeaderTarget: (input: {
69
+ target: TelegramTarget;
70
+ slot?: string;
71
+ threadName?: string;
72
+ }) => void;
73
+ onProvisioningStart?: () => void;
74
+ onProvisioningEnd?: () => void;
75
+ recordRuntimeEvent: (category: string, error: unknown, details?: Record<string, unknown>) => void;
76
+ getNowMs?: () => number;
77
+ }
78
+ export interface TelegramBusFollowerTargetProvisionerDeps {
79
+ getAllowedUserId: () => number | undefined;
80
+ topicTargetStore: Threads.TelegramTopicTargetStore;
81
+ callApi: <TResponse>(method: string, body: Record<string, unknown>) => Promise<TResponse>;
82
+ getCurrentLeaderEpoch?: () => number | string | undefined;
83
+ getSyncState: () => Sync.TelegramSyncState;
84
+ setSyncState: (state: Sync.TelegramSyncState) => void;
85
+ onProvisioningStart?: () => void;
86
+ onProvisioningEnd?: () => void;
87
+ resolveInitialWorkspaceDisplayTitle?: (binding: Threads.TelegramWorkspaceDisplayBinding) => string | undefined;
88
+ runWorkspaceOperation?: TelegramBusWorkspaceAdmissionRunner;
89
+ getNowMs?: () => number;
90
+ recordRuntimeEvent: (category: string, error: unknown, details?: Record<string, unknown>) => void;
91
+ }
92
+ export interface TelegramBusFollowerDisconnectHandlerDeps {
93
+ topicTargetStore: Pick<Threads.TelegramTopicTargetStore, "list" | "markStaleByTarget" | "markWorkspaceBindingInactiveByTarget" | "persist" | "upsertPendingCleanup" | "removePendingCleanup">;
94
+ callApi: <TResponse>(method: string, body: Record<string, unknown>) => Promise<TResponse>;
95
+ getCurrentLeaderEpoch?: () => number | string | undefined;
96
+ getSyncState: () => Sync.TelegramSyncState;
97
+ setSyncState: (state: Sync.TelegramSyncState) => void;
98
+ getNowMs?: () => number;
99
+ recordRuntimeEvent: (category: string, error: unknown, details?: Record<string, unknown>) => void;
100
+ }
101
+ export interface TelegramBusLeaderApiProxyDeps {
102
+ call: (method: string, body: Record<string, unknown>, options?: TelegramApiCallOptions) => Promise<unknown>;
103
+ callMultipart: (method: string, fields: Record<string, string>, fieldName: string, filePath: string, fileName: string, options?: TelegramApiCallOptions) => Promise<unknown>;
104
+ downloadFile: (fileId: string, destinationDir: string) => Promise<unknown>;
105
+ recoverStaleTargetError?: (apiBody: unknown, error: unknown) => Promise<unknown> | unknown;
106
+ }
107
+ export interface TelegramBusLeaderRuntimeAssemblyDeps<TContext> {
108
+ getThreadDisplayMode?: () => TelegramThreadDisplayMode;
109
+ persistThreadDisplayMode?: (mode: TelegramThreadDisplayMode, isCurrent: () => boolean) => Promise<void>;
110
+ onThreadDisplayChanged?: () => void;
111
+ runtime: Omit<TelegramBusLeaderRuntimeDeps<TContext>, "callApi" | "onFollowerDisconnected" | "onFollowerConfirmedDead" | "provisionFollowerTarget" | "provisionLeaderTarget" | "recordRuntimeEvent">;
112
+ getAllowedUserId: () => number | undefined;
113
+ instanceId: string;
114
+ getCwd?: (ctx: TContext) => string | undefined;
115
+ getSessionId?: (ctx: TContext) => string | undefined;
116
+ getTelegramProfile?: () => string | undefined;
117
+ shouldForceFreshUnnamed?: () => boolean;
118
+ getRequestedThreadName?: () => string | undefined;
119
+ topicTargetStore: Threads.TelegramTopicTargetStore;
120
+ callApi: TelegramBusLeaderTargetProvisionerDeps<TContext>["callApi"];
121
+ callMultipart: TelegramBusLeaderApiProxyDeps["callMultipart"];
122
+ downloadFile: TelegramBusLeaderApiProxyDeps["downloadFile"];
123
+ recoverStaleTargetError?: TelegramBusLeaderApiProxyDeps["recoverStaleTargetError"];
124
+ getCurrentLeaderEpoch?: () => number | string | undefined;
125
+ getThreadReconciliationMachineState?: TelegramBusLeaderTargetProvisionerDeps<TContext>["getThreadReconciliationMachineState"];
126
+ recordThreadReconciliationPlan?: TelegramBusLeaderTargetProvisionerDeps<TContext>["recordThreadReconciliationPlan"];
127
+ getSyncState: () => Sync.TelegramSyncState;
128
+ setSyncState: (state: Sync.TelegramSyncState) => void;
129
+ setLeaderTarget: TelegramBusLeaderTargetProvisionerDeps<TContext>["setLeaderTarget"];
130
+ onProvisioningStart?: () => void;
131
+ onProvisioningEnd?: () => void;
132
+ recordRuntimeEvent: NonNullable<TelegramBusLeaderRuntimeDeps<TContext>["recordRuntimeEvent"]>;
133
+ captureWorkspaceExternalProtection?: (binding: Threads.TelegramWorkspaceThreadBinding) => Threads.TelegramWorkspaceExternalProtectionEvidence;
134
+ getWorkspaceAdmission?: () => Pick<TelegramWorkspaceAdmissionLedger, "acquireAdmission" | "releaseAdmission"> | undefined;
135
+ runWorkspaceOperation?: TelegramBusWorkspaceAdmissionRunner;
136
+ }
137
+ export declare function createTelegramBusLeaderRuntimeAssembly<TContext>(deps: TelegramBusLeaderRuntimeAssemblyDeps<TContext>): TelegramBusLeaderRuntime<TContext> & {
138
+ renameLeaderThreadAdmitted: (threadName: string, expectedTarget?: Threads.TelegramTopicTargetRecord["target"]) => Promise<Threads.TelegramTopicTargetRecord>;
139
+ resetLeaderThreadName: (expectedTarget: Threads.TelegramTopicTargetRecord["target"]) => Promise<{
140
+ threadName: string;
141
+ }>;
142
+ resetThreadNameAdmitted: (target: Threads.TelegramTopicTargetRecord["target"]) => Promise<{
143
+ threadName: string;
144
+ }>;
145
+ };
146
+ export interface TelegramBusFollowerMessageOwnershipRecord {
147
+ follower: TelegramBusFollowerView;
148
+ chatId: number;
149
+ messageId: number;
150
+ target?: TelegramTarget;
151
+ }
152
+ export type TelegramBusFollowerMessageOwnershipRecorder = (record: TelegramBusFollowerMessageOwnershipRecord) => void;
153
+ export interface TelegramBusLeaderRuntimeDeps<TContext> {
154
+ socketPath: TelegramBusSocketPathSource;
155
+ commitEndpointPublication?: (commit: () => void) => boolean;
156
+ followerRegistry: TelegramBusFollowerRegistry;
157
+ authSecret?: string;
158
+ protocolIdentity: TelegramBusProtocolIdentity;
159
+ startPolling: (ctx: TContext) => void | Promise<void>;
160
+ stopPolling: () => void | Promise<void>;
161
+ callApi?: (method: string, args: unknown[]) => Promise<unknown> | unknown;
162
+ authorizeFollowerApiCall?: (input: {
163
+ follower: TelegramBusFollowerView;
164
+ method: string;
165
+ args: unknown[];
166
+ }) => boolean;
167
+ recordFollowerMessageOwnership?: TelegramBusFollowerMessageOwnershipRecorder;
168
+ resolveAgentTarget?: (follower: TelegramBusFollowerView, selector: Extract<TelegramBusEnvelope, {
169
+ kind: "follower.resolveAgentTarget";
170
+ }>["selector"]) => Promise<TelegramTarget | undefined> | TelegramTarget | undefined;
171
+ routeAgentMessage?: (follower: TelegramBusFollowerView, message: Extract<TelegramBusEnvelope, {
172
+ kind: "follower.routeAgentMessage";
173
+ }>["message"]) => Promise<void> | void;
174
+ routeQueueHandoff?: (follower: TelegramBusFollowerView, envelope: Extract<TelegramBusEnvelope, {
175
+ kind: "follower.offerQueueHandoff";
176
+ }>) => Promise<unknown> | unknown;
177
+ provisionFollowerTarget?: (registration: TelegramBusInstanceRegistration, options?: {
178
+ existingWorkspaceBindingOnly?: boolean;
179
+ }) => Promise<TelegramTarget | undefined> | TelegramTarget | undefined;
180
+ renameFollowerThread?: (follower: TelegramBusFollowerView, threadName: string) => Promise<{
181
+ threadName: string;
182
+ }> | {
183
+ threadName: string;
184
+ };
185
+ resetFollowerThreadName?: (follower: TelegramBusFollowerView) => Promise<{
186
+ threadName: string;
187
+ }> | {
188
+ threadName: string;
189
+ };
190
+ getFollowerDisplayTitle?: (follower: TelegramBusFollowerView) => string | undefined;
191
+ onFollowerRegistered?: () => void;
192
+ applyThreadDisplayMode?: (mode: TelegramThreadDisplayMode, isCurrent: () => boolean) => Promise<void>;
193
+ getThreadDisplayMode?: () => TelegramThreadDisplayMode;
194
+ getCurrentLeaderEpoch?: () => number | string | undefined;
195
+ provisionLeaderTarget?: (ctx: TContext) => Promise<void> | void;
196
+ runWorkspaceAdmission?: TelegramBusWorkspaceAdmissionRunner;
197
+ getNowMs?: () => number;
198
+ timeoutMs?: number;
199
+ followerPruneIntervalMs?: number;
200
+ followerStaleAfterMs?: number;
201
+ isFollowerProcessAlive?: (pid: number) => boolean;
202
+ shouldCleanupConfirmedDeadFollower?: () => Promise<boolean> | boolean;
203
+ onFollowerDisconnected?: (follower: TelegramBusFollowerView) => Promise<void> | void;
204
+ onFollowerConfirmedDead?: (follower: TelegramBusFollowerView) => Promise<void> | void;
205
+ recordRuntimeEvent?: (category: string, error: unknown, details?: Record<string, unknown>) => void;
206
+ }
207
+ export declare function createTelegramBusInstanceLifecycleAnnouncement(input: {
208
+ target: TelegramTarget & {
209
+ threadId: number;
210
+ };
211
+ threadName?: string;
212
+ slot?: string;
213
+ state: "connected";
214
+ }): TelegramBusFollowerLifecycleAnnouncement;
215
+ export declare function createTelegramBusFollowerTargetProvisioner(deps: TelegramBusFollowerTargetProvisionerDeps): (registration: TelegramBusInstanceRegistration, options?: {
216
+ existingWorkspaceBindingOnly?: boolean;
217
+ }) => Promise<(TelegramTarget & {
218
+ slot?: string;
219
+ threadName?: string;
220
+ }) | undefined>;
221
+ export declare function createTelegramBusFollowerDisconnectHandler(deps: TelegramBusFollowerDisconnectHandlerDeps): (follower: TelegramBusFollowerView) => Promise<void>;
222
+ export declare function createTelegramBusFollowerConfirmedDeadHandler(deps: TelegramBusFollowerDisconnectHandlerDeps): (follower: TelegramBusFollowerView) => Promise<void>;
223
+ export declare function createTelegramBusLeaderTargetProvisioner<TContext>(deps: TelegramBusLeaderTargetProvisionerDeps<TContext>): (ctx: TContext) => Promise<void>;
224
+ export declare function createTelegramBusLeaderApiProxy(deps: TelegramBusLeaderApiProxyDeps): (method: string, args: unknown[]) => Promise<unknown>;
225
+ type TelegramBusFollowerMutationRunner = <T>(follower: {
226
+ instanceId: string;
227
+ profileKey?: string;
228
+ }, operation: () => Promise<T>) => Promise<T>;
229
+ export declare function createTelegramBusLeaderEnvelopeHandler(deps: {
230
+ followerRegistry: TelegramBusFollowerRegistry;
231
+ authSecret?: string;
232
+ protocolIdentity: TelegramBusProtocolIdentity;
233
+ getNowMs?: () => number;
234
+ timeoutMs?: number;
235
+ callApi?: (method: string, args: unknown[]) => Promise<unknown> | unknown;
236
+ authorizeFollowerApiCall?: (input: {
237
+ follower: TelegramBusFollowerView;
238
+ method: string;
239
+ args: unknown[];
240
+ }) => boolean;
241
+ recordFollowerMessageOwnership?: TelegramBusFollowerMessageOwnershipRecorder;
242
+ resolveAgentTarget?: (follower: TelegramBusFollowerView, selector: Extract<TelegramBusEnvelope, {
243
+ kind: "follower.resolveAgentTarget";
244
+ }>["selector"]) => Promise<TelegramTarget | undefined> | TelegramTarget | undefined;
245
+ routeAgentMessage?: (follower: TelegramBusFollowerView, message: Extract<TelegramBusEnvelope, {
246
+ kind: "follower.routeAgentMessage";
247
+ }>["message"]) => Promise<void> | void;
248
+ routeQueueHandoff?: (follower: TelegramBusFollowerView, envelope: Extract<TelegramBusEnvelope, {
249
+ kind: "follower.offerQueueHandoff";
250
+ }>) => Promise<unknown> | unknown;
251
+ provisionFollowerTarget?: (registration: TelegramBusInstanceRegistration, options?: {
252
+ existingWorkspaceBindingOnly?: boolean;
253
+ }) => Promise<(TelegramTarget & {
254
+ slot?: string;
255
+ threadName?: string;
256
+ }) | undefined> | (TelegramTarget & {
257
+ slot?: string;
258
+ threadName?: string;
259
+ }) | undefined;
260
+ onFollowerDisconnected?: (follower: TelegramBusFollowerView) => Promise<void> | void;
261
+ renameFollowerThread?: (follower: TelegramBusFollowerView, threadName: string) => Promise<{
262
+ threadName: string;
263
+ }> | {
264
+ threadName: string;
265
+ };
266
+ resetFollowerThreadName?: (follower: TelegramBusFollowerView) => Promise<{
267
+ threadName: string;
268
+ }> | {
269
+ threadName: string;
270
+ };
271
+ getFollowerDisplayTitle?: (follower: TelegramBusFollowerView) => string | undefined;
272
+ onFollowerRegistered?: () => void;
273
+ applyThreadDisplayMode?: (mode: TelegramThreadDisplayMode, isCurrent: () => boolean) => Promise<void>;
274
+ getThreadDisplayMode?: () => TelegramThreadDisplayMode;
275
+ getCurrentLeaderEpoch?: () => number | string | undefined;
276
+ runFollowerMutation?: TelegramBusFollowerMutationRunner;
277
+ runWorkspaceAdmission?: TelegramBusWorkspaceAdmissionRunner;
278
+ }): (envelope: TelegramBusEnvelope) => Promise<TelegramBusEnvelope> | TelegramBusEnvelope;
279
+ export interface TelegramBusLeaderActivationSchedulerDeps<TContext> {
280
+ isBusEnabled: () => boolean;
281
+ ownsPolling: (ctx: TContext) => boolean;
282
+ isBusPollingStarted: () => boolean;
283
+ setBusPollingStarted: (started: boolean) => void;
284
+ stopClassicPolling: () => Promise<void>;
285
+ startClassicPolling: (ctx: TContext) => void | Promise<void>;
286
+ startBusLeaderPolling: (ctx: TContext) => Promise<void>;
287
+ updateStatus: (ctx: TContext) => void;
288
+ recordRuntimeEvent?: (category: string, error: unknown, details?: Record<string, unknown>) => void;
289
+ }
290
+ export declare function createTelegramBusLeaderActivationScheduler<TContext>(deps: TelegramBusLeaderActivationSchedulerDeps<TContext>): (ctx: TContext) => void;
291
+ export declare function createTelegramBusLeaderRuntime<TContext>(deps: TelegramBusLeaderRuntimeDeps<TContext>): TelegramBusLeaderRuntime<TContext>;
292
+ export {};