@pmate/cli 0.21.14 → 0.21.16

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 (2) hide show
  1. package/dist/index.js +56 -29
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -15664,7 +15664,6 @@ var QuizCommandHandler = class {
15664
15664
 
15665
15665
  // src/commands/CollectCommandHandler.ts
15666
15666
  var import_playwright = require("playwright");
15667
- var import_node_crypto4 = require("crypto");
15668
15667
 
15669
15668
  // src/collectStore.ts
15670
15669
  var import_node_crypto3 = require("crypto");
@@ -15715,27 +15714,36 @@ async function writeStoredIndex(rootDir, index) {
15715
15714
  await import_node_fs11.promises.writeFile(filePath, JSON.stringify(index, null, 2) + "\n", "utf8");
15716
15715
  }
15717
15716
  function mergeMessages(existing, incoming) {
15718
- const seen = new Set(existing.map((message) => message.hash));
15717
+ const seenMessageIds = new Set(
15718
+ existing.map((message) => normalizeMessageId(message.messageId)).filter((value) => !!value)
15719
+ );
15719
15720
  const merged = [...existing];
15720
15721
  let added = 0;
15721
15722
  for (const message of incoming) {
15722
- if (seen.has(message.hash)) {
15723
+ const incomingMessageId = normalizeMessageId(message.messageId);
15724
+ if (incomingMessageId && seenMessageIds.has(incomingMessageId)) {
15723
15725
  continue;
15724
15726
  }
15725
15727
  const upgradeIndex = merged.findIndex((current) => shouldUpgradeMessage(current, message));
15726
15728
  if (upgradeIndex >= 0) {
15727
15729
  merged[upgradeIndex] = message;
15728
- seen.add(message.hash);
15730
+ if (incomingMessageId) {
15731
+ seenMessageIds.add(incomingMessageId);
15732
+ }
15729
15733
  continue;
15730
15734
  }
15731
- seen.add(message.hash);
15735
+ if (incomingMessageId) {
15736
+ seenMessageIds.add(incomingMessageId);
15737
+ }
15732
15738
  merged.push(message);
15733
15739
  added += 1;
15734
15740
  }
15735
15741
  return { messages: merged, added };
15736
15742
  }
15737
15743
  function shouldUpgradeMessage(existing, incoming) {
15738
- if (existing.hash === incoming.hash) {
15744
+ const existingMessageId = normalizeMessageId(existing.messageId);
15745
+ const incomingMessageId = normalizeMessageId(incoming.messageId);
15746
+ if (existingMessageId && incomingMessageId && existingMessageId === incomingMessageId) {
15739
15747
  return false;
15740
15748
  }
15741
15749
  if (existing.time && incoming.time && existing.time !== incoming.time) {
@@ -15746,6 +15754,10 @@ function shouldUpgradeMessage(existing, incoming) {
15746
15754
  function normalizeMessageField(value) {
15747
15755
  return (value ?? "").trim();
15748
15756
  }
15757
+ function normalizeMessageId(value) {
15758
+ const normalized = (value ?? "").trim();
15759
+ return normalized || null;
15760
+ }
15749
15761
  function joinNormalized(values) {
15750
15762
  return values.map((value) => value.trim()).join("|");
15751
15763
  }
@@ -15753,7 +15765,7 @@ async function readStoredMessages(rootDir, threadKey) {
15753
15765
  const filePath = getThreadMessagesFilePath(rootDir, threadKey);
15754
15766
  try {
15755
15767
  const raw = await import_node_fs11.promises.readFile(filePath, "utf8");
15756
- return raw.split("\n").map((line) => line.trim()).filter(Boolean).map((line) => JSON.parse(line));
15768
+ return raw.split("\n").map((line) => line.trim()).filter(Boolean).map((line) => normalizeStoredMessage(JSON.parse(line)));
15757
15769
  } catch {
15758
15770
  return [];
15759
15771
  }
@@ -15776,6 +15788,17 @@ function getThreadMessagesFilePath(rootDir, threadKey) {
15776
15788
  function getLegacyThreadFilePath(rootDir, threadKey) {
15777
15789
  return import_node_path16.default.join(rootDir, "threads", `${threadKey}.json`);
15778
15790
  }
15791
+ function normalizeStoredMessage(message) {
15792
+ return {
15793
+ messageId: normalizeMessageId(message.messageId),
15794
+ time: message.time ?? null,
15795
+ sender: message.sender ?? null,
15796
+ content: message.content ?? "",
15797
+ links: Array.isArray(message.links) ? message.links : [],
15798
+ images: Array.isArray(message.images) ? message.images : [],
15799
+ collectedAt: message.collectedAt
15800
+ };
15801
+ }
15779
15802
 
15780
15803
  // src/commands/CollectCommandHandler.ts
15781
15804
  var CollectCommandHandler = class {
@@ -15833,7 +15856,7 @@ var CollectCommandHandler = class {
15833
15856
  async persistThread(rootDir, target, thread, messages2, syncedAt, existing) {
15834
15857
  const threadKey = toThreadKey(thread.name);
15835
15858
  const incoming = messages2.map((message) => ({
15836
- hash: message.hash,
15859
+ messageId: message.messageId,
15837
15860
  time: message.time,
15838
15861
  sender: message.sender,
15839
15862
  content: message.content,
@@ -15949,7 +15972,9 @@ var CollectCommandHandler = class {
15949
15972
  error: result && "reason" in result && typeof result.reason === "string" ? result.reason : "unknown error"
15950
15973
  };
15951
15974
  }
15952
- const seenHashes = new Set(existingMessages.map((message) => message.hash));
15975
+ const seenMessageIds = new Set(
15976
+ existingMessages.map((message) => (message.messageId ?? "").trim()).filter((value) => !!value)
15977
+ );
15953
15978
  const collected = [];
15954
15979
  for (let i = result.messages.length - 1; i >= 0; i -= 1) {
15955
15980
  const raw = result.messages[i];
@@ -15960,18 +15985,17 @@ var CollectCommandHandler = class {
15960
15985
  const attachmentPaths = Array.isArray(raw.attachments) ? raw.attachments.map((attachment) => attachment.path ?? null).filter((value) => !!value) : [];
15961
15986
  const message = {
15962
15987
  index: raw.index,
15963
- hash: "",
15988
+ messageId: normalizeText(raw.id ?? "") || null,
15964
15989
  time: formatSentAt(raw.sentAt),
15965
15990
  sender: normalizeText(raw.senderName ?? raw.source ?? "") || null,
15966
15991
  content: contentParts.filter(Boolean).join("\n") || (attachmentPaths.length > 0 ? "[Image]" : ""),
15967
15992
  links: [],
15968
15993
  images: attachmentPaths
15969
15994
  };
15970
- message.hash = computeMessageHash(thread.name, message);
15971
15995
  if (!message.content && message.images.length === 0) {
15972
15996
  continue;
15973
15997
  }
15974
- if (seenHashes.has(message.hash)) {
15998
+ if (message.messageId && seenMessageIds.has(message.messageId)) {
15975
15999
  break;
15976
16000
  }
15977
16001
  collected.push(message);
@@ -16002,17 +16026,6 @@ function normalizeUnreadCount(value) {
16002
16026
  const parsed = typeof value === "number" ? value : typeof value === "string" && value.trim() ? Number.parseInt(value, 10) : 0;
16003
16027
  return Number.isFinite(parsed) && parsed > 0 ? parsed : 0;
16004
16028
  }
16005
- function computeMessageHash(threadName, message) {
16006
- const base = [
16007
- normalizeText(threadName),
16008
- normalizeText(message.sender ?? ""),
16009
- normalizeText(message.time ?? ""),
16010
- normalizeText(message.content),
16011
- message.links.map(normalizeText).join("|"),
16012
- message.images.map(normalizeText).join("|")
16013
- ].join("||");
16014
- return (0, import_node_crypto4.createHash)("sha1").update(base).digest("hex").slice(0, 16);
16015
- }
16016
16029
  function buildListThreadsExpr() {
16017
16030
  return `(function() {
16018
16031
  try {
@@ -16085,6 +16098,19 @@ function buildListThreadsExpr() {
16085
16098
  }
16086
16099
  return null;
16087
16100
  }
16101
+ function isArchived(model) {
16102
+ var attrs = typeof model.attributes === 'object' ? model.attributes : model || {};
16103
+ var candidates = [
16104
+ attrs.isArchived,
16105
+ attrs.archived,
16106
+ model && model.get ? model.get('isArchived') : null,
16107
+ model && model.get ? model.get('archived') : null,
16108
+ ];
16109
+ for (var i = 0; i < candidates.length; i++) {
16110
+ if (candidates[i] === true) return true;
16111
+ }
16112
+ return false;
16113
+ }
16088
16114
  var all = [];
16089
16115
  if (typeof controller.getAllPrivateConversations === 'function') {
16090
16116
  var privates = controller.getAllPrivateConversations();
@@ -16101,6 +16127,7 @@ function buildListThreadsExpr() {
16101
16127
  var conversationId = normalize(model && model.get ? model.get('id') : model && model.id);
16102
16128
  if (!conversationId || seen[conversationId]) continue;
16103
16129
  seen[conversationId] = true;
16130
+ if (isArchived(model)) continue;
16104
16131
  var name = pickName(model);
16105
16132
  if (!name) continue;
16106
16133
  threads.push({
@@ -16225,7 +16252,7 @@ init_sessionStore();
16225
16252
  var STORE_LOG_VERSION = 1;
16226
16253
  var LOG_KIND_TABLE = 1e4;
16227
16254
  var LOG_KIND_MAPPING = 6003;
16228
- function createHash4() {
16255
+ function createHash3() {
16229
16256
  return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
16230
16257
  }
16231
16258
  function createDescriptor(input) {
@@ -16364,7 +16391,7 @@ var Namespace = class {
16364
16391
  },
16365
16392
  appendRow: async (data) => {
16366
16393
  const log = {
16367
- hash: createHash4(),
16394
+ hash: createHash3(),
16368
16395
  t: Date.now(),
16369
16396
  kind: LOG_KIND_TABLE,
16370
16397
  topic: descriptorToTopic(descriptor),
@@ -16376,7 +16403,7 @@ var Namespace = class {
16376
16403
  updateRow: async (data) => {
16377
16404
  const { id, ...value } = data;
16378
16405
  const log = {
16379
- hash: createHash4(),
16406
+ hash: createHash3(),
16380
16407
  t: Date.now(),
16381
16408
  kind: LOG_KIND_TABLE,
16382
16409
  topic: descriptorToTopic(descriptor),
@@ -16387,7 +16414,7 @@ var Namespace = class {
16387
16414
  },
16388
16415
  deleteRow: async (id) => {
16389
16416
  const log = {
16390
- hash: createHash4(),
16417
+ hash: createHash3(),
16391
16418
  t: Date.now(),
16392
16419
  kind: LOG_KIND_TABLE,
16393
16420
  topic: descriptorToTopic(descriptor),
@@ -16430,7 +16457,7 @@ var Namespace = class {
16430
16457
  },
16431
16458
  set: async (key, value) => {
16432
16459
  const log = {
16433
- hash: createHash4(),
16460
+ hash: createHash3(),
16434
16461
  t: Date.now(),
16435
16462
  kind: LOG_KIND_MAPPING,
16436
16463
  topic: descriptorToTopic(descriptor),
@@ -16441,7 +16468,7 @@ var Namespace = class {
16441
16468
  },
16442
16469
  delete: async (key) => {
16443
16470
  const log = {
16444
- hash: createHash4(),
16471
+ hash: createHash3(),
16445
16472
  t: Date.now(),
16446
16473
  kind: LOG_KIND_MAPPING,
16447
16474
  topic: descriptorToTopic(descriptor),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pmate/cli",
3
- "version": "0.21.14",
3
+ "version": "0.21.16",
4
4
  "description": "CLI utilities for the pMate project",
5
5
  "license": "MIT",
6
6
  "bin": {