@character-foundry/character-foundry 0.1.3 → 0.1.5

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 (100) hide show
  1. package/README.md +70 -0
  2. package/dist/app-framework.cjs +1742 -0
  3. package/dist/app-framework.cjs.map +1 -0
  4. package/dist/app-framework.d.cts +881 -0
  5. package/dist/app-framework.d.ts +881 -2
  6. package/dist/app-framework.js +1718 -1
  7. package/dist/app-framework.js.map +1 -1
  8. package/dist/charx.cjs +917 -0
  9. package/dist/charx.cjs.map +1 -0
  10. package/dist/charx.d.cts +640 -0
  11. package/dist/charx.d.ts +640 -2
  12. package/dist/charx.js +893 -1
  13. package/dist/charx.js.map +1 -1
  14. package/dist/core.cjs +668 -0
  15. package/dist/core.cjs.map +1 -0
  16. package/dist/core.d.cts +363 -0
  17. package/dist/core.d.ts +363 -2
  18. package/dist/core.js +644 -1
  19. package/dist/core.js.map +1 -1
  20. package/dist/exporter.cjs +7539 -0
  21. package/dist/exporter.cjs.map +1 -0
  22. package/dist/exporter.d.cts +681 -0
  23. package/dist/exporter.d.ts +681 -2
  24. package/dist/exporter.js +7522 -1
  25. package/dist/exporter.js.map +1 -1
  26. package/dist/federation.cjs +3915 -0
  27. package/dist/federation.cjs.map +1 -0
  28. package/dist/federation.d.cts +2951 -0
  29. package/dist/federation.d.ts +2951 -2
  30. package/dist/federation.js +3891 -1
  31. package/dist/federation.js.map +1 -1
  32. package/dist/index.cjs +9109 -0
  33. package/dist/index.cjs.map +1 -0
  34. package/dist/index.d.cts +1119 -0
  35. package/dist/index.d.ts +1113 -20
  36. package/dist/index.js +9092 -26
  37. package/dist/index.js.map +1 -1
  38. package/dist/loader.cjs +8923 -0
  39. package/dist/loader.cjs.map +1 -0
  40. package/dist/loader.d.cts +1037 -0
  41. package/dist/loader.d.ts +1037 -2
  42. package/dist/loader.js +8906 -1
  43. package/dist/loader.js.map +1 -1
  44. package/dist/lorebook.cjs +865 -0
  45. package/dist/lorebook.cjs.map +1 -0
  46. package/dist/lorebook.d.cts +1008 -0
  47. package/dist/lorebook.d.ts +1008 -2
  48. package/dist/lorebook.js +841 -1
  49. package/dist/lorebook.js.map +1 -1
  50. package/dist/media.cjs +6660 -0
  51. package/dist/media.cjs.map +1 -0
  52. package/dist/media.d.cts +87 -0
  53. package/dist/media.d.ts +87 -2
  54. package/dist/media.js +6643 -1
  55. package/dist/media.js.map +1 -1
  56. package/dist/normalizer.cjs +502 -0
  57. package/dist/normalizer.cjs.map +1 -0
  58. package/dist/normalizer.d.cts +1216 -0
  59. package/dist/normalizer.d.ts +1216 -2
  60. package/dist/normalizer.js +478 -1
  61. package/dist/normalizer.js.map +1 -1
  62. package/dist/png.cjs +778 -0
  63. package/dist/png.cjs.map +1 -0
  64. package/dist/png.d.cts +786 -0
  65. package/dist/png.d.ts +786 -2
  66. package/dist/png.js +754 -1
  67. package/dist/png.js.map +1 -1
  68. package/dist/schemas.cjs +799 -0
  69. package/dist/schemas.cjs.map +1 -0
  70. package/dist/schemas.d.cts +2178 -0
  71. package/dist/schemas.d.ts +2178 -2
  72. package/dist/schemas.js +775 -1
  73. package/dist/schemas.js.map +1 -1
  74. package/dist/tokenizers.cjs +153 -0
  75. package/dist/tokenizers.cjs.map +1 -0
  76. package/dist/tokenizers.d.cts +155 -0
  77. package/dist/tokenizers.d.ts +155 -2
  78. package/dist/tokenizers.js +129 -1
  79. package/dist/tokenizers.js.map +1 -1
  80. package/dist/voxta.cjs +7995 -0
  81. package/dist/voxta.cjs.map +1 -0
  82. package/dist/voxta.d.cts +1349 -0
  83. package/dist/voxta.d.ts +1349 -2
  84. package/dist/voxta.js +7978 -1
  85. package/dist/voxta.js.map +1 -1
  86. package/package.json +177 -45
  87. package/dist/app-framework.d.ts.map +0 -1
  88. package/dist/charx.d.ts.map +0 -1
  89. package/dist/core.d.ts.map +0 -1
  90. package/dist/exporter.d.ts.map +0 -1
  91. package/dist/federation.d.ts.map +0 -1
  92. package/dist/index.d.ts.map +0 -1
  93. package/dist/loader.d.ts.map +0 -1
  94. package/dist/lorebook.d.ts.map +0 -1
  95. package/dist/media.d.ts.map +0 -1
  96. package/dist/normalizer.d.ts.map +0 -1
  97. package/dist/png.d.ts.map +0 -1
  98. package/dist/schemas.d.ts.map +0 -1
  99. package/dist/tokenizers.d.ts.map +0 -1
  100. package/dist/voxta.d.ts.map +0 -1
package/dist/charx.d.ts CHANGED
@@ -1,2 +1,640 @@
1
- export * from '@character-foundry/charx';
2
- //# sourceMappingURL=charx.d.ts.map
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * Binary Data Utilities
5
+ *
6
+ * Universal binary data operations using Uint8Array.
7
+ * Works in both Node.js and browser environments.
8
+ */
9
+ /**
10
+ * Universal binary data type (works in both environments)
11
+ */
12
+ export type BinaryData = Uint8Array;
13
+ declare const CCv3DataSchema: z.ZodObject<{
14
+ spec: z.ZodLiteral<"chara_card_v3">;
15
+ spec_version: z.ZodLiteral<"3.0">;
16
+ data: z.ZodObject<{
17
+ name: z.ZodDefault<z.ZodString>;
18
+ description: z.ZodDefault<z.ZodString>;
19
+ personality: z.ZodDefault<z.ZodNullable<z.ZodString>>;
20
+ scenario: z.ZodDefault<z.ZodString>;
21
+ first_mes: z.ZodDefault<z.ZodString>;
22
+ mes_example: z.ZodDefault<z.ZodNullable<z.ZodString>>;
23
+ creator: z.ZodDefault<z.ZodString>;
24
+ character_version: z.ZodDefault<z.ZodString>;
25
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
26
+ group_only_greetings: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
27
+ creator_notes: z.ZodOptional<z.ZodString>;
28
+ system_prompt: z.ZodOptional<z.ZodString>;
29
+ post_history_instructions: z.ZodOptional<z.ZodString>;
30
+ alternate_greetings: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
31
+ character_book: z.ZodNullable<z.ZodOptional<z.ZodObject<{
32
+ name: z.ZodOptional<z.ZodString>;
33
+ description: z.ZodOptional<z.ZodString>;
34
+ scan_depth: z.ZodOptional<z.ZodNumber>;
35
+ token_budget: z.ZodOptional<z.ZodNumber>;
36
+ recursive_scanning: z.ZodOptional<z.ZodBoolean>;
37
+ extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
38
+ entries: z.ZodArray<z.ZodObject<{
39
+ keys: z.ZodArray<z.ZodString, "many">;
40
+ content: z.ZodString;
41
+ enabled: z.ZodBoolean;
42
+ insertion_order: z.ZodNumber;
43
+ case_sensitive: z.ZodOptional<z.ZodBoolean>;
44
+ name: z.ZodOptional<z.ZodString>;
45
+ priority: z.ZodOptional<z.ZodNumber>;
46
+ id: z.ZodOptional<z.ZodNumber>;
47
+ comment: z.ZodOptional<z.ZodString>;
48
+ selective: z.ZodOptional<z.ZodBoolean>;
49
+ secondary_keys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
50
+ constant: z.ZodOptional<z.ZodBoolean>;
51
+ position: z.ZodOptional<z.ZodEnum<[
52
+ "before_char",
53
+ "after_char"
54
+ ]>>;
55
+ extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
56
+ automation_id: z.ZodOptional<z.ZodString>;
57
+ role: z.ZodOptional<z.ZodEnum<[
58
+ "system",
59
+ "user",
60
+ "assistant"
61
+ ]>>;
62
+ group: z.ZodOptional<z.ZodString>;
63
+ scan_frequency: z.ZodOptional<z.ZodNumber>;
64
+ probability: z.ZodOptional<z.ZodNumber>;
65
+ use_regex: z.ZodOptional<z.ZodBoolean>;
66
+ depth: z.ZodOptional<z.ZodNumber>;
67
+ selective_logic: z.ZodOptional<z.ZodEnum<[
68
+ "AND",
69
+ "NOT"
70
+ ]>>;
71
+ }, "strip", z.ZodTypeAny, {
72
+ keys: string[];
73
+ content: string;
74
+ enabled: boolean;
75
+ insertion_order: number;
76
+ name?: string | undefined;
77
+ extensions?: Record<string, unknown> | undefined;
78
+ case_sensitive?: boolean | undefined;
79
+ priority?: number | undefined;
80
+ id?: number | undefined;
81
+ comment?: string | undefined;
82
+ selective?: boolean | undefined;
83
+ secondary_keys?: string[] | undefined;
84
+ constant?: boolean | undefined;
85
+ position?: "before_char" | "after_char" | undefined;
86
+ automation_id?: string | undefined;
87
+ role?: "system" | "user" | "assistant" | undefined;
88
+ group?: string | undefined;
89
+ scan_frequency?: number | undefined;
90
+ probability?: number | undefined;
91
+ use_regex?: boolean | undefined;
92
+ depth?: number | undefined;
93
+ selective_logic?: "AND" | "NOT" | undefined;
94
+ }, {
95
+ keys: string[];
96
+ content: string;
97
+ enabled: boolean;
98
+ insertion_order: number;
99
+ name?: string | undefined;
100
+ extensions?: Record<string, unknown> | undefined;
101
+ case_sensitive?: boolean | undefined;
102
+ priority?: number | undefined;
103
+ id?: number | undefined;
104
+ comment?: string | undefined;
105
+ selective?: boolean | undefined;
106
+ secondary_keys?: string[] | undefined;
107
+ constant?: boolean | undefined;
108
+ position?: "before_char" | "after_char" | undefined;
109
+ automation_id?: string | undefined;
110
+ role?: "system" | "user" | "assistant" | undefined;
111
+ group?: string | undefined;
112
+ scan_frequency?: number | undefined;
113
+ probability?: number | undefined;
114
+ use_regex?: boolean | undefined;
115
+ depth?: number | undefined;
116
+ selective_logic?: "AND" | "NOT" | undefined;
117
+ }>, "many">;
118
+ }, "strip", z.ZodTypeAny, {
119
+ entries: {
120
+ keys: string[];
121
+ content: string;
122
+ enabled: boolean;
123
+ insertion_order: number;
124
+ name?: string | undefined;
125
+ extensions?: Record<string, unknown> | undefined;
126
+ case_sensitive?: boolean | undefined;
127
+ priority?: number | undefined;
128
+ id?: number | undefined;
129
+ comment?: string | undefined;
130
+ selective?: boolean | undefined;
131
+ secondary_keys?: string[] | undefined;
132
+ constant?: boolean | undefined;
133
+ position?: "before_char" | "after_char" | undefined;
134
+ automation_id?: string | undefined;
135
+ role?: "system" | "user" | "assistant" | undefined;
136
+ group?: string | undefined;
137
+ scan_frequency?: number | undefined;
138
+ probability?: number | undefined;
139
+ use_regex?: boolean | undefined;
140
+ depth?: number | undefined;
141
+ selective_logic?: "AND" | "NOT" | undefined;
142
+ }[];
143
+ name?: string | undefined;
144
+ description?: string | undefined;
145
+ scan_depth?: number | undefined;
146
+ token_budget?: number | undefined;
147
+ recursive_scanning?: boolean | undefined;
148
+ extensions?: Record<string, unknown> | undefined;
149
+ }, {
150
+ entries: {
151
+ keys: string[];
152
+ content: string;
153
+ enabled: boolean;
154
+ insertion_order: number;
155
+ name?: string | undefined;
156
+ extensions?: Record<string, unknown> | undefined;
157
+ case_sensitive?: boolean | undefined;
158
+ priority?: number | undefined;
159
+ id?: number | undefined;
160
+ comment?: string | undefined;
161
+ selective?: boolean | undefined;
162
+ secondary_keys?: string[] | undefined;
163
+ constant?: boolean | undefined;
164
+ position?: "before_char" | "after_char" | undefined;
165
+ automation_id?: string | undefined;
166
+ role?: "system" | "user" | "assistant" | undefined;
167
+ group?: string | undefined;
168
+ scan_frequency?: number | undefined;
169
+ probability?: number | undefined;
170
+ use_regex?: boolean | undefined;
171
+ depth?: number | undefined;
172
+ selective_logic?: "AND" | "NOT" | undefined;
173
+ }[];
174
+ name?: string | undefined;
175
+ description?: string | undefined;
176
+ scan_depth?: number | undefined;
177
+ token_budget?: number | undefined;
178
+ recursive_scanning?: boolean | undefined;
179
+ extensions?: Record<string, unknown> | undefined;
180
+ }>>>;
181
+ extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
182
+ assets: z.ZodOptional<z.ZodArray<z.ZodObject<{
183
+ type: z.ZodEnum<[
184
+ "icon",
185
+ "background",
186
+ "emotion",
187
+ "user_icon",
188
+ "sound",
189
+ "video",
190
+ "custom",
191
+ "x-risu-asset"
192
+ ]>;
193
+ uri: z.ZodString;
194
+ name: z.ZodString;
195
+ ext: z.ZodString;
196
+ }, "strip", z.ZodTypeAny, {
197
+ name: string;
198
+ type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
199
+ uri: string;
200
+ ext: string;
201
+ }, {
202
+ name: string;
203
+ type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
204
+ uri: string;
205
+ ext: string;
206
+ }>, "many">>;
207
+ nickname: z.ZodOptional<z.ZodString>;
208
+ creator_notes_multilingual: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
209
+ source: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
210
+ creation_date: z.ZodOptional<z.ZodNumber>;
211
+ modification_date: z.ZodOptional<z.ZodNumber>;
212
+ }, "strip", z.ZodTypeAny, {
213
+ name: string;
214
+ description: string;
215
+ personality: string | null;
216
+ scenario: string;
217
+ first_mes: string;
218
+ mes_example: string | null;
219
+ tags: string[];
220
+ creator: string;
221
+ character_version: string;
222
+ group_only_greetings: string[];
223
+ extensions?: Record<string, unknown> | undefined;
224
+ creator_notes?: string | undefined;
225
+ system_prompt?: string | undefined;
226
+ post_history_instructions?: string | undefined;
227
+ alternate_greetings?: string[] | undefined;
228
+ character_book?: {
229
+ entries: {
230
+ keys: string[];
231
+ content: string;
232
+ enabled: boolean;
233
+ insertion_order: number;
234
+ name?: string | undefined;
235
+ extensions?: Record<string, unknown> | undefined;
236
+ case_sensitive?: boolean | undefined;
237
+ priority?: number | undefined;
238
+ id?: number | undefined;
239
+ comment?: string | undefined;
240
+ selective?: boolean | undefined;
241
+ secondary_keys?: string[] | undefined;
242
+ constant?: boolean | undefined;
243
+ position?: "before_char" | "after_char" | undefined;
244
+ automation_id?: string | undefined;
245
+ role?: "system" | "user" | "assistant" | undefined;
246
+ group?: string | undefined;
247
+ scan_frequency?: number | undefined;
248
+ probability?: number | undefined;
249
+ use_regex?: boolean | undefined;
250
+ depth?: number | undefined;
251
+ selective_logic?: "AND" | "NOT" | undefined;
252
+ }[];
253
+ name?: string | undefined;
254
+ description?: string | undefined;
255
+ scan_depth?: number | undefined;
256
+ token_budget?: number | undefined;
257
+ recursive_scanning?: boolean | undefined;
258
+ extensions?: Record<string, unknown> | undefined;
259
+ } | null | undefined;
260
+ assets?: {
261
+ name: string;
262
+ type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
263
+ uri: string;
264
+ ext: string;
265
+ }[] | undefined;
266
+ nickname?: string | undefined;
267
+ creator_notes_multilingual?: Record<string, string> | undefined;
268
+ source?: string[] | undefined;
269
+ creation_date?: number | undefined;
270
+ modification_date?: number | undefined;
271
+ }, {
272
+ name?: string | undefined;
273
+ description?: string | undefined;
274
+ extensions?: Record<string, unknown> | undefined;
275
+ personality?: string | null | undefined;
276
+ scenario?: string | undefined;
277
+ first_mes?: string | undefined;
278
+ mes_example?: string | null | undefined;
279
+ creator_notes?: string | undefined;
280
+ system_prompt?: string | undefined;
281
+ post_history_instructions?: string | undefined;
282
+ alternate_greetings?: string[] | undefined;
283
+ character_book?: {
284
+ entries: {
285
+ keys: string[];
286
+ content: string;
287
+ enabled: boolean;
288
+ insertion_order: number;
289
+ name?: string | undefined;
290
+ extensions?: Record<string, unknown> | undefined;
291
+ case_sensitive?: boolean | undefined;
292
+ priority?: number | undefined;
293
+ id?: number | undefined;
294
+ comment?: string | undefined;
295
+ selective?: boolean | undefined;
296
+ secondary_keys?: string[] | undefined;
297
+ constant?: boolean | undefined;
298
+ position?: "before_char" | "after_char" | undefined;
299
+ automation_id?: string | undefined;
300
+ role?: "system" | "user" | "assistant" | undefined;
301
+ group?: string | undefined;
302
+ scan_frequency?: number | undefined;
303
+ probability?: number | undefined;
304
+ use_regex?: boolean | undefined;
305
+ depth?: number | undefined;
306
+ selective_logic?: "AND" | "NOT" | undefined;
307
+ }[];
308
+ name?: string | undefined;
309
+ description?: string | undefined;
310
+ scan_depth?: number | undefined;
311
+ token_budget?: number | undefined;
312
+ recursive_scanning?: boolean | undefined;
313
+ extensions?: Record<string, unknown> | undefined;
314
+ } | null | undefined;
315
+ tags?: string[] | undefined;
316
+ creator?: string | undefined;
317
+ character_version?: string | undefined;
318
+ group_only_greetings?: string[] | undefined;
319
+ assets?: {
320
+ name: string;
321
+ type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
322
+ uri: string;
323
+ ext: string;
324
+ }[] | undefined;
325
+ nickname?: string | undefined;
326
+ creator_notes_multilingual?: Record<string, string> | undefined;
327
+ source?: string[] | undefined;
328
+ creation_date?: number | undefined;
329
+ modification_date?: number | undefined;
330
+ }>;
331
+ }, "strip", z.ZodTypeAny, {
332
+ data: {
333
+ name: string;
334
+ description: string;
335
+ personality: string | null;
336
+ scenario: string;
337
+ first_mes: string;
338
+ mes_example: string | null;
339
+ tags: string[];
340
+ creator: string;
341
+ character_version: string;
342
+ group_only_greetings: string[];
343
+ extensions?: Record<string, unknown> | undefined;
344
+ creator_notes?: string | undefined;
345
+ system_prompt?: string | undefined;
346
+ post_history_instructions?: string | undefined;
347
+ alternate_greetings?: string[] | undefined;
348
+ character_book?: {
349
+ entries: {
350
+ keys: string[];
351
+ content: string;
352
+ enabled: boolean;
353
+ insertion_order: number;
354
+ name?: string | undefined;
355
+ extensions?: Record<string, unknown> | undefined;
356
+ case_sensitive?: boolean | undefined;
357
+ priority?: number | undefined;
358
+ id?: number | undefined;
359
+ comment?: string | undefined;
360
+ selective?: boolean | undefined;
361
+ secondary_keys?: string[] | undefined;
362
+ constant?: boolean | undefined;
363
+ position?: "before_char" | "after_char" | undefined;
364
+ automation_id?: string | undefined;
365
+ role?: "system" | "user" | "assistant" | undefined;
366
+ group?: string | undefined;
367
+ scan_frequency?: number | undefined;
368
+ probability?: number | undefined;
369
+ use_regex?: boolean | undefined;
370
+ depth?: number | undefined;
371
+ selective_logic?: "AND" | "NOT" | undefined;
372
+ }[];
373
+ name?: string | undefined;
374
+ description?: string | undefined;
375
+ scan_depth?: number | undefined;
376
+ token_budget?: number | undefined;
377
+ recursive_scanning?: boolean | undefined;
378
+ extensions?: Record<string, unknown> | undefined;
379
+ } | null | undefined;
380
+ assets?: {
381
+ name: string;
382
+ type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
383
+ uri: string;
384
+ ext: string;
385
+ }[] | undefined;
386
+ nickname?: string | undefined;
387
+ creator_notes_multilingual?: Record<string, string> | undefined;
388
+ source?: string[] | undefined;
389
+ creation_date?: number | undefined;
390
+ modification_date?: number | undefined;
391
+ };
392
+ spec: "chara_card_v3";
393
+ spec_version: "3.0";
394
+ }, {
395
+ data: {
396
+ name?: string | undefined;
397
+ description?: string | undefined;
398
+ extensions?: Record<string, unknown> | undefined;
399
+ personality?: string | null | undefined;
400
+ scenario?: string | undefined;
401
+ first_mes?: string | undefined;
402
+ mes_example?: string | null | undefined;
403
+ creator_notes?: string | undefined;
404
+ system_prompt?: string | undefined;
405
+ post_history_instructions?: string | undefined;
406
+ alternate_greetings?: string[] | undefined;
407
+ character_book?: {
408
+ entries: {
409
+ keys: string[];
410
+ content: string;
411
+ enabled: boolean;
412
+ insertion_order: number;
413
+ name?: string | undefined;
414
+ extensions?: Record<string, unknown> | undefined;
415
+ case_sensitive?: boolean | undefined;
416
+ priority?: number | undefined;
417
+ id?: number | undefined;
418
+ comment?: string | undefined;
419
+ selective?: boolean | undefined;
420
+ secondary_keys?: string[] | undefined;
421
+ constant?: boolean | undefined;
422
+ position?: "before_char" | "after_char" | undefined;
423
+ automation_id?: string | undefined;
424
+ role?: "system" | "user" | "assistant" | undefined;
425
+ group?: string | undefined;
426
+ scan_frequency?: number | undefined;
427
+ probability?: number | undefined;
428
+ use_regex?: boolean | undefined;
429
+ depth?: number | undefined;
430
+ selective_logic?: "AND" | "NOT" | undefined;
431
+ }[];
432
+ name?: string | undefined;
433
+ description?: string | undefined;
434
+ scan_depth?: number | undefined;
435
+ token_budget?: number | undefined;
436
+ recursive_scanning?: boolean | undefined;
437
+ extensions?: Record<string, unknown> | undefined;
438
+ } | null | undefined;
439
+ tags?: string[] | undefined;
440
+ creator?: string | undefined;
441
+ character_version?: string | undefined;
442
+ group_only_greetings?: string[] | undefined;
443
+ assets?: {
444
+ name: string;
445
+ type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
446
+ uri: string;
447
+ ext: string;
448
+ }[] | undefined;
449
+ nickname?: string | undefined;
450
+ creator_notes_multilingual?: Record<string, string> | undefined;
451
+ source?: string[] | undefined;
452
+ creation_date?: number | undefined;
453
+ modification_date?: number | undefined;
454
+ };
455
+ spec: "chara_card_v3";
456
+ spec_version: "3.0";
457
+ }>;
458
+ /**
459
+ * Character Card v3 full structure
460
+ */
461
+ export type CCv3Data = z.infer<typeof CCv3DataSchema>;
462
+ declare const AssetDescriptorSchema: z.ZodObject<{
463
+ type: z.ZodEnum<[
464
+ "icon",
465
+ "background",
466
+ "emotion",
467
+ "user_icon",
468
+ "sound",
469
+ "video",
470
+ "custom",
471
+ "x-risu-asset"
472
+ ]>;
473
+ uri: z.ZodString;
474
+ name: z.ZodString;
475
+ ext: z.ZodString;
476
+ }, "strip", z.ZodTypeAny, {
477
+ name: string;
478
+ type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
479
+ uri: string;
480
+ ext: string;
481
+ }, {
482
+ name: string;
483
+ type: "custom" | "icon" | "background" | "emotion" | "user_icon" | "sound" | "video" | "x-risu-asset";
484
+ uri: string;
485
+ ext: string;
486
+ }>;
487
+ /**
488
+ * Asset descriptor (v3 spec)
489
+ */
490
+ export type AssetDescriptor = z.infer<typeof AssetDescriptorSchema>;
491
+ /**
492
+ * Check if data is a JPEG with appended ZIP (JPEG+CharX hybrid)
493
+ */
494
+ export declare function isJpegCharX(data: BinaryData): boolean;
495
+ /**
496
+ * CharX Types
497
+ *
498
+ * Type definitions for CharX format handling.
499
+ */
500
+ /**
501
+ * Valid compression levels for fflate
502
+ */
503
+ export type CompressionLevel = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
504
+ /**
505
+ * x_meta entry (PNG chunk metadata preservation)
506
+ */
507
+ export interface CharxMetaEntry {
508
+ type?: string;
509
+ [key: string]: unknown;
510
+ }
511
+ /**
512
+ * Asset info from CharX extraction
513
+ */
514
+ export interface CharxAssetInfo {
515
+ /** Path within ZIP (e.g., 'assets/icon/image/1.png') */
516
+ path: string;
517
+ /** Corresponding asset descriptor from card.json */
518
+ descriptor: AssetDescriptor;
519
+ /** Binary data (undefined if not found in ZIP) */
520
+ buffer?: BinaryData;
521
+ }
522
+ /**
523
+ * Complete extracted CharX data
524
+ */
525
+ export interface CharxData {
526
+ /** card.json content */
527
+ card: CCv3Data;
528
+ /** All assets extracted from ZIP */
529
+ assets: CharxAssetInfo[];
530
+ /** x_meta/*.json files */
531
+ metadata?: Map<number, CharxMetaEntry>;
532
+ /** module.risum binary data (preserved as opaque blob) */
533
+ moduleRisum?: BinaryData;
534
+ /** Whether this is a Risu-format CharX */
535
+ isRisuFormat: boolean;
536
+ }
537
+ /**
538
+ * Options for CharX extraction
539
+ */
540
+ export interface CharxReadOptions {
541
+ /** Max size for card.json in bytes (default: 10MB) */
542
+ maxFileSize?: number;
543
+ /** Max size for individual assets (default: 50MB) */
544
+ maxAssetSize?: number;
545
+ /** Max total size of all content (default: 200MB) */
546
+ maxTotalSize?: number;
547
+ /** Preserve x_meta folder (default: true) */
548
+ preserveXMeta?: boolean;
549
+ /** Preserve module.risum (default: true) */
550
+ preserveModuleRisum?: boolean;
551
+ }
552
+ /**
553
+ * Asset to include in CharX export
554
+ */
555
+ export interface CharxWriteAsset {
556
+ /** Asset type (icon, background, emotion, etc.) */
557
+ type: string;
558
+ /** Asset name (without extension) */
559
+ name: string;
560
+ /** File extension */
561
+ ext: string;
562
+ /** Binary data of the asset */
563
+ data: BinaryData;
564
+ /** Whether this is the main asset of its type */
565
+ isMain?: boolean;
566
+ }
567
+ /**
568
+ * Options for building CharX
569
+ */
570
+ export interface CharxWriteOptions {
571
+ /** Target spec: 'v3' = standard, 'risu' = include x_meta */
572
+ spec?: "v3" | "risu";
573
+ /** Compression level (0-9, default: 6) */
574
+ compressionLevel?: CompressionLevel;
575
+ /** Emit x_meta for image assets (default: false, true for risu spec) */
576
+ emitXMeta?: boolean;
577
+ /** Include readme.txt (default: false) */
578
+ emitReadme?: boolean;
579
+ /** Risu module.risum binary to include (opaque, preserved from read) */
580
+ moduleRisum?: BinaryData;
581
+ }
582
+ /**
583
+ * Result of building a CharX file
584
+ */
585
+ export interface CharxBuildResult {
586
+ /** The CharX ZIP buffer */
587
+ buffer: BinaryData;
588
+ /** Number of assets included */
589
+ assetCount: number;
590
+ /** Total size of the CharX */
591
+ totalSize: number;
592
+ }
593
+ /**
594
+ * Function to fetch remote assets
595
+ */
596
+ export type AssetFetcher = (url: string) => Promise<BinaryData | undefined>;
597
+ /**
598
+ * CharX Reader
599
+ *
600
+ * Extracts and parses .charx (ZIP-based character card) files.
601
+ * Supports standard CharX, Risu CharX, and JPEG+ZIP hybrid formats.
602
+ */
603
+ /**
604
+ * Check if data is a CharX file (ZIP with card.json)
605
+ *
606
+ * Scans the END of the file (ZIP central directory) since JPEG+ZIP hybrids
607
+ * can have large JPEG data at the front. The central directory listing
608
+ * all filenames is always at the tail of the ZIP.
609
+ */
610
+ export declare function isCharX(data: BinaryData): boolean;
611
+ /**
612
+ * Extract and parse a CharX buffer
613
+ */
614
+ export declare function readCharX(data: BinaryData, options?: CharxReadOptions): CharxData;
615
+ /**
616
+ * Extract just the card.json from a CharX buffer (quick validation)
617
+ */
618
+ export declare function readCardJsonOnly(data: BinaryData): CCv3Data;
619
+ /**
620
+ * Async version of readCharX with optional remote asset fetching
621
+ */
622
+ export declare function readCharXAsync(data: BinaryData, options?: CharxReadOptions & {
623
+ fetchRemoteAssets?: boolean;
624
+ assetFetcher?: AssetFetcher;
625
+ }): Promise<CharxData>;
626
+ /**
627
+ * CharX Writer
628
+ *
629
+ * Creates .charx (ZIP-based character card) files.
630
+ */
631
+ /**
632
+ * Build a CharX ZIP from card data and assets
633
+ */
634
+ export declare function writeCharX(card: CCv3Data, assets: CharxWriteAsset[], options?: CharxWriteOptions): CharxBuildResult;
635
+ /**
636
+ * Async version of writeCharX
637
+ */
638
+ export declare function writeCharXAsync(card: CCv3Data, assets: CharxWriteAsset[], options?: CharxWriteOptions): Promise<CharxBuildResult>;
639
+
640
+ export {};