qnce-engine 0.1.0 → 1.2.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/README.md +248 -0
- package/dist/cli/audit.js +6 -4
- package/dist/cli/audit.js.map +1 -1
- package/dist/cli/init.js +11 -9
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/perf.d.ts +30 -0
- package/dist/cli/perf.d.ts.map +1 -0
- package/dist/cli/perf.js +219 -0
- package/dist/cli/perf.js.map +1 -0
- package/dist/engine/core.d.ts +104 -8
- package/dist/engine/core.d.ts.map +1 -1
- package/dist/engine/core.js +288 -7
- package/dist/engine/core.js.map +1 -1
- package/dist/engine/demo-story.js +4 -1
- package/dist/engine/demo-story.js.map +1 -1
- package/dist/index.js +24 -3
- package/dist/index.js.map +1 -1
- package/dist/narrative/branching/engine-simple.d.ts +84 -0
- package/dist/narrative/branching/engine-simple.d.ts.map +1 -0
- package/dist/narrative/branching/engine-simple.js +349 -0
- package/dist/narrative/branching/engine-simple.js.map +1 -0
- package/dist/narrative/branching/index.d.ts +12 -0
- package/dist/narrative/branching/index.d.ts.map +1 -0
- package/dist/narrative/branching/index.js +56 -0
- package/dist/narrative/branching/index.js.map +1 -0
- package/dist/narrative/branching/models.d.ts +223 -0
- package/dist/narrative/branching/models.d.ts.map +1 -0
- package/dist/narrative/branching/models.js +6 -0
- package/dist/narrative/branching/models.js.map +1 -0
- package/dist/performance/HotReloadDelta.d.ts +107 -0
- package/dist/performance/HotReloadDelta.d.ts.map +1 -0
- package/dist/performance/HotReloadDelta.js +333 -0
- package/dist/performance/HotReloadDelta.js.map +1 -0
- package/dist/performance/ObjectPool.d.ts +150 -0
- package/dist/performance/ObjectPool.d.ts.map +1 -0
- package/dist/performance/ObjectPool.js +297 -0
- package/dist/performance/ObjectPool.js.map +1 -0
- package/dist/performance/PerfReporter.d.ts +123 -0
- package/dist/performance/PerfReporter.d.ts.map +1 -0
- package/dist/performance/PerfReporter.js +281 -0
- package/dist/performance/PerfReporter.js.map +1 -0
- package/dist/performance/ThreadPool.d.ts +107 -0
- package/dist/performance/ThreadPool.d.ts.map +1 -0
- package/dist/performance/ThreadPool.js +348 -0
- package/dist/performance/ThreadPool.js.map +1 -0
- package/docs/PERFORMANCE.md +355 -0
- package/docs/branching/ERD.md +214 -0
- package/docs/branching/PDM.md +443 -0
- package/docs/branching/RELEASE-v1.2.0.md +169 -0
- package/examples/branching-advanced-demo.ts +339 -0
- package/examples/branching-quickstart.ts +314 -0
- package/examples/quickstart-demo.js +82 -0
- package/package.json +21 -8
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { QNCEStory, BranchOption, DynamicBranchOperation, BranchHistoryEntry, AIBranchingContext } from './models';
|
|
2
|
+
import { QNCEState } from '../../engine/core';
|
|
3
|
+
/**
|
|
4
|
+
* QNCE Branching Engine - Core API for dynamic narrative branching
|
|
5
|
+
* Simplified implementation focusing on core functionality
|
|
6
|
+
*/
|
|
7
|
+
export declare class QNCEBranchingEngine {
|
|
8
|
+
private story;
|
|
9
|
+
private context;
|
|
10
|
+
private aiContext?;
|
|
11
|
+
constructor(story: QNCEStory, initialState: QNCEState);
|
|
12
|
+
/**
|
|
13
|
+
* Evaluate available branches from current position
|
|
14
|
+
*/
|
|
15
|
+
evaluateAvailableBranches(): Promise<BranchOption[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Execute a branch transition
|
|
18
|
+
*/
|
|
19
|
+
executeBranch(optionId: string): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Dynamic branch insertion at runtime
|
|
22
|
+
*/
|
|
23
|
+
insertDynamicBranch(operation: DynamicBranchOperation): Promise<boolean>;
|
|
24
|
+
/**
|
|
25
|
+
* Remove dynamic branch
|
|
26
|
+
*/
|
|
27
|
+
removeDynamicBranch(branchId: string): Promise<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* Set AI context for enhanced branching decisions
|
|
30
|
+
*/
|
|
31
|
+
setAIContext(aiContext: AIBranchingContext): void;
|
|
32
|
+
/**
|
|
33
|
+
* Generate AI-driven branch options
|
|
34
|
+
*/
|
|
35
|
+
generateAIBranches(maxOptions?: number): Promise<BranchOption[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Get current branching analytics
|
|
38
|
+
*/
|
|
39
|
+
getBranchingAnalytics(): {
|
|
40
|
+
currentChapter: string;
|
|
41
|
+
currentFlow: string;
|
|
42
|
+
historyLength: number;
|
|
43
|
+
pendingBranches: number;
|
|
44
|
+
totalBranchesTraversed: number;
|
|
45
|
+
avgBranchDecisionTime: number;
|
|
46
|
+
mostPopularBranches: string[];
|
|
47
|
+
abandonmentPoints: string[];
|
|
48
|
+
completionRate: number;
|
|
49
|
+
sessionStartTime: Date;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Export branching data for external analysis
|
|
53
|
+
*/
|
|
54
|
+
exportBranchingData(): {
|
|
55
|
+
story: {
|
|
56
|
+
id: string;
|
|
57
|
+
title: string;
|
|
58
|
+
version: string;
|
|
59
|
+
};
|
|
60
|
+
session: {
|
|
61
|
+
startTime: Date;
|
|
62
|
+
currentState: QNCEState;
|
|
63
|
+
branchHistory: BranchHistoryEntry[];
|
|
64
|
+
analytics: import("./models").BranchAnalytics;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
private createBranchContext;
|
|
68
|
+
private getCurrentNode;
|
|
69
|
+
private findBranchPointsForNode;
|
|
70
|
+
private evaluateConditions;
|
|
71
|
+
private evaluateCondition;
|
|
72
|
+
private findBranchOption;
|
|
73
|
+
private findFlow;
|
|
74
|
+
private findChapter;
|
|
75
|
+
private transitionToFlow;
|
|
76
|
+
private recordBranchHistory;
|
|
77
|
+
private updateBranchAnalytics;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Factory function for creating branching engines
|
|
81
|
+
*/
|
|
82
|
+
export declare function createBranchingEngine(story: QNCEStory, initialState: QNCEState): QNCEBranchingEngine;
|
|
83
|
+
export { QNCEBranchingEngine as default };
|
|
84
|
+
//# sourceMappingURL=engine-simple.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-simple.d.ts","sourceRoot":"","sources":["../../../src/narrative/branching/engine-simple.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EAKT,YAAY,EAEZ,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAiB,MAAM,mBAAmB,CAAC;AAE7D;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAqB;gBAE3B,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS;IASrD;;OAEG;IACG,yBAAyB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAwB1D;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA8BvD;;OAEG;IACG,mBAAmB,CAAC,SAAS,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkC9E;;OAEG;IACG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe7D;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,kBAAkB,GAAG,IAAI;IAIjD;;OAEG;IACG,kBAAkB,CAAC,UAAU,SAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAkCjE;;OAEG;IACH,qBAAqB;;;;;;;;;;;;IAUrB;;OAEG;IACH,mBAAmB;;;;;;;;;;;;;IAoBnB,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,uBAAuB;YAMjB,kBAAkB;YASlB,iBAAiB;YA6BjB,gBAAgB;IAY9B,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,WAAW;YAIL,gBAAgB;IAiC9B,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,qBAAqB;CAmB9B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,EAChB,YAAY,EAAE,SAAS,GACtB,mBAAmB,CAErB;AAGD,OAAO,EAAE,mBAAmB,IAAI,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// QNCE Branching API - Simplified Runtime Implementation
|
|
3
|
+
// Sprint #3 - Advanced Narrative & AI Integration
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.default = exports.QNCEBranchingEngine = void 0;
|
|
6
|
+
exports.createBranchingEngine = createBranchingEngine;
|
|
7
|
+
/**
|
|
8
|
+
* QNCE Branching Engine - Core API for dynamic narrative branching
|
|
9
|
+
* Simplified implementation focusing on core functionality
|
|
10
|
+
*/
|
|
11
|
+
class QNCEBranchingEngine {
|
|
12
|
+
story;
|
|
13
|
+
context;
|
|
14
|
+
aiContext;
|
|
15
|
+
constructor(story, initialState) {
|
|
16
|
+
this.story = story;
|
|
17
|
+
this.context = this.createBranchContext(story, initialState);
|
|
18
|
+
}
|
|
19
|
+
// ================================
|
|
20
|
+
// Core Branching Operations
|
|
21
|
+
// ================================
|
|
22
|
+
/**
|
|
23
|
+
* Evaluate available branches from current position
|
|
24
|
+
*/
|
|
25
|
+
async evaluateAvailableBranches() {
|
|
26
|
+
const currentNode = this.getCurrentNode();
|
|
27
|
+
const availableBranches = this.findBranchPointsForNode(this.context.currentFlow.id, currentNode.id);
|
|
28
|
+
const validOptions = [];
|
|
29
|
+
for (const branchPoint of availableBranches) {
|
|
30
|
+
// Evaluate branch point conditions
|
|
31
|
+
if (await this.evaluateConditions(branchPoint.conditions || [])) {
|
|
32
|
+
// Evaluate individual option conditions
|
|
33
|
+
for (const option of branchPoint.branchOptions) {
|
|
34
|
+
if (await this.evaluateConditions(option.conditions || [])) {
|
|
35
|
+
validOptions.push(option);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return validOptions;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Execute a branch transition
|
|
44
|
+
*/
|
|
45
|
+
async executeBranch(optionId) {
|
|
46
|
+
const option = await this.findBranchOption(optionId);
|
|
47
|
+
if (!option) {
|
|
48
|
+
throw new Error(`Branch option not found: ${optionId}`);
|
|
49
|
+
}
|
|
50
|
+
// Apply flag effects
|
|
51
|
+
if (option.flagEffects) {
|
|
52
|
+
Object.assign(this.context.activeState.flags, option.flagEffects);
|
|
53
|
+
}
|
|
54
|
+
// Execute flow transition
|
|
55
|
+
const targetFlow = this.findFlow(option.targetFlowId);
|
|
56
|
+
if (!targetFlow) {
|
|
57
|
+
throw new Error(`Target flow not found: ${option.targetFlowId}`);
|
|
58
|
+
}
|
|
59
|
+
const success = await this.transitionToFlow(targetFlow, option.targetNodeId);
|
|
60
|
+
if (success) {
|
|
61
|
+
// Record branch execution in history
|
|
62
|
+
this.recordBranchHistory(optionId, option);
|
|
63
|
+
// Update analytics
|
|
64
|
+
this.updateBranchAnalytics(optionId);
|
|
65
|
+
}
|
|
66
|
+
return success;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Dynamic branch insertion at runtime
|
|
70
|
+
*/
|
|
71
|
+
async insertDynamicBranch(operation) {
|
|
72
|
+
// Validate operation conditions
|
|
73
|
+
if (operation.conditions && !await this.evaluateConditions(operation.conditions)) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
// Find target location
|
|
77
|
+
const chapter = this.findChapter(operation.targetLocation.chapterId);
|
|
78
|
+
if (!chapter) {
|
|
79
|
+
throw new Error(`Chapter not found: ${operation.targetLocation.chapterId}`);
|
|
80
|
+
}
|
|
81
|
+
// Create new branch point
|
|
82
|
+
const branchPoint = {
|
|
83
|
+
id: operation.branchId,
|
|
84
|
+
name: operation.payload?.name || `Dynamic Branch ${operation.branchId}`,
|
|
85
|
+
sourceFlowId: operation.targetLocation.flowId,
|
|
86
|
+
sourceNodeId: operation.targetLocation.nodeId,
|
|
87
|
+
branchType: operation.payload?.branchType || 'conditional',
|
|
88
|
+
branchOptions: operation.payload?.branchOptions || [],
|
|
89
|
+
conditions: operation.conditions,
|
|
90
|
+
metadata: {
|
|
91
|
+
usageCount: 0,
|
|
92
|
+
avgTraversalTime: 0,
|
|
93
|
+
playerPreference: 0,
|
|
94
|
+
lastUsed: new Date()
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
// Insert into chapter
|
|
98
|
+
chapter.branches.push(branchPoint);
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Remove dynamic branch
|
|
103
|
+
*/
|
|
104
|
+
async removeDynamicBranch(branchId) {
|
|
105
|
+
for (const chapter of this.story.chapters) {
|
|
106
|
+
const index = chapter.branches.findIndex(b => b.id === branchId);
|
|
107
|
+
if (index !== -1) {
|
|
108
|
+
chapter.branches.splice(index, 1);
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
// ================================
|
|
115
|
+
// AI Integration Methods
|
|
116
|
+
// ================================
|
|
117
|
+
/**
|
|
118
|
+
* Set AI context for enhanced branching decisions
|
|
119
|
+
*/
|
|
120
|
+
setAIContext(aiContext) {
|
|
121
|
+
this.aiContext = aiContext;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Generate AI-driven branch options
|
|
125
|
+
*/
|
|
126
|
+
async generateAIBranches(maxOptions = 3) {
|
|
127
|
+
if (!this.aiContext) {
|
|
128
|
+
throw new Error('AI context not set. Call setAIContext() first.');
|
|
129
|
+
}
|
|
130
|
+
const generatedOptions = [];
|
|
131
|
+
const playerProfile = this.aiContext.playerProfile;
|
|
132
|
+
// Example: Generate options based on player style
|
|
133
|
+
if (playerProfile.playStyle === 'explorer') {
|
|
134
|
+
generatedOptions.push({
|
|
135
|
+
id: `ai-explore-${Date.now()}`,
|
|
136
|
+
targetFlowId: this.context.currentFlow.id,
|
|
137
|
+
displayText: "Investigate the mysterious artifact",
|
|
138
|
+
weight: 0.8
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
if (playerProfile.playStyle === 'socializer') {
|
|
142
|
+
generatedOptions.push({
|
|
143
|
+
id: `ai-social-${Date.now()}`,
|
|
144
|
+
targetFlowId: this.context.currentFlow.id,
|
|
145
|
+
displayText: "Ask your companion about their past",
|
|
146
|
+
weight: 0.7
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return generatedOptions.slice(0, maxOptions);
|
|
150
|
+
}
|
|
151
|
+
// ================================
|
|
152
|
+
// Analytics & Monitoring
|
|
153
|
+
// ================================
|
|
154
|
+
/**
|
|
155
|
+
* Get current branching analytics
|
|
156
|
+
*/
|
|
157
|
+
getBranchingAnalytics() {
|
|
158
|
+
return {
|
|
159
|
+
...this.context.analytics,
|
|
160
|
+
currentChapter: this.context.currentChapter.id,
|
|
161
|
+
currentFlow: this.context.currentFlow.id,
|
|
162
|
+
historyLength: this.context.branchHistory.length,
|
|
163
|
+
pendingBranches: this.context.pendingBranches.length
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Export branching data for external analysis
|
|
168
|
+
*/
|
|
169
|
+
exportBranchingData() {
|
|
170
|
+
return {
|
|
171
|
+
story: {
|
|
172
|
+
id: this.story.id,
|
|
173
|
+
title: this.story.title,
|
|
174
|
+
version: this.story.version
|
|
175
|
+
},
|
|
176
|
+
session: {
|
|
177
|
+
startTime: this.context.analytics.sessionStartTime,
|
|
178
|
+
currentState: this.context.activeState,
|
|
179
|
+
branchHistory: this.context.branchHistory,
|
|
180
|
+
analytics: this.context.analytics
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
// ================================
|
|
185
|
+
// Private Helper Methods
|
|
186
|
+
// ================================
|
|
187
|
+
createBranchContext(story, initialState) {
|
|
188
|
+
const initialChapter = story.chapters[0];
|
|
189
|
+
const initialFlow = initialChapter.flows[0];
|
|
190
|
+
return {
|
|
191
|
+
currentStory: story,
|
|
192
|
+
currentChapter: initialChapter,
|
|
193
|
+
currentFlow: initialFlow,
|
|
194
|
+
activeState: initialState,
|
|
195
|
+
branchHistory: [],
|
|
196
|
+
pendingBranches: [],
|
|
197
|
+
analytics: {
|
|
198
|
+
totalBranchesTraversed: 0,
|
|
199
|
+
avgBranchDecisionTime: 0,
|
|
200
|
+
mostPopularBranches: [],
|
|
201
|
+
abandonmentPoints: [],
|
|
202
|
+
completionRate: 0,
|
|
203
|
+
sessionStartTime: new Date()
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
getCurrentNode() {
|
|
208
|
+
const currentNodeId = this.context.activeState.currentNodeId;
|
|
209
|
+
const node = this.context.currentFlow.nodes.find(n => n.id === currentNodeId);
|
|
210
|
+
if (!node) {
|
|
211
|
+
throw new Error(`Current node not found: ${currentNodeId}`);
|
|
212
|
+
}
|
|
213
|
+
return node;
|
|
214
|
+
}
|
|
215
|
+
findBranchPointsForNode(flowId, nodeId) {
|
|
216
|
+
return this.context.currentChapter.branches.filter(b => b.sourceFlowId === flowId && b.sourceNodeId === nodeId);
|
|
217
|
+
}
|
|
218
|
+
async evaluateConditions(conditions) {
|
|
219
|
+
for (const condition of conditions) {
|
|
220
|
+
if (!await this.evaluateCondition(condition)) {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
async evaluateCondition(condition) {
|
|
227
|
+
const { operator, key, value, evaluator } = condition;
|
|
228
|
+
// Custom evaluator takes precedence
|
|
229
|
+
if (evaluator) {
|
|
230
|
+
return evaluator(this.context.activeState, this.context);
|
|
231
|
+
}
|
|
232
|
+
// Standard condition evaluation
|
|
233
|
+
const stateValue = this.context.activeState.flags[key];
|
|
234
|
+
switch (operator) {
|
|
235
|
+
case 'equals':
|
|
236
|
+
return stateValue === value;
|
|
237
|
+
case 'not_equals':
|
|
238
|
+
return stateValue !== value;
|
|
239
|
+
case 'greater':
|
|
240
|
+
return Number(stateValue) > Number(value);
|
|
241
|
+
case 'less':
|
|
242
|
+
return Number(stateValue) < Number(value);
|
|
243
|
+
case 'contains':
|
|
244
|
+
return Array.isArray(stateValue) && stateValue.includes(value);
|
|
245
|
+
case 'exists':
|
|
246
|
+
return stateValue !== undefined;
|
|
247
|
+
default:
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
async findBranchOption(optionId) {
|
|
252
|
+
for (const chapter of this.story.chapters) {
|
|
253
|
+
for (const branchPoint of chapter.branches) {
|
|
254
|
+
const option = branchPoint.branchOptions.find(o => o.id === optionId);
|
|
255
|
+
if (option) {
|
|
256
|
+
return option;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
findFlow(flowId) {
|
|
263
|
+
for (const chapter of this.story.chapters) {
|
|
264
|
+
const flow = chapter.flows.find(f => f.id === flowId);
|
|
265
|
+
if (flow) {
|
|
266
|
+
return flow;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
findChapter(chapterId) {
|
|
272
|
+
return this.story.chapters.find(c => c.id === chapterId) || null;
|
|
273
|
+
}
|
|
274
|
+
async transitionToFlow(targetFlow, targetNodeId) {
|
|
275
|
+
// Find entry point
|
|
276
|
+
let entryNodeId;
|
|
277
|
+
if (targetNodeId) {
|
|
278
|
+
entryNodeId = targetNodeId;
|
|
279
|
+
}
|
|
280
|
+
else if (targetFlow.entryPoints.length > 0) {
|
|
281
|
+
// Use highest priority entry point
|
|
282
|
+
const entryPoint = targetFlow.entryPoints.sort((a, b) => b.priority - a.priority)[0];
|
|
283
|
+
entryNodeId = entryPoint.nodeId;
|
|
284
|
+
}
|
|
285
|
+
else if (targetFlow.nodes.length > 0) {
|
|
286
|
+
// Use first node as fallback
|
|
287
|
+
entryNodeId = targetFlow.nodes[0].id;
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
// Update context
|
|
293
|
+
this.context.currentFlow = targetFlow;
|
|
294
|
+
this.context.activeState.currentNodeId = entryNodeId;
|
|
295
|
+
this.context.activeState.history.push(entryNodeId);
|
|
296
|
+
// Update chapter if necessary
|
|
297
|
+
const targetChapter = this.story.chapters.find(c => c.flows.some(f => f.id === targetFlow.id));
|
|
298
|
+
if (targetChapter) {
|
|
299
|
+
this.context.currentChapter = targetChapter;
|
|
300
|
+
}
|
|
301
|
+
return true;
|
|
302
|
+
}
|
|
303
|
+
recordBranchHistory(optionId, option) {
|
|
304
|
+
const historyEntry = {
|
|
305
|
+
id: `history-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
306
|
+
branchPointId: 'unknown', // Would need to track this
|
|
307
|
+
chosenOptionId: optionId,
|
|
308
|
+
timestamp: new Date(),
|
|
309
|
+
executionTime: 0, // Would measure actual execution time
|
|
310
|
+
context: {
|
|
311
|
+
currentNodeId: this.context.activeState.currentNodeId,
|
|
312
|
+
flags: { ...this.context.activeState.flags }
|
|
313
|
+
}
|
|
314
|
+
};
|
|
315
|
+
this.context.branchHistory.push(historyEntry);
|
|
316
|
+
// Limit history size for memory management
|
|
317
|
+
if (this.context.branchHistory.length > 1000) {
|
|
318
|
+
this.context.branchHistory.splice(0, 100);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
updateBranchAnalytics(optionId) {
|
|
322
|
+
this.context.analytics.totalBranchesTraversed++;
|
|
323
|
+
// Update popular branches
|
|
324
|
+
const popular = this.context.analytics.mostPopularBranches;
|
|
325
|
+
const index = popular.indexOf(optionId);
|
|
326
|
+
if (index !== -1) {
|
|
327
|
+
// Move to front
|
|
328
|
+
popular.splice(index, 1);
|
|
329
|
+
popular.unshift(optionId);
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
// Add to front
|
|
333
|
+
popular.unshift(optionId);
|
|
334
|
+
// Limit to top 10
|
|
335
|
+
if (popular.length > 10) {
|
|
336
|
+
popular.pop();
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
exports.QNCEBranchingEngine = QNCEBranchingEngine;
|
|
342
|
+
exports.default = QNCEBranchingEngine;
|
|
343
|
+
/**
|
|
344
|
+
* Factory function for creating branching engines
|
|
345
|
+
*/
|
|
346
|
+
function createBranchingEngine(story, initialState) {
|
|
347
|
+
return new QNCEBranchingEngine(story, initialState);
|
|
348
|
+
}
|
|
349
|
+
//# sourceMappingURL=engine-simple.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-simple.js","sourceRoot":"","sources":["../../../src/narrative/branching/engine-simple.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { QNCEBranchingEngine, createBranchingEngine } from './engine-simple';
|
|
2
|
+
export * from './models';
|
|
3
|
+
export declare const example: {
|
|
4
|
+
storyStructure: {
|
|
5
|
+
story: string;
|
|
6
|
+
chapters: string;
|
|
7
|
+
flows: string;
|
|
8
|
+
branches: string;
|
|
9
|
+
};
|
|
10
|
+
usage: string;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/narrative/branching/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAG7E,cAAc,UAAU,CAAC;AAGzB,eAAO,MAAM,OAAO;;;;;;;;CA6BnB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// QNCE Branching System - Main Export
|
|
3
|
+
// Sprint #3 - Advanced Narrative & AI Integration
|
|
4
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
+
if (k2 === undefined) k2 = k;
|
|
6
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(o, k2, desc);
|
|
11
|
+
}) : (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
o[k2] = m[k];
|
|
14
|
+
}));
|
|
15
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
16
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.example = exports.createBranchingEngine = exports.QNCEBranchingEngine = void 0;
|
|
20
|
+
// Core branching engine
|
|
21
|
+
var engine_simple_1 = require("./engine-simple");
|
|
22
|
+
Object.defineProperty(exports, "QNCEBranchingEngine", { enumerable: true, get: function () { return engine_simple_1.QNCEBranchingEngine; } });
|
|
23
|
+
Object.defineProperty(exports, "createBranchingEngine", { enumerable: true, get: function () { return engine_simple_1.createBranchingEngine; } });
|
|
24
|
+
// Complete type system
|
|
25
|
+
__exportStar(require("./models"), exports);
|
|
26
|
+
// Usage example for documentation
|
|
27
|
+
exports.example = {
|
|
28
|
+
// Example story structure showing branching capabilities
|
|
29
|
+
storyStructure: {
|
|
30
|
+
story: 'QNCEStory with chapters and branching config',
|
|
31
|
+
chapters: 'Logical groupings of flows and branch points',
|
|
32
|
+
flows: 'Sequences of narrative nodes with entry/exit points',
|
|
33
|
+
branches: 'Dynamic decision points with conditions and options'
|
|
34
|
+
},
|
|
35
|
+
// Example API usage
|
|
36
|
+
usage: `
|
|
37
|
+
import { createBranchingEngine, QNCEStory } from 'qnce-engine/branching';
|
|
38
|
+
|
|
39
|
+
// Create branching engine
|
|
40
|
+
const engine = createBranchingEngine(story, initialState);
|
|
41
|
+
|
|
42
|
+
// Evaluate available branches
|
|
43
|
+
const options = await engine.evaluateAvailableBranches();
|
|
44
|
+
|
|
45
|
+
// Execute player choice
|
|
46
|
+
await engine.executeBranch(selectedOptionId);
|
|
47
|
+
|
|
48
|
+
// Dynamic content insertion
|
|
49
|
+
await engine.insertDynamicBranch(branchOperation);
|
|
50
|
+
|
|
51
|
+
// AI-driven content generation
|
|
52
|
+
engine.setAIContext(aiContext);
|
|
53
|
+
const aiBranches = await engine.generateAIBranches();
|
|
54
|
+
`
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/narrative/branching/index.ts"],"names":[],"mappings":";AAAA,sCAAsC;AACtC,kDAAkD;;;;;;;;;;;;;;;;;AAElD,wBAAwB;AACxB,iDAA6E;AAApE,oHAAA,mBAAmB,OAAA;AAAE,sHAAA,qBAAqB,OAAA;AAEnD,uBAAuB;AACvB,2CAAyB;AAEzB,kCAAkC;AACrB,QAAA,OAAO,GAAG;IACrB,yDAAyD;IACzD,cAAc,EAAE;QACd,KAAK,EAAE,8CAA8C;QACrD,QAAQ,EAAE,8CAA8C;QACxD,KAAK,EAAE,qDAAqD;QAC5D,QAAQ,EAAE,qDAAqD;KAChE;IAED,oBAAoB;IACpB,KAAK,EAAE;;;;;;;;;;;;;;;;;;GAkBN;CACF,CAAC"}
|