@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.
- package/dist/analysis/consents.js +4 -4
- package/dist/analysis/consents.js.map +1 -1
- package/dist/attachments/directory.js +1 -1
- package/dist/attachments/directory.js.map +1 -1
- package/dist/botcheck/service.js +3 -3
- package/dist/botcheck/service.js.map +1 -1
- package/dist/cli/bot/context.d.ts +2 -2
- package/dist/cli/bot/copy.js +4 -4
- package/dist/cli/bot/copy.js.map +1 -1
- package/dist/cli/bot/messages.d.ts.map +1 -1
- package/dist/cli/bot/messages.js +2 -2
- package/dist/cli/bot/messages.js.map +1 -1
- package/dist/cli/bot/moderation.js +1 -1
- package/dist/cli/bot/moderation.js.map +1 -1
- package/dist/cli/bot/people.js +4 -4
- package/dist/cli/bot/people.js.map +1 -1
- package/dist/cli/bot/store.js +2 -2
- package/dist/cli/bot/store.js.map +1 -1
- package/dist/cli/config-keys.d.ts.map +1 -1
- package/dist/cli/config-keys.js +2 -1
- package/dist/cli/config-keys.js.map +1 -1
- package/dist/cli/messenger/account-command.js +1 -1
- package/dist/cli/messenger/account-command.js.map +1 -1
- package/dist/cli/messenger/complete-command.js +2 -2
- package/dist/cli/messenger/complete-command.js.map +1 -1
- package/dist/cli/messenger/context.js +1 -1
- package/dist/cli/messenger/context.js.map +1 -1
- package/dist/cli/messenger/serve-members.js +1 -1
- package/dist/cli/messenger/serve-members.js.map +1 -1
- package/dist/cli/messenger/serve-stems.js +3 -3
- package/dist/cli/messenger/serve-stems.js.map +1 -1
- package/dist/cli/messenger/stored.d.ts.map +1 -1
- package/dist/cli/messenger/stored.js +21 -21
- package/dist/cli/messenger/stored.js.map +1 -1
- package/dist/cli/store-settings.js +3 -3
- package/dist/cli/store-settings.js.map +1 -1
- package/dist/errors/reasons.d.ts.map +1 -1
- package/dist/errors/reasons.js +1 -0
- package/dist/errors/reasons.js.map +1 -1
- package/dist/files/atomic-write.d.ts +15 -0
- package/dist/files/atomic-write.d.ts.map +1 -0
- package/dist/files/atomic-write.js +35 -0
- package/dist/files/atomic-write.js.map +1 -0
- package/dist/files/index.d.ts +2 -0
- package/dist/files/index.d.ts.map +1 -1
- package/dist/files/index.js +2 -0
- package/dist/files/index.js.map +1 -1
- package/dist/files/lock.d.ts +14 -0
- package/dist/files/lock.d.ts.map +1 -0
- package/dist/files/lock.js +22 -0
- package/dist/files/lock.js.map +1 -0
- package/dist/files/native-lease-release.d.ts +3 -1
- package/dist/files/native-lease-release.d.ts.map +1 -1
- package/dist/files/native-lease-release.js +7 -3
- package/dist/files/native-lease-release.js.map +1 -1
- package/dist/kit/search-recipes.d.ts.map +1 -1
- package/dist/kit/search-recipes.js +5 -5
- package/dist/kit/search-recipes.js.map +1 -1
- package/dist/mcp/resources.js +1 -1
- package/dist/mcp/resources.js.map +1 -1
- package/dist/mcp/tools/chats.js +1 -1
- package/dist/mcp/tools/chats.js.map +1 -1
- package/dist/replies/dry-run.d.ts.map +1 -1
- package/dist/replies/dry-run.js +5 -5
- package/dist/replies/dry-run.js.map +1 -1
- package/dist/services/admin-statistics.js +6 -6
- package/dist/services/admin-statistics.js.map +1 -1
- package/dist/services/agenda.js +1 -1
- package/dist/services/agenda.js.map +1 -1
- package/dist/services/archive-gaps.js +4 -4
- package/dist/services/archive-gaps.js.map +1 -1
- package/dist/services/archive.d.ts.map +1 -1
- package/dist/services/archive.js +23 -23
- package/dist/services/archive.js.map +1 -1
- package/dist/services/attachments.d.ts.map +1 -1
- package/dist/services/attachments.js +21 -10
- package/dist/services/attachments.js.map +1 -1
- package/dist/services/chat-documents.js +2 -2
- package/dist/services/chat-documents.js.map +1 -1
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.js +24 -19
- package/dist/services/chats.js.map +1 -1
- package/dist/services/conversations.js +15 -15
- package/dist/services/conversations.js.map +1 -1
- package/dist/services/counters.d.ts.map +1 -1
- package/dist/services/counters.js +4 -4
- package/dist/services/counters.js.map +1 -1
- package/dist/services/embeddings-maintenance.d.ts.map +1 -1
- package/dist/services/embeddings-maintenance.js +13 -13
- package/dist/services/embeddings-maintenance.js.map +1 -1
- package/dist/services/embeddings-search.d.ts.map +1 -1
- package/dist/services/embeddings-search.js +16 -16
- package/dist/services/embeddings-search.js.map +1 -1
- package/dist/services/evidence-read.js +1 -1
- package/dist/services/evidence-read.js.map +1 -1
- package/dist/services/folders.js +1 -1
- package/dist/services/folders.js.map +1 -1
- package/dist/services/inbox.js +4 -4
- package/dist/services/inbox.js.map +1 -1
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/mail-search.d.ts.map +1 -1
- package/dist/services/mail-search.js +15 -13
- package/dist/services/mail-search.js.map +1 -1
- package/dist/services/meeting-context.d.ts +4 -2
- package/dist/services/meeting-context.d.ts.map +1 -1
- package/dist/services/meeting-context.js +1 -1
- package/dist/services/meeting-context.js.map +1 -1
- package/dist/services/meeting-tasks.d.ts +4 -2
- package/dist/services/meeting-tasks.d.ts.map +1 -1
- package/dist/services/meeting-tasks.js +1 -1
- package/dist/services/meeting-tasks.js.map +1 -1
- package/dist/services/mentions.d.ts.map +1 -1
- package/dist/services/mentions.js +8 -8
- package/dist/services/mentions.js.map +1 -1
- package/dist/services/message-resolution.d.ts.map +1 -1
- package/dist/services/message-resolution.js +6 -6
- package/dist/services/message-resolution.js.map +1 -1
- package/dist/services/messages-archive-search.js +4 -4
- package/dist/services/messages-archive-search.js.map +1 -1
- package/dist/services/messages-combined.js +3 -3
- package/dist/services/messages-combined.js.map +1 -1
- package/dist/services/messages-discovery.js +2 -2
- package/dist/services/messages-discovery.js.map +1 -1
- package/dist/services/messages-search.d.ts.map +1 -1
- package/dist/services/messages-search.js +13 -13
- package/dist/services/messages-search.js.map +1 -1
- package/dist/services/messages.js +6 -6
- package/dist/services/messages.js.map +1 -1
- package/dist/services/metadata.js +9 -9
- package/dist/services/metadata.js.map +1 -1
- package/dist/services/notes-search.js +4 -4
- package/dist/services/notes-search.js.map +1 -1
- package/dist/services/people.d.ts.map +1 -1
- package/dist/services/people.js +18 -17
- package/dist/services/people.js.map +1 -1
- package/dist/services/person-context.js +16 -16
- package/dist/services/person-context.js.map +1 -1
- package/dist/services/person-meeting-context.d.ts +3 -2
- package/dist/services/person-meeting-context.d.ts.map +1 -1
- package/dist/services/person-meeting-context.js +3 -3
- package/dist/services/person-meeting-context.js.map +1 -1
- package/dist/services/person-profile.js +5 -5
- package/dist/services/person-profile.js.map +1 -1
- package/dist/services/person-timeline.js +2 -2
- package/dist/services/person-timeline.js.map +1 -1
- package/dist/services/pictures.d.ts.map +1 -1
- package/dist/services/pictures.js +9 -6
- package/dist/services/pictures.js.map +1 -1
- package/dist/services/private-people.d.ts.map +1 -1
- package/dist/services/private-people.js +7 -7
- package/dist/services/private-people.js.map +1 -1
- package/dist/services/rankings-selection.js +1 -1
- package/dist/services/rankings-selection.js.map +1 -1
- package/dist/services/rankings.js +7 -7
- package/dist/services/rankings.js.map +1 -1
- package/dist/services/retention.d.ts +3 -3
- package/dist/services/retention.js +2 -2
- package/dist/services/retention.js.map +1 -1
- package/dist/services/search-all-meetings.js +2 -2
- package/dist/services/search-all-meetings.js.map +1 -1
- package/dist/services/search-all.d.ts.map +1 -1
- package/dist/services/search-all.js +3 -1
- package/dist/services/search-all.js.map +1 -1
- package/dist/services/search-catchup.js +1 -1
- package/dist/services/search-catchup.js.map +1 -1
- package/dist/services/search-kind.js +4 -4
- package/dist/services/search-kind.js.map +1 -1
- package/dist/services/search-refresh.d.ts.map +1 -1
- package/dist/services/search-refresh.js +2 -2
- package/dist/services/search-refresh.js.map +1 -1
- package/dist/services/searches.js +7 -7
- package/dist/services/searches.js.map +1 -1
- package/dist/services/server-search.js +4 -4
- package/dist/services/server-search.js.map +1 -1
- package/dist/services/tags.d.ts.map +1 -1
- package/dist/services/tags.js +7 -4
- package/dist/services/tags.js.map +1 -1
- package/dist/services/task-rules.js +6 -6
- package/dist/services/task-rules.js.map +1 -1
- package/dist/services/tasks.js +2 -2
- package/dist/services/tasks.js.map +1 -1
- package/dist/services/thread-context.d.ts.map +1 -1
- package/dist/services/thread-context.js +5 -5
- package/dist/services/thread-context.js.map +1 -1
- package/dist/speech/hearing.d.ts.map +1 -1
- package/dist/speech/hearing.js +2 -2
- package/dist/speech/hearing.js.map +1 -1
- package/dist/store/account-store.d.ts +64 -17
- package/dist/store/account-store.d.ts.map +1 -1
- package/dist/store/account-store.js +75 -121
- package/dist/store/account-store.js.map +1 -1
- package/dist/store/accounts.d.ts +35 -0
- package/dist/store/accounts.d.ts.map +1 -0
- package/dist/store/accounts.js +47 -0
- package/dist/store/accounts.js.map +1 -0
- package/dist/store/attachments.d.ts +40 -0
- package/dist/store/attachments.d.ts.map +1 -0
- package/dist/store/attachments.js +50 -0
- package/dist/store/attachments.js.map +1 -0
- package/dist/store/chats.d.ts +47 -0
- package/dist/store/chats.d.ts.map +1 -0
- package/dist/store/chats.js +80 -0
- package/dist/store/chats.js.map +1 -0
- package/dist/store/conversations.d.ts +73 -0
- package/dist/store/conversations.d.ts.map +1 -0
- package/dist/store/conversations.js +118 -0
- package/dist/store/conversations.js.map +1 -0
- package/dist/store/counters.d.ts +25 -0
- package/dist/store/counters.d.ts.map +1 -0
- package/dist/store/counters.js +26 -0
- package/dist/store/counters.js.map +1 -0
- package/dist/store/index.d.ts +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/keys.d.ts +16 -0
- package/dist/store/keys.d.ts.map +1 -0
- package/dist/store/keys.js +25 -0
- package/dist/store/keys.js.map +1 -0
- package/dist/store/mentions.d.ts +41 -0
- package/dist/store/mentions.d.ts.map +1 -0
- package/dist/store/mentions.js +39 -0
- package/dist/store/mentions.js.map +1 -0
- package/dist/store/messages.d.ts +116 -0
- package/dist/store/messages.d.ts.map +1 -0
- package/dist/store/messages.js +102 -0
- package/dist/store/messages.js.map +1 -0
- package/dist/store/people.d.ts +53 -0
- package/dist/store/people.d.ts.map +1 -0
- package/dist/store/people.js +65 -0
- package/dist/store/people.js.map +1 -0
- package/dist/store/queries.d.ts +22 -0
- package/dist/store/queries.d.ts.map +1 -0
- package/dist/store/queries.js +22 -0
- package/dist/store/queries.js.map +1 -0
- package/dist/store/roster.d.ts +38 -0
- package/dist/store/roster.d.ts.map +1 -0
- package/dist/store/roster.js +54 -0
- package/dist/store/roster.js.map +1 -0
- package/dist/store/search-index.d.ts +40 -0
- package/dist/store/search-index.d.ts.map +1 -0
- package/dist/store/search-index.js +19 -0
- package/dist/store/search-index.js.map +1 -0
- package/dist/store/searches.d.ts +22 -0
- package/dist/store/searches.d.ts.map +1 -0
- package/dist/store/searches.js +25 -0
- package/dist/store/searches.js.map +1 -0
- package/dist/store/sqlite/accounts.d.ts +1 -1
- package/dist/store/sqlite/admin-statistics.d.ts +1 -1
- package/dist/store/sqlite/batches.d.ts +1 -1
- package/dist/store/sqlite/bot-updates.d.ts +1 -1
- package/dist/store/sqlite/chats.d.ts +1 -1
- package/dist/store/sqlite/conversation-eligibility.d.ts +1 -1
- package/dist/store/sqlite/conversations.d.ts +1 -1
- package/dist/store/sqlite/emails.d.ts +1 -1
- package/dist/store/sqlite/emails.d.ts.map +1 -1
- package/dist/store/sqlite/emails.js +5 -2
- package/dist/store/sqlite/emails.js.map +1 -1
- package/dist/store/sqlite/identities.d.ts +1 -1
- package/dist/store/sqlite/knowledge.d.ts +1 -1
- package/dist/store/sqlite/lucene-fields.d.ts +66 -0
- package/dist/store/sqlite/lucene-fields.d.ts.map +1 -0
- package/dist/store/sqlite/lucene-fields.js +360 -0
- package/dist/store/sqlite/lucene-fields.js.map +1 -0
- package/dist/store/sqlite/lucene.d.ts +2 -13
- package/dist/store/sqlite/lucene.d.ts.map +1 -1
- package/dist/store/sqlite/lucene.js +27 -329
- package/dist/store/sqlite/lucene.js.map +1 -1
- package/dist/store/sqlite/meeting-projects.d.ts +1 -1
- package/dist/store/sqlite/messages.d.ts +1 -1
- package/dist/store/sqlite/person-links.d.ts +1 -1
- package/dist/store/sqlite/private-people.d.ts +1 -1
- package/dist/store/sqlite/proposed-actions.d.ts +1 -1
- package/dist/store/sqlite/ranges.d.ts +1 -1
- package/dist/store/sqlite/ranking-evidence.d.ts +1 -1
- package/dist/store/sqlite/reads.d.ts +1 -1
- package/dist/store/sqlite/search.d.ts +1 -1
- package/dist/store/sqlite/tags.d.ts +1 -1
- package/dist/store/sqlite/task-rule-stops.d.ts +1 -1
- package/dist/store/sqlite/words.d.ts +1 -1
- package/dist/store/store.d.ts +62 -828
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +105 -836
- package/dist/store/store.js.map +1 -1
- package/dist/store/sync.d.ts +36 -0
- package/dist/store/sync.d.ts.map +1 -0
- package/dist/store/sync.js +59 -0
- package/dist/store/sync.js.map +1 -0
- package/dist/store/tags.d.ts +13 -0
- package/dist/store/tags.d.ts.map +1 -0
- package/dist/store/tags.js +23 -0
- package/dist/store/tags.js.map +1 -0
- package/dist/store/types.d.ts +247 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +2 -0
- package/dist/store/types.js.map +1 -0
- package/dist/store/vectors.d.ts +109 -0
- package/dist/store/vectors.d.ts.map +1 -0
- package/dist/store/vectors.js +221 -0
- package/dist/store/vectors.js.map +1 -0
- package/dist/update/index.d.ts +52 -0
- package/dist/update/index.d.ts.map +1 -0
- package/dist/update/index.js +68 -0
- package/dist/update/index.js.map +1 -0
- 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.
|
|
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": {
|