@leemour/cli-messaging 0.98.0 → 0.100.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 (176) hide show
  1. package/README.md +6 -6
  2. package/dist/cli/bot/command.d.ts.map +1 -1
  3. package/dist/cli/bot/command.js +8 -2
  4. package/dist/cli/bot/command.js.map +1 -1
  5. package/dist/cli/bot/port.d.ts +95 -2
  6. package/dist/cli/bot/port.d.ts.map +1 -1
  7. package/dist/cli/bot/registry.d.ts +2 -0
  8. package/dist/cli/bot/registry.d.ts.map +1 -1
  9. package/dist/cli/bot/registry.js +2 -0
  10. package/dist/cli/bot/registry.js.map +1 -1
  11. package/dist/cli/bot/setup.d.ts +9 -0
  12. package/dist/cli/bot/setup.d.ts.map +1 -0
  13. package/dist/cli/bot/setup.js +155 -0
  14. package/dist/cli/bot/setup.js.map +1 -0
  15. package/dist/cli/bot/updates.d.ts +23 -0
  16. package/dist/cli/bot/updates.d.ts.map +1 -0
  17. package/dist/cli/bot/updates.js +61 -0
  18. package/dist/cli/bot/updates.js.map +1 -0
  19. package/dist/cli/bot/watch.d.ts +9 -0
  20. package/dist/cli/bot/watch.d.ts.map +1 -0
  21. package/dist/cli/bot/watch.js +197 -0
  22. package/dist/cli/bot/watch.js.map +1 -0
  23. package/dist/cli/index.d.ts +3 -2
  24. package/dist/cli/index.d.ts.map +1 -1
  25. package/dist/cli/index.js +1 -0
  26. package/dist/cli/index.js.map +1 -1
  27. package/dist/cli/messenger/conversations-command.d.ts.map +1 -1
  28. package/dist/cli/messenger/conversations-command.js +64 -4
  29. package/dist/cli/messenger/conversations-command.js.map +1 -1
  30. package/dist/cli/messenger/messages-command.d.ts.map +1 -1
  31. package/dist/cli/messenger/messages-command.js +45 -11
  32. package/dist/cli/messenger/messages-command.js.map +1 -1
  33. package/dist/cli/messenger/models-command.d.ts +1 -1
  34. package/dist/cli/messenger/models-command.d.ts.map +1 -1
  35. package/dist/cli/messenger/models-command.js +64 -3
  36. package/dist/cli/messenger/models-command.js.map +1 -1
  37. package/dist/cli/messenger/observed.d.ts.map +1 -1
  38. package/dist/cli/messenger/observed.js +27 -10
  39. package/dist/cli/messenger/observed.js.map +1 -1
  40. package/dist/cli/messenger/port.d.ts +15 -9
  41. package/dist/cli/messenger/port.d.ts.map +1 -1
  42. package/dist/cli/messenger/port.js.map +1 -1
  43. package/dist/cli/messenger/store-maintenance-command.js +20 -4
  44. package/dist/cli/messenger/store-maintenance-command.js.map +1 -1
  45. package/dist/cli/messenger/stored.d.ts.map +1 -1
  46. package/dist/cli/messenger/stored.js +41 -29
  47. package/dist/cli/messenger/stored.js.map +1 -1
  48. package/dist/conversations/chunks.d.ts +28 -0
  49. package/dist/conversations/chunks.d.ts.map +1 -0
  50. package/dist/conversations/chunks.js +45 -0
  51. package/dist/conversations/chunks.js.map +1 -0
  52. package/dist/conversations/link.d.ts +1 -1
  53. package/dist/conversations/link.d.ts.map +1 -1
  54. package/dist/conversations/link.js.map +1 -1
  55. package/dist/embeddings/embed.d.ts +22 -0
  56. package/dist/embeddings/embed.d.ts.map +1 -0
  57. package/dist/embeddings/embed.js +69 -0
  58. package/dist/embeddings/embed.js.map +1 -0
  59. package/dist/embeddings/models.d.ts +35 -0
  60. package/dist/embeddings/models.d.ts.map +1 -0
  61. package/dist/embeddings/models.js +87 -0
  62. package/dist/embeddings/models.js.map +1 -0
  63. package/dist/embeddings/pool.d.ts +15 -0
  64. package/dist/embeddings/pool.d.ts.map +1 -0
  65. package/dist/embeddings/pool.js +20 -0
  66. package/dist/embeddings/pool.js.map +1 -0
  67. package/dist/embeddings/worker.d.ts +2 -0
  68. package/dist/embeddings/worker.d.ts.map +1 -0
  69. package/dist/embeddings/worker.js +22 -0
  70. package/dist/embeddings/worker.js.map +1 -0
  71. package/dist/embeddings/workers.d.ts +8 -0
  72. package/dist/embeddings/workers.d.ts.map +1 -0
  73. package/dist/embeddings/workers.js +51 -0
  74. package/dist/embeddings/workers.js.map +1 -0
  75. package/dist/index.d.ts +0 -1
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js.map +1 -1
  78. package/dist/kit/contract.d.ts +4 -2
  79. package/dist/kit/contract.d.ts.map +1 -1
  80. package/dist/kit/contract.js +68 -27
  81. package/dist/kit/contract.js.map +1 -1
  82. package/dist/kit/fake.d.ts +2 -2
  83. package/dist/kit/fake.d.ts.map +1 -1
  84. package/dist/kit/fake.js.map +1 -1
  85. package/dist/mcp/resources.d.ts.map +1 -1
  86. package/dist/mcp/resources.js +2 -1
  87. package/dist/mcp/resources.js.map +1 -1
  88. package/dist/mcp/tools/messages.d.ts.map +1 -1
  89. package/dist/mcp/tools/messages.js +14 -4
  90. package/dist/mcp/tools/messages.js.map +1 -1
  91. package/dist/search/query.d.ts +2 -0
  92. package/dist/search/query.d.ts.map +1 -1
  93. package/dist/search/query.js +10 -7
  94. package/dist/search/query.js.map +1 -1
  95. package/dist/sends/permissions.d.ts.map +1 -1
  96. package/dist/sends/permissions.js +3 -0
  97. package/dist/sends/permissions.js.map +1 -1
  98. package/dist/services/archive.d.ts.map +1 -1
  99. package/dist/services/archive.js +12 -3
  100. package/dist/services/archive.js.map +1 -1
  101. package/dist/services/chats.js +2 -2
  102. package/dist/services/chats.js.map +1 -1
  103. package/dist/services/conversations.d.ts.map +1 -1
  104. package/dist/services/conversations.js +7 -0
  105. package/dist/services/conversations.js.map +1 -1
  106. package/dist/services/embeddings.d.ts +39 -0
  107. package/dist/services/embeddings.d.ts.map +1 -0
  108. package/dist/services/embeddings.js +82 -0
  109. package/dist/services/embeddings.js.map +1 -0
  110. package/dist/services/inbox.d.ts +2 -2
  111. package/dist/services/inbox.d.ts.map +1 -1
  112. package/dist/services/inbox.js +12 -1
  113. package/dist/services/inbox.js.map +1 -1
  114. package/dist/services/index.d.ts +6 -2
  115. package/dist/services/index.d.ts.map +1 -1
  116. package/dist/services/index.js +4 -1
  117. package/dist/services/index.js.map +1 -1
  118. package/dist/services/messages.d.ts +42 -4
  119. package/dist/services/messages.d.ts.map +1 -1
  120. package/dist/services/messages.js +175 -15
  121. package/dist/services/messages.js.map +1 -1
  122. package/dist/services/people.d.ts.map +1 -1
  123. package/dist/services/people.js +4 -2
  124. package/dist/services/people.js.map +1 -1
  125. package/dist/speech/install.d.ts +8 -1
  126. package/dist/speech/install.d.ts.map +1 -1
  127. package/dist/speech/install.js +11 -4
  128. package/dist/speech/install.js.map +1 -1
  129. package/dist/store/sqlite/accounts.d.ts +1 -0
  130. package/dist/store/sqlite/accounts.d.ts.map +1 -1
  131. package/dist/store/sqlite/accounts.js +6 -1
  132. package/dist/store/sqlite/accounts.js.map +1 -1
  133. package/dist/store/sqlite/conversations.d.ts +1 -1
  134. package/dist/store/sqlite/conversations.d.ts.map +1 -1
  135. package/dist/store/sqlite/conversations.js +29 -3
  136. package/dist/store/sqlite/conversations.js.map +1 -1
  137. package/dist/store/sqlite/drizzle/bun.js +1 -1
  138. package/dist/store/sqlite/drizzle/core.d.ts +1 -1
  139. package/dist/store/sqlite/drizzle/core.d.ts.map +1 -1
  140. package/dist/store/sqlite/drizzle/core.js +3 -1
  141. package/dist/store/sqlite/drizzle/core.js.map +1 -1
  142. package/dist/store/sqlite/drizzle/node.js +1 -1
  143. package/dist/store/sqlite/drizzle/{shared-VIVPOB3Q.js → shared-WZFJ4TMA.js} +94 -93
  144. package/dist/store/sqlite/drizzle/{shared-VIVPOB3Q.js.map → shared-WZFJ4TMA.js.map} +3 -3
  145. package/dist/store/sqlite/manifest.d.ts.map +1 -1
  146. package/dist/store/sqlite/manifest.js +1 -0
  147. package/dist/store/sqlite/manifest.js.map +1 -1
  148. package/dist/store/sqlite/messages.d.ts +1 -1
  149. package/dist/store/sqlite/messages.d.ts.map +1 -1
  150. package/dist/store/sqlite/messages.js +8 -24
  151. package/dist/store/sqlite/messages.js.map +1 -1
  152. package/dist/store/sqlite/migrations.generated.d.ts.map +1 -1
  153. package/dist/store/sqlite/migrations.generated.js +8 -0
  154. package/dist/store/sqlite/migrations.generated.js.map +1 -1
  155. package/dist/store/sqlite/schema.d.ts +176 -0
  156. package/dist/store/sqlite/schema.d.ts.map +1 -1
  157. package/dist/store/sqlite/schema.js +33 -1
  158. package/dist/store/sqlite/schema.js.map +1 -1
  159. package/dist/store/sqlite/vectors.d.ts +34 -0
  160. package/dist/store/sqlite/vectors.d.ts.map +1 -0
  161. package/dist/store/sqlite/vectors.js +54 -0
  162. package/dist/store/sqlite/vectors.js.map +1 -0
  163. package/dist/store/sqlite/words.d.ts +10 -5
  164. package/dist/store/sqlite/words.d.ts.map +1 -1
  165. package/dist/store/sqlite/words.js +26 -8
  166. package/dist/store/sqlite/words.js.map +1 -1
  167. package/dist/store/store.d.ts +29 -1
  168. package/dist/store/store.d.ts.map +1 -1
  169. package/dist/store/store.js +28 -1
  170. package/dist/store/store.js.map +1 -1
  171. package/package.json +3 -1
  172. package/parity.json +620 -3
  173. package/dist/domain/capabilities.d.ts +0 -25
  174. package/dist/domain/capabilities.d.ts.map +0 -1
  175. package/dist/domain/capabilities.js +0 -2
  176. package/dist/domain/capabilities.js.map +0 -1
@@ -0,0 +1,28 @@
1
+ import type { Id } from "../domain/models.js";
2
+ /**
3
+ * ~300 tokens: e5's tokenizer reads 3.7 characters a token in Russian and 4.0 in English
4
+ * (phase 5 E1). Characters, not tokens, so a chunk is the same whatever model embeds it.
5
+ */
6
+ export declare const CHUNK_CHARS = 1200;
7
+ export interface ChunkLine {
8
+ id: Id;
9
+ sender: string | null;
10
+ text: string;
11
+ }
12
+ export interface Chunk {
13
+ firstId: Id;
14
+ lastId: Id;
15
+ /** What the model is given; never stored, only its hash. */
16
+ text: string;
17
+ hash: string;
18
+ }
19
+ /** A chunk's text from its messages, as the build cut it: what is hashed and what the model reads. */
20
+ export declare const chunkTextOf: (lines: ChunkLine[]) => string;
21
+ export declare const chunkHash: (text: string) => string;
22
+ /**
23
+ * A conversation, oldest message first, cut at message boundaries into chunks of at most `limit`
24
+ * characters. A message longer than the limit is a chunk of its own; the model cuts it further.
25
+ * Messages with no text add nothing, and a conversation of only those has no chunk.
26
+ */
27
+ export declare const cutChunks: (members: ChunkLine[], limit?: number) => Chunk[];
28
+ //# sourceMappingURL=chunks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks.d.ts","sourceRoot":"","sources":["../../src/conversations/chunks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAA;AAE7C;;;GAGG;AACH,eAAO,MAAM,WAAW,OAAQ,CAAA;AAEhC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,EAAE,CAAA;IACN,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,EAAE,CAAA;IACX,MAAM,EAAE,EAAE,CAAA;IACV,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAID,sGAAsG;AACtG,eAAO,MAAM,WAAW,UAAW,SAAS,EAAE,KAAG,MAIlC,CAAA;AAEf,eAAO,MAAM,SAAS,SAAU,MAAM,KAAG,MAAyD,CAAA;AAElG;;;;GAIG;AACH,eAAO,MAAM,SAAS,YAAa,SAAS,EAAE,qBAAwB,KAAK,EAsB1E,CAAA"}
@@ -0,0 +1,45 @@
1
+ import { createHash } from "node:crypto";
2
+ /**
3
+ * ~300 tokens: e5's tokenizer reads 3.7 characters a token in Russian and 4.0 in English
4
+ * (phase 5 E1). Characters, not tokens, so a chunk is the same whatever model embeds it.
5
+ */
6
+ export const CHUNK_CHARS = 1_200;
7
+ const lineOf = ({ sender, text }) => (sender ? `${sender}: ${text}` : text);
8
+ /** A chunk's text from its messages, as the build cut it: what is hashed and what the model reads. */
9
+ export const chunkTextOf = (lines) => lines
10
+ .filter(({ text }) => text.trim())
11
+ .map(lineOf)
12
+ .join("\n");
13
+ export const chunkHash = (text) => createHash("sha256").update(text).digest("hex");
14
+ /**
15
+ * A conversation, oldest message first, cut at message boundaries into chunks of at most `limit`
16
+ * characters. A message longer than the limit is a chunk of its own; the model cuts it further.
17
+ * Messages with no text add nothing, and a conversation of only those has no chunk.
18
+ */
19
+ export const cutChunks = (members, limit = CHUNK_CHARS) => {
20
+ const chunks = [];
21
+ let open = [];
22
+ let size = 0;
23
+ const close = () => {
24
+ const first = open[0];
25
+ const last = open.at(-1);
26
+ if (!first || !last)
27
+ return;
28
+ const text = chunkTextOf(open);
29
+ chunks.push({ firstId: first.id, lastId: last.id, text, hash: chunkHash(text) });
30
+ open = [];
31
+ size = 0;
32
+ };
33
+ for (const member of members) {
34
+ if (!member.text.trim())
35
+ continue;
36
+ const length = lineOf(member).length;
37
+ if (open.length > 0 && size + 1 + length > limit)
38
+ close();
39
+ size += (open.length > 0 ? 1 : 0) + length;
40
+ open.push(member);
41
+ }
42
+ close();
43
+ return chunks;
44
+ };
45
+ //# sourceMappingURL=chunks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks.js","sourceRoot":"","sources":["../../src/conversations/chunks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAA;AAgBhC,MAAM,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAa,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAEtF,sGAAsG;AACtG,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAkB,EAAU,EAAE,CACxD,KAAK;KACF,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACjC,GAAG,CAAC,MAAM,CAAC;KACX,IAAI,CAAC,IAAI,CAAC,CAAA;AAEf,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAElG;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAoB,EAAE,KAAK,GAAG,WAAW,EAAW,EAAE;IAC9E,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,IAAI,IAAI,GAAgB,EAAE,CAAA;IAC1B,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACxB,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;YAAE,OAAM;QAC3B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;QAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChF,IAAI,GAAG,EAAE,CAAA;QACT,IAAI,GAAG,CAAC,CAAA;IACV,CAAC,CAAA;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAQ;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAA;QACpC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK;YAAE,KAAK,EAAE,CAAA;QACzD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACnB,CAAC;IACD,KAAK,EAAE,CAAA;IACP,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -2,7 +2,7 @@ import type { Id, Message } from "../domain/models.js";
2
2
  export declare const RULES_VERSION = 4;
3
3
  /** How far back a rule looks, in messages: 97% of reply parents sat within 50 in a measured group. */
4
4
  export declare const LOOK_BACK = 50;
5
- export type LinkInput = Pick<Message, "id" | "senderId" | "text" | "timestamp" | "replyToId" | "threadId" | "mentions">;
5
+ export type LinkInput = Pick<Message, "id" | "senderId" | "text" | "timestamp" | "replyToId" | "threadId" | "mentions"> & Partial<Pick<Message, "senderName">>;
6
6
  export interface Link {
7
7
  messageId: Id;
8
8
  parentId: Id;
@@ -1 +1 @@
1
- {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/conversations/link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAEtD,eAAO,MAAM,aAAa,IAAI,CAAA;AAE9B,sGAAsG;AACtG,eAAO,MAAM,SAAS,KAAK,CAAA;AAM3B,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC,CAAA;AAEvH,MAAM,WAAW,IAAI;IACnB,SAAS,EAAE,EAAE,CAAA;IACb,QAAQ,EAAE,EAAE,CAAA;IACZ,MAAM,EAAE,UAAU,GAAG,MAAM,CAAA;IAC3B,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,aAAa,CAAA;IACzC,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,kEAAkE;IAClE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;IAC3B,4FAA4F;IAC5F,aAAa,EAAE,EAAE,EAAE,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,sFAAsF;IACtF,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;CACrC;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,aACb,QAAQ,CAAC,SAAS,CAAC,yBACiB,WAAW,KACxD,MA0BF,CAAA"}
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/conversations/link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAEtD,eAAO,MAAM,aAAa,IAAI,CAAA;AAE9B,sGAAsG;AACtG,eAAO,MAAM,SAAS,KAAK,CAAA;AAM3B,MAAM,MAAM,SAAS,GAAG,IAAI,CAC1B,OAAO,EACP,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CACjF,GACC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAA;AAEtC,MAAM,WAAW,IAAI;IACnB,SAAS,EAAE,EAAE,CAAA;IACb,QAAQ,EAAE,EAAE,CAAA;IACZ,MAAM,EAAE,UAAU,GAAG,MAAM,CAAA;IAC3B,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,aAAa,CAAA;IACzC,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,kEAAkE;IAClE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;IAC3B,4FAA4F;IAC5F,aAAa,EAAE,EAAE,EAAE,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,sFAAsF;IACtF,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;CACrC;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,aACb,QAAQ,CAAC,SAAS,CAAC,yBACiB,WAAW,KACxD,MA0BF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/conversations/link.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/conversations/link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { TextModel } from "./models.js";
2
+ export declare const textModelsDirectory: (env?: NodeJS.ProcessEnv) => string;
3
+ export declare const placedText: (model: TextModel, directory: string) => [import("../speech/models.js").ModelFile, string][];
4
+ export declare const isTextModelInstalled: (model: TextModel, directory: string) => boolean;
5
+ /** Past 8 threads one session gains nothing; Bun takes 1 unless told (`2026-10-02-embeddings.md`). */
6
+ export declare const defaultThreads: () => number;
7
+ export type Kind = "query" | "passage";
8
+ export interface Embedder {
9
+ readonly model: TextModel;
10
+ /** One unit vector per text, in order. */
11
+ embed(texts: string[], kind: Kind): Promise<Float32Array[]>;
12
+ close(): Promise<void>;
13
+ }
14
+ /** A text longer than the model's limit keeps its beginning and the closing special token. */
15
+ export declare const truncated: (ids: number[], max: number) => number[];
16
+ export declare const unit: (vector: Float32Array) => Float32Array;
17
+ /** The mean over a single text's tokens: one text a run, so no padding to mask. */
18
+ export declare const meanOf: (data: Float32Array, tokens: number, dims: number) => Float32Array;
19
+ export declare const openEmbedder: (model: TextModel, directory: string, { threads }?: {
20
+ threads?: number;
21
+ }) => Promise<Embedder>;
22
+ //# sourceMappingURL=embed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/embeddings/embed.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,eAAO,MAAM,mBAAmB,SAAS,MAAM,CAAC,UAAU,KAAiB,MAA4C,CAAA;AAEvH,eAAO,MAAM,UAAU,UAAW,SAAS,aAAa,MAAM,wDACoC,CAAA;AAElG,eAAO,MAAM,oBAAoB,UAAW,SAAS,aAAa,MAAM,KAAG,OAC/B,CAAA;AAE5C,sGAAsG;AACtG,eAAO,MAAM,cAAc,QAAO,MAA6C,CAAA;AAE/E,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,SAAS,CAAA;AAEtC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,0CAA0C;IAC1C,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,8FAA8F;AAC9F,eAAO,MAAM,SAAS,QAAS,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,EACe,CAAA;AAE5E,eAAO,MAAM,IAAI,WAAY,YAAY,KAAG,YAK3C,CAAA;AAED,mFAAmF;AACnF,eAAO,MAAM,MAAM,SAAU,YAAY,UAAU,MAAM,QAAQ,MAAM,KAAG,YAOzE,CAAA;AAED,eAAO,MAAM,YAAY,UAChB,SAAS,aACL,MAAM,gBACe;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,KACnD,OAAO,CAAC,QAAQ,CA6ClB,CAAA"}
@@ -0,0 +1,69 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { availableParallelism } from "node:os";
3
+ import { basename, join } from "node:path";
4
+ import { filesPresent, sharedModelsDirectory } from "../speech/install.js";
5
+ export const textModelsDirectory = (env = process.env) => sharedModelsDirectory("text", env);
6
+ export const placedText = (model, directory) => model.files.map((file) => [file, join(directory, model.id, file.name)]);
7
+ export const isTextModelInstalled = (model, directory) => filesPresent(placedText(model, directory));
8
+ /** Past 8 threads one session gains nothing; Bun takes 1 unless told (`2026-10-02-embeddings.md`). */
9
+ export const defaultThreads = () => Math.min(8, availableParallelism());
10
+ /** A text longer than the model's limit keeps its beginning and the closing special token. */
11
+ export const truncated = (ids, max) => ids.length <= max ? ids : [...ids.slice(0, max - 1), ids.at(-1)];
12
+ export const unit = (vector) => {
13
+ let sum = 0;
14
+ for (const value of vector)
15
+ sum += value * value;
16
+ const length = Math.sqrt(sum);
17
+ return length === 0 ? vector : vector.map((value) => value / length);
18
+ };
19
+ /** The mean over a single text's tokens: one text a run, so no padding to mask. */
20
+ export const meanOf = (data, tokens, dims) => {
21
+ const mean = new Float32Array(dims);
22
+ for (let token = 0; token < tokens; token++) {
23
+ for (let dim = 0; dim < dims; dim++)
24
+ mean[dim] = mean[dim] + data[token * dims + dim] / tokens;
25
+ }
26
+ return mean;
27
+ };
28
+ export const openEmbedder = async (model, directory, { threads = defaultThreads() } = {}) => {
29
+ const [{ Tokenizer }, ort] = await Promise.all([
30
+ import("@huggingface/tokenizers"),
31
+ import("@leemour/cli-messaging-onnx"),
32
+ ]);
33
+ const path = (name) => join(directory, model.id, name);
34
+ const tokenizer = new Tokenizer(JSON.parse(readFileSync(path("tokenizer.json"), "utf8")), JSON.parse(readFileSync(path("tokenizer_config.json"), "utf8")));
35
+ ort.env.wasm.numThreads = threads;
36
+ const session = await ort.InferenceSession.create(readFileSync(path(model.onnx)), model.externalData
37
+ ? { externalData: [{ path: basename(model.externalData), data: readFileSync(path(model.externalData)) }] }
38
+ : {});
39
+ const typeIds = session.inputNames.includes("token_type_ids");
40
+ const one = async (text) => {
41
+ const ids = truncated(tokenizer.encode(text).ids, model.maxTokens);
42
+ const shape = [1, ids.length];
43
+ const feeds = {
44
+ input_ids: new ort.Tensor("int64", BigInt64Array.from(ids, BigInt), shape),
45
+ attention_mask: new ort.Tensor("int64", new BigInt64Array(ids.length).fill(1n), shape),
46
+ };
47
+ if (typeIds)
48
+ feeds.token_type_ids = new ort.Tensor("int64", new BigInt64Array(ids.length), shape);
49
+ const output = await session.run(feeds);
50
+ if (model.pooling === "sentence_embedding") {
51
+ return unit(Float32Array.from(output.sentence_embedding?.data));
52
+ }
53
+ const hidden = output.last_hidden_state;
54
+ if (!hidden)
55
+ throw new Error(`${model.id} gave no last_hidden_state`);
56
+ return unit(meanOf(hidden.data, ids.length, hidden.dims.at(-1)));
57
+ };
58
+ return {
59
+ model,
60
+ embed: async (texts, kind) => {
61
+ const vectors = [];
62
+ for (const text of texts)
63
+ vectors.push(await one(`${model.prefix[kind]}${text}`));
64
+ return vectors;
65
+ },
66
+ close: () => session.release(),
67
+ };
68
+ };
69
+ //# sourceMappingURL=embed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/embeddings/embed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { ModelFile } from "../speech/models.js";
2
+ /**
3
+ * The text embedding models `conversations embed` can use, each **pinned to one commit** and checked by
4
+ * sha256, as the speech models are. Measured 2026-10-02 through `@leemour/cli-messaging-onnx`, 4 threads, a
5
+ * Ryzen AI 9 HX 470 laptop, 300-token chunks, Node 24 and Bun 1.3.14 alike
6
+ * (`docs/storage/research/2026-10-02-embeddings.md`): e5-small ~10 chunks a second, EmbeddingGemma ~1.5.
7
+ */
8
+ export interface TextModel {
9
+ id: string;
10
+ title: string;
11
+ languages: string;
12
+ licence: string;
13
+ /** A licence the user accepts before the model is downloaded, or nothing for an open one. */
14
+ terms?: string;
15
+ dims: number;
16
+ /** What the model was trained on; a longer text is cut. */
17
+ maxTokens: number;
18
+ /** About how many ~300-token chunks a second one session embeds on 8 threads, for the estimate. */
19
+ chunksPerSecond: number;
20
+ /** How the model's output becomes one vector. */
21
+ pooling: "mean" | "sentence_embedding";
22
+ /** Prepended to a search and to a stored chunk: the model was trained with them. */
23
+ prefix: {
24
+ query: string;
25
+ passage: string;
26
+ };
27
+ files: ModelFile[];
28
+ /** The ONNX file among `files`, and the weights it keeps beside itself, if any. */
29
+ onnx: string;
30
+ externalData?: string;
31
+ }
32
+ export declare const TEXT_MODELS: TextModel[];
33
+ export declare const DEFAULT_TEXT_MODEL = "e5-small";
34
+ export declare const textModel: (id: string) => TextModel;
35
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/embeddings/models.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,6FAA6F;IAC7F,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAA;IACjB,mGAAmG;IACnG,eAAe,EAAE,MAAM,CAAA;IACvB,iDAAiD;IACjD,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAAA;IACtC,oFAAoF;IACpF,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1C,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAQD,eAAO,MAAM,WAAW,EAAE,SAAS,EAyElC,CAAA;AAED,eAAO,MAAM,kBAAkB,aAAa,CAAA;AAE5C,eAAO,MAAM,SAAS,OAAQ,MAAM,KAAG,SAStC,CAAA"}
@@ -0,0 +1,87 @@
1
+ import { CliError } from "@leemour/cli-core";
2
+ const huggingFace = (repository, commit) => (name) => `https://huggingface.co/${repository}/resolve/${commit}/${name}`;
3
+ const e5 = huggingFace("Xenova/multilingual-e5-small", "761b726dd34fb83930e26aab4e9ac3899aa1fa78");
4
+ const gemma = huggingFace("onnx-community/embeddinggemma-300m-ONNX", "5090578d9565bb06545b4552f76e6bc2c93e4a66");
5
+ export const TEXT_MODELS = [
6
+ {
7
+ id: "e5-small",
8
+ title: "multilingual-e5-small, 8-bit",
9
+ languages: "about 100 languages, Russian and English among them",
10
+ licence: "MIT",
11
+ dims: 384,
12
+ maxTokens: 512,
13
+ chunksPerSecond: 15,
14
+ pooling: "mean",
15
+ prefix: { query: "query: ", passage: "passage: " },
16
+ onnx: "onnx/model_quantized.onnx",
17
+ files: [
18
+ {
19
+ name: "onnx/model_quantized.onnx",
20
+ url: e5("onnx/model_quantized.onnx"),
21
+ sha256: "f80102d3f2a1229f387d3c81909990d8945513e347b0eab049f7de3c6f98c193",
22
+ bytes: 118_308_185,
23
+ },
24
+ {
25
+ name: "tokenizer.json",
26
+ url: e5("tokenizer.json"),
27
+ sha256: "0b44a9d7b51c3c62626640cda0e2c2f70fdacdc25bbbd68038369d14ebdf4c39",
28
+ bytes: 17_082_730,
29
+ },
30
+ {
31
+ name: "tokenizer_config.json",
32
+ url: e5("tokenizer_config.json"),
33
+ sha256: "a1d6bc8734a6f635dc158508bef000f8e2e5a759c7d92f984b2c86e5ff53425b",
34
+ bytes: 443,
35
+ },
36
+ ],
37
+ },
38
+ {
39
+ id: "embeddinggemma",
40
+ title: "EmbeddingGemma 300M, 4-bit",
41
+ languages: "over 100 languages — the best of the two on chat, about seven times slower",
42
+ licence: "Gemma Terms of Use",
43
+ terms: "https://ai.google.dev/gemma/terms",
44
+ dims: 768,
45
+ maxTokens: 2048,
46
+ chunksPerSecond: 2,
47
+ pooling: "sentence_embedding",
48
+ prefix: { query: "task: search result | query: ", passage: "title: none | text: " },
49
+ onnx: "onnx/model_q4.onnx",
50
+ externalData: "onnx/model_q4.onnx_data",
51
+ files: [
52
+ {
53
+ name: "onnx/model_q4.onnx",
54
+ url: gemma("onnx/model_q4.onnx"),
55
+ sha256: "ad1dfee81a70f7944b9b9d1cc6e48075b832881cf33fab2f2b248be78f3f0043",
56
+ bytes: 519_322,
57
+ },
58
+ {
59
+ name: "onnx/model_q4.onnx_data",
60
+ url: gemma("onnx/model_q4.onnx_data"),
61
+ sha256: "599962c3143b040de2dd05e5975be3e9091dd067cacc6a8f7186e3203bab9e02",
62
+ bytes: 196_725_760,
63
+ },
64
+ {
65
+ name: "tokenizer.json",
66
+ url: gemma("tokenizer.json"),
67
+ sha256: "4dda02faaf32bc91031dc8c88457ac272b00c1016cc679757d1c441b248b9c47",
68
+ bytes: 20_323_312,
69
+ },
70
+ {
71
+ name: "tokenizer_config.json",
72
+ url: gemma("tokenizer_config.json"),
73
+ sha256: "3ca953eea6c3c9fcda9cf3df22949ff18b216f7c74bd6459230f3f1013953f3a",
74
+ bytes: 1_156_830,
75
+ },
76
+ ],
77
+ },
78
+ ];
79
+ export const DEFAULT_TEXT_MODEL = "e5-small";
80
+ export const textModel = (id) => {
81
+ const found = TEXT_MODELS.find((model) => model.id === id);
82
+ if (!found) {
83
+ throw new CliError("validation_error", `no text model ${id} — one of: ${TEXT_MODELS.map((model) => model.id).join(", ")}`);
84
+ }
85
+ return found;
86
+ };
87
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/embeddings/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type Embedder } from "./embed.js";
2
+ import type { TextModel } from "./models.js";
3
+ /** Each worker holds its own copy of the model: 550–650 MB measured for e5-small (phase 5 E12). */
4
+ export declare const WORKER_BYTES = 700000000;
5
+ /**
6
+ * One session in this thread, or `workers` sessions in worker threads with the threads split between
7
+ * them: ~1.8× at 3 workers, ~2× at 6 on a 12-core laptop. Refuses a count whose copies would not fit in
8
+ * the free memory, so a run never pushes the machine into swap.
9
+ */
10
+ export declare const openPool: (model: TextModel, directory: string, { workers, threads, free, }?: {
11
+ workers?: number;
12
+ threads?: number;
13
+ free?: number;
14
+ }) => Promise<Embedder>;
15
+ //# sourceMappingURL=pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/embeddings/pool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,QAAQ,EAAgB,MAAM,YAAY,CAAA;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,mGAAmG;AACnG,eAAO,MAAM,YAAY,YAAc,CAAA;AAEvC;;;;GAIG;AACH,eAAO,MAAM,QAAQ,UACZ,SAAS,aACL,MAAM,gCAKd;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KACvD,OAAO,CAAC,QAAQ,CAUlB,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { freemem } from "node:os";
2
+ import { CliError } from "@leemour/cli-core";
3
+ import { defaultThreads, openEmbedder } from "./embed.js";
4
+ /** Each worker holds its own copy of the model: 550–650 MB measured for e5-small (phase 5 E12). */
5
+ export const WORKER_BYTES = 700_000_000;
6
+ /**
7
+ * One session in this thread, or `workers` sessions in worker threads with the threads split between
8
+ * them: ~1.8× at 3 workers, ~2× at 6 on a 12-core laptop. Refuses a count whose copies would not fit in
9
+ * the free memory, so a run never pushes the machine into swap.
10
+ */
11
+ export const openPool = async (model, directory, { workers = 1, threads = defaultThreads(), free = freemem(), } = {}) => {
12
+ if (workers <= 1)
13
+ return openEmbedder(model, directory, { threads });
14
+ if (workers * WORKER_BYTES > free) {
15
+ throw new CliError("validation_error", `${workers} workers need about ${Math.round((workers * WORKER_BYTES) / 1e9)} GB, and ${Math.floor(free / 1e9)} GB is free — use fewer`);
16
+ }
17
+ const { openWorkers } = await import("./workers.js");
18
+ return openWorkers(model, directory, { workers, threads: Math.max(1, Math.floor(threads / workers)) });
19
+ };
20
+ //# sourceMappingURL=pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/embeddings/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAiB,YAAY,EAAE,MAAM,YAAY,CAAA;AAGxE,mGAAmG;AACnG,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAA;AAEvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,KAAgB,EAChB,SAAiB,EACjB,EACE,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,cAAc,EAAE,EAC1B,IAAI,GAAG,OAAO,EAAE,GACjB,GAA0D,EAAE,EAC1C,EAAE;IACrB,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;IACpE,IAAI,OAAO,GAAG,YAAY,GAAG,IAAI,EAAE,CAAC;QAClC,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,GAAG,OAAO,uBAAuB,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,yBAAyB,CACvI,CAAA;IACH,CAAC;IACD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;IACpD,OAAO,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;AACxG,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/embeddings/worker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { parentPort, workerData } from "node:worker_threads";
2
+ import { openEmbedder } from "./embed.js";
3
+ const { model, directory, threads } = workerData;
4
+ const embedder = await openEmbedder(model, directory, { threads });
5
+ const port = parentPort;
6
+ if (!port)
7
+ throw new Error("run as a worker");
8
+ port.on("message", async (job) => {
9
+ if (job === "close") {
10
+ await embedder.close();
11
+ port.close();
12
+ return;
13
+ }
14
+ try {
15
+ port.postMessage({ id: job.id, vectors: await embedder.embed(job.texts, job.kind) });
16
+ }
17
+ catch (error) {
18
+ port.postMessage({ id: job.id, error: error instanceof Error ? error.message : String(error) });
19
+ }
20
+ });
21
+ port.postMessage("ready");
22
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/embeddings/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAa,YAAY,EAAE,MAAM,YAAY,CAAA;AAGpD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,UAAsE,CAAA;AAC5G,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;AAClE,MAAM,IAAI,GAAG,UAAU,CAAA;AACvB,IAAI,CAAC,IAAI;IAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;AAE7C,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAA0D,EAAE,EAAE;IACtF,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;QACtB,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,OAAM;IACR,CAAC;IACD,IAAI,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACtF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACjG,CAAC;AACH,CAAC,CAAC,CAAA;AACF,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { Embedder } from "./embed.js";
2
+ import type { TextModel } from "./models.js";
3
+ /** `workers` worker threads, each with its own session on `threads` threads; texts are split between them. */
4
+ export declare const openWorkers: (model: TextModel, directory: string, { workers, threads }: {
5
+ workers: number;
6
+ threads: number;
7
+ }) => Promise<Embedder>;
8
+ //# sourceMappingURL=workers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workers.d.ts","sourceRoot":"","sources":["../../src/embeddings/workers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAQ,MAAM,YAAY,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,8GAA8G;AAC9G,eAAO,MAAM,WAAW,UACf,SAAS,aACL,MAAM,wBACK;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,KACzD,OAAO,CAAC,QAAQ,CAkDlB,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { Worker } from "node:worker_threads";
2
+ /** `workers` worker threads, each with its own session on `threads` threads; texts are split between them. */
3
+ export const openWorkers = async (model, directory, { workers, threads }) => {
4
+ const pending = new Map();
5
+ const started = await Promise.allSettled(Array.from({ length: workers }, () => {
6
+ const worker = new Worker(new URL("./worker.js", import.meta.url), {
7
+ workerData: { model, directory, threads },
8
+ });
9
+ return new Promise((resolve, reject) => {
10
+ worker.once("error", reject);
11
+ worker.once("message", (first) => {
12
+ if (first !== "ready")
13
+ return reject(new Error("the embedding worker did not start"));
14
+ worker.off("error", reject);
15
+ worker.on("message", ({ id, vectors, error }) => {
16
+ const job = pending.get(id);
17
+ pending.delete(id);
18
+ if (error !== undefined || !vectors)
19
+ job?.reject(new Error(error ?? "no vectors"));
20
+ else
21
+ job?.resolve(vectors);
22
+ });
23
+ resolve(worker);
24
+ });
25
+ });
26
+ }));
27
+ const pool = started.flatMap((result) => (result.status === "fulfilled" ? [result.value] : []));
28
+ const failed = started.find((result) => result.status === "rejected");
29
+ if (failed) {
30
+ await Promise.all(pool.map((worker) => worker.terminate()));
31
+ throw failed.reason;
32
+ }
33
+ let next = 0;
34
+ const run = (worker, texts, kind) => new Promise((resolve, reject) => {
35
+ const id = next++;
36
+ pending.set(id, { resolve, reject });
37
+ worker.postMessage({ id, texts, kind });
38
+ });
39
+ return {
40
+ model,
41
+ embed: async (texts, kind) => {
42
+ const share = Math.ceil(texts.length / pool.length);
43
+ const parts = await Promise.all(pool.map((worker, index) => run(worker, texts.slice(index * share, (index + 1) * share), kind)));
44
+ return parts.flat();
45
+ },
46
+ close: async () => {
47
+ await Promise.all(pool.map((worker) => worker.terminate()));
48
+ },
49
+ };
50
+ };
51
+ //# sourceMappingURL=workers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workers.js","sourceRoot":"","sources":["../../src/embeddings/workers.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- export type { Capabilities } from "./domain/capabilities.js";
2
1
  export { formatLocator, isLocator, type MessageLocator, parseLocator } from "./domain/locator.js";
3
2
  export { type Markup, parseMarkdown } from "./domain/markdown.js";
4
3
  export type * from "./domain/models.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACjG,OAAO,EAAE,KAAK,MAAM,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACjE,mBAAmB,oBAAoB,CAAA;AACvC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACxF,OAAO,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACxF,OAAO,EAAE,IAAI,EAAE,KAAK,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACjG,OAAO,EAAE,KAAK,MAAM,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACjE,mBAAmB,oBAAoB,CAAA;AACvC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACxF,OAAO,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACxF,OAAO,EAAE,IAAI,EAAE,KAAK,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAuB,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACjG,OAAO,EAAe,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAGjE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACxF,OAAO,EAAsB,aAAa,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAsB,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACxF,OAAO,EAAE,IAAI,EAAqB,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAoB,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAuB,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACjG,OAAO,EAAe,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAGjE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACxF,OAAO,EAAsB,aAAa,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAsB,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACxF,OAAO,EAAE,IAAI,EAAqB,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAoB,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA"}
@@ -18,9 +18,11 @@ export interface ContractOptions {
18
18
  orderBy?: "id" | "time";
19
19
  /** How long `watch` may take to say it listens, and to end once aborted. */
20
20
  waitMs?: number;
21
+ /** As the messenger's `history`: a `"server"` messenger's adapter must have every `ServerReads` method. */
22
+ history?: "server" | "store";
21
23
  }
22
24
  /** Every method of the optional groups, which `capability` hands over or refuses. */
23
- export declare const OPTIONAL_METHODS: readonly ["historyAfter", "historyBefore", "topics", "inspect", "edit", "forward", "delete", "pin", "unpin", "react", "markRead", "poll", "vote", "closePoll", "createPoll", "watch", "feed", "download", "transcribe", "scheduled", "members", "admins", "chatEvents", "sessions", "lookup", "addressBook", "people", "createGroup", "join", "leave", "group", "updateGroup", "resetInviteLink", "addMembers", "removeMembers", "addAdmin", "removeAdmin", "folders", "createFolder", "updateFolder", "deleteFolder", "addContact", "removeContact", "block", "unblock", "renameContact", "importContacts", "updateProfile", "endOtherSessions"];
25
+ export declare const OPTIONAL_METHODS: readonly ["chats", "history", "around", "contact", "historyAfter", "historyBefore", "topics", "inspect", "edit", "forward", "delete", "pin", "unpin", "react", "markRead", "poll", "vote", "closePoll", "createPoll", "watch", "feed", "download", "transcribe", "scheduled", "members", "admins", "chatEvents", "sessions", "lookup", "addressBook", "people", "createGroup", "join", "leave", "group", "updateGroup", "resetInviteLink", "addMembers", "removeMembers", "addAdmin", "removeAdmin", "folders", "createFolder", "updateFolder", "deleteFolder", "addContact", "removeContact", "block", "unblock", "renameContact", "importContacts", "updateProfile", "endOtherSessions"];
24
26
  /**
25
27
  * The port's promises as cases any test runner can run: each connects through `connect`, checks
26
28
  * with `node:assert/strict` and closes the adapter. None needs a live service.
@@ -33,5 +35,5 @@ export declare const OPTIONAL_METHODS: readonly ["historyAfter", "historyBefore"
33
35
  * })
34
36
  * ```
35
37
  */
36
- export declare const contractCases: ({ connect, ids, orderBy, waitMs, }: ContractOptions) => ContractCase[];
38
+ export declare const contractCases: ({ connect, ids, orderBy, waitMs, history, }: ContractOptions) => ContractCase[];
37
39
  //# sourceMappingURL=contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/kit/contract.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAG5E,OAAO,EAA2B,KAAK,OAAO,EAAE,KAAK,IAAI,EAAW,MAAM,WAAW,CAAA;AAErF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,6FAA6F;IAC7F,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6GAA6G;IAC7G,GAAG,IAAI,OAAO,CAAC,SAAS,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChD;AAED,MAAM,WAAW,eAAe;IAC9B,oGAAoG;IACpG,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACrE,2GAA2G;IAC3G,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,0GAA0G;IAC1G,OAAO,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;IACvB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qFAAqF;AACrF,eAAO,MAAM,gBAAgB,mnBAkD2B,CAAA;AAmCxD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,uCAKvB,eAAe,KAAG,YAAY,EAuThC,CAAA"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/kit/contract.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,KAAK,gBAAgB,EAAoB,MAAM,0BAA0B,CAAA;AAGjH,OAAO,EAA2B,KAAK,OAAO,EAAE,KAAK,IAAI,EAAW,MAAM,WAAW,CAAA;AAErF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,6FAA6F;IAC7F,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6GAA6G;IAC7G,GAAG,IAAI,OAAO,CAAC,SAAS,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChD;AAED,MAAM,WAAW,eAAe;IAC9B,oGAAoG;IACpG,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACrE,2GAA2G;IAC3G,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,0GAA0G;IAC1G,OAAO,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;IACvB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2GAA2G;IAC3G,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;CAC7B;AAWD,qFAAqF;AACrF,eAAO,MAAM,gBAAgB,4pBAmD2B,CAAA;AAmCxD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,gDAMvB,eAAe,KAAG,YAAY,EAkWhC,CAAA"}