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.
Files changed (53) hide show
  1. package/README.md +248 -0
  2. package/dist/cli/audit.js +6 -4
  3. package/dist/cli/audit.js.map +1 -1
  4. package/dist/cli/init.js +11 -9
  5. package/dist/cli/init.js.map +1 -1
  6. package/dist/cli/perf.d.ts +30 -0
  7. package/dist/cli/perf.d.ts.map +1 -0
  8. package/dist/cli/perf.js +219 -0
  9. package/dist/cli/perf.js.map +1 -0
  10. package/dist/engine/core.d.ts +104 -8
  11. package/dist/engine/core.d.ts.map +1 -1
  12. package/dist/engine/core.js +288 -7
  13. package/dist/engine/core.js.map +1 -1
  14. package/dist/engine/demo-story.js +4 -1
  15. package/dist/engine/demo-story.js.map +1 -1
  16. package/dist/index.js +24 -3
  17. package/dist/index.js.map +1 -1
  18. package/dist/narrative/branching/engine-simple.d.ts +84 -0
  19. package/dist/narrative/branching/engine-simple.d.ts.map +1 -0
  20. package/dist/narrative/branching/engine-simple.js +349 -0
  21. package/dist/narrative/branching/engine-simple.js.map +1 -0
  22. package/dist/narrative/branching/index.d.ts +12 -0
  23. package/dist/narrative/branching/index.d.ts.map +1 -0
  24. package/dist/narrative/branching/index.js +56 -0
  25. package/dist/narrative/branching/index.js.map +1 -0
  26. package/dist/narrative/branching/models.d.ts +223 -0
  27. package/dist/narrative/branching/models.d.ts.map +1 -0
  28. package/dist/narrative/branching/models.js +6 -0
  29. package/dist/narrative/branching/models.js.map +1 -0
  30. package/dist/performance/HotReloadDelta.d.ts +107 -0
  31. package/dist/performance/HotReloadDelta.d.ts.map +1 -0
  32. package/dist/performance/HotReloadDelta.js +333 -0
  33. package/dist/performance/HotReloadDelta.js.map +1 -0
  34. package/dist/performance/ObjectPool.d.ts +150 -0
  35. package/dist/performance/ObjectPool.d.ts.map +1 -0
  36. package/dist/performance/ObjectPool.js +297 -0
  37. package/dist/performance/ObjectPool.js.map +1 -0
  38. package/dist/performance/PerfReporter.d.ts +123 -0
  39. package/dist/performance/PerfReporter.d.ts.map +1 -0
  40. package/dist/performance/PerfReporter.js +281 -0
  41. package/dist/performance/PerfReporter.js.map +1 -0
  42. package/dist/performance/ThreadPool.d.ts +107 -0
  43. package/dist/performance/ThreadPool.d.ts.map +1 -0
  44. package/dist/performance/ThreadPool.js +348 -0
  45. package/dist/performance/ThreadPool.js.map +1 -0
  46. package/docs/PERFORMANCE.md +355 -0
  47. package/docs/branching/ERD.md +214 -0
  48. package/docs/branching/PDM.md +443 -0
  49. package/docs/branching/RELEASE-v1.2.0.md +169 -0
  50. package/examples/branching-advanced-demo.ts +339 -0
  51. package/examples/branching-quickstart.ts +314 -0
  52. package/examples/quickstart-demo.js +82 -0
  53. 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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"}