@yefengr/remote-pi 0.8.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,7 @@ type GenerationProvider = (sessionManager: SessionManager) => string;
5
5
  type HistorySyncRequest = {
6
6
  requestId: string;
7
7
  targetChannelId: string;
8
- before: string | null;
8
+ before: number | null;
9
9
  limit?: number;
10
10
  };
11
11
  export type TimelineHistorySync = HistorySyncRequest;
@@ -14,13 +14,11 @@ export type TimelineHistoryGenerationProvider = GenerationProvider;
14
14
  export declare class TimelineHistoryPager {
15
15
  private readonly sessionManager;
16
16
  private readonly recoverFn;
17
- private readonly cursors;
18
- private initialBusy;
19
17
  private readonly generationProvider;
20
18
  constructor(sessionManager: SessionManager, recoverFn: RecoveryFn, generationProvider?: GenerationProvider);
21
19
  sync(request: HistorySyncRequest): ServerFrame[];
22
- private syncInitial;
23
- private page;
20
+ private validateRequest;
21
+ private captureSnapshot;
24
22
  private snapshotInvalidReason;
25
23
  private recoverRecords;
26
24
  private selectWindow;
@@ -28,7 +26,6 @@ export declare class TimelineHistoryPager {
28
26
  private makeChunk;
29
27
  private nonFinalFrameBytes;
30
28
  private finalFrameBytes;
31
- private issueCursor;
32
29
  private protocolError;
33
30
  private reset;
34
31
  }
@@ -1,12 +1,8 @@
1
- import { randomBytes } from "node:crypto";
2
1
  import { encodeServerFrameV2, getUtf8ByteLengthV2, MAX_FRAGMENT_DECODE_BYTES, MAX_HISTORY_CHUNK_BYTES, MAX_WINDOW_DECODE_BYTES, TimelineEventSchema, } from "../protocol/v2/index.js";
3
- const MAX_GROUPS_PER_PAGE = 5;
4
- const TIMELINE_MARKER = "remote-pi:timeline-v2";
2
+ const DEFAULT_EVENTS_PER_PAGE = 80;
5
3
  export class TimelineHistoryPager {
6
4
  sessionManager;
7
5
  recoverFn;
8
- cursors = new Map();
9
- initialBusy = false;
10
6
  generationProvider;
11
7
  constructor(sessionManager, recoverFn, generationProvider) {
12
8
  this.sessionManager = sessionManager;
@@ -14,231 +10,125 @@ export class TimelineHistoryPager {
14
10
  this.generationProvider = generationProvider ?? ((manager) => manager.getSessionId());
15
11
  }
16
12
  sync(request) {
17
- const sessionId = this.sessionManager.getSessionId();
18
- const historyGeneration = this.generationProvider(this.sessionManager);
19
- if (request.before === null) {
20
- if (this.initialBusy) {
21
- return [this.protocolError(request, "invalid_cursor", "initial cursor is busy")];
22
- }
23
- this.initialBusy = true;
24
- try {
25
- return this.syncInitial(request, sessionId, historyGeneration);
26
- }
27
- finally {
28
- this.initialBusy = false;
29
- }
30
- }
31
- const cursor = this.cursors.get(request.before);
32
- if (!cursor) {
33
- return [this.reset(request, sessionId, historyGeneration, "invalid_cursor")];
34
- }
35
- if (cursor.busy) {
36
- return [this.protocolError(request, "invalid_cursor", "cursor is busy")];
37
- }
38
- if (cursor.used) {
39
- return [this.reset(request, sessionId, historyGeneration, "invalid_cursor")];
40
- }
41
- cursor.busy = true;
42
- cursor.used = true;
43
- try {
44
- if (cursor.sessionId !== sessionId) {
45
- return [this.reset(request, sessionId, historyGeneration, "session_replaced")];
46
- }
47
- if (cursor.historyGeneration !== historyGeneration) {
48
- return [this.reset(request, sessionId, historyGeneration, "generation_changed")];
49
- }
50
- const branchReason = this.snapshotInvalidReason(cursor);
51
- if (branchReason) {
52
- return [this.reset(request, sessionId, historyGeneration, branchReason)];
53
- }
54
- return this.page(request, cursor);
55
- }
56
- finally {
57
- cursor.busy = false;
58
- }
59
- }
60
- syncInitial(request, sessionId, historyGeneration) {
61
- const branch = this.sessionManager.getBranch();
62
- const snapshotHead = this.sessionManager.getLeafId() ?? sessionId;
63
- if (branch.length > 0 && branch.at(-1)?.id !== snapshotHead) {
13
+ const invalidRequest = this.validateRequest(request);
14
+ if (invalidRequest)
15
+ return [invalidRequest];
16
+ const snapshot = this.captureSnapshot();
17
+ if (!snapshot) {
64
18
  return [this.protocolError(request, "reset_required", "session has no current snapshot head")];
65
19
  }
66
- const cursor = {
67
- sessionId,
68
- historyGeneration,
69
- snapshotHead,
70
- branchEntryIds: branch.map((entry) => entry.id),
71
- position: branch.length,
72
- used: true,
73
- busy: true,
74
- };
75
- try {
76
- return this.page(request, cursor);
77
- }
78
- finally {
79
- cursor.busy = false;
80
- }
81
- }
82
- page(request, cursor) {
83
- const reason = this.snapshotInvalidReason(cursor);
84
- if (reason) {
85
- return [this.reset(request, cursor.sessionId, cursor.historyGeneration, reason)];
86
- }
87
20
  let records;
88
21
  try {
89
- records = this.recoverRecords(cursor);
22
+ records = this.recoverRecords(snapshot);
90
23
  }
91
- catch (error) {
92
- if (error instanceof HistoryTooLargeError) {
93
- return [this.protocolError(request, "too_large", error.message)];
94
- }
24
+ catch {
95
25
  return [this.protocolError(request, "internal_error", "history recovery failed")];
96
26
  }
97
- const afterRecoveryReason = this.snapshotInvalidReason(cursor);
98
- if (afterRecoveryReason) {
99
- return [this.reset(request, cursor.sessionId, cursor.historyGeneration, afterRecoveryReason)];
27
+ const changed = this.snapshotInvalidReason(snapshot);
28
+ if (changed)
29
+ return [this.reset(request, snapshot, changed)];
30
+ const headSeq = records.length;
31
+ const before = request.before ?? headSeq + 1;
32
+ if (before > headSeq + 1) {
33
+ return [this.protocolError(request, "invalid_cursor", "history boundary is beyond the current head")];
100
34
  }
101
- const window = this.selectWindow(records, cursor.position, request.limit);
35
+ const window = this.selectWindow(records, before, request.limit ?? DEFAULT_EVENTS_PER_PAGE);
102
36
  if (window.kind === "error") {
103
37
  return [this.protocolError(request, "too_large", window.message)];
104
38
  }
105
- const hasOlder = records.some((record) => record.position < window.nextPosition);
106
- const nextCursor = hasOlder
107
- ? this.issueCursor({
108
- sessionId: cursor.sessionId,
109
- historyGeneration: cursor.historyGeneration,
110
- snapshotHead: cursor.snapshotHead,
111
- branchEntryIds: cursor.branchEntryIds,
112
- position: window.nextPosition,
113
- used: false,
114
- busy: false,
115
- })
116
- : undefined;
39
+ const nextBefore = window.records[0]?.event.event_seq;
40
+ const eos = window.records.length === 0 || nextBefore === 1;
117
41
  try {
118
- const frames = this.fragmentWindow(request, cursor, window.records, nextCursor);
119
- if (nextCursor)
120
- this.cursors.set(nextCursor, this.cursors.get(nextCursor));
121
- return frames;
42
+ return this.fragmentWindow(request, snapshot, window.records, eos ? undefined : nextBefore);
122
43
  }
123
44
  catch (error) {
124
- if (nextCursor)
125
- this.cursors.delete(nextCursor);
126
45
  const message = error instanceof Error ? error.message : "history chunk construction failed";
127
46
  return [this.protocolError(request, "too_large", message)];
128
47
  }
129
48
  }
130
- snapshotInvalidReason(cursor) {
131
- if (this.sessionManager.getSessionId() !== cursor.sessionId)
49
+ validateRequest(request) {
50
+ if (request.before !== null && (!Number.isSafeInteger(request.before) || request.before < 1)) {
51
+ return this.protocolError(request, "invalid_cursor", "history boundary must be a positive safe integer or null");
52
+ }
53
+ if (request.limit !== undefined && (!Number.isInteger(request.limit) || request.limit < 1 || request.limit > 80)) {
54
+ return this.protocolError(request, "invalid_cursor", "history limit must be an integer from 1 through 80");
55
+ }
56
+ return null;
57
+ }
58
+ captureSnapshot() {
59
+ const sessionId = this.sessionManager.getSessionId();
60
+ const branch = this.sessionManager.getBranch();
61
+ const snapshotHead = this.sessionManager.getLeafId() ?? sessionId;
62
+ if (branch.length > 0 && branch.at(-1)?.id !== snapshotHead)
63
+ return null;
64
+ return {
65
+ sessionId,
66
+ historyGeneration: this.generationProvider(this.sessionManager),
67
+ snapshotHead,
68
+ branchEntryIds: branch.map((entry) => entry.id),
69
+ };
70
+ }
71
+ snapshotInvalidReason(snapshot) {
72
+ if (this.sessionManager.getSessionId() !== snapshot.sessionId)
132
73
  return "session_replaced";
133
- if (this.generationProvider(this.sessionManager) !== cursor.historyGeneration)
74
+ if (this.generationProvider(this.sessionManager) !== snapshot.historyGeneration)
134
75
  return "generation_changed";
135
- const currentBranch = this.sessionManager.getBranch();
136
- const snapshotIndex = currentBranch.findIndex((entry) => entry.id === cursor.snapshotHead);
137
- if (snapshotIndex < 0 && !(cursor.branchEntryIds.length === 0 && cursor.snapshotHead === cursor.sessionId && currentBranch.length === 0))
138
- return "branch_changed";
139
- const currentPrefix = currentBranch.slice(0, cursor.branchEntryIds.length).map((entry) => entry.id);
140
- if (!sameIds(currentPrefix, cursor.branchEntryIds))
76
+ const currentIds = this.sessionManager.getBranch().map((entry) => entry.id);
77
+ if (!sameIds(currentIds, snapshot.branchEntryIds))
141
78
  return "branch_changed";
142
- const frozenBranch = this.sessionManager.getBranch(cursor.snapshotHead).map((entry) => entry.id);
143
- if (!sameIds(frozenBranch, cursor.branchEntryIds))
144
- return "branch_changed";
145
- return null;
79
+ if (snapshot.branchEntryIds.length === 0 && snapshot.snapshotHead === snapshot.sessionId)
80
+ return null;
81
+ const frozenIds = this.sessionManager.getBranch(snapshot.snapshotHead).map((entry) => entry.id);
82
+ return sameIds(frozenIds, snapshot.branchEntryIds) ? null : "branch_changed";
146
83
  }
147
- recoverRecords(cursor) {
148
- if (cursor.branchEntryIds.length === 0 && cursor.snapshotHead === cursor.sessionId)
149
- return [];
150
- const branch = this.sessionManager.getBranch(cursor.snapshotHead);
151
- const positions = new Map();
152
- for (const [position, entry] of branch.entries()) {
153
- positions.set(entry.id, position);
154
- if (entry.type === "message")
155
- positions.set(`legacy:${entry.id}`, position);
156
- if (entry.type === "custom" && entry.customType === TIMELINE_MARKER) {
157
- const eventId = markerEventId(entry);
158
- if (eventId)
159
- positions.set(eventId, position);
160
- }
161
- }
84
+ recoverRecords(snapshot) {
162
85
  const records = [];
163
- const recovered = this.recoverFn(this.sessionManager);
164
- for (const [order, rawEvent] of recovered.entries()) {
86
+ const eventIds = new Set();
87
+ const sequences = new Set();
88
+ for (const rawEvent of this.recoverFn(this.sessionManager)) {
165
89
  const parsed = TimelineEventSchema.safeParse(rawEvent);
166
- if (!parsed.success)
167
- throw new Error("recovery returned an invalid timeline event");
90
+ if (!parsed.success || parsed.data.event_seq === undefined)
91
+ throw new Error("recovery returned an unsequenced timeline event");
168
92
  const event = parsed.data;
169
- const position = positions.get(event.event_id);
170
- if (position === undefined || position >= cursor.position)
171
- continue;
172
- records.push({ event, position, order, bytes: getUtf8ByteLengthV2(event) });
173
- }
174
- return records.sort((left, right) => left.position - right.position || left.order - right.order);
175
- }
176
- selectWindow(records, position, limit = MAX_GROUPS_PER_PAGE) {
177
- const groupLimit = normalizeLimit(limit);
178
- const groups = new Map();
179
- const systems = [];
180
- for (const record of records) {
181
- if (isSystemEvent(record.event)) {
182
- systems.push(record);
183
- continue;
184
- }
185
- const groupId = record.event.group_id;
186
- const existing = groups.get(groupId);
187
- if (existing) {
188
- existing.records.push(record);
189
- existing.bytes += record.bytes;
190
- }
191
- else {
192
- groups.set(groupId, {
193
- groupId,
194
- firstPosition: record.position,
195
- records: [record],
196
- bytes: record.bytes,
197
- });
198
- }
199
- }
200
- const orderedGroups = [...groups.values()]
201
- .filter((group) => group.firstPosition < position)
202
- .sort((left, right) => left.firstPosition - right.firstPosition);
203
- let selected = orderedGroups.slice(-groupLimit);
204
- if (selected.length > 0) {
205
- while (selected.length > 0) {
206
- const firstPosition = selected[0].firstPosition;
207
- const selectedSystems = systems.filter((record) => record.position >= firstPosition && record.position < position);
208
- const selectedRecords = [...selected.flatMap((group) => group.records), ...selectedSystems]
209
- .sort((left, right) => left.position - right.position || left.order - right.order);
210
- const bytes = selectedRecords.reduce((total, record) => total + record.bytes, 0);
211
- if (bytes <= MAX_WINDOW_DECODE_BYTES) {
212
- return { kind: "ok", records: selectedRecords, nextPosition: firstPosition };
213
- }
214
- if (selected.length === 1) {
215
- return { kind: "error", message: `group ${selected[0].groupId} exceeds ${MAX_WINDOW_DECODE_BYTES} bytes` };
216
- }
217
- selected = selected.slice(1);
218
- }
219
- }
220
- const selectedSystems = systems.filter((record) => record.position < position);
221
- if (selectedSystems.length === 0) {
222
- return { kind: "ok", records: [], nextPosition: 0 };
223
- }
224
- const systemBytes = selectedSystems.reduce((total, record) => total + record.bytes, 0);
225
- if (systemBytes > MAX_WINDOW_DECODE_BYTES) {
226
- return { kind: "error", message: `system history exceeds ${MAX_WINDOW_DECODE_BYTES} bytes` };
227
- }
228
- const nextPosition = Math.min(...selectedSystems.map((record) => record.position));
229
- return {
230
- kind: "ok",
231
- records: [...selectedSystems].sort((left, right) => left.position - right.position || left.order - right.order),
232
- nextPosition,
233
- };
234
- }
235
- fragmentWindow(request, cursor, records, nextBefore) {
236
- const tailOverhead = this.finalFrameBytes(request, cursor, { events: [], fragments: [] }, nextBefore)
237
- - this.nonFinalFrameBytes(request, cursor, { events: [], fragments: [] });
238
- const contentLimit = MAX_HISTORY_CHUNK_BYTES - tailOverhead;
93
+ if (event.session_id !== snapshot.sessionId || event.history_generation !== snapshot.historyGeneration) {
94
+ throw new Error("recovery returned an event outside the snapshot scope");
95
+ }
96
+ if (eventIds.has(event.event_id) || sequences.has(event.event_seq)) {
97
+ throw new Error("recovery returned duplicate timeline identity");
98
+ }
99
+ eventIds.add(event.event_id);
100
+ sequences.add(event.event_seq);
101
+ records.push({ event, bytes: getUtf8ByteLengthV2(event) });
102
+ }
103
+ records.sort((left, right) => left.event.event_seq - right.event.event_seq);
104
+ if (records.some((record, index) => record.event.event_seq !== index + 1)) {
105
+ throw new Error("recovery returned a non-dense timeline sequence");
106
+ }
107
+ return records;
108
+ }
109
+ selectWindow(records, before, limit) {
110
+ const lower = Math.max(1, before - limit);
111
+ const requested = records.filter((record) => record.event.event_seq >= lower && record.event.event_seq < before);
112
+ const selected = [];
113
+ let bytes = 0;
114
+ for (let index = requested.length - 1; index >= 0; index -= 1) {
115
+ const record = requested[index];
116
+ if (record.bytes > MAX_WINDOW_DECODE_BYTES) {
117
+ return { kind: "error", message: `event ${record.event.event_id} exceeds ${MAX_WINDOW_DECODE_BYTES} bytes` };
118
+ }
119
+ if (bytes + record.bytes > MAX_WINDOW_DECODE_BYTES)
120
+ break;
121
+ selected.unshift(record);
122
+ bytes += record.bytes;
123
+ }
124
+ return { kind: "ok", records: selected };
125
+ }
126
+ fragmentWindow(request, snapshot, records, nextBefore) {
127
+ const tailOverhead = this.finalFrameBytes(request, snapshot, { events: [], fragments: [] }, nextBefore)
128
+ - this.nonFinalFrameBytes(request, snapshot, { events: [], fragments: [] });
239
129
  const items = [];
240
130
  for (const record of records) {
241
- const fullFrame = this.makeChunk(request, cursor, { events: [record.event], fragments: [] }, true, nextBefore);
131
+ const fullFrame = this.makeChunk(request, snapshot, { events: [record.event], fragments: [] }, true, nextBefore);
242
132
  if (getUtf8ByteLengthV2(fullFrame) <= MAX_HISTORY_CHUNK_BYTES) {
243
133
  items.push({ kind: "event", event: record.event });
244
134
  continue;
@@ -262,7 +152,7 @@ export class TimelineHistoryPager {
262
152
  for (const item of items) {
263
153
  const repeatedFragment = item.kind === "fragment" && current.fragments.some((fragment) => fragment.event_id === item.eventId);
264
154
  const candidate = appendItem(current, item);
265
- if (!repeatedFragment && this.nonFinalFrameBytes(request, cursor, candidate) + tailOverhead <= contentLimit + tailOverhead) {
155
+ if (!repeatedFragment && this.nonFinalFrameBytes(request, snapshot, candidate) + tailOverhead <= MAX_HISTORY_CHUNK_BYTES) {
266
156
  current = candidate;
267
157
  continue;
268
158
  }
@@ -276,44 +166,38 @@ export class TimelineHistoryPager {
276
166
  payloads.push(current);
277
167
  return payloads.map((payload, chunkIndex) => {
278
168
  const final = chunkIndex === payloads.length - 1;
279
- const frame = this.makeChunk(request, cursor, payload, final, nextBefore, chunkIndex);
280
- if (getUtf8ByteLengthV2(frame) > MAX_HISTORY_CHUNK_BYTES) {
169
+ const frame = this.makeChunk(request, snapshot, payload, final, nextBefore, chunkIndex);
170
+ if (getUtf8ByteLengthV2(frame) > MAX_HISTORY_CHUNK_BYTES)
281
171
  throw new HistoryTooLargeError("history chunk exceeds 512 KiB");
282
- }
283
172
  encodeServerFrameV2(frame);
284
173
  return frame;
285
174
  });
286
175
  }
287
- makeChunk(request, cursor, payload, final, nextBefore, chunkIndex = 0) {
176
+ makeChunk(request, snapshot, payload, final, nextBefore, chunkIndex = 0) {
288
177
  const tail = final
289
- ? nextBefore
290
- ? { final_chunk: true, eos: false, next_before: nextBefore }
291
- : { final_chunk: true, eos: true }
178
+ ? nextBefore === undefined
179
+ ? { final_chunk: true, eos: true }
180
+ : { final_chunk: true, eos: false, next_before: nextBefore }
292
181
  : { final_chunk: false };
293
182
  return {
294
183
  protocol_version: 2,
295
184
  type: "session_history_chunk",
296
185
  target_channel_id: request.targetChannelId,
297
186
  in_reply_to: request.requestId,
298
- session_id: cursor.sessionId,
299
- history_generation: cursor.historyGeneration,
300
- snapshot_head: cursor.snapshotHead,
187
+ session_id: snapshot.sessionId,
188
+ history_generation: snapshot.historyGeneration,
189
+ snapshot_head: snapshot.snapshotHead,
301
190
  chunk_index: chunkIndex,
302
191
  events: payload.events,
303
192
  fragments: payload.fragments,
304
193
  ...tail,
305
194
  };
306
195
  }
307
- nonFinalFrameBytes(request, cursor, payload) {
308
- return getUtf8ByteLengthV2(this.makeChunk(request, cursor, payload, false, undefined));
309
- }
310
- finalFrameBytes(request, cursor, payload, nextBefore) {
311
- return getUtf8ByteLengthV2(this.makeChunk(request, cursor, payload, true, nextBefore));
196
+ nonFinalFrameBytes(request, snapshot, payload) {
197
+ return getUtf8ByteLengthV2(this.makeChunk(request, snapshot, payload, false, undefined));
312
198
  }
313
- issueCursor(state) {
314
- const token = randomBytes(32).toString("base64url");
315
- this.cursors.set(token, state);
316
- return token;
199
+ finalFrameBytes(request, snapshot, payload, nextBefore) {
200
+ return getUtf8ByteLengthV2(this.makeChunk(request, snapshot, payload, true, nextBefore));
317
201
  }
318
202
  protocolError(request, code, message) {
319
203
  return {
@@ -325,13 +209,13 @@ export class TimelineHistoryPager {
325
209
  message,
326
210
  };
327
211
  }
328
- reset(request, sessionId, historyGeneration, reason) {
212
+ reset(request, snapshot, reason) {
329
213
  return {
330
214
  protocol_version: 2,
331
215
  type: "reset",
332
216
  target_channel_id: request.targetChannelId,
333
- session_id: sessionId,
334
- history_generation: historyGeneration,
217
+ session_id: this.sessionManager.getSessionId(),
218
+ history_generation: this.generationProvider(this.sessionManager),
335
219
  reason,
336
220
  };
337
221
  }
@@ -345,37 +229,17 @@ class HistoryTooLargeError extends Error {
345
229
  function sameIds(left, right) {
346
230
  return left.length === right.length && left.every((id, index) => id === right[index]);
347
231
  }
348
- function normalizeLimit(limit) {
349
- if (limit === undefined || !Number.isFinite(limit))
350
- return MAX_GROUPS_PER_PAGE;
351
- return Math.min(MAX_GROUPS_PER_PAGE, Math.max(1, Math.floor(limit)));
352
- }
353
- function markerEventId(entry) {
354
- if (entry.type !== "custom" || entry.customType !== TIMELINE_MARKER || !entry.data)
355
- return undefined;
356
- if (typeof entry.data !== "object" || Array.isArray(entry.data))
357
- return undefined;
358
- const eventId = entry.data.event_id;
359
- return typeof eventId === "string" ? eventId : undefined;
360
- }
361
- function isSystemEvent(event) {
362
- return event.kind === "compaction" || event.kind === "branch_summary" || event.kind === "custom";
363
- }
364
232
  function appendItem(payload, item) {
365
- if (item.kind === "event") {
233
+ if (item.kind === "event")
366
234
  return { events: [...payload.events, item.event], fragments: [...payload.fragments] };
367
- }
368
235
  return {
369
236
  events: [...payload.events],
370
- fragments: [
371
- ...payload.fragments,
372
- {
237
+ fragments: [...payload.fragments, {
373
238
  event_id: item.eventId,
374
239
  index: item.index,
375
240
  data_base64: item.dataBase64,
376
241
  final: item.final,
377
- },
378
- ],
242
+ }],
379
243
  };
380
244
  }
381
245
  //# sourceMappingURL=history.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/timeline/history.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/timeline/history.ts"],"names":[],"mappings":"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"}