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,348 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// S2-T2: Multithreaded Job Scheduler Integration
|
|
3
|
+
// QnceThreadPool for cache loads and telemetry writes off main thread
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.QnceThreadPool = void 0;
|
|
6
|
+
exports.getThreadPool = getThreadPool;
|
|
7
|
+
exports.shutdownThreadPool = shutdownThreadPool;
|
|
8
|
+
/**
|
|
9
|
+
* QnceThreadPool - Background job processing for QNCE engine
|
|
10
|
+
* Handles cache operations, telemetry, and other non-blocking tasks
|
|
11
|
+
*/
|
|
12
|
+
class QnceThreadPool {
|
|
13
|
+
workers = [];
|
|
14
|
+
jobQueue = [];
|
|
15
|
+
activeJobs = new Map();
|
|
16
|
+
config;
|
|
17
|
+
stats;
|
|
18
|
+
isShuttingDown = false;
|
|
19
|
+
constructor(config = {}) {
|
|
20
|
+
this.config = {
|
|
21
|
+
maxWorkers: config.maxWorkers || Math.max(1, Math.floor(navigator?.hardwareConcurrency || 4) / 2),
|
|
22
|
+
queueLimit: config.queueLimit || 100,
|
|
23
|
+
idleTimeout: config.idleTimeout || 30000,
|
|
24
|
+
enableProfiling: config.enableProfiling || false
|
|
25
|
+
};
|
|
26
|
+
this.stats = {
|
|
27
|
+
activeWorkers: 0,
|
|
28
|
+
queuedJobs: 0,
|
|
29
|
+
completedJobs: 0,
|
|
30
|
+
failedJobs: 0,
|
|
31
|
+
avgExecutionTime: 0,
|
|
32
|
+
workerUtilization: 0
|
|
33
|
+
};
|
|
34
|
+
this.initializeWorkers();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Submit job for background processing
|
|
38
|
+
*/
|
|
39
|
+
async submitJob(type, payload, priority = 'normal') {
|
|
40
|
+
return new Promise((resolve, reject) => {
|
|
41
|
+
if (this.isShuttingDown) {
|
|
42
|
+
reject(new Error('ThreadPool is shutting down'));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (this.jobQueue.length >= this.config.queueLimit) {
|
|
46
|
+
reject(new Error('Job queue limit exceeded'));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const job = {
|
|
50
|
+
id: `job-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
51
|
+
type,
|
|
52
|
+
priority,
|
|
53
|
+
payload,
|
|
54
|
+
timestamp: performance.now(),
|
|
55
|
+
resolve: resolve,
|
|
56
|
+
reject
|
|
57
|
+
};
|
|
58
|
+
// Insert based on priority (high -> normal -> low)
|
|
59
|
+
const insertIndex = this.findInsertionIndex(priority);
|
|
60
|
+
this.jobQueue.splice(insertIndex, 0, job);
|
|
61
|
+
this.stats.queuedJobs = this.jobQueue.length;
|
|
62
|
+
this.processQueue();
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Cache load operation (S2-T2 primary use case)
|
|
67
|
+
*/
|
|
68
|
+
async loadFromCache(cacheKey, loader) {
|
|
69
|
+
return this.submitJob('cache-load', { cacheKey, loader: loader.toString() }, 'normal');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Telemetry write operation (S2-T2 primary use case)
|
|
73
|
+
*/
|
|
74
|
+
async writeTelemetry(eventData) {
|
|
75
|
+
return this.submitJob('telemetry-write', eventData, 'low');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Hot-reload preparation (integration with S2-T3)
|
|
79
|
+
*/
|
|
80
|
+
async prepareHotReload(deltaData) {
|
|
81
|
+
return this.submitJob('hot-reload-prep', deltaData, 'high');
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get current thread pool statistics
|
|
85
|
+
*/
|
|
86
|
+
getStats() {
|
|
87
|
+
return { ...this.stats };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Graceful shutdown of thread pool
|
|
91
|
+
*/
|
|
92
|
+
async shutdown(timeoutMs = 5000) {
|
|
93
|
+
this.isShuttingDown = true;
|
|
94
|
+
const startTime = Date.now();
|
|
95
|
+
// Wait for active jobs to complete or timeout
|
|
96
|
+
while (this.activeJobs.size > 0 && (Date.now() - startTime) < timeoutMs) {
|
|
97
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
98
|
+
}
|
|
99
|
+
// Terminate all workers
|
|
100
|
+
for (const worker of this.workers) {
|
|
101
|
+
worker.terminate();
|
|
102
|
+
}
|
|
103
|
+
this.workers.length = 0;
|
|
104
|
+
this.stats.activeWorkers = 0;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Initialize worker threads based on environment
|
|
108
|
+
*/
|
|
109
|
+
initializeWorkers() {
|
|
110
|
+
// Browser environment: Use Web Workers
|
|
111
|
+
if (typeof Worker !== 'undefined' && typeof window !== 'undefined') {
|
|
112
|
+
this.initializeWebWorkers();
|
|
113
|
+
}
|
|
114
|
+
// Node.js environment: Use worker_threads
|
|
115
|
+
else if (typeof require !== 'undefined') {
|
|
116
|
+
this.initializeNodeWorkers();
|
|
117
|
+
}
|
|
118
|
+
// Fallback: Simulate workers with setTimeout (for testing)
|
|
119
|
+
else {
|
|
120
|
+
this.initializeFallbackWorkers();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Web Workers for browser environment
|
|
125
|
+
*/
|
|
126
|
+
initializeWebWorkers() {
|
|
127
|
+
const workerCode = this.generateWebWorkerCode();
|
|
128
|
+
const workerBlob = new Blob([workerCode], { type: 'application/javascript' });
|
|
129
|
+
const workerUrl = URL.createObjectURL(workerBlob);
|
|
130
|
+
for (let i = 0; i < this.config.maxWorkers; i++) {
|
|
131
|
+
try {
|
|
132
|
+
const worker = new Worker(workerUrl);
|
|
133
|
+
this.setupWorkerHandlers(worker, i);
|
|
134
|
+
this.workers.push(worker);
|
|
135
|
+
this.stats.activeWorkers++;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
console.warn(`Failed to create worker ${i}:`, error);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Node.js worker_threads (placeholder - would need actual implementation)
|
|
144
|
+
*/
|
|
145
|
+
initializeNodeWorkers() {
|
|
146
|
+
// TODO: Implement worker_threads for Node.js environment
|
|
147
|
+
// For now, fall back to simulation
|
|
148
|
+
this.initializeFallbackWorkers();
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Fallback simulation for testing/development
|
|
152
|
+
*/
|
|
153
|
+
initializeFallbackWorkers() {
|
|
154
|
+
// Simulate workers with async processing
|
|
155
|
+
for (let i = 0; i < this.config.maxWorkers; i++) {
|
|
156
|
+
const mockWorker = {
|
|
157
|
+
postMessage: (data) => {
|
|
158
|
+
// Simulate async processing
|
|
159
|
+
setTimeout(() => {
|
|
160
|
+
this.handleWorkerMessage({
|
|
161
|
+
data: {
|
|
162
|
+
jobId: data.jobId,
|
|
163
|
+
result: `Processed: ${JSON.stringify(data.payload)}`,
|
|
164
|
+
success: true
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}, Math.random() * 100 + 50); // 50-150ms simulation
|
|
168
|
+
},
|
|
169
|
+
terminate: () => { },
|
|
170
|
+
addEventListener: () => { },
|
|
171
|
+
removeEventListener: () => { }
|
|
172
|
+
};
|
|
173
|
+
this.workers.push(mockWorker);
|
|
174
|
+
this.stats.activeWorkers++;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Generate Web Worker code for browser execution
|
|
179
|
+
*/
|
|
180
|
+
generateWebWorkerCode() {
|
|
181
|
+
return `
|
|
182
|
+
// QNCE Thread Pool Worker
|
|
183
|
+
self.addEventListener('message', function(e) {
|
|
184
|
+
const { jobId, type, payload } = e.data;
|
|
185
|
+
|
|
186
|
+
try {
|
|
187
|
+
let result;
|
|
188
|
+
|
|
189
|
+
switch (type) {
|
|
190
|
+
case 'cache-load':
|
|
191
|
+
// Simulate cache loading
|
|
192
|
+
result = processCache(payload);
|
|
193
|
+
break;
|
|
194
|
+
|
|
195
|
+
case 'telemetry-write':
|
|
196
|
+
// Simulate telemetry writing
|
|
197
|
+
result = writeTelemetryData(payload);
|
|
198
|
+
break;
|
|
199
|
+
|
|
200
|
+
case 'hot-reload-prep':
|
|
201
|
+
// Simulate hot-reload preparation
|
|
202
|
+
result = prepareReload(payload);
|
|
203
|
+
break;
|
|
204
|
+
|
|
205
|
+
case 'asset-process':
|
|
206
|
+
// Simulate asset processing
|
|
207
|
+
result = processAsset(payload);
|
|
208
|
+
break;
|
|
209
|
+
|
|
210
|
+
default:
|
|
211
|
+
throw new Error('Unknown job type: ' + type);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
self.postMessage({
|
|
215
|
+
jobId,
|
|
216
|
+
result,
|
|
217
|
+
success: true
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
} catch (error) {
|
|
221
|
+
self.postMessage({
|
|
222
|
+
jobId,
|
|
223
|
+
error: error.message,
|
|
224
|
+
success: false
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
function processCache(payload) {
|
|
230
|
+
// Simulate cache processing work
|
|
231
|
+
const data = JSON.parse(JSON.stringify(payload));
|
|
232
|
+
return { cached: true, data, timestamp: Date.now() };
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function writeTelemetryData(payload) {
|
|
236
|
+
// Simulate telemetry write
|
|
237
|
+
return { written: true, bytes: JSON.stringify(payload).length };
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
function prepareReload(payload) {
|
|
241
|
+
// Simulate hot-reload preparation
|
|
242
|
+
return { prepared: true, deltaSize: JSON.stringify(payload).length };
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
function processAsset(payload) {
|
|
246
|
+
// Simulate asset processing
|
|
247
|
+
return { processed: true, asset: payload };
|
|
248
|
+
}
|
|
249
|
+
`;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Setup worker message handlers
|
|
253
|
+
*/
|
|
254
|
+
setupWorkerHandlers(worker, workerId) {
|
|
255
|
+
worker.addEventListener('message', (e) => this.handleWorkerMessage(e));
|
|
256
|
+
worker.addEventListener('error', (e) => this.handleWorkerError(e, workerId));
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Handle worker completion messages
|
|
260
|
+
*/
|
|
261
|
+
handleWorkerMessage(event) {
|
|
262
|
+
const { jobId, result, error, success } = event.data;
|
|
263
|
+
const job = this.activeJobs.get(jobId);
|
|
264
|
+
if (!job)
|
|
265
|
+
return;
|
|
266
|
+
this.activeJobs.delete(jobId);
|
|
267
|
+
if (success) {
|
|
268
|
+
job.resolve(result);
|
|
269
|
+
this.stats.completedJobs++;
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
job.reject(new Error(error));
|
|
273
|
+
this.stats.failedJobs++;
|
|
274
|
+
}
|
|
275
|
+
// Update execution time stats
|
|
276
|
+
const executionTime = performance.now() - job.timestamp;
|
|
277
|
+
this.updateExecutionTimeStats(executionTime);
|
|
278
|
+
// Process next job in queue
|
|
279
|
+
this.processQueue();
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Handle worker errors
|
|
283
|
+
*/
|
|
284
|
+
handleWorkerError(error, workerId) {
|
|
285
|
+
console.error(`Worker ${workerId} error:`, error);
|
|
286
|
+
// TODO: Implement worker recovery/restart logic
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Process job queue by assigning jobs to available workers
|
|
290
|
+
*/
|
|
291
|
+
processQueue() {
|
|
292
|
+
if (this.jobQueue.length === 0)
|
|
293
|
+
return;
|
|
294
|
+
const availableWorkers = this.config.maxWorkers - this.activeJobs.size;
|
|
295
|
+
if (availableWorkers <= 0)
|
|
296
|
+
return;
|
|
297
|
+
const job = this.jobQueue.shift();
|
|
298
|
+
this.stats.queuedJobs = this.jobQueue.length;
|
|
299
|
+
this.activeJobs.set(job.id, job);
|
|
300
|
+
// Find least busy worker (for now, just use round-robin)
|
|
301
|
+
const workerIndex = this.stats.completedJobs % this.workers.length;
|
|
302
|
+
const worker = this.workers[workerIndex];
|
|
303
|
+
worker.postMessage({
|
|
304
|
+
jobId: job.id,
|
|
305
|
+
type: job.type,
|
|
306
|
+
payload: job.payload
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Find insertion index for job based on priority
|
|
311
|
+
*/
|
|
312
|
+
findInsertionIndex(priority) {
|
|
313
|
+
const priorityValues = { high: 3, normal: 2, low: 1 };
|
|
314
|
+
const jobPriority = priorityValues[priority];
|
|
315
|
+
for (let i = 0; i < this.jobQueue.length; i++) {
|
|
316
|
+
if (priorityValues[this.jobQueue[i].priority] < jobPriority) {
|
|
317
|
+
return i;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return this.jobQueue.length;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Update execution time statistics
|
|
324
|
+
*/
|
|
325
|
+
updateExecutionTimeStats(executionTime) {
|
|
326
|
+
const totalJobs = this.stats.completedJobs + this.stats.failedJobs;
|
|
327
|
+
this.stats.avgExecutionTime = ((this.stats.avgExecutionTime * (totalJobs - 1)) + executionTime) / totalJobs;
|
|
328
|
+
this.stats.workerUtilization = (this.activeJobs.size / this.config.maxWorkers) * 100;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
exports.QnceThreadPool = QnceThreadPool;
|
|
332
|
+
// Singleton instance for global access
|
|
333
|
+
let globalThreadPool = null;
|
|
334
|
+
function getThreadPool(config) {
|
|
335
|
+
if (!globalThreadPool) {
|
|
336
|
+
globalThreadPool = new QnceThreadPool(config);
|
|
337
|
+
}
|
|
338
|
+
return globalThreadPool;
|
|
339
|
+
}
|
|
340
|
+
function shutdownThreadPool() {
|
|
341
|
+
if (globalThreadPool) {
|
|
342
|
+
const shutdown = globalThreadPool.shutdown();
|
|
343
|
+
globalThreadPool = null;
|
|
344
|
+
return shutdown;
|
|
345
|
+
}
|
|
346
|
+
return Promise.resolve();
|
|
347
|
+
}
|
|
348
|
+
//# sourceMappingURL=ThreadPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThreadPool.js","sourceRoot":"","sources":["../../src/performance/ThreadPool.ts"],"names":[],"mappings":"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"}
|