@character-foundry/character-foundry 0.4.2 → 0.4.3-dev.1766103111

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 +87 -54
  2. package/dist/charx.cjs.map +1 -1
  3. package/dist/charx.d.cts +40 -31
  4. package/dist/charx.d.ts +40 -31
  5. package/dist/charx.js +87 -54
  6. package/dist/charx.js.map +1 -1
  7. package/dist/exporter.cjs +106 -56
  8. package/dist/exporter.cjs.map +1 -1
  9. package/dist/exporter.d.cts +37 -28
  10. package/dist/exporter.d.ts +37 -28
  11. package/dist/exporter.js +106 -56
  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 +72 -28
  16. package/dist/federation.d.ts +72 -28
  17. package/dist/federation.js +104 -36
  18. package/dist/federation.js.map +1 -1
  19. package/dist/index.cjs +106 -56
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.cts +71 -50
  22. package/dist/index.d.ts +71 -50
  23. package/dist/index.js +106 -56
  24. package/dist/index.js.map +1 -1
  25. package/dist/loader.cjs +173 -33
  26. package/dist/loader.cjs.map +1 -1
  27. package/dist/loader.d.cts +65 -37
  28. package/dist/loader.d.ts +65 -37
  29. package/dist/loader.js +173 -33
  30. package/dist/loader.js.map +1 -1
  31. package/dist/lorebook.d.cts +57 -40
  32. package/dist/lorebook.d.ts +57 -40
  33. package/dist/normalizer.cjs +74 -20
  34. package/dist/normalizer.cjs.map +1 -1
  35. package/dist/normalizer.d.cts +97 -67
  36. package/dist/normalizer.d.ts +97 -67
  37. package/dist/normalizer.js +74 -20
  38. package/dist/normalizer.js.map +1 -1
  39. package/dist/png.cjs +74 -20
  40. package/dist/png.cjs.map +1 -1
  41. package/dist/png.d.cts +57 -41
  42. package/dist/png.d.ts +57 -41
  43. package/dist/png.js +74 -20
  44. package/dist/png.js.map +1 -1
  45. package/dist/schemas.cjs +82 -25
  46. package/dist/schemas.cjs.map +1 -1
  47. package/dist/schemas.d.cts +181 -115
  48. package/dist/schemas.d.ts +181 -115
  49. package/dist/schemas.js +82 -25
  50. package/dist/schemas.js.map +1 -1
  51. package/dist/voxta.cjs +93 -22
  52. package/dist/voxta.cjs.map +1 -1
  53. package/dist/voxta.d.cts +51 -37
  54. package/dist/voxta.d.ts +51 -37
  55. package/dist/voxta.js +93 -22
  56. package/dist/voxta.js.map +1 -1
  57. package/package.json +5 -5
package/dist/charx.d.cts CHANGED
@@ -31,8 +31,8 @@ declare const CCv3DataSchema: z.ZodObject<{
31
31
  character_book: z.ZodNullable<z.ZodOptional<z.ZodObject<{
32
32
  name: z.ZodOptional<z.ZodString>;
33
33
  description: z.ZodOptional<z.ZodString>;
34
- scan_depth: z.ZodOptional<z.ZodNumber>;
35
- token_budget: z.ZodOptional<z.ZodNumber>;
34
+ scan_depth: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
35
+ token_budget: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
36
36
  recursive_scanning: z.ZodOptional<z.ZodBoolean>;
37
37
  extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
38
38
  entries: z.ZodArray<z.ZodObject<{
@@ -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<"">
@@ -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<"">
@@ -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<"">
@@ -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<"">
@@ -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<"">
@@ -263,14 +268,14 @@ declare const CCv3DataSchema: z.ZodObject<{
263
268
  }, z.ZodTypeAny, "passthrough">[];
264
269
  name?: string | undefined;
265
270
  description?: string | undefined;
266
- scan_depth?: number | undefined;
267
- token_budget?: number | undefined;
271
+ scan_depth?: unknown;
272
+ token_budget?: unknown;
268
273
  recursive_scanning?: boolean | undefined;
269
274
  extensions?: Record<string, unknown> | undefined;
270
275
  }>>>;
271
276
  extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
272
277
  assets: z.ZodOptional<z.ZodArray<z.ZodObject<{
273
- type: z.ZodEnum<[
278
+ type: z.ZodEffects<z.ZodEnum<[
274
279
  "icon",
275
280
  "background",
276
281
  "emotion",
@@ -279,7 +284,7 @@ declare const CCv3DataSchema: z.ZodObject<{
279
284
  "video",
280
285
  "custom",
281
286
  "x-risu-asset"
282
- ]>;
287
+ ]>, "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset", unknown>;
283
288
  uri: z.ZodString;
284
289
  name: z.ZodString;
285
290
  ext: z.ZodString;
@@ -290,15 +295,15 @@ declare const CCv3DataSchema: z.ZodObject<{
290
295
  ext: string;
291
296
  }, {
292
297
  name: string;
293
- type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
294
298
  uri: string;
295
299
  ext: string;
300
+ type?: unknown;
296
301
  }>, "many">>;
297
302
  nickname: z.ZodOptional<z.ZodString>;
298
303
  creator_notes_multilingual: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
299
304
  source: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
300
- creation_date: z.ZodOptional<z.ZodNumber>;
301
- modification_date: z.ZodOptional<z.ZodNumber>;
305
+ creation_date: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
306
+ modification_date: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
302
307
  }, "strip", z.ZodTypeAny, {
303
308
  name: string;
304
309
  description: string;
@@ -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<"">
@@ -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<"">
@@ -437,8 +444,8 @@ declare const CCv3DataSchema: z.ZodObject<{
437
444
  }, z.ZodTypeAny, "passthrough">[];
438
445
  name?: string | undefined;
439
446
  description?: string | undefined;
440
- scan_depth?: number | undefined;
441
- token_budget?: number | undefined;
447
+ scan_depth?: unknown;
448
+ token_budget?: unknown;
442
449
  recursive_scanning?: boolean | undefined;
443
450
  extensions?: Record<string, unknown> | undefined;
444
451
  } | null | undefined;
@@ -448,15 +455,15 @@ declare const CCv3DataSchema: z.ZodObject<{
448
455
  group_only_greetings?: string[] | undefined;
449
456
  assets?: {
450
457
  name: string;
451
- type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
452
458
  uri: string;
453
459
  ext: string;
460
+ type?: unknown;
454
461
  }[] | undefined;
455
462
  nickname?: string | undefined;
456
463
  creator_notes_multilingual?: Record<string, string> | undefined;
457
464
  source?: string[] | undefined;
458
- creation_date?: number | undefined;
459
- modification_date?: number | undefined;
465
+ creation_date?: unknown;
466
+ modification_date?: unknown;
460
467
  }>;
461
468
  }, "strip", z.ZodTypeAny, {
462
469
  data: {
@@ -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<"">
@@ -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<"">
@@ -601,8 +610,8 @@ declare const CCv3DataSchema: z.ZodObject<{
601
610
  }, z.ZodTypeAny, "passthrough">[];
602
611
  name?: string | undefined;
603
612
  description?: string | undefined;
604
- scan_depth?: number | undefined;
605
- token_budget?: number | undefined;
613
+ scan_depth?: unknown;
614
+ token_budget?: unknown;
606
615
  recursive_scanning?: boolean | undefined;
607
616
  extensions?: Record<string, unknown> | undefined;
608
617
  } | null | undefined;
@@ -612,15 +621,15 @@ declare const CCv3DataSchema: z.ZodObject<{
612
621
  group_only_greetings?: string[] | undefined;
613
622
  assets?: {
614
623
  name: string;
615
- type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
616
624
  uri: string;
617
625
  ext: string;
626
+ type?: unknown;
618
627
  }[] | undefined;
619
628
  nickname?: string | undefined;
620
629
  creator_notes_multilingual?: Record<string, string> | undefined;
621
630
  source?: string[] | undefined;
622
- creation_date?: number | undefined;
623
- modification_date?: number | undefined;
631
+ creation_date?: unknown;
632
+ modification_date?: unknown;
624
633
  };
625
634
  spec: "chara_card_v3";
626
635
  spec_version: "3.0";
@@ -630,7 +639,7 @@ declare const CCv3DataSchema: z.ZodObject<{
630
639
  */
631
640
  export type CCv3Data = z.infer<typeof CCv3DataSchema>;
632
641
  declare const AssetDescriptorSchema: z.ZodObject<{
633
- type: z.ZodEnum<[
642
+ type: z.ZodEffects<z.ZodEnum<[
634
643
  "icon",
635
644
  "background",
636
645
  "emotion",
@@ -639,7 +648,7 @@ declare const AssetDescriptorSchema: z.ZodObject<{
639
648
  "video",
640
649
  "custom",
641
650
  "x-risu-asset"
642
- ]>;
651
+ ]>, "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset", unknown>;
643
652
  uri: z.ZodString;
644
653
  name: z.ZodString;
645
654
  ext: z.ZodString;
@@ -650,9 +659,9 @@ declare const AssetDescriptorSchema: z.ZodObject<{
650
659
  ext: string;
651
660
  }, {
652
661
  name: string;
653
- type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
654
662
  uri: string;
655
663
  ext: string;
664
+ type?: unknown;
656
665
  }>;
657
666
  /**
658
667
  * Asset descriptor (v3 spec)
package/dist/charx.d.ts CHANGED
@@ -31,8 +31,8 @@ declare const CCv3DataSchema: z.ZodObject<{
31
31
  character_book: z.ZodNullable<z.ZodOptional<z.ZodObject<{
32
32
  name: z.ZodOptional<z.ZodString>;
33
33
  description: z.ZodOptional<z.ZodString>;
34
- scan_depth: z.ZodOptional<z.ZodNumber>;
35
- token_budget: z.ZodOptional<z.ZodNumber>;
34
+ scan_depth: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
35
+ token_budget: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
36
36
  recursive_scanning: z.ZodOptional<z.ZodBoolean>;
37
37
  extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
38
38
  entries: z.ZodArray<z.ZodObject<{
@@ -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<"">
@@ -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<"">
@@ -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<"">
@@ -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<"">
@@ -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<"">
@@ -263,14 +268,14 @@ declare const CCv3DataSchema: z.ZodObject<{
263
268
  }, z.ZodTypeAny, "passthrough">[];
264
269
  name?: string | undefined;
265
270
  description?: string | undefined;
266
- scan_depth?: number | undefined;
267
- token_budget?: number | undefined;
271
+ scan_depth?: unknown;
272
+ token_budget?: unknown;
268
273
  recursive_scanning?: boolean | undefined;
269
274
  extensions?: Record<string, unknown> | undefined;
270
275
  }>>>;
271
276
  extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
272
277
  assets: z.ZodOptional<z.ZodArray<z.ZodObject<{
273
- type: z.ZodEnum<[
278
+ type: z.ZodEffects<z.ZodEnum<[
274
279
  "icon",
275
280
  "background",
276
281
  "emotion",
@@ -279,7 +284,7 @@ declare const CCv3DataSchema: z.ZodObject<{
279
284
  "video",
280
285
  "custom",
281
286
  "x-risu-asset"
282
- ]>;
287
+ ]>, "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset", unknown>;
283
288
  uri: z.ZodString;
284
289
  name: z.ZodString;
285
290
  ext: z.ZodString;
@@ -290,15 +295,15 @@ declare const CCv3DataSchema: z.ZodObject<{
290
295
  ext: string;
291
296
  }, {
292
297
  name: string;
293
- type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
294
298
  uri: string;
295
299
  ext: string;
300
+ type?: unknown;
296
301
  }>, "many">>;
297
302
  nickname: z.ZodOptional<z.ZodString>;
298
303
  creator_notes_multilingual: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
299
304
  source: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
300
- creation_date: z.ZodOptional<z.ZodNumber>;
301
- modification_date: z.ZodOptional<z.ZodNumber>;
305
+ creation_date: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
306
+ modification_date: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
302
307
  }, "strip", z.ZodTypeAny, {
303
308
  name: string;
304
309
  description: string;
@@ -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<"">
@@ -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<"">
@@ -437,8 +444,8 @@ declare const CCv3DataSchema: z.ZodObject<{
437
444
  }, z.ZodTypeAny, "passthrough">[];
438
445
  name?: string | undefined;
439
446
  description?: string | undefined;
440
- scan_depth?: number | undefined;
441
- token_budget?: number | undefined;
447
+ scan_depth?: unknown;
448
+ token_budget?: unknown;
442
449
  recursive_scanning?: boolean | undefined;
443
450
  extensions?: Record<string, unknown> | undefined;
444
451
  } | null | undefined;
@@ -448,15 +455,15 @@ declare const CCv3DataSchema: z.ZodObject<{
448
455
  group_only_greetings?: string[] | undefined;
449
456
  assets?: {
450
457
  name: string;
451
- type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
452
458
  uri: string;
453
459
  ext: string;
460
+ type?: unknown;
454
461
  }[] | undefined;
455
462
  nickname?: string | undefined;
456
463
  creator_notes_multilingual?: Record<string, string> | undefined;
457
464
  source?: string[] | undefined;
458
- creation_date?: number | undefined;
459
- modification_date?: number | undefined;
465
+ creation_date?: unknown;
466
+ modification_date?: unknown;
460
467
  }>;
461
468
  }, "strip", z.ZodTypeAny, {
462
469
  data: {
@@ -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<"">
@@ -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<"">
@@ -601,8 +610,8 @@ declare const CCv3DataSchema: z.ZodObject<{
601
610
  }, z.ZodTypeAny, "passthrough">[];
602
611
  name?: string | undefined;
603
612
  description?: string | undefined;
604
- scan_depth?: number | undefined;
605
- token_budget?: number | undefined;
613
+ scan_depth?: unknown;
614
+ token_budget?: unknown;
606
615
  recursive_scanning?: boolean | undefined;
607
616
  extensions?: Record<string, unknown> | undefined;
608
617
  } | null | undefined;
@@ -612,15 +621,15 @@ declare const CCv3DataSchema: z.ZodObject<{
612
621
  group_only_greetings?: string[] | undefined;
613
622
  assets?: {
614
623
  name: string;
615
- type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
616
624
  uri: string;
617
625
  ext: string;
626
+ type?: unknown;
618
627
  }[] | undefined;
619
628
  nickname?: string | undefined;
620
629
  creator_notes_multilingual?: Record<string, string> | undefined;
621
630
  source?: string[] | undefined;
622
- creation_date?: number | undefined;
623
- modification_date?: number | undefined;
631
+ creation_date?: unknown;
632
+ modification_date?: unknown;
624
633
  };
625
634
  spec: "chara_card_v3";
626
635
  spec_version: "3.0";
@@ -630,7 +639,7 @@ declare const CCv3DataSchema: z.ZodObject<{
630
639
  */
631
640
  export type CCv3Data = z.infer<typeof CCv3DataSchema>;
632
641
  declare const AssetDescriptorSchema: z.ZodObject<{
633
- type: z.ZodEnum<[
642
+ type: z.ZodEffects<z.ZodEnum<[
634
643
  "icon",
635
644
  "background",
636
645
  "emotion",
@@ -639,7 +648,7 @@ declare const AssetDescriptorSchema: z.ZodObject<{
639
648
  "video",
640
649
  "custom",
641
650
  "x-risu-asset"
642
- ]>;
651
+ ]>, "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset", unknown>;
643
652
  uri: z.ZodString;
644
653
  name: z.ZodString;
645
654
  ext: z.ZodString;
@@ -650,9 +659,9 @@ declare const AssetDescriptorSchema: z.ZodObject<{
650
659
  ext: string;
651
660
  }, {
652
661
  name: string;
653
- type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
654
662
  uri: string;
655
663
  ext: string;
664
+ type?: unknown;
656
665
  }>;
657
666
  /**
658
667
  * Asset descriptor (v3 spec)
package/dist/charx.js CHANGED
@@ -408,6 +408,58 @@ import { z } from "zod";
408
408
  import { z as z2 } from "zod";
409
409
  import { z as z3 } from "zod";
410
410
  import "zod";
411
+ function preprocessTimestamp(val) {
412
+ if (val === null || val === void 0) return void 0;
413
+ let num;
414
+ if (typeof val === "number") {
415
+ num = val;
416
+ } else if (typeof val === "string") {
417
+ const trimmed = val.trim();
418
+ if (!trimmed) return void 0;
419
+ const parsed = Number(trimmed);
420
+ if (!isNaN(parsed)) {
421
+ num = parsed;
422
+ } else {
423
+ const date = new Date(trimmed);
424
+ if (isNaN(date.getTime())) return void 0;
425
+ num = Math.floor(date.getTime() / 1e3);
426
+ }
427
+ } else {
428
+ return void 0;
429
+ }
430
+ if (num > 1e10) {
431
+ num = Math.floor(num / 1e3);
432
+ }
433
+ if (num < 0) return void 0;
434
+ return num;
435
+ }
436
+ function preprocessNumeric(val) {
437
+ if (val === null || val === void 0) return void 0;
438
+ if (typeof val === "number") {
439
+ return isNaN(val) ? void 0 : val;
440
+ }
441
+ if (typeof val === "string") {
442
+ const trimmed = val.trim();
443
+ if (!trimmed) return void 0;
444
+ const parsed = Number(trimmed);
445
+ return isNaN(parsed) ? void 0 : parsed;
446
+ }
447
+ return void 0;
448
+ }
449
+ var KNOWN_ASSET_TYPES = /* @__PURE__ */ new Set([
450
+ "icon",
451
+ "background",
452
+ "emotion",
453
+ "user_icon",
454
+ "sound",
455
+ "video",
456
+ "custom",
457
+ "x-risu-asset"
458
+ ]);
459
+ function preprocessAssetType(val) {
460
+ if (typeof val !== "string") return "custom";
461
+ return KNOWN_ASSET_TYPES.has(val) ? val : "custom";
462
+ }
411
463
  var ISO8601Schema = z.string().datetime();
412
464
  var UUIDSchema = z.string().uuid();
413
465
  var SpecSchema = z.enum(["v2", "v3"]);
@@ -430,16 +482,19 @@ var SourceFormatSchema = z.enum([
430
482
  // VoxPkg format
431
483
  ]);
432
484
  var OriginalShapeSchema = z.enum(["wrapped", "unwrapped", "legacy"]);
433
- var AssetTypeSchema = z.enum([
434
- "icon",
435
- "background",
436
- "emotion",
437
- "user_icon",
438
- "sound",
439
- "video",
440
- "custom",
441
- "x-risu-asset"
442
- ]);
485
+ var AssetTypeSchema = z.preprocess(
486
+ preprocessAssetType,
487
+ z.enum([
488
+ "icon",
489
+ "background",
490
+ "emotion",
491
+ "user_icon",
492
+ "sound",
493
+ "video",
494
+ "custom",
495
+ "x-risu-asset"
496
+ ])
497
+ );
443
498
  var AssetDescriptorSchema = z.object({
444
499
  type: AssetTypeSchema,
445
500
  uri: z.string(),
@@ -468,13 +523,13 @@ var CCv2LorebookEntrySchema = z2.object({
468
523
  selective: z2.boolean().nullable().optional(),
469
524
  secondary_keys: z2.array(z2.string()).nullable().optional(),
470
525
  constant: z2.boolean().nullable().optional(),
471
- position: z2.union([z2.enum(["before_char", "after_char"]), z2.number().int(), z2.literal("")]).nullable().optional()
526
+ position: z2.union([z2.enum(["before_char", "after_char", "in_chat"]), z2.number().int(), z2.literal("")]).nullable().optional()
472
527
  }).passthrough();
473
528
  var CCv2CharacterBookSchema = z2.object({
474
529
  name: z2.string().optional(),
475
530
  description: z2.string().optional(),
476
- scan_depth: z2.number().int().nonnegative().optional(),
477
- token_budget: z2.number().int().nonnegative().optional(),
531
+ scan_depth: z2.preprocess(preprocessNumeric, z2.number().int().nonnegative().optional()),
532
+ token_budget: z2.preprocess(preprocessNumeric, z2.number().int().nonnegative().optional()),
478
533
  recursive_scanning: z2.boolean().optional(),
479
534
  extensions: z2.record(z2.unknown()).optional(),
480
535
  entries: z2.array(CCv2LorebookEntrySchema)
@@ -521,7 +576,7 @@ var CCv3LorebookEntrySchema = z3.object({
521
576
  selective: z3.boolean().nullable().optional(),
522
577
  secondary_keys: z3.array(z3.string()).nullable().optional(),
523
578
  constant: z3.boolean().nullable().optional(),
524
- position: z3.union([z3.enum(["before_char", "after_char"]), z3.number().int(), z3.literal("")]).nullable().optional(),
579
+ position: z3.union([z3.enum(["before_char", "after_char", "in_chat"]), z3.number().int(), z3.literal("")]).nullable().optional(),
525
580
  extensions: z3.record(z3.unknown()).optional(),
526
581
  // v3 specific - also lenient with types since SillyTavern uses numbers for enums
527
582
  automation_id: z3.string().optional(),
@@ -537,8 +592,8 @@ var CCv3LorebookEntrySchema = z3.object({
537
592
  var CCv3CharacterBookSchema = z3.object({
538
593
  name: z3.string().optional(),
539
594
  description: z3.string().optional(),
540
- scan_depth: z3.number().int().nonnegative().optional(),
541
- token_budget: z3.number().int().nonnegative().optional(),
595
+ scan_depth: z3.preprocess(preprocessNumeric, z3.number().int().nonnegative().optional()),
596
+ token_budget: z3.preprocess(preprocessNumeric, z3.number().int().nonnegative().optional()),
542
597
  recursive_scanning: z3.boolean().optional(),
543
598
  extensions: z3.record(z3.unknown()).optional(),
544
599
  entries: z3.array(CCv3LorebookEntrySchema)
@@ -570,10 +625,9 @@ var CCv3DataInnerSchema = z3.object({
570
625
  nickname: z3.string().optional(),
571
626
  creator_notes_multilingual: z3.record(z3.string()).optional(),
572
627
  source: z3.array(z3.string()).optional(),
573
- creation_date: z3.number().int().nonnegative().optional(),
574
- // Unix timestamp in seconds
575
- modification_date: z3.number().int().nonnegative().optional()
576
- // Unix timestamp in seconds
628
+ // Unix timestamps - preprocess to handle ISO strings, numeric strings, milliseconds
629
+ creation_date: z3.preprocess(preprocessTimestamp, z3.number().int().nonnegative().optional()),
630
+ modification_date: z3.preprocess(preprocessTimestamp, z3.number().int().nonnegative().optional())
577
631
  });
578
632
  var CCv3DataSchema = z3.object({
579
633
  spec: z3.literal("chara_card_v3"),
@@ -836,36 +890,6 @@ var SAFE_ASSET_TYPES = /* @__PURE__ */ new Set([
836
890
  "data",
837
891
  "unknown"
838
892
  ]);
839
- var SAFE_EXTENSIONS = /* @__PURE__ */ new Set([
840
- // Images
841
- "png",
842
- "jpg",
843
- "jpeg",
844
- "webp",
845
- "gif",
846
- "avif",
847
- "svg",
848
- "bmp",
849
- "ico",
850
- // Audio
851
- "mp3",
852
- "wav",
853
- "ogg",
854
- "flac",
855
- "m4a",
856
- "aac",
857
- "opus",
858
- // Video
859
- "mp4",
860
- "webm",
861
- "avi",
862
- "mov",
863
- "mkv",
864
- // Data
865
- "json",
866
- "txt",
867
- "bin"
868
- ]);
869
893
  function getCharxCategory(mimetype) {
870
894
  if (mimetype.startsWith("image/")) return "images";
871
895
  if (mimetype.startsWith("audio/")) return "audio";
@@ -881,11 +905,20 @@ function sanitizeAssetType(type) {
881
905
  return sanitized || "custom";
882
906
  }
883
907
  function sanitizeExtension(ext) {
884
- const normalized = ext.replace(/^\./, "").toLowerCase().replace(/[^a-z0-9]/g, "");
885
- if (SAFE_EXTENSIONS.has(normalized)) {
886
- return normalized;
908
+ const normalized = ext.trim().replace(/^\./, "").toLowerCase();
909
+ if (!normalized) {
910
+ throw new Error("Invalid asset extension: empty extension");
911
+ }
912
+ if (normalized.length > 64) {
913
+ throw new Error(`Invalid asset extension: too long (${normalized.length} chars)`);
914
+ }
915
+ if (normalized.includes("/") || normalized.includes("\\") || normalized.includes("\0")) {
916
+ throw new Error("Invalid asset extension: path separators are not allowed");
917
+ }
918
+ if (!/^[a-z0-9][a-z0-9._-]*$/.test(normalized)) {
919
+ throw new Error(`Invalid asset extension: "${ext}"`);
887
920
  }
888
- return "bin";
921
+ return normalized;
889
922
  }
890
923
  function sanitizeName(name, ext) {
891
924
  let safeName = name;