@leemour/max-cli 0.1.0 → 0.3.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 (109) hide show
  1. package/README.md +28 -12
  2. package/dist/cache/index.d.ts.map +1 -1
  3. package/dist/cache/index.js +3 -0
  4. package/dist/cache/index.js.map +1 -1
  5. package/dist/cache/schema.d.ts +13 -1
  6. package/dist/cache/schema.d.ts.map +1 -1
  7. package/dist/cache/schema.js +159 -8
  8. package/dist/cache/schema.js.map +1 -1
  9. package/dist/cache/store.d.ts +115 -4
  10. package/dist/cache/store.d.ts.map +1 -1
  11. package/dist/cache/store.js +248 -27
  12. package/dist/cache/store.js.map +1 -1
  13. package/dist/client.d.ts +91 -9
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +371 -33
  16. package/dist/client.js.map +1 -1
  17. package/dist/commands/chats.d.ts.map +1 -1
  18. package/dist/commands/chats.js +25 -8
  19. package/dist/commands/chats.js.map +1 -1
  20. package/dist/commands/contacts.d.ts.map +1 -1
  21. package/dist/commands/contacts.js +51 -5
  22. package/dist/commands/contacts.js.map +1 -1
  23. package/dist/commands/context.d.ts +4 -1
  24. package/dist/commands/context.d.ts.map +1 -1
  25. package/dist/commands/context.js +4 -2
  26. package/dist/commands/context.js.map +1 -1
  27. package/dist/commands/login.d.ts +15 -0
  28. package/dist/commands/login.d.ts.map +1 -0
  29. package/dist/commands/login.js +43 -0
  30. package/dist/commands/login.js.map +1 -0
  31. package/dist/commands/logout.d.ts +10 -0
  32. package/dist/commands/logout.d.ts.map +1 -0
  33. package/dist/commands/logout.js +22 -0
  34. package/dist/commands/logout.js.map +1 -0
  35. package/dist/commands/me.d.ts +3 -0
  36. package/dist/commands/me.d.ts.map +1 -0
  37. package/dist/commands/me.js +18 -0
  38. package/dist/commands/me.js.map +1 -0
  39. package/dist/commands/messages.d.ts.map +1 -1
  40. package/dist/commands/messages.js +82 -3
  41. package/dist/commands/messages.js.map +1 -1
  42. package/dist/commands/paging.d.ts +41 -0
  43. package/dist/commands/paging.d.ts.map +1 -0
  44. package/dist/commands/paging.js +54 -0
  45. package/dist/commands/paging.js.map +1 -0
  46. package/dist/commands/send.d.ts +10 -0
  47. package/dist/commands/send.d.ts.map +1 -0
  48. package/dist/commands/send.js +30 -0
  49. package/dist/commands/send.js.map +1 -0
  50. package/dist/commands/session.d.ts.map +1 -1
  51. package/dist/commands/session.js +3 -3
  52. package/dist/commands/session.js.map +1 -1
  53. package/dist/config.d.ts +16 -2
  54. package/dist/config.d.ts.map +1 -1
  55. package/dist/config.js +15 -1
  56. package/dist/config.js.map +1 -1
  57. package/dist/domain/map.d.ts +1 -0
  58. package/dist/domain/map.d.ts.map +1 -1
  59. package/dist/domain/map.js +44 -3
  60. package/dist/domain/map.js.map +1 -1
  61. package/dist/domain/models.d.ts +54 -0
  62. package/dist/domain/models.d.ts.map +1 -1
  63. package/dist/generated/operations.generated.d.ts +1 -0
  64. package/dist/generated/operations.generated.d.ts.map +1 -1
  65. package/dist/output.d.ts +7 -4
  66. package/dist/output.d.ts.map +1 -1
  67. package/dist/output.js +8 -11
  68. package/dist/output.js.map +1 -1
  69. package/dist/program.d.ts.map +1 -1
  70. package/dist/program.js +4 -2
  71. package/dist/program.js.map +1 -1
  72. package/dist/protocol/connection.d.ts +10 -0
  73. package/dist/protocol/connection.d.ts.map +1 -1
  74. package/dist/protocol/connection.js +11 -3
  75. package/dist/protocol/connection.js.map +1 -1
  76. package/dist/protocol/session.d.ts +54 -0
  77. package/dist/protocol/session.d.ts.map +1 -0
  78. package/dist/protocol/session.js +57 -0
  79. package/dist/protocol/session.js.map +1 -0
  80. package/dist/rendering/messages.d.ts +19 -0
  81. package/dist/rendering/messages.d.ts.map +1 -0
  82. package/dist/rendering/messages.js +137 -0
  83. package/dist/rendering/messages.js.map +1 -0
  84. package/dist/runs/events.d.ts +1 -1
  85. package/dist/runs/recording.d.ts +2 -2
  86. package/dist/runs/recording.d.ts.map +1 -1
  87. package/dist/runs/recording.js +3 -3
  88. package/dist/runs/recording.js.map +1 -1
  89. package/dist/session/adopt.d.ts +22 -0
  90. package/dist/session/adopt.d.ts.map +1 -0
  91. package/dist/session/adopt.js +29 -0
  92. package/dist/session/adopt.js.map +1 -0
  93. package/dist/session/handshake.d.ts +14 -1
  94. package/dist/session/handshake.d.ts.map +1 -1
  95. package/dist/session/handshake.js +5 -5
  96. package/dist/session/handshake.js.map +1 -1
  97. package/dist/spec/operations/auth.d.ts +42 -0
  98. package/dist/spec/operations/auth.d.ts.map +1 -0
  99. package/dist/spec/operations/session.d.ts +16 -0
  100. package/dist/spec/operations/session.d.ts.map +1 -1
  101. package/dist/spec/operations/session.js +21 -1
  102. package/dist/spec/operations/session.js.map +1 -1
  103. package/dist/testing/sandbox.d.ts +2 -0
  104. package/dist/testing/sandbox.d.ts.map +1 -0
  105. package/dist/testing/sandbox.js +24 -0
  106. package/dist/testing/sandbox.js.map +1 -0
  107. package/dist/version.d.ts +1 -1
  108. package/dist/version.js +1 -1
  109. package/package.json +9 -5
package/dist/client.js CHANGED
@@ -30,6 +30,7 @@ export class MaxClient {
30
30
  #login;
31
31
  #previousCid = 0;
32
32
  #people;
33
+ #merged;
33
34
  constructor({ store, timeoutMs, connection, warn, cache, offline = false, events }) {
34
35
  this.#store = store;
35
36
  this.#connection = connection ?? new Connection(timeoutMs === undefined ? {} : { timeoutMs });
@@ -50,14 +51,25 @@ export class MaxClient {
50
51
  * time, and the name is filled in. Without this, `max chats` shows a column of blanks for
51
52
  * exactly the chats a person recognises by name.
52
53
  */
53
- list: async (limit) => {
54
+ list: async (options = {}) => {
55
+ const { limit, offset = 0, kind } = options;
56
+ const query = checkedQuery(options.query);
54
57
  if (this.#offline) {
55
- const cached = this.#recorded(this.#cache?.chats.read(ANY_AGE), "chats");
56
- return limit === undefined ? cached : cached.slice(0, limit);
58
+ const recorded = this.#cache;
59
+ if (!recorded)
60
+ this.#recorded(undefined, "chats");
61
+ const store = recorded;
62
+ if (store.chats.count() === 0)
63
+ this.#recorded(undefined, "chats");
64
+ const items = store.chats.page({ limit: limit ?? Number.MAX_SAFE_INTEGER, offset, query, kind });
65
+ return { items, hasMore: offset + items.length < store.chats.count({ query, kind }) };
57
66
  }
58
67
  await this.#connectOnce();
59
68
  const raw = asArray(this.#session().chats);
60
69
  const people = await this.#peopleFor(raw);
70
+ // A one-to-one chat has no title of its own — its name is the other person's, and MAX does
71
+ // not put it in the chat object. Without this, the chats a person recognises by name are a
72
+ // column of blanks.
61
73
  const chats = raw.map((chat) => {
62
74
  const mapped = toChat(chat);
63
75
  if (mapped.title !== null || mapped.kind !== "dialog")
@@ -66,8 +78,15 @@ export class MaxClient {
66
78
  const name = partner === undefined ? null : (people.get(partner)?.name ?? null);
67
79
  return { ...mapped, title: name };
68
80
  });
69
- this.#cache?.chats.write(chats);
70
- return limit === undefined ? chats : chats.slice(0, limit);
81
+ const cache = this.#cache;
82
+ if (!cache)
83
+ return paged(matching(chats, query, kind), limit, offset);
84
+ // Written first, then read back: the titles just resolved have to be in the store before it
85
+ // is asked to order and page over them, and the delta this login carried is only a slice of
86
+ // what it now holds.
87
+ cache.chats.write(chats);
88
+ const items = cache.chats.page({ limit: limit ?? Number.MAX_SAFE_INTEGER, offset, query, kind });
89
+ return { items, hasMore: offset + items.length < cache.chats.count({ query, kind }) };
71
90
  },
72
91
  /**
73
92
  * Turns what the person typed into a chat id.
@@ -79,7 +98,7 @@ export class MaxClient {
79
98
  resolve: async (reference) => {
80
99
  if (/^-?\d+$/.test(reference.trim()))
81
100
  return reference.trim();
82
- const chats = await this.chats.list();
101
+ const { items: chats } = await this.chats.list();
83
102
  const wanted = reference.trim().toLowerCase();
84
103
  const titled = chats.filter((chat) => chat.title !== null);
85
104
  const exact = titled.filter((chat) => chat.title?.toLowerCase() === wanted);
@@ -88,32 +107,121 @@ export class MaxClient {
88
107
  return matches[0].id;
89
108
  if (matches.length === 0)
90
109
  throw new CliError("not_found", `no chat matches "${reference}"`);
91
- const names = matches.map((chat) => `${chat.title} (${chat.id})`).join(", ");
92
- throw new CliError("validation_error", `"${reference}" matches ${matches.length} chats: ${names}`);
110
+ const candidates = matches.map((chat) => ({ id: chat.id, title: chat.title }));
111
+ const width = Math.max(...candidates.map(({ id }) => id.length));
112
+ const lines = candidates.map(({ id, title }) => ` ${id.padEnd(width)} ${title}`).join("\n");
113
+ throw new CliError("validation_error", `"${reference}" matches ${matches.length} chats — name one by its id:\n${lines}`, { candidates });
93
114
  },
94
115
  };
95
116
  contacts = {
96
- /** The people this account has a one-to-one chat with, named. */
97
- list: async () => {
98
- if (this.#offline)
99
- return this.#recorded(this.#cache?.contacts.read(ANY_AGE), "contacts");
117
+ /**
118
+ * The people this account has a one-to-one chat with, named, newest conversation first.
119
+ *
120
+ * **It answers from the store**, which the login has just brought up to date (`#mergeLogin`),
121
+ * so the order and the paging happen in SQL over every person we know rather than over the
122
+ * handful this particular login mentioned. A delta carries almost nothing after the first run;
123
+ * rendering the response instead of the store would show an empty list on the second command.
124
+ *
125
+ * ⚠ **A group member is not in this answer** and nothing marks them as excluded: the query
126
+ * asks for people a *dialog* exists with, and they are outside it (`NEED-105`). They are in
127
+ * the store, with the chats they share with us, for the commands that will want them.
128
+ */
129
+ list: async (options = {}) => {
130
+ const { order = "recent", limit, offset = 0 } = options;
131
+ const query = checkedQuery(options.query);
132
+ // The same query as the online path, so `--offline` cannot answer with people the other
133
+ // one deliberately leaves out — a group member is not a contact in either mode.
134
+ if (this.#offline) {
135
+ const recorded = this.#cache;
136
+ if (!recorded || recorded.people.countContacts() === 0)
137
+ this.#recorded(undefined, "contacts");
138
+ return this.#pageOfContacts(recorded, order, limit, offset, query);
139
+ }
100
140
  await this.#connectOnce();
101
141
  const people = await this.#peopleFor(asArray(this.#session().chats));
102
- const contacts = [...people.values()].filter((contact) => contact.id !== "");
103
- this.#cache?.contacts.write(contacts);
104
- return contacts;
142
+ const cache = this.#cache;
143
+ // No store — it failed to open, and that is not a reason to lose the answer MAX just gave.
144
+ // What is lost is only the ordering and the paging the store does better.
145
+ if (!cache)
146
+ return paged(matchingPeople([...people.values()].filter((contact) => contact.id !== ""), query), limit, offset);
147
+ return this.#pageOfContacts(cache, order, limit, offset, query);
148
+ },
149
+ /**
150
+ * **Start again from zero**: forget the marker, so this login asks for the whole collection
151
+ * rather than for what changed, and name everybody it mentions.
152
+ *
153
+ * It is a repair tool, not the way contacts arrive. The delta rides on the login every command
154
+ * already performs, so there is nothing to schedule and no budget to spend — what this is for
155
+ * is a store that has drifted, or a full re-take after a schema rebuild threw the rows away.
156
+ * It is also the only thing that could ever prune somebody MAX has stopped returning, which is
157
+ * the second reason it exists.
158
+ */
159
+ sync: async () => {
160
+ if (this.#offline) {
161
+ throw new CliError("validation_error", "`--offline` reads what was recorded; it cannot sync");
162
+ }
163
+ const cache = this.#cache;
164
+ if (!cache) {
165
+ throw new CliError("configuration_error", `there is no local store for profile "${this.#store.profile}" to sync into — the note above says why`);
166
+ }
167
+ // Before connecting, or the login would carry the marker this is meant to discard.
168
+ cache.forgetSyncMarker();
169
+ await this.#connectOnce();
170
+ // The login names a fraction of the people in its own chats, so a full take that stopped
171
+ // here would store ids without names for most of them.
172
+ await this.#peopleFor(asArray(this.#session().chats));
173
+ return { ...(this.#merged ?? { known: 0, added: 0, changed: 0 }), known: cache.people.count(), full: true };
105
174
  },
106
175
  };
107
176
  messages = {
108
- list: async (chatId, limit = 20) => {
109
- if (this.#offline)
110
- return this.#recorded(this.#cache?.messages.read(chatId, limit, ANY_AGE), "messages");
177
+ /**
178
+ * **Searches what this machine has read, and never asks MAX.**
179
+ *
180
+ * MAX has no search operation in our registry — nine opcodes, none of them a query — so there
181
+ * is nothing to ask. That makes this the one read that is local by nature rather than by
182
+ * choice, and it is the opposite of the rule every other read follows (`df6792a`: the record
183
+ * does not answer a read).
184
+ *
185
+ * ⚠ **So it finds what has been read, not what exists.** A chat nobody has opened contributes
186
+ * nothing, and there is no way for the answer to know that. The command says so on stderr
187
+ * rather than leaving the reader to infer it from a short list, and `max messages list <chat>`
188
+ * is what fills the gap.
189
+ *
190
+ * It opens no connection at all, which also means it costs no login (`RISK-2`).
191
+ */
192
+ search: async (query, options = {}) => {
193
+ const checked = checkedQuery(query);
194
+ if (checked === undefined)
195
+ throw new CliError("validation_error", "a search needs something to search for");
196
+ const cache = this.#cache;
197
+ if (!cache) {
198
+ throw new CliError("not_found", "searching reads the local copy, and this profile has none — run `max messages list <chat>` first");
199
+ }
200
+ const { chatId, limit = 20, offset = 0 } = options;
201
+ const items = cache.messages.search({ query: checked, ...(chatId ? { chatId } : {}), limit, offset });
202
+ const total = cache.messages.countSearch({ query: checked, ...(chatId ? { chatId } : {}) });
203
+ return { items, hasMore: offset + items.length < total };
204
+ },
205
+ /**
206
+ * **Paged backwards through time, not by page number.** MAX's history is already anchored —
207
+ * it takes a moment and answers with what came before it — so `--before` is exact where a page
208
+ * number over a live conversation would repeat and skip rows.
209
+ *
210
+ * `hasMore` here is a claim about the copy we hold, never about the chat: a full page back is
211
+ * the only evidence there is that another page exists.
212
+ */
213
+ list: async (chatId, options = {}) => {
214
+ const limit = options.limit ?? 20;
215
+ if (this.#offline) {
216
+ const stored = this.#recorded(this.#cache?.messages.read(chatId, limit, ANY_AGE), "messages");
217
+ return { items: stored, hasMore: stored.length >= limit };
218
+ }
111
219
  await this.#connectOnce();
112
220
  const session = this.#session();
113
221
  // `interactive: false` and no CHAT_MARK: reading history must not mark anything read (§19).
114
222
  const answer = await this.#wire.chats.history({
115
223
  chatId,
116
- from: Date.now(),
224
+ from: options.before ?? Date.now(),
117
225
  forward: 0,
118
226
  backward: limit,
119
227
  forwardTime: 0,
@@ -126,7 +234,34 @@ export class MaxClient {
126
234
  const lookup = { names: namesFrom(session.contacts), ...viewer(this.#store) };
127
235
  const messages = asArray(answer.messages).map((raw) => toMessage(raw, chatId, lookup));
128
236
  this.#cache?.messages.write(chatId, messages);
129
- return messages;
237
+ return { items: messages, hasMore: messages.length >= limit };
238
+ },
239
+ /**
240
+ * Turns what `--before` was given into a moment.
241
+ *
242
+ * **ISO 8601 is a time; a bare integer is a message id.** Both a millisecond timestamp and a
243
+ * message id are runs of digits — 13 and 18 of them on this account — and deciding between
244
+ * them by length is a trap that fires the first time either changes size. So the rule is what
245
+ * the string looks like, not how big it is.
246
+ *
247
+ * An id we have never stored is exactly what a deleted message looks like, because it is gone
248
+ * from the history MAX returns too. That is a refusal naming the way round it rather than a
249
+ * guess: read as milliseconds, an 18-digit id points six hundred million years from now.
250
+ */
251
+ before: (reference) => {
252
+ const wanted = reference.trim();
253
+ if (!/^\d+$/.test(wanted)) {
254
+ const time = Date.parse(wanted);
255
+ if (Number.isNaN(time)) {
256
+ throw new CliError("validation_error", `--before takes a message id or an ISO 8601 time, not "${wanted}"`);
257
+ }
258
+ return time;
259
+ }
260
+ const time = this.#cache?.messages.timeOf(wanted);
261
+ if (time === undefined) {
262
+ throw new CliError("not_found", `no message ${wanted} in this profile's record — read the chat once first, or give --before an ISO 8601 time`);
263
+ }
264
+ return time;
130
265
  },
131
266
  /**
132
267
  * Sends one message, retrying **only with the same `cid`**.
@@ -139,7 +274,7 @@ export class MaxClient {
139
274
  * So one retry, same `cid`, and nothing beyond that. What is still unmeasured is how long the
140
275
  * server remembers a `cid`; the two probes were seconds apart. If the retry also fails the
141
276
  * answer is `outcome_unknown` — never failed, never sent — and it names the `cid`, because
142
- * `max send --cid <n>` can then repeat the attempt without risking a second message.
277
+ * `max messages send … --cid <n>` can then repeat the attempt without risking a second message.
143
278
  */
144
279
  send: async (chatId, text, options = {}) => {
145
280
  if (this.#offline)
@@ -167,7 +302,7 @@ export class MaxClient {
167
302
  }
168
303
  catch {
169
304
  throw new CliError("outcome_unknown", `the message may or may not have been sent (${failure.message}) — ` +
170
- `\`max send --cid ${cid}\` repeats the attempt without risking a second copy`, { cid });
305
+ `\`max messages send <chat> <text> --cid ${cid}\` repeats the attempt without risking a second copy`, { cid });
171
306
  }
172
307
  }
173
308
  // What the cache holds for this chat is now one message short of the truth.
@@ -177,33 +312,146 @@ export class MaxClient {
177
312
  },
178
313
  };
179
314
  /**
180
- * Opens the connection and logs in with the stored token.
315
+ * Opens the connection and logs in with the stored token, or with one offered for trial.
181
316
  *
182
317
  * The login response carries the profile, the chats, the contacts and recent messages, so most
183
318
  * commands need no further request — measured against MAX on 2026-09-19.
319
+ *
320
+ * **A candidate token is tried and not stored**, which is what lets `adoptToken` write to the
321
+ * keyring only after MAX has accepted it. Nothing here writes a token; see `session/adopt.ts`.
184
322
  */
185
- async connect() {
186
- const token = this.#store.readToken();
323
+ async connect({ token: candidate } = {}) {
324
+ const token = candidate ?? this.#store.readToken();
187
325
  if (!token) {
188
326
  // The fix has to carry the profile, or it logs the wrong one in: a name nobody has logged
189
327
  // in under is the ordinary shape of this failure now that the first word is the profile.
190
328
  throw new CliError("authentication_error", `no session for profile "${this.#store.profile}" — run \`max ${asFirstWord(this.#store.profile)}session start\``);
191
329
  }
192
330
  const state = this.#store.readState();
331
+ const sync = this.#cache?.syncMarker();
193
332
  try {
194
333
  await this.#connection.open();
195
- this.#login = await startSession(this.#invoke, { token, deviceId: state.deviceId });
334
+ this.#login = await startSession(this.#invoke, {
335
+ token,
336
+ deviceId: state.deviceId,
337
+ ...(sync === undefined ? {} : { sync }),
338
+ });
196
339
  }
197
340
  catch (error) {
198
341
  throw asCliError(error);
199
342
  }
200
343
  const viewerId = toProfile(record(this.#login.profile) ?? {}).id;
344
+ // **Before `writeState`**, so a login we are about to refuse does not count itself or move
345
+ // `lastLoginAt`. A profile is a person, not a directory name: if this token belongs to someone
346
+ // else, every later command in this process would send as them and nothing would say so.
347
+ // Switching accounts has a door already — `session end` clears the id along with the token.
348
+ if (viewerId && state.viewerId && viewerId !== state.viewerId) {
349
+ throw new CliError("authentication_error", `this token is for a different account than profile "${this.#store.profile}" was set up with — ` +
350
+ `run \`max ${asFirstWord(this.#store.profile)}session end\` first if you meant to switch`);
351
+ }
201
352
  this.#store.writeState({
202
353
  ...state,
203
354
  ...(viewerId ? { viewerId } : {}),
204
355
  logins: state.logins + 1,
205
356
  lastLoginAt: new Date().toISOString(),
206
357
  });
358
+ this.#keepRotatedToken(token);
359
+ this.#mergeLogin(viewerId);
360
+ }
361
+ /**
362
+ * **MAX offers a replacement for a credential that has aged, and until 2026-09-22 we threw it
363
+ * away** — measured, `pnpm probe:token`. Presenting a token pasted months earlier answers with a
364
+ * different one; presenting *that* one answers with the same one back, so this writes once and
365
+ * then stops rather than on every command.
366
+ *
367
+ * The old token keeps working — the last months are the proof — so this is hygiene, not repair.
368
+ *
369
+ * ⚠ **After the identity refusal above, never before it.** A token belonging to somebody else
370
+ * reaches this method only if that check has already let it through; persisting it earlier would
371
+ * overwrite the owner's working credential with a stranger's — a worse version of the defect
372
+ * `MAX-12` exists to fix.
373
+ *
374
+ * **A keyring that will not take it does not fail the command.** The write can fail for reasons
375
+ * that have nothing to do with the command being run — a locked keyring, no session bus — and
376
+ * the old token still works, which is what makes carrying on correct. The reason goes to the
377
+ * diagnostic stream, because failing quietly is not failing invisibly (`NEED-97`).
378
+ *
379
+ * Nothing here prints, returns or compares-aloud the value: the only comparison is against the
380
+ * token we sent, and the only thing that leaves is whether a write failed.
381
+ */
382
+ #keepRotatedToken(sent) {
383
+ const rotated = this.#session().token;
384
+ if (typeof rotated !== "string" || rotated === "" || rotated === sent)
385
+ return;
386
+ try {
387
+ this.#store.writeToken(rotated);
388
+ }
389
+ catch (error) {
390
+ this.#warn(`the refreshed session could not be saved, so the previous one is still in use: ${reasonOf(error)}`);
391
+ }
392
+ }
393
+ /**
394
+ * Writes what the login just told us into the store, **before the command renders**, so a
395
+ * listing prints the names this run brought rather than the previous run's.
396
+ *
397
+ * ⚠ **A delta is mostly empty and that is correct.** After the first login MAX sends only what
398
+ * changed, so an absent person is an unchanged person — never a departed one. Nothing here
399
+ * deletes, with the single exception of a chat's membership, which MAX restates in full whenever
400
+ * it sends that chat at all.
401
+ *
402
+ * **It never fails the command.** Nobody asked for the store; a locked database or a full disk
403
+ * must not lose an answer MAX has already given. The reason goes to the diagnostic stream,
404
+ * because failing quietly is not the same as failing invisibly (`NEED-97`) — and the marker
405
+ * stays where it was, so the next login asks for the same delta again rather than for changes
406
+ * since rows that were never written.
407
+ */
408
+ #mergeLogin(viewerId) {
409
+ const cache = this.#cache;
410
+ const marker = asMarker(this.#session().time);
411
+ if (!cache || marker === undefined)
412
+ return;
413
+ const chats = asArray(this.#session().chats);
414
+ const members = new Map();
415
+ for (const raw of chats) {
416
+ const chat = toChat(raw);
417
+ // A channel lists four of its hundred and seventy-eight thousand subscribers, so its
418
+ // `participants` is not a membership — storing it would be storing a wrong answer.
419
+ if (!chat.id || chat.kind === "channel")
420
+ continue;
421
+ const participants = this.#participantsOf(raw, viewerId);
422
+ if (participants !== undefined)
423
+ members.set(chat.id, participants);
424
+ }
425
+ try {
426
+ this.#merged = cache.mergeDelta({
427
+ chats: chats.map(toChat).filter((chat) => chat.id !== ""),
428
+ people: asArray(this.#session().contacts)
429
+ .map(toContact)
430
+ .filter((contact) => contact.id !== ""),
431
+ members,
432
+ marker,
433
+ });
434
+ }
435
+ catch (error) {
436
+ this.#warn(`the local record did not take this login, so nothing was kept from it: ${reasonOf(error)}`);
437
+ }
438
+ }
439
+ /** One page of contacts out of the store — the same query online and offline. */
440
+ #pageOfContacts(cache, order, limit, offset, query) {
441
+ const items = cache.people.contacts({ order, limit: limit ?? Number.MAX_SAFE_INTEGER, offset, query });
442
+ return { items, hasMore: offset + items.length < cache.people.countContacts({ query }) };
443
+ }
444
+ /**
445
+ * Everyone in the chat except us, or **`undefined` when MAX did not say who is in it**.
446
+ *
447
+ * ⚠ The difference is the whole of it. A delta re-sends a chat because a message arrived and
448
+ * carries no `participants`; read as "nobody is in this chat", that empties the membership and
449
+ * the person on the other side stops being a contact. "Did not say" is not "nobody", and only
450
+ * the first of the two may replace anything.
451
+ */
452
+ #participantsOf(chat, viewerId) {
453
+ const participants = record(chat.participants);
454
+ return participants === undefined ? undefined : Object.keys(participants).filter((id) => id !== viewerId);
207
455
  }
208
456
  async close() {
209
457
  await this.#connection.close();
@@ -318,20 +566,37 @@ export class MaxClient {
318
566
  if (contact.id)
319
567
  people.set(contact.id, contact);
320
568
  }
569
+ const viewerId = this.#store.readState().viewerId;
321
570
  const missing = new Set();
322
571
  for (const chat of chats) {
323
- const partner = this.#partnerOf(chat);
324
- if (partner !== undefined && !people.has(partner))
325
- missing.add(partner);
572
+ if (toChat(chat).kind === "channel")
573
+ continue;
574
+ for (const id of this.#participantsOf(chat, viewerId) ?? [])
575
+ if (!people.has(id))
576
+ missing.add(id);
326
577
  }
327
- if (missing.size > 0) {
328
- const answer = await this.#wire.contacts.info({ contactIds: [...missing] });
578
+ const named = [];
579
+ for (const batch of batched([...missing], CONTACT_INFO_BATCH)) {
580
+ const answer = await this.#wire.contacts.info({ contactIds: batch });
329
581
  for (const raw of asArray(answer.contacts)) {
330
582
  const contact = toContact(raw);
331
- if (contact.id)
332
- people.set(contact.id, contact);
583
+ if (!contact.id)
584
+ continue;
585
+ people.set(contact.id, contact);
586
+ named.push(contact);
333
587
  }
334
588
  }
589
+ // Written here rather than left in memory: the process ends in a moment, and the next one
590
+ // should not pay for these names again.
591
+ //
592
+ // ⚠ **And the order is recomputed after**, not before. These people did not exist when the
593
+ // login's chats were written, so the recency that was set then reached only the handful the
594
+ // login itself named — 6 of 22 on the real account, with every other dialog partner sorting
595
+ // as never-messaged.
596
+ if (named.length > 0) {
597
+ this.#cache?.people.upsert(named, "info");
598
+ this.#cache?.people.refreshRecency();
599
+ }
335
600
  this.#people = people;
336
601
  return people;
337
602
  }
@@ -350,8 +615,81 @@ export class MaxClient {
350
615
  return this.#login;
351
616
  }
352
617
  }
618
+ /**
619
+ * **The shortest search the index can answer is three characters**, and below that it returns
620
+ * nothing rather than complaining (measured 2026-09-22). An empty list reads as "no matches",
621
+ * so this refuses instead — the one answer that is never mistaken for a result.
622
+ *
623
+ * It is checked here rather than in each command, and on every path rather than only where a
624
+ * store exists: a filter that works with a cache and not without it would make the answer depend
625
+ * on something the person never asked about.
626
+ */
627
+ const MIN_QUERY = 3;
628
+ const checkedQuery = (query) => {
629
+ if (query === undefined)
630
+ return undefined;
631
+ const trimmed = query.trim();
632
+ if (trimmed.length < MIN_QUERY) {
633
+ throw new CliError("validation_error", `a search needs at least ${MIN_QUERY} characters — "${trimmed}" is ${trimmed.length}`);
634
+ }
635
+ return trimmed;
636
+ };
637
+ /**
638
+ * **One `CONTACT_INFO` for a hundred people.** The bound is unmeasured; the comparable one is
639
+ * `chatsCount`, where 100 is accepted and 200 comes back out of range (`PROTO-3`). Somebody in
640
+ * forty groups is the case that will find the real number, and it will find it as a refusal that
641
+ * names itself rather than as a wrong answer.
642
+ */
643
+ const CONTACT_INFO_BATCH = 100;
644
+ const batched = (items, size) => {
645
+ const batches = [];
646
+ for (let at = 0; at < items.length; at += size)
647
+ batches.push(items.slice(at, at + size));
648
+ return batches;
649
+ };
650
+ /** Paging over a list already in hand — the fallback for when there is no store to page in SQL. */
651
+ /**
652
+ * The same filter as the store's, for the path where no store opened.
653
+ *
654
+ * ⚠ **This is a second implementation of one promise, and that is a cost paid knowingly.** The
655
+ * store asks a trigram index; here there is nothing to ask, so it is `includes` over a lowered
656
+ * string. For a needle of three characters or more the two agree — a trigram match *is* a
657
+ * substring match — and where they could drift is an alphabet whose lowercase form differs
658
+ * between SQLite's folding and JavaScript's. Nobody has hit that; if somebody does, the fix is
659
+ * this function, not the index.
660
+ *
661
+ * The alternative was to let a filter only work when a cache happened to exist, which makes the
662
+ * answer depend on something the person never asked about.
663
+ */
664
+ const matching = (chats, query, kind) => {
665
+ const needle = query?.toLocaleLowerCase();
666
+ return chats.filter((chat) => (kind === undefined || chat.kind === kind) &&
667
+ (needle === undefined || (chat.title ?? "").toLocaleLowerCase().includes(needle)));
668
+ };
669
+ /** As `matching`, over the two columns `people_fts` indexes. */
670
+ const matchingPeople = (people, query) => {
671
+ if (query === undefined)
672
+ return people;
673
+ const needle = query.toLocaleLowerCase();
674
+ return people.filter((person) => `${person.name ?? ""} ${person.username ?? ""}`.toLocaleLowerCase().includes(needle));
675
+ };
676
+ const paged = (items, limit, offset) => {
677
+ const page = limit === undefined ? items.slice(offset) : items.slice(offset, offset + limit);
678
+ return { items: page, hasMore: offset + page.length < items.length };
679
+ };
353
680
  /** `--offline` was asked for explicitly, so age is not a reason to refuse what was recorded. */
354
681
  const ANY_AGE = Number.POSITIVE_INFINITY;
682
+ /**
683
+ * The marker only means anything if MAX gave us one. A login without a `time` is not a reason to
684
+ * store `0` — that would tell the next login to send everything, which is exactly what a stored
685
+ * marker exists to stop.
686
+ */
687
+ const asMarker = (time) => typeof time === "number" && Number.isFinite(time) && time > 0 ? time : undefined;
688
+ /** The reason, never the payload: a store's failure is a code, and the rows are people's names. */
689
+ const reasonOf = (error) => {
690
+ const code = error?.code;
691
+ return typeof code === "string" ? code : error instanceof Error ? error.name : "an unknown problem";
692
+ };
355
693
  const viewer = (store) => {
356
694
  const viewerId = store.readState().viewerId;
357
695
  return viewerId === undefined ? {} : { viewerId };
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/commands/chats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,eAAO,MAAM,YAAY,QAAO,OA0B/B,CAAA"}
1
+ {"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/commands/chats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,eAAO,MAAM,YAAY,QAAO,OAgC/B,CAAA"}