@character-foundry/character-foundry 0.4.1 → 0.4.2-dev.1765997746

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 (57) hide show
  1. package/dist/charx.cjs +17 -38
  2. package/dist/charx.cjs.map +1 -1
  3. package/dist/charx.d.cts +27 -18
  4. package/dist/charx.d.ts +27 -18
  5. package/dist/charx.js +17 -38
  6. package/dist/charx.js.map +1 -1
  7. package/dist/exporter.cjs +36 -40
  8. package/dist/exporter.cjs.map +1 -1
  9. package/dist/exporter.d.cts +27 -18
  10. package/dist/exporter.d.ts +27 -18
  11. package/dist/exporter.js +36 -40
  12. package/dist/exporter.js.map +1 -1
  13. package/dist/federation.cjs +104 -36
  14. package/dist/federation.cjs.map +1 -1
  15. package/dist/federation.d.cts +62 -18
  16. package/dist/federation.d.ts +62 -18
  17. package/dist/federation.js +104 -36
  18. package/dist/federation.js.map +1 -1
  19. package/dist/index.cjs +36 -40
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.cts +63 -42
  22. package/dist/index.d.ts +63 -42
  23. package/dist/index.js +36 -40
  24. package/dist/index.js.map +1 -1
  25. package/dist/loader.cjs +103 -17
  26. package/dist/loader.cjs.map +1 -1
  27. package/dist/loader.d.cts +56 -28
  28. package/dist/loader.d.ts +56 -28
  29. package/dist/loader.js +103 -17
  30. package/dist/loader.js.map +1 -1
  31. package/dist/lorebook.d.cts +51 -34
  32. package/dist/lorebook.d.ts +51 -34
  33. package/dist/normalizer.cjs +4 -4
  34. package/dist/normalizer.cjs.map +1 -1
  35. package/dist/normalizer.d.cts +90 -60
  36. package/dist/normalizer.d.ts +90 -60
  37. package/dist/normalizer.js +4 -4
  38. package/dist/normalizer.js.map +1 -1
  39. package/dist/png.cjs +4 -4
  40. package/dist/png.cjs.map +1 -1
  41. package/dist/png.d.cts +48 -32
  42. package/dist/png.d.ts +48 -32
  43. package/dist/png.js +4 -4
  44. package/dist/png.js.map +1 -1
  45. package/dist/schemas.cjs +9 -9
  46. package/dist/schemas.cjs.map +1 -1
  47. package/dist/schemas.d.cts +144 -96
  48. package/dist/schemas.d.ts +144 -96
  49. package/dist/schemas.js +9 -9
  50. package/dist/schemas.js.map +1 -1
  51. package/dist/voxta.cjs +23 -6
  52. package/dist/voxta.cjs.map +1 -1
  53. package/dist/voxta.d.cts +42 -28
  54. package/dist/voxta.d.ts +42 -28
  55. package/dist/voxta.js +23 -6
  56. package/dist/voxta.js.map +1 -1
  57. package/package.json +6 -6
@@ -39,7 +39,7 @@ declare const CCv3DataSchema: z.ZodObject<{
39
39
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
40
40
  content: z.ZodString;
41
41
  enabled: z.ZodDefault<z.ZodBoolean>;
42
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
42
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
43
43
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
44
44
  name: z.ZodOptional<z.ZodString>;
45
45
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -51,7 +51,8 @@ declare const CCv3DataSchema: z.ZodObject<{
51
51
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
52
52
  z.ZodEnum<[
53
53
  "before_char",
54
- "after_char"
54
+ "after_char",
55
+ "in_chat"
55
56
  ]>,
56
57
  z.ZodNumber,
57
58
  z.ZodLiteral<"">
@@ -82,7 +83,7 @@ declare const CCv3DataSchema: z.ZodObject<{
82
83
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
83
84
  content: z.ZodString;
84
85
  enabled: z.ZodDefault<z.ZodBoolean>;
85
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
86
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
86
87
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
87
88
  name: z.ZodOptional<z.ZodString>;
88
89
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -94,7 +95,8 @@ declare const CCv3DataSchema: z.ZodObject<{
94
95
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
95
96
  z.ZodEnum<[
96
97
  "before_char",
97
- "after_char"
98
+ "after_char",
99
+ "in_chat"
98
100
  ]>,
99
101
  z.ZodNumber,
100
102
  z.ZodLiteral<"">
@@ -125,7 +127,7 @@ declare const CCv3DataSchema: z.ZodObject<{
125
127
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
126
128
  content: z.ZodString;
127
129
  enabled: z.ZodDefault<z.ZodBoolean>;
128
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
130
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
129
131
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
130
132
  name: z.ZodOptional<z.ZodString>;
131
133
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -137,7 +139,8 @@ declare const CCv3DataSchema: z.ZodObject<{
137
139
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
138
140
  z.ZodEnum<[
139
141
  "before_char",
140
- "after_char"
142
+ "after_char",
143
+ "in_chat"
141
144
  ]>,
142
145
  z.ZodNumber,
143
146
  z.ZodLiteral<"">
@@ -170,7 +173,7 @@ declare const CCv3DataSchema: z.ZodObject<{
170
173
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
171
174
  content: z.ZodString;
172
175
  enabled: z.ZodDefault<z.ZodBoolean>;
173
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
176
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
174
177
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
175
178
  name: z.ZodOptional<z.ZodString>;
176
179
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -182,7 +185,8 @@ declare const CCv3DataSchema: z.ZodObject<{
182
185
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
183
186
  z.ZodEnum<[
184
187
  "before_char",
185
- "after_char"
188
+ "after_char",
189
+ "in_chat"
186
190
  ]>,
187
191
  z.ZodNumber,
188
192
  z.ZodLiteral<"">
@@ -221,7 +225,7 @@ declare const CCv3DataSchema: z.ZodObject<{
221
225
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
222
226
  content: z.ZodString;
223
227
  enabled: z.ZodDefault<z.ZodBoolean>;
224
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
228
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
225
229
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
226
230
  name: z.ZodOptional<z.ZodString>;
227
231
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -233,7 +237,8 @@ declare const CCv3DataSchema: z.ZodObject<{
233
237
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
234
238
  z.ZodEnum<[
235
239
  "before_char",
236
- "after_char"
240
+ "after_char",
241
+ "in_chat"
237
242
  ]>,
238
243
  z.ZodNumber,
239
244
  z.ZodLiteral<"">
@@ -320,7 +325,7 @@ declare const CCv3DataSchema: z.ZodObject<{
320
325
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
321
326
  content: z.ZodString;
322
327
  enabled: z.ZodDefault<z.ZodBoolean>;
323
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
328
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
324
329
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
325
330
  name: z.ZodOptional<z.ZodString>;
326
331
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -332,7 +337,8 @@ declare const CCv3DataSchema: z.ZodObject<{
332
337
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
333
338
  z.ZodEnum<[
334
339
  "before_char",
335
- "after_char"
340
+ "after_char",
341
+ "in_chat"
336
342
  ]>,
337
343
  z.ZodNumber,
338
344
  z.ZodLiteral<"">
@@ -395,7 +401,7 @@ declare const CCv3DataSchema: z.ZodObject<{
395
401
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
396
402
  content: z.ZodString;
397
403
  enabled: z.ZodDefault<z.ZodBoolean>;
398
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
404
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
399
405
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
400
406
  name: z.ZodOptional<z.ZodString>;
401
407
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -407,7 +413,8 @@ declare const CCv3DataSchema: z.ZodObject<{
407
413
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
408
414
  z.ZodEnum<[
409
415
  "before_char",
410
- "after_char"
416
+ "after_char",
417
+ "in_chat"
411
418
  ]>,
412
419
  z.ZodNumber,
413
420
  z.ZodLiteral<"">
@@ -480,7 +487,7 @@ declare const CCv3DataSchema: z.ZodObject<{
480
487
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
481
488
  content: z.ZodString;
482
489
  enabled: z.ZodDefault<z.ZodBoolean>;
483
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
490
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
484
491
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
485
492
  name: z.ZodOptional<z.ZodString>;
486
493
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -492,7 +499,8 @@ declare const CCv3DataSchema: z.ZodObject<{
492
499
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
493
500
  z.ZodEnum<[
494
501
  "before_char",
495
- "after_char"
502
+ "after_char",
503
+ "in_chat"
496
504
  ]>,
497
505
  z.ZodNumber,
498
506
  z.ZodLiteral<"">
@@ -559,7 +567,7 @@ declare const CCv3DataSchema: z.ZodObject<{
559
567
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
560
568
  content: z.ZodString;
561
569
  enabled: z.ZodDefault<z.ZodBoolean>;
562
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
570
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
563
571
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
564
572
  name: z.ZodOptional<z.ZodString>;
565
573
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -571,7 +579,8 @@ declare const CCv3DataSchema: z.ZodObject<{
571
579
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
572
580
  z.ZodEnum<[
573
581
  "before_char",
574
- "after_char"
582
+ "after_char",
583
+ "in_chat"
575
584
  ]>,
576
585
  z.ZodNumber,
577
586
  z.ZodLiteral<"">
@@ -39,7 +39,7 @@ declare const CCv3DataSchema: z.ZodObject<{
39
39
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
40
40
  content: z.ZodString;
41
41
  enabled: z.ZodDefault<z.ZodBoolean>;
42
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
42
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
43
43
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
44
44
  name: z.ZodOptional<z.ZodString>;
45
45
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -51,7 +51,8 @@ declare const CCv3DataSchema: z.ZodObject<{
51
51
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
52
52
  z.ZodEnum<[
53
53
  "before_char",
54
- "after_char"
54
+ "after_char",
55
+ "in_chat"
55
56
  ]>,
56
57
  z.ZodNumber,
57
58
  z.ZodLiteral<"">
@@ -82,7 +83,7 @@ declare const CCv3DataSchema: z.ZodObject<{
82
83
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
83
84
  content: z.ZodString;
84
85
  enabled: z.ZodDefault<z.ZodBoolean>;
85
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
86
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
86
87
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
87
88
  name: z.ZodOptional<z.ZodString>;
88
89
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -94,7 +95,8 @@ declare const CCv3DataSchema: z.ZodObject<{
94
95
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
95
96
  z.ZodEnum<[
96
97
  "before_char",
97
- "after_char"
98
+ "after_char",
99
+ "in_chat"
98
100
  ]>,
99
101
  z.ZodNumber,
100
102
  z.ZodLiteral<"">
@@ -125,7 +127,7 @@ declare const CCv3DataSchema: z.ZodObject<{
125
127
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
126
128
  content: z.ZodString;
127
129
  enabled: z.ZodDefault<z.ZodBoolean>;
128
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
130
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
129
131
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
130
132
  name: z.ZodOptional<z.ZodString>;
131
133
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -137,7 +139,8 @@ declare const CCv3DataSchema: z.ZodObject<{
137
139
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
138
140
  z.ZodEnum<[
139
141
  "before_char",
140
- "after_char"
142
+ "after_char",
143
+ "in_chat"
141
144
  ]>,
142
145
  z.ZodNumber,
143
146
  z.ZodLiteral<"">
@@ -170,7 +173,7 @@ declare const CCv3DataSchema: z.ZodObject<{
170
173
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
171
174
  content: z.ZodString;
172
175
  enabled: z.ZodDefault<z.ZodBoolean>;
173
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
176
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
174
177
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
175
178
  name: z.ZodOptional<z.ZodString>;
176
179
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -182,7 +185,8 @@ declare const CCv3DataSchema: z.ZodObject<{
182
185
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
183
186
  z.ZodEnum<[
184
187
  "before_char",
185
- "after_char"
188
+ "after_char",
189
+ "in_chat"
186
190
  ]>,
187
191
  z.ZodNumber,
188
192
  z.ZodLiteral<"">
@@ -221,7 +225,7 @@ declare const CCv3DataSchema: z.ZodObject<{
221
225
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
222
226
  content: z.ZodString;
223
227
  enabled: z.ZodDefault<z.ZodBoolean>;
224
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
228
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
225
229
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
226
230
  name: z.ZodOptional<z.ZodString>;
227
231
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -233,7 +237,8 @@ declare const CCv3DataSchema: z.ZodObject<{
233
237
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
234
238
  z.ZodEnum<[
235
239
  "before_char",
236
- "after_char"
240
+ "after_char",
241
+ "in_chat"
237
242
  ]>,
238
243
  z.ZodNumber,
239
244
  z.ZodLiteral<"">
@@ -320,7 +325,7 @@ declare const CCv3DataSchema: z.ZodObject<{
320
325
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
321
326
  content: z.ZodString;
322
327
  enabled: z.ZodDefault<z.ZodBoolean>;
323
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
328
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
324
329
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
325
330
  name: z.ZodOptional<z.ZodString>;
326
331
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -332,7 +337,8 @@ declare const CCv3DataSchema: z.ZodObject<{
332
337
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
333
338
  z.ZodEnum<[
334
339
  "before_char",
335
- "after_char"
340
+ "after_char",
341
+ "in_chat"
336
342
  ]>,
337
343
  z.ZodNumber,
338
344
  z.ZodLiteral<"">
@@ -395,7 +401,7 @@ declare const CCv3DataSchema: z.ZodObject<{
395
401
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
396
402
  content: z.ZodString;
397
403
  enabled: z.ZodDefault<z.ZodBoolean>;
398
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
404
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
399
405
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
400
406
  name: z.ZodOptional<z.ZodString>;
401
407
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -407,7 +413,8 @@ declare const CCv3DataSchema: z.ZodObject<{
407
413
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
408
414
  z.ZodEnum<[
409
415
  "before_char",
410
- "after_char"
416
+ "after_char",
417
+ "in_chat"
411
418
  ]>,
412
419
  z.ZodNumber,
413
420
  z.ZodLiteral<"">
@@ -480,7 +487,7 @@ declare const CCv3DataSchema: z.ZodObject<{
480
487
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
481
488
  content: z.ZodString;
482
489
  enabled: z.ZodDefault<z.ZodBoolean>;
483
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
490
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
484
491
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
485
492
  name: z.ZodOptional<z.ZodString>;
486
493
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -492,7 +499,8 @@ declare const CCv3DataSchema: z.ZodObject<{
492
499
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
493
500
  z.ZodEnum<[
494
501
  "before_char",
495
- "after_char"
502
+ "after_char",
503
+ "in_chat"
496
504
  ]>,
497
505
  z.ZodNumber,
498
506
  z.ZodLiteral<"">
@@ -559,7 +567,7 @@ declare const CCv3DataSchema: z.ZodObject<{
559
567
  keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
560
568
  content: z.ZodString;
561
569
  enabled: z.ZodDefault<z.ZodBoolean>;
562
- insertion_order: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
570
+ insertion_order: z.ZodEffects<z.ZodNumber, number, unknown>;
563
571
  case_sensitive: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
564
572
  name: z.ZodOptional<z.ZodString>;
565
573
  priority: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -571,7 +579,8 @@ declare const CCv3DataSchema: z.ZodObject<{
571
579
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
572
580
  z.ZodEnum<[
573
581
  "before_char",
574
- "after_char"
582
+ "after_char",
583
+ "in_chat"
575
584
  ]>,
576
585
  z.ZodNumber,
577
586
  z.ZodLiteral<"">
package/dist/exporter.js CHANGED
@@ -233,7 +233,7 @@ var CCv2LorebookEntrySchema = z2.object({
233
233
  content: z2.string(),
234
234
  enabled: z2.boolean().default(true),
235
235
  // Default to enabled if missing
236
- insertion_order: z2.number().int().nullable().default(0),
236
+ insertion_order: z2.preprocess((v) => v ?? 0, z2.number().int()),
237
237
  // Optional fields - be lenient with nulls since wild data has them
238
238
  extensions: z2.record(z2.unknown()).optional(),
239
239
  case_sensitive: z2.boolean().nullable().optional(),
@@ -244,7 +244,7 @@ var CCv2LorebookEntrySchema = z2.object({
244
244
  selective: z2.boolean().nullable().optional(),
245
245
  secondary_keys: z2.array(z2.string()).nullable().optional(),
246
246
  constant: z2.boolean().nullable().optional(),
247
- position: z2.union([z2.enum(["before_char", "after_char"]), z2.number().int(), z2.literal("")]).nullable().optional()
247
+ position: z2.union([z2.enum(["before_char", "after_char", "in_chat"]), z2.number().int(), z2.literal("")]).nullable().optional()
248
248
  }).passthrough();
249
249
  var CCv2CharacterBookSchema = z2.object({
250
250
  name: z2.string().optional(),
@@ -287,7 +287,7 @@ var CCv3LorebookEntrySchema = z3.object({
287
287
  content: z3.string(),
288
288
  enabled: z3.boolean().default(true),
289
289
  // Default to enabled if missing
290
- insertion_order: z3.number().int().nullable().default(0),
290
+ insertion_order: z3.preprocess((v) => v ?? 0, z3.number().int()),
291
291
  // Optional fields - be lenient with nulls since wild data has them
292
292
  case_sensitive: z3.boolean().nullable().optional(),
293
293
  name: z3.string().optional(),
@@ -297,7 +297,7 @@ var CCv3LorebookEntrySchema = z3.object({
297
297
  selective: z3.boolean().nullable().optional(),
298
298
  secondary_keys: z3.array(z3.string()).nullable().optional(),
299
299
  constant: z3.boolean().nullable().optional(),
300
- position: z3.union([z3.enum(["before_char", "after_char"]), z3.number().int(), z3.literal("")]).nullable().optional(),
300
+ position: z3.union([z3.enum(["before_char", "after_char", "in_chat"]), z3.number().int(), z3.literal("")]).nullable().optional(),
301
301
  extensions: z3.record(z3.unknown()).optional(),
302
302
  // v3 specific - also lenient with types since SillyTavern uses numbers for enums
303
303
  automation_id: z3.string().optional(),
@@ -514,36 +514,6 @@ var SAFE_ASSET_TYPES = /* @__PURE__ */ new Set([
514
514
  "data",
515
515
  "unknown"
516
516
  ]);
517
- var SAFE_EXTENSIONS = /* @__PURE__ */ new Set([
518
- // Images
519
- "png",
520
- "jpg",
521
- "jpeg",
522
- "webp",
523
- "gif",
524
- "avif",
525
- "svg",
526
- "bmp",
527
- "ico",
528
- // Audio
529
- "mp3",
530
- "wav",
531
- "ogg",
532
- "flac",
533
- "m4a",
534
- "aac",
535
- "opus",
536
- // Video
537
- "mp4",
538
- "webm",
539
- "avi",
540
- "mov",
541
- "mkv",
542
- // Data
543
- "json",
544
- "txt",
545
- "bin"
546
- ]);
547
517
  function getCharxCategory(mimetype) {
548
518
  if (mimetype.startsWith("image/")) return "images";
549
519
  if (mimetype.startsWith("audio/")) return "audio";
@@ -559,11 +529,20 @@ function sanitizeAssetType(type) {
559
529
  return sanitized || "custom";
560
530
  }
561
531
  function sanitizeExtension(ext) {
562
- const normalized = ext.replace(/^\./, "").toLowerCase().replace(/[^a-z0-9]/g, "");
563
- if (SAFE_EXTENSIONS.has(normalized)) {
564
- return normalized;
532
+ const normalized = ext.trim().replace(/^\./, "").toLowerCase();
533
+ if (!normalized) {
534
+ throw new Error("Invalid asset extension: empty extension");
535
+ }
536
+ if (normalized.length > 64) {
537
+ throw new Error(`Invalid asset extension: too long (${normalized.length} chars)`);
538
+ }
539
+ if (normalized.includes("/") || normalized.includes("\\") || normalized.includes("\0")) {
540
+ throw new Error("Invalid asset extension: path separators are not allowed");
541
+ }
542
+ if (!/^[a-z0-9][a-z0-9._-]*$/.test(normalized)) {
543
+ throw new Error(`Invalid asset extension: "${ext}"`);
565
544
  }
566
- return "bin";
545
+ return normalized;
567
546
  }
568
547
  function sanitizeName(name, ext) {
569
548
  let safeName = name;
@@ -7014,6 +6993,22 @@ function sanitizeName2(name, ext) {
7014
6993
  if (!safeName) safeName = "asset";
7015
6994
  return safeName;
7016
6995
  }
6996
+ function sanitizeExtension2(ext) {
6997
+ const normalized = ext.trim().replace(/^\./, "").toLowerCase();
6998
+ if (!normalized) {
6999
+ throw new Error("Invalid asset extension: empty extension");
7000
+ }
7001
+ if (normalized.length > 64) {
7002
+ throw new Error(`Invalid asset extension: too long (${normalized.length} chars)`);
7003
+ }
7004
+ if (normalized.includes("/") || normalized.includes("\\") || normalized.includes("\0")) {
7005
+ throw new Error("Invalid asset extension: path separators are not allowed");
7006
+ }
7007
+ if (!/^[a-z0-9][a-z0-9._-]*$/.test(normalized)) {
7008
+ throw new Error(`Invalid asset extension: "${ext}"`);
7009
+ }
7010
+ return normalized;
7011
+ }
7017
7012
  function writeVoxta(card, assets, options = {}) {
7018
7013
  const { compressionLevel = 6, includePackageJson = false } = options;
7019
7014
  const cardData = card.data;
@@ -7102,8 +7097,9 @@ function writeVoxta(card, assets, options = {}) {
7102
7097
  let assetCount = 0;
7103
7098
  let mainThumbnail;
7104
7099
  for (const asset of assets) {
7105
- const safeName = sanitizeName2(asset.name, asset.ext);
7106
- const finalFilename = `${safeName}.${asset.ext}`;
7100
+ const safeExt = sanitizeExtension2(asset.ext);
7101
+ const safeName = sanitizeName2(asset.name, safeExt);
7102
+ const finalFilename = `${safeName}.${safeExt}`;
7107
7103
  let voxtaPath = "";
7108
7104
  const tags = asset.tags || [];
7109
7105
  const isMainIcon = asset.type === "icon" && (tags.includes("portrait-override") || asset.name === "main" || asset.isMain);