@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,444 @@
1
+ import { z } from "zod";
2
+ import { CURRENT_SCHEMA_VERSION, IsoDateStringSchema, RevisionedRecordSchema } from "./common.js";
3
+ export const ProviderIdSchema = z.enum(["xai", "deepseek", "anthropic", "openai", "zai", "google-ai-studio"]);
4
+ export const ReasoningEffortSchema = z.enum(["none", "minimal", "low", "medium", "high", "max", "xhigh"]);
5
+ export const ReasoningConfigSchema = z
6
+ .object({
7
+ enabled: z.boolean().optional(),
8
+ effort: ReasoningEffortSchema.optional(),
9
+ budgetTokens: z.number().int().positive().optional()
10
+ })
11
+ .default({});
12
+ export const TimeOfDaySchema = z
13
+ .string()
14
+ .regex(/^([01]\d|2[0-3]):[0-5]\d$/, "Use 24-hour HH:mm time.");
15
+ function timeOfDayMinutes(value) {
16
+ const [hours = "0", minutes = "0"] = value.split(":");
17
+ return Number(hours) * 60 + Number(minutes);
18
+ }
19
+ function dailyIntervalRanges(interval) {
20
+ const start = timeOfDayMinutes(interval.start);
21
+ const end = timeOfDayMinutes(interval.end);
22
+ if (start < end)
23
+ return [[start, end]];
24
+ return [[start, 24 * 60], [0, end]];
25
+ }
26
+ function dailyIntervalsOverlap(a, b) {
27
+ return dailyIntervalRanges(a).some(([aStart, aEnd]) => dailyIntervalRanges(b).some(([bStart, bEnd]) => Math.max(aStart, bStart) < Math.min(aEnd, bEnd)));
28
+ }
29
+ export const WaifuSleepScheduleSchema = z
30
+ .object({
31
+ enabled: z.boolean().default(false),
32
+ start: TimeOfDaySchema.default("23:00"),
33
+ end: TimeOfDaySchema.default("07:00")
34
+ })
35
+ .superRefine((value, ctx) => {
36
+ if (value.enabled && value.start === value.end) {
37
+ ctx.addIssue({
38
+ code: z.ZodIssueCode.custom,
39
+ path: ["end"],
40
+ message: "Sleep end time must differ from start time."
41
+ });
42
+ }
43
+ })
44
+ .default({
45
+ enabled: false,
46
+ start: "23:00",
47
+ end: "07:00"
48
+ });
49
+ export const WaifuBusyIntervalSchema = z
50
+ .object({
51
+ start: TimeOfDaySchema,
52
+ end: TimeOfDaySchema,
53
+ reason: z.string().min(1)
54
+ })
55
+ .superRefine((value, ctx) => {
56
+ if (value.start === value.end) {
57
+ ctx.addIssue({
58
+ code: z.ZodIssueCode.custom,
59
+ path: ["end"],
60
+ message: "Busy end time must differ from start time."
61
+ });
62
+ }
63
+ });
64
+ export const WaifuAvailabilitySchema = z
65
+ .object({
66
+ sleep: WaifuSleepScheduleSchema,
67
+ busy: z.array(WaifuBusyIntervalSchema).default([])
68
+ })
69
+ .superRefine((value, ctx) => {
70
+ for (let i = 0; i < value.busy.length; i += 1) {
71
+ for (let j = i + 1; j < value.busy.length; j += 1) {
72
+ if (dailyIntervalsOverlap(value.busy[i], value.busy[j])) {
73
+ ctx.addIssue({
74
+ code: z.ZodIssueCode.custom,
75
+ path: ["busy", j],
76
+ message: "Busy intervals cannot overlap."
77
+ });
78
+ }
79
+ }
80
+ }
81
+ })
82
+ .default({
83
+ sleep: {
84
+ enabled: false,
85
+ start: "23:00",
86
+ end: "07:00"
87
+ },
88
+ busy: []
89
+ });
90
+ export const WaifuToolSettingsSchema = z
91
+ .object({
92
+ toolUse: z.boolean().default(true)
93
+ })
94
+ .default({
95
+ toolUse: true
96
+ });
97
+ // Prompt layout: an ordered tree describing which prompt blocks live in each of the three
98
+ // model-message slots (top system prompt / mid system block / trailing system block), in what
99
+ // order, and how they are grouped inside named XML wrappers. Block *wording* is fixed in code
100
+ // (see src/orchestration/promptBlocks.ts); this only controls placement, order, grouping and
101
+ // enable/disable. Replaces the former flat boolean WaifuPromptSectionsSchema.
102
+ export const PromptLayoutBlockNodeSchema = z.object({
103
+ kind: z.literal("block"),
104
+ blockId: z.string().min(1),
105
+ enabled: z.boolean().default(true)
106
+ });
107
+ export const PromptLayoutGroupNodeSchema = z.object({
108
+ kind: z.literal("group"),
109
+ id: z.string().min(1),
110
+ // XML wrapper tag. May contain the `{name}` token, substituted with the waifu tag at render.
111
+ tag: z.string().min(1),
112
+ enabled: z.boolean().default(true),
113
+ children: z.array(PromptLayoutBlockNodeSchema).default([])
114
+ });
115
+ export const PromptLayoutNodeSchema = z.discriminatedUnion("kind", [
116
+ PromptLayoutBlockNodeSchema,
117
+ PromptLayoutGroupNodeSchema
118
+ ]);
119
+ export const WaifuPromptLayoutSchema = z
120
+ .object({
121
+ top: z.array(PromptLayoutNodeSchema),
122
+ mid: z.array(PromptLayoutNodeSchema),
123
+ trailing: z.array(PromptLayoutNodeSchema)
124
+ })
125
+ .default(() => defaultWaifuPromptLayout());
126
+ // The default arrangement reproduces the historical hardcoded prompt exactly: an identity block
127
+ // followed by a `<{name}_behavior>` group in the top slot, the director-notes/participants/emojis
128
+ // trio in the mid slot, and memories/personality-reminder/currently-doing/scene-direction in the
129
+ // trailing slot. New waifus get this via the schema default; the migration derives enable flags
130
+ // from the old booleans on top of it.
131
+ export function defaultWaifuPromptLayout() {
132
+ const block = (blockId) => ({ kind: "block", blockId, enabled: true });
133
+ return {
134
+ top: [
135
+ block("identity"),
136
+ {
137
+ kind: "group",
138
+ id: "behavior",
139
+ tag: "{name}_behavior",
140
+ enabled: true,
141
+ children: [
142
+ block("personality"),
143
+ block("schedule"),
144
+ block("contextStructure"),
145
+ block("environment"),
146
+ block("replyTargeting"),
147
+ block("mentionPolicy"),
148
+ block("styleConstraints"),
149
+ block("hardRules"),
150
+ block("toolUse")
151
+ ]
152
+ }
153
+ ],
154
+ mid: [block("directorNotes"), block("activeParticipants"), block("serverEmojis")],
155
+ trailing: [
156
+ block("relevantMemories"),
157
+ block("personalityReminder"),
158
+ block("currentlyDoing"),
159
+ block("sceneDirection")
160
+ ]
161
+ };
162
+ }
163
+ export const ServerToolSettingsSchema = z
164
+ .object({
165
+ pickNextWaifu: z.boolean().default(false),
166
+ shortTermMemory: z.boolean().default(true)
167
+ })
168
+ .default({
169
+ pickNextWaifu: false,
170
+ shortTermMemory: true
171
+ });
172
+ export const ProviderCredentialsSchema = z.object({
173
+ providerId: ProviderIdSchema,
174
+ apiKey: z.string().min(1),
175
+ label: z.string().optional(),
176
+ createdAt: IsoDateStringSchema,
177
+ updatedAt: IsoDateStringSchema
178
+ });
179
+ export const ProviderCredentialsFileSchema = RevisionedRecordSchema.extend({
180
+ providers: z.record(z.string(), ProviderCredentialsSchema)
181
+ });
182
+ export const DiscordBotConfigSchema = z.object({
183
+ id: z.string().min(1),
184
+ displayName: z.string().min(1),
185
+ applicationId: z.string().min(1).optional(),
186
+ token: z.string().min(1).optional(),
187
+ enabled: z.boolean().default(false)
188
+ });
189
+ export const DiscordBotsFileSchema = RevisionedRecordSchema.extend({
190
+ orchestrator: DiscordBotConfigSchema.nullable(),
191
+ waifus: z.array(DiscordBotConfigSchema)
192
+ });
193
+ export const OrchestratorPromptSectionsSchema = z
194
+ .object({
195
+ loopBreaking: z.boolean().default(true),
196
+ retriggerPacing: z.boolean().default(true),
197
+ messageStructure: z.boolean().default(true),
198
+ toolUse: z.boolean().default(true)
199
+ })
200
+ .default({
201
+ loopBreaking: true,
202
+ retriggerPacing: true,
203
+ messageStructure: true,
204
+ toolUse: true
205
+ });
206
+ export const AgentConfigSchema = RevisionedRecordSchema.extend({
207
+ enabled: z.boolean().default(false),
208
+ providerId: z.union([ProviderIdSchema, z.null()]).optional().transform((value) => value ?? undefined),
209
+ modelId: z.union([z.string(), z.null()]).optional().transform((value) => value ?? undefined),
210
+ contextWindow: z.number().int().min(1).max(100).default(20),
211
+ prompt: z.string().default(""),
212
+ useLegacyPrompt: z.boolean().default(false),
213
+ clipSceneDirection: z.boolean().default(false),
214
+ reasoning: ReasoningConfigSchema,
215
+ promptSections: OrchestratorPromptSectionsSchema
216
+ });
217
+ export const WaifuConfigSchema = RevisionedRecordSchema.extend({
218
+ id: z.string().min(1),
219
+ name: z.string().min(1),
220
+ displayName: z.string().min(1),
221
+ enabled: z.boolean().default(true),
222
+ persona: z.string().default(""),
223
+ providerId: ProviderIdSchema.optional(),
224
+ modelId: z.string().optional(),
225
+ botId: z.string().optional(),
226
+ contextWindow: z.number().int().min(1).max(100).default(50),
227
+ generation: z
228
+ .object({
229
+ temperature: z.number().min(0).max(2).optional(),
230
+ topP: z.number().min(0).max(1).optional(),
231
+ maxOutputTokens: z.number().int().positive().optional()
232
+ })
233
+ .default({}),
234
+ reasoning: ReasoningConfigSchema,
235
+ availability: WaifuAvailabilitySchema,
236
+ tools: WaifuToolSettingsSchema,
237
+ promptLayout: WaifuPromptLayoutSchema
238
+ });
239
+ export const ServerConfigSchema = RevisionedRecordSchema.extend({
240
+ guildId: z.string().min(1),
241
+ name: z.string().optional(),
242
+ enabled: z.boolean().default(false),
243
+ contextWindows: z
244
+ .object({
245
+ orchestrator: z.number().int().min(1).max(100).default(20),
246
+ waifu: z.number().int().min(1).max(100).default(50),
247
+ stageManager: z.number().int().min(1).max(100).default(80)
248
+ })
249
+ .default({ orchestrator: 20, waifu: 50, stageManager: 80 }),
250
+ tools: ServerToolSettingsSchema,
251
+ channels: z.record(z.string(), z.object({
252
+ channelId: z.string().min(1),
253
+ name: z.string().optional(),
254
+ enabled: z.boolean().default(false),
255
+ enabledWaifuIds: z.array(z.string()).default([])
256
+ })).default({})
257
+ });
258
+ export const GuildMemberCacheEntrySchema = z.object({
259
+ userId: z.string().min(1),
260
+ username: z.string().min(1).optional(),
261
+ globalDisplayName: z.string().optional(),
262
+ guildDisplayName: z.string().optional(),
263
+ bot: z.boolean().default(false),
264
+ lastSeenAt: IsoDateStringSchema.optional(),
265
+ perChannelLastSeenAt: z.record(z.string(), IsoDateStringSchema).default({})
266
+ });
267
+ export const GuildMembersFileSchema = RevisionedRecordSchema.extend({
268
+ guildId: z.string().min(1),
269
+ members: z.array(GuildMemberCacheEntrySchema)
270
+ });
271
+ export const ActiveChatParticipantSchema = z.object({
272
+ userId: z.string().min(1),
273
+ displayName: z.string().min(1),
274
+ lastSeenAt: IsoDateStringSchema,
275
+ expiresAt: IsoDateStringSchema
276
+ });
277
+ export const ActiveChatParticipantsFileSchema = RevisionedRecordSchema.extend({
278
+ guildId: z.string().min(1),
279
+ channelId: z.string().min(1),
280
+ participants: z.array(ActiveChatParticipantSchema)
281
+ });
282
+ export const GuildEmojiCacheEntrySchema = z.object({
283
+ id: z.string().min(1),
284
+ name: z.string().min(1),
285
+ animated: z.boolean().default(false),
286
+ available: z.boolean().default(true),
287
+ roles: z.array(z.string()).default([]),
288
+ fetchedAt: IsoDateStringSchema
289
+ });
290
+ export const GuildEmojisFileSchema = RevisionedRecordSchema.extend({
291
+ guildId: z.string().min(1),
292
+ emojis: z.array(GuildEmojiCacheEntrySchema)
293
+ });
294
+ export const GuildRoleCacheEntrySchema = z.object({
295
+ id: z.string().min(1),
296
+ name: z.string().min(1),
297
+ color: z.number().int().nonnegative().default(0),
298
+ hoist: z.boolean().default(false),
299
+ mentionable: z.boolean().default(false),
300
+ managed: z.boolean().default(false),
301
+ fetchedAt: IsoDateStringSchema
302
+ });
303
+ export const GuildRolesFileSchema = RevisionedRecordSchema.extend({
304
+ guildId: z.string().min(1),
305
+ roles: z.array(GuildRoleCacheEntrySchema)
306
+ });
307
+ export const WaifuMemorySchema = z
308
+ .object({
309
+ id: z.string().min(1),
310
+ waifuId: z.string().min(1),
311
+ scope: z.literal("guild"),
312
+ guildId: z.string().min(1).optional(),
313
+ content: z.string().min(1),
314
+ importance: z.union([
315
+ z.literal(1),
316
+ z.literal(2),
317
+ z.literal(3),
318
+ z.literal(4),
319
+ z.literal(5)
320
+ ]),
321
+ permanent: z.boolean().default(false),
322
+ createdAt: IsoDateStringSchema,
323
+ updatedAt: IsoDateStringSchema,
324
+ sourceMessageIds: z.array(z.string()),
325
+ status: z.enum(["active", "archived"])
326
+ })
327
+ .superRefine((memory, ctx) => {
328
+ if (memory.status === "active" && !memory.guildId) {
329
+ ctx.addIssue({
330
+ code: z.ZodIssueCode.custom,
331
+ path: ["guildId"],
332
+ message: "Active memories must be assigned to a guild."
333
+ });
334
+ }
335
+ });
336
+ export const MemoryStoreSchema = RevisionedRecordSchema.extend({
337
+ memories: z.array(WaifuMemorySchema)
338
+ });
339
+ export const ShortTermMemorySchema = z.object({
340
+ id: z.string().min(1),
341
+ guildId: z.string().min(1),
342
+ channelId: z.string().min(1),
343
+ waifuId: z.string().min(1),
344
+ content: z.string().min(1),
345
+ createdAt: IsoDateStringSchema,
346
+ expiresAt: IsoDateStringSchema
347
+ });
348
+ export const ShortTermMemoryStoreSchema = RevisionedRecordSchema.extend({
349
+ entries: z.array(ShortTermMemorySchema)
350
+ });
351
+ export const OrchestratorReplyStyleSchema = z.enum(["normal", "short", "long", "sleepy"]);
352
+ export const OrchestratorRespondingWaifuSchema = z.object({
353
+ waifuId: z.string().min(1),
354
+ delaySeconds: z.number().min(0),
355
+ replyStyle: OrchestratorReplyStyleSchema,
356
+ replyToMessageId: z.string().min(1).optional(),
357
+ sceneDirection: z.string().min(1).optional()
358
+ });
359
+ export const OrchestratorActionLogSchema = z.enum(["reply", "no_reply"]);
360
+ export const OrchestratorDecisionStatusSchema = z.enum(["pending", "completed", "interrupted", "failed"]);
361
+ export const OrchestratorResponderOutcomeSourceSchema = z.enum(["orchestrator", "handoff"]);
362
+ export const OrchestratorResponderOutcomeStatusSchema = z.enum([
363
+ "pending",
364
+ "sent",
365
+ "tool_only",
366
+ "empty",
367
+ "unavailable",
368
+ "interrupted",
369
+ "failed",
370
+ "not_run"
371
+ ]);
372
+ export const OrchestratorResponderOutcomeSchema = z.object({
373
+ id: z.string().min(1),
374
+ waifuId: z.string().min(1),
375
+ source: OrchestratorResponderOutcomeSourceSchema,
376
+ handoffFromWaifuId: z.string().min(1).optional(),
377
+ status: OrchestratorResponderOutcomeStatusSchema,
378
+ reason: z.string().min(1).optional(),
379
+ messageIds: z.array(z.string()).default([])
380
+ });
381
+ export const OrchestratorDecisionHistoryEntrySchema = z.object({
382
+ id: z.string().min(1),
383
+ guildId: z.string().optional(),
384
+ channelId: z.string().optional(),
385
+ action: OrchestratorActionLogSchema.default("reply"),
386
+ respondingWaifus: z.array(OrchestratorRespondingWaifuSchema).default([]),
387
+ retriggerAfterSeconds: z.number().min(0).optional(),
388
+ reasoning: z.string().default(""),
389
+ status: OrchestratorDecisionStatusSchema.default("completed"),
390
+ waifuMessageIds: z.array(z.string()).default([]),
391
+ responderOutcomes: z.array(OrchestratorResponderOutcomeSchema).default([]),
392
+ createdAt: IsoDateStringSchema
393
+ });
394
+ export const OrchestratorHistoryFileSchema = RevisionedRecordSchema.extend({
395
+ decisions: z.array(OrchestratorDecisionHistoryEntrySchema)
396
+ });
397
+ export const OrchestratorDebugRouteSchema = z.object({
398
+ sourceGuildId: z.string().min(1).optional(),
399
+ sourceChannelId: z.string().min(1),
400
+ destinationGuildId: z.string().min(1).optional(),
401
+ destinationChannelId: z.string().min(1),
402
+ createdByUserId: z.string().min(1),
403
+ createdAt: IsoDateStringSchema,
404
+ updatedAt: IsoDateStringSchema
405
+ });
406
+ export const OrchestratorDebugConfigFileSchema = RevisionedRecordSchema.extend({
407
+ routes: z.record(z.string(), OrchestratorDebugRouteSchema).default({})
408
+ });
409
+ export const StageManagerEditHistoryEntrySchema = z.object({
410
+ id: z.string().min(1),
411
+ guildId: z.string().optional(),
412
+ channelId: z.string().optional(),
413
+ tool: z.enum(["add_memory", "update_memory", "archive_memory", "merge_memories", "no_change"]),
414
+ affectedMemoryIds: z.array(z.string()).default([]),
415
+ summary: z.string().default(""),
416
+ observationCount: z.number().int().min(0).optional(),
417
+ createdAt: IsoDateStringSchema
418
+ });
419
+ export const StageManagerHistoryFileSchema = RevisionedRecordSchema.extend({
420
+ edits: z.array(StageManagerEditHistoryEntrySchema)
421
+ });
422
+ export const ReviewerHistoryEntrySchema = z.object({
423
+ id: z.string().min(1),
424
+ guildId: z.string().optional(),
425
+ channelId: z.string().optional(),
426
+ reviewerUserId: z.string().optional(),
427
+ targetMessageIds: z.array(z.string()).default([]),
428
+ hallucination: z.boolean(),
429
+ deleted: z.boolean().default(false),
430
+ createdAt: IsoDateStringSchema
431
+ });
432
+ export const ReviewerHistoryFileSchema = RevisionedRecordSchema.extend({
433
+ reviews: z.array(ReviewerHistoryEntrySchema)
434
+ });
435
+ export function createEmptyRevisionedFile(extra) {
436
+ const now = new Date().toISOString();
437
+ return {
438
+ schemaVersion: CURRENT_SCHEMA_VERSION,
439
+ revision: 0,
440
+ updatedAt: now,
441
+ ...extra
442
+ };
443
+ }
444
+ //# sourceMappingURL=domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.js","sourceRoot":"","sources":["../../../src/shared/schemas/domain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type AtomicWriteOptions = {
2
+ mode?: number;
3
+ };
4
+ export declare function atomicWriteJson(filePath: string, value: unknown, options?: AtomicWriteOptions): Promise<void>;
5
+ export declare function atomicWriteText(filePath: string, content: string, options?: AtomicWriteOptions): Promise<void>;
6
+ export declare function recoverAtomicWriteTemps(filePath: string): Promise<string[]>;
@@ -0,0 +1,60 @@
1
+ import { mkdir, open, readdir, rename, rm } from "node:fs/promises";
2
+ import path from "node:path";
3
+ export async function atomicWriteJson(filePath, value, options = {}) {
4
+ await atomicWriteText(filePath, JSON.stringify(value, null, 2) + "\n", options);
5
+ }
6
+ export async function atomicWriteText(filePath, content, options = {}) {
7
+ const dir = path.dirname(filePath);
8
+ const base = path.basename(filePath);
9
+ await mkdir(dir, { recursive: true });
10
+ const tmpPath = path.join(dir, `.${base}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);
11
+ const handle = await open(tmpPath, "w", options.mode ?? 0o600);
12
+ try {
13
+ await handle.writeFile(content, "utf8");
14
+ await handle.sync();
15
+ }
16
+ finally {
17
+ await handle.close();
18
+ }
19
+ await rename(tmpPath, filePath);
20
+ await syncDirectoryBestEffort(dir);
21
+ }
22
+ export async function recoverAtomicWriteTemps(filePath) {
23
+ const dir = path.dirname(filePath);
24
+ const base = path.basename(filePath);
25
+ let entries;
26
+ try {
27
+ entries = await readdir(dir);
28
+ }
29
+ catch (error) {
30
+ if (error.code === "ENOENT") {
31
+ return [];
32
+ }
33
+ throw error;
34
+ }
35
+ const removed = [];
36
+ await Promise.all(entries
37
+ .filter((entry) => entry.startsWith(`.${base}.`) && entry.endsWith(".tmp"))
38
+ .map(async (entry) => {
39
+ const fullPath = path.join(dir, entry);
40
+ await rm(fullPath, { force: true });
41
+ removed.push(fullPath);
42
+ }));
43
+ return removed.sort();
44
+ }
45
+ async function syncDirectoryBestEffort(dir) {
46
+ try {
47
+ const handle = await open(dir, "r");
48
+ try {
49
+ await handle.sync();
50
+ }
51
+ finally {
52
+ await handle.close();
53
+ }
54
+ }
55
+ catch {
56
+ // Directory fsync is not supported on every filesystem. The file write and
57
+ // rename above still provide same-directory atomic replacement semantics.
58
+ }
59
+ }
60
+ //# sourceMappingURL=atomic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic.js","sourceRoot":"","sources":["../../src/storage/atomic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare class StorageError extends Error {
2
+ constructor(message: string, options?: ErrorOptions);
3
+ }
4
+ export declare class StorageConflictError<T = unknown> extends StorageError {
5
+ readonly latest: T;
6
+ readonly statusCode = 409;
7
+ constructor(message: string, latest: T);
8
+ }
9
+ export declare class StorageValidationError extends StorageError {
10
+ readonly statusCode = 500;
11
+ constructor(message: string, options?: ErrorOptions);
12
+ }
@@ -0,0 +1,23 @@
1
+ export class StorageError extends Error {
2
+ constructor(message, options) {
3
+ super(message, options);
4
+ this.name = "StorageError";
5
+ }
6
+ }
7
+ export class StorageConflictError extends StorageError {
8
+ latest;
9
+ statusCode = 409;
10
+ constructor(message, latest) {
11
+ super(message);
12
+ this.latest = latest;
13
+ this.name = "StorageConflictError";
14
+ }
15
+ }
16
+ export class StorageValidationError extends StorageError {
17
+ statusCode = 500;
18
+ constructor(message, options) {
19
+ super(message, options);
20
+ this.name = "StorageValidationError";
21
+ }
22
+ }
23
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/storage/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,oBAAkC,SAAQ,YAAY;IAKtD;IAJF,UAAU,GAAG,GAAG,CAAC;IAE1B,YACE,OAAe,EACN,MAAS;QAElB,KAAK,CAAC,OAAO,CAAC,CAAC;QAFN,WAAM,GAAN,MAAM,CAAG;QAGlB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,YAAY;IAC7C,UAAU,GAAG,GAAG,CAAC;IAE1B,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ export type LockWaitObserver = (resourceKey: string, waitMs: number) => void;
2
+ export declare class ResourceLockManager {
3
+ private readonly waitWarnThresholdMs;
4
+ private readonly onWait?;
5
+ private readonly tails;
6
+ constructor(waitWarnThresholdMs?: number, onWait?: LockWaitObserver | undefined);
7
+ withLock<T>(resourceKey: string, task: () => Promise<T> | T): Promise<T>;
8
+ withLocks<T>(resourceKeys: string[], task: () => Promise<T> | T): Promise<T>;
9
+ }
@@ -0,0 +1,42 @@
1
+ export class ResourceLockManager {
2
+ waitWarnThresholdMs;
3
+ onWait;
4
+ tails = new Map();
5
+ constructor(waitWarnThresholdMs = 250, onWait) {
6
+ this.waitWarnThresholdMs = waitWarnThresholdMs;
7
+ this.onWait = onWait;
8
+ }
9
+ async withLock(resourceKey, task) {
10
+ const previous = this.tails.get(resourceKey) ?? Promise.resolve();
11
+ let release;
12
+ const current = new Promise((resolve) => {
13
+ release = resolve;
14
+ });
15
+ const next = previous.catch(() => undefined).then(() => current);
16
+ this.tails.set(resourceKey, next);
17
+ const startedWaitingAt = Date.now();
18
+ await previous.catch(() => undefined);
19
+ const waitMs = Date.now() - startedWaitingAt;
20
+ if (waitMs >= this.waitWarnThresholdMs) {
21
+ this.onWait?.(resourceKey, waitMs);
22
+ }
23
+ try {
24
+ return await task();
25
+ }
26
+ finally {
27
+ release();
28
+ if (this.tails.get(resourceKey) === next) {
29
+ this.tails.delete(resourceKey);
30
+ }
31
+ }
32
+ }
33
+ async withLocks(resourceKeys, task) {
34
+ const uniqueSortedKeys = [...new Set(resourceKeys)].sort((a, b) => a.localeCompare(b));
35
+ const run = uniqueSortedKeys
36
+ .slice()
37
+ .reverse()
38
+ .reduce((nextTask, key) => () => this.withLock(key, nextTask), async () => task());
39
+ return run();
40
+ }
41
+ }
42
+ //# sourceMappingURL=locks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locks.js","sourceRoot":"","sources":["../../src/storage/locks.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,mBAAmB;IAIX;IACA;IAJF,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE1D,YACmB,sBAAsB,GAAG,EACzB,MAAyB;QADzB,wBAAmB,GAAnB,mBAAmB,CAAM;QACzB,WAAM,GAAN,MAAM,CAAmB;IACzC,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAI,WAAmB,EAAE,IAA0B;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAClE,IAAI,OAAoB,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC5C,OAAO,GAAG,OAAO,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAElC,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC;QAC7C,IAAI,MAAM,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,EAAE,CAAC;QACtB,CAAC;gBAAS,CAAC;YACT,OAAO,EAAE,CAAC;YACV,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAI,YAAsB,EAAE,IAA0B;QACnE,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,GAAG,GAAG,gBAAgB;aACzB,KAAK,EAAE;aACP,OAAO,EAAE;aACT,MAAM,CACL,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,EACrD,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CACnB,CAAC;QACJ,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;CACF"}