@hiveforge/hivemind-mcp 3.4.0 → 3.5.1

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 (78) hide show
  1. package/README.md +89 -309
  2. package/dist/cli/fix/fixer.js +1 -1
  3. package/dist/cli/fix/fixer.js.map +1 -1
  4. package/dist/cli/fix/writer.d.ts.map +1 -1
  5. package/dist/cli/fix/writer.js +75 -3
  6. package/dist/cli/fix/writer.js.map +1 -1
  7. package/dist/cli/init/output.d.ts.map +1 -1
  8. package/dist/cli/init/output.js +6 -5
  9. package/dist/cli/init/output.js.map +1 -1
  10. package/dist/cli/validate/formatter.d.ts.map +1 -1
  11. package/dist/cli/validate/formatter.js +16 -0
  12. package/dist/cli/validate/formatter.js.map +1 -1
  13. package/dist/cli/validate/types.d.ts +3 -0
  14. package/dist/cli/validate/types.d.ts.map +1 -1
  15. package/dist/cli/validate/validator.d.ts.map +1 -1
  16. package/dist/cli/validate/validator.js +32 -1
  17. package/dist/cli/validate/validator.js.map +1 -1
  18. package/dist/cli.js +2 -1
  19. package/dist/cli.js.map +1 -1
  20. package/dist/graph/database.d.ts +152 -0
  21. package/dist/graph/database.d.ts.map +1 -1
  22. package/dist/graph/database.js +418 -30
  23. package/dist/graph/database.js.map +1 -1
  24. package/dist/mcp/graph-tools.d.ts +78 -0
  25. package/dist/mcp/graph-tools.d.ts.map +1 -0
  26. package/dist/mcp/graph-tools.js +284 -0
  27. package/dist/mcp/graph-tools.js.map +1 -0
  28. package/dist/mcp/timeline-tools.d.ts +116 -0
  29. package/dist/mcp/timeline-tools.d.ts.map +1 -0
  30. package/dist/mcp/timeline-tools.js +317 -0
  31. package/dist/mcp/timeline-tools.js.map +1 -0
  32. package/dist/search/engine.d.ts +186 -0
  33. package/dist/search/engine.d.ts.map +1 -1
  34. package/dist/search/engine.js +263 -0
  35. package/dist/search/engine.js.map +1 -1
  36. package/dist/server.d.ts +52 -0
  37. package/dist/server.d.ts.map +1 -1
  38. package/dist/server.js +472 -0
  39. package/dist/server.js.map +1 -1
  40. package/dist/templates/builtin/worldbuilding.d.ts.map +1 -1
  41. package/dist/templates/builtin/worldbuilding.js +401 -1
  42. package/dist/templates/builtin/worldbuilding.js.map +1 -1
  43. package/dist/templates/community/dnd-35e.d.ts +18 -0
  44. package/dist/templates/community/dnd-35e.d.ts.map +1 -0
  45. package/dist/templates/community/dnd-35e.js +859 -0
  46. package/dist/templates/community/dnd-35e.js.map +1 -0
  47. package/dist/templates/community/dnd-5e.d.ts +16 -0
  48. package/dist/templates/community/dnd-5e.d.ts.map +1 -0
  49. package/dist/templates/community/dnd-5e.js +509 -0
  50. package/dist/templates/community/dnd-5e.js.map +1 -0
  51. package/dist/templates/community/index.d.ts +9 -0
  52. package/dist/templates/community/index.d.ts.map +1 -1
  53. package/dist/templates/community/index.js +16 -0
  54. package/dist/templates/community/index.js.map +1 -1
  55. package/dist/templates/community/pathfinder-2e.d.ts +16 -0
  56. package/dist/templates/community/pathfinder-2e.d.ts.map +1 -0
  57. package/dist/templates/community/pathfinder-2e.js +711 -0
  58. package/dist/templates/community/pathfinder-2e.js.map +1 -0
  59. package/dist/templates/community/ttrpg-base.d.ts +17 -0
  60. package/dist/templates/community/ttrpg-base.d.ts.map +1 -0
  61. package/dist/templates/community/ttrpg-base.js +889 -0
  62. package/dist/templates/community/ttrpg-base.js.map +1 -0
  63. package/dist/templates/loader.d.ts +2 -0
  64. package/dist/templates/loader.d.ts.map +1 -1
  65. package/dist/templates/loader.js +45 -1
  66. package/dist/templates/loader.js.map +1 -1
  67. package/dist/templates/registry.d.ts +49 -2
  68. package/dist/templates/registry.d.ts.map +1 -1
  69. package/dist/templates/registry.js +276 -6
  70. package/dist/templates/registry.js.map +1 -1
  71. package/dist/templates/types.d.ts +28 -1
  72. package/dist/templates/types.d.ts.map +1 -1
  73. package/dist/templates/validator.d.ts +80 -1
  74. package/dist/templates/validator.d.ts.map +1 -1
  75. package/dist/templates/validator.js +22 -5
  76. package/dist/templates/validator.js.map +1 -1
  77. package/dist/types/index.d.ts +18 -18
  78. package/package.json +1 -1
@@ -0,0 +1,889 @@
1
+ /**
2
+ * System-agnostic TTRPG base template.
3
+ *
4
+ * Extends the worldbuilding template with generic RPG mechanics fields
5
+ * that are common across most tabletop RPG systems:
6
+ * - Ability scores / attributes
7
+ * - Skills and proficiencies
8
+ * - Combat stats (HP, AC, etc.)
9
+ * - Spells and abilities
10
+ * - Equipment and inventory
11
+ *
12
+ * Specific game systems (D&D 5e, Pathfinder, etc.) should extend this
13
+ * template rather than worldbuilding directly.
14
+ */
15
+ export const ttrpgBaseTemplate = {
16
+ id: 'ttrpg-base',
17
+ name: 'TTRPG Base',
18
+ version: '1.0.0',
19
+ description: 'System-agnostic tabletop RPG template with generic mechanics fields. Extend this for specific game systems.',
20
+ extendsTemplate: 'worldbuilding',
21
+ category: 'creative',
22
+ tags: ['ttrpg', 'rpg', 'tabletop', 'gaming', 'dnd', 'pathfinder'],
23
+ author: {
24
+ name: 'HiveForge',
25
+ url: 'https://github.com/hiveforge-sh',
26
+ },
27
+ license: 'MIT',
28
+ entityTypes: [
29
+ // Extend character with generic RPG fields
30
+ {
31
+ name: 'character',
32
+ displayName: 'Character',
33
+ pluralName: 'Characters',
34
+ fields: [],
35
+ additionalFields: [
36
+ // Core RPG attributes
37
+ {
38
+ name: 'character_class',
39
+ type: 'string',
40
+ description: 'Character class or archetype',
41
+ },
42
+ {
43
+ name: 'level',
44
+ type: 'number',
45
+ description: 'Character level or tier',
46
+ },
47
+ {
48
+ name: 'experience_points',
49
+ type: 'number',
50
+ description: 'Current experience points',
51
+ },
52
+ // Combat stats
53
+ {
54
+ name: 'hit_points',
55
+ type: 'number',
56
+ description: 'Current hit points',
57
+ },
58
+ {
59
+ name: 'hit_points_max',
60
+ type: 'number',
61
+ description: 'Maximum hit points',
62
+ },
63
+ {
64
+ name: 'armor_class',
65
+ type: 'number',
66
+ description: 'Armor class or defense rating',
67
+ },
68
+ {
69
+ name: 'speed',
70
+ type: 'string',
71
+ description: 'Movement speed (e.g., "30 ft", "6 squares")',
72
+ },
73
+ // Ability scores - generic names work across systems
74
+ {
75
+ name: 'abilities',
76
+ type: 'record',
77
+ description: 'Ability scores (strength, dexterity, etc.)',
78
+ },
79
+ // Skills
80
+ {
81
+ name: 'skills',
82
+ type: 'record',
83
+ description: 'Skill proficiencies and bonuses',
84
+ },
85
+ // Saves
86
+ {
87
+ name: 'saving_throws',
88
+ type: 'record',
89
+ description: 'Saving throw bonuses',
90
+ },
91
+ // Proficiencies
92
+ {
93
+ name: 'proficiencies',
94
+ type: 'array',
95
+ arrayItemType: 'string',
96
+ description: 'Weapon, armor, tool, and language proficiencies',
97
+ },
98
+ // Combat abilities
99
+ {
100
+ name: 'attacks',
101
+ type: 'array',
102
+ arrayItemType: 'record',
103
+ description: 'Attack actions with to-hit and damage',
104
+ },
105
+ // Special abilities / features
106
+ {
107
+ name: 'features',
108
+ type: 'array',
109
+ arrayItemType: 'string',
110
+ description: 'Class features, racial traits, and special abilities',
111
+ },
112
+ // Inventory
113
+ {
114
+ name: 'inventory',
115
+ type: 'array',
116
+ arrayItemType: 'string',
117
+ description: 'Items carried (item entity IDs or descriptions)',
118
+ },
119
+ {
120
+ name: 'currency',
121
+ type: 'record',
122
+ description: 'Currency by denomination (gold, silver, etc.)',
123
+ },
124
+ // Spellcasting (if applicable)
125
+ {
126
+ name: 'spellcasting_ability',
127
+ type: 'string',
128
+ description: 'Ability used for spellcasting',
129
+ },
130
+ {
131
+ name: 'spell_save_dc',
132
+ type: 'number',
133
+ description: 'Spell save difficulty class',
134
+ },
135
+ {
136
+ name: 'spell_attack_bonus',
137
+ type: 'number',
138
+ description: 'Spell attack modifier',
139
+ },
140
+ {
141
+ name: 'spells_known',
142
+ type: 'array',
143
+ arrayItemType: 'string',
144
+ description: 'Known spell IDs or names',
145
+ },
146
+ {
147
+ name: 'spell_slots',
148
+ type: 'record',
149
+ description: 'Spell slots by level',
150
+ },
151
+ // Conditions and status
152
+ {
153
+ name: 'conditions',
154
+ type: 'array',
155
+ arrayItemType: 'string',
156
+ description: 'Active conditions (poisoned, frightened, etc.)',
157
+ },
158
+ // Notes
159
+ {
160
+ name: 'player_name',
161
+ type: 'string',
162
+ description: 'Real-world player name (for PCs)',
163
+ },
164
+ {
165
+ name: 'is_player_character',
166
+ type: 'boolean',
167
+ description: 'True if this is a player character',
168
+ },
169
+ ],
170
+ },
171
+ // Spell entity type
172
+ {
173
+ name: 'spell',
174
+ displayName: 'Spell',
175
+ pluralName: 'Spells',
176
+ description: 'Magic spells, powers, and special abilities',
177
+ icon: 'sparkles',
178
+ fields: [
179
+ {
180
+ name: 'name',
181
+ type: 'string',
182
+ required: true,
183
+ description: 'Spell name',
184
+ },
185
+ {
186
+ name: 'spell_level',
187
+ type: 'number',
188
+ description: 'Spell level (0 for cantrips)',
189
+ },
190
+ {
191
+ name: 'school',
192
+ type: 'string',
193
+ description: 'School of magic (evocation, necromancy, etc.)',
194
+ },
195
+ {
196
+ name: 'casting_time',
197
+ type: 'string',
198
+ description: 'Time required to cast (action, bonus action, 1 minute, etc.)',
199
+ },
200
+ {
201
+ name: 'range',
202
+ type: 'string',
203
+ description: 'Spell range (self, touch, 60 feet, etc.)',
204
+ },
205
+ {
206
+ name: 'components',
207
+ type: 'array',
208
+ arrayItemType: 'string',
209
+ description: 'Required components (V, S, M with materials)',
210
+ },
211
+ {
212
+ name: 'duration',
213
+ type: 'string',
214
+ description: 'Spell duration (instantaneous, 1 hour, concentration, etc.)',
215
+ },
216
+ {
217
+ name: 'concentration',
218
+ type: 'boolean',
219
+ description: 'Whether spell requires concentration',
220
+ },
221
+ {
222
+ name: 'ritual',
223
+ type: 'boolean',
224
+ description: 'Whether spell can be cast as a ritual',
225
+ },
226
+ {
227
+ name: 'description',
228
+ type: 'string',
229
+ description: 'Full spell description and effects',
230
+ },
231
+ {
232
+ name: 'higher_levels',
233
+ type: 'string',
234
+ description: 'Effects when cast at higher levels',
235
+ },
236
+ {
237
+ name: 'classes',
238
+ type: 'array',
239
+ arrayItemType: 'string',
240
+ description: 'Classes that can learn this spell',
241
+ },
242
+ {
243
+ name: 'source',
244
+ type: 'string',
245
+ description: 'Source book or homebrew origin',
246
+ },
247
+ ],
248
+ },
249
+ // Class entity type
250
+ {
251
+ name: 'class',
252
+ displayName: 'Class',
253
+ pluralName: 'Classes',
254
+ description: 'Character classes and archetypes',
255
+ icon: 'shield',
256
+ fields: [
257
+ {
258
+ name: 'name',
259
+ type: 'string',
260
+ required: true,
261
+ description: 'Class name',
262
+ },
263
+ {
264
+ name: 'hit_die',
265
+ type: 'string',
266
+ description: 'Hit die type (d6, d8, d10, d12)',
267
+ },
268
+ {
269
+ name: 'primary_ability',
270
+ type: 'string',
271
+ description: 'Primary ability score',
272
+ },
273
+ {
274
+ name: 'saving_throw_proficiencies',
275
+ type: 'array',
276
+ arrayItemType: 'string',
277
+ description: 'Saving throw proficiencies',
278
+ },
279
+ {
280
+ name: 'armor_proficiencies',
281
+ type: 'array',
282
+ arrayItemType: 'string',
283
+ description: 'Armor proficiencies',
284
+ },
285
+ {
286
+ name: 'weapon_proficiencies',
287
+ type: 'array',
288
+ arrayItemType: 'string',
289
+ description: 'Weapon proficiencies',
290
+ },
291
+ {
292
+ name: 'skill_choices',
293
+ type: 'array',
294
+ arrayItemType: 'string',
295
+ description: 'Available skill proficiency choices',
296
+ },
297
+ {
298
+ name: 'num_skill_choices',
299
+ type: 'number',
300
+ description: 'Number of skills to choose',
301
+ },
302
+ {
303
+ name: 'features_by_level',
304
+ type: 'record',
305
+ description: 'Class features gained at each level',
306
+ },
307
+ {
308
+ name: 'subclass_name',
309
+ type: 'string',
310
+ description: 'What subclasses are called (archetype, domain, etc.)',
311
+ },
312
+ {
313
+ name: 'subclass_level',
314
+ type: 'number',
315
+ description: 'Level at which subclass is chosen',
316
+ },
317
+ {
318
+ name: 'spellcasting',
319
+ type: 'record',
320
+ description: 'Spellcasting progression details',
321
+ },
322
+ {
323
+ name: 'source',
324
+ type: 'string',
325
+ description: 'Source book or homebrew origin',
326
+ },
327
+ ],
328
+ },
329
+ // Subclass entity type
330
+ {
331
+ name: 'subclass',
332
+ displayName: 'Subclass',
333
+ pluralName: 'Subclasses',
334
+ description: 'Class specializations and archetypes',
335
+ icon: 'git-branch',
336
+ fields: [
337
+ {
338
+ name: 'name',
339
+ type: 'string',
340
+ required: true,
341
+ description: 'Subclass name',
342
+ },
343
+ {
344
+ name: 'parent_class',
345
+ type: 'string',
346
+ description: 'Parent class ID',
347
+ },
348
+ {
349
+ name: 'features_by_level',
350
+ type: 'record',
351
+ description: 'Subclass features gained at each level',
352
+ },
353
+ {
354
+ name: 'spells',
355
+ type: 'array',
356
+ arrayItemType: 'string',
357
+ description: 'Subclass spell list (if any)',
358
+ },
359
+ {
360
+ name: 'source',
361
+ type: 'string',
362
+ description: 'Source book or homebrew origin',
363
+ },
364
+ ],
365
+ },
366
+ // Extend creature with stat block fields
367
+ {
368
+ name: 'creature',
369
+ displayName: 'Creature',
370
+ pluralName: 'Creatures',
371
+ fields: [],
372
+ additionalFields: [
373
+ {
374
+ name: 'size',
375
+ type: 'enum',
376
+ enumValues: ['tiny', 'small', 'medium', 'large', 'huge', 'gargantuan'],
377
+ description: 'Creature size category',
378
+ },
379
+ {
380
+ name: 'hit_points',
381
+ type: 'string',
382
+ description: 'Hit points with hit dice formula (e.g., "45 (6d10 + 12)")',
383
+ },
384
+ {
385
+ name: 'armor_class',
386
+ type: 'string',
387
+ description: 'Armor class with source (e.g., "15 (natural armor)")',
388
+ },
389
+ {
390
+ name: 'speed',
391
+ type: 'string',
392
+ description: 'Movement speeds (e.g., "30 ft., fly 60 ft.")',
393
+ },
394
+ {
395
+ name: 'abilities',
396
+ type: 'record',
397
+ description: 'Ability scores (STR, DEX, CON, INT, WIS, CHA)',
398
+ },
399
+ {
400
+ name: 'skills',
401
+ type: 'record',
402
+ description: 'Skill bonuses',
403
+ },
404
+ {
405
+ name: 'damage_vulnerabilities',
406
+ type: 'array',
407
+ arrayItemType: 'string',
408
+ description: 'Damage types the creature is vulnerable to',
409
+ },
410
+ {
411
+ name: 'damage_resistances',
412
+ type: 'array',
413
+ arrayItemType: 'string',
414
+ description: 'Damage types the creature resists',
415
+ },
416
+ {
417
+ name: 'damage_immunities',
418
+ type: 'array',
419
+ arrayItemType: 'string',
420
+ description: 'Damage types the creature is immune to',
421
+ },
422
+ {
423
+ name: 'condition_immunities',
424
+ type: 'array',
425
+ arrayItemType: 'string',
426
+ description: 'Conditions the creature is immune to',
427
+ },
428
+ {
429
+ name: 'senses',
430
+ type: 'string',
431
+ description: 'Special senses (e.g., "darkvision 60 ft., passive Perception 14")',
432
+ },
433
+ {
434
+ name: 'languages',
435
+ type: 'array',
436
+ arrayItemType: 'string',
437
+ description: 'Languages the creature speaks',
438
+ },
439
+ {
440
+ name: 'traits',
441
+ type: 'array',
442
+ arrayItemType: 'record',
443
+ description: 'Special traits and abilities',
444
+ },
445
+ {
446
+ name: 'actions',
447
+ type: 'array',
448
+ arrayItemType: 'record',
449
+ description: 'Actions the creature can take',
450
+ },
451
+ {
452
+ name: 'reactions',
453
+ type: 'array',
454
+ arrayItemType: 'record',
455
+ description: 'Reactions available to the creature',
456
+ },
457
+ {
458
+ name: 'legendary_actions',
459
+ type: 'array',
460
+ arrayItemType: 'record',
461
+ description: 'Legendary actions (if any)',
462
+ },
463
+ {
464
+ name: 'lair_actions',
465
+ type: 'array',
466
+ arrayItemType: 'record',
467
+ description: 'Lair actions (if any)',
468
+ },
469
+ {
470
+ name: 'experience_points',
471
+ type: 'number',
472
+ description: 'XP reward for defeating',
473
+ },
474
+ ],
475
+ },
476
+ // Extend item with RPG equipment fields
477
+ {
478
+ name: 'item',
479
+ displayName: 'Item',
480
+ pluralName: 'Items',
481
+ fields: [],
482
+ additionalFields: [
483
+ {
484
+ name: 'weight',
485
+ type: 'string',
486
+ description: 'Item weight (e.g., "3 lb.")',
487
+ },
488
+ {
489
+ name: 'requires_attunement',
490
+ type: 'boolean',
491
+ description: 'Whether item requires attunement',
492
+ },
493
+ {
494
+ name: 'attunement_requirements',
495
+ type: 'string',
496
+ description: 'Attunement requirements (e.g., "by a spellcaster")',
497
+ },
498
+ // Weapon properties
499
+ {
500
+ name: 'weapon_type',
501
+ type: 'string',
502
+ description: 'Weapon type (simple/martial, melee/ranged)',
503
+ },
504
+ {
505
+ name: 'damage',
506
+ type: 'string',
507
+ description: 'Damage dice and type (e.g., "1d8 slashing")',
508
+ },
509
+ {
510
+ name: 'weapon_properties',
511
+ type: 'array',
512
+ arrayItemType: 'string',
513
+ description: 'Weapon properties (finesse, versatile, etc.)',
514
+ },
515
+ {
516
+ name: 'range',
517
+ type: 'string',
518
+ description: 'Range for ranged weapons (e.g., "80/320")',
519
+ },
520
+ // Armor properties
521
+ {
522
+ name: 'armor_type',
523
+ type: 'string',
524
+ description: 'Armor type (light, medium, heavy, shield)',
525
+ },
526
+ {
527
+ name: 'base_ac',
528
+ type: 'number',
529
+ description: 'Base AC provided by armor',
530
+ },
531
+ {
532
+ name: 'max_dex_bonus',
533
+ type: 'number',
534
+ description: 'Maximum Dex bonus allowed',
535
+ },
536
+ {
537
+ name: 'strength_requirement',
538
+ type: 'number',
539
+ description: 'Minimum Strength required',
540
+ },
541
+ {
542
+ name: 'stealth_disadvantage',
543
+ type: 'boolean',
544
+ description: 'Whether armor imposes stealth disadvantage',
545
+ },
546
+ // Magic item properties
547
+ {
548
+ name: 'magic_bonus',
549
+ type: 'number',
550
+ description: 'Magic bonus to attack/damage or AC',
551
+ },
552
+ {
553
+ name: 'charges',
554
+ type: 'number',
555
+ description: 'Number of charges (for charged items)',
556
+ },
557
+ {
558
+ name: 'charges_max',
559
+ type: 'number',
560
+ description: 'Maximum charges',
561
+ },
562
+ {
563
+ name: 'recharge',
564
+ type: 'string',
565
+ description: 'How charges are regained',
566
+ },
567
+ ],
568
+ },
569
+ // Encounter entity type
570
+ {
571
+ name: 'encounter',
572
+ displayName: 'Encounter',
573
+ pluralName: 'Encounters',
574
+ description: 'Combat encounters and challenges',
575
+ icon: 'swords',
576
+ fields: [
577
+ {
578
+ name: 'name',
579
+ type: 'string',
580
+ required: true,
581
+ description: 'Encounter name',
582
+ },
583
+ {
584
+ name: 'difficulty',
585
+ type: 'enum',
586
+ enumValues: ['trivial', 'easy', 'medium', 'hard', 'deadly'],
587
+ description: 'Encounter difficulty',
588
+ },
589
+ {
590
+ name: 'location',
591
+ type: 'string',
592
+ description: 'Location ID where encounter takes place',
593
+ },
594
+ {
595
+ name: 'creatures',
596
+ type: 'array',
597
+ arrayItemType: 'record',
598
+ description: 'Creatures in encounter (ID and count)',
599
+ },
600
+ {
601
+ name: 'total_xp',
602
+ type: 'number',
603
+ description: 'Total XP for the encounter',
604
+ },
605
+ {
606
+ name: 'adjusted_xp',
607
+ type: 'number',
608
+ description: 'Adjusted XP based on number of creatures',
609
+ },
610
+ {
611
+ name: 'treasure',
612
+ type: 'array',
613
+ arrayItemType: 'string',
614
+ description: 'Treasure and rewards',
615
+ },
616
+ {
617
+ name: 'tactics',
618
+ type: 'string',
619
+ description: 'Enemy tactics and strategy',
620
+ },
621
+ {
622
+ name: 'environmental_effects',
623
+ type: 'array',
624
+ arrayItemType: 'string',
625
+ description: 'Environmental hazards or effects',
626
+ },
627
+ {
628
+ name: 'quest',
629
+ type: 'string',
630
+ description: 'Related quest ID',
631
+ },
632
+ {
633
+ name: 'status',
634
+ type: 'enum',
635
+ enumValues: ['planned', 'active', 'completed', 'skipped'],
636
+ description: 'Encounter status',
637
+ },
638
+ ],
639
+ },
640
+ // Session log entity type
641
+ {
642
+ name: 'session',
643
+ displayName: 'Session',
644
+ pluralName: 'Sessions',
645
+ description: 'Game session logs and notes',
646
+ icon: 'book-open',
647
+ fields: [
648
+ {
649
+ name: 'name',
650
+ type: 'string',
651
+ required: true,
652
+ description: 'Session title',
653
+ },
654
+ {
655
+ name: 'session_number',
656
+ type: 'number',
657
+ description: 'Session number in campaign',
658
+ },
659
+ {
660
+ name: 'date_played',
661
+ type: 'date',
662
+ description: 'Real-world date session was played',
663
+ },
664
+ {
665
+ name: 'in_game_date',
666
+ type: 'string',
667
+ description: 'In-game date/time',
668
+ },
669
+ {
670
+ name: 'players_present',
671
+ type: 'array',
672
+ arrayItemType: 'string',
673
+ description: 'Player character IDs present',
674
+ },
675
+ {
676
+ name: 'npcs_encountered',
677
+ type: 'array',
678
+ arrayItemType: 'string',
679
+ description: 'NPC IDs encountered',
680
+ },
681
+ {
682
+ name: 'locations_visited',
683
+ type: 'array',
684
+ arrayItemType: 'string',
685
+ description: 'Location IDs visited',
686
+ },
687
+ {
688
+ name: 'quests_advanced',
689
+ type: 'array',
690
+ arrayItemType: 'string',
691
+ description: 'Quest IDs that progressed',
692
+ },
693
+ {
694
+ name: 'encounters',
695
+ type: 'array',
696
+ arrayItemType: 'string',
697
+ description: 'Encounter IDs that occurred',
698
+ },
699
+ {
700
+ name: 'loot_gained',
701
+ type: 'array',
702
+ arrayItemType: 'string',
703
+ description: 'Items gained',
704
+ },
705
+ {
706
+ name: 'xp_gained',
707
+ type: 'number',
708
+ description: 'Total XP gained',
709
+ },
710
+ {
711
+ name: 'summary',
712
+ type: 'string',
713
+ description: 'Brief session summary',
714
+ },
715
+ {
716
+ name: 'dm_notes',
717
+ type: 'string',
718
+ description: 'Private DM notes',
719
+ },
720
+ {
721
+ name: 'next_session_hooks',
722
+ type: 'array',
723
+ arrayItemType: 'string',
724
+ description: 'Plot hooks for next session',
725
+ },
726
+ ],
727
+ },
728
+ ],
729
+ relationshipTypes: [
730
+ // Character-Spell relationships
731
+ {
732
+ id: 'knows_spell',
733
+ displayName: 'Knows Spell',
734
+ description: 'Character knows this spell',
735
+ sourceTypes: ['character'],
736
+ targetTypes: ['spell'],
737
+ bidirectional: true,
738
+ reverseId: 'known_by',
739
+ },
740
+ {
741
+ id: 'known_by',
742
+ displayName: 'Known By',
743
+ description: 'Spell is known by character',
744
+ sourceTypes: ['spell'],
745
+ targetTypes: ['character'],
746
+ bidirectional: false,
747
+ },
748
+ // Character-Class relationships
749
+ {
750
+ id: 'has_class',
751
+ displayName: 'Has Class',
752
+ description: 'Character has levels in this class',
753
+ sourceTypes: ['character'],
754
+ targetTypes: ['class'],
755
+ bidirectional: true,
756
+ reverseId: 'class_of',
757
+ },
758
+ {
759
+ id: 'class_of',
760
+ displayName: 'Class Of',
761
+ description: 'Class belongs to character',
762
+ sourceTypes: ['class'],
763
+ targetTypes: ['character'],
764
+ bidirectional: false,
765
+ },
766
+ // Character party relationships
767
+ {
768
+ id: 'in_party_with',
769
+ displayName: 'In Party With',
770
+ description: 'Characters adventuring together',
771
+ sourceTypes: ['character'],
772
+ targetTypes: ['character'],
773
+ bidirectional: true,
774
+ reverseId: 'in_party_with',
775
+ },
776
+ // Class-Subclass relationships
777
+ {
778
+ id: 'has_subclass',
779
+ displayName: 'Has Subclass',
780
+ description: 'Class has this subclass option',
781
+ sourceTypes: ['class'],
782
+ targetTypes: ['subclass'],
783
+ bidirectional: true,
784
+ reverseId: 'subclass_of',
785
+ },
786
+ {
787
+ id: 'subclass_of',
788
+ displayName: 'Subclass Of',
789
+ description: 'Subclass belongs to this class',
790
+ sourceTypes: ['subclass'],
791
+ targetTypes: ['class'],
792
+ bidirectional: false,
793
+ },
794
+ // Class-Spell relationships
795
+ {
796
+ id: 'grants_spell',
797
+ displayName: 'Grants Spell',
798
+ description: 'Class grants access to this spell',
799
+ sourceTypes: ['class', 'subclass'],
800
+ targetTypes: ['spell'],
801
+ bidirectional: true,
802
+ reverseId: 'granted_by',
803
+ },
804
+ {
805
+ id: 'granted_by',
806
+ displayName: 'Granted By',
807
+ description: 'Spell is granted by this class',
808
+ sourceTypes: ['spell'],
809
+ targetTypes: ['class', 'subclass'],
810
+ bidirectional: false,
811
+ },
812
+ // Session relationships
813
+ {
814
+ id: 'occurred_in_session',
815
+ displayName: 'Occurred In Session',
816
+ description: 'Event occurred during this session',
817
+ sourceTypes: ['event', 'encounter'],
818
+ targetTypes: ['session'],
819
+ bidirectional: true,
820
+ reverseId: 'session_contains',
821
+ },
822
+ {
823
+ id: 'session_contains',
824
+ displayName: 'Session Contains',
825
+ description: 'Session contains this event',
826
+ sourceTypes: ['session'],
827
+ targetTypes: ['event', 'encounter'],
828
+ bidirectional: false,
829
+ },
830
+ // Encounter relationships
831
+ {
832
+ id: 'encounter_at',
833
+ displayName: 'Encounter At',
834
+ description: 'Encounter takes place at location',
835
+ sourceTypes: ['encounter'],
836
+ targetTypes: ['location'],
837
+ bidirectional: true,
838
+ reverseId: 'has_encounter',
839
+ },
840
+ {
841
+ id: 'has_encounter',
842
+ displayName: 'Has Encounter',
843
+ description: 'Location has this encounter',
844
+ sourceTypes: ['location'],
845
+ targetTypes: ['encounter'],
846
+ bidirectional: false,
847
+ },
848
+ {
849
+ id: 'encounter_includes',
850
+ displayName: 'Encounter Includes',
851
+ description: 'Encounter includes this creature',
852
+ sourceTypes: ['encounter'],
853
+ targetTypes: ['creature'],
854
+ bidirectional: true,
855
+ reverseId: 'appears_in_encounter',
856
+ },
857
+ {
858
+ id: 'appears_in_encounter',
859
+ displayName: 'Appears In Encounter',
860
+ description: 'Creature appears in this encounter',
861
+ sourceTypes: ['creature'],
862
+ targetTypes: ['encounter'],
863
+ bidirectional: false,
864
+ },
865
+ ],
866
+ folderMappings: [
867
+ // Spell mappings
868
+ { folder: '**/Spells/**', types: ['spell'] },
869
+ { folder: '**/Magic/**', types: ['spell', 'lore'] },
870
+ { folder: '**/Cantrips/**', types: ['spell'] },
871
+ // Class mappings
872
+ { folder: '**/Classes/**', types: ['class'] },
873
+ { folder: '**/Subclasses/**', types: ['subclass'] },
874
+ { folder: '**/Archetypes/**', types: ['subclass'] },
875
+ // Session mappings
876
+ { folder: '**/Sessions/**', types: ['session'] },
877
+ { folder: '**/Session Logs/**', types: ['session'] },
878
+ { folder: '**/Game Logs/**', types: ['session'] },
879
+ // Encounter mappings
880
+ { folder: '**/Encounters/**', types: ['encounter'] },
881
+ { folder: '**/Combat/**', types: ['encounter'] },
882
+ { folder: '**/Battles/**', types: ['encounter'] },
883
+ // Player character folder
884
+ { folder: '**/PCs/**', types: ['character'] },
885
+ { folder: '**/Player Characters/**', types: ['character'] },
886
+ { folder: '**/Party/**', types: ['character'] },
887
+ ],
888
+ };
889
+ //# sourceMappingURL=ttrpg-base.js.map