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

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 +36 -15
  2. package/dist/charx.cjs.map +1 -1
  3. package/dist/charx.d.cts +9 -18
  4. package/dist/charx.d.ts +9 -18
  5. package/dist/charx.js +36 -15
  6. package/dist/charx.js.map +1 -1
  7. package/dist/exporter.cjs +38 -34
  8. package/dist/exporter.cjs.map +1 -1
  9. package/dist/exporter.d.cts +9 -18
  10. package/dist/exporter.d.ts +9 -18
  11. package/dist/exporter.js +38 -34
  12. package/dist/exporter.js.map +1 -1
  13. package/dist/federation.cjs +36 -104
  14. package/dist/federation.cjs.map +1 -1
  15. package/dist/federation.d.cts +9 -53
  16. package/dist/federation.d.ts +9 -53
  17. package/dist/federation.js +36 -104
  18. package/dist/federation.js.map +1 -1
  19. package/dist/index.cjs +38 -34
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.cts +21 -42
  22. package/dist/index.d.ts +21 -42
  23. package/dist/index.js +38 -34
  24. package/dist/index.js.map +1 -1
  25. package/dist/loader.cjs +15 -101
  26. package/dist/loader.cjs.map +1 -1
  27. package/dist/loader.d.cts +14 -42
  28. package/dist/loader.d.ts +14 -42
  29. package/dist/loader.js +15 -101
  30. package/dist/loader.js.map +1 -1
  31. package/dist/lorebook.d.cts +17 -34
  32. package/dist/lorebook.d.ts +17 -34
  33. package/dist/normalizer.cjs +2 -2
  34. package/dist/normalizer.cjs.map +1 -1
  35. package/dist/normalizer.d.cts +30 -60
  36. package/dist/normalizer.d.ts +30 -60
  37. package/dist/normalizer.js +2 -2
  38. package/dist/normalizer.js.map +1 -1
  39. package/dist/png.cjs +2 -2
  40. package/dist/png.cjs.map +1 -1
  41. package/dist/png.d.cts +16 -32
  42. package/dist/png.d.ts +16 -32
  43. package/dist/png.js +2 -2
  44. package/dist/png.js.map +1 -1
  45. package/dist/schemas.cjs +7 -7
  46. package/dist/schemas.cjs.map +1 -1
  47. package/dist/schemas.d.cts +48 -96
  48. package/dist/schemas.d.ts +48 -96
  49. package/dist/schemas.js +7 -7
  50. package/dist/schemas.js.map +1 -1
  51. package/dist/voxta.cjs +4 -21
  52. package/dist/voxta.cjs.map +1 -1
  53. package/dist/voxta.d.cts +14 -28
  54. package/dist/voxta.d.ts +14 -28
  55. package/dist/voxta.js +4 -21
  56. package/dist/voxta.js.map +1 -1
  57. package/package.json +6 -6
@@ -51,8 +51,7 @@ 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",
55
- "in_chat"
54
+ "after_char"
56
55
  ]>,
57
56
  z.ZodNumber,
58
57
  z.ZodLiteral<"">
@@ -95,8 +94,7 @@ declare const CCv3DataSchema: z.ZodObject<{
95
94
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
96
95
  z.ZodEnum<[
97
96
  "before_char",
98
- "after_char",
99
- "in_chat"
97
+ "after_char"
100
98
  ]>,
101
99
  z.ZodNumber,
102
100
  z.ZodLiteral<"">
@@ -139,8 +137,7 @@ declare const CCv3DataSchema: z.ZodObject<{
139
137
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
140
138
  z.ZodEnum<[
141
139
  "before_char",
142
- "after_char",
143
- "in_chat"
140
+ "after_char"
144
141
  ]>,
145
142
  z.ZodNumber,
146
143
  z.ZodLiteral<"">
@@ -185,8 +182,7 @@ declare const CCv3DataSchema: z.ZodObject<{
185
182
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
186
183
  z.ZodEnum<[
187
184
  "before_char",
188
- "after_char",
189
- "in_chat"
185
+ "after_char"
190
186
  ]>,
191
187
  z.ZodNumber,
192
188
  z.ZodLiteral<"">
@@ -237,8 +233,7 @@ declare const CCv3DataSchema: z.ZodObject<{
237
233
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
238
234
  z.ZodEnum<[
239
235
  "before_char",
240
- "after_char",
241
- "in_chat"
236
+ "after_char"
242
237
  ]>,
243
238
  z.ZodNumber,
244
239
  z.ZodLiteral<"">
@@ -337,8 +332,7 @@ declare const CCv3DataSchema: z.ZodObject<{
337
332
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
338
333
  z.ZodEnum<[
339
334
  "before_char",
340
- "after_char",
341
- "in_chat"
335
+ "after_char"
342
336
  ]>,
343
337
  z.ZodNumber,
344
338
  z.ZodLiteral<"">
@@ -413,8 +407,7 @@ declare const CCv3DataSchema: z.ZodObject<{
413
407
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
414
408
  z.ZodEnum<[
415
409
  "before_char",
416
- "after_char",
417
- "in_chat"
410
+ "after_char"
418
411
  ]>,
419
412
  z.ZodNumber,
420
413
  z.ZodLiteral<"">
@@ -499,8 +492,7 @@ declare const CCv3DataSchema: z.ZodObject<{
499
492
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
500
493
  z.ZodEnum<[
501
494
  "before_char",
502
- "after_char",
503
- "in_chat"
495
+ "after_char"
504
496
  ]>,
505
497
  z.ZodNumber,
506
498
  z.ZodLiteral<"">
@@ -579,8 +571,7 @@ declare const CCv3DataSchema: z.ZodObject<{
579
571
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
580
572
  z.ZodEnum<[
581
573
  "before_char",
582
- "after_char",
583
- "in_chat"
574
+ "after_char"
584
575
  ]>,
585
576
  z.ZodNumber,
586
577
  z.ZodLiteral<"">
@@ -51,8 +51,7 @@ 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",
55
- "in_chat"
54
+ "after_char"
56
55
  ]>,
57
56
  z.ZodNumber,
58
57
  z.ZodLiteral<"">
@@ -95,8 +94,7 @@ declare const CCv3DataSchema: z.ZodObject<{
95
94
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
96
95
  z.ZodEnum<[
97
96
  "before_char",
98
- "after_char",
99
- "in_chat"
97
+ "after_char"
100
98
  ]>,
101
99
  z.ZodNumber,
102
100
  z.ZodLiteral<"">
@@ -139,8 +137,7 @@ declare const CCv3DataSchema: z.ZodObject<{
139
137
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
140
138
  z.ZodEnum<[
141
139
  "before_char",
142
- "after_char",
143
- "in_chat"
140
+ "after_char"
144
141
  ]>,
145
142
  z.ZodNumber,
146
143
  z.ZodLiteral<"">
@@ -185,8 +182,7 @@ declare const CCv3DataSchema: z.ZodObject<{
185
182
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
186
183
  z.ZodEnum<[
187
184
  "before_char",
188
- "after_char",
189
- "in_chat"
185
+ "after_char"
190
186
  ]>,
191
187
  z.ZodNumber,
192
188
  z.ZodLiteral<"">
@@ -237,8 +233,7 @@ declare const CCv3DataSchema: z.ZodObject<{
237
233
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
238
234
  z.ZodEnum<[
239
235
  "before_char",
240
- "after_char",
241
- "in_chat"
236
+ "after_char"
242
237
  ]>,
243
238
  z.ZodNumber,
244
239
  z.ZodLiteral<"">
@@ -337,8 +332,7 @@ declare const CCv3DataSchema: z.ZodObject<{
337
332
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
338
333
  z.ZodEnum<[
339
334
  "before_char",
340
- "after_char",
341
- "in_chat"
335
+ "after_char"
342
336
  ]>,
343
337
  z.ZodNumber,
344
338
  z.ZodLiteral<"">
@@ -413,8 +407,7 @@ declare const CCv3DataSchema: z.ZodObject<{
413
407
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
414
408
  z.ZodEnum<[
415
409
  "before_char",
416
- "after_char",
417
- "in_chat"
410
+ "after_char"
418
411
  ]>,
419
412
  z.ZodNumber,
420
413
  z.ZodLiteral<"">
@@ -499,8 +492,7 @@ declare const CCv3DataSchema: z.ZodObject<{
499
492
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
500
493
  z.ZodEnum<[
501
494
  "before_char",
502
- "after_char",
503
- "in_chat"
495
+ "after_char"
504
496
  ]>,
505
497
  z.ZodNumber,
506
498
  z.ZodLiteral<"">
@@ -579,8 +571,7 @@ declare const CCv3DataSchema: z.ZodObject<{
579
571
  position: z.ZodOptional<z.ZodNullable<z.ZodUnion<[
580
572
  z.ZodEnum<[
581
573
  "before_char",
582
- "after_char",
583
- "in_chat"
574
+ "after_char"
584
575
  ]>,
585
576
  z.ZodNumber,
586
577
  z.ZodLiteral<"">
package/dist/exporter.js CHANGED
@@ -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", "in_chat"]), z2.number().int(), z2.literal("")]).nullable().optional()
247
+ position: z2.union([z2.enum(["before_char", "after_char"]), z2.number().int(), z2.literal("")]).nullable().optional()
248
248
  }).passthrough();
249
249
  var CCv2CharacterBookSchema = z2.object({
250
250
  name: z2.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", "in_chat"]), z3.number().int(), z3.literal("")]).nullable().optional(),
300
+ position: z3.union([z3.enum(["before_char", "after_char"]), 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,6 +514,36 @@ 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
+ ]);
517
547
  function getCharxCategory(mimetype) {
518
548
  if (mimetype.startsWith("image/")) return "images";
519
549
  if (mimetype.startsWith("audio/")) return "audio";
@@ -529,20 +559,11 @@ function sanitizeAssetType(type) {
529
559
  return sanitized || "custom";
530
560
  }
531
561
  function sanitizeExtension(ext) {
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}"`);
562
+ const normalized = ext.replace(/^\./, "").toLowerCase().replace(/[^a-z0-9]/g, "");
563
+ if (SAFE_EXTENSIONS.has(normalized)) {
564
+ return normalized;
544
565
  }
545
- return normalized;
566
+ return "bin";
546
567
  }
547
568
  function sanitizeName(name, ext) {
548
569
  let safeName = name;
@@ -6993,22 +7014,6 @@ function sanitizeName2(name, ext) {
6993
7014
  if (!safeName) safeName = "asset";
6994
7015
  return safeName;
6995
7016
  }
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
- }
7012
7017
  function writeVoxta(card, assets, options = {}) {
7013
7018
  const { compressionLevel = 6, includePackageJson = false } = options;
7014
7019
  const cardData = card.data;
@@ -7097,9 +7102,8 @@ function writeVoxta(card, assets, options = {}) {
7097
7102
  let assetCount = 0;
7098
7103
  let mainThumbnail;
7099
7104
  for (const asset of assets) {
7100
- const safeExt = sanitizeExtension2(asset.ext);
7101
- const safeName = sanitizeName2(asset.name, safeExt);
7102
- const finalFilename = `${safeName}.${safeExt}`;
7105
+ const safeName = sanitizeName2(asset.name, asset.ext);
7106
+ const finalFilename = `${safeName}.${asset.ext}`;
7103
7107
  let voxtaPath = "";
7104
7108
  const tags = asset.tags || [];
7105
7109
  const isMainIcon = asset.type === "icon" && (tags.includes("portrait-override") || asset.name === "main" || asset.isMain);