@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.
- package/README.md +89 -309
- package/dist/cli/fix/fixer.js +1 -1
- package/dist/cli/fix/fixer.js.map +1 -1
- package/dist/cli/fix/writer.d.ts.map +1 -1
- package/dist/cli/fix/writer.js +75 -3
- package/dist/cli/fix/writer.js.map +1 -1
- package/dist/cli/init/output.d.ts.map +1 -1
- package/dist/cli/init/output.js +6 -5
- package/dist/cli/init/output.js.map +1 -1
- package/dist/cli/validate/formatter.d.ts.map +1 -1
- package/dist/cli/validate/formatter.js +16 -0
- package/dist/cli/validate/formatter.js.map +1 -1
- package/dist/cli/validate/types.d.ts +3 -0
- package/dist/cli/validate/types.d.ts.map +1 -1
- package/dist/cli/validate/validator.d.ts.map +1 -1
- package/dist/cli/validate/validator.js +32 -1
- package/dist/cli/validate/validator.js.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/graph/database.d.ts +152 -0
- package/dist/graph/database.d.ts.map +1 -1
- package/dist/graph/database.js +418 -30
- package/dist/graph/database.js.map +1 -1
- package/dist/mcp/graph-tools.d.ts +78 -0
- package/dist/mcp/graph-tools.d.ts.map +1 -0
- package/dist/mcp/graph-tools.js +284 -0
- package/dist/mcp/graph-tools.js.map +1 -0
- package/dist/mcp/timeline-tools.d.ts +116 -0
- package/dist/mcp/timeline-tools.d.ts.map +1 -0
- package/dist/mcp/timeline-tools.js +317 -0
- package/dist/mcp/timeline-tools.js.map +1 -0
- package/dist/search/engine.d.ts +186 -0
- package/dist/search/engine.d.ts.map +1 -1
- package/dist/search/engine.js +263 -0
- package/dist/search/engine.js.map +1 -1
- package/dist/server.d.ts +52 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +472 -0
- package/dist/server.js.map +1 -1
- package/dist/templates/builtin/worldbuilding.d.ts.map +1 -1
- package/dist/templates/builtin/worldbuilding.js +401 -1
- package/dist/templates/builtin/worldbuilding.js.map +1 -1
- package/dist/templates/community/dnd-35e.d.ts +18 -0
- package/dist/templates/community/dnd-35e.d.ts.map +1 -0
- package/dist/templates/community/dnd-35e.js +859 -0
- package/dist/templates/community/dnd-35e.js.map +1 -0
- package/dist/templates/community/dnd-5e.d.ts +16 -0
- package/dist/templates/community/dnd-5e.d.ts.map +1 -0
- package/dist/templates/community/dnd-5e.js +509 -0
- package/dist/templates/community/dnd-5e.js.map +1 -0
- package/dist/templates/community/index.d.ts +9 -0
- package/dist/templates/community/index.d.ts.map +1 -1
- package/dist/templates/community/index.js +16 -0
- package/dist/templates/community/index.js.map +1 -1
- package/dist/templates/community/pathfinder-2e.d.ts +16 -0
- package/dist/templates/community/pathfinder-2e.d.ts.map +1 -0
- package/dist/templates/community/pathfinder-2e.js +711 -0
- package/dist/templates/community/pathfinder-2e.js.map +1 -0
- package/dist/templates/community/ttrpg-base.d.ts +17 -0
- package/dist/templates/community/ttrpg-base.d.ts.map +1 -0
- package/dist/templates/community/ttrpg-base.js +889 -0
- package/dist/templates/community/ttrpg-base.js.map +1 -0
- package/dist/templates/loader.d.ts +2 -0
- package/dist/templates/loader.d.ts.map +1 -1
- package/dist/templates/loader.js +45 -1
- package/dist/templates/loader.js.map +1 -1
- package/dist/templates/registry.d.ts +49 -2
- package/dist/templates/registry.d.ts.map +1 -1
- package/dist/templates/registry.js +276 -6
- package/dist/templates/registry.js.map +1 -1
- package/dist/templates/types.d.ts +28 -1
- package/dist/templates/types.d.ts.map +1 -1
- package/dist/templates/validator.d.ts +80 -1
- package/dist/templates/validator.d.ts.map +1 -1
- package/dist/templates/validator.js +22 -5
- package/dist/templates/validator.js.map +1 -1
- package/dist/types/index.d.ts +18 -18
- 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
|