@waifucave/discord-waifus 1.5.154

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 (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +230 -0
  3. package/THIRD_PARTY_NOTICES.md +26 -0
  4. package/assets/ocr/eng.traineddata +0 -0
  5. package/bin/waifus.mjs +36 -0
  6. package/dist/api/errors.d.ts +9 -0
  7. package/dist/api/errors.js +23 -0
  8. package/dist/api/errors.js.map +1 -0
  9. package/dist/api/server.d.ts +19 -0
  10. package/dist/api/server.js +1290 -0
  11. package/dist/api/server.js.map +1 -0
  12. package/dist/backend/logger.d.ts +20 -0
  13. package/dist/backend/logger.js +65 -0
  14. package/dist/backend/logger.js.map +1 -0
  15. package/dist/backend/migrations.d.ts +4 -0
  16. package/dist/backend/migrations.js +521 -0
  17. package/dist/backend/migrations.js.map +1 -0
  18. package/dist/backend/redaction.d.ts +1 -0
  19. package/dist/backend/redaction.js +22 -0
  20. package/dist/backend/redaction.js.map +1 -0
  21. package/dist/backend/runtime.d.ts +30 -0
  22. package/dist/backend/runtime.js +49 -0
  23. package/dist/backend/runtime.js.map +1 -0
  24. package/dist/backend/server.d.ts +18 -0
  25. package/dist/backend/server.js +581 -0
  26. package/dist/backend/server.js.map +1 -0
  27. package/dist/cli/commands.d.ts +35 -0
  28. package/dist/cli/commands.js +510 -0
  29. package/dist/cli/commands.js.map +1 -0
  30. package/dist/cli/main.d.ts +1 -0
  31. package/dist/cli/main.js +12 -0
  32. package/dist/cli/main.js.map +1 -0
  33. package/dist/cli/parser.d.ts +10 -0
  34. package/dist/cli/parser.js +64 -0
  35. package/dist/cli/parser.js.map +1 -0
  36. package/dist/config/appConfig.d.ts +3 -0
  37. package/dist/config/appConfig.js +27 -0
  38. package/dist/config/appConfig.js.map +1 -0
  39. package/dist/config/layout.d.ts +13 -0
  40. package/dist/config/layout.js +173 -0
  41. package/dist/config/layout.js.map +1 -0
  42. package/dist/config/paths.d.ts +5 -0
  43. package/dist/config/paths.js +20 -0
  44. package/dist/config/paths.js.map +1 -0
  45. package/dist/config/prebuiltWaifus.d.ts +3 -0
  46. package/dist/config/prebuiltWaifus.js +106 -0
  47. package/dist/config/prebuiltWaifus.js.map +1 -0
  48. package/dist/discord/client.d.ts +394 -0
  49. package/dist/discord/client.js +1196 -0
  50. package/dist/discord/client.js.map +1 -0
  51. package/dist/discord/contextBuilder.d.ts +15 -0
  52. package/dist/discord/contextBuilder.js +18 -0
  53. package/dist/discord/contextBuilder.js.map +1 -0
  54. package/dist/discord/intents.d.ts +5 -0
  55. package/dist/discord/intents.js +21 -0
  56. package/dist/discord/intents.js.map +1 -0
  57. package/dist/discord/memberCache.d.ts +12 -0
  58. package/dist/discord/memberCache.js +55 -0
  59. package/dist/discord/memberCache.js.map +1 -0
  60. package/dist/discord/normalization.d.ts +34 -0
  61. package/dist/discord/normalization.js +330 -0
  62. package/dist/discord/normalization.js.map +1 -0
  63. package/dist/discord/rateLimit.d.ts +9 -0
  64. package/dist/discord/rateLimit.js +11 -0
  65. package/dist/discord/rateLimit.js.map +1 -0
  66. package/dist/orchestration/context.d.ts +85 -0
  67. package/dist/orchestration/context.js +200 -0
  68. package/dist/orchestration/context.js.map +1 -0
  69. package/dist/orchestration/decisions.d.ts +52 -0
  70. package/dist/orchestration/decisions.js +61 -0
  71. package/dist/orchestration/decisions.js.map +1 -0
  72. package/dist/orchestration/messageSplit.d.ts +6 -0
  73. package/dist/orchestration/messageSplit.js +118 -0
  74. package/dist/orchestration/messageSplit.js.map +1 -0
  75. package/dist/orchestration/ocr.d.ts +43 -0
  76. package/dist/orchestration/ocr.js +504 -0
  77. package/dist/orchestration/ocr.js.map +1 -0
  78. package/dist/orchestration/ocrPackages.d.ts +24 -0
  79. package/dist/orchestration/ocrPackages.js +85 -0
  80. package/dist/orchestration/ocrPackages.js.map +1 -0
  81. package/dist/orchestration/promptBlocks.d.ts +28 -0
  82. package/dist/orchestration/promptBlocks.js +232 -0
  83. package/dist/orchestration/promptBlocks.js.map +1 -0
  84. package/dist/orchestration/replyQuote.d.ts +7 -0
  85. package/dist/orchestration/replyQuote.js +198 -0
  86. package/dist/orchestration/replyQuote.js.map +1 -0
  87. package/dist/orchestration/reviewer.d.ts +5 -0
  88. package/dist/orchestration/reviewer.js +5 -0
  89. package/dist/orchestration/reviewer.js.map +1 -0
  90. package/dist/orchestration/runtime.d.ts +152 -0
  91. package/dist/orchestration/runtime.js +3535 -0
  92. package/dist/orchestration/runtime.js.map +1 -0
  93. package/dist/orchestration/session.d.ts +30 -0
  94. package/dist/orchestration/session.js +41 -0
  95. package/dist/orchestration/session.js.map +1 -0
  96. package/dist/orchestration/stageManager.d.ts +42 -0
  97. package/dist/orchestration/stageManager.js +50 -0
  98. package/dist/orchestration/stageManager.js.map +1 -0
  99. package/dist/providers/catalog.d.ts +6 -0
  100. package/dist/providers/catalog.js +212 -0
  101. package/dist/providers/catalog.js.map +1 -0
  102. package/dist/providers/pipelines.d.ts +13 -0
  103. package/dist/providers/pipelines.js +2388 -0
  104. package/dist/providers/pipelines.js.map +1 -0
  105. package/dist/providers/types.d.ts +91 -0
  106. package/dist/providers/types.js +2 -0
  107. package/dist/providers/types.js.map +1 -0
  108. package/dist/shared/queryLog.d.ts +39 -0
  109. package/dist/shared/queryLog.js +80 -0
  110. package/dist/shared/queryLog.js.map +1 -0
  111. package/dist/shared/schemas/common.d.ts +21 -0
  112. package/dist/shared/schemas/common.js +27 -0
  113. package/dist/shared/schemas/common.js.map +1 -0
  114. package/dist/shared/schemas/config.d.ts +57 -0
  115. package/dist/shared/schemas/config.js +49 -0
  116. package/dist/shared/schemas/config.js.map +1 -0
  117. package/dist/shared/schemas/domain.d.ts +825 -0
  118. package/dist/shared/schemas/domain.js +444 -0
  119. package/dist/shared/schemas/domain.js.map +1 -0
  120. package/dist/storage/atomic.d.ts +6 -0
  121. package/dist/storage/atomic.js +60 -0
  122. package/dist/storage/atomic.js.map +1 -0
  123. package/dist/storage/errors.d.ts +12 -0
  124. package/dist/storage/errors.js +23 -0
  125. package/dist/storage/errors.js.map +1 -0
  126. package/dist/storage/locks.d.ts +9 -0
  127. package/dist/storage/locks.js +42 -0
  128. package/dist/storage/locks.js.map +1 -0
  129. package/dist/storage/storageService.d.ts +25 -0
  130. package/dist/storage/storageService.js +66 -0
  131. package/dist/storage/storageService.js.map +1 -0
  132. package/dist-frontend/assets/index-B2bB3_2r.js +39 -0
  133. package/dist-frontend/assets/index-B2bB3_2r.js.map +1 -0
  134. package/dist-frontend/assets/index-Dj1L8Px-.css +1 -0
  135. package/dist-frontend/index.html +14 -0
  136. package/docs/api.md +162 -0
  137. package/docs/old-orchestrator-prompt.md +123 -0
  138. package/package.json +81 -0
@@ -0,0 +1,394 @@
1
+ import { ApplicationCommandOptionType } from "discord.js";
2
+ import { Logger } from "../backend/logger.js";
3
+ import { ContextMessage } from "../orchestration/context.js";
4
+ import { DiscordBotConfig, GuildEmojiCacheEntry, GuildMemberCacheEntry, GuildRoleCacheEntry } from "../shared/schemas/domain.js";
5
+ export type DiscordRuntimeStatus = {
6
+ connected: boolean;
7
+ orchestratorConnected: boolean;
8
+ waifuBotCount: number;
9
+ warnings: string[];
10
+ connecting?: boolean;
11
+ retrying?: boolean;
12
+ retryAttempt?: number;
13
+ nextRetryAt?: string;
14
+ lastError?: string;
15
+ lastErrorAt?: string;
16
+ };
17
+ export type DiscordRuntimeIssue = {
18
+ source: "client-error" | "shard-error" | "shard-disconnect" | "invalidated" | "warn";
19
+ message: string;
20
+ botId?: string;
21
+ shardId?: number;
22
+ code?: string | number;
23
+ wasClean?: boolean;
24
+ error?: unknown;
25
+ };
26
+ export interface DiscordGatewayFacade {
27
+ connect(): Promise<DiscordRuntimeStatus>;
28
+ disconnect(): Promise<void>;
29
+ onMessage?(listener: DiscordMessageListener): () => void;
30
+ onReviewCommand?(listener: DiscordReviewCommandListener): () => void;
31
+ onClearCommand?(listener: DiscordClearCommandListener): () => void;
32
+ onRunCommand?(listener: DiscordRunCommandListener): () => void;
33
+ onRunWaifuAutocomplete?(listener: DiscordRunWaifuAutocompleteListener): () => void;
34
+ onStopCommand?(listener: DiscordStopCommandListener): () => void;
35
+ onMemoriesCommand?(listener: DiscordMemoriesCommandListener): () => void;
36
+ onPrintCommand?(listener: DiscordPrintCommandListener): () => void;
37
+ onPrintWaifuAutocomplete?(listener: DiscordPrintWaifuAutocompleteListener): () => void;
38
+ onDebugCommand?(listener: DiscordDebugCommandListener): () => void;
39
+ listGuilds?(): Promise<Array<{
40
+ guildId: string;
41
+ name: string;
42
+ }>>;
43
+ fetchChannelMetadata?(input: {
44
+ guildId: string;
45
+ channelId: string;
46
+ }): Promise<DiscordChannelMetadata>;
47
+ fetchFreshContext(input: {
48
+ guildId: string;
49
+ channelId: string;
50
+ limit: number;
51
+ signal?: AbortSignal;
52
+ }): Promise<ContextMessage[]>;
53
+ sendWaifuMessage(input: {
54
+ guildId: string;
55
+ channelId: string;
56
+ content: string;
57
+ senderBotId?: string;
58
+ replyToMessageId?: string;
59
+ allowedUserMentionIds: string[];
60
+ }): Promise<{
61
+ messageId: string;
62
+ }>;
63
+ sendTyping(input: {
64
+ guildId: string;
65
+ channelId: string;
66
+ senderBotId?: string;
67
+ }): Promise<void>;
68
+ validateDebugChannel?(input: {
69
+ channelId: string;
70
+ requireMessages?: boolean;
71
+ requireSend?: boolean;
72
+ }): Promise<DiscordDebugChannelInfo>;
73
+ sendDebugMessage?(input: {
74
+ channelId: string;
75
+ content: string;
76
+ }): Promise<{
77
+ messageId: string;
78
+ }>;
79
+ deleteMessages?(input: {
80
+ guildId: string;
81
+ channelId: string;
82
+ messageIds: string[];
83
+ authorId?: string;
84
+ authorIdByMessageId?: Record<string, string>;
85
+ }): Promise<DiscordDeleteMessagesResult>;
86
+ deleteAllMessages?(input: {
87
+ guildId: string;
88
+ channelId: string;
89
+ }): Promise<DiscordDeleteChannelMessagesResult>;
90
+ }
91
+ export type DiscordMessageEvent = {
92
+ guildId: string;
93
+ channelId: string;
94
+ messageId: string;
95
+ authorId: string;
96
+ authorDisplayName?: string;
97
+ authorBot: boolean;
98
+ };
99
+ export type DiscordMessageListener = (event: DiscordMessageEvent) => void | Promise<void>;
100
+ export type DiscordSlashCommandEvent = {
101
+ guildId: string;
102
+ channelId: string;
103
+ userId: string;
104
+ commandMessageId?: string;
105
+ respond: (content: string) => Promise<void>;
106
+ };
107
+ export type DiscordReviewCommandEvent = DiscordSlashCommandEvent;
108
+ export type DiscordClearCommandEvent = DiscordSlashCommandEvent & {
109
+ count?: number;
110
+ type?: DiscordClearType;
111
+ };
112
+ export type DiscordRunCommandEvent = DiscordSlashCommandEvent & {
113
+ waifuId?: string;
114
+ sceneDirection?: string;
115
+ };
116
+ export type DiscordAutocompleteChoice = {
117
+ name: string;
118
+ value: string;
119
+ };
120
+ export type DiscordRunWaifuAutocompleteEvent = {
121
+ guildId?: string;
122
+ channelId?: string;
123
+ focusedValue: string;
124
+ respond: (choices: DiscordAutocompleteChoice[]) => Promise<void>;
125
+ };
126
+ export type DiscordStopCommandEvent = DiscordSlashCommandEvent;
127
+ export type DiscordMemoriesCommandEvent = DiscordSlashCommandEvent;
128
+ export type DiscordPrintCommandEvent = DiscordSlashCommandEvent & {
129
+ type?: DiscordPrintCommandType;
130
+ waifuId?: string;
131
+ };
132
+ export type DiscordPrintWaifuAutocompleteEvent = {
133
+ guildId?: string;
134
+ channelId?: string;
135
+ focusedValue: string;
136
+ respond: (choices: DiscordAutocompleteChoice[]) => Promise<void>;
137
+ };
138
+ export type DiscordDebugCommandEvent = DiscordSlashCommandEvent & {
139
+ type?: DiscordDebugCommandType;
140
+ sourceChannelId?: string;
141
+ };
142
+ export type DiscordReviewCommandListener = (event: DiscordReviewCommandEvent) => void | Promise<void>;
143
+ export type DiscordClearCommandListener = (event: DiscordClearCommandEvent) => void | Promise<void>;
144
+ export type DiscordRunCommandListener = (event: DiscordRunCommandEvent) => void | Promise<void>;
145
+ export type DiscordRunWaifuAutocompleteListener = (event: DiscordRunWaifuAutocompleteEvent) => void | Promise<void>;
146
+ export type DiscordStopCommandListener = (event: DiscordStopCommandEvent) => void | Promise<void>;
147
+ export type DiscordMemoriesCommandListener = (event: DiscordMemoriesCommandEvent) => void | Promise<void>;
148
+ export type DiscordPrintCommandListener = (event: DiscordPrintCommandEvent) => void | Promise<void>;
149
+ export type DiscordPrintWaifuAutocompleteListener = (event: DiscordPrintWaifuAutocompleteEvent) => void | Promise<void>;
150
+ export type DiscordDebugCommandListener = (event: DiscordDebugCommandEvent) => void | Promise<void>;
151
+ export type DiscordClearType = "waifus" | "users" | "both" | "everything";
152
+ export type DiscordDebugCommandType = "set" | "unset" | "print";
153
+ export type DiscordPrintCommandType = "system_prompt" | "memories" | "personality";
154
+ export type DiscordDeleteMessagesResult = {
155
+ deletedMessageIds: string[];
156
+ failedMessageIds: Array<{
157
+ messageId: string;
158
+ message: string;
159
+ }>;
160
+ };
161
+ export type DiscordDeleteChannelMessagesResult = {
162
+ scannedMessageCount: number;
163
+ deletedCount: number;
164
+ failedCount: number;
165
+ failedMessageIds: Array<{
166
+ messageId: string;
167
+ message: string;
168
+ }>;
169
+ };
170
+ export type DiscordDebugChannelInfo = {
171
+ channelId: string;
172
+ guildId?: string;
173
+ name?: string;
174
+ };
175
+ export type DiscordChannelMetadata = {
176
+ guildId: string;
177
+ guildName?: string;
178
+ channelId: string;
179
+ channelName?: string;
180
+ };
181
+ type DiscordCache = {
182
+ members?: GuildMemberCacheEntry[];
183
+ emojis?: GuildEmojiCacheEntry[];
184
+ roles?: GuildRoleCacheEntry[];
185
+ };
186
+ export type DiscordJsGatewayOptions = {
187
+ orchestrator: DiscordBotConfig;
188
+ waifus?: DiscordBotConfig[];
189
+ members?: GuildMemberCacheEntry[];
190
+ emojis?: GuildEmojiCacheEntry[];
191
+ cacheForGuild?: (guildId: string) => Promise<DiscordCache>;
192
+ refreshMembersForGuild?: (guildId: string) => Promise<DiscordCache>;
193
+ refreshRolesForGuild?: (guildId: string) => Promise<DiscordCache>;
194
+ onRuntimeIssue?: (issue: DiscordRuntimeIssue) => void | Promise<void>;
195
+ logger?: Logger;
196
+ };
197
+ export declare class DiscordJsGateway implements DiscordGatewayFacade {
198
+ private readonly options;
199
+ private readonly clients;
200
+ private readonly listeners;
201
+ private readonly reviewListeners;
202
+ private readonly clearListeners;
203
+ private readonly runListeners;
204
+ private readonly runWaifuAutocompleteListeners;
205
+ private readonly stopListeners;
206
+ private readonly memoriesListeners;
207
+ private readonly printListeners;
208
+ private readonly printWaifuAutocompleteListeners;
209
+ private readonly debugListeners;
210
+ private readonly recentMentionRefreshes;
211
+ constructor(options: DiscordJsGatewayOptions);
212
+ connect(): Promise<DiscordRuntimeStatus>;
213
+ disconnect(): Promise<void>;
214
+ onMessage(listener: DiscordMessageListener): () => void;
215
+ onReviewCommand(listener: DiscordReviewCommandListener): () => void;
216
+ onClearCommand(listener: DiscordClearCommandListener): () => void;
217
+ onRunCommand(listener: DiscordRunCommandListener): () => void;
218
+ onRunWaifuAutocomplete(listener: DiscordRunWaifuAutocompleteListener): () => void;
219
+ onStopCommand(listener: DiscordStopCommandListener): () => void;
220
+ onMemoriesCommand(listener: DiscordMemoriesCommandListener): () => void;
221
+ onPrintCommand(listener: DiscordPrintCommandListener): () => void;
222
+ onPrintWaifuAutocomplete(listener: DiscordPrintWaifuAutocompleteListener): () => void;
223
+ onDebugCommand(listener: DiscordDebugCommandListener): () => void;
224
+ listGuilds(): Promise<Array<{
225
+ guildId: string;
226
+ name: string;
227
+ }>>;
228
+ fetchChannelMetadata(input: {
229
+ guildId: string;
230
+ channelId: string;
231
+ }): Promise<DiscordChannelMetadata>;
232
+ fetchFreshContext(input: {
233
+ guildId: string;
234
+ channelId: string;
235
+ limit: number;
236
+ signal?: AbortSignal;
237
+ }): Promise<ContextMessage[]>;
238
+ sendWaifuMessage(input: {
239
+ guildId: string;
240
+ channelId: string;
241
+ content: string;
242
+ senderBotId?: string;
243
+ replyToMessageId?: string;
244
+ allowedUserMentionIds: string[];
245
+ }): Promise<{
246
+ messageId: string;
247
+ }>;
248
+ sendTyping(input: {
249
+ guildId: string;
250
+ channelId: string;
251
+ senderBotId?: string;
252
+ }): Promise<void>;
253
+ validateDebugChannel(input: {
254
+ channelId: string;
255
+ requireMessages?: boolean;
256
+ requireSend?: boolean;
257
+ }): Promise<DiscordDebugChannelInfo>;
258
+ sendDebugMessage(input: {
259
+ channelId: string;
260
+ content: string;
261
+ }): Promise<{
262
+ messageId: string;
263
+ }>;
264
+ deleteMessages(input: {
265
+ guildId: string;
266
+ channelId: string;
267
+ messageIds: string[];
268
+ authorId?: string;
269
+ authorIdByMessageId?: Record<string, string>;
270
+ }): Promise<DiscordDeleteMessagesResult>;
271
+ deleteAllMessages(input: {
272
+ guildId: string;
273
+ channelId: string;
274
+ }): Promise<DiscordDeleteChannelMessagesResult>;
275
+ private deleteFetchedMessages;
276
+ private cacheForGuild;
277
+ private orchestratorClient;
278
+ private clientForAuthor;
279
+ private botIdForClient;
280
+ private shouldRefreshMentions;
281
+ private attachClientRuntimeHandlers;
282
+ private reportRuntimeIssue;
283
+ private callListener;
284
+ private dispatchListener;
285
+ private runBackground;
286
+ private handleReviewInteraction;
287
+ private handleClearInteraction;
288
+ private handleRunInteraction;
289
+ private handleRunAutocompleteInteraction;
290
+ private handleStopInteraction;
291
+ private handleMemoriesInteraction;
292
+ private handlePrintInteraction;
293
+ private handlePrintAutocompleteInteraction;
294
+ private handleDebugInteraction;
295
+ }
296
+ export declare class DiscordGatewayNotConfigured implements DiscordGatewayFacade {
297
+ connect(): Promise<DiscordRuntimeStatus>;
298
+ disconnect(): Promise<void>;
299
+ fetchFreshContext(): Promise<ContextMessage[]>;
300
+ sendWaifuMessage(): Promise<{
301
+ messageId: string;
302
+ }>;
303
+ sendTyping(): Promise<void>;
304
+ }
305
+ export declare function buildOrchestratorCommandPayloads(): ({
306
+ name: string;
307
+ description: string;
308
+ defaultMemberPermissions: bigint;
309
+ options?: undefined;
310
+ } | {
311
+ name: string;
312
+ description: string;
313
+ defaultMemberPermissions: bigint;
314
+ options: ({
315
+ type: ApplicationCommandOptionType.String;
316
+ name: string;
317
+ description: string;
318
+ required: boolean;
319
+ choices: {
320
+ name: string;
321
+ value: string;
322
+ }[];
323
+ min_value?: undefined;
324
+ max_value?: undefined;
325
+ } | {
326
+ type: ApplicationCommandOptionType.Integer;
327
+ name: string;
328
+ description: string;
329
+ required: boolean;
330
+ min_value: number;
331
+ max_value: number;
332
+ choices?: undefined;
333
+ })[];
334
+ } | {
335
+ name: string;
336
+ description: string;
337
+ options: ({
338
+ type: ApplicationCommandOptionType.String;
339
+ name: string;
340
+ description: string;
341
+ required: boolean;
342
+ autocomplete: boolean;
343
+ } | {
344
+ type: ApplicationCommandOptionType.String;
345
+ name: string;
346
+ description: string;
347
+ required: boolean;
348
+ autocomplete?: undefined;
349
+ })[];
350
+ defaultMemberPermissions?: undefined;
351
+ } | {
352
+ name: string;
353
+ description: string;
354
+ defaultMemberPermissions: bigint;
355
+ options: ({
356
+ type: ApplicationCommandOptionType.String;
357
+ name: string;
358
+ description: string;
359
+ required: boolean;
360
+ choices: {
361
+ name: string;
362
+ value: string;
363
+ }[];
364
+ autocomplete?: undefined;
365
+ } | {
366
+ type: ApplicationCommandOptionType.String;
367
+ name: string;
368
+ description: string;
369
+ required: boolean;
370
+ autocomplete: boolean;
371
+ choices?: undefined;
372
+ })[];
373
+ } | {
374
+ name: string;
375
+ description: string;
376
+ defaultMemberPermissions: bigint;
377
+ options: ({
378
+ type: ApplicationCommandOptionType.String;
379
+ name: string;
380
+ description: string;
381
+ required: boolean;
382
+ choices: {
383
+ name: string;
384
+ value: string;
385
+ }[];
386
+ } | {
387
+ type: ApplicationCommandOptionType.String;
388
+ name: string;
389
+ description: string;
390
+ required: boolean;
391
+ choices?: undefined;
392
+ })[];
393
+ })[];
394
+ export {};