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
package/dist/engine/core.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { ThreadPoolConfig } from '../performance/ThreadPool';
|
|
2
|
+
import { QNCEBranchingEngine } from '../narrative/branching';
|
|
3
|
+
import { QNCEStory } from '../narrative/branching/models';
|
|
1
4
|
export interface Choice {
|
|
2
5
|
text: string;
|
|
3
6
|
nextNodeId: string;
|
|
4
|
-
flagEffects?: Record<string,
|
|
7
|
+
flagEffects?: Record<string, unknown>;
|
|
5
8
|
}
|
|
6
9
|
export interface NarrativeNode {
|
|
7
10
|
id: string;
|
|
@@ -10,37 +13,130 @@ export interface NarrativeNode {
|
|
|
10
13
|
}
|
|
11
14
|
export interface QNCEState {
|
|
12
15
|
currentNodeId: string;
|
|
13
|
-
flags: Record<string,
|
|
16
|
+
flags: Record<string, unknown>;
|
|
14
17
|
history: string[];
|
|
15
18
|
}
|
|
19
|
+
export interface FlowEvent {
|
|
20
|
+
id: string;
|
|
21
|
+
fromNodeId: string;
|
|
22
|
+
toNodeId: string;
|
|
23
|
+
timestamp: number;
|
|
24
|
+
metadata?: Record<string, unknown>;
|
|
25
|
+
}
|
|
16
26
|
export interface StoryData {
|
|
17
27
|
nodes: NarrativeNode[];
|
|
18
28
|
initialNodeId: string;
|
|
19
29
|
}
|
|
20
30
|
/**
|
|
21
31
|
* QNCE Engine - Core narrative state management
|
|
22
|
-
* Framework agnostic implementation
|
|
32
|
+
* Framework agnostic implementation with object pooling integration
|
|
23
33
|
*/
|
|
24
34
|
export declare class QNCEEngine {
|
|
25
35
|
private state;
|
|
26
36
|
private storyData;
|
|
27
|
-
|
|
37
|
+
private activeFlowEvents;
|
|
38
|
+
private performanceMode;
|
|
39
|
+
private enableProfiling;
|
|
40
|
+
private branchingEngine?;
|
|
41
|
+
constructor(storyData: StoryData, initialState?: Partial<QNCEState>, performanceMode?: boolean, threadPoolConfig?: Partial<ThreadPoolConfig>);
|
|
28
42
|
getCurrentNode(): NarrativeNode;
|
|
29
43
|
getState(): QNCEState;
|
|
30
|
-
getFlags(): Record<string,
|
|
44
|
+
getFlags(): Record<string, unknown>;
|
|
31
45
|
getHistory(): string[];
|
|
32
46
|
selectChoice(choice: Choice): void;
|
|
33
47
|
resetNarrative(): void;
|
|
34
48
|
loadState(state: QNCEState): void;
|
|
35
|
-
checkFlag(flagName: string, expectedValue?:
|
|
49
|
+
checkFlag(flagName: string, expectedValue?: unknown): boolean;
|
|
36
50
|
getAvailableChoices(): Choice[];
|
|
51
|
+
/**
|
|
52
|
+
* Create a flow event using pooled objects for performance tracking
|
|
53
|
+
*/
|
|
54
|
+
private createFlowEvent;
|
|
55
|
+
/**
|
|
56
|
+
* Record and manage flow events
|
|
57
|
+
*/
|
|
58
|
+
private recordFlowEvent;
|
|
59
|
+
/**
|
|
60
|
+
* Get current flow events (for debugging/monitoring)
|
|
61
|
+
*/
|
|
62
|
+
getActiveFlows(): FlowEvent[];
|
|
63
|
+
/**
|
|
64
|
+
* Get object pool statistics for performance monitoring
|
|
65
|
+
*/
|
|
66
|
+
getPoolStats(): {
|
|
67
|
+
flows: {
|
|
68
|
+
poolSize: number;
|
|
69
|
+
maxSize: number;
|
|
70
|
+
created: number;
|
|
71
|
+
borrowed: number;
|
|
72
|
+
returned: number;
|
|
73
|
+
inUse: number;
|
|
74
|
+
hitRate: number;
|
|
75
|
+
};
|
|
76
|
+
nodes: {
|
|
77
|
+
poolSize: number;
|
|
78
|
+
maxSize: number;
|
|
79
|
+
created: number;
|
|
80
|
+
borrowed: number;
|
|
81
|
+
returned: number;
|
|
82
|
+
inUse: number;
|
|
83
|
+
hitRate: number;
|
|
84
|
+
};
|
|
85
|
+
assets: {
|
|
86
|
+
poolSize: number;
|
|
87
|
+
maxSize: number;
|
|
88
|
+
created: number;
|
|
89
|
+
borrowed: number;
|
|
90
|
+
returned: number;
|
|
91
|
+
inUse: number;
|
|
92
|
+
hitRate: number;
|
|
93
|
+
};
|
|
94
|
+
} | null;
|
|
95
|
+
/**
|
|
96
|
+
* Return all pooled objects (cleanup method)
|
|
97
|
+
*/
|
|
98
|
+
private cleanupPools;
|
|
99
|
+
/**
|
|
100
|
+
* Preload next possible nodes in background using ThreadPool
|
|
101
|
+
*/
|
|
102
|
+
preloadNextNodes(choice?: Choice): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Write telemetry data in background using ThreadPool
|
|
105
|
+
*/
|
|
106
|
+
backgroundTelemetryWrite(eventData: Record<string, unknown>): Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Enable advanced branching capabilities for this story
|
|
109
|
+
* Integrates the QNCE Branching API with the core engine
|
|
110
|
+
*/
|
|
111
|
+
enableBranching(story: QNCEStory): QNCEBranchingEngine;
|
|
112
|
+
/**
|
|
113
|
+
* Get the branching engine if enabled
|
|
114
|
+
*/
|
|
115
|
+
getBranchingEngine(): QNCEBranchingEngine | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* Check if branching is enabled
|
|
118
|
+
*/
|
|
119
|
+
isBranchingEnabled(): boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Sync core engine state with branching engine
|
|
122
|
+
* Call this when core state changes to keep branching engine updated
|
|
123
|
+
*/
|
|
124
|
+
syncBranchingState(): void;
|
|
125
|
+
/**
|
|
126
|
+
* Disable branching and cleanup resources
|
|
127
|
+
*/
|
|
128
|
+
disableBranching(): void;
|
|
129
|
+
/**
|
|
130
|
+
* Background cache warming for story data
|
|
131
|
+
*/
|
|
132
|
+
warmCache(): Promise<void>;
|
|
37
133
|
}
|
|
38
134
|
/**
|
|
39
135
|
* Factory function to create a QNCE engine instance
|
|
40
136
|
*/
|
|
41
|
-
export declare function createQNCEEngine(storyData: StoryData, initialState?: Partial<QNCEState
|
|
137
|
+
export declare function createQNCEEngine(storyData: StoryData, initialState?: Partial<QNCEState>, performanceMode?: boolean): QNCEEngine;
|
|
42
138
|
/**
|
|
43
139
|
* Load story data from JSON
|
|
44
140
|
*/
|
|
45
|
-
export declare function loadStoryData(jsonData:
|
|
141
|
+
export declare function loadStoryData(jsonData: unknown): StoryData;
|
|
46
142
|
//# sourceMappingURL=core.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/engine/core.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/engine/core.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/core.js
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
// QNCE Core Engine - Framework Agnostic
|
|
2
3
|
// Quantum Narrative Convergence Engine
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.QNCEEngine = void 0;
|
|
6
|
+
exports.createQNCEEngine = createQNCEEngine;
|
|
7
|
+
exports.loadStoryData = loadStoryData;
|
|
8
|
+
const ObjectPool_1 = require("../performance/ObjectPool");
|
|
9
|
+
const ThreadPool_1 = require("../performance/ThreadPool");
|
|
10
|
+
const PerfReporter_1 = require("../performance/PerfReporter");
|
|
11
|
+
// Branching system imports
|
|
12
|
+
const branching_1 = require("../narrative/branching");
|
|
3
13
|
// Demo narrative data moved to demo-story.ts
|
|
4
14
|
function findNode(nodes, id) {
|
|
5
15
|
const node = nodes.find(n => n.id === id);
|
|
@@ -9,13 +19,23 @@ function findNode(nodes, id) {
|
|
|
9
19
|
}
|
|
10
20
|
/**
|
|
11
21
|
* QNCE Engine - Core narrative state management
|
|
12
|
-
* Framework agnostic implementation
|
|
22
|
+
* Framework agnostic implementation with object pooling integration
|
|
13
23
|
*/
|
|
14
|
-
|
|
24
|
+
class QNCEEngine {
|
|
15
25
|
state;
|
|
16
26
|
storyData;
|
|
17
|
-
|
|
27
|
+
activeFlowEvents = [];
|
|
28
|
+
performanceMode = false;
|
|
29
|
+
enableProfiling = false;
|
|
30
|
+
branchingEngine;
|
|
31
|
+
constructor(storyData, initialState, performanceMode = false, threadPoolConfig) {
|
|
18
32
|
this.storyData = storyData;
|
|
33
|
+
this.performanceMode = performanceMode;
|
|
34
|
+
this.enableProfiling = performanceMode; // Enable profiling with performance mode
|
|
35
|
+
// Initialize ThreadPool if in performance mode
|
|
36
|
+
if (this.performanceMode && threadPoolConfig) {
|
|
37
|
+
(0, ThreadPool_1.getThreadPool)(threadPoolConfig);
|
|
38
|
+
}
|
|
19
39
|
this.state = {
|
|
20
40
|
currentNodeId: initialState?.currentNodeId || storyData.initialNodeId,
|
|
21
41
|
flags: initialState?.flags || {},
|
|
@@ -23,6 +43,25 @@ export class QNCEEngine {
|
|
|
23
43
|
};
|
|
24
44
|
}
|
|
25
45
|
getCurrentNode() {
|
|
46
|
+
const cacheKey = `node-${this.state.currentNodeId}`;
|
|
47
|
+
// Profiling: Record cache operation
|
|
48
|
+
if (this.enableProfiling) {
|
|
49
|
+
const found = findNode(this.storyData.nodes, this.state.currentNodeId);
|
|
50
|
+
PerfReporter_1.perf.cacheHit(cacheKey, { nodeId: this.state.currentNodeId });
|
|
51
|
+
return found;
|
|
52
|
+
}
|
|
53
|
+
if (this.performanceMode) {
|
|
54
|
+
// Use pooled node for enhanced node data
|
|
55
|
+
const pooledNode = ObjectPool_1.poolManager.borrowNode();
|
|
56
|
+
const coreNode = findNode(this.storyData.nodes, this.state.currentNodeId);
|
|
57
|
+
pooledNode.initialize(coreNode.id, coreNode.text, coreNode.choices);
|
|
58
|
+
// Return the pooled node (caller should return it when done)
|
|
59
|
+
return {
|
|
60
|
+
id: pooledNode.id,
|
|
61
|
+
text: pooledNode.text,
|
|
62
|
+
choices: pooledNode.choices
|
|
63
|
+
};
|
|
64
|
+
}
|
|
26
65
|
return findNode(this.storyData.nodes, this.state.currentNodeId);
|
|
27
66
|
}
|
|
28
67
|
getState() {
|
|
@@ -35,13 +74,72 @@ export class QNCEEngine {
|
|
|
35
74
|
return [...this.state.history];
|
|
36
75
|
}
|
|
37
76
|
selectChoice(choice) {
|
|
77
|
+
// S2-T4: Add state transition profiling
|
|
78
|
+
const transitionSpanId = this.enableProfiling
|
|
79
|
+
? (0, PerfReporter_1.getPerfReporter)().startSpan('state-transition', {
|
|
80
|
+
fromNodeId: this.state.currentNodeId,
|
|
81
|
+
toNodeId: choice.nextNodeId,
|
|
82
|
+
hasEffects: !!choice.flagEffects
|
|
83
|
+
})
|
|
84
|
+
: null;
|
|
85
|
+
const fromNodeId = this.state.currentNodeId;
|
|
86
|
+
const toNodeId = choice.nextNodeId;
|
|
87
|
+
// Create flow event for tracking narrative progression
|
|
88
|
+
if (this.performanceMode) {
|
|
89
|
+
const flowSpanId = this.enableProfiling
|
|
90
|
+
? PerfReporter_1.perf.flowStart(fromNodeId, { toNodeId })
|
|
91
|
+
: null;
|
|
92
|
+
const flowEvent = this.createFlowEvent(fromNodeId, toNodeId, choice.flagEffects);
|
|
93
|
+
this.recordFlowEvent(flowEvent);
|
|
94
|
+
// Return the flow immediately after recording (we don't need to keep it)
|
|
95
|
+
// This ensures proper pool recycling
|
|
96
|
+
ObjectPool_1.poolManager.returnFlow(flowEvent);
|
|
97
|
+
if (flowSpanId) {
|
|
98
|
+
PerfReporter_1.perf.flowComplete(flowSpanId, toNodeId, { transitionType: 'choice' });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
38
101
|
this.state.currentNodeId = choice.nextNodeId;
|
|
39
102
|
this.state.history.push(choice.nextNodeId);
|
|
40
103
|
if (choice.flagEffects) {
|
|
41
104
|
this.state.flags = { ...this.state.flags, ...choice.flagEffects };
|
|
105
|
+
// S2-T4: Track flag updates
|
|
106
|
+
if (this.enableProfiling) {
|
|
107
|
+
PerfReporter_1.perf.record('custom', {
|
|
108
|
+
flagCount: Object.keys(choice.flagEffects).length,
|
|
109
|
+
nodeId: toNodeId,
|
|
110
|
+
eventType: 'flag-update'
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Complete state transition span
|
|
115
|
+
if (transitionSpanId) {
|
|
116
|
+
(0, PerfReporter_1.getPerfReporter)().endSpan(transitionSpanId, {
|
|
117
|
+
historyLength: this.state.history.length,
|
|
118
|
+
flagCount: Object.keys(this.state.flags).length
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
// S2-T2: Background operations after state change
|
|
122
|
+
if (this.performanceMode) {
|
|
123
|
+
// Preload next possible nodes in background
|
|
124
|
+
this.preloadNextNodes().catch(error => {
|
|
125
|
+
console.warn('[QNCE] Background preload failed:', error.message);
|
|
126
|
+
});
|
|
127
|
+
// Write telemetry data in background
|
|
128
|
+
this.backgroundTelemetryWrite({
|
|
129
|
+
action: 'choice-selected',
|
|
130
|
+
fromNodeId,
|
|
131
|
+
toNodeId,
|
|
132
|
+
choiceText: choice.text.slice(0, 50) // First 50 chars for privacy
|
|
133
|
+
}).catch(error => {
|
|
134
|
+
console.warn('[QNCE] Background telemetry failed:', error.message);
|
|
135
|
+
});
|
|
42
136
|
}
|
|
43
137
|
}
|
|
44
138
|
resetNarrative() {
|
|
139
|
+
// Clean up pooled objects before reset
|
|
140
|
+
if (this.performanceMode) {
|
|
141
|
+
this.cleanupPools();
|
|
142
|
+
}
|
|
45
143
|
this.state.currentNodeId = this.storyData.initialNodeId;
|
|
46
144
|
this.state.flags = {};
|
|
47
145
|
this.state.history = [this.storyData.initialNodeId];
|
|
@@ -59,22 +157,205 @@ export class QNCEEngine {
|
|
|
59
157
|
// Get available choices (with potential flag-based filtering)
|
|
60
158
|
getAvailableChoices() {
|
|
61
159
|
const currentNode = this.getCurrentNode();
|
|
62
|
-
return currentNode.choices.filter(
|
|
160
|
+
return currentNode.choices.filter(() => {
|
|
63
161
|
// Future: Add flag-based choice filtering logic here
|
|
64
162
|
return true;
|
|
65
163
|
});
|
|
66
164
|
}
|
|
165
|
+
// Performance and object pooling methods
|
|
166
|
+
/**
|
|
167
|
+
* Create a flow event using pooled objects for performance tracking
|
|
168
|
+
*/
|
|
169
|
+
createFlowEvent(fromNodeId, toNodeId, metadata) {
|
|
170
|
+
const flow = ObjectPool_1.poolManager.borrowFlow();
|
|
171
|
+
flow.initialize(fromNodeId, metadata);
|
|
172
|
+
flow.addTransition(fromNodeId, toNodeId);
|
|
173
|
+
return flow;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Record and manage flow events
|
|
177
|
+
*/
|
|
178
|
+
recordFlowEvent(flow) {
|
|
179
|
+
const flowEvent = {
|
|
180
|
+
id: `${flow.nodeId}-${Date.now()}`,
|
|
181
|
+
fromNodeId: flow.nodeId,
|
|
182
|
+
toNodeId: flow.transitions[flow.transitions.length - 1]?.split('->')[1] || '',
|
|
183
|
+
timestamp: flow.timestamp,
|
|
184
|
+
metadata: flow.metadata
|
|
185
|
+
};
|
|
186
|
+
this.activeFlowEvents.push(flowEvent);
|
|
187
|
+
// Clean up old flow events (basic LRU-style cleanup)
|
|
188
|
+
if (this.activeFlowEvents.length > 10) {
|
|
189
|
+
this.activeFlowEvents.shift(); // Remove oldest
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get current flow events (for debugging/monitoring)
|
|
194
|
+
*/
|
|
195
|
+
getActiveFlows() {
|
|
196
|
+
return [...this.activeFlowEvents];
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get object pool statistics for performance monitoring
|
|
200
|
+
*/
|
|
201
|
+
getPoolStats() {
|
|
202
|
+
return this.performanceMode ? ObjectPool_1.poolManager.getAllStats() : null;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Return all pooled objects (cleanup method)
|
|
206
|
+
*/
|
|
207
|
+
cleanupPools() {
|
|
208
|
+
// Clear flow events (no pooled objects to return since we return them immediately)
|
|
209
|
+
this.activeFlowEvents.length = 0;
|
|
210
|
+
}
|
|
211
|
+
// S2-T2: Background ThreadPool Operations
|
|
212
|
+
/**
|
|
213
|
+
* Preload next possible nodes in background using ThreadPool
|
|
214
|
+
*/
|
|
215
|
+
async preloadNextNodes(choice) {
|
|
216
|
+
if (!this.performanceMode)
|
|
217
|
+
return;
|
|
218
|
+
const threadPool = (0, ThreadPool_1.getThreadPool)();
|
|
219
|
+
const currentNode = this.getCurrentNode();
|
|
220
|
+
const choicesToPreload = choice ? [choice] : currentNode.choices;
|
|
221
|
+
// Submit background jobs for each node to preload
|
|
222
|
+
for (const ch of choicesToPreload) {
|
|
223
|
+
threadPool.submitJob('cache-load', { nodeId: ch.nextNodeId }, 'normal').catch(error => {
|
|
224
|
+
if (this.enableProfiling) {
|
|
225
|
+
PerfReporter_1.perf.record('cache-miss', {
|
|
226
|
+
nodeId: ch.nextNodeId,
|
|
227
|
+
error: error.message,
|
|
228
|
+
jobType: 'preload'
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Write telemetry data in background using ThreadPool
|
|
236
|
+
*/
|
|
237
|
+
async backgroundTelemetryWrite(eventData) {
|
|
238
|
+
if (!this.performanceMode || !this.enableProfiling)
|
|
239
|
+
return;
|
|
240
|
+
const threadPool = (0, ThreadPool_1.getThreadPool)();
|
|
241
|
+
const telemetryData = {
|
|
242
|
+
timestamp: performance.now(),
|
|
243
|
+
sessionId: this.state.history[0], // Use first node as session ID
|
|
244
|
+
eventData,
|
|
245
|
+
stateSnapshot: {
|
|
246
|
+
nodeId: this.state.currentNodeId,
|
|
247
|
+
flagCount: Object.keys(this.state.flags).length,
|
|
248
|
+
historyLength: this.state.history.length
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
threadPool.submitJob('telemetry-write', telemetryData, 'low').catch(error => {
|
|
252
|
+
console.warn('[QNCE] Telemetry write failed:', error.message);
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
// ================================
|
|
256
|
+
// Sprint #3: Advanced Branching System Integration
|
|
257
|
+
// ================================
|
|
258
|
+
/**
|
|
259
|
+
* Enable advanced branching capabilities for this story
|
|
260
|
+
* Integrates the QNCE Branching API with the core engine
|
|
261
|
+
*/
|
|
262
|
+
enableBranching(story) {
|
|
263
|
+
if (this.branchingEngine) {
|
|
264
|
+
console.warn('[QNCE] Branching already enabled for this engine instance');
|
|
265
|
+
return this.branchingEngine;
|
|
266
|
+
}
|
|
267
|
+
// Create branching engine with current state
|
|
268
|
+
this.branchingEngine = (0, branching_1.createBranchingEngine)(story, this.state);
|
|
269
|
+
if (this.enableProfiling) {
|
|
270
|
+
PerfReporter_1.perf.record('custom', {
|
|
271
|
+
eventType: 'branching-enabled',
|
|
272
|
+
storyId: story.id,
|
|
273
|
+
chapterCount: story.chapters.length,
|
|
274
|
+
performanceMode: this.performanceMode
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
return this.branchingEngine;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Get the branching engine if enabled
|
|
281
|
+
*/
|
|
282
|
+
getBranchingEngine() {
|
|
283
|
+
return this.branchingEngine;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Check if branching is enabled
|
|
287
|
+
*/
|
|
288
|
+
isBranchingEnabled() {
|
|
289
|
+
return !!this.branchingEngine;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Sync core engine state with branching engine
|
|
293
|
+
* Call this when core state changes to keep branching engine updated
|
|
294
|
+
*/
|
|
295
|
+
syncBranchingState() {
|
|
296
|
+
if (this.branchingEngine) {
|
|
297
|
+
// The branching engine maintains its own state copy
|
|
298
|
+
// This method could be extended to sync state changes
|
|
299
|
+
if (this.enableProfiling) {
|
|
300
|
+
PerfReporter_1.perf.record('custom', {
|
|
301
|
+
eventType: 'branching-state-synced',
|
|
302
|
+
currentNodeId: this.state.currentNodeId
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Disable branching and cleanup resources
|
|
309
|
+
*/
|
|
310
|
+
disableBranching() {
|
|
311
|
+
if (this.branchingEngine) {
|
|
312
|
+
this.branchingEngine = undefined;
|
|
313
|
+
if (this.enableProfiling) {
|
|
314
|
+
PerfReporter_1.perf.record('custom', {
|
|
315
|
+
eventType: 'branching-disabled'
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Background cache warming for story data
|
|
322
|
+
*/
|
|
323
|
+
async warmCache() {
|
|
324
|
+
if (!this.performanceMode)
|
|
325
|
+
return;
|
|
326
|
+
const threadPool = (0, ThreadPool_1.getThreadPool)();
|
|
327
|
+
// Cache all nodes in background
|
|
328
|
+
const cacheWarmData = {
|
|
329
|
+
nodeIds: this.storyData.nodes.map(n => n.id),
|
|
330
|
+
storyId: this.storyData.initialNodeId
|
|
331
|
+
};
|
|
332
|
+
if (this.enableProfiling) {
|
|
333
|
+
PerfReporter_1.perf.record('custom', {
|
|
334
|
+
eventType: 'cache-warm-start',
|
|
335
|
+
nodeCount: this.storyData.nodes.length
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
threadPool.submitJob('cache-load', cacheWarmData, 'low').catch(error => {
|
|
339
|
+
if (this.enableProfiling) {
|
|
340
|
+
PerfReporter_1.perf.record('custom', {
|
|
341
|
+
eventType: 'cache-warm-failed',
|
|
342
|
+
error: error.message
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
}
|
|
67
347
|
}
|
|
348
|
+
exports.QNCEEngine = QNCEEngine;
|
|
68
349
|
/**
|
|
69
350
|
* Factory function to create a QNCE engine instance
|
|
70
351
|
*/
|
|
71
|
-
|
|
72
|
-
return new QNCEEngine(storyData, initialState);
|
|
352
|
+
function createQNCEEngine(storyData, initialState, performanceMode = false) {
|
|
353
|
+
return new QNCEEngine(storyData, initialState, performanceMode);
|
|
73
354
|
}
|
|
74
355
|
/**
|
|
75
356
|
* Load story data from JSON
|
|
76
357
|
*/
|
|
77
|
-
|
|
358
|
+
function loadStoryData(jsonData) {
|
|
78
359
|
// Add validation here in the future
|
|
79
360
|
return jsonData;
|
|
80
361
|
}
|
package/dist/engine/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/engine/core.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,uCAAuC;
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/engine/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demo-story.js","sourceRoot":"","sources":["../../src/engine/demo-story.ts"],"names":[],"mappings":"AAEA,sCAAsC;
|
|
1
|
+
{"version":3,"file":"demo-story.js","sourceRoot":"","sources":["../../src/engine/demo-story.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.loadStoryData = exports.createQNCEEngine = exports.QNCEEngine = exports.DEMO_STORY = void 0;
|
|
1
18
|
// QNCE Engine - Main Export
|
|
2
|
-
|
|
3
|
-
|
|
19
|
+
__exportStar(require("./engine/core.js"), exports);
|
|
20
|
+
var demo_story_js_1 = require("./engine/demo-story.js");
|
|
21
|
+
Object.defineProperty(exports, "DEMO_STORY", { enumerable: true, get: function () { return demo_story_js_1.DEMO_STORY; } });
|
|
4
22
|
// Re-export for convenience
|
|
5
|
-
|
|
23
|
+
var core_js_1 = require("./engine/core.js");
|
|
24
|
+
Object.defineProperty(exports, "QNCEEngine", { enumerable: true, get: function () { return core_js_1.QNCEEngine; } });
|
|
25
|
+
Object.defineProperty(exports, "createQNCEEngine", { enumerable: true, get: function () { return core_js_1.createQNCEEngine; } });
|
|
26
|
+
Object.defineProperty(exports, "loadStoryData", { enumerable: true, get: function () { return core_js_1.loadStoryData; } });
|
|
6
27
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,4BAA4B;AAC5B,mDAAiC;AACjC,wDAAoD;AAA3C,2GAAA,UAAU,OAAA;AAEnB,4BAA4B;AAC5B,4CAQ0B;AAPxB,qGAAA,UAAU,OAAA;AACV,2GAAA,gBAAgB,OAAA;AAChB,wGAAA,aAAa,OAAA"}
|