@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 +52 -0
- package/README.md +32 -0
- package/SAMPLE_DATA.md +245 -0
- package/SKILL.md +57 -0
- package/package.json +32 -0
- package/src/index.ts +304 -0
- package/test-fixtures.json +264 -0
- package/tsconfig.json +19 -0
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
|
+
}
|