@narrative-os/engine 0.1.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/dist/agents/canonValidator.d.ts +9 -0
- package/dist/agents/canonValidator.js +51 -0
- package/dist/agents/chapterPlanner.d.ts +50 -0
- package/dist/agents/chapterPlanner.js +250 -0
- package/dist/agents/completeness.d.ts +7 -0
- package/dist/agents/completeness.js +51 -0
- package/dist/agents/memoryExtractor.d.ts +12 -0
- package/dist/agents/memoryExtractor.js +82 -0
- package/dist/agents/stateUpdater.d.ts +30 -0
- package/dist/agents/stateUpdater.js +150 -0
- package/dist/agents/storyDirector.d.ts +40 -0
- package/dist/agents/storyDirector.js +213 -0
- package/dist/agents/summarizer.d.ts +8 -0
- package/dist/agents/summarizer.js +56 -0
- package/dist/agents/tensionController.d.ts +68 -0
- package/dist/agents/tensionController.js +197 -0
- package/dist/agents/writer.d.ts +12 -0
- package/dist/agents/writer.js +148 -0
- package/dist/constraints/constraintGraph.d.ts +117 -0
- package/dist/constraints/constraintGraph.js +381 -0
- package/dist/constraints/validator.d.ts +58 -0
- package/dist/constraints/validator.js +236 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +115 -0
- package/dist/llm/client.d.ts +14 -0
- package/dist/llm/client.js +108 -0
- package/dist/memory/canonStore.d.ts +20 -0
- package/dist/memory/canonStore.js +110 -0
- package/dist/memory/memoryRetriever.d.ts +28 -0
- package/dist/memory/memoryRetriever.js +126 -0
- package/dist/memory/stateUpdater.d.ts +49 -0
- package/dist/memory/stateUpdater.js +315 -0
- package/dist/memory/vectorStore.d.ts +41 -0
- package/dist/memory/vectorStore.js +166 -0
- package/dist/pipeline/generateChapter.d.ts +17 -0
- package/dist/pipeline/generateChapter.js +75 -0
- package/dist/story/bible.d.ts +4 -0
- package/dist/story/bible.js +53 -0
- package/dist/story/state.d.ts +3 -0
- package/dist/story/state.js +27 -0
- package/dist/story/structuredState.d.ts +39 -0
- package/dist/story/structuredState.js +159 -0
- package/dist/test/canon.test.d.ts +1 -0
- package/dist/test/canon.test.js +104 -0
- package/dist/test/chapter-planner.test.d.ts +1 -0
- package/dist/test/chapter-planner.test.js +171 -0
- package/dist/test/constraints.test.d.ts +1 -0
- package/dist/test/constraints.test.js +210 -0
- package/dist/test/simple.test.d.ts +1 -0
- package/dist/test/simple.test.js +51 -0
- package/dist/test/state-updater.test.d.ts +1 -0
- package/dist/test/state-updater.test.js +200 -0
- package/dist/test/story-director.test.d.ts +1 -0
- package/dist/test/story-director.test.js +142 -0
- package/dist/test/structured-state.test.d.ts +1 -0
- package/dist/test/structured-state.test.js +144 -0
- package/dist/test/tension-controller.test.d.ts +1 -0
- package/dist/test/tension-controller.test.js +116 -0
- package/dist/test/vector-memory.test.d.ts +1 -0
- package/dist/test/vector-memory.test.js +153 -0
- package/dist/test/world-simulation.test.d.ts +1 -0
- package/dist/test/world-simulation.test.js +152 -0
- package/dist/types/index.d.ts +79 -0
- package/dist/types/index.js +3 -0
- package/dist/world/characterAgent.d.ts +73 -0
- package/dist/world/characterAgent.js +232 -0
- package/dist/world/eventResolver.d.ts +52 -0
- package/dist/world/eventResolver.js +205 -0
- package/dist/world/worldState.d.ts +93 -0
- package/dist/world/worldState.js +258 -0
- package/package.json +43 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { CharacterAgent } from './characterAgent.js';
|
|
2
|
+
import type { WorldEvent, EventResolution } from './eventResolver.js';
|
|
3
|
+
export interface Location {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
connectedTo: string[];
|
|
8
|
+
characters: string[];
|
|
9
|
+
items: string[];
|
|
10
|
+
events: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface WorldState {
|
|
13
|
+
storyId: string;
|
|
14
|
+
currentChapter: number;
|
|
15
|
+
locations: Map<string, Location>;
|
|
16
|
+
characters: Map<string, CharacterAgent>;
|
|
17
|
+
events: WorldEvent[];
|
|
18
|
+
history: string[];
|
|
19
|
+
globalState: Record<string, any>;
|
|
20
|
+
}
|
|
21
|
+
export declare class WorldStateManager {
|
|
22
|
+
private state;
|
|
23
|
+
constructor(storyId: string);
|
|
24
|
+
/**
|
|
25
|
+
* Initialize world from story bible
|
|
26
|
+
*/
|
|
27
|
+
initialize(setting: string, initialCharacters: CharacterAgent[]): void;
|
|
28
|
+
/**
|
|
29
|
+
* Add a new location
|
|
30
|
+
*/
|
|
31
|
+
addLocation(id: string, name: string, description: string, connectedTo?: string[]): Location;
|
|
32
|
+
/**
|
|
33
|
+
* Connect two locations
|
|
34
|
+
*/
|
|
35
|
+
connectLocations(locId1: string, locId2: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Move character between locations
|
|
38
|
+
*/
|
|
39
|
+
moveCharacter(characterName: string, toLocationId: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Get character's current location
|
|
42
|
+
*/
|
|
43
|
+
getCharacterLocation(characterName: string): Location | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Add character to world
|
|
46
|
+
*/
|
|
47
|
+
addCharacter(character: CharacterAgent): void;
|
|
48
|
+
/**
|
|
49
|
+
* Get characters at a location
|
|
50
|
+
*/
|
|
51
|
+
getCharactersAtLocation(locationId: string): CharacterAgent[];
|
|
52
|
+
/**
|
|
53
|
+
* Add event to world
|
|
54
|
+
*/
|
|
55
|
+
addEvent(event: WorldEvent): void;
|
|
56
|
+
/**
|
|
57
|
+
* Process event resolutions and update world
|
|
58
|
+
*/
|
|
59
|
+
applyResolutions(resolutions: EventResolution[]): void;
|
|
60
|
+
/**
|
|
61
|
+
* Advance to next chapter
|
|
62
|
+
*/
|
|
63
|
+
advanceChapter(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Set global state value
|
|
66
|
+
*/
|
|
67
|
+
setGlobalState(key: string, value: any): void;
|
|
68
|
+
/**
|
|
69
|
+
* Get global state value
|
|
70
|
+
*/
|
|
71
|
+
getGlobalState(key: string): any;
|
|
72
|
+
/**
|
|
73
|
+
* Add entry to world history
|
|
74
|
+
*/
|
|
75
|
+
private addToHistory;
|
|
76
|
+
/**
|
|
77
|
+
* Get world state summary
|
|
78
|
+
*/
|
|
79
|
+
getSummary(): string;
|
|
80
|
+
/**
|
|
81
|
+
* Get full world state
|
|
82
|
+
*/
|
|
83
|
+
getState(): WorldState;
|
|
84
|
+
/**
|
|
85
|
+
* Serialize world state
|
|
86
|
+
*/
|
|
87
|
+
serialize(): string;
|
|
88
|
+
/**
|
|
89
|
+
* Deserialize world state
|
|
90
|
+
*/
|
|
91
|
+
load(data: string): void;
|
|
92
|
+
}
|
|
93
|
+
export declare function createWorldStateManager(storyId: string): WorldStateManager;
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WorldStateManager = void 0;
|
|
4
|
+
exports.createWorldStateManager = createWorldStateManager;
|
|
5
|
+
class WorldStateManager {
|
|
6
|
+
state;
|
|
7
|
+
constructor(storyId) {
|
|
8
|
+
this.state = {
|
|
9
|
+
storyId,
|
|
10
|
+
currentChapter: 0,
|
|
11
|
+
locations: new Map(),
|
|
12
|
+
characters: new Map(),
|
|
13
|
+
events: [],
|
|
14
|
+
history: [],
|
|
15
|
+
globalState: {},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Initialize world from story bible
|
|
20
|
+
*/
|
|
21
|
+
initialize(setting, initialCharacters) {
|
|
22
|
+
// Create initial location from setting
|
|
23
|
+
const startingLocation = {
|
|
24
|
+
id: 'loc-start',
|
|
25
|
+
name: setting,
|
|
26
|
+
description: `The main setting of the story: ${setting}`,
|
|
27
|
+
connectedTo: [],
|
|
28
|
+
characters: initialCharacters.map(c => c.name),
|
|
29
|
+
items: [],
|
|
30
|
+
events: [],
|
|
31
|
+
};
|
|
32
|
+
this.state.locations.set(startingLocation.id, startingLocation);
|
|
33
|
+
// Add characters
|
|
34
|
+
for (const character of initialCharacters) {
|
|
35
|
+
this.state.characters.set(character.name, character);
|
|
36
|
+
}
|
|
37
|
+
this.addToHistory(`World initialized at ${setting} with ${initialCharacters.length} characters`);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Add a new location
|
|
41
|
+
*/
|
|
42
|
+
addLocation(id, name, description, connectedTo = []) {
|
|
43
|
+
const location = {
|
|
44
|
+
id,
|
|
45
|
+
name,
|
|
46
|
+
description,
|
|
47
|
+
connectedTo,
|
|
48
|
+
characters: [],
|
|
49
|
+
items: [],
|
|
50
|
+
events: [],
|
|
51
|
+
};
|
|
52
|
+
this.state.locations.set(id, location);
|
|
53
|
+
this.addToHistory(`Location added: ${name}`);
|
|
54
|
+
return location;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Connect two locations
|
|
58
|
+
*/
|
|
59
|
+
connectLocations(locId1, locId2) {
|
|
60
|
+
const loc1 = this.state.locations.get(locId1);
|
|
61
|
+
const loc2 = this.state.locations.get(locId2);
|
|
62
|
+
if (loc1 && loc2) {
|
|
63
|
+
if (!loc1.connectedTo.includes(locId2)) {
|
|
64
|
+
loc1.connectedTo.push(locId2);
|
|
65
|
+
}
|
|
66
|
+
if (!loc2.connectedTo.includes(locId1)) {
|
|
67
|
+
loc2.connectedTo.push(locId1);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Move character between locations
|
|
73
|
+
*/
|
|
74
|
+
moveCharacter(characterName, toLocationId) {
|
|
75
|
+
const character = this.state.characters.get(characterName);
|
|
76
|
+
const fromLocation = this.getCharacterLocation(characterName);
|
|
77
|
+
const toLocation = this.state.locations.get(toLocationId);
|
|
78
|
+
if (!character || !toLocation)
|
|
79
|
+
return false;
|
|
80
|
+
// Remove from old location
|
|
81
|
+
if (fromLocation) {
|
|
82
|
+
fromLocation.characters = fromLocation.characters.filter(c => c !== characterName);
|
|
83
|
+
}
|
|
84
|
+
// Add to new location
|
|
85
|
+
if (!toLocation.characters.includes(characterName)) {
|
|
86
|
+
toLocation.characters.push(characterName);
|
|
87
|
+
}
|
|
88
|
+
// Update character location
|
|
89
|
+
character.location = toLocation.name;
|
|
90
|
+
this.addToHistory(`${characterName} moved to ${toLocation.name}`);
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get character's current location
|
|
95
|
+
*/
|
|
96
|
+
getCharacterLocation(characterName) {
|
|
97
|
+
for (const location of this.state.locations.values()) {
|
|
98
|
+
if (location.characters.includes(characterName)) {
|
|
99
|
+
return location;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Add character to world
|
|
106
|
+
*/
|
|
107
|
+
addCharacter(character) {
|
|
108
|
+
this.state.characters.set(character.name, character);
|
|
109
|
+
// Add to location
|
|
110
|
+
for (const location of this.state.locations.values()) {
|
|
111
|
+
if (location.name === character.location) {
|
|
112
|
+
if (!location.characters.includes(character.name)) {
|
|
113
|
+
location.characters.push(character.name);
|
|
114
|
+
}
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
this.addToHistory(`Character added: ${character.name}`);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get characters at a location
|
|
122
|
+
*/
|
|
123
|
+
getCharactersAtLocation(locationId) {
|
|
124
|
+
const location = this.state.locations.get(locationId);
|
|
125
|
+
if (!location)
|
|
126
|
+
return [];
|
|
127
|
+
return location.characters
|
|
128
|
+
.map(name => this.state.characters.get(name))
|
|
129
|
+
.filter((c) => c !== undefined);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Add event to world
|
|
133
|
+
*/
|
|
134
|
+
addEvent(event) {
|
|
135
|
+
this.state.events.push(event);
|
|
136
|
+
// Add to location
|
|
137
|
+
const location = Array.from(this.state.locations.values())
|
|
138
|
+
.find(l => l.name === event.location);
|
|
139
|
+
if (location) {
|
|
140
|
+
location.events.push(event.id);
|
|
141
|
+
}
|
|
142
|
+
this.addToHistory(`Event: ${event.description}`);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Process event resolutions and update world
|
|
146
|
+
*/
|
|
147
|
+
applyResolutions(resolutions) {
|
|
148
|
+
for (const resolution of resolutions) {
|
|
149
|
+
// Update event
|
|
150
|
+
const eventIndex = this.state.events.findIndex(e => e.id === resolution.event.id);
|
|
151
|
+
if (eventIndex >= 0) {
|
|
152
|
+
this.state.events[eventIndex] = resolution.event;
|
|
153
|
+
}
|
|
154
|
+
// Add to history
|
|
155
|
+
this.addToHistory(`Resolved: ${resolution.outcome}`);
|
|
156
|
+
// Apply consequences to characters
|
|
157
|
+
for (const characterName of resolution.affectedCharacters) {
|
|
158
|
+
const character = this.state.characters.get(characterName);
|
|
159
|
+
if (character) {
|
|
160
|
+
// Could update emotional state, knowledge, etc. based on consequences
|
|
161
|
+
// For now, just log it
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Advance to next chapter
|
|
168
|
+
*/
|
|
169
|
+
advanceChapter() {
|
|
170
|
+
this.state.currentChapter++;
|
|
171
|
+
this.addToHistory(`Chapter ${this.state.currentChapter} begins`);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Set global state value
|
|
175
|
+
*/
|
|
176
|
+
setGlobalState(key, value) {
|
|
177
|
+
this.state.globalState[key] = value;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get global state value
|
|
181
|
+
*/
|
|
182
|
+
getGlobalState(key) {
|
|
183
|
+
return this.state.globalState[key];
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Add entry to world history
|
|
187
|
+
*/
|
|
188
|
+
addToHistory(entry) {
|
|
189
|
+
const timestamp = `Ch${this.state.currentChapter}`;
|
|
190
|
+
this.state.history.push(`[${timestamp}] ${entry}`);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get world state summary
|
|
194
|
+
*/
|
|
195
|
+
getSummary() {
|
|
196
|
+
const lines = ['## World State'];
|
|
197
|
+
lines.push(`\n**Current Chapter:** ${this.state.currentChapter}`);
|
|
198
|
+
lines.push(`**Locations:** ${this.state.locations.size}`);
|
|
199
|
+
lines.push(`**Characters:** ${this.state.characters.size}`);
|
|
200
|
+
lines.push(`**Active Events:** ${this.state.events.filter(e => !e.resolved).length}`);
|
|
201
|
+
// Location summary
|
|
202
|
+
lines.push('\n### Locations');
|
|
203
|
+
for (const location of this.state.locations.values()) {
|
|
204
|
+
lines.push(`- **${location.name}**: ${location.characters.length} characters`);
|
|
205
|
+
}
|
|
206
|
+
// Character summary
|
|
207
|
+
lines.push('\n### Character Locations');
|
|
208
|
+
for (const character of this.state.characters.values()) {
|
|
209
|
+
lines.push(`- ${character.name}: ${character.location} (${character.emotionalState})`);
|
|
210
|
+
}
|
|
211
|
+
// Recent history
|
|
212
|
+
lines.push('\n### Recent History');
|
|
213
|
+
for (const entry of this.state.history.slice(-5)) {
|
|
214
|
+
lines.push(`- ${entry}`);
|
|
215
|
+
}
|
|
216
|
+
return lines.join('\n');
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get full world state
|
|
220
|
+
*/
|
|
221
|
+
getState() {
|
|
222
|
+
return this.state;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Serialize world state
|
|
226
|
+
*/
|
|
227
|
+
serialize() {
|
|
228
|
+
return JSON.stringify({
|
|
229
|
+
storyId: this.state.storyId,
|
|
230
|
+
currentChapter: this.state.currentChapter,
|
|
231
|
+
locations: Array.from(this.state.locations.entries()),
|
|
232
|
+
characters: Array.from(this.state.characters.entries()),
|
|
233
|
+
events: this.state.events,
|
|
234
|
+
history: this.state.history,
|
|
235
|
+
globalState: this.state.globalState,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Deserialize world state
|
|
240
|
+
*/
|
|
241
|
+
load(data) {
|
|
242
|
+
const parsed = JSON.parse(data);
|
|
243
|
+
this.state = {
|
|
244
|
+
storyId: parsed.storyId,
|
|
245
|
+
currentChapter: parsed.currentChapter,
|
|
246
|
+
locations: new Map(parsed.locations),
|
|
247
|
+
characters: new Map(parsed.characters),
|
|
248
|
+
events: parsed.events,
|
|
249
|
+
history: parsed.history,
|
|
250
|
+
globalState: parsed.globalState,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
exports.WorldStateManager = WorldStateManager;
|
|
255
|
+
function createWorldStateManager(storyId) {
|
|
256
|
+
return new WorldStateManager(storyId);
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ybGRTdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JsZC93b3JsZFN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTZUQSwwREFFQztBQXhTRCxNQUFhLGlCQUFpQjtJQUNwQixLQUFLLENBQWE7SUFFMUIsWUFBWSxPQUFlO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUc7WUFDWCxPQUFPO1lBQ1AsY0FBYyxFQUFFLENBQUM7WUFDakIsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFFO1lBQ3BCLFVBQVUsRUFBRSxJQUFJLEdBQUcsRUFBRTtZQUNyQixNQUFNLEVBQUUsRUFBRTtZQUNWLE9BQU8sRUFBRSxFQUFFO1lBQ1gsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxPQUFlLEVBQUUsaUJBQW1DO1FBQzdELHVDQUF1QztRQUN2QyxNQUFNLGdCQUFnQixHQUFhO1lBQ2pDLEVBQUUsRUFBRSxXQUFXO1lBQ2YsSUFBSSxFQUFFLE9BQU87WUFDYixXQUFXLEVBQUUsa0NBQWtDLE9BQU8sRUFBRTtZQUN4RCxXQUFXLEVBQUUsRUFBRTtZQUNmLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzlDLEtBQUssRUFBRSxFQUFFO1lBQ1QsTUFBTSxFQUFFLEVBQUU7U0FDWCxDQUFDO1FBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWhFLGlCQUFpQjtRQUNqQixLQUFLLE1BQU0sU0FBUyxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFD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LGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYztZQUNyQyxTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNwQyxVQUFVLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUN0QyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztTQUNoQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBcFNELDhDQW9TQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLE9BQWU7SUFDckQsT0FBTyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENoYXJhY3RlckFnZW50IH0gZnJvbSAnLi9jaGFyYWN0ZXJBZ2VudC5qcyc7XHJcbmltcG9ydCB0eXBlIHsgV29ybGRFdmVudCwgRXZlbnRSZXNvbHV0aW9uIH0gZnJvbSAnLi9ldmVudFJlc29sdmVyLmpzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb24ge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgY29ubmVjdGVkVG86IHN0cmluZ1tdO1xyXG4gIGNoYXJhY3RlcnM6IHN0cmluZ1tdO1xyXG4gIGl0ZW1zOiBzdHJpbmdbXTtcclxuICBldmVudHM6IHN0cmluZ1tdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFdvcmxkU3RhdGUge1xyXG4gIHN0b3J5SWQ6IHN0cmluZztcclxuICBjdXJyZW50Q2hhcHRlcjogbnVtYmVyO1xyXG4gIGxvY2F0aW9uczogTWFwPHN0cmluZywgTG9jYXRpb24+O1xyXG4gIGNoYXJhY3RlcnM6IE1hcDxzdHJpbmcsIENoYXJhY3RlckFnZW50PjtcclxuICBldmVudHM6IFdvcmxkRXZlbnRbXTtcclxuICBoaXN0b3J5OiBzdHJpbmdbXTtcclxuICBnbG9iYWxTdGF0ZTogUmVjb3JkPHN0cmluZywgYW55PjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFdvcmxkU3RhdGVNYW5hZ2VyIHtcclxuICBwcml2YXRlIHN0YXRlOiBXb3JsZFN0YXRlO1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKHN0b3J5SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgc3RvcnlJZCxcclxuICAgICAgY3VycmVudENoYXB0ZXI6IDAsXHJcbiAgICAgIGxvY2F0aW9uczogbmV3IE1hcCgpLFxyXG4gICAgICBjaGFyYWN0ZXJzOiBuZXcgTWFwKCksXHJcbiAgICAgIGV2ZW50czogW10sXHJcbiAgICAgIGhpc3Rvcnk6IFtdLFxyXG4gICAgICBnbG9iYWxTdGF0ZToge30sXHJcbiAgICB9O1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHdvcmxkIGZyb20gc3RvcnkgYmlibGVcclxuICAgKi9cclxuICBpbml0aWFsaXplKHNldHRpbmc6IHN0cmluZywgaW5pdGlhbENoYXJhY3RlcnM6IENoYXJhY3RlckFnZW50W10pOiB2b2lkIHtcclxuICAgIC8vIENyZWF0ZSBpbml0aWFsIGxvY2F0aW9uIGZyb20gc2V0dGluZ1xyXG4gICAgY29uc3Qgc3RhcnRpbmdMb2NhdGlvbjogTG9jYXRpb24gPSB7XHJcbiAgICAgIGlkOiAnbG9jLXN0YXJ0JyxcclxuICAgICAgbmFtZTogc2V0dGluZyxcclxuICAgICAgZGVzY3JpcHRpb246IGBUaGUgbWFpbiBzZXR0aW5nIG9mIHRoZSBzdG9yeTogJHtzZXR0aW5nfWAsXHJcbiAgICAgIGNvbm5lY3RlZFRvOiBbXSxcclxuICAgICAgY2hhcmFjdGVyczogaW5pdGlhbENoYXJhY3RlcnMubWFwKGMgPT4gYy5uYW1lKSxcclxuICAgICAgaXRlbXM6IFtdLFxyXG4gICAgICBldmVudHM6IFtdLFxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgdGhpcy5zdGF0ZS5sb2NhdGlvbnMuc2V0KHN0YXJ0aW5nTG9jYXRpb24uaWQsIHN0YXJ0aW5nTG9jYXRpb24pO1xyXG4gICAgXHJcbiAgICAvLyBBZGQgY2hhcmFjdGVyc1xyXG4gICAgZm9yIChjb25zdCBjaGFyYWN0ZXIgb2YgaW5pdGlhbENoYXJhY3RlcnMpIHtcclxuICAgICAgdGhpcy5zdGF0ZS5jaGFyYWN0ZXJzLnNldChjaGFyYWN0ZXIubmFtZSwgY2hhcmFjdGVyKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5hZGRUb0hpc3RvcnkoYFdvcmxkIGluaXRpYWxpemVkIGF0ICR7c2V0dGluZ30gd2l0aCAke2luaXRpYWxDaGFyYWN0ZXJzLmxlbmd0aH0gY2hhcmFjdGVyc2ApO1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBBZGQgYSBuZXcgbG9jYXRpb25cclxuICAgKi9cclxuICBhZGRMb2NhdGlvbihcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxyXG4gICAgY29ubmVjdGVkVG86IHN0cmluZ1tdID0gW11cclxuICApOiBMb2NhdGlvbiB7XHJcbiAgICBjb25zdCBsb2NhdGlvbjogTG9jYXRpb24gPSB7XHJcbiAgICAgIGlkLFxyXG4gICAgICBuYW1lLFxyXG4gICAgICBkZXNjcmlwdGlvbixcclxuICAgICAgY29ubmVjdGVkVG8sXHJcbiAgICAgIGNoYXJhY3RlcnM6IFtdLFxyXG4gICAgICBpdGVtczogW10sXHJcbiAgICAgIGV2ZW50czogW10sXHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICB0aGlzLnN0YXRlLmxvY2F0aW9ucy5zZXQoaWQsIGxvY2F0aW9uKTtcclxuICAgIHRoaXMuYWRkVG9IaXN0b3J5KGBMb2NhdGlvbiBhZGRlZDogJHtuYW1lfWApO1xyXG4gICAgXHJcbiAgICByZXR1cm4gbG9jYXRpb247XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIENvbm5lY3QgdHdvIGxvY2F0aW9uc1xyXG4gICAqL1xyXG4gIGNvbm5lY3RMb2NhdGlvbnMobG9jSWQxOiBzdHJpbmcsIGxvY0lkMjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBsb2MxID0gdGhpcy5zdGF0ZS5sb2NhdGlvbnMuZ2V0KGxvY0lkMSk7XHJcbiAgICBjb25zdCBsb2MyID0gdGhpcy5zdGF0ZS5sb2NhdGlvbnMuZ2V0KGxvY0lkMik7XHJcbiAgICBcclxuICAgIGlmIChsb2MxICYmIGxvYzIpIHtcclxuICAgICAgaWYgKCFsb2MxLmNvbm5lY3RlZFRvLmluY2x1ZGVzKGxvY0lkMikpIHtcclxuICAgICAgICBsb2MxLmNvbm5lY3RlZFRvLnB1c2gobG9jSWQyKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWxvYzIuY29ubmVjdGVkVG8uaW5jbHVkZXMobG9jSWQxKSkge1xyXG4gICAgICAgIGxvYzIuY29ubmVjdGVkVG8ucHVzaChsb2NJZDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIE1vdmUgY2hhcmFjdGVyIGJldHdlZW4gbG9jYXRpb25zXHJcbiAgICovXHJcbiAgbW92ZUNoYXJhY3RlcihjaGFyYWN0ZXJOYW1lOiBzdHJpbmcsIHRvTG9jYXRpb25JZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjaGFyYWN0ZXIgPSB0aGlzLnN0YXRlLmNoYXJhY3RlcnMuZ2V0KGNoYXJhY3Rlck5hbWUpO1xyXG4gICAgY29uc3QgZnJvbUxvY2F0aW9uID0gdGhpcy5nZXRDaGFyYWN0ZXJMb2NhdGlvbihjaGFyYWN0ZXJOYW1lKTtcclxuICAgIGNvbnN0IHRvTG9jYXRpb24gPSB0aGlzLnN0YXRlLmxvY2F0aW9ucy5nZXQodG9Mb2NhdGlvbklkKTtcclxuICAgIFxyXG4gICAgaWYgKCFjaGFyYWN0ZXIgfHwgIXRvTG9jYXRpb24pIHJldHVybiBmYWxzZTtcclxuICAgIFxyXG4gICAgLy8gUmVtb3ZlIGZyb20gb2xkIGxvY2F0aW9uXHJcbiAgICBpZiAoZnJvbUxvY2F0aW9uKSB7XHJcbiAgICAgIGZyb21Mb2NhdGlvbi5jaGFyYWN0ZXJzID0gZnJvbUxvY2F0aW9uLmNoYXJhY3RlcnMuZmlsdGVyKGMgPT4gYyAhPT0gY2hhcmFjdGVyTmFtZSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEFkZCB0byBuZXcgbG9jYXRpb25cclxuICAgIGlmICghdG9Mb2NhdGlvbi5jaGFyYWN0ZXJzLmluY2x1ZGVzKGNoYXJhY3Rlck5hbWUpKSB7XHJcbiAgICAgIHRvTG9jYXRpb24uY2hhcmFjdGVycy5wdXNoKGNoYXJhY3Rlck5hbWUpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBVcGRhdGUgY2hhcmFjdGVyIGxvY2F0aW9uXHJcbiAgICBjaGFyYWN0ZXIubG9jYXRpb24gPSB0b0xvY2F0aW9uLm5hbWU7XHJcbiAgICBcclxuICAgIHRoaXMuYWRkVG9IaXN0b3J5KGAke2NoYXJhY3Rlck5hbWV9IG1vdmVkIHRvICR7dG9Mb2NhdGlvbi5uYW1lfWApO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEdldCBjaGFyYWN0ZXIncyBjdXJyZW50IGxvY2F0aW9uXHJcbiAgICovXHJcbiAgZ2V0Q2hhcmFjdGVyTG9jYXRpb24oY2hhcmFjdGVyTmFtZTogc3RyaW5nKTogTG9jYXRpb24gfCB1bmRlZmluZWQge1xyXG4gICAgZm9yIChjb25zdCBsb2NhdGlvbiBvZiB0aGlzLnN0YXRlLmxvY2F0aW9ucy52YWx1ZXMoKSkge1xyXG4gICAgICBpZiAobG9jYXRpb24uY2hhcmFjdGVycy5pbmNsdWRlcyhjaGFyYWN0ZXJOYW1lKSkge1xyXG4gICAgICAgIHJldHVybiBsb2NhdGlvbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQWRkIGNoYXJhY3RlciB0byB3b3JsZFxyXG4gICAqL1xyXG4gIGFkZENoYXJhY3RlcihjaGFyYWN0ZXI6IENoYXJhY3RlckFnZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnN0YXRlLmNoYXJhY3RlcnMuc2V0KGNoYXJhY3Rlci5uYW1lLCBjaGFyYWN0ZXIpO1xyXG4gICAgXHJcbiAgICAvLyBBZGQgdG8gbG9jYXRpb25cclxuICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgdGhpcy5zdGF0ZS5sb2NhdGlvbnMudmFsdWVzKCkpIHtcclxuICAgICAgaWYgKGxvY2F0aW9uLm5hbWUgPT09IGNoYXJhY3Rlci5sb2NhdGlvbikge1xyXG4gICAgICAgIGlmICghbG9jYXRpb24uY2hhcmFjdGVycy5pbmNsdWRlcyhjaGFyYWN0ZXIubmFtZSkpIHtcclxuICAgICAgICAgIGxvY2F0aW9uLmNoYXJhY3RlcnMucHVzaChjaGFyYWN0ZXIubmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuYWRkVG9IaXN0b3J5KGBDaGFyYWN0ZXIgYWRkZWQ6ICR7Y2hhcmFjdGVyLm5hbWV9YCk7XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEdldCBjaGFyYWN0ZXJzIGF0IGEgbG9jYXRpb25cclxuICAgKi9cclxuICBnZXRDaGFyYWN0ZXJzQXRMb2NhdGlvbihsb2NhdGlvbklkOiBzdHJpbmcpOiBDaGFyYWN0ZXJBZ2VudFtdIHtcclxuICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5zdGF0ZS5sb2NhdGlvbnMuZ2V0KGxvY2F0aW9uSWQpO1xyXG4gICAgaWYgKCFsb2NhdGlvbikgcmV0dXJuIFtdO1xyXG4gICAgXHJcbiAgICByZXR1cm4gbG9jYXRpb24uY2hhcmFjdGVyc1xyXG4gICAgICAubWFwKG5hbWUgPT4gdGhpcy5zdGF0ZS5jaGFyYWN0ZXJzLmdldChuYW1lKSlcclxuICAgICAgLmZpbHRlcigoYyk6IGMgaXMgQ2hhcmFjdGVyQWdlbnQgPT4gYyAhPT0gdW5kZWZpbmVkKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQWRkIGV2ZW50IHRvIHdvcmxkXHJcbiAgICovXHJcbiAgYWRkRXZlbnQoZXZlbnQ6IFdvcmxkRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhdGUuZXZlbnRzLnB1c2goZXZlbnQpO1xyXG4gICAgXHJcbiAgICAvLyBBZGQgdG8gbG9jYXRpb25cclxuICAgIGNvbnN0IGxvY2F0aW9uID0gQXJyYXkuZnJvbSh0aGlzLnN0YXRlLmxvY2F0aW9ucy52YWx1ZXMoKSlcclxuICAgICAgLmZpbmQobCA9PiBsLm5hbWUgPT09IGV2ZW50LmxvY2F0aW9uKTtcclxuICAgIGlmIChsb2NhdGlvbikge1xyXG4gICAgICBsb2NhdGlvbi5ldmVudHMucHVzaChldmVudC5pZCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuYWRkVG9IaXN0b3J5KGBFdmVudDogJHtldmVudC5kZXNjcmlwdGlvbn1gKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyBldmVudCByZXNvbHV0aW9ucyBhbmQgdXBkYXRlIHdvcmxkXHJcbiAgICovXHJcbiAgYXBwbHlSZXNvbHV0aW9ucyhyZXNvbHV0aW9uczogRXZlbnRSZXNvbHV0aW9uW10pOiB2b2lkIHtcclxuICAgIGZvciAoY29uc3QgcmVzb2x1dGlvbiBvZiByZXNvbHV0aW9ucykge1xyXG4gICAgICAvLyBVcGRhdGUgZXZlbnRcclxuICAgICAgY29uc3QgZXZlbnRJbmRleCA9IHRoaXMuc3RhdGUuZXZlbnRzLmZpbmRJbmRleChlID0+IGUuaWQgPT09IHJlc29sdXRpb24uZXZlbnQuaWQpO1xyXG4gICAgICBpZiAoZXZlbnRJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZS5ldmVudHNbZXZlbnRJbmRleF0gPSByZXNvbHV0aW9uLmV2ZW50O1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBBZGQgdG8gaGlzdG9yeVxyXG4gICAgICB0aGlzLmFkZFRvSGlzdG9yeShgUmVzb2x2ZWQ6ICR7cmVzb2x1dGlvbi5vdXRjb21lfWApO1xyXG4gICAgICBcclxuICAgICAgLy8gQXBwbHkgY29uc2VxdWVuY2VzIHRvIGNoYXJhY3RlcnNcclxuICAgICAgZm9yIChjb25zdCBjaGFyYWN0ZXJOYW1lIG9mIHJlc29sdXRpb24uYWZmZWN0ZWRDaGFyYWN0ZXJzKSB7XHJcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gdGhpcy5zdGF0ZS5jaGFyYWN0ZXJzLmdldChjaGFyYWN0ZXJOYW1lKTtcclxuICAgICAgICBpZiAoY2hhcmFjdGVyKSB7XHJcbiAgICAgICAgICAvLyBDb3VsZCB1cGRhdGUgZW1vdGlvbmFsIHN0YXRlLCBrbm93bGVkZ2UsIGV0Yy4gYmFzZWQgb24gY29uc2VxdWVuY2VzXHJcbiAgICAgICAgICAvLyBGb3Igbm93LCBqdXN0IGxvZyBpdFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBBZHZhbmNlIHRvIG5leHQgY2hhcHRlclxyXG4gICAqL1xyXG4gIGFkdmFuY2VDaGFwdGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGF0ZS5jdXJyZW50Q2hhcHRlcisrO1xyXG4gICAgdGhpcy5hZGRUb0hpc3RvcnkoYENoYXB0ZXIgJHt0aGlzLnN0YXRlLmN1cnJlbnRDaGFwdGVyfSBiZWdpbnNgKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogU2V0IGdsb2JhbCBzdGF0ZSB2YWx1ZVxyXG4gICAqL1xyXG4gIHNldEdsb2JhbFN0YXRlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnN0YXRlLmdsb2JhbFN0YXRlW2tleV0gPSB2YWx1ZTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogR2V0IGdsb2JhbCBzdGF0ZSB2YWx1ZVxyXG4gICAqL1xyXG4gIGdldEdsb2JhbFN0YXRlKGtleTogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlLmdsb2JhbFN0YXRlW2tleV07XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEFkZCBlbnRyeSB0byB3b3JsZCBoaXN0b3J5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRUb0hpc3RvcnkoZW50cnk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgdGltZXN0YW1wID0gYENoJHt0aGlzLnN0YXRlLmN1cnJlbnRDaGFwdGVyfWA7XHJcbiAgICB0aGlzLnN0YXRlLmhpc3RvcnkucHVzaChgWyR7dGltZXN0YW1wfV0gJHtlbnRyeX1gKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogR2V0IHdvcmxkIHN0YXRlIHN1bW1hcnlcclxuICAgKi9cclxuICBnZXRTdW1tYXJ5KCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbJyMjIFdvcmxkIFN0YXRlJ107XHJcbiAgICBcclxuICAgIGxpbmVzLnB1c2goYFxcbioqQ3VycmVudCBDaGFwdGVyOioqICR7dGhpcy5zdGF0ZS5jdXJyZW50Q2hhcHRlcn1gKTtcclxuICAgIGxpbmVzLnB1c2goYCoqTG9jYXRpb25zOioqICR7dGhpcy5zdGF0ZS5sb2NhdGlvbnMuc2l6ZX1gKTtcclxuICAgIGxpbmVzLnB1c2goYCoqQ2hhcmFjdGVyczoqKiAke3RoaXMuc3RhdGUuY2hhcmFjdGVycy5zaXplfWApO1xyXG4gICAgbGluZXMucHVzaChgKipBY3RpdmUgRXZlbnRzOioqICR7dGhpcy5zdGF0ZS5ldmVudHMuZmlsdGVyKGUgPT4gIWUucmVzb2x2ZWQpLmxlbmd0aH1gKTtcclxuICAgIFxyXG4gICAgLy8gTG9jYXRpb24gc3VtbWFyeVxyXG4gICAgbGluZXMucHVzaCgnXFxuIyMjIExvY2F0aW9ucycpO1xyXG4gICAgZm9yIChjb25zdCBsb2NhdGlvbiBvZiB0aGlzLnN0YXRlLmxvY2F0aW9ucy52YWx1ZXMoKSkge1xyXG4gICAgICBsaW5lcy5wdXNoKGAtICoqJHtsb2NhdGlvbi5uYW1lfSoqOiAke2xvY2F0aW9uLmNoYXJhY3RlcnMubGVuZ3RofSBjaGFyYWN0ZXJzYCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIENoYXJhY3RlciBzdW1tYXJ5XHJcbiAgICBsaW5lcy5wdXNoKCdcXG4jIyMgQ2hhcmFjdGVyIExvY2F0aW9ucycpO1xyXG4gICAgZm9yIChjb25zdCBjaGFyYWN0ZXIgb2YgdGhpcy5zdGF0ZS5jaGFyYWN0ZXJzLnZhbHVlcygpKSB7XHJcbiAgICAgIGxpbmVzLnB1c2goYC0gJHtjaGFyYWN0ZXIubmFtZX06ICR7Y2hhcmFjdGVyLmxvY2F0aW9ufSAoJHtjaGFyYWN0ZXIuZW1vdGlvbmFsU3RhdGV9KWApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBSZWNlbnQgaGlzdG9yeVxyXG4gICAgbGluZXMucHVzaCgnXFxuIyMjIFJlY2VudCBIaXN0b3J5Jyk7XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuc3RhdGUuaGlzdG9yeS5zbGljZSgtNSkpIHtcclxuICAgICAgbGluZXMucHVzaChgLSAke2VudHJ5fWApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEdldCBmdWxsIHdvcmxkIHN0YXRlXHJcbiAgICovXHJcbiAgZ2V0U3RhdGUoKTogV29ybGRTdGF0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogU2VyaWFsaXplIHdvcmxkIHN0YXRlXHJcbiAgICovXHJcbiAgc2VyaWFsaXplKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICBzdG9yeUlkOiB0aGlzLnN0YXRlLnN0b3J5SWQsXHJcbiAgICAgIGN1cnJlbnRDaGFwdGVyOiB0aGlzLnN0YXRlLmN1cnJlbnRDaGFwdGVyLFxyXG4gICAgICBsb2NhdGlvbnM6IEFycmF5LmZyb20odGhpcy5zdGF0ZS5sb2NhdGlvbnMuZW50cmllcygpKSxcclxuICAgICAgY2hhcmFjdGVyczogQXJyYXkuZnJvbSh0aGlzLnN0YXRlLmNoYXJhY3RlcnMuZW50cmllcygpKSxcclxuICAgICAgZXZlbnRzOiB0aGlzLnN0YXRlLmV2ZW50cyxcclxuICAgICAgaGlzdG9yeTogdGhpcy5zdGF0ZS5oaXN0b3J5LFxyXG4gICAgICBnbG9iYWxTdGF0ZTogdGhpcy5zdGF0ZS5nbG9iYWxTdGF0ZSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBEZXNlcmlhbGl6ZSB3b3JsZCBzdGF0ZVxyXG4gICAqL1xyXG4gIGxvYWQoZGF0YTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgc3RvcnlJZDogcGFyc2VkLnN0b3J5SWQsXHJcbiAgICAgIGN1cnJlbnRDaGFwdGVyOiBwYXJzZWQuY3VycmVudENoYXB0ZXIsXHJcbiAgICAgIGxvY2F0aW9uczogbmV3IE1hcChwYXJzZWQubG9jYXRpb25zKSxcclxuICAgICAgY2hhcmFjdGVyczogbmV3IE1hcChwYXJzZWQuY2hhcmFjdGVycyksXHJcbiAgICAgIGV2ZW50czogcGFyc2VkLmV2ZW50cyxcclxuICAgICAgaGlzdG9yeTogcGFyc2VkLmhpc3RvcnksXHJcbiAgICAgIGdsb2JhbFN0YXRlOiBwYXJzZWQuZ2xvYmFsU3RhdGUsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmxkU3RhdGVNYW5hZ2VyKHN0b3J5SWQ6IHN0cmluZyk6IFdvcmxkU3RhdGVNYW5hZ2VyIHtcclxuICByZXR1cm4gbmV3IFdvcmxkU3RhdGVNYW5hZ2VyKHN0b3J5SWQpO1xyXG59XHJcbiJdfQ==
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@narrative-os/engine",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Core narrative engine for AI-powered story generation",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"lint": "eslint src/**/*.ts",
|
|
14
|
+
"prepublishOnly": "npm run build"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"ai",
|
|
18
|
+
"story",
|
|
19
|
+
"narrative",
|
|
20
|
+
"writing",
|
|
21
|
+
"llm",
|
|
22
|
+
"memory",
|
|
23
|
+
"hnsw"
|
|
24
|
+
],
|
|
25
|
+
"author": "Your Name",
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "https://github.com/liwonder/NARRITIVE_OS.git"
|
|
30
|
+
},
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=20.0.0"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"hnswlib-node": "^3.0.0",
|
|
36
|
+
"openai": "^4.52.0",
|
|
37
|
+
"zod": "^3.23.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/node": "^20.0.0",
|
|
41
|
+
"typescript": "^5.4.0"
|
|
42
|
+
}
|
|
43
|
+
}
|