@llblab/pi-telegram 0.46.0 → 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.
- package/BACKLOG.md +0 -1
- package/CHANGELOG.md +8 -0
- package/README.md +2 -2
- package/dist/api/activity.d.ts +6 -0
- package/dist/api/activity.js +6 -0
- package/dist/api/commands.d.ts +6 -0
- package/dist/api/commands.js +6 -0
- package/dist/api/delivery.d.ts +6 -0
- package/dist/api/delivery.js +6 -0
- package/dist/api/inbound.d.ts +6 -0
- package/dist/api/inbound.js +6 -0
- package/dist/api/keyboard.d.ts +6 -0
- package/dist/api/keyboard.js +6 -0
- package/dist/api/outbound.d.ts +6 -0
- package/dist/api/outbound.js +6 -0
- package/dist/api/sections.d.ts +7 -0
- package/dist/api/sections.js +6 -0
- package/dist/api/status.d.ts +6 -0
- package/dist/api/status.js +6 -0
- package/dist/api/updates.d.ts +6 -0
- package/dist/api/updates.js +6 -0
- package/dist/api/voice.d.ts +6 -0
- package/dist/api/voice.js +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +6 -0
- package/dist/lib/activity-verbosity.d.ts +52 -0
- package/dist/lib/activity-verbosity.js +596 -0
- package/dist/lib/activity.d.ts +220 -0
- package/dist/lib/activity.js +574 -0
- package/dist/lib/agent-messages.d.ts +28 -0
- package/dist/lib/agent-messages.js +86 -0
- package/dist/lib/bindings.d.ts +250 -0
- package/dist/lib/bindings.js +936 -0
- package/dist/lib/bus-api.d.ts +18 -0
- package/dist/lib/bus-api.js +254 -0
- package/dist/lib/bus-follower.d.ts +464 -0
- package/dist/lib/bus-follower.js +1686 -0
- package/dist/lib/bus-leader.d.ts +292 -0
- package/dist/lib/bus-leader.js +2242 -0
- package/dist/lib/bus-transport.d.ts +64 -0
- package/dist/lib/bus-transport.js +140 -0
- package/dist/lib/bus.d.ts +518 -0
- package/dist/lib/bus.js +2055 -0
- package/dist/lib/channel-posts.d.ts +170 -0
- package/dist/lib/channel-posts.js +611 -0
- package/dist/lib/command-templates.d.ts +70 -0
- package/dist/lib/command-templates.js +744 -0
- package/dist/lib/commands.d.ts +541 -0
- package/dist/lib/commands.js +1155 -0
- package/dist/lib/config.d.ts +252 -0
- package/dist/lib/config.js +889 -0
- package/dist/lib/delivery.d.ts +163 -0
- package/dist/lib/delivery.js +542 -0
- package/dist/lib/extension.d.ts +7 -0
- package/dist/lib/extension.js +1608 -0
- package/dist/lib/generative-app-worker.mjs +104 -0
- package/dist/lib/generative-apps.d.ts +212 -0
- package/dist/lib/generative-apps.js +1006 -0
- package/dist/lib/inbound.d.ts +91 -0
- package/dist/lib/inbound.js +502 -0
- package/dist/lib/journal.d.ts +665 -0
- package/dist/lib/journal.js +3701 -0
- package/dist/lib/keyboard.d.ts +23 -0
- package/dist/lib/keyboard.js +37 -0
- package/dist/lib/lifecycle.d.ts +157 -0
- package/dist/lib/lifecycle.js +395 -0
- package/dist/lib/locks.d.ts +164 -0
- package/dist/lib/locks.js +1208 -0
- package/dist/lib/logging.d.ts +50 -0
- package/dist/lib/logging.js +274 -0
- package/dist/lib/media.d.ts +181 -0
- package/dist/lib/media.js +602 -0
- package/dist/lib/menu-model.d.ts +217 -0
- package/dist/lib/menu-model.js +663 -0
- package/dist/lib/menu-queue.d.ts +37 -0
- package/dist/lib/menu-queue.js +408 -0
- package/dist/lib/menu-settings.d.ts +116 -0
- package/dist/lib/menu-settings.js +595 -0
- package/dist/lib/menu-status.d.ts +32 -0
- package/dist/lib/menu-status.js +112 -0
- package/dist/lib/menu-thinking.d.ts +29 -0
- package/dist/lib/menu-thinking.js +82 -0
- package/dist/lib/menu.d.ts +171 -0
- package/dist/lib/menu.js +323 -0
- package/dist/lib/model.d.ts +127 -0
- package/dist/lib/model.js +409 -0
- package/dist/lib/outbound-attachments.d.ts +241 -0
- package/dist/lib/outbound-attachments.js +639 -0
- package/dist/lib/outbound-buttons.d.ts +69 -0
- package/dist/lib/outbound-buttons.js +248 -0
- package/dist/lib/outbound-markup.d.ts +42 -0
- package/dist/lib/outbound-markup.js +678 -0
- package/dist/lib/outbound-voice.d.ts +55 -0
- package/dist/lib/outbound-voice.js +152 -0
- package/dist/lib/outbound.d.ts +185 -0
- package/dist/lib/outbound.js +516 -0
- package/dist/lib/ownership.d.ts +77 -0
- package/dist/lib/ownership.js +174 -0
- package/dist/lib/paths.d.ts +40 -0
- package/dist/lib/paths.js +94 -0
- package/dist/lib/pi.d.ts +72 -0
- package/dist/lib/pi.js +121 -0
- package/dist/lib/polling.d.ts +351 -0
- package/dist/lib/polling.js +1196 -0
- package/dist/lib/preview.d.ts +192 -0
- package/dist/lib/preview.js +614 -0
- package/dist/lib/prompt-templates.d.ts +24 -0
- package/dist/lib/prompt-templates.js +118 -0
- package/dist/lib/prompts.d.ts +57 -0
- package/dist/lib/prompts.js +167 -0
- package/dist/lib/queue.d.ts +766 -0
- package/dist/lib/queue.js +1965 -0
- package/dist/lib/recovery.d.ts +86 -0
- package/dist/lib/recovery.js +285 -0
- package/dist/lib/rendering.d.ts +20 -0
- package/dist/lib/rendering.js +983 -0
- package/dist/lib/replies.d.ts +214 -0
- package/dist/lib/replies.js +737 -0
- package/dist/lib/routing.d.ts +207 -0
- package/dist/lib/routing.js +2282 -0
- package/dist/lib/runtime.d.ts +172 -0
- package/dist/lib/runtime.js +402 -0
- package/dist/lib/sections.d.ts +165 -0
- package/dist/lib/sections.js +327 -0
- package/dist/lib/setup.d.ts +82 -0
- package/dist/lib/setup.js +150 -0
- package/dist/lib/skills.d.ts +8 -0
- package/dist/lib/skills.js +12 -0
- package/dist/lib/status.d.ts +442 -0
- package/dist/lib/status.js +1006 -0
- package/dist/lib/sync.d.ts +179 -0
- package/dist/lib/sync.js +782 -0
- package/dist/lib/target.d.ts +20 -0
- package/dist/lib/target.js +27 -0
- package/dist/lib/telegram-api.d.ts +541 -0
- package/dist/lib/telegram-api.js +1159 -0
- package/dist/lib/text-groups.d.ts +89 -0
- package/dist/lib/text-groups.js +317 -0
- package/dist/lib/thread-cleanup-manager.d.ts +288 -0
- package/dist/lib/thread-cleanup-manager.js +560 -0
- package/dist/lib/thread-display.d.ts +46 -0
- package/dist/lib/thread-display.js +257 -0
- package/dist/lib/thread-naming.d.ts +46 -0
- package/dist/lib/thread-naming.js +78 -0
- package/dist/lib/thread-reconciler.d.ts +239 -0
- package/dist/lib/thread-reconciler.js +644 -0
- package/dist/lib/threads.d.ts +621 -0
- package/dist/lib/threads.js +3679 -0
- package/dist/lib/time-injection.d.ts +15 -0
- package/dist/lib/time-injection.js +56 -0
- package/dist/lib/turns.d.ts +109 -0
- package/dist/lib/turns.js +500 -0
- package/dist/lib/updates.d.ts +1290 -0
- package/dist/lib/updates.js +3634 -0
- package/dist/lib/voice.d.ts +117 -0
- package/dist/lib/voice.js +174 -0
- package/dist/lib/workspace-admission.d.ts +264 -0
- package/dist/lib/workspace-admission.js +1136 -0
- package/dist/lib/workspace-retirement.d.ts +219 -0
- package/dist/lib/workspace-retirement.js +587 -0
- package/dist/lib/workspace-slots.d.ts +30 -0
- package/dist/lib/workspace-slots.js +54 -0
- package/dist/package.json +126 -0
- package/dist/pi-telegram/index.js +1 -0
- package/dist/skills/generated-control-surface/SKILL.md +107 -0
- package/dist/skills/generated-control-surface/references/capability-adapters.md +27 -0
- package/dist/skills/generated-control-surface/references/layout-and-state.md +37 -0
- package/dist/skills/generative-apps/SKILL.md +115 -0
- package/dist/skills/show-me/SKILL.md +166 -0
- package/dist/skills/show-me/references/telegram-surfaces.md +43 -0
- package/dist/skills/telegram-bridge/SKILL.md +129 -0
- package/dist/skills/telegram-bridge/references/configuration.md +15 -0
- package/dist/skills/telegram-bridge/references/delivery-and-threads.md +27 -0
- package/dist/skills/telegram-bridge/references/diagnosis.md +18 -0
- package/docs/architecture.md +1 -1
- package/docs/compact-matrix-literal.md +10 -3
- package/docs/generative-apps.md +15 -13
- package/docs/multi-instance-bus.md +4 -2
- package/docs/outbound.md +1 -1
- package/docs/public-api.md +2 -2
- package/lib/bindings.ts +89 -6
- package/lib/bus-follower.ts +7 -3
- package/lib/bus-leader.ts +44 -19
- package/lib/bus.ts +4 -1
- package/lib/commands.ts +2 -2
- package/lib/config.ts +14 -7
- package/lib/delivery.ts +38 -6
- package/lib/extension.ts +19 -0
- package/lib/generative-apps.ts +379 -13
- package/lib/menu-settings.ts +21 -5
- package/lib/outbound-markup.ts +16 -7
- package/lib/telegram-api.ts +12 -1
- package/lib/thread-display.ts +96 -18
- package/package.json +56 -13
- package/scripts/build-dist.mjs +44 -0
- package/scripts/measure-bus.mjs +8 -1
- package/scripts/measure-workspace.mjs +8 -1
- package/skills/generative-apps/SKILL.md +1 -1
- package/skills/telegram-bridge/SKILL.md +1 -1
|
@@ -0,0 +1,665 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telegram durable inbound update journal
|
|
3
|
+
* Zones: telegram inbound, filesystem authority, crash recovery
|
|
4
|
+
* Owns profile/bot-scoped raw updates, schema validation, deduplication,
|
|
5
|
+
* bounded atomic publication, durable queue-receipt/failure state, and compaction.
|
|
6
|
+
* It does not own polling, update execution, queue admission, or follower routing.
|
|
7
|
+
*/
|
|
8
|
+
import { type TelegramProcessLiveness } from "./bus.ts";
|
|
9
|
+
import { type TelegramWorkspaceAdmissionLedger, type TelegramWorkspaceAdmissionScope } from "./workspace-admission.ts";
|
|
10
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_VERSION: 1;
|
|
11
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_EXCLUSION_VERSION: 2;
|
|
12
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_CUSTODY_VERSION: 3;
|
|
13
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_MAX_ENTRIES = 10000;
|
|
14
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_MAX_BYTES: number;
|
|
15
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_FAILURE_ID_MAX_LENGTH = 128;
|
|
16
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_QUEUE_OWNER_ID_MAX_LENGTH = 256;
|
|
17
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_INPUT_BINDING_MAX_LENGTH = 256;
|
|
18
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_QUEUE_HANDOFF_ID_MAX_LENGTH = 128;
|
|
19
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_QUEUE_HANDOFF_TOKEN_MIN_LENGTH = 32;
|
|
20
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_QUEUE_HANDOFF_TOKEN_MAX_LENGTH = 256;
|
|
21
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_FAILURE_CLASS_MAX_LENGTH = 128;
|
|
22
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_FAILURE_SUMMARY_MAX_LENGTH = 512;
|
|
23
|
+
export interface TelegramFollowerJournalDiscovery {
|
|
24
|
+
paths: string[];
|
|
25
|
+
complete: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** Read-only discovery for canonical follower journal snapshots and segment roots. */
|
|
28
|
+
export declare function discoverTelegramFollowerJournalPaths(input: {
|
|
29
|
+
directory: string;
|
|
30
|
+
profileName?: string;
|
|
31
|
+
}): TelegramFollowerJournalDiscovery;
|
|
32
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_TERMINAL_REASON_MAX_LENGTH = 256;
|
|
33
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_COMPACTION_SEGMENT_COUNT = 256;
|
|
34
|
+
export declare const TELEGRAM_UPDATE_JOURNAL_COMPACTION_SEGMENT_BYTES: number;
|
|
35
|
+
export type TelegramUpdateJournalErrorCode = "capacity" | "conflict" | "identity-mismatch" | "invalid" | "io" | "unsupported-version" | "pairing-evidence" | "sender-denied";
|
|
36
|
+
export declare class TelegramUpdateJournalError extends Error {
|
|
37
|
+
readonly code: TelegramUpdateJournalErrorCode;
|
|
38
|
+
readonly path: string;
|
|
39
|
+
constructor(code: TelegramUpdateJournalErrorCode, path: string, message: string, options?: ErrorOptions);
|
|
40
|
+
}
|
|
41
|
+
export interface TelegramUpdateJournalBotIdentity {
|
|
42
|
+
botId?: number;
|
|
43
|
+
tokenSha256: string;
|
|
44
|
+
}
|
|
45
|
+
export interface TelegramUpdateJournalInput {
|
|
46
|
+
update_id: number;
|
|
47
|
+
}
|
|
48
|
+
export type TelegramJournaledUpdate = TelegramUpdateJournalInput & Record<string, unknown>;
|
|
49
|
+
export declare function getTelegramUpdateJournalAdmissionScopes(updates: readonly (TelegramUpdateJournalInput & Record<string, unknown>)[]): TelegramWorkspaceAdmissionScope[];
|
|
50
|
+
export type TelegramUpdateJournalEntryState = "pending" | "retry-wait" | "queued" | "failed";
|
|
51
|
+
export type TelegramUpdateJournalQueueKind = "prompt" | "control";
|
|
52
|
+
export interface TelegramUpdateJournalQueueProcessIdentity {
|
|
53
|
+
processId: number;
|
|
54
|
+
processBirthId: string;
|
|
55
|
+
}
|
|
56
|
+
export interface TelegramUpdateJournalQueueRuntimeIdentity extends TelegramUpdateJournalQueueProcessIdentity {
|
|
57
|
+
instanceId: string;
|
|
58
|
+
}
|
|
59
|
+
export interface TelegramUpdateJournalQueueOwnerIdentity extends TelegramUpdateJournalQueueRuntimeIdentity {
|
|
60
|
+
sessionGeneration: number;
|
|
61
|
+
}
|
|
62
|
+
export interface TelegramUpdateJournalQueueOwner extends TelegramUpdateJournalQueueOwnerIdentity {
|
|
63
|
+
acquisitionId: string;
|
|
64
|
+
acquiredAtMs: number;
|
|
65
|
+
handoffId?: string;
|
|
66
|
+
}
|
|
67
|
+
export interface TelegramUpdateJournalQueueHandoff {
|
|
68
|
+
handoffId: string;
|
|
69
|
+
offeredAtMs: number;
|
|
70
|
+
recipientOwner: TelegramUpdateJournalQueueOwnerIdentity;
|
|
71
|
+
}
|
|
72
|
+
export type TelegramUpdateJournalInputHandoff = TelegramUpdateJournalQueueHandoff;
|
|
73
|
+
/** V3 evidence; decoding it grants neither live execution nor Pi queue authority. */
|
|
74
|
+
export interface TelegramUpdateJournalInputClaim {
|
|
75
|
+
phase: "ready" | "running";
|
|
76
|
+
owner: TelegramUpdateJournalQueueOwner;
|
|
77
|
+
recipientBindingKey: string;
|
|
78
|
+
/** Present freezes ready donor execution until exact acceptance or cancellation. */
|
|
79
|
+
handoff?: TelegramUpdateJournalInputHandoff;
|
|
80
|
+
/** Absent means the original update; present preserves an exact routed projection. */
|
|
81
|
+
executionUpdate?: TelegramJournaledUpdate;
|
|
82
|
+
}
|
|
83
|
+
/** Immutable transition evidence, never concurrent raw-input execution authority. */
|
|
84
|
+
export interface TelegramUpdateJournalInputProvenance {
|
|
85
|
+
owner: TelegramUpdateJournalQueueOwner;
|
|
86
|
+
recipientBindingKey: string;
|
|
87
|
+
executionUpdate?: TelegramJournaledUpdate;
|
|
88
|
+
}
|
|
89
|
+
export interface TelegramUpdateJournalFailure {
|
|
90
|
+
attemptCount: number;
|
|
91
|
+
failedAtMs: number;
|
|
92
|
+
failureClass: string;
|
|
93
|
+
summary: string;
|
|
94
|
+
}
|
|
95
|
+
export type TelegramUpdateJournalOperatorDispositionAction = "retry" | "discard";
|
|
96
|
+
export interface TelegramUpdateJournalLegacyCustodyEvidence {
|
|
97
|
+
updateId: number;
|
|
98
|
+
state: "retry-wait" | "failed";
|
|
99
|
+
attemptCount: number;
|
|
100
|
+
failedAtMs: number;
|
|
101
|
+
failureClass: string;
|
|
102
|
+
summary: string;
|
|
103
|
+
nextRetryAtMs?: number;
|
|
104
|
+
terminalAtMs?: number;
|
|
105
|
+
terminalReason?: string;
|
|
106
|
+
terminalFailureId?: string;
|
|
107
|
+
evidenceSha256: string;
|
|
108
|
+
}
|
|
109
|
+
export interface TelegramUpdateJournalLegacyCustodyCandidate {
|
|
110
|
+
updateId: number;
|
|
111
|
+
state: "retry-wait" | "failed";
|
|
112
|
+
attemptCount: number;
|
|
113
|
+
failureClass: string;
|
|
114
|
+
evidenceSha256: string;
|
|
115
|
+
}
|
|
116
|
+
export declare function listTelegramUpdateJournalLegacyCustodyCandidates(snapshot: Pick<TelegramUpdateJournalSnapshot, "entries">): TelegramUpdateJournalLegacyCustodyCandidate[];
|
|
117
|
+
export interface TelegramUpdateJournalLegacyCustodyDispositionAuthority {
|
|
118
|
+
version: 1;
|
|
119
|
+
dispositionId: string;
|
|
120
|
+
updateId: number;
|
|
121
|
+
evidenceSha256: string;
|
|
122
|
+
action: "requeue-v3" | "discard";
|
|
123
|
+
operatorAuthorityId: string;
|
|
124
|
+
authorizedAtMs: number;
|
|
125
|
+
}
|
|
126
|
+
export declare function createTelegramUpdateJournalLegacyCustodyEvidence(entry: TelegramUpdateJournalEntry): TelegramUpdateJournalLegacyCustodyEvidence | undefined;
|
|
127
|
+
export declare function normalizeTelegramUpdateJournalLegacyCustodyDispositionAuthority(value: unknown, expected: TelegramUpdateJournalLegacyCustodyEvidence): TelegramUpdateJournalLegacyCustodyDispositionAuthority | undefined;
|
|
128
|
+
export interface TelegramUpdateJournalTerminalOperatorDisposition {
|
|
129
|
+
failureId: string;
|
|
130
|
+
updateId: number;
|
|
131
|
+
action: TelegramUpdateJournalOperatorDispositionAction;
|
|
132
|
+
committedAtMs: number;
|
|
133
|
+
attemptCount: number;
|
|
134
|
+
failureClass: string;
|
|
135
|
+
terminalAtMs: number;
|
|
136
|
+
terminalReason: string;
|
|
137
|
+
}
|
|
138
|
+
export interface TelegramUpdateJournalLegacyCustodyDisposition {
|
|
139
|
+
dispositionKind: "legacy-custody";
|
|
140
|
+
failureId: string;
|
|
141
|
+
updateId: number;
|
|
142
|
+
action: "requeue-v3" | "discard";
|
|
143
|
+
committedAtMs: number;
|
|
144
|
+
evidenceSha256: string;
|
|
145
|
+
operatorAuthorityId: string;
|
|
146
|
+
authorizedAtMs: number;
|
|
147
|
+
}
|
|
148
|
+
export type TelegramUpdateJournalOperatorDisposition = TelegramUpdateJournalTerminalOperatorDisposition | TelegramUpdateJournalLegacyCustodyDisposition;
|
|
149
|
+
export interface TelegramUpdateJournalEntry {
|
|
150
|
+
updateId: number;
|
|
151
|
+
update: TelegramJournaledUpdate;
|
|
152
|
+
/** Mandatory in v2/v3; immutable veto, never sender authorization. Absent only in legacy v1. */
|
|
153
|
+
preApprovalExcluded?: boolean;
|
|
154
|
+
admittedAtMs: number;
|
|
155
|
+
state: TelegramUpdateJournalEntryState;
|
|
156
|
+
queueKind?: TelegramUpdateJournalQueueKind;
|
|
157
|
+
queueReceiptId?: string;
|
|
158
|
+
queueOwner?: TelegramUpdateJournalQueueOwner;
|
|
159
|
+
queueHandoff?: TelegramUpdateJournalQueueHandoff;
|
|
160
|
+
inputClaim?: TelegramUpdateJournalInputClaim;
|
|
161
|
+
inputProvenance?: TelegramUpdateJournalInputProvenance;
|
|
162
|
+
failure?: TelegramUpdateJournalFailure;
|
|
163
|
+
nextRetryAtMs?: number;
|
|
164
|
+
terminalAtMs?: number;
|
|
165
|
+
terminalReason?: string;
|
|
166
|
+
terminalFailureId?: string;
|
|
167
|
+
}
|
|
168
|
+
export interface TelegramUpdateJournalFile {
|
|
169
|
+
version: typeof TELEGRAM_UPDATE_JOURNAL_VERSION | typeof TELEGRAM_UPDATE_JOURNAL_EXCLUSION_VERSION | typeof TELEGRAM_UPDATE_JOURNAL_CUSTODY_VERSION;
|
|
170
|
+
revision?: number;
|
|
171
|
+
acceptedThroughUpdateId?: number;
|
|
172
|
+
profile: string;
|
|
173
|
+
botIdentity: TelegramUpdateJournalBotIdentity;
|
|
174
|
+
entries: TelegramUpdateJournalEntry[];
|
|
175
|
+
operatorDispositions?: TelegramUpdateJournalOperatorDisposition[];
|
|
176
|
+
}
|
|
177
|
+
export interface TelegramUpdateJournalSnapshot extends TelegramUpdateJournalFile {
|
|
178
|
+
exists: boolean;
|
|
179
|
+
serializedBytes: number;
|
|
180
|
+
}
|
|
181
|
+
export interface TelegramUpdateJournalAppendResult {
|
|
182
|
+
/** Retained batch sources without the immutable veto; not sender authorization. */
|
|
183
|
+
nonExcludedUpdateIds: number[];
|
|
184
|
+
addedUpdateIds: number[];
|
|
185
|
+
duplicateUpdateIds: number[];
|
|
186
|
+
entryCount: number;
|
|
187
|
+
serializedBytes: number;
|
|
188
|
+
}
|
|
189
|
+
export interface TelegramUpdateJournalRemoveResult {
|
|
190
|
+
removedUpdateIds: number[];
|
|
191
|
+
entryCount: number;
|
|
192
|
+
serializedBytes: number;
|
|
193
|
+
}
|
|
194
|
+
export interface TelegramUpdateJournalQueueReceipt {
|
|
195
|
+
queueKind: TelegramUpdateJournalQueueKind;
|
|
196
|
+
receiptId: string;
|
|
197
|
+
sourceUpdateIds: readonly number[];
|
|
198
|
+
owner: TelegramUpdateJournalQueueOwnerIdentity;
|
|
199
|
+
}
|
|
200
|
+
export interface TelegramUpdateJournalQueueResult {
|
|
201
|
+
queuedUpdateIds: number[];
|
|
202
|
+
duplicateUpdateIds: number[];
|
|
203
|
+
queueOwner?: TelegramUpdateJournalQueueOwner;
|
|
204
|
+
entryCount: number;
|
|
205
|
+
serializedBytes: number;
|
|
206
|
+
}
|
|
207
|
+
export interface TelegramUpdateJournalQueuedCompletion {
|
|
208
|
+
queueKind: TelegramUpdateJournalQueueKind;
|
|
209
|
+
receiptId: string;
|
|
210
|
+
sourceUpdateIds: readonly number[];
|
|
211
|
+
queueOwner: TelegramUpdateJournalQueueOwner;
|
|
212
|
+
}
|
|
213
|
+
export interface TelegramUpdateJournalQueueHandoffInput {
|
|
214
|
+
queueKind: TelegramUpdateJournalQueueKind;
|
|
215
|
+
receiptId: string;
|
|
216
|
+
sourceUpdateIds: readonly number[];
|
|
217
|
+
expectedOwner: TelegramUpdateJournalQueueOwner;
|
|
218
|
+
recipientOwner: TelegramUpdateJournalQueueOwnerIdentity;
|
|
219
|
+
handoffToken: string;
|
|
220
|
+
}
|
|
221
|
+
export interface TelegramUpdateJournalQueueHandoffOfferResult {
|
|
222
|
+
handoff: TelegramUpdateJournalQueueHandoff;
|
|
223
|
+
previousOwner: TelegramUpdateJournalQueueOwner;
|
|
224
|
+
offeredUpdateIds: number[];
|
|
225
|
+
duplicate: boolean;
|
|
226
|
+
entryCount: number;
|
|
227
|
+
serializedBytes: number;
|
|
228
|
+
}
|
|
229
|
+
export interface TelegramUpdateJournalQueueHandoffAcceptResult {
|
|
230
|
+
handoffId: string;
|
|
231
|
+
previousOwner?: TelegramUpdateJournalQueueOwner;
|
|
232
|
+
queueOwner: TelegramUpdateJournalQueueOwner;
|
|
233
|
+
acceptedUpdateIds: number[];
|
|
234
|
+
duplicate: boolean;
|
|
235
|
+
entryCount: number;
|
|
236
|
+
serializedBytes: number;
|
|
237
|
+
}
|
|
238
|
+
export interface TelegramUpdateJournalQueueHandoffCancelResult {
|
|
239
|
+
handoffId: string;
|
|
240
|
+
previousOwner: TelegramUpdateJournalQueueOwner;
|
|
241
|
+
cancelledUpdateIds: number[];
|
|
242
|
+
entryCount: number;
|
|
243
|
+
serializedBytes: number;
|
|
244
|
+
}
|
|
245
|
+
export interface TelegramUpdateJournalQueueDiscardInput {
|
|
246
|
+
queueKind: TelegramUpdateJournalQueueKind;
|
|
247
|
+
receiptId: string;
|
|
248
|
+
sourceUpdateIds: readonly number[];
|
|
249
|
+
expectedOwner: TelegramUpdateJournalQueueOwner;
|
|
250
|
+
}
|
|
251
|
+
export interface TelegramUpdateJournalQueueDiscardResult {
|
|
252
|
+
previousOwner: TelegramUpdateJournalQueueOwner;
|
|
253
|
+
removedUpdateIds: number[];
|
|
254
|
+
entryCount: number;
|
|
255
|
+
serializedBytes: number;
|
|
256
|
+
}
|
|
257
|
+
export interface TelegramUpdateJournalDeadQueueOwnerRecoveryInput {
|
|
258
|
+
queueKind: TelegramUpdateJournalQueueKind;
|
|
259
|
+
receiptId: string;
|
|
260
|
+
sourceUpdateIds: readonly number[];
|
|
261
|
+
deadOwner: TelegramUpdateJournalQueueOwner;
|
|
262
|
+
recoveryOwner: TelegramUpdateJournalQueueOwnerIdentity;
|
|
263
|
+
}
|
|
264
|
+
export type TelegramUpdateJournalDeadQueueOwnerRecoveryResult = {
|
|
265
|
+
status: "owner-alive" | "owner-unverifiable";
|
|
266
|
+
previousOwner: TelegramUpdateJournalQueueOwner;
|
|
267
|
+
recoveredUpdateIds: [];
|
|
268
|
+
entryCount: number;
|
|
269
|
+
serializedBytes: number;
|
|
270
|
+
} | {
|
|
271
|
+
status: "recovered";
|
|
272
|
+
previousOwner: TelegramUpdateJournalQueueOwner;
|
|
273
|
+
recoveredUpdateIds: number[];
|
|
274
|
+
entryCount: number;
|
|
275
|
+
serializedBytes: number;
|
|
276
|
+
};
|
|
277
|
+
export interface TelegramUpdateJournalFailureInput {
|
|
278
|
+
updateId: number;
|
|
279
|
+
expectedAttemptCount: number;
|
|
280
|
+
failedAtMs: number;
|
|
281
|
+
failureClass: string;
|
|
282
|
+
summary: string;
|
|
283
|
+
disposition: "retry-wait" | "failed";
|
|
284
|
+
nextRetryAtMs?: number;
|
|
285
|
+
terminalReason?: string;
|
|
286
|
+
}
|
|
287
|
+
export interface TelegramUpdateJournalFailureResult {
|
|
288
|
+
entry: TelegramUpdateJournalEntry;
|
|
289
|
+
entryCount: number;
|
|
290
|
+
serializedBytes: number;
|
|
291
|
+
}
|
|
292
|
+
export interface TelegramUpdateJournalOperatorDispositionInput {
|
|
293
|
+
updateId: number;
|
|
294
|
+
failureId: string;
|
|
295
|
+
action: TelegramUpdateJournalOperatorDispositionAction;
|
|
296
|
+
}
|
|
297
|
+
export interface TelegramUpdateJournalLegacyCustodyDispositionResult {
|
|
298
|
+
disposition: TelegramUpdateJournalLegacyCustodyDisposition;
|
|
299
|
+
duplicate: boolean;
|
|
300
|
+
entryCount: number;
|
|
301
|
+
serializedBytes: number;
|
|
302
|
+
}
|
|
303
|
+
export interface TelegramUpdateJournalOperatorDispositionResult {
|
|
304
|
+
disposition: TelegramUpdateJournalTerminalOperatorDisposition;
|
|
305
|
+
duplicate: boolean;
|
|
306
|
+
entryCount: number;
|
|
307
|
+
serializedBytes: number;
|
|
308
|
+
}
|
|
309
|
+
export interface TelegramUpdateJournalStore {
|
|
310
|
+
read(): TelegramUpdateJournalSnapshot;
|
|
311
|
+
appendBatch<TUpdate extends TelegramUpdateJournalInput>(updates: readonly TUpdate[], acceptedThroughUpdateId?: number): TelegramUpdateJournalAppendResult;
|
|
312
|
+
markQueued(receipt: TelegramUpdateJournalQueueReceipt): TelegramUpdateJournalQueueResult;
|
|
313
|
+
markExecutionFailure(input: TelegramUpdateJournalFailureInput): TelegramUpdateJournalFailureResult;
|
|
314
|
+
applyOperatorDisposition(input: TelegramUpdateJournalOperatorDispositionInput): TelegramUpdateJournalOperatorDispositionResult;
|
|
315
|
+
applyLegacyCustodyDisposition(authority: TelegramUpdateJournalLegacyCustodyDispositionAuthority): TelegramUpdateJournalLegacyCustodyDispositionResult;
|
|
316
|
+
offerQueuedHandoff(input: TelegramUpdateJournalQueueHandoffInput): TelegramUpdateJournalQueueHandoffOfferResult;
|
|
317
|
+
acceptQueuedHandoff(input: TelegramUpdateJournalQueueHandoffInput): TelegramUpdateJournalQueueHandoffAcceptResult;
|
|
318
|
+
cancelQueuedHandoff(input: TelegramUpdateJournalQueueHandoffInput): TelegramUpdateJournalQueueHandoffCancelResult;
|
|
319
|
+
completeQueued(receipts: readonly TelegramUpdateJournalQueuedCompletion[]): TelegramUpdateJournalRemoveResult;
|
|
320
|
+
discardQueued(input: TelegramUpdateJournalQueueDiscardInput): TelegramUpdateJournalQueueDiscardResult;
|
|
321
|
+
recoverDeadQueueOwner(input: TelegramUpdateJournalDeadQueueOwnerRecoveryInput): TelegramUpdateJournalDeadQueueOwnerRecoveryResult;
|
|
322
|
+
removeCompleted(updateIds: readonly number[]): TelegramUpdateJournalRemoveResult;
|
|
323
|
+
}
|
|
324
|
+
export type TelegramUpdateJournalPublicationBoundary = "before-write" | "after-write-before-rename";
|
|
325
|
+
export interface TelegramUpdateJournalRecoveryEvent {
|
|
326
|
+
kind: "repaired" | "reset";
|
|
327
|
+
path: string;
|
|
328
|
+
revision?: number;
|
|
329
|
+
quarantinePath?: string;
|
|
330
|
+
reason: string;
|
|
331
|
+
}
|
|
332
|
+
export interface TelegramUpdateJournalStoreOptions {
|
|
333
|
+
path: string;
|
|
334
|
+
profileName?: string;
|
|
335
|
+
botIdentity: TelegramUpdateJournalBotIdentity;
|
|
336
|
+
maxEntries?: number;
|
|
337
|
+
maxBytes?: number;
|
|
338
|
+
getNowMs?: () => number;
|
|
339
|
+
onRecovery?: (event: TelegramUpdateJournalRecoveryEvent) => void;
|
|
340
|
+
queueRuntimeIdentity?: TelegramUpdateJournalQueueRuntimeIdentity;
|
|
341
|
+
getQueueProcessLiveness?: (owner: TelegramUpdateJournalQueueProcessIdentity) => TelegramProcessLiveness;
|
|
342
|
+
/** Optional outer writer fence. Must authorize before source serialization/journal locking and must not perform journal I/O. */
|
|
343
|
+
withWriterAdmission?: <T>(operation: () => T) => T;
|
|
344
|
+
/** Explicit operator authority for quarantined legacy retry/failure disposition. Production omission disables mutation. */
|
|
345
|
+
authorizeLegacyCustodyDisposition?: (authority: TelegramUpdateJournalLegacyCustodyDispositionAuthority) => boolean;
|
|
346
|
+
/** Lock-only synchronous serialization, not source authorization or schema selection. Use the same config resource as admission hooks. */
|
|
347
|
+
withSourceSerialization?: <T>(operation: () => T) => T;
|
|
348
|
+
/** Opt-in strict consumption. Caller binds all gates to the same config resource and excludes other writers. */
|
|
349
|
+
sourceAccess?: {
|
|
350
|
+
directory: string;
|
|
351
|
+
limits: {
|
|
352
|
+
maxFiles: number;
|
|
353
|
+
maxBytes: number;
|
|
354
|
+
maxEntries: number;
|
|
355
|
+
maxWork: number;
|
|
356
|
+
};
|
|
357
|
+
};
|
|
358
|
+
/** Opt-in v2 for cursor-ordered polling admission only. Must hold config authority through synchronous publish. */
|
|
359
|
+
withPairingAdmission?: <T>(publish: (preApprovalExcluded: boolean) => T) => T;
|
|
360
|
+
/** Paired-only v1 gate over canonical inputs. Runs inside Workspace admission, before journal locking. */
|
|
361
|
+
withPairedAdmission?: <T>(updates: readonly TelegramJournaledUpdate[], publish: () => T) => {
|
|
362
|
+
admitted: false;
|
|
363
|
+
} | {
|
|
364
|
+
admitted: true;
|
|
365
|
+
value: T;
|
|
366
|
+
};
|
|
367
|
+
workspaceAdmission?: Pick<TelegramWorkspaceAdmissionLedger, "acquireAdmission" | "releaseAdmission">;
|
|
368
|
+
onPublicationBoundary?: (boundary: TelegramUpdateJournalPublicationBoundary, publicationPath: string) => void;
|
|
369
|
+
}
|
|
370
|
+
export interface TelegramInputJournalSourceReference {
|
|
371
|
+
journalBindingKey: string;
|
|
372
|
+
tokenSha256: string;
|
|
373
|
+
updateId: number;
|
|
374
|
+
}
|
|
375
|
+
export interface TelegramInputJournalReceipt extends TelegramInputJournalSourceReference {
|
|
376
|
+
owner: TelegramUpdateJournalQueueOwner;
|
|
377
|
+
}
|
|
378
|
+
export interface TelegramInputJournalReleaseResult {
|
|
379
|
+
released: boolean;
|
|
380
|
+
entryCount: number;
|
|
381
|
+
serializedBytes: number;
|
|
382
|
+
}
|
|
383
|
+
export interface TelegramInputJournalRecoveryInput {
|
|
384
|
+
receipt: TelegramInputJournalReceipt;
|
|
385
|
+
recoveryOwner: TelegramUpdateJournalQueueOwnerIdentity;
|
|
386
|
+
}
|
|
387
|
+
export interface TelegramInputJournalRecoveryResult {
|
|
388
|
+
status: "owner-alive" | "owner-unverifiable" | "unclaimed" | "recovered";
|
|
389
|
+
entryCount: number;
|
|
390
|
+
serializedBytes: number;
|
|
391
|
+
}
|
|
392
|
+
export interface TelegramInputJournalHandoffOfferInput {
|
|
393
|
+
receipt: TelegramInputJournalReceipt;
|
|
394
|
+
recipientOwner: TelegramUpdateJournalQueueOwnerIdentity;
|
|
395
|
+
handoffToken: string;
|
|
396
|
+
}
|
|
397
|
+
export interface TelegramInputJournalHandoffAcceptInput {
|
|
398
|
+
source: TelegramInputJournalSourceReference;
|
|
399
|
+
recipientOwner: TelegramUpdateJournalQueueOwnerIdentity;
|
|
400
|
+
handoffId: string;
|
|
401
|
+
}
|
|
402
|
+
export interface TelegramInputJournalHandoffCancelInput {
|
|
403
|
+
receipt: TelegramInputJournalReceipt;
|
|
404
|
+
recipientOwner: TelegramUpdateJournalQueueOwnerIdentity;
|
|
405
|
+
handoffId: string;
|
|
406
|
+
}
|
|
407
|
+
export interface TelegramInputJournalQueueInput {
|
|
408
|
+
queueKind: TelegramUpdateJournalQueueKind;
|
|
409
|
+
receiptId: string;
|
|
410
|
+
receipts: readonly TelegramInputJournalReceipt[];
|
|
411
|
+
}
|
|
412
|
+
export interface TelegramInputJournalQueueResult {
|
|
413
|
+
queued: boolean;
|
|
414
|
+
queueReceipt: TelegramUpdateJournalQueuedCompletion;
|
|
415
|
+
entryCount: number;
|
|
416
|
+
serializedBytes: number;
|
|
417
|
+
}
|
|
418
|
+
export interface TelegramInputJournalHandoffOfferResult {
|
|
419
|
+
source: TelegramInputJournalSourceReference;
|
|
420
|
+
handoff: TelegramUpdateJournalInputHandoff;
|
|
421
|
+
previousOwner: TelegramUpdateJournalQueueOwner;
|
|
422
|
+
duplicate: boolean;
|
|
423
|
+
entryCount: number;
|
|
424
|
+
serializedBytes: number;
|
|
425
|
+
}
|
|
426
|
+
export interface TelegramInputJournalHandoffAcceptResult {
|
|
427
|
+
handoffId: string;
|
|
428
|
+
previousOwner?: TelegramUpdateJournalQueueOwner;
|
|
429
|
+
receipt: TelegramInputJournalReceipt;
|
|
430
|
+
duplicate: boolean;
|
|
431
|
+
entryCount: number;
|
|
432
|
+
serializedBytes: number;
|
|
433
|
+
}
|
|
434
|
+
export interface TelegramInputJournalHandoffCancelResult {
|
|
435
|
+
handoffId: string;
|
|
436
|
+
previousOwner: TelegramUpdateJournalQueueOwner;
|
|
437
|
+
cancelled: boolean;
|
|
438
|
+
entryCount: number;
|
|
439
|
+
serializedBytes: number;
|
|
440
|
+
}
|
|
441
|
+
export interface TelegramInputJournalStore {
|
|
442
|
+
read: TelegramUpdateJournalStore["read"];
|
|
443
|
+
appendBatch: TelegramUpdateJournalStore["appendBatch"];
|
|
444
|
+
listLegacyCustodyCandidates(): TelegramUpdateJournalLegacyCustodyCandidate[];
|
|
445
|
+
applyLegacyCustodyDisposition: TelegramUpdateJournalStore["applyLegacyCustodyDisposition"];
|
|
446
|
+
/** Removes vetoed input only; an absent ID inside the retained cursor is a no-op, not completion evidence. */
|
|
447
|
+
removeExcluded(updateIds: readonly number[]): TelegramUpdateJournalRemoveResult;
|
|
448
|
+
acquireInput(input: {
|
|
449
|
+
updateId: number;
|
|
450
|
+
recipientBindingKey: string;
|
|
451
|
+
executionUpdate?: TelegramJournaledUpdate;
|
|
452
|
+
}): {
|
|
453
|
+
acquired: boolean;
|
|
454
|
+
receipt: TelegramInputJournalReceipt;
|
|
455
|
+
};
|
|
456
|
+
/** Returns this process's exact ready authority to the same unclaimed input. */
|
|
457
|
+
releaseInput(receipt: TelegramInputJournalReceipt): TelegramInputJournalReleaseResult;
|
|
458
|
+
/** Releases exact ready authority only after process-birth liveness proves its owner dead. */
|
|
459
|
+
recoverReadyInput(input: TelegramInputJournalRecoveryInput): TelegramInputJournalRecoveryResult;
|
|
460
|
+
/** Freezes exact ready donor authority around one persisted recipient offer. */
|
|
461
|
+
offerInputHandoff(input: TelegramInputJournalHandoffOfferInput): TelegramInputJournalHandoffOfferResult;
|
|
462
|
+
/** Replaces the offered donor with one exact ready recipient acquisition. */
|
|
463
|
+
acceptInputHandoff(input: TelegramInputJournalHandoffAcceptInput): TelegramInputJournalHandoffAcceptResult;
|
|
464
|
+
/** Unfreezes only the exact unaccepted donor offer. */
|
|
465
|
+
cancelInputHandoff(input: TelegramInputJournalHandoffCancelInput): TelegramInputJournalHandoffCancelResult;
|
|
466
|
+
/** Atomically replaces exact running raw acquisitions with one grouped Pi queue receipt. */
|
|
467
|
+
queueInputs(input: TelegramInputJournalQueueInput): TelegramInputJournalQueueResult;
|
|
468
|
+
completeQueued: TelegramUpdateJournalStore["completeQueued"];
|
|
469
|
+
discardQueued: TelegramUpdateJournalStore["discardQueued"];
|
|
470
|
+
recoverDeadQueueOwner: TelegramUpdateJournalStore["recoverDeadQueueOwner"];
|
|
471
|
+
offerQueuedHandoff: TelegramUpdateJournalStore["offerQueuedHandoff"];
|
|
472
|
+
acceptQueuedHandoff: TelegramUpdateJournalStore["acceptQueuedHandoff"];
|
|
473
|
+
cancelQueuedHandoff: TelegramUpdateJournalStore["cancelQueuedHandoff"];
|
|
474
|
+
/** One durable start transition, not proof that an external effect ran. Publication errors may be commit-unknown. */
|
|
475
|
+
startInput(receipt: TelegramInputJournalReceipt): {
|
|
476
|
+
started: false;
|
|
477
|
+
} | {
|
|
478
|
+
started: true;
|
|
479
|
+
update: TelegramJournaledUpdate;
|
|
480
|
+
};
|
|
481
|
+
completeInput(receipt: TelegramInputJournalReceipt): TelegramUpdateJournalRemoveResult;
|
|
482
|
+
}
|
|
483
|
+
export interface TelegramInputJournalContext {
|
|
484
|
+
owner: TelegramUpdateJournalQueueOwnerIdentity;
|
|
485
|
+
recipientBindingKey: string;
|
|
486
|
+
}
|
|
487
|
+
export type TelegramInputJournalStoreOptions = Omit<TelegramUpdateJournalStoreOptions, "withPairedAdmission"> & Required<Pick<TelegramUpdateJournalStoreOptions, "sourceAccess" | "withSourceSerialization" | "withPairingAdmission" | "queueRuntimeIdentity">> & {
|
|
488
|
+
/** Bound originating profile/token/session/recipient context, not transport role; undefined revokes acquisition/start/transfer. */
|
|
489
|
+
getInputContext: () => TelegramInputJournalContext | undefined;
|
|
490
|
+
};
|
|
491
|
+
export interface TelegramUpdateJournalSegment {
|
|
492
|
+
version: TelegramUpdateJournalFile["version"];
|
|
493
|
+
revision: number;
|
|
494
|
+
previousRevision: number;
|
|
495
|
+
acceptedThroughUpdateId?: number;
|
|
496
|
+
profile: string;
|
|
497
|
+
botIdentity: TelegramUpdateJournalBotIdentity;
|
|
498
|
+
upsertedEntries: TelegramUpdateJournalEntry[];
|
|
499
|
+
removedUpdateIds: number[];
|
|
500
|
+
operatorDispositions?: TelegramUpdateJournalOperatorDisposition[];
|
|
501
|
+
}
|
|
502
|
+
export interface TelegramUpdateJournalSegmentPublicationResult {
|
|
503
|
+
path: string;
|
|
504
|
+
revision: number;
|
|
505
|
+
serializedBytes: number;
|
|
506
|
+
}
|
|
507
|
+
export declare function parseTelegramUpdateJournalQueueOwner(value: unknown): TelegramUpdateJournalQueueOwner | undefined;
|
|
508
|
+
export declare function isTelegramUpdateJournalQueueOwnerProcess(owner: TelegramUpdateJournalQueueOwner, identity: TelegramUpdateJournalQueueOwnerIdentity): boolean;
|
|
509
|
+
export declare function areTelegramUpdateJournalQueueOwnersEqual(left: TelegramUpdateJournalQueueOwner, right: TelegramUpdateJournalQueueOwner): boolean;
|
|
510
|
+
/**
|
|
511
|
+
* Isolated evidence only: caller must serialize/quiesce writers before inspection
|
|
512
|
+
* and consumption. Metadata checks detect observable changes, not hostile same-user
|
|
513
|
+
* swaps or whole-profile completeness. No locks, recovery, or publication occurs.
|
|
514
|
+
* maxFiles counts snapshot + every enumerated segment entry (one overflow witness).
|
|
515
|
+
* maxBytes aggregates all retained bytes. maxEntries bounds each raw collection and
|
|
516
|
+
* reconstructed collection; maxWork charges each raw/revalidated collection element.
|
|
517
|
+
* JSON allocation is bounded by maxBytes before decoding; collections before codecs.
|
|
518
|
+
*/
|
|
519
|
+
export declare function inspectTelegramInputCustodySourceStatus(input: Parameters<typeof inspectTelegramUpdateJournalFamily>[0]): "absent" | "v3" | "legacy" | "unsupported" | "ambiguous";
|
|
520
|
+
export declare function inspectTelegramUpdateJournalFamily(input: {
|
|
521
|
+
directory: string;
|
|
522
|
+
path: string;
|
|
523
|
+
profile: string;
|
|
524
|
+
botIdentity: TelegramUpdateJournalBotIdentity;
|
|
525
|
+
limits: {
|
|
526
|
+
maxFiles: number;
|
|
527
|
+
maxBytes: number;
|
|
528
|
+
maxEntries: number;
|
|
529
|
+
maxWork: number;
|
|
530
|
+
};
|
|
531
|
+
}): {
|
|
532
|
+
kind: "absent";
|
|
533
|
+
} | {
|
|
534
|
+
kind: "present";
|
|
535
|
+
file: TelegramUpdateJournalFile;
|
|
536
|
+
/** Validation constraint includes the caller's input, not only observed IDs. */
|
|
537
|
+
knownBotId?: number;
|
|
538
|
+
accounting: {
|
|
539
|
+
files: number;
|
|
540
|
+
bytes: number;
|
|
541
|
+
work: number;
|
|
542
|
+
};
|
|
543
|
+
};
|
|
544
|
+
/**
|
|
545
|
+
* Read-only source evidence for cooperating writers serialized by the caller through
|
|
546
|
+
* consumption; never readiness, recovery, or permission to publish. Ancestors retain
|
|
547
|
+
* canonical directory type and endpoint dev/ino/mode/uid/gid, tolerating sibling churn.
|
|
548
|
+
* This deliberately loses ancestor size/nlink/mtime/ctime witnesses: no transient
|
|
549
|
+
* namespace/permission/ACL continuity, inode-ABA resistance, or hostile-same-user
|
|
550
|
+
* protection. Manual relocation/restore/security manipulation is outside the protocol.
|
|
551
|
+
* Files and the segment directory retain full inspection checks and bounded census.
|
|
552
|
+
* Identity is never enriched; accounting is physical inspection work, not store capacity.
|
|
553
|
+
*/
|
|
554
|
+
export declare function readTelegramUpdateJournalSource(input: Parameters<typeof inspectTelegramUpdateJournalFamily>[0] & {
|
|
555
|
+
version: TelegramUpdateJournalFile["version"];
|
|
556
|
+
}): ReturnType<typeof inspectTelegramUpdateJournalFamily>;
|
|
557
|
+
/**
|
|
558
|
+
* Canonical namespace evidence only, never source readiness or authorization.
|
|
559
|
+
* Caller-proven serialization/quiescence is mandatory through consumption.
|
|
560
|
+
* Recensus detects observable changes, not hostile same-user path swaps; arbitrary
|
|
561
|
+
* consumer references and archive consumption require separate audits.
|
|
562
|
+
*/
|
|
563
|
+
export declare function inspectTelegramProfileJournalNamespace(input: {
|
|
564
|
+
directory: string;
|
|
565
|
+
profile: string;
|
|
566
|
+
botIdentity: TelegramUpdateJournalBotIdentity;
|
|
567
|
+
limits: {
|
|
568
|
+
maxDirectoryEntries: number;
|
|
569
|
+
maxFiles: number;
|
|
570
|
+
maxBytes: number;
|
|
571
|
+
maxEntries: number;
|
|
572
|
+
maxWork: number;
|
|
573
|
+
};
|
|
574
|
+
}): {
|
|
575
|
+
sources: {
|
|
576
|
+
role: "polling" | "follower";
|
|
577
|
+
path: string;
|
|
578
|
+
evidence: ReturnType<typeof inspectTelegramUpdateJournalFamily>;
|
|
579
|
+
}[];
|
|
580
|
+
accounting: {
|
|
581
|
+
directoryEntries: number;
|
|
582
|
+
files: number;
|
|
583
|
+
bytes: number;
|
|
584
|
+
work: number;
|
|
585
|
+
};
|
|
586
|
+
knownBotId?: number;
|
|
587
|
+
};
|
|
588
|
+
export declare function publishTelegramUpdateJournalSegment(path: string, segment: TelegramUpdateJournalSegment): TelegramUpdateJournalSegmentPublicationResult;
|
|
589
|
+
export declare function createTelegramUpdateQueueHandoffToken(): string;
|
|
590
|
+
export declare function createTelegramUpdateJournalBotIdentity(input: {
|
|
591
|
+
botToken: string;
|
|
592
|
+
botId?: number;
|
|
593
|
+
}): TelegramUpdateJournalBotIdentity;
|
|
594
|
+
export declare function createTelegramUpdateJournalReceiptScope(input: {
|
|
595
|
+
profileName?: string;
|
|
596
|
+
botIdentity: TelegramUpdateJournalBotIdentity;
|
|
597
|
+
}): string;
|
|
598
|
+
export declare function createTelegramUpdateJournalBindingKey(input: {
|
|
599
|
+
path: string;
|
|
600
|
+
profileName?: string;
|
|
601
|
+
botIdentity: TelegramUpdateJournalBotIdentity;
|
|
602
|
+
}): string;
|
|
603
|
+
export declare function getTelegramUpdateJournalBindingPath(journalBindingKey: string): string | undefined;
|
|
604
|
+
export declare function createTelegramUpdateJournalReceiptScopeResolver(deps: {
|
|
605
|
+
getProfileName: () => string | undefined;
|
|
606
|
+
getBotToken: () => string | undefined;
|
|
607
|
+
getBotId: () => number | undefined;
|
|
608
|
+
}): () => string | undefined;
|
|
609
|
+
export interface TelegramUpdateJournalRuntimeBinding {
|
|
610
|
+
runtimeKey: string;
|
|
611
|
+
recoveryKey: string;
|
|
612
|
+
journal: TelegramUpdateJournalStore;
|
|
613
|
+
}
|
|
614
|
+
export interface TelegramUpdateJournalRuntimeBindingResolverDeps {
|
|
615
|
+
getProfileName: () => string | undefined;
|
|
616
|
+
getBotToken: () => string | undefined;
|
|
617
|
+
getBotId: () => number | undefined;
|
|
618
|
+
getJournalPath: (profileName?: string) => string;
|
|
619
|
+
getQueueRuntimeIdentity?: () => TelegramUpdateJournalQueueRuntimeIdentity;
|
|
620
|
+
withWriterAdmission?: <T>(operation: () => T) => T;
|
|
621
|
+
getWorkspaceAdmission?: () => Pick<TelegramWorkspaceAdmissionLedger, "acquireAdmission" | "releaseAdmission"> | undefined;
|
|
622
|
+
onRecovery?: (event: TelegramUpdateJournalRecoveryEvent) => void;
|
|
623
|
+
}
|
|
624
|
+
export declare function createTelegramUpdateJournalRuntimeBindingResolver(deps: TelegramUpdateJournalRuntimeBindingResolverDeps): () => TelegramUpdateJournalRuntimeBinding | undefined;
|
|
625
|
+
export type TelegramUpdateJournalReferenceClass = "leader-lifecycle" | "follower-lifecycle" | "polling-cursor" | "polling-bootstrap" | "workspace-retirement" | "operator-disposition";
|
|
626
|
+
export declare function createTelegramUpdateJournalReferenceRegistry(input?: {
|
|
627
|
+
maxActive?: number;
|
|
628
|
+
}): {
|
|
629
|
+
acquire(reference: {
|
|
630
|
+
referenceClass: TelegramUpdateJournalReferenceClass;
|
|
631
|
+
recoveryKey: string;
|
|
632
|
+
}): () => void;
|
|
633
|
+
list: () => {
|
|
634
|
+
referenceClass: TelegramUpdateJournalReferenceClass;
|
|
635
|
+
recoveryKey: string;
|
|
636
|
+
}[];
|
|
637
|
+
withReference<T>(reference: {
|
|
638
|
+
referenceClass: TelegramUpdateJournalReferenceClass;
|
|
639
|
+
recoveryKey: string;
|
|
640
|
+
}, operation: () => T): T;
|
|
641
|
+
};
|
|
642
|
+
export declare function withTelegramResolvedUpdateJournalReference<T>(input: {
|
|
643
|
+
registry: ReturnType<typeof createTelegramUpdateJournalReferenceRegistry>;
|
|
644
|
+
resolveBinding(): TelegramUpdateJournalRuntimeBinding | undefined;
|
|
645
|
+
referenceClass: TelegramUpdateJournalReferenceClass;
|
|
646
|
+
operation(binding: TelegramUpdateJournalRuntimeBinding): T;
|
|
647
|
+
}): T | undefined;
|
|
648
|
+
export interface TelegramUpdateJournalBindingRuntime {
|
|
649
|
+
resolveLeader: () => TelegramUpdateJournalRuntimeBinding | undefined;
|
|
650
|
+
resolveFollower: () => TelegramUpdateJournalRuntimeBinding | undefined;
|
|
651
|
+
resolveActive: () => TelegramUpdateJournalRuntimeBinding | undefined;
|
|
652
|
+
getActiveRecoveryKey: () => string | undefined;
|
|
653
|
+
createRecipientResolver: (recipientBindingKey: string) => () => TelegramUpdateJournalRuntimeBinding | undefined;
|
|
654
|
+
createPathResolver: (path: string) => () => TelegramUpdateJournalRuntimeBinding | undefined;
|
|
655
|
+
}
|
|
656
|
+
export declare function createTelegramUpdateJournalBindingRuntime(deps: {
|
|
657
|
+
base: Omit<TelegramUpdateJournalRuntimeBindingResolverDeps, "getJournalPath">;
|
|
658
|
+
getLeaderJournalPath: (profileName?: string) => string;
|
|
659
|
+
getFollowerJournalPath: (bindingKey: string, profileName?: string) => string;
|
|
660
|
+
getActiveFollowerBindingKey: () => string;
|
|
661
|
+
isFollowerRegistered: () => boolean;
|
|
662
|
+
}): TelegramUpdateJournalBindingRuntime;
|
|
663
|
+
export declare function createTelegramUpdateJournalStore(options: TelegramUpdateJournalStoreOptions): TelegramUpdateJournalStore;
|
|
664
|
+
/** Opt-in v3 only; does not migrate old files or expose legacy unowned mutation ports. */
|
|
665
|
+
export declare function createTelegramInputJournalStore(options: TelegramInputJournalStoreOptions): TelegramInputJournalStore;
|