@wirecat/cli-core 0.306.0 → 0.307.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 (306) hide show
  1. package/dist/analysis/consents.js +4 -4
  2. package/dist/analysis/consents.js.map +1 -1
  3. package/dist/attachments/directory.js +1 -1
  4. package/dist/attachments/directory.js.map +1 -1
  5. package/dist/botcheck/service.js +3 -3
  6. package/dist/botcheck/service.js.map +1 -1
  7. package/dist/cli/bot/context.d.ts +2 -2
  8. package/dist/cli/bot/copy.js +4 -4
  9. package/dist/cli/bot/copy.js.map +1 -1
  10. package/dist/cli/bot/messages.d.ts.map +1 -1
  11. package/dist/cli/bot/messages.js +2 -2
  12. package/dist/cli/bot/messages.js.map +1 -1
  13. package/dist/cli/bot/moderation.js +1 -1
  14. package/dist/cli/bot/moderation.js.map +1 -1
  15. package/dist/cli/bot/people.js +4 -4
  16. package/dist/cli/bot/people.js.map +1 -1
  17. package/dist/cli/bot/store.js +2 -2
  18. package/dist/cli/bot/store.js.map +1 -1
  19. package/dist/cli/config-keys.d.ts.map +1 -1
  20. package/dist/cli/config-keys.js +2 -1
  21. package/dist/cli/config-keys.js.map +1 -1
  22. package/dist/cli/messenger/account-command.js +1 -1
  23. package/dist/cli/messenger/account-command.js.map +1 -1
  24. package/dist/cli/messenger/complete-command.js +2 -2
  25. package/dist/cli/messenger/complete-command.js.map +1 -1
  26. package/dist/cli/messenger/context.js +1 -1
  27. package/dist/cli/messenger/context.js.map +1 -1
  28. package/dist/cli/messenger/serve-members.js +1 -1
  29. package/dist/cli/messenger/serve-members.js.map +1 -1
  30. package/dist/cli/messenger/serve-stems.js +3 -3
  31. package/dist/cli/messenger/serve-stems.js.map +1 -1
  32. package/dist/cli/messenger/stored.d.ts.map +1 -1
  33. package/dist/cli/messenger/stored.js +21 -21
  34. package/dist/cli/messenger/stored.js.map +1 -1
  35. package/dist/cli/store-settings.js +3 -3
  36. package/dist/cli/store-settings.js.map +1 -1
  37. package/dist/errors/reasons.d.ts.map +1 -1
  38. package/dist/errors/reasons.js +1 -0
  39. package/dist/errors/reasons.js.map +1 -1
  40. package/dist/files/atomic-write.d.ts +15 -0
  41. package/dist/files/atomic-write.d.ts.map +1 -0
  42. package/dist/files/atomic-write.js +35 -0
  43. package/dist/files/atomic-write.js.map +1 -0
  44. package/dist/files/index.d.ts +2 -0
  45. package/dist/files/index.d.ts.map +1 -1
  46. package/dist/files/index.js +2 -0
  47. package/dist/files/index.js.map +1 -1
  48. package/dist/files/lock.d.ts +14 -0
  49. package/dist/files/lock.d.ts.map +1 -0
  50. package/dist/files/lock.js +22 -0
  51. package/dist/files/lock.js.map +1 -0
  52. package/dist/files/native-lease-release.d.ts +3 -1
  53. package/dist/files/native-lease-release.d.ts.map +1 -1
  54. package/dist/files/native-lease-release.js +7 -3
  55. package/dist/files/native-lease-release.js.map +1 -1
  56. package/dist/kit/search-recipes.d.ts.map +1 -1
  57. package/dist/kit/search-recipes.js +5 -5
  58. package/dist/kit/search-recipes.js.map +1 -1
  59. package/dist/mcp/resources.js +1 -1
  60. package/dist/mcp/resources.js.map +1 -1
  61. package/dist/mcp/tools/chats.js +1 -1
  62. package/dist/mcp/tools/chats.js.map +1 -1
  63. package/dist/replies/dry-run.d.ts.map +1 -1
  64. package/dist/replies/dry-run.js +5 -5
  65. package/dist/replies/dry-run.js.map +1 -1
  66. package/dist/services/admin-statistics.js +6 -6
  67. package/dist/services/admin-statistics.js.map +1 -1
  68. package/dist/services/agenda.js +1 -1
  69. package/dist/services/agenda.js.map +1 -1
  70. package/dist/services/archive-gaps.js +4 -4
  71. package/dist/services/archive-gaps.js.map +1 -1
  72. package/dist/services/archive.d.ts.map +1 -1
  73. package/dist/services/archive.js +23 -23
  74. package/dist/services/archive.js.map +1 -1
  75. package/dist/services/attachments.d.ts.map +1 -1
  76. package/dist/services/attachments.js +21 -10
  77. package/dist/services/attachments.js.map +1 -1
  78. package/dist/services/chat-documents.js +2 -2
  79. package/dist/services/chat-documents.js.map +1 -1
  80. package/dist/services/chats.d.ts.map +1 -1
  81. package/dist/services/chats.js +24 -19
  82. package/dist/services/chats.js.map +1 -1
  83. package/dist/services/conversations.js +15 -15
  84. package/dist/services/conversations.js.map +1 -1
  85. package/dist/services/counters.d.ts.map +1 -1
  86. package/dist/services/counters.js +4 -4
  87. package/dist/services/counters.js.map +1 -1
  88. package/dist/services/embeddings-maintenance.d.ts.map +1 -1
  89. package/dist/services/embeddings-maintenance.js +13 -13
  90. package/dist/services/embeddings-maintenance.js.map +1 -1
  91. package/dist/services/embeddings-search.d.ts.map +1 -1
  92. package/dist/services/embeddings-search.js +16 -16
  93. package/dist/services/embeddings-search.js.map +1 -1
  94. package/dist/services/evidence-read.js +1 -1
  95. package/dist/services/evidence-read.js.map +1 -1
  96. package/dist/services/folders.js +1 -1
  97. package/dist/services/folders.js.map +1 -1
  98. package/dist/services/inbox.js +4 -4
  99. package/dist/services/inbox.js.map +1 -1
  100. package/dist/services/index.d.ts +1 -1
  101. package/dist/services/index.d.ts.map +1 -1
  102. package/dist/services/index.js.map +1 -1
  103. package/dist/services/mail-search.d.ts.map +1 -1
  104. package/dist/services/mail-search.js +15 -13
  105. package/dist/services/mail-search.js.map +1 -1
  106. package/dist/services/meeting-context.d.ts +4 -2
  107. package/dist/services/meeting-context.d.ts.map +1 -1
  108. package/dist/services/meeting-context.js +1 -1
  109. package/dist/services/meeting-context.js.map +1 -1
  110. package/dist/services/meeting-tasks.d.ts +4 -2
  111. package/dist/services/meeting-tasks.d.ts.map +1 -1
  112. package/dist/services/meeting-tasks.js +1 -1
  113. package/dist/services/meeting-tasks.js.map +1 -1
  114. package/dist/services/mentions.d.ts.map +1 -1
  115. package/dist/services/mentions.js +8 -8
  116. package/dist/services/mentions.js.map +1 -1
  117. package/dist/services/message-resolution.d.ts.map +1 -1
  118. package/dist/services/message-resolution.js +6 -6
  119. package/dist/services/message-resolution.js.map +1 -1
  120. package/dist/services/messages-archive-search.js +4 -4
  121. package/dist/services/messages-archive-search.js.map +1 -1
  122. package/dist/services/messages-combined.js +3 -3
  123. package/dist/services/messages-combined.js.map +1 -1
  124. package/dist/services/messages-discovery.js +2 -2
  125. package/dist/services/messages-discovery.js.map +1 -1
  126. package/dist/services/messages-search.d.ts.map +1 -1
  127. package/dist/services/messages-search.js +13 -13
  128. package/dist/services/messages-search.js.map +1 -1
  129. package/dist/services/messages.js +6 -6
  130. package/dist/services/messages.js.map +1 -1
  131. package/dist/services/metadata.js +9 -9
  132. package/dist/services/metadata.js.map +1 -1
  133. package/dist/services/notes-search.js +4 -4
  134. package/dist/services/notes-search.js.map +1 -1
  135. package/dist/services/people.d.ts.map +1 -1
  136. package/dist/services/people.js +18 -17
  137. package/dist/services/people.js.map +1 -1
  138. package/dist/services/person-context.js +16 -16
  139. package/dist/services/person-context.js.map +1 -1
  140. package/dist/services/person-meeting-context.d.ts +3 -2
  141. package/dist/services/person-meeting-context.d.ts.map +1 -1
  142. package/dist/services/person-meeting-context.js +3 -3
  143. package/dist/services/person-meeting-context.js.map +1 -1
  144. package/dist/services/person-profile.js +5 -5
  145. package/dist/services/person-profile.js.map +1 -1
  146. package/dist/services/person-timeline.js +2 -2
  147. package/dist/services/person-timeline.js.map +1 -1
  148. package/dist/services/pictures.d.ts.map +1 -1
  149. package/dist/services/pictures.js +9 -6
  150. package/dist/services/pictures.js.map +1 -1
  151. package/dist/services/private-people.d.ts.map +1 -1
  152. package/dist/services/private-people.js +7 -7
  153. package/dist/services/private-people.js.map +1 -1
  154. package/dist/services/rankings-selection.js +1 -1
  155. package/dist/services/rankings-selection.js.map +1 -1
  156. package/dist/services/rankings.js +7 -7
  157. package/dist/services/rankings.js.map +1 -1
  158. package/dist/services/retention.d.ts +3 -3
  159. package/dist/services/retention.js +2 -2
  160. package/dist/services/retention.js.map +1 -1
  161. package/dist/services/search-all-meetings.js +2 -2
  162. package/dist/services/search-all-meetings.js.map +1 -1
  163. package/dist/services/search-all.d.ts.map +1 -1
  164. package/dist/services/search-all.js +3 -1
  165. package/dist/services/search-all.js.map +1 -1
  166. package/dist/services/search-catchup.js +1 -1
  167. package/dist/services/search-catchup.js.map +1 -1
  168. package/dist/services/search-kind.js +4 -4
  169. package/dist/services/search-kind.js.map +1 -1
  170. package/dist/services/search-refresh.d.ts.map +1 -1
  171. package/dist/services/search-refresh.js +2 -2
  172. package/dist/services/search-refresh.js.map +1 -1
  173. package/dist/services/searches.js +7 -7
  174. package/dist/services/searches.js.map +1 -1
  175. package/dist/services/server-search.js +4 -4
  176. package/dist/services/server-search.js.map +1 -1
  177. package/dist/services/tags.d.ts.map +1 -1
  178. package/dist/services/tags.js +7 -4
  179. package/dist/services/tags.js.map +1 -1
  180. package/dist/services/task-rules.js +6 -6
  181. package/dist/services/task-rules.js.map +1 -1
  182. package/dist/services/tasks.js +2 -2
  183. package/dist/services/tasks.js.map +1 -1
  184. package/dist/services/thread-context.d.ts.map +1 -1
  185. package/dist/services/thread-context.js +5 -5
  186. package/dist/services/thread-context.js.map +1 -1
  187. package/dist/speech/hearing.d.ts.map +1 -1
  188. package/dist/speech/hearing.js +2 -2
  189. package/dist/speech/hearing.js.map +1 -1
  190. package/dist/store/account-store.d.ts +64 -17
  191. package/dist/store/account-store.d.ts.map +1 -1
  192. package/dist/store/account-store.js +75 -121
  193. package/dist/store/account-store.js.map +1 -1
  194. package/dist/store/accounts.d.ts +35 -0
  195. package/dist/store/accounts.d.ts.map +1 -0
  196. package/dist/store/accounts.js +47 -0
  197. package/dist/store/accounts.js.map +1 -0
  198. package/dist/store/attachments.d.ts +40 -0
  199. package/dist/store/attachments.d.ts.map +1 -0
  200. package/dist/store/attachments.js +50 -0
  201. package/dist/store/attachments.js.map +1 -0
  202. package/dist/store/chats.d.ts +47 -0
  203. package/dist/store/chats.d.ts.map +1 -0
  204. package/dist/store/chats.js +80 -0
  205. package/dist/store/chats.js.map +1 -0
  206. package/dist/store/conversations.d.ts +73 -0
  207. package/dist/store/conversations.d.ts.map +1 -0
  208. package/dist/store/conversations.js +118 -0
  209. package/dist/store/conversations.js.map +1 -0
  210. package/dist/store/counters.d.ts +25 -0
  211. package/dist/store/counters.d.ts.map +1 -0
  212. package/dist/store/counters.js +26 -0
  213. package/dist/store/counters.js.map +1 -0
  214. package/dist/store/index.d.ts +1 -1
  215. package/dist/store/index.d.ts.map +1 -1
  216. package/dist/store/index.js.map +1 -1
  217. package/dist/store/keys.d.ts +16 -0
  218. package/dist/store/keys.d.ts.map +1 -0
  219. package/dist/store/keys.js +25 -0
  220. package/dist/store/keys.js.map +1 -0
  221. package/dist/store/mentions.d.ts +41 -0
  222. package/dist/store/mentions.d.ts.map +1 -0
  223. package/dist/store/mentions.js +39 -0
  224. package/dist/store/mentions.js.map +1 -0
  225. package/dist/store/messages.d.ts +116 -0
  226. package/dist/store/messages.d.ts.map +1 -0
  227. package/dist/store/messages.js +102 -0
  228. package/dist/store/messages.js.map +1 -0
  229. package/dist/store/people.d.ts +53 -0
  230. package/dist/store/people.d.ts.map +1 -0
  231. package/dist/store/people.js +65 -0
  232. package/dist/store/people.js.map +1 -0
  233. package/dist/store/queries.d.ts +22 -0
  234. package/dist/store/queries.d.ts.map +1 -0
  235. package/dist/store/queries.js +22 -0
  236. package/dist/store/queries.js.map +1 -0
  237. package/dist/store/roster.d.ts +38 -0
  238. package/dist/store/roster.d.ts.map +1 -0
  239. package/dist/store/roster.js +54 -0
  240. package/dist/store/roster.js.map +1 -0
  241. package/dist/store/search-index.d.ts +40 -0
  242. package/dist/store/search-index.d.ts.map +1 -0
  243. package/dist/store/search-index.js +19 -0
  244. package/dist/store/search-index.js.map +1 -0
  245. package/dist/store/searches.d.ts +22 -0
  246. package/dist/store/searches.d.ts.map +1 -0
  247. package/dist/store/searches.js +25 -0
  248. package/dist/store/searches.js.map +1 -0
  249. package/dist/store/sqlite/accounts.d.ts +1 -1
  250. package/dist/store/sqlite/admin-statistics.d.ts +1 -1
  251. package/dist/store/sqlite/batches.d.ts +1 -1
  252. package/dist/store/sqlite/bot-updates.d.ts +1 -1
  253. package/dist/store/sqlite/chats.d.ts +1 -1
  254. package/dist/store/sqlite/conversation-eligibility.d.ts +1 -1
  255. package/dist/store/sqlite/conversations.d.ts +1 -1
  256. package/dist/store/sqlite/emails.d.ts +1 -1
  257. package/dist/store/sqlite/emails.d.ts.map +1 -1
  258. package/dist/store/sqlite/emails.js +5 -2
  259. package/dist/store/sqlite/emails.js.map +1 -1
  260. package/dist/store/sqlite/identities.d.ts +1 -1
  261. package/dist/store/sqlite/knowledge.d.ts +1 -1
  262. package/dist/store/sqlite/lucene-fields.d.ts +66 -0
  263. package/dist/store/sqlite/lucene-fields.d.ts.map +1 -0
  264. package/dist/store/sqlite/lucene-fields.js +360 -0
  265. package/dist/store/sqlite/lucene-fields.js.map +1 -0
  266. package/dist/store/sqlite/lucene.d.ts +2 -13
  267. package/dist/store/sqlite/lucene.d.ts.map +1 -1
  268. package/dist/store/sqlite/lucene.js +27 -329
  269. package/dist/store/sqlite/lucene.js.map +1 -1
  270. package/dist/store/sqlite/meeting-projects.d.ts +1 -1
  271. package/dist/store/sqlite/messages.d.ts +1 -1
  272. package/dist/store/sqlite/person-links.d.ts +1 -1
  273. package/dist/store/sqlite/private-people.d.ts +1 -1
  274. package/dist/store/sqlite/proposed-actions.d.ts +1 -1
  275. package/dist/store/sqlite/ranges.d.ts +1 -1
  276. package/dist/store/sqlite/ranking-evidence.d.ts +1 -1
  277. package/dist/store/sqlite/reads.d.ts +1 -1
  278. package/dist/store/sqlite/search.d.ts +1 -1
  279. package/dist/store/sqlite/tags.d.ts +1 -1
  280. package/dist/store/sqlite/task-rule-stops.d.ts +1 -1
  281. package/dist/store/sqlite/words.d.ts +1 -1
  282. package/dist/store/store.d.ts +62 -828
  283. package/dist/store/store.d.ts.map +1 -1
  284. package/dist/store/store.js +105 -836
  285. package/dist/store/store.js.map +1 -1
  286. package/dist/store/sync.d.ts +36 -0
  287. package/dist/store/sync.d.ts.map +1 -0
  288. package/dist/store/sync.js +59 -0
  289. package/dist/store/sync.js.map +1 -0
  290. package/dist/store/tags.d.ts +13 -0
  291. package/dist/store/tags.d.ts.map +1 -0
  292. package/dist/store/tags.js +23 -0
  293. package/dist/store/tags.js.map +1 -0
  294. package/dist/store/types.d.ts +247 -0
  295. package/dist/store/types.d.ts.map +1 -0
  296. package/dist/store/types.js +2 -0
  297. package/dist/store/types.js.map +1 -0
  298. package/dist/store/vectors.d.ts +109 -0
  299. package/dist/store/vectors.d.ts.map +1 -0
  300. package/dist/store/vectors.js +221 -0
  301. package/dist/store/vectors.js.map +1 -0
  302. package/dist/update/index.d.ts +52 -0
  303. package/dist/update/index.d.ts.map +1 -0
  304. package/dist/update/index.js +68 -0
  305. package/dist/update/index.js.map +1 -0
  306. package/package.json +5 -1
@@ -0,0 +1,109 @@
1
+ import type { Id } from "../domain/models.js";
2
+ import { type MailStore } from "./sqlite/emails.js";
3
+ import * as imageChunks from "./sqlite/image-chunks.js";
4
+ import type { StoreContext } from "./sqlite/open.js";
5
+ import type { ChunkToEmbed } from "./sqlite/vectors.js";
6
+ import type { AccountKey, ConversationHit, PictureInput, StoredReadiness } from "./types.js";
7
+ export interface AccountVectors {
8
+ /** Chunks of the chat's current build with no vector of `model`, by hash after `after` (phase 5). */
9
+ chunksToEmbed(key: AccountKey, chatId: Id, model: string, options: {
10
+ after?: string;
11
+ limit: number;
12
+ }): Promise<ChunkToEmbed[]>;
13
+ /** The chat's live image attachments with the messages around each, and the chunk each already has. */
14
+ imagesToDescribe(key: AccountKey, chatId: Id, window: {
15
+ messages: number;
16
+ withinMs: number;
17
+ }): Promise<imageChunks.ImageInput[]>;
18
+ /** Makes these the chunks of their images, and drops the chat's image chunks not in `keep` (attachment pks). */
19
+ saveImageChunks(key: AccountKey, chatId: Id, chunks: imageChunks.ImageChunk[], keep: number[]): Promise<void>;
20
+ /** The images nearest in meaning to `query` by the text around them, as their message in its conversation. */
21
+ nearestImages(key: AccountKey, options: {
22
+ chatId?: Id;
23
+ model: string;
24
+ since?: string;
25
+ limit: number;
26
+ query: Float32Array;
27
+ }): Promise<ConversationHit[]>;
28
+ /** Live image attachments with no picture vector yet, in attachment order after `after`; `chatId` narrows it. */
29
+ picturesToEmbed(key: AccountKey, options: {
30
+ chatId?: Id;
31
+ after?: number;
32
+ limit: number;
33
+ }): Promise<PictureInput[]>;
34
+ /** Keeps each picture's vector of `model` and makes its hash the image's picture chunk. */
35
+ savePictures(key: AccountKey, model: string, dims: number, pictures: {
36
+ attachmentPk: number;
37
+ hash: string;
38
+ bytes: number;
39
+ occurredAt: number;
40
+ vector: Float32Array;
41
+ }[]): Promise<void>;
42
+ /** The images nearest to `query` by their picture vector of `model`, best first, as their message. */
43
+ nearestPictures(key: AccountKey, options: {
44
+ chatId?: Id;
45
+ model: string;
46
+ since?: string;
47
+ limit: number;
48
+ query: Float32Array;
49
+ }): Promise<{
50
+ chatId: Id;
51
+ messageId: Id;
52
+ score: number;
53
+ }[]>;
54
+ /** The current build's distinct chunks, and how many have a vector of `model`. */
55
+ vectorStatus(key: AccountKey, chatId: Id, model: string): Promise<{
56
+ chunks: number;
57
+ embedded: number;
58
+ }>;
59
+ /** Drops the chat's vectors, or one model's; a vector another chat's chunk shares stays. */
60
+ clearVectors(key: AccountKey, chatId: Id, model?: string): Promise<number>;
61
+ /** The conversations nearest in meaning to `query`, in one chat or every one of the account, best first. */
62
+ nearestConversations(key: AccountKey, options: {
63
+ chatId?: Id;
64
+ model: string;
65
+ since?: string;
66
+ limit: number;
67
+ query: Float32Array;
68
+ exclude?: string;
69
+ conversations?: string[];
70
+ scope?: "personal" | "work";
71
+ projectId?: string;
72
+ personId?: string;
73
+ before?: string;
74
+ }): Promise<ConversationHit[]>;
75
+ /**
76
+ * A conversation of the current build: how many chunks it has, and the vectors of `model` of those whose
77
+ * messages did not change since — none when it is not the account's or not current.
78
+ */
79
+ conversationVectors(key: AccountKey, id: string, model: string): Promise<{
80
+ chunks: number;
81
+ vectors: Float32Array[];
82
+ }>;
83
+ /**
84
+ * How fresh each built chat's conversations and `model`'s vectors are — one chat, or every chat whose
85
+ * conversations were ever built. A chat never built answers `builtAt: null`.
86
+ */
87
+ readiness(key: AccountKey, options: {
88
+ chatId?: Id;
89
+ model: string;
90
+ }): Promise<StoredReadiness[]>;
91
+ /** Group chats with stored messages whose conversations were never built, the newest message first. */
92
+ unbuiltGroups(key: AccountKey): Promise<Id[]>;
93
+ /** Chats in scope embedded with another model and not with `model`, which a search with it cannot see. */
94
+ embeddedOnlyElsewhere(key: AccountKey, options: {
95
+ chatId?: Id;
96
+ model: string;
97
+ }): Promise<Id[]>;
98
+ }
99
+ export interface VectorsStore extends AccountVectors {
100
+ saveVectors(model: string, dims: number, vectors: {
101
+ hash: string;
102
+ vector: Float32Array;
103
+ }[]): Promise<void>;
104
+ /** Which of these chunk hashes already have a vector of `model`. */
105
+ embeddedHashes(model: string, hashes: string[]): Promise<Set<string>>;
106
+ }
107
+ export declare const accountVectorsOver: (context: StoreContext, mail: () => MailStore) => AccountVectors;
108
+ export declare const vectorsStoreOver: (context: StoreContext, keyed: AccountVectors) => VectorsStore;
109
+ //# sourceMappingURL=vectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectors.d.ts","sourceRoot":"","sources":["../../src/store/vectors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,221 @@
1
+ import { keysOver } from "./keys.js";
2
+ import * as conversationQueries from "./sqlite/conversations.js";
3
+ import { threadConversation } from "./sqlite/emails.js";
4
+ import * as imageChunks from "./sqlite/image-chunks.js";
5
+ import { write } from "./sqlite/transaction.js";
6
+ import * as vectors from "./sqlite/vectors.js";
7
+ export const accountVectorsOver = (context, mail) => {
8
+ const { database } = context;
9
+ const { findAccountPk, findChatPk, chatKeyOf } = keysOver(context);
10
+ return {
11
+ chunksToEmbed: async (key, chatId, model, options) => {
12
+ const chatKey = chatKeyOf(key, chatId);
13
+ return chatKey === undefined ? [] : vectors.chunksToEmbed(context, chatKey, model, options);
14
+ },
15
+ imagesToDescribe: async (key, chatId, window) => {
16
+ const chatKey = chatKeyOf(key, chatId);
17
+ return chatKey === undefined ? [] : imageChunks.imagesOfChat(context, chatKey, window);
18
+ },
19
+ saveImageChunks: async (key, chatId, chunks, keep) => {
20
+ const accountPk = findAccountPk(key);
21
+ const chatKey = chatKeyOf(key, chatId);
22
+ if (accountPk === undefined || chatKey === undefined)
23
+ return;
24
+ write(database, () => imageChunks.saveImageChunks(context, accountPk, chatKey, chunks, keep));
25
+ },
26
+ nearestImages: async (key, { chatId, model, since, limit, query }) => {
27
+ const accountPk = findAccountPk(key);
28
+ if (accountPk === undefined)
29
+ return [];
30
+ const chatKey = chatId === undefined ? undefined : chatKeyOf(key, chatId);
31
+ if (chatId !== undefined && chatKey === undefined)
32
+ return [];
33
+ const nearest = imageChunks.nearestImages(context, accountPk, {
34
+ ...(chatKey === undefined ? {} : { chatKey }),
35
+ ...(since === undefined ? {} : { since: Date.parse(since) }),
36
+ model,
37
+ limit,
38
+ query,
39
+ });
40
+ const hits = [];
41
+ for (const { chatId: chat, messageId, score } of nearest) {
42
+ const chatPk = findChatPk(accountPk, chat);
43
+ const conversation = chatPk === undefined ? undefined : conversationQueries.conversationOf(context, chatPk, messageId);
44
+ const summary = conversation === undefined
45
+ ? undefined
46
+ : conversationQueries.summariesOf(context, accountPk, [Number(conversation)]).get(Number(conversation));
47
+ if (summary)
48
+ hits.push({
49
+ summary,
50
+ chunk: { firstMessageId: messageId, lastMessageId: messageId },
51
+ score,
52
+ stale: false,
53
+ matchedIn: "context",
54
+ });
55
+ }
56
+ return hits;
57
+ },
58
+ picturesToEmbed: async (key, { chatId, after, limit }) => {
59
+ const accountPk = findAccountPk(key);
60
+ if (accountPk === undefined)
61
+ return [];
62
+ const chatKey = chatId === undefined ? undefined : chatKeyOf(key, chatId);
63
+ if (chatId !== undefined && chatKey === undefined)
64
+ return [];
65
+ return imageChunks.picturesToEmbed(context, accountPk, {
66
+ ...(chatKey === undefined ? {} : { chatKey }),
67
+ ...(after === undefined ? {} : { after }),
68
+ limit,
69
+ });
70
+ },
71
+ savePictures: async (key, model, dims, pictures) => {
72
+ const accountPk = findAccountPk(key);
73
+ if (accountPk === undefined)
74
+ return;
75
+ write(database, () => {
76
+ vectors.saveVectors(context, model, dims, pictures.map(({ hash, vector }) => ({ hash, vector })));
77
+ imageChunks.savePictureChunks(context, accountPk, pictures);
78
+ });
79
+ },
80
+ nearestPictures: async (key, { chatId, model, since, limit, query }) => {
81
+ const accountPk = findAccountPk(key);
82
+ if (accountPk === undefined)
83
+ return [];
84
+ const chatKey = chatId === undefined ? undefined : chatKeyOf(key, chatId);
85
+ if (chatId !== undefined && chatKey === undefined)
86
+ return [];
87
+ return imageChunks.nearestImages(context, accountPk, {
88
+ ...(chatKey === undefined ? {} : { chatKey }),
89
+ ...(since === undefined ? {} : { since: Date.parse(since) }),
90
+ model,
91
+ limit,
92
+ query,
93
+ position: imageChunks.PICTURE_POSITION,
94
+ });
95
+ },
96
+ vectorStatus: async (key, chatId, model) => {
97
+ const chatKey = chatKeyOf(key, chatId);
98
+ return chatKey === undefined ? { chunks: 0, embedded: 0 } : vectors.vectorStatus(context, chatKey, model);
99
+ },
100
+ clearVectors: async (key, chatId, model) => {
101
+ const chatKey = chatKeyOf(key, chatId);
102
+ if (chatKey === undefined)
103
+ return 0;
104
+ let cleared = 0;
105
+ write(database, () => {
106
+ cleared = vectors.clearVectors(context, chatKey, model);
107
+ });
108
+ return cleared;
109
+ },
110
+ nearestConversations: async (key, { chatId, model, since, limit, query, exclude, conversations, scope, projectId, personId, before }) => {
111
+ const accountPk = findAccountPk(key);
112
+ if (accountPk === undefined)
113
+ return [];
114
+ const chatKey = chatId === undefined ? undefined : chatKeyOf(key, chatId);
115
+ const mailToo = key.provider === "email" &&
116
+ conversations === undefined &&
117
+ scope === undefined &&
118
+ projectId === undefined &&
119
+ personId === undefined &&
120
+ before === undefined;
121
+ const mailHits = async () => mailToo
122
+ ? (await mail().nearest(model, query, {
123
+ accountId: accountPk,
124
+ limit,
125
+ ...(chatId === undefined ? {} : { threadExternalId: chatId }),
126
+ ...(since === undefined ? {} : { since: Date.parse(since) }),
127
+ })).map((hit) => ({
128
+ summary: threadConversation(hit, context.now()),
129
+ chunk: { firstMessageId: hit.externalId, lastMessageId: hit.externalId },
130
+ score: hit.score,
131
+ stale: false,
132
+ }))
133
+ : [];
134
+ if (chatId !== undefined && chatKey === undefined)
135
+ return mailHits();
136
+ const nearest = vectors.nearestChunks(context, accountPk, {
137
+ ...(chatKey === undefined ? {} : { chatKey }),
138
+ ...(since === undefined ? {} : { since: Date.parse(since) }),
139
+ ...(exclude === undefined ? {} : { exclude: Number(exclude) }),
140
+ model,
141
+ limit,
142
+ query,
143
+ ...(conversations === undefined ? {} : { conversations }),
144
+ ...(scope === undefined ? {} : { scope }),
145
+ ...(projectId === undefined ? {} : { projectId: Number(projectId) }),
146
+ ...(personId === undefined ? {} : { personId: Number(personId) }),
147
+ ...(before === undefined ? {} : { before: Date.parse(before) }),
148
+ });
149
+ const found = conversationQueries.summariesOf(context, accountPk, nearest.map(({ conversationPk }) => conversationPk));
150
+ const ids = vectors.messageIds(context, nearest.flatMap(({ firstMessagePk, lastMessagePk }) => [firstMessagePk, lastMessagePk]));
151
+ const messageHits = nearest.flatMap((chunk) => {
152
+ const summary = found.get(chunk.conversationPk);
153
+ const first = ids.get(chunk.firstMessagePk);
154
+ const last = ids.get(chunk.lastMessagePk);
155
+ const freshness = vectors.chunkFreshness(context, chunk);
156
+ return summary && first && last && freshness !== "deleted"
157
+ ? [
158
+ {
159
+ summary,
160
+ chunk: { firstMessageId: first, lastMessageId: last },
161
+ score: chunk.score,
162
+ stale: freshness === "stale",
163
+ },
164
+ ]
165
+ : [];
166
+ });
167
+ if (!mailToo)
168
+ return messageHits;
169
+ return [...messageHits, ...(await mailHits())].sort((a, b) => b.score - a.score).slice(0, limit);
170
+ },
171
+ conversationVectors: async (key, id, model) => {
172
+ const accountPk = findAccountPk(key);
173
+ const pk = Number(id);
174
+ if (accountPk === undefined || !conversationQueries.summariesOf(context, accountPk, [pk]).has(pk)) {
175
+ return { chunks: 0, vectors: [] };
176
+ }
177
+ return vectors.conversationVectors(context, pk, model);
178
+ },
179
+ readiness: async (key, { chatId, model }) => {
180
+ const accountPk = findAccountPk(key);
181
+ if (accountPk === undefined)
182
+ return [];
183
+ const chats = chatId === undefined
184
+ ? vectors.builtChats(context, accountPk)
185
+ : [{ chatKey: chatKeyOf(key, chatId), id: chatId }].flatMap(({ chatKey, id }) => chatKey === undefined ? [] : [{ chatKey, id }]);
186
+ return chats.map(({ chatKey, id }) => {
187
+ const found = vectors.readiness(context, chatKey, model);
188
+ return found
189
+ ? { chatId: id, ...found, builtAt: new Date(found.builtAt).toISOString() }
190
+ : {
191
+ chatId: id,
192
+ builtAt: null,
193
+ algorithmVersion: null,
194
+ pending: { new: 0, edited: 0, deleted: 0 },
195
+ vectors: { chunks: 0, embedded: 0, current: 0, stale: 0, missing: 0 },
196
+ };
197
+ });
198
+ },
199
+ unbuiltGroups: async (key) => {
200
+ const accountPk = findAccountPk(key);
201
+ return accountPk === undefined ? [] : vectors.unbuiltGroups(context, accountPk);
202
+ },
203
+ embeddedOnlyElsewhere: async (key, { chatId, model }) => {
204
+ const accountPk = findAccountPk(key);
205
+ if (accountPk === undefined)
206
+ return [];
207
+ const chatKey = chatId === undefined ? undefined : chatKeyOf(key, chatId);
208
+ if (chatId !== undefined && chatKey === undefined)
209
+ return [];
210
+ return vectors.embeddedOnlyElsewhere(context, accountPk, { ...(chatKey === undefined ? {} : { chatKey }), model });
211
+ },
212
+ };
213
+ };
214
+ export const vectorsStoreOver = (context, keyed) => ({
215
+ ...keyed,
216
+ saveVectors: async (model, dims, rows) => {
217
+ write(context.database, () => vectors.saveVectors(context, model, dims, rows));
218
+ },
219
+ embeddedHashes: async (model, hashes) => imageChunks.embeddedHashes(context, model, hashes),
220
+ });
221
+ //# sourceMappingURL=vectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectors.js","sourceRoot":"","sources":["../../src/store/vectors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { FetchLike } from "@wirecat/cli-base/http";
2
+ import { type Installer } from "@wirecat/cli-base/update";
3
+ /** npm, the clock, the terminal and the package manager as `<app> upgrade` sees them — faked in a test. */
4
+ export interface UpdateEnvironment {
5
+ fetch?: FetchLike;
6
+ now?: () => number;
7
+ stderrIsTTY?: boolean;
8
+ scriptPath?: string;
9
+ /** Runs the update and answers its exit code; its output goes to stderr. */
10
+ spawn?: (argv: string[]) => number;
11
+ }
12
+ /** Words after which a line on stderr would land in a machine's answer, or would only repeat the command. */
13
+ export declare const QUIET_WORDS: readonly string[];
14
+ export interface AppUpdateOptions {
15
+ packageName: string;
16
+ /** The command a person types: `max`, `memo`. */
17
+ command: string;
18
+ version: string;
19
+ /**
20
+ * The app's own file, as `import.meta.url`: its installer is read from where it really lives. cli-core's own
21
+ * path would not do — a checkout or an npx cache puts the two apart.
22
+ */
23
+ entry: string;
24
+ /** The file the last answer from npm is kept in, in the app's state directory. */
25
+ statePath: (env: NodeJS.ProcessEnv) => string;
26
+ /** The app's setting; a config that cannot be read turns the check off. */
27
+ enabled: (env: NodeJS.ProcessEnv) => boolean;
28
+ /** Variables that turn it off besides `CI` and `NO_UPDATE_NOTIFIER`: `MAX_NO_UPDATE_CHECK`. */
29
+ offVariables: readonly string[];
30
+ /** `QUIET_WORDS` unless the app has its own; a word also counts as `--word=value`. */
31
+ quietWords?: readonly string[];
32
+ }
33
+ export interface NoticeOptions {
34
+ /** Whether stdout is a terminal; `process.stdout.isTTY` when not given. */
35
+ tty?: boolean;
36
+ environment?: UpdateEnvironment;
37
+ env?: NodeJS.ProcessEnv;
38
+ }
39
+ /** What `upgrade` and the daily notice need of one app: its installer, npm's latest version, the update itself. */
40
+ export declare const appUpdate: (app: AppUpdateOptions) => {
41
+ installer: ({ scriptPath }?: UpdateEnvironment) => Installer;
42
+ latest: (environment?: UpdateEnvironment) => Promise<string | undefined>;
43
+ /** The package manager's output goes to stderr, so stdout stays one result. */
44
+ runUpdate: (argv: string[], environment?: UpdateEnvironment) => number;
45
+ /**
46
+ * The daily "a newer version exists" line, or `undefined`. Started beside the command and awaited
47
+ * after it, so asking npm costs the command nothing; any failure is silence, never an error.
48
+ */
49
+ updateNotice: (argv: readonly string[], { tty, environment, env }?: NoticeOptions) => Promise<string | undefined>;
50
+ };
51
+ export type AppUpdate = ReturnType<typeof appUpdate>;
52
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/update/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EACL,KAAK,SAAS,EAKf,MAAM,0BAA0B,CAAA;AAEjC,2GAA2G;AAC3G,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CACnC;AAED,6GAA6G;AAC7G,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAUxC,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb,kFAAkF;IAClF,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,KAAK,MAAM,CAAA;IAC7C,2EAA2E;IAC3E,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,KAAK,OAAO,CAAA;IAC5C,+FAA+F;IAC/F,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,sFAAsF;IACtF,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CACxB;AAED,mHAAmH;AACnH,eAAO,MAAM,SAAS,QAAS,gBAAgB;iCAEV,iBAAiB,KAAQ,SAAS;2BAW7C,iBAAiB;IAEvC,+EAA+E;sBAC7D,MAAM,EAAE,gBAAe,iBAAiB,KAAQ,MAAM;IAExE;;;OAGG;yBAEK,SAAS,MAAM,EAAE,8BACuB,aAAa,KAC1D,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CA8BjC,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAA"}
@@ -0,0 +1,68 @@
1
+ import { realpathSync } from "node:fs";
2
+ import { fileURLToPath } from "node:url";
3
+ import { installerOf, latestVersion, runUpdate as runPackageManager, updateNotice as sharedNotice, } from "@wirecat/cli-base/update";
4
+ /** Words after which a line on stderr would land in a machine's answer, or would only repeat the command. */
5
+ export const QUIET_WORDS = [
6
+ "--help",
7
+ "-h",
8
+ "--version",
9
+ "-V",
10
+ "--json",
11
+ "--jsonl",
12
+ "--dry-run",
13
+ "--timeout",
14
+ "commands",
15
+ ];
16
+ /** What `upgrade` and the daily notice need of one app: its installer, npm's latest version, the update itself. */
17
+ export const appUpdate = (app) => {
18
+ const quietWords = app.quietWords ?? QUIET_WORDS;
19
+ const installer = ({ scriptPath } = {}) => installerOf(scriptPath ?? realpathSync(fileURLToPath(app.entry)));
20
+ const enabled = (env) => {
21
+ try {
22
+ return app.enabled(env);
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ };
28
+ return {
29
+ installer,
30
+ latest: (environment = {}) => latestVersion(app.packageName, environment.fetch ?? fetch, { timeoutMs: 3000 }),
31
+ /** The package manager's output goes to stderr, so stdout stays one result. */
32
+ runUpdate: (argv, environment = {}) => environment.spawn ? environment.spawn(argv) : runPackageManager(argv),
33
+ /**
34
+ * The daily "a newer version exists" line, or `undefined`. Started beside the command and awaited
35
+ * after it, so asking npm costs the command nothing; any failure is silence, never an error.
36
+ */
37
+ updateNotice: (argv, { tty, environment = {}, env = process.env } = {}) => {
38
+ try {
39
+ const delimiter = argv.indexOf("--");
40
+ const options = argv.slice(0, delimiter < 0 ? undefined : delimiter);
41
+ const quiet = options.some((word) => quietWords.some((quietWord) => word === quietWord || word.startsWith(`${quietWord}=`)));
42
+ if (quiet)
43
+ return Promise.resolve(undefined);
44
+ const pretty = !argv.includes("--json") && !argv.includes("--jsonl") && (tty ?? process.stdout.isTTY === true);
45
+ return sharedNotice({
46
+ argv,
47
+ packageName: app.packageName,
48
+ command: app.command,
49
+ version: app.version,
50
+ statePath: app.statePath(env),
51
+ fetch: environment.fetch ?? fetch,
52
+ ...(environment.now ? { now: environment.now } : {}),
53
+ format: pretty ? "pretty" : "json",
54
+ stderrIsTTY: environment.stderrIsTTY ?? process.stderr.isTTY === true,
55
+ quiet: argv.includes("--quiet"),
56
+ enabled: enabled(env),
57
+ installer: installer(environment),
58
+ env,
59
+ offVariables: app.offVariables,
60
+ });
61
+ }
62
+ catch {
63
+ return Promise.resolve(undefined);
64
+ }
65
+ },
66
+ };
67
+ };
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/update/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wirecat/cli-core",
3
- "version": "0.306.0",
3
+ "version": "0.307.0",
4
4
  "description": "The messenger-neutral half of a messaging CLI: domain model, message locators, rendering, name resolution, the SQLite seam, the command skeleton and shared read commands, the send guard, run records and the message store",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Viacheslav Ptsarev",
@@ -119,6 +119,10 @@
119
119
  "./speech/wav": {
120
120
  "types": "./dist/speech/wav.d.ts",
121
121
  "default": "./dist/speech/wav.js"
122
+ },
123
+ "./update": {
124
+ "types": "./dist/update/index.d.ts",
125
+ "default": "./dist/update/index.js"
122
126
  }
123
127
  },
124
128
  "scripts": {