@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/png.js CHANGED
@@ -135,6 +135,58 @@ import { z } from "zod";
135
135
  import { z as z2 } from "zod";
136
136
  import { z as z3 } from "zod";
137
137
  import "zod";
138
+ function preprocessTimestamp(val) {
139
+ if (val === null || val === void 0) return void 0;
140
+ let num;
141
+ if (typeof val === "number") {
142
+ num = val;
143
+ } else if (typeof val === "string") {
144
+ const trimmed = val.trim();
145
+ if (!trimmed) return void 0;
146
+ const parsed = Number(trimmed);
147
+ if (!isNaN(parsed)) {
148
+ num = parsed;
149
+ } else {
150
+ const date = new Date(trimmed);
151
+ if (isNaN(date.getTime())) return void 0;
152
+ num = Math.floor(date.getTime() / 1e3);
153
+ }
154
+ } else {
155
+ return void 0;
156
+ }
157
+ if (num > 1e10) {
158
+ num = Math.floor(num / 1e3);
159
+ }
160
+ if (num < 0) return void 0;
161
+ return num;
162
+ }
163
+ function preprocessNumeric(val) {
164
+ if (val === null || val === void 0) return void 0;
165
+ if (typeof val === "number") {
166
+ return isNaN(val) ? void 0 : val;
167
+ }
168
+ if (typeof val === "string") {
169
+ const trimmed = val.trim();
170
+ if (!trimmed) return void 0;
171
+ const parsed = Number(trimmed);
172
+ return isNaN(parsed) ? void 0 : parsed;
173
+ }
174
+ return void 0;
175
+ }
176
+ var KNOWN_ASSET_TYPES = /* @__PURE__ */ new Set([
177
+ "icon",
178
+ "background",
179
+ "emotion",
180
+ "user_icon",
181
+ "sound",
182
+ "video",
183
+ "custom",
184
+ "x-risu-asset"
185
+ ]);
186
+ function preprocessAssetType(val) {
187
+ if (typeof val !== "string") return "custom";
188
+ return KNOWN_ASSET_TYPES.has(val) ? val : "custom";
189
+ }
138
190
  var ISO8601Schema = z.string().datetime();
139
191
  var UUIDSchema = z.string().uuid();
140
192
  var SpecSchema = z.enum(["v2", "v3"]);
@@ -157,16 +209,19 @@ var SourceFormatSchema = z.enum([
157
209
  // VoxPkg format
158
210
  ]);
159
211
  var OriginalShapeSchema = z.enum(["wrapped", "unwrapped", "legacy"]);
160
- var AssetTypeSchema = z.enum([
161
- "icon",
162
- "background",
163
- "emotion",
164
- "user_icon",
165
- "sound",
166
- "video",
167
- "custom",
168
- "x-risu-asset"
169
- ]);
212
+ var AssetTypeSchema = z.preprocess(
213
+ preprocessAssetType,
214
+ z.enum([
215
+ "icon",
216
+ "background",
217
+ "emotion",
218
+ "user_icon",
219
+ "sound",
220
+ "video",
221
+ "custom",
222
+ "x-risu-asset"
223
+ ])
224
+ );
170
225
  var AssetDescriptorSchema = z.object({
171
226
  type: AssetTypeSchema,
172
227
  uri: z.string(),
@@ -195,13 +250,13 @@ var CCv2LorebookEntrySchema = z2.object({
195
250
  selective: z2.boolean().nullable().optional(),
196
251
  secondary_keys: z2.array(z2.string()).nullable().optional(),
197
252
  constant: z2.boolean().nullable().optional(),
198
- position: z2.union([z2.enum(["before_char", "after_char"]), z2.number().int(), z2.literal("")]).nullable().optional()
253
+ position: z2.union([z2.enum(["before_char", "after_char", "in_chat"]), z2.number().int(), z2.literal("")]).nullable().optional()
199
254
  }).passthrough();
200
255
  var CCv2CharacterBookSchema = z2.object({
201
256
  name: z2.string().optional(),
202
257
  description: z2.string().optional(),
203
- scan_depth: z2.number().int().nonnegative().optional(),
204
- token_budget: z2.number().int().nonnegative().optional(),
258
+ scan_depth: z2.preprocess(preprocessNumeric, z2.number().int().nonnegative().optional()),
259
+ token_budget: z2.preprocess(preprocessNumeric, z2.number().int().nonnegative().optional()),
205
260
  recursive_scanning: z2.boolean().optional(),
206
261
  extensions: z2.record(z2.unknown()).optional(),
207
262
  entries: z2.array(CCv2LorebookEntrySchema)
@@ -248,7 +303,7 @@ var CCv3LorebookEntrySchema = z3.object({
248
303
  selective: z3.boolean().nullable().optional(),
249
304
  secondary_keys: z3.array(z3.string()).nullable().optional(),
250
305
  constant: z3.boolean().nullable().optional(),
251
- position: z3.union([z3.enum(["before_char", "after_char"]), z3.number().int(), z3.literal("")]).nullable().optional(),
306
+ position: z3.union([z3.enum(["before_char", "after_char", "in_chat"]), z3.number().int(), z3.literal("")]).nullable().optional(),
252
307
  extensions: z3.record(z3.unknown()).optional(),
253
308
  // v3 specific - also lenient with types since SillyTavern uses numbers for enums
254
309
  automation_id: z3.string().optional(),
@@ -264,8 +319,8 @@ var CCv3LorebookEntrySchema = z3.object({
264
319
  var CCv3CharacterBookSchema = z3.object({
265
320
  name: z3.string().optional(),
266
321
  description: z3.string().optional(),
267
- scan_depth: z3.number().int().nonnegative().optional(),
268
- token_budget: z3.number().int().nonnegative().optional(),
322
+ scan_depth: z3.preprocess(preprocessNumeric, z3.number().int().nonnegative().optional()),
323
+ token_budget: z3.preprocess(preprocessNumeric, z3.number().int().nonnegative().optional()),
269
324
  recursive_scanning: z3.boolean().optional(),
270
325
  extensions: z3.record(z3.unknown()).optional(),
271
326
  entries: z3.array(CCv3LorebookEntrySchema)
@@ -297,10 +352,9 @@ var CCv3DataInnerSchema = z3.object({
297
352
  nickname: z3.string().optional(),
298
353
  creator_notes_multilingual: z3.record(z3.string()).optional(),
299
354
  source: z3.array(z3.string()).optional(),
300
- creation_date: z3.number().int().nonnegative().optional(),
301
- // Unix timestamp in seconds
302
- modification_date: z3.number().int().nonnegative().optional()
303
- // Unix timestamp in seconds
355
+ // Unix timestamps - preprocess to handle ISO strings, numeric strings, milliseconds
356
+ creation_date: z3.preprocess(preprocessTimestamp, z3.number().int().nonnegative().optional()),
357
+ modification_date: z3.preprocess(preprocessTimestamp, z3.number().int().nonnegative().optional())
304
358
  });
305
359
  var CCv3DataSchema = z3.object({
306
360
  spec: z3.literal("chara_card_v3"),