@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
@@ -40,6 +40,58 @@ var import_zod = require("zod");
40
40
  var import_zod2 = require("zod");
41
41
  var import_zod3 = require("zod");
42
42
  var import_zod4 = require("zod");
43
+ function preprocessTimestamp(val) {
44
+ if (val === null || val === void 0) return void 0;
45
+ let num;
46
+ if (typeof val === "number") {
47
+ num = val;
48
+ } else if (typeof val === "string") {
49
+ const trimmed = val.trim();
50
+ if (!trimmed) return void 0;
51
+ const parsed = Number(trimmed);
52
+ if (!isNaN(parsed)) {
53
+ num = parsed;
54
+ } else {
55
+ const date = new Date(trimmed);
56
+ if (isNaN(date.getTime())) return void 0;
57
+ num = Math.floor(date.getTime() / 1e3);
58
+ }
59
+ } else {
60
+ return void 0;
61
+ }
62
+ if (num > 1e10) {
63
+ num = Math.floor(num / 1e3);
64
+ }
65
+ if (num < 0) return void 0;
66
+ return num;
67
+ }
68
+ function preprocessNumeric(val) {
69
+ if (val === null || val === void 0) return void 0;
70
+ if (typeof val === "number") {
71
+ return isNaN(val) ? void 0 : val;
72
+ }
73
+ if (typeof val === "string") {
74
+ const trimmed = val.trim();
75
+ if (!trimmed) return void 0;
76
+ const parsed = Number(trimmed);
77
+ return isNaN(parsed) ? void 0 : parsed;
78
+ }
79
+ return void 0;
80
+ }
81
+ var KNOWN_ASSET_TYPES = /* @__PURE__ */ new Set([
82
+ "icon",
83
+ "background",
84
+ "emotion",
85
+ "user_icon",
86
+ "sound",
87
+ "video",
88
+ "custom",
89
+ "x-risu-asset"
90
+ ]);
91
+ function preprocessAssetType(val) {
92
+ if (typeof val !== "string") return "custom";
93
+ return KNOWN_ASSET_TYPES.has(val) ? val : "custom";
94
+ }
43
95
  var ISO8601Schema = import_zod.z.string().datetime();
44
96
  var UUIDSchema = import_zod.z.string().uuid();
45
97
  var SpecSchema = import_zod.z.enum(["v2", "v3"]);
@@ -62,16 +114,19 @@ var SourceFormatSchema = import_zod.z.enum([
62
114
  // VoxPkg format
63
115
  ]);
64
116
  var OriginalShapeSchema = import_zod.z.enum(["wrapped", "unwrapped", "legacy"]);
65
- var AssetTypeSchema = import_zod.z.enum([
66
- "icon",
67
- "background",
68
- "emotion",
69
- "user_icon",
70
- "sound",
71
- "video",
72
- "custom",
73
- "x-risu-asset"
74
- ]);
117
+ var AssetTypeSchema = import_zod.z.preprocess(
118
+ preprocessAssetType,
119
+ import_zod.z.enum([
120
+ "icon",
121
+ "background",
122
+ "emotion",
123
+ "user_icon",
124
+ "sound",
125
+ "video",
126
+ "custom",
127
+ "x-risu-asset"
128
+ ])
129
+ );
75
130
  var AssetDescriptorSchema = import_zod.z.object({
76
131
  type: AssetTypeSchema,
77
132
  uri: import_zod.z.string(),
@@ -100,13 +155,13 @@ var CCv2LorebookEntrySchema = import_zod2.z.object({
100
155
  selective: import_zod2.z.boolean().nullable().optional(),
101
156
  secondary_keys: import_zod2.z.array(import_zod2.z.string()).nullable().optional(),
102
157
  constant: import_zod2.z.boolean().nullable().optional(),
103
- position: import_zod2.z.union([import_zod2.z.enum(["before_char", "after_char"]), import_zod2.z.number().int(), import_zod2.z.literal("")]).nullable().optional()
158
+ position: import_zod2.z.union([import_zod2.z.enum(["before_char", "after_char", "in_chat"]), import_zod2.z.number().int(), import_zod2.z.literal("")]).nullable().optional()
104
159
  }).passthrough();
105
160
  var CCv2CharacterBookSchema = import_zod2.z.object({
106
161
  name: import_zod2.z.string().optional(),
107
162
  description: import_zod2.z.string().optional(),
108
- scan_depth: import_zod2.z.number().int().nonnegative().optional(),
109
- token_budget: import_zod2.z.number().int().nonnegative().optional(),
163
+ scan_depth: import_zod2.z.preprocess(preprocessNumeric, import_zod2.z.number().int().nonnegative().optional()),
164
+ token_budget: import_zod2.z.preprocess(preprocessNumeric, import_zod2.z.number().int().nonnegative().optional()),
110
165
  recursive_scanning: import_zod2.z.boolean().optional(),
111
166
  extensions: import_zod2.z.record(import_zod2.z.unknown()).optional(),
112
167
  entries: import_zod2.z.array(CCv2LorebookEntrySchema)
@@ -167,7 +222,7 @@ var CCv3LorebookEntrySchema = import_zod3.z.object({
167
222
  selective: import_zod3.z.boolean().nullable().optional(),
168
223
  secondary_keys: import_zod3.z.array(import_zod3.z.string()).nullable().optional(),
169
224
  constant: import_zod3.z.boolean().nullable().optional(),
170
- position: import_zod3.z.union([import_zod3.z.enum(["before_char", "after_char"]), import_zod3.z.number().int(), import_zod3.z.literal("")]).nullable().optional(),
225
+ position: import_zod3.z.union([import_zod3.z.enum(["before_char", "after_char", "in_chat"]), import_zod3.z.number().int(), import_zod3.z.literal("")]).nullable().optional(),
171
226
  extensions: import_zod3.z.record(import_zod3.z.unknown()).optional(),
172
227
  // v3 specific - also lenient with types since SillyTavern uses numbers for enums
173
228
  automation_id: import_zod3.z.string().optional(),
@@ -183,8 +238,8 @@ var CCv3LorebookEntrySchema = import_zod3.z.object({
183
238
  var CCv3CharacterBookSchema = import_zod3.z.object({
184
239
  name: import_zod3.z.string().optional(),
185
240
  description: import_zod3.z.string().optional(),
186
- scan_depth: import_zod3.z.number().int().nonnegative().optional(),
187
- token_budget: import_zod3.z.number().int().nonnegative().optional(),
241
+ scan_depth: import_zod3.z.preprocess(preprocessNumeric, import_zod3.z.number().int().nonnegative().optional()),
242
+ token_budget: import_zod3.z.preprocess(preprocessNumeric, import_zod3.z.number().int().nonnegative().optional()),
188
243
  recursive_scanning: import_zod3.z.boolean().optional(),
189
244
  extensions: import_zod3.z.record(import_zod3.z.unknown()).optional(),
190
245
  entries: import_zod3.z.array(CCv3LorebookEntrySchema)
@@ -216,10 +271,9 @@ var CCv3DataInnerSchema = import_zod3.z.object({
216
271
  nickname: import_zod3.z.string().optional(),
217
272
  creator_notes_multilingual: import_zod3.z.record(import_zod3.z.string()).optional(),
218
273
  source: import_zod3.z.array(import_zod3.z.string()).optional(),
219
- creation_date: import_zod3.z.number().int().nonnegative().optional(),
220
- // Unix timestamp in seconds
221
- modification_date: import_zod3.z.number().int().nonnegative().optional()
222
- // Unix timestamp in seconds
274
+ // Unix timestamps - preprocess to handle ISO strings, numeric strings, milliseconds
275
+ creation_date: import_zod3.z.preprocess(preprocessTimestamp, import_zod3.z.number().int().nonnegative().optional()),
276
+ modification_date: import_zod3.z.preprocess(preprocessTimestamp, import_zod3.z.number().int().nonnegative().optional())
223
277
  });
224
278
  var CCv3DataSchema = import_zod3.z.object({
225
279
  spec: import_zod3.z.literal("chara_card_v3"),