@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,179 @@
1
+ /**
2
+ * Telegram synchronization helpers
3
+ * Zones: Telegram bot reality mirror, demand-driven reconciliation, status diagnostics
4
+ * Owns pure contracts for deciding when local Telegram mirror state should be refreshed without querying Telegram on every action
5
+ */
6
+ import { type TelegramTarget } from "./target.ts";
7
+ import * as ThreadReconciler from "./thread-reconciler.ts";
8
+ import { type TelegramWorkspaceAdmissionLedger } from "./workspace-admission.ts";
9
+ import { type TelegramOwnTopicProvisionResult, type TelegramTopicTargetStore, type TelegramWorkspaceDisplayBinding, type TelegramWorkspaceThreadBinding } from "./threads.ts";
10
+ export interface TelegramTopicLifecycleSyncUpdate<TMessage = unknown> {
11
+ kind: "created" | "closed" | "reopened";
12
+ target: TelegramTarget & {
13
+ threadId: number;
14
+ };
15
+ message: TMessage;
16
+ }
17
+ export type TelegramSyncWorkspaceOperationRunner = <T>(input: {
18
+ operationId: string;
19
+ operationKind: string;
20
+ scopes: readonly [{
21
+ kind: "profile";
22
+ }];
23
+ }, operation: () => Promise<T>) => Promise<T>;
24
+ export interface TelegramLeaderThreadSyncDeps {
25
+ getAllowedUserId: () => number | undefined;
26
+ instanceId: string;
27
+ cwd?: string;
28
+ sessionId?: string;
29
+ telegramProfile?: string;
30
+ forceFreshUnnamed?: boolean;
31
+ requestedThreadName?: string;
32
+ resolveInitialWorkspaceDisplayTitle?: (binding: TelegramWorkspaceDisplayBinding) => string | undefined;
33
+ getNowMs?: () => number;
34
+ getRandom?: () => number;
35
+ getCurrentLeaderEpoch?: () => number | string | undefined;
36
+ getThreadReconciliationMachineState?: () => ThreadReconciler.ThreadReconciliationMachineState | undefined;
37
+ recordThreadReconciliationPlan?: (plan: ThreadReconciler.ThreadReconciliationPlan) => void;
38
+ topicTargetStore: TelegramTopicTargetStore;
39
+ callApi: <TResponse>(method: string, body: Record<string, unknown>) => Promise<TResponse>;
40
+ probeWorkspaceBinding?: (binding: TelegramWorkspaceThreadBinding) => Promise<void>;
41
+ recordEvent: (category: string, message: unknown, details?: Record<string, unknown>) => void;
42
+ }
43
+ export interface TelegramTopicLifecycleSyncDeps {
44
+ topicTargetStore: Pick<TelegramTopicTargetStore, "load" | "list" | "listReservations" | "listPendingProvisions" | "markStaleByTarget" | "markActiveByTarget" | "removePendingProvision" | "persist">;
45
+ isBusEnabled: () => boolean;
46
+ callApi: <TResponse>(method: string, body: Record<string, unknown>) => Promise<TResponse>;
47
+ isTopicProvisioningActive?: () => boolean;
48
+ getCurrentLeaderEpoch?: () => number | string | undefined;
49
+ getThreadReconciliationMachineState?: () => ThreadReconciler.ThreadReconciliationMachineState | undefined;
50
+ recordThreadReconciliationPlan?: (plan: ThreadReconciler.ThreadReconciliationPlan) => void;
51
+ assertExecutionCurrent?: (message: unknown) => void;
52
+ recordEvent?: (category: string, message: unknown, details?: Record<string, unknown>) => void;
53
+ }
54
+ export type TelegramTopicLifecycleSyncHandler<TMessage = unknown> = (lifecycle: TelegramTopicLifecycleSyncUpdate<TMessage>) => Promise<void>;
55
+ export interface TelegramObservedTopicLifecycleSyncDeps<TSyncState> extends TelegramTopicLifecycleSyncDeps {
56
+ runWorkspaceOperation: TelegramSyncWorkspaceOperationRunner;
57
+ getSyncState: () => TSyncState;
58
+ setSyncState: (state: TSyncState) => void;
59
+ getNowMs?: () => number;
60
+ }
61
+ export interface TelegramLeaderHealthRuntimeDeps<TSyncState> {
62
+ getNowMs?: () => number;
63
+ intervalMs?: number;
64
+ callGetMe: () => Promise<unknown>;
65
+ getSyncState: () => TSyncState;
66
+ setSyncState: (state: TSyncState) => void;
67
+ recordEvent: (category: string, message: unknown, details?: Record<string, unknown>) => void;
68
+ }
69
+ export interface TelegramLeaderHealthRuntime {
70
+ start: () => void;
71
+ stop: () => void;
72
+ }
73
+ export interface TelegramManualThreadDisconnectDeps<TSyncState> {
74
+ instanceId: string;
75
+ getCurrentThreadRecord: () => {
76
+ target: TelegramTarget;
77
+ instanceId?: string;
78
+ profileKey?: string;
79
+ owner?: {
80
+ kind?: string;
81
+ };
82
+ } | undefined;
83
+ topicTargetStore: Pick<TelegramTopicTargetStore, "list" | "markStaleByTarget" | "persist" | "upsertPendingCleanup" | "removePendingCleanup">;
84
+ callApi: <TResponse>(method: string, body: Record<string, unknown>) => Promise<TResponse>;
85
+ getLeaderTarget: () => TelegramTarget | undefined;
86
+ getCurrentLeaderEpoch?: () => number | string | undefined;
87
+ clearLeaderTarget: () => void;
88
+ disconnectFollowerThread?: () => Promise<boolean>;
89
+ getSyncState: () => TSyncState;
90
+ setSyncState: (state: TSyncState) => void;
91
+ stopPolling: () => Promise<string>;
92
+ recordRuntimeEvent: (category: string, error: unknown, details?: Record<string, unknown>) => void;
93
+ runWorkspaceOperation: TelegramSyncWorkspaceOperationRunner;
94
+ workspaceOperationKind?: string;
95
+ getNowMs?: () => number;
96
+ }
97
+ export declare function markTelegramConfigSyncChange<TSyncState extends TelegramSyncState>(state: TSyncState, action: string, options?: {
98
+ nowMs?: number;
99
+ }): TSyncState;
100
+ export interface TelegramSessionRestartThreadCleanupDeps<TSyncState extends TelegramSyncState> extends Omit<TelegramManualThreadDisconnectDeps<TSyncState>, "stopPolling"> {
101
+ suspendPolling: () => Promise<void>;
102
+ }
103
+ export declare function createTelegramSessionRestartThreadCleanupHandler<TSyncState extends TelegramSyncState>(deps: TelegramSessionRestartThreadCleanupDeps<TSyncState>): () => Promise<string>;
104
+ export interface TelegramThreadDisconnectAssembly {
105
+ disconnect: () => Promise<string>;
106
+ cleanupForSessionRestart: () => Promise<string>;
107
+ }
108
+ export declare function createTelegramThreadDisconnectAssembly<TSyncState extends TelegramSyncState>(deps: Omit<TelegramManualThreadDisconnectDeps<TSyncState>, "stopPolling"> & {
109
+ stopPolling: () => Promise<string>;
110
+ suspendPolling: () => Promise<void>;
111
+ }): TelegramThreadDisconnectAssembly;
112
+ export declare function createTelegramManualThreadDisconnectHandler<TSyncState extends TelegramSyncState>(deps: TelegramManualThreadDisconnectDeps<TSyncState>): () => Promise<string>;
113
+ export declare function createTelegramLeaderHealthRuntime<TSyncState extends TelegramSyncState>(deps: TelegramLeaderHealthRuntimeDeps<TSyncState>): TelegramLeaderHealthRuntime;
114
+ export interface TelegramStaleTopicApiErrorRecoveryDeps<TSyncState> {
115
+ topicTargetStore: Pick<TelegramTopicTargetStore, "load" | "markStaleByTarget" | "persist"> & Partial<Pick<TelegramTopicTargetStore, "invalidateTarget">>;
116
+ getSyncState: () => TSyncState;
117
+ setSyncState: (state: TSyncState) => void;
118
+ recordEvent: (category: string, message: unknown, details?: Record<string, unknown>) => void;
119
+ getNowMs?: () => number;
120
+ isCurrent?: () => boolean;
121
+ isAuthorityCurrent?: () => boolean;
122
+ getWorkspaceAdmission?: () => Pick<TelegramWorkspaceAdmissionLedger, "acquireAdmission" | "releaseAdmission"> | undefined;
123
+ }
124
+ export declare function captureTelegramStaleTargetRequestRecovery<TSyncState extends TelegramSyncState>(body: Record<string, unknown>, deps: TelegramStaleTopicApiErrorRecoveryDeps<TSyncState> & {
125
+ topicTargetStore: Pick<TelegramTopicTargetStore, "load" | "list" | "markStaleByTarget" | "persist" | "invalidateTarget">;
126
+ getCurrentLeaderEpoch: () => number | string | undefined;
127
+ getSessionGeneration: () => number;
128
+ getProfileName: () => string | undefined;
129
+ onRecovered: () => void;
130
+ }): ((error: unknown) => Promise<void>) | undefined;
131
+ export declare function createTelegramStaleTopicApiErrorRecoveryRuntime<TSyncState extends TelegramSyncState>(deps: TelegramStaleTopicApiErrorRecoveryDeps<TSyncState>): (apiBody: unknown, error: unknown) => Promise<boolean>;
132
+ export declare function settleStaleTelegramTopicExecutionFailure<TSyncState extends TelegramSyncState>(error: unknown, deps: TelegramStaleTopicApiErrorRecoveryDeps<TSyncState>): Promise<boolean>;
133
+ export declare function recoverStaleTelegramTopicApiError<TSyncState extends TelegramSyncState>(apiBody: unknown, error: unknown, deps: TelegramStaleTopicApiErrorRecoveryDeps<TSyncState>): Promise<boolean>;
134
+ export declare function ensureTelegramLeaderThreadBinding(deps: TelegramLeaderThreadSyncDeps): Promise<TelegramOwnTopicProvisionResult | undefined>;
135
+ export declare const TELEGRAM_SYNC_SLICE_TARGET_BINDINGS = "target-bindings";
136
+ export declare const TELEGRAM_SYNC_SLICES: readonly ["bot-identity", "bot-capabilities", "pairing", "allowed-user", "topic-capability", "topic-state", "target-bindings", "reservations", "transport-health"];
137
+ export type TelegramSyncSlice = (typeof TELEGRAM_SYNC_SLICES)[number];
138
+ export type TelegramSyncTrigger = "startup" | "reload" | "topic-lifecycle" | "stale-api-error" | "setup-change" | "pairing-change" | "follower-register" | "follower-prune" | "status-request" | "leader-health-tick" | "ordinary-message" | "ordinary-send";
139
+ export interface TelegramSyncSliceState {
140
+ status: "fresh" | "suspect" | "unknown";
141
+ updatedAtMs?: number;
142
+ suspectAtMs?: number;
143
+ reason?: string;
144
+ lastReconcileAction?: string;
145
+ }
146
+ export type TelegramSyncState = Partial<Record<TelegramSyncSlice, TelegramSyncSliceState>>;
147
+ export declare function createUnknownTelegramSyncState(): TelegramSyncState;
148
+ export interface TelegramSyncStateRuntime {
149
+ getState(): TelegramSyncState;
150
+ setState(state: TelegramSyncState): void;
151
+ markConfigChange(action: string): void;
152
+ markSliceFresh(slice: TelegramSyncSlice, options: {
153
+ nowMs: number;
154
+ action: string;
155
+ }): void;
156
+ }
157
+ export declare function createTelegramConfigSyncPersister<TConfig>(deps: {
158
+ persist: (config?: TConfig) => Promise<void>;
159
+ markConfigChange: (action: string) => void;
160
+ }): (config?: TConfig) => Promise<void>;
161
+ export declare function createTelegramSyncStateRuntime(initialState?: Partial<Record<"reservations" | "bot-identity" | "bot-capabilities" | "pairing" | "allowed-user" | "topic-capability" | "topic-state" | "target-bindings" | "transport-health", TelegramSyncSliceState>>): TelegramSyncStateRuntime;
162
+ export interface TelegramProvisioningActivityRuntime {
163
+ isActive(): boolean;
164
+ start(): void;
165
+ end(): void;
166
+ }
167
+ export declare function createTelegramProvisioningActivityRuntime(): TelegramProvisioningActivityRuntime;
168
+ export declare function shouldReconcileTelegramSync(trigger: TelegramSyncTrigger): boolean;
169
+ export declare function markTelegramSyncSliceSuspect(state: TelegramSyncState, slice: TelegramSyncSlice, input: {
170
+ reason: string;
171
+ nowMs: number;
172
+ action?: string;
173
+ }): TelegramSyncState;
174
+ export declare function markTelegramSyncSliceFresh(state: TelegramSyncState, slice: TelegramSyncSlice, input: {
175
+ nowMs: number;
176
+ action: string;
177
+ }): TelegramSyncState;
178
+ export declare function createTelegramObservedTopicLifecycleSyncHandler<TMessage = unknown, TSyncState extends TelegramSyncState = TelegramSyncState>(deps: TelegramObservedTopicLifecycleSyncDeps<TSyncState>): TelegramTopicLifecycleSyncHandler<TMessage>;
179
+ export declare function createTelegramTopicLifecycleSyncHandler<TMessage = unknown>(deps: TelegramTopicLifecycleSyncDeps): TelegramTopicLifecycleSyncHandler<TMessage>;