@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,521 @@
1
+ import { readFile, readdir, rm } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { ensureDataLayout } from "../config/layout.js";
4
+ import { RETRIGGER_MAX_SECONDS, RETRIGGER_MIN_SECONDS } from "../orchestration/decisions.js";
5
+ import { defaultWaifuPromptLayout } from "../shared/schemas/domain.js";
6
+ import { atomicWriteJson } from "../storage/atomic.js";
7
+ export async function runMigrations(dataRoot) {
8
+ await ensureDataLayout(dataRoot);
9
+ const applied = [];
10
+ if (await migrateOrchestratorHistory(dataRoot)) {
11
+ applied.push("migrate-orchestrator-history-to-responding-waifus");
12
+ }
13
+ const configsRenamed = await migrateAgentConfigs(dataRoot);
14
+ if (configsRenamed > 0) {
15
+ applied.push(`migrate-retrigger-pacing-${configsRenamed}`);
16
+ }
17
+ const sessionsRenamed = await migrateSessionFiles(dataRoot);
18
+ if (sessionsRenamed > 0) {
19
+ applied.push(`migrate-scheduled-retrigger-at-${sessionsRenamed}`);
20
+ }
21
+ const participantCachesRemoved = await removeGuildWideActiveParticipantCaches(dataRoot);
22
+ if (participantCachesRemoved > 0) {
23
+ applied.push(`remove-guild-wide-active-participants-${participantCachesRemoved}`);
24
+ }
25
+ if (await migrateLegacyMemories(dataRoot)) {
26
+ applied.push("migrate-memories-to-guild-scope");
27
+ }
28
+ if (await archiveMemoriesWithUnknownWaifus(dataRoot)) {
29
+ applied.push("archive-memories-with-unknown-waifus");
30
+ }
31
+ const layoutsMigrated = await migrateWaifuPromptSections(dataRoot);
32
+ if (layoutsMigrated > 0) {
33
+ applied.push(`migrate-waifu-prompt-layout-${layoutsMigrated}`);
34
+ }
35
+ return { applied };
36
+ }
37
+ async function removeGuildWideActiveParticipantCaches(dataRoot) {
38
+ const serversRoot = path.join(dataRoot, "user", "servers");
39
+ let guilds;
40
+ try {
41
+ guilds = await readdir(serversRoot);
42
+ }
43
+ catch (error) {
44
+ if (error.code === "ENOENT")
45
+ return 0;
46
+ throw error;
47
+ }
48
+ let count = 0;
49
+ for (const guildId of guilds) {
50
+ const filePath = path.join(serversRoot, guildId, "active-chat-participants.json");
51
+ try {
52
+ await rm(filePath);
53
+ count += 1;
54
+ }
55
+ catch (error) {
56
+ if (error.code !== "ENOENT")
57
+ throw error;
58
+ }
59
+ }
60
+ return count;
61
+ }
62
+ async function readJsonOrUndefined(filePath) {
63
+ try {
64
+ const content = await readFile(filePath, "utf8");
65
+ return JSON.parse(content);
66
+ }
67
+ catch (error) {
68
+ if (["ENOENT", "ENOTDIR"].includes(error.code ?? ""))
69
+ return undefined;
70
+ throw error;
71
+ }
72
+ }
73
+ function isObject(value) {
74
+ return typeof value === "object" && value !== null && !Array.isArray(value);
75
+ }
76
+ const REPLY_STYLES = new Set(["normal", "short", "long", "sleepy"]);
77
+ function migrateLegacyDecision(entry) {
78
+ let changed = false;
79
+ // Pull the retrigger seconds from any known legacy name first.
80
+ let retrigger;
81
+ if (typeof entry.retriggerAfterSeconds === "number") {
82
+ retrigger = entry.retriggerAfterSeconds;
83
+ }
84
+ else if (typeof entry.idleTrigger === "number") {
85
+ retrigger = entry.idleTrigger;
86
+ changed = true;
87
+ }
88
+ if ("idleTrigger" in entry) {
89
+ delete entry.idleTrigger;
90
+ changed = true;
91
+ }
92
+ // Convert legacy chain-style `steps[]` into respondingWaifus / action.
93
+ if (Array.isArray(entry.steps) && !Array.isArray(entry.respondingWaifus)) {
94
+ const respondingWaifus = [];
95
+ let hasNoReply = false;
96
+ for (const step of entry.steps) {
97
+ if (!isObject(step))
98
+ continue;
99
+ const kind = typeof step.kind === "string" ? step.kind : "";
100
+ if (!kind)
101
+ continue;
102
+ if (kind === "no_reply") {
103
+ hasNoReply = true;
104
+ continue;
105
+ }
106
+ const responder = {
107
+ waifuId: kind,
108
+ delaySeconds: 0,
109
+ replyStyle: "normal"
110
+ };
111
+ if (typeof step.sceneDirection === "string" && step.sceneDirection.length > 0) {
112
+ responder.sceneDirection = step.sceneDirection;
113
+ }
114
+ if (typeof step.replyToMessageId === "string" && step.replyToMessageId.length > 0) {
115
+ responder.replyToMessageId = step.replyToMessageId;
116
+ }
117
+ respondingWaifus.push(responder);
118
+ }
119
+ entry.respondingWaifus = respondingWaifus;
120
+ if (respondingWaifus.length > 0) {
121
+ entry.action = "reply";
122
+ }
123
+ else if (hasNoReply) {
124
+ entry.action = "no_reply";
125
+ }
126
+ else {
127
+ entry.action = "reply";
128
+ }
129
+ delete entry.steps;
130
+ changed = true;
131
+ }
132
+ // Convert original legacy action="waifus"|"no_reply" + selectedWaifuIds + sceneDirections form.
133
+ if (!Array.isArray(entry.respondingWaifus) &&
134
+ typeof entry.action === "string" &&
135
+ (Array.isArray(entry.selectedWaifuIds) ||
136
+ Array.isArray(entry.sceneDirections))) {
137
+ const selected = Array.isArray(entry.selectedWaifuIds) ? entry.selectedWaifuIds : [];
138
+ const sceneDirections = Array.isArray(entry.sceneDirections) ? entry.sceneDirections : [];
139
+ const respondingWaifus = [];
140
+ for (let i = 0; i < selected.length; i += 1) {
141
+ const waifuId = selected[i];
142
+ if (typeof waifuId !== "string" || !waifuId)
143
+ continue;
144
+ const responder = {
145
+ waifuId,
146
+ delaySeconds: 0,
147
+ replyStyle: "normal"
148
+ };
149
+ const sceneDirection = sceneDirections[i];
150
+ if (typeof sceneDirection === "string" && sceneDirection.length > 0) {
151
+ responder.sceneDirection = sceneDirection;
152
+ }
153
+ respondingWaifus.push(responder);
154
+ }
155
+ entry.respondingWaifus = respondingWaifus;
156
+ entry.action = entry.action === "no_reply" ? "no_reply" : "reply";
157
+ delete entry.selectedWaifuIds;
158
+ delete entry.sceneDirections;
159
+ changed = true;
160
+ }
161
+ // Normalize each respondingWaifu entry so it satisfies the current schema.
162
+ if (Array.isArray(entry.respondingWaifus)) {
163
+ const fixed = [];
164
+ for (const candidate of entry.respondingWaifus) {
165
+ if (!isObject(candidate)) {
166
+ changed = true;
167
+ continue;
168
+ }
169
+ const next = { ...candidate };
170
+ if (typeof next.delaySeconds !== "number" || !Number.isFinite(next.delaySeconds) || next.delaySeconds < 0) {
171
+ next.delaySeconds = 0;
172
+ changed = true;
173
+ }
174
+ if (typeof next.replyStyle !== "string" || !REPLY_STYLES.has(next.replyStyle)) {
175
+ next.replyStyle = "normal";
176
+ changed = true;
177
+ }
178
+ fixed.push(next);
179
+ }
180
+ entry.respondingWaifus = fixed;
181
+ }
182
+ // Ensure action is present and consistent with respondingWaifus.
183
+ const responders = Array.isArray(entry.respondingWaifus) ? entry.respondingWaifus : [];
184
+ if (entry.action !== "reply" && entry.action !== "no_reply") {
185
+ entry.action = responders.length > 0 ? "reply" : "no_reply";
186
+ changed = true;
187
+ }
188
+ if (entry.action === "reply" && responders.length === 0) {
189
+ entry.action = "no_reply";
190
+ changed = true;
191
+ }
192
+ // Place retriggerAfterSeconds appropriately for the action.
193
+ if (entry.action === "no_reply") {
194
+ if (retrigger === undefined || retrigger < RETRIGGER_MIN_SECONDS) {
195
+ retrigger = RETRIGGER_MIN_SECONDS;
196
+ changed = true;
197
+ }
198
+ else if (retrigger > RETRIGGER_MAX_SECONDS) {
199
+ retrigger = RETRIGGER_MAX_SECONDS;
200
+ changed = true;
201
+ }
202
+ if (entry.retriggerAfterSeconds !== retrigger) {
203
+ entry.retriggerAfterSeconds = retrigger;
204
+ changed = true;
205
+ }
206
+ }
207
+ else if ("retriggerAfterSeconds" in entry) {
208
+ delete entry.retriggerAfterSeconds;
209
+ changed = true;
210
+ }
211
+ if (entry.status !== "pending" &&
212
+ entry.status !== "completed" &&
213
+ entry.status !== "interrupted" &&
214
+ entry.status !== "failed") {
215
+ entry.status = "completed";
216
+ changed = true;
217
+ }
218
+ if (!Array.isArray(entry.waifuMessageIds)) {
219
+ entry.waifuMessageIds = [];
220
+ changed = true;
221
+ }
222
+ if (!Array.isArray(entry.responderOutcomes)) {
223
+ entry.responderOutcomes = [];
224
+ changed = true;
225
+ }
226
+ return changed;
227
+ }
228
+ async function migrateOrchestratorHistory(dataRoot) {
229
+ const filePath = path.join(dataRoot, "user", "orchestrator", "history.json");
230
+ const data = await readJsonOrUndefined(filePath);
231
+ if (!isObject(data))
232
+ return false;
233
+ const decisions = data.decisions;
234
+ if (!Array.isArray(decisions))
235
+ return false;
236
+ let changed = false;
237
+ for (const entry of decisions) {
238
+ if (!isObject(entry))
239
+ continue;
240
+ if (migrateLegacyDecision(entry)) {
241
+ changed = true;
242
+ }
243
+ }
244
+ if (!changed)
245
+ return false;
246
+ await atomicWriteJson(filePath, data);
247
+ return true;
248
+ }
249
+ async function migrateAgentConfigs(dataRoot) {
250
+ const agentDirs = ["orchestrator", "stage-manager", "reviewer"];
251
+ let count = 0;
252
+ for (const agent of agentDirs) {
253
+ const filePath = path.join(dataRoot, "user", agent, "config.json");
254
+ const data = await readJsonOrUndefined(filePath);
255
+ if (!isObject(data))
256
+ continue;
257
+ const sections = data.promptSections;
258
+ if (!isObject(sections))
259
+ continue;
260
+ let mutated = false;
261
+ if ("idleTriggerPacing" in sections) {
262
+ if (!("retriggerPacing" in sections)) {
263
+ sections.retriggerPacing = sections.idleTriggerPacing;
264
+ }
265
+ delete sections.idleTriggerPacing;
266
+ mutated = true;
267
+ }
268
+ if ("retriggerPacing_old" in sections) {
269
+ delete sections.retriggerPacing_old;
270
+ mutated = true;
271
+ }
272
+ if (mutated) {
273
+ await atomicWriteJson(filePath, data);
274
+ count += 1;
275
+ }
276
+ }
277
+ return count;
278
+ }
279
+ async function migrateSessionFiles(dataRoot) {
280
+ const serversRoot = path.join(dataRoot, "user", "servers");
281
+ let guilds;
282
+ try {
283
+ guilds = await readdir(serversRoot);
284
+ }
285
+ catch (error) {
286
+ if (error.code === "ENOENT")
287
+ return 0;
288
+ throw error;
289
+ }
290
+ let count = 0;
291
+ for (const guildId of guilds) {
292
+ const sessionsDir = path.join(serversRoot, guildId, "sessions");
293
+ let sessionFiles;
294
+ try {
295
+ sessionFiles = await readdir(sessionsDir);
296
+ }
297
+ catch (error) {
298
+ if (error.code === "ENOENT")
299
+ continue;
300
+ throw error;
301
+ }
302
+ for (const fileName of sessionFiles) {
303
+ if (!fileName.endsWith(".json"))
304
+ continue;
305
+ const filePath = path.join(sessionsDir, fileName);
306
+ const data = await readJsonOrUndefined(filePath);
307
+ if (!isObject(data))
308
+ continue;
309
+ let mutated = false;
310
+ if ("scheduledIdleTriggerAt" in data) {
311
+ if (!("scheduledRetriggerAt" in data)) {
312
+ data.scheduledRetriggerAt = data.scheduledIdleTriggerAt;
313
+ }
314
+ delete data.scheduledIdleTriggerAt;
315
+ mutated = true;
316
+ }
317
+ if ("cachedWaifuContinuation" in data) {
318
+ delete data.cachedWaifuContinuation;
319
+ mutated = true;
320
+ }
321
+ if (mutated) {
322
+ await atomicWriteJson(filePath, data);
323
+ count += 1;
324
+ }
325
+ }
326
+ }
327
+ return count;
328
+ }
329
+ // Legacy waifus stored a flat boolean `promptSections` toggle set. Convert each into the new
330
+ // ordered `promptLayout` tree, preserving the user's on/off choices by disabling the matching
331
+ // blocks on top of the default arrangement. Always-on and conditional blocks stay enabled.
332
+ const LEGACY_PROMPT_SECTION_TO_BLOCK = {
333
+ directorNotes: "directorNotes",
334
+ hardRules: "hardRules",
335
+ mentionPolicy: "mentionPolicy",
336
+ replyTargeting: "replyTargeting",
337
+ environmentInstructions: "environment",
338
+ inputFormat: "contextStructure",
339
+ styleConstraints: "styleConstraints",
340
+ personality: "personalityReminder"
341
+ };
342
+ function setBlockEnabled(layout, blockId, enabled) {
343
+ const visit = (nodes) => {
344
+ for (const node of nodes) {
345
+ if (node.kind === "block") {
346
+ if (node.blockId === blockId)
347
+ node.enabled = enabled;
348
+ }
349
+ else {
350
+ for (const child of node.children) {
351
+ if (child.blockId === blockId)
352
+ child.enabled = enabled;
353
+ }
354
+ }
355
+ }
356
+ };
357
+ visit(layout.top);
358
+ visit(layout.mid);
359
+ visit(layout.trailing);
360
+ }
361
+ async function migrateWaifuPromptSections(dataRoot) {
362
+ const waifusRoot = path.join(dataRoot, "user", "waifus");
363
+ let entries;
364
+ try {
365
+ entries = await readdir(waifusRoot);
366
+ }
367
+ catch (error) {
368
+ if (error.code === "ENOENT")
369
+ return 0;
370
+ throw error;
371
+ }
372
+ let count = 0;
373
+ for (const entry of entries) {
374
+ const filePath = path.join(waifusRoot, entry, "waifu.json");
375
+ const data = await readJsonOrUndefined(filePath);
376
+ if (!isObject(data))
377
+ continue;
378
+ const legacy = data.promptSections;
379
+ if (!isObject(legacy))
380
+ continue; // already migrated or never had the legacy field
381
+ const layout = defaultWaifuPromptLayout();
382
+ for (const [legacyKey, blockId] of Object.entries(LEGACY_PROMPT_SECTION_TO_BLOCK)) {
383
+ if (legacy[legacyKey] === false) {
384
+ setBlockEnabled(layout, blockId, false);
385
+ }
386
+ }
387
+ data.promptLayout = layout;
388
+ delete data.promptSections;
389
+ await atomicWriteJson(filePath, data);
390
+ count += 1;
391
+ }
392
+ return count;
393
+ }
394
+ async function migrateLegacyMemories(dataRoot) {
395
+ const filePath = path.join(dataRoot, "user", "memories.json");
396
+ const data = await readJsonOrUndefined(filePath);
397
+ if (!isObject(data) || !Array.isArray(data.memories))
398
+ return false;
399
+ const [historyGuilds, configuredGuildIds] = await Promise.all([
400
+ memoryGuildsFromStageManagerHistory(dataRoot),
401
+ listConfiguredGuildIds(dataRoot)
402
+ ]);
403
+ const onlyConfiguredGuildId = configuredGuildIds.length === 1 ? configuredGuildIds[0] : undefined;
404
+ let changed = false;
405
+ for (const memory of data.memories) {
406
+ if (!isObject(memory))
407
+ continue;
408
+ if (memory.scope !== "guild") {
409
+ memory.scope = "guild";
410
+ changed = true;
411
+ }
412
+ const memoryId = typeof memory.id === "string" ? memory.id : undefined;
413
+ const existingGuildId = typeof memory.guildId === "string" && memory.guildId.length > 0
414
+ ? memory.guildId
415
+ : undefined;
416
+ const historyGuildId = memoryId ? singleValue(historyGuilds.get(memoryId)) : undefined;
417
+ const guildId = existingGuildId ?? historyGuildId ?? onlyConfiguredGuildId;
418
+ if (guildId) {
419
+ if (memory.guildId !== guildId) {
420
+ memory.guildId = guildId;
421
+ changed = true;
422
+ }
423
+ }
424
+ else if (memory.status !== "archived") {
425
+ memory.status = "archived";
426
+ changed = true;
427
+ }
428
+ }
429
+ if (!changed)
430
+ return false;
431
+ await atomicWriteJson(filePath, data);
432
+ return true;
433
+ }
434
+ async function archiveMemoriesWithUnknownWaifus(dataRoot) {
435
+ const filePath = path.join(dataRoot, "user", "memories.json");
436
+ const data = await readJsonOrUndefined(filePath);
437
+ if (!isObject(data) || !Array.isArray(data.memories))
438
+ return false;
439
+ const configuredWaifuIds = new Set(await listConfiguredWaifuIds(dataRoot));
440
+ const now = new Date().toISOString();
441
+ let changed = false;
442
+ for (const memory of data.memories) {
443
+ if (!isObject(memory))
444
+ continue;
445
+ const waifuId = typeof memory.waifuId === "string" ? memory.waifuId : undefined;
446
+ if (memory.status === "active" && (!waifuId || !configuredWaifuIds.has(waifuId))) {
447
+ memory.status = "archived";
448
+ memory.updatedAt = now;
449
+ changed = true;
450
+ }
451
+ }
452
+ if (!changed)
453
+ return false;
454
+ await atomicWriteJson(filePath, data);
455
+ return true;
456
+ }
457
+ async function memoryGuildsFromStageManagerHistory(dataRoot) {
458
+ const data = await readJsonOrUndefined(path.join(dataRoot, "user", "stage-manager", "history.json"));
459
+ const guildsByMemoryId = new Map();
460
+ if (!isObject(data) || !Array.isArray(data.edits))
461
+ return guildsByMemoryId;
462
+ for (const entry of data.edits) {
463
+ if (!isObject(entry) || typeof entry.guildId !== "string" || !Array.isArray(entry.affectedMemoryIds)) {
464
+ continue;
465
+ }
466
+ for (const memoryId of entry.affectedMemoryIds) {
467
+ if (typeof memoryId !== "string" || !memoryId)
468
+ continue;
469
+ const guilds = guildsByMemoryId.get(memoryId) ?? new Set();
470
+ guilds.add(entry.guildId);
471
+ guildsByMemoryId.set(memoryId, guilds);
472
+ }
473
+ }
474
+ return guildsByMemoryId;
475
+ }
476
+ async function listConfiguredGuildIds(dataRoot) {
477
+ const serversRoot = path.join(dataRoot, "user", "servers");
478
+ let entries;
479
+ try {
480
+ entries = await readdir(serversRoot);
481
+ }
482
+ catch (error) {
483
+ if (error.code === "ENOENT")
484
+ return [];
485
+ throw error;
486
+ }
487
+ const guildIds = [];
488
+ for (const entry of entries) {
489
+ const data = await readJsonOrUndefined(path.join(serversRoot, entry, "server.json"));
490
+ if (isObject(data) && typeof data.guildId === "string" && data.guildId.length > 0) {
491
+ guildIds.push(data.guildId);
492
+ }
493
+ }
494
+ return guildIds;
495
+ }
496
+ async function listConfiguredWaifuIds(dataRoot) {
497
+ const waifusRoot = path.join(dataRoot, "user", "waifus");
498
+ let entries;
499
+ try {
500
+ entries = await readdir(waifusRoot);
501
+ }
502
+ catch (error) {
503
+ if (error.code === "ENOENT")
504
+ return [];
505
+ throw error;
506
+ }
507
+ const waifuIds = [];
508
+ for (const entry of entries) {
509
+ const data = await readJsonOrUndefined(path.join(waifusRoot, entry, "waifu.json"));
510
+ if (isObject(data) && typeof data.id === "string" && data.id.length > 0) {
511
+ waifuIds.push(data.id);
512
+ }
513
+ }
514
+ return waifuIds;
515
+ }
516
+ function singleValue(values) {
517
+ if (!values || values.size !== 1)
518
+ return undefined;
519
+ return [...values][0];
520
+ }
521
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/backend/migrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function redactSecrets<T>(value: T): T;
@@ -0,0 +1,22 @@
1
+ const SECRET_KEY_PATTERN = /(api[_-]?key|authorization|bearer|bot[_-]?token|client[_-]?secret|password|secret|token)/i;
2
+ const DISCORD_TOKEN_PATTERN = /[MN][A-Za-z\d_-]{23,27}\.[A-Za-z\d_-]{6,7}\.[A-Za-z\d_-]{27,40}/g;
3
+ const API_KEY_PATTERN = /\b(?:sk|xai|zai|claude|deepseek|openai)[-_][A-Za-z0-9._-]{16,}\b/gi;
4
+ export function redactSecrets(value) {
5
+ return redactValue(value);
6
+ }
7
+ function redactValue(value) {
8
+ if (typeof value === "string") {
9
+ return value.replace(DISCORD_TOKEN_PATTERN, "[REDACTED]").replace(API_KEY_PATTERN, "[REDACTED]");
10
+ }
11
+ if (Array.isArray(value)) {
12
+ return value.map((entry) => redactValue(entry));
13
+ }
14
+ if (value && typeof value === "object") {
15
+ return Object.fromEntries(Object.entries(value).map(([key, entry]) => [
16
+ key,
17
+ SECRET_KEY_PATTERN.test(key) ? "[REDACTED]" : redactValue(entry)
18
+ ]));
19
+ }
20
+ return value;
21
+ }
22
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/backend/redaction.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,2FAA2F,CAAC;AACvH,MAAM,qBAAqB,GAAG,kEAAkE,CAAC;AACjG,MAAM,eAAe,GAAG,oEAAoE,CAAC;AAE7F,MAAM,UAAU,aAAa,CAAI,KAAQ;IACvC,OAAO,WAAW,CAAC,KAAK,CAAM,CAAC;AACjC,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IACnG,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YAC1C,GAAG;YACH,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC;SACjE,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ export declare const RuntimeStateSchema: z.ZodObject<{
3
+ schemaVersion: z.ZodLiteral<1>;
4
+ pid: z.ZodNumber;
5
+ startedAt: z.ZodString;
6
+ updatedAt: z.ZodString;
7
+ packageVersion: z.ZodString;
8
+ port: z.ZodNumber;
9
+ dataRoot: z.ZodString;
10
+ mode: z.ZodString;
11
+ paused: z.ZodDefault<z.ZodBoolean>;
12
+ discord: z.ZodDefault<z.ZodObject<{
13
+ connected: z.ZodBoolean;
14
+ orchestratorConnected: z.ZodBoolean;
15
+ waifuBotCount: z.ZodNumber;
16
+ warnings: z.ZodArray<z.ZodString>;
17
+ connecting: z.ZodOptional<z.ZodBoolean>;
18
+ retrying: z.ZodOptional<z.ZodBoolean>;
19
+ retryAttempt: z.ZodOptional<z.ZodNumber>;
20
+ nextRetryAt: z.ZodOptional<z.ZodString>;
21
+ lastError: z.ZodOptional<z.ZodString>;
22
+ lastErrorAt: z.ZodOptional<z.ZodString>;
23
+ }, z.core.$strip>>;
24
+ queues: z.ZodDefault<z.ZodObject<{
25
+ active: z.ZodNumber;
26
+ configuredGuilds: z.ZodNumber;
27
+ }, z.core.$strip>>;
28
+ }, z.core.$strip>;
29
+ export type RuntimeState = z.infer<typeof RuntimeStateSchema>;
30
+ export declare function createRuntimeState(input: Omit<RuntimeState, "schemaVersion" | "updatedAt">): RuntimeState;
@@ -0,0 +1,49 @@
1
+ import { z } from "zod";
2
+ import { CURRENT_SCHEMA_VERSION, IsoDateStringSchema } from "../shared/schemas/common.js";
3
+ export const RuntimeStateSchema = z.object({
4
+ schemaVersion: z.literal(CURRENT_SCHEMA_VERSION),
5
+ pid: z.number().int().positive(),
6
+ startedAt: IsoDateStringSchema,
7
+ updatedAt: IsoDateStringSchema,
8
+ packageVersion: z.string(),
9
+ port: z.number().int().min(1).max(65_535),
10
+ dataRoot: z.string(),
11
+ mode: z.string(),
12
+ paused: z.boolean().default(false),
13
+ discord: z
14
+ .object({
15
+ connected: z.boolean(),
16
+ orchestratorConnected: z.boolean(),
17
+ waifuBotCount: z.number().int().nonnegative(),
18
+ warnings: z.array(z.string()),
19
+ connecting: z.boolean().optional(),
20
+ retrying: z.boolean().optional(),
21
+ retryAttempt: z.number().int().positive().optional(),
22
+ nextRetryAt: IsoDateStringSchema.optional(),
23
+ lastError: z.string().optional(),
24
+ lastErrorAt: IsoDateStringSchema.optional()
25
+ })
26
+ .default({
27
+ connected: false,
28
+ orchestratorConnected: false,
29
+ waifuBotCount: 0,
30
+ warnings: []
31
+ }),
32
+ queues: z
33
+ .object({
34
+ active: z.number().int().nonnegative(),
35
+ configuredGuilds: z.number().int().nonnegative()
36
+ })
37
+ .default({
38
+ active: 0,
39
+ configuredGuilds: 0
40
+ })
41
+ });
42
+ export function createRuntimeState(input) {
43
+ return RuntimeStateSchema.parse({
44
+ schemaVersion: CURRENT_SCHEMA_VERSION,
45
+ updatedAt: new Date().toISOString(),
46
+ ...input
47
+ });
48
+ }
49
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/backend/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAE1F,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC;IAChD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,mBAAmB;IAC9B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAClC,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;QACtB,qBAAqB,EAAE,CAAC,CAAC,OAAO,EAAE;QAClC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QAC7C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAClC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACpD,WAAW,EAAE,mBAAmB,CAAC,QAAQ,EAAE;QAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,WAAW,EAAE,mBAAmB,CAAC,QAAQ,EAAE;KAC5C,CAAC;SACD,OAAO,CAAC;QACP,SAAS,EAAE,KAAK;QAChB,qBAAqB,EAAE,KAAK;QAC5B,aAAa,EAAE,CAAC;QAChB,QAAQ,EAAE,EAAE;KACb,CAAC;IACJ,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACtC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;KACjD,CAAC;SACD,OAAO,CAAC;QACP,MAAM,EAAE,CAAC;QACT,gBAAgB,EAAE,CAAC;KACpB,CAAC;CACL,CAAC,CAAC;AAIH,MAAM,UAAU,kBAAkB,CAAC,KAAwD;IACzF,OAAO,kBAAkB,CAAC,KAAK,CAAC;QAC9B,aAAa,EAAE,sBAAsB;QACrC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,GAAG,KAAK;KACT,CAAC,CAAC;AACL,CAAC"}