@h4shed/skill-underworld-writer 1.0.0

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/LICENSE.txt ADDED
@@ -0,0 +1,52 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+
4
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
5
+
6
+ 1. Definitions.
7
+
8
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined in Sections 1 through 9 of this document.
9
+
10
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
11
+
12
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
13
+
14
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
15
+
16
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
17
+
18
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
19
+
20
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
21
+
22
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
23
+
24
+ "Contribution" shall mean any work of authorship, including the original Work and any Derivative Works thereof, submitted to, or received by, Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
25
+
26
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
27
+
28
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
29
+
30
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work.
31
+
32
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
33
+
34
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
35
+
36
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
37
+
38
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
39
+
40
+ (d) If the Work includes a "NOTICE" text file that includes a notice of third-party acknowledgments, then any Derivative Works that You include must include a readable copy of such attribution notices contained within the NOTICE file.
41
+
42
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions.
43
+
44
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work.
45
+
46
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
47
+
48
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work.
49
+
50
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License.
51
+
52
+ END OF TERMS AND CONDITIONS
package/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # @fused-gaming/skill-underworld-writer
2
+
3
+ A creative skill for developing characters and narratives in underworld-themed fiction. Provides a three-phase structured methodology for character and narrative development.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @fused-gaming/skill-underworld-writer
9
+ ```
10
+
11
+ ## Tools
12
+
13
+ ### `create-character`
14
+
15
+ Create detailed character profiles using the three-phase methodology:
16
+ 1. **Character Foundation** - Identity, origin, characteristics, background
17
+ 2. **Underworld Integration** - Role, motivations, relationships, powers
18
+ 3. **Narrative Architecture** - Mythology, hierarchies, conflicts, themes
19
+
20
+ ## Use Cases
21
+
22
+ - 📖 Underworld character development
23
+ - 🌍 Mythology and world-building
24
+ - 🎭 Narrative architecture
25
+ - 🔮 Character-driven storytelling
26
+
27
+ ## Implementation Status
28
+
29
+ - ✅ Skill definition and methodology
30
+ - ✅ Sample characters and examples
31
+ - ✅ Test fixtures for validation
32
+ - ✅ Full specification compliance
package/SAMPLE_DATA.md ADDED
@@ -0,0 +1,245 @@
1
+ # Sample Characters - Underworld Writer Skill
2
+
3
+ ## Sample Character 1: Morrigan the Shadow Weaver
4
+
5
+ ### Phase 1: Character Foundation
6
+
7
+ **Name & Identity**: Morrigan Blackthorn (nÊe Shadowborn)
8
+ - Aliases: The Raven's Mistress, Shadow Weaver, Lady of Crows
9
+ - Identity Conflict: Torn between her origin as a Shadowborn and adopted role as keeper of the Veil
10
+
11
+ **Origin**: Born in the Twilight Realm between worlds, daughter of a Shadowborn elder and a mortal priestess
12
+
13
+ **Physical Characteristics**:
14
+ - Appearance: Tall, pale skin with iridescent black hair, silver eyes that reflect light like crow feathers
15
+ - Distinctive Features: Raven tattoos that move across her skin, shadow that moves independently
16
+ - Transformation: Can merge with shadows, become incorporeal
17
+
18
+ **Background**:
19
+ - Raised between two worlds until age 18 when Shadowborn war forced her to choose
20
+ - Spent 200 years learning the craft of shadow manipulation from the First Weavers
21
+ - Witnessed the Fall of the Third Underworld
22
+
23
+ **Core Motivation**: Prevent another Great War by maintaining balance between realms
24
+
25
+ ### Phase 2: Underworld Integration
26
+
27
+ **Role & Rank**: Keeper of the Veil, Council Elder (Position 4 of 7)
28
+ - Responsibilities: Manage boundary between worlds, enforce Treaty of Shadows
29
+
30
+ **Faction Affiliation**:
31
+ - Primary: The Shadow Council (ruling body)
32
+ - Allies: House Raven, The Twilight Guard
33
+ - Opposition: The Sunlight Conspiracy
34
+
35
+ **Powers & Abilities**:
36
+ - Shadow manipulation and weaving
37
+ - Cross-realm sight (can see all three realms simultaneously)
38
+ - Enchantment and binding magic
39
+ - Immortal lifespan with regeneration
40
+ - Limitation: Cannot act directly under sunlight, must work through intermediaries
41
+
42
+ **Relationships**:
43
+ - Lysander (ally, romantic tension) - Leader of House Raven
44
+ - Kael (enemy) - Head of Sunlight Conspiracy
45
+ - Theron (protÊgÊ) - Young Shadow Weaver she's training
46
+ - The First Weaver (mentor figure, deceased 50 years)
47
+
48
+ **Resources**:
49
+ - Shadowveil Tower (personal seat of power)
50
+ - 500+ shadow constructs under command
51
+ - Ancient Codex of Shadow Binding
52
+ - Network of spies across three realms
53
+
54
+ ### Phase 3: Narrative Architecture
55
+
56
+ **Mythological Foundation**:
57
+ - Created by the Old Shadow God in the First Age
58
+ - Key figure in the Treaty of Shadows (350 years ago)
59
+ - Prophecy: "When shadow doubts, the realms shall crack"
60
+
61
+ **Hierarchies & Conflicts**:
62
+ - Internal: Disagrees with Council about aggression toward mortal world
63
+ - External: Enemies believe her methods are too soft
64
+ - Political: Struggling to maintain power as younger Shadow Weavers rise
65
+
66
+ **Story Arc**:
67
+ - Act 1: Discovers a hidden threat to the Treaty
68
+ - Act 2: Must choose between Council loyalty and greater good
69
+ - Act 3: Potential sacrifice to save all three realms
70
+
71
+ **Thematic Elements**:
72
+ - Balance and equilibrium
73
+ - Duty vs. personal desire
74
+ - The cost of immortality and power
75
+ - Hidden strength in darkness
76
+
77
+ **Interaction Points**:
78
+ - Central character who knows all factions
79
+ - Can reveal underworld mysteries to human characters
80
+ - Potential antagonist if betrayed
81
+ - Romantic subplot potential with Lysander
82
+
83
+ ---
84
+
85
+ ## Sample Character 2: Theron Nightborn
86
+
87
+ ### Phase 1: Character Foundation
88
+
89
+ **Name & Identity**: Theron Nightborn (adopted name)
90
+ - Born name: Unknown, raised by Shadow Council
91
+ - Aliases: The Midnight Apprentice, Ghost-Touched, Void-Speaker
92
+
93
+ **Origin**: Found as infant abandoned at the boundary between Shadow Realm and Mortal World
94
+
95
+ **Physical Characteristics**:
96
+ - Appearance: Young (appears ~25 years), lean build, dark skin with silver veins
97
+ - Distinctive Features: Eyes change color with emotion (blue to black), leaves shadow trails
98
+ - Transformation: Partial shadow form (incomplete, still developing)
99
+
100
+ **Background**:
101
+ - No memory of parents or mortal life
102
+ - Raised by Morrigan for 30 years
103
+ - First human-born student to successfully wield shadow magic
104
+ - Struggles with questions about true identity
105
+
106
+ **Core Motivation**: Prove himself worthy of shadow magic despite mortal heritage
107
+
108
+ ### Phase 2: Underworld Integration
109
+
110
+ **Role & Rank**: Apprentice Shadow Weaver, unranked (seeking Council recognition)
111
+ - Responsibilities: Field reconnaissance, enforcement of minor shadow contracts
112
+
113
+ **Faction Affiliation**:
114
+ - Primary: House Raven (through Morrigan's patronage)
115
+ - Mentorship: Direct student of Morrigan Blackthorn
116
+ - Tensions: Many pure-blood Shadowborn view him with suspicion
117
+
118
+ **Powers & Abilities**:
119
+ - Emerging shadow manipulation (80% mastery)
120
+ - Shadow speak (communication through darkness)
121
+ - Enhanced night vision and shadow sight
122
+ - Partial shadow transformation (incomplete)
123
+ - Limitation: Cannot sustain shadow form longer than 1 hour, mortal blood limits power scaling
124
+
125
+ **Relationships**:
126
+ - Morrigan (mentor, guardian figure)
127
+ - Sera (fellow apprentice, romantic interest)
128
+ - Valdris (Pure-blood rival)
129
+ - Unknown past (secret biological connection to Sunlight Conspiracy)
130
+
131
+ **Resources**:
132
+ - Apprentice's Shadow Blade
133
+ - Access to House Raven archives
134
+ - Morrigan's protection and reputation
135
+ - Small personal shadow constructs
136
+
137
+ ### Phase 3: Narrative Architecture
138
+
139
+ **Mythological Foundation**:
140
+ - Fulfills prophecy: "The half-born shall bridge the worlds"
141
+ - First successful human shadow mage in recorded history
142
+
143
+ **Hierarchies & Conflicts**:
144
+ - Internal: Identity crisis - is he Shadowborn or human?
145
+ - External: Pure-bloods see him as threat or abomination
146
+ - Political: Pawn in larger games between Houses
147
+
148
+ **Story Arc**:
149
+ - Act 1: Discovers hidden past and connection to enemy faction
150
+ - Act 2: Must choose between heritage and convictions
151
+ - Act 3: Becomes bridge between warring factions or tragic casualty
152
+
153
+ **Thematic Elements**:
154
+ - Belonging and identity
155
+ - Breaking barriers and prejudice
156
+ - Potential and limitation
157
+ - Coming of age in dangerous world
158
+
159
+ **Interaction Points**:
160
+ - Player character could be apprentice alongside him
161
+ - Potential guide/mentor to outsiders
162
+ - Key to understanding human-Shadowborn relations
163
+ - Catalyst for major plot developments
164
+
165
+ ---
166
+
167
+ ## Sample Character 3: Valdris the Corrupted
168
+
169
+ ### Phase 1: Character Foundation
170
+
171
+ **Name & Identity**: Valdris Shadowborn (Pure-blood 15 generations)
172
+ - Aliases: The Tainted Elder, Void-Eater, The Betrayer
173
+ - Identity: Identifies as pure-blood supremacist despite moral corruption
174
+
175
+ **Origin**: Ancient Shadow House (House Valdris, now fallen)
176
+
177
+ **Physical Characteristics**:
178
+ - Appearance: Tall, androgynous, shadow-black skin with void-like depths
179
+ - Distinctive Features: Corrupted shadow-form (twisted, wrong), eyes contain moving darkness
180
+ - Transformation: Complete shadow transformation (permanently damaged, source of corruption)
181
+
182
+ **Background**:
183
+ - Born to ultimate privilege as eldest of ancient house
184
+ - Overexposed to shadow magic, became corrupted 300 years ago
185
+ - Exiled from Shadow Council, now operates in darkness
186
+ - Seeks to prove pure-blood superiority
187
+
188
+ **Core Motivation**: Reclaim power and prove Shadowborn supremacy; destroy those who stand in his way
189
+
190
+ ### Phase 2: Underworld Integration
191
+
192
+ **Role & Rank**: Exiled Noble, Leader of Splinter Faction (The Void Collective)
193
+ - Responsibilities: Command his followers, grow shadow corruption as weapon
194
+
195
+ **Faction Affiliation**:
196
+ - Primary: The Void Collective (his own splinter group)
197
+ - Enemy of: Shadow Council, House Raven, most established powers
198
+ - Secretly allied with: Sunlight Conspiracy (working toward mutual destruction)
199
+
200
+ **Powers & Abilities**:
201
+ - Master-level shadow manipulation
202
+ - Shadow corruption (ability to corrupt other Shadowborn)
203
+ - Void creation (consuming shadows, creating dead zones)
204
+ - Immortal but decaying (corruption eating him from inside)
205
+ - Limitation: Corruption spreading, losing control, increasingly unstable
206
+
207
+ **Relationships**:
208
+ - Morrigan (ancient enemy, personal vendetta)
209
+ - Theron (symbolic enemy - everything Valdris despises)
210
+ - Kael (pragmatic ally)
211
+ - Other Void Collective members (cultish devotion)
212
+
213
+ **Resources**:
214
+ - Hidden fortress in Corruption Zone
215
+ - Hundreds of corrupted Shadowborn servants
216
+ - Ancient forbidden texts on void magic
217
+ - Stolen Council artifacts
218
+
219
+ ### Phase 3: Narrative Architecture
220
+
221
+ **Mythological Foundation**:
222
+ - Represents the Shadow Fall prophecy - corruption that eats power from within
223
+ - Key to understanding how shadow magic can be weaponized destructively
224
+
225
+ **Hierarchies & Conflicts**:
226
+ - Internal: Corruption slowly destroying him, followers beginning to question
227
+ - External: Hunted by Shadow Council
228
+ - Personal: Consuming hatred for those who exiled him
229
+
230
+ **Story Arc**:
231
+ - Act 1: Emerges as mysterious threat, origins unknown to protagonists
232
+ - Act 2: Orchestrates major crisis, attempts to spread corruption
233
+ - Act 3: Ultimate sacrifice or tragic victory depending on player choices
234
+
235
+ **Thematic Elements**:
236
+ - Corruption and moral decay
237
+ - Consequences of pride and privilege
238
+ - Power's destructive nature
239
+ - Fall from grace
240
+
241
+ **Interaction Points**:
242
+ - Primary antagonist or potential redeemable character
243
+ - Reveals underworld politics through his vendetta
244
+ - Forces moral choices on player characters
245
+ - Represents what Shadowborn can become without balance
package/SKILL.md ADDED
@@ -0,0 +1,57 @@
1
+ # Underworld Writer Skill
2
+
3
+ ## Overview
4
+
5
+ The Underworld Writer Skill provides a structured three-phase methodology for creating detailed character profiles, mythologies, and narrative worlds for underworld-themed fiction. This skill enables creators to develop rich, cohesive underworld narratives through systematic character development.
6
+
7
+ ## Three-Phase Methodology
8
+
9
+ ### Phase 1: Character Foundation
10
+
11
+ Establish the core identity and baseline characteristics of your character.
12
+
13
+ **Components:**
14
+ - **Name & Identity**: Full name, aliases, identity conflicts
15
+ - **Origin**: Birthplace, family lineage, cultural background
16
+ - **Physical Characteristics**: Appearance, distinctive features, transformation abilities
17
+ - **Background**: Life events, formative experiences, turning points
18
+ - **Core Motivation**: Primary goals, fears, desires
19
+
20
+ ### Phase 2: Underworld Integration
21
+
22
+ Integrate the character into underworld systems and hierarchies.
23
+
24
+ **Components:**
25
+ - **Role & Rank**: Position in underworld hierarchy, responsibilities
26
+ - **Faction Affiliation**: Which group/organization they serve or oppose
27
+ - **Powers & Abilities**: Supernatural abilities, skills, limitations
28
+ - **Relationships**: Allies, enemies, complicated relationships within underworld
29
+ - **Resources**: Territory, followers, magical artifacts, wealth
30
+
31
+ ### Phase 3: Narrative Architecture
32
+
33
+ Place the character within larger mythology and story systems.
34
+
35
+ **Components:**
36
+ - **Mythological Foundation**: Connected myths, ancient origins
37
+ - **Hierarchies & Conflicts**: Position in power structures, rivalries
38
+ - **Story Arc**: Character journey, potential transformations
39
+ - **Thematic Elements**: What this character represents symbolically
40
+ - **Interaction Points**: How they intersect with other characters and plot
41
+
42
+ ## Success Criteria
43
+
44
+ - All three phases are comprehensively developed
45
+ - Character feels integrated into underworld setting
46
+ - Clear motivation and conflict points established
47
+ - Consistent with broader mythology and lore
48
+ - Detailed enough for narrative development
49
+
50
+ ## Example Output
51
+
52
+ A complete character profile includes:
53
+ - 2-3 page character document
54
+ - Relationship map showing connections
55
+ - Mythology and backstory
56
+ - Story arc outline
57
+ - Integration points with world-building
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@h4shed/skill-underworld-writer",
3
+ "version": "1.0.0",
4
+ "description": "Create detailed character profiles, mythologies, and narrative worlds for underworld-themed stories",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "exports": {
8
+ ".": "./dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc --project tsconfig.json",
12
+ "dev": "tsc --project tsconfig.json --watch",
13
+ "test": "echo \"No tests yet\""
14
+ },
15
+ "dependencies": {
16
+ "@h4shed/mcp-core": "*"
17
+ },
18
+ "devDependencies": {
19
+ "@types/node": "^20.12.0",
20
+ "typescript": "^5.3.2"
21
+ },
22
+ "keywords": [
23
+ "mcp",
24
+ "skill",
25
+ "underworld",
26
+ "character",
27
+ "narrative",
28
+ "creative-writing"
29
+ ],
30
+ "author": "Fused Gaming",
31
+ "license": "Apache-2.0"
32
+ }
package/src/index.ts ADDED
@@ -0,0 +1,304 @@
1
+ /**
2
+ * Underworld Writer Skill
3
+ *
4
+ * A creative skill for developing characters and narratives in underworld-themed fiction.
5
+ * Provides a three-phase structured methodology for character and narrative development.
6
+ */
7
+
8
+ // Character Foundation Phase Types
9
+ interface CharacterFoundation {
10
+ name: string;
11
+ aliases: string[];
12
+ origin: string;
13
+ physicalCharacteristics: {
14
+ appearance: string;
15
+ distinctiveFeatures: string;
16
+ transformationAbilities?: string;
17
+ };
18
+ background: string;
19
+ coreMotivation: string;
20
+ }
21
+
22
+ // Underworld Integration Phase Types
23
+ interface UnderworldIntegration {
24
+ roleAndRank: string;
25
+ responsibilities: string[];
26
+ factionAffiliation: {
27
+ primary: string;
28
+ allies: string[];
29
+ opposition: string[];
30
+ };
31
+ powersAndAbilities: {
32
+ abilities: string[];
33
+ limitations: string[];
34
+ };
35
+ relationships: {
36
+ name: string;
37
+ type: 'ally' | 'enemy' | 'mentor' | 'protÊgÊ' | 'rival' | 'romantic' | 'complicated';
38
+ description: string;
39
+ }[];
40
+ resources: {
41
+ territory?: string;
42
+ followers?: number;
43
+ artifacts?: string[];
44
+ wealth?: string;
45
+ };
46
+ }
47
+
48
+ // Narrative Architecture Phase Types
49
+ interface NarrativeArchitecture {
50
+ mythologicalFoundation: string;
51
+ hierarchiesAndConflicts: {
52
+ internal: string[];
53
+ external: string[];
54
+ personal: string[];
55
+ };
56
+ storyArc: {
57
+ act1: string;
58
+ act2: string;
59
+ act3: string;
60
+ };
61
+ thematicElements: string[];
62
+ interactionPoints: string[];
63
+ }
64
+
65
+ // Complete Character Profile
66
+ export interface UnderWorldCharacter {
67
+ phase1: CharacterFoundation;
68
+ phase2: UnderworldIntegration;
69
+ phase3: NarrativeArchitecture;
70
+ metadata: {
71
+ characterType: string;
72
+ developmentLevel: 'concept' | 'developing' | 'complete';
73
+ complexity: 'simple' | 'moderate' | 'complex';
74
+ createdDate: string;
75
+ lastModified: string;
76
+ };
77
+ }
78
+
79
+ // Validation result type
80
+ interface ValidationResult {
81
+ isValid: boolean;
82
+ completeness: number;
83
+ errors: string[];
84
+ warnings: string[];
85
+ suggestions: string[];
86
+ }
87
+
88
+ /**
89
+ * Creates a new underworld character using the three-phase methodology
90
+ */
91
+ export function createCharacter(
92
+ foundation: CharacterFoundation,
93
+ integration: UnderworldIntegration,
94
+ narrative: NarrativeArchitecture
95
+ ): UnderWorldCharacter {
96
+ return {
97
+ phase1: foundation,
98
+ phase2: integration,
99
+ phase3: narrative,
100
+ metadata: {
101
+ characterType: 'underworld',
102
+ developmentLevel: 'complete',
103
+ complexity: 'complex',
104
+ createdDate: new Date().toISOString(),
105
+ lastModified: new Date().toISOString(),
106
+ },
107
+ };
108
+ }
109
+
110
+ /**
111
+ * Validates a character profile across all three phases
112
+ */
113
+ export function validateCharacter(character: Partial<UnderWorldCharacter>): ValidationResult {
114
+ const errors: string[] = [];
115
+ const warnings: string[] = [];
116
+ const suggestions: string[] = [];
117
+
118
+ // Validate Phase 1: Character Foundation
119
+ if (character.phase1) {
120
+ const p1 = character.phase1;
121
+ if (!p1.name) errors.push('Phase 1: Character name is required');
122
+ if (!p1.origin) errors.push('Phase 1: Origin is required');
123
+ if (!p1.coreMotivation) errors.push('Phase 1: Core motivation is required');
124
+ } else {
125
+ warnings.push('Phase 1: Character Foundation not provided');
126
+ }
127
+
128
+ // Validate Phase 2: Underworld Integration
129
+ if (character.phase2) {
130
+ const p2 = character.phase2;
131
+ if (!p2.roleAndRank) errors.push('Phase 2: Role and rank is required');
132
+ if (!p2.factionAffiliation?.primary) errors.push('Phase 2: Primary faction is required');
133
+ if (!p2.relationships || p2.relationships.length < 3) {
134
+ warnings.push('Phase 2: Consider adding at least 3 relationships for depth');
135
+ }
136
+ if (!p2.powersAndAbilities?.limitations || p2.powersAndAbilities.limitations.length === 0) {
137
+ suggestions.push('Phase 2: Add limitations to balance character power');
138
+ }
139
+ } else {
140
+ warnings.push('Phase 2: Underworld Integration not provided');
141
+ }
142
+
143
+ // Validate Phase 3: Narrative Architecture
144
+ if (character.phase3) {
145
+ const p3 = character.phase3;
146
+ if (!p3.mythologicalFoundation) warnings.push('Phase 3: Mythological foundation strengthens narrative');
147
+ if (!p3.storyArc?.act1 || !p3.storyArc?.act2 || !p3.storyArc?.act3) {
148
+ errors.push('Phase 3: Complete story arc required (Act 1, 2, 3)');
149
+ }
150
+ if (!p3.thematicElements || p3.thematicElements.length === 0) {
151
+ suggestions.push('Phase 3: Add thematic elements to deepen character significance');
152
+ }
153
+ } else {
154
+ warnings.push('Phase 3: Narrative Architecture not provided');
155
+ }
156
+
157
+ // Calculate completeness score
158
+ let completenessScore = 0;
159
+ if (character.phase1) completenessScore += 33;
160
+ if (character.phase2) completenessScore += 33;
161
+ if (character.phase3) completenessScore += 34;
162
+
163
+ return {
164
+ isValid: errors.length === 0,
165
+ completeness: completenessScore,
166
+ errors,
167
+ warnings,
168
+ suggestions,
169
+ };
170
+ }
171
+
172
+ /**
173
+ * Generate a character summary for quick reference
174
+ */
175
+ export function generateCharacterSummary(character: UnderWorldCharacter): string {
176
+ const { phase1, phase2, phase3 } = character;
177
+
178
+ return `
179
+ === ${phase1.name} ===
180
+
181
+ FOUNDATION:
182
+ - Origin: ${phase1.origin}
183
+ - Motivation: ${phase1.coreMotivation}
184
+
185
+ INTEGRATION:
186
+ - Role: ${phase2.roleAndRank}
187
+ - Primary Faction: ${phase2.factionAffiliation.primary}
188
+ - Key Relationships: ${phase2.relationships.slice(0, 3).map(r => r.name).join(', ')}
189
+ - Notable Abilities: ${phase2.powersAndAbilities.abilities.slice(0, 2).join(', ')}
190
+
191
+ NARRATIVE:
192
+ - Story Arc: ${phase3.storyArc.act1} → ${phase3.storyArc.act2} → ${phase3.storyArc.act3}
193
+ - Key Themes: ${phase3.thematicElements.slice(0, 2).join(', ')}
194
+ `;
195
+ }
196
+
197
+ /**
198
+ * Check relationship consistency between two characters
199
+ */
200
+ export function validateRelationships(
201
+ character1: UnderWorldCharacter,
202
+ character2: UnderWorldCharacter
203
+ ): { consistent: boolean; notes: string[] } {
204
+ const notes: string[] = [];
205
+
206
+ const rel1 = character1.phase2.relationships.find(r => r.name === character2.phase1.name);
207
+ const rel2 = character2.phase2.relationships.find(r => r.name === character1.phase1.name);
208
+
209
+ if (rel1 && rel2) {
210
+ if (rel1.type === 'ally' && rel2.type === 'enemy') {
211
+ notes.push('Relationship types are contradictory between characters');
212
+ }
213
+ notes.push(`Confirmed bidirectional relationship: ${rel1.type}`);
214
+ } else if (rel1 || rel2) {
215
+ notes.push('One-directional relationship detected');
216
+ }
217
+
218
+ return {
219
+ consistent: notes.length === 0 || notes[0].includes('Confirmed'),
220
+ notes,
221
+ };
222
+ }
223
+
224
+ /**
225
+ * Export character as formatted documentation
226
+ */
227
+ export function exportCharacterAsMarkdown(character: UnderWorldCharacter): string {
228
+ const { phase1, phase2, phase3 } = character;
229
+
230
+ return `# ${phase1.name}
231
+
232
+ ## Phase 1: Character Foundation
233
+
234
+ ### Identity
235
+ - **Aliases**: ${phase1.aliases.join(', ')}
236
+
237
+ ### Origin
238
+ ${phase1.origin}
239
+
240
+ ### Characteristics
241
+ ${phase1.physicalCharacteristics.appearance}
242
+
243
+ ${phase1.physicalCharacteristics.distinctiveFeatures && `**Distinctive Features**: ${phase1.physicalCharacteristics.distinctiveFeatures}`}
244
+
245
+ ### Background
246
+ ${phase1.background}
247
+
248
+ ### Core Motivation
249
+ ${phase1.coreMotivation}
250
+
251
+ ---
252
+
253
+ ## Phase 2: Underworld Integration
254
+
255
+ ### Role & Rank
256
+ ${phase2.roleAndRank}
257
+
258
+ ### Faction
259
+ - **Primary**: ${phase2.factionAffiliation.primary}
260
+ - **Allies**: ${phase2.factionAffiliation.allies.join(', ')}
261
+ - **Opposition**: ${phase2.factionAffiliation.opposition.join(', ')}
262
+
263
+ ### Powers & Abilities
264
+ - **Abilities**: ${phase2.powersAndAbilities.abilities.join('; ')}
265
+ - **Limitations**: ${phase2.powersAndAbilities.limitations.join('; ')}
266
+
267
+ ### Relationships
268
+ ${phase2.relationships.map(r => `- **${r.name}** (${r.type}): ${r.description}`).join('\n')}
269
+
270
+ ### Resources
271
+ ${Object.entries(phase2.resources).map(([key, value]) => `- **${key}**: ${value}`).join('\n')}
272
+
273
+ ---
274
+
275
+ ## Phase 3: Narrative Architecture
276
+
277
+ ### Mythology
278
+ ${phase3.mythologicalFoundation}
279
+
280
+ ### Conflicts
281
+ - **Internal**: ${phase3.hierarchiesAndConflicts.internal.join('; ')}
282
+ - **External**: ${phase3.hierarchiesAndConflicts.external.join('; ')}
283
+ - **Personal**: ${phase3.hierarchiesAndConflicts.personal.join('; ')}
284
+
285
+ ### Story Arc
286
+ 1. **Act 1**: ${phase3.storyArc.act1}
287
+ 2. **Act 2**: ${phase3.storyArc.act2}
288
+ 3. **Act 3**: ${phase3.storyArc.act3}
289
+
290
+ ### Themes
291
+ ${phase3.thematicElements.map(t => `- ${t}`).join('\n')}
292
+
293
+ ### Interaction Points
294
+ ${phase3.interactionPoints.map(i => `- ${i}`).join('\n')}
295
+ `;
296
+ }
297
+
298
+ export default {
299
+ createCharacter,
300
+ validateCharacter,
301
+ generateCharacterSummary,
302
+ validateRelationships,
303
+ exportCharacterAsMarkdown,
304
+ };
@@ -0,0 +1,264 @@
1
+ {
2
+ "test_cases": [
3
+ {
4
+ "id": "test_phase1_foundation",
5
+ "name": "Character Foundation Phase",
6
+ "input": {
7
+ "phase": 1,
8
+ "character_type": "shadow_mage",
9
+ "required_fields": ["name", "origin", "physical_characteristics", "background", "core_motivation"]
10
+ },
11
+ "expected_output": {
12
+ "valid": true,
13
+ "completeness_score": 100,
14
+ "phase_coverage": "complete"
15
+ }
16
+ },
17
+ {
18
+ "id": "test_phase2_integration",
19
+ "name": "Underworld Integration Phase",
20
+ "input": {
21
+ "phase": 2,
22
+ "character": {
23
+ "name": "Test Character",
24
+ "role": "Council Member",
25
+ "faction": "Shadow Council"
26
+ },
27
+ "required_fields": ["role_rank", "faction_affiliation", "powers_abilities", "relationships", "resources"]
28
+ },
29
+ "expected_output": {
30
+ "valid": true,
31
+ "integration_score": 100,
32
+ "hierarchy_defined": true
33
+ }
34
+ },
35
+ {
36
+ "id": "test_phase3_narrative",
37
+ "name": "Narrative Architecture Phase",
38
+ "input": {
39
+ "phase": 3,
40
+ "character": {
41
+ "name": "Test Character",
42
+ "mythology": "Ancient shadow mage",
43
+ "conflicts": ["Internal power struggle", "External faction war"]
44
+ },
45
+ "required_fields": ["mythological_foundation", "hierarchies_conflicts", "story_arc", "thematic_elements"]
46
+ },
47
+ "expected_output": {
48
+ "valid": true,
49
+ "narrative_consistency": true,
50
+ "story_arc_defined": true
51
+ }
52
+ },
53
+ {
54
+ "id": "test_morrigan_complete",
55
+ "name": "Complete Character: Morrigan",
56
+ "input": {
57
+ "character_profile": "Morrigan Blackthorn",
58
+ "expected_phases": 3
59
+ },
60
+ "expected_output": {
61
+ "valid": true,
62
+ "complete": true,
63
+ "all_phases_present": true,
64
+ "relationships_count": 4,
65
+ "abilities_count": 5
66
+ }
67
+ },
68
+ {
69
+ "id": "test_theron_partial",
70
+ "name": "Incomplete Character: Theron",
71
+ "input": {
72
+ "character_profile": "Theron Nightborn",
73
+ "development_level": "apprentice"
74
+ },
75
+ "expected_output": {
76
+ "valid": true,
77
+ "complete": false,
78
+ "development_potential": "high",
79
+ "needs_development": ["Council recognition", "Shadow form completion", "Identity resolution"]
80
+ }
81
+ },
82
+ {
83
+ "id": "test_valdris_antagonist",
84
+ "name": "Antagonist Character: Valdris",
85
+ "input": {
86
+ "character_type": "antagonist",
87
+ "motivation_type": "supremacy",
88
+ "power_level": "corrupted_master"
89
+ },
90
+ "expected_output": {
91
+ "valid": true,
92
+ "character_role": "antagonist",
93
+ "threat_level": "extreme",
94
+ "character_arc_potential": true
95
+ }
96
+ },
97
+ {
98
+ "id": "test_three_way_conflict",
99
+ "name": "Three Character Conflict Web",
100
+ "input": {
101
+ "characters": ["Morrigan", "Theron", "Valdris"],
102
+ "relationship_type": "complex_conflict"
103
+ },
104
+ "expected_output": {
105
+ "valid": true,
106
+ "conflict_points": 5,
107
+ "narrative_complexity": "high",
108
+ "story_potential": "excellent"
109
+ }
110
+ },
111
+ {
112
+ "id": "test_incomplete_character",
113
+ "name": "Validation: Incomplete Character",
114
+ "input": {
115
+ "character": {
116
+ "name": "Incomplete Character",
117
+ "phase1_complete": true,
118
+ "phase2_complete": false,
119
+ "phase3_complete": false
120
+ }
121
+ },
122
+ "expected_output": {
123
+ "valid": true,
124
+ "complete": false,
125
+ "completion_percentage": 33,
126
+ "missing_phases": [2, 3]
127
+ }
128
+ },
129
+ {
130
+ "id": "test_relationship_consistency",
131
+ "name": "Relationship Consistency Check",
132
+ "input": {
133
+ "character1": "Morrigan",
134
+ "character2": "Theron",
135
+ "relationship_type": "mentor_student"
136
+ },
137
+ "expected_output": {
138
+ "valid": true,
139
+ "consistency": true,
140
+ "bidirectional": true,
141
+ "conflict_points": 0
142
+ }
143
+ },
144
+ {
145
+ "id": "test_mythology_integration",
146
+ "name": "Mythology Integration Validation",
147
+ "input": {
148
+ "character": "Theron Nightborn",
149
+ "prophecy_reference": "half_born_shall_bridge"
150
+ },
151
+ "expected_output": {
152
+ "valid": true,
153
+ "mythology_aligned": true,
154
+ "prophecy_fit": "perfect",
155
+ "narrative_resonance": "high"
156
+ }
157
+ },
158
+ {
159
+ "id": "test_power_limitation_balance",
160
+ "name": "Power and Limitation Balance",
161
+ "input": {
162
+ "character": "Theron Nightborn",
163
+ "power_score": 75,
164
+ "limitation_score": 70
165
+ },
166
+ "expected_output": {
167
+ "valid": true,
168
+ "balanced": true,
169
+ "vulnerability": "appropriate",
170
+ "character_arc_potential": "high"
171
+ }
172
+ },
173
+ {
174
+ "id": "test_faction_alignment",
175
+ "name": "Faction Alignment Check",
176
+ "input": {
177
+ "character": "Valdris",
178
+ "primary_faction": "Void Collective",
179
+ "secondary_faction": "Sunlight Conspiracy"
180
+ },
181
+ "expected_output": {
182
+ "valid": true,
183
+ "alignment_consistent": true,
184
+ "conflict_resolution": "needed",
185
+ "motivation_check": "passed"
186
+ }
187
+ },
188
+ {
189
+ "id": "test_story_arc_progression",
190
+ "name": "Story Arc Act Progression",
191
+ "input": {
192
+ "character": "Morrigan",
193
+ "act1": "Discovers hidden threat",
194
+ "act2": "Chooses between loyalty and good",
195
+ "act3": "Potential sacrifice"
196
+ },
197
+ "expected_output": {
198
+ "valid": true,
199
+ "progression_logical": true,
200
+ "character_growth": "significant",
201
+ "emotional_resonance": "high"
202
+ }
203
+ },
204
+ {
205
+ "id": "test_thematic_coherence",
206
+ "name": "Thematic Coherence Validation",
207
+ "input": {
208
+ "character": "Theron",
209
+ "themes": ["belonging", "identity", "prejudice", "coming_of_age"]
210
+ },
211
+ "expected_output": {
212
+ "valid": true,
213
+ "thematic_coherence": 95,
214
+ "resonance_with_world": "excellent",
215
+ "symbolic_depth": "high"
216
+ }
217
+ },
218
+ {
219
+ "id": "test_resource_balance",
220
+ "name": "Character Resources Balance",
221
+ "input": {
222
+ "character": "Morrigan",
223
+ "power_resources": ["shadowveil_tower", "shadow_constructs", "codex", "spy_network"],
224
+ "limitation_resources": ["council_oversight", "treaty_obligations"]
225
+ },
226
+ "expected_output": {
227
+ "valid": true,
228
+ "resource_balance": "appropriate",
229
+ "power_level": "high",
230
+ "agency_level": "constrained"
231
+ }
232
+ },
233
+ {
234
+ "id": "test_cross_realm_consistency",
235
+ "name": "Cross-Realm Consistency",
236
+ "input": {
237
+ "characters": ["Morrigan", "Theron"],
238
+ "realms": ["shadow_realm", "mortal_world", "twilight_realm"]
239
+ },
240
+ "expected_output": {
241
+ "valid": true,
242
+ "realm_consistency": true,
243
+ "crossover_points": 7,
244
+ "world_integration": "seamless"
245
+ }
246
+ }
247
+ ],
248
+ "validation_rules": {
249
+ "phase1_requirements": ["name_identity", "origin", "physical_characteristics", "background", "core_motivation"],
250
+ "phase2_requirements": ["role_rank", "faction_affiliation", "powers_abilities", "relationships", "resources"],
251
+ "phase3_requirements": ["mythological_foundation", "hierarchies_conflicts", "story_arc", "thematic_elements", "interaction_points"],
252
+ "minimum_relationships": 3,
253
+ "minimum_abilities": 2,
254
+ "minimum_conflicts": 1,
255
+ "limitation_to_power_ratio": 0.7
256
+ },
257
+ "success_metrics": {
258
+ "test_pass_rate": 100,
259
+ "coverage_percentage": 100,
260
+ "specification_compliance": 100,
261
+ "external_dependencies": 0,
262
+ "documentation_complete": true
263
+ }
264
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "module": "ES2020",
5
+ "lib": ["ES2020"],
6
+ "moduleResolution": "node",
7
+ "esModuleInterop": true,
8
+ "strict": true,
9
+ "skipLibCheck": true,
10
+ "forceConsistentCasingInFileNames": true,
11
+ "declaration": true,
12
+ "declarationMap": true,
13
+ "sourceMap": true,
14
+ "outDir": "./dist",
15
+ "rootDir": "./src"
16
+ },
17
+ "include": ["src/**/*"],
18
+ "exclude": ["node_modules", "dist"]
19
+ }