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
package/README.md CHANGED
@@ -2,20 +2,56 @@
2
2
 
3
3
  **Quantum Narrative Convergence Engine** - A framework-agnostic TypeScript library for creating interactive narrative experiences with quantum-inspired mechanics.
4
4
 
5
+ > **๐Ÿš€ NEW in v1.2.0:** Advanced Branching API with AI integration, dynamic content management, and comprehensive analytics. Plus enterprise-grade performance optimization.
6
+
5
7
  ## Core Concepts
6
8
 
7
9
  - **Superposition:** Multiple narrative outcomes exist simultaneously until a choice is made
8
10
  - **Collapse:** Player choices "collapse" the narrative to a specific path, updating state and flags
9
11
  - **Entanglement:** Early decisions affect later outcomes, enabling complex, interconnected stories
10
12
 
13
+ ## โœจ Advanced Features (v1.2.0)
14
+
15
+ ### ๐ŸŒฟ Advanced Branching System
16
+ - **Multi-path narratives** with conditional logic and flag-based branching
17
+ - **AI-driven content generation** for dynamic story expansion
18
+ - **Real-time branch insertion/removal** for live content updates
19
+ - **Comprehensive analytics** for narrative optimization
20
+
21
+ ### โšก Performance Infrastructure
22
+ - **๐ŸŠโ€โ™‚๏ธ Object Pooling:** 90%+ allocation reduction, eliminating GC pressure
23
+ - **๐Ÿงต Background Processing:** Non-blocking cache preloading and telemetry writes
24
+ - **๐Ÿ”ฅ Hot-Reload:** <3.5ms live story updates with delta patching
25
+ - **๐Ÿ“Š Real-time Profiling:** Comprehensive event instrumentation and analysis
26
+ - **๐Ÿ–ฅ๏ธ Live Monitoring:** `qnce-perf` CLI dashboard with performance alerts
27
+
28
+ ### Performance Dashboard
29
+ ```bash
30
+ # Real-time performance monitoring
31
+ qnce-perf dashboard
32
+
33
+ # Live monitoring with updates
34
+ qnce-perf live 1000
35
+
36
+ # Export performance data
37
+ qnce-perf export > performance-report.json
38
+ ```
39
+
40
+ **[๐Ÿ“š Complete Performance Guide โ†’](docs/PERFORMANCE.md)**
41
+
11
42
  ## Installation
12
43
 
13
44
  ```bash
14
45
  npm install qnce-engine
46
+
47
+ # Global CLI installation for performance monitoring
48
+ npm install -g qnce-engine
15
49
  ```
16
50
 
17
51
  ## Quick Start
18
52
 
53
+ ### Basic Usage
54
+
19
55
  ```typescript
20
56
  import { createQNCEEngine, DEMO_STORY } from 'qnce-engine';
21
57
 
@@ -40,6 +76,190 @@ const flags = engine.getFlags();
40
76
  console.log('Current flags:', flags);
41
77
  ```
42
78
 
79
+ ### Performance Mode (Recommended for Production)
80
+
81
+ ```typescript
82
+ import { createQNCEEngine, DEMO_STORY } from 'qnce-engine';
83
+
84
+ // Enable performance optimizations
85
+ const engine = createQNCEEngine(DEMO_STORY, {}, true, {
86
+ maxWorkers: 4,
87
+ enableProfiling: true
88
+ });
89
+
90
+ // Background cache preloading happens automatically
91
+ // Object pooling reduces memory allocations by 90%+
92
+ // Performance events are collected for monitoring
93
+
94
+ // Get performance statistics
95
+ const poolStats = engine.getPoolStats();
96
+ console.log(`Pool efficiency: ${poolStats.flow.hitRate}%`);
97
+ ```
98
+
99
+ ### Live Performance Monitoring
100
+
101
+ ```bash
102
+ # Real-time performance dashboard
103
+ qnce-perf dashboard
104
+
105
+ # Live monitoring with updates every 2 seconds
106
+ qnce-perf live
107
+
108
+ # Export performance data
109
+ qnce-perf export > performance-report.json
110
+ ```
111
+
112
+ ## ๐ŸŒฟ Advanced Branching & AI Integration
113
+
114
+ ### Basic Branching
115
+
116
+ ```typescript
117
+ import { createQNCEEngine, createBranchingEngine } from 'qnce-engine';
118
+
119
+ // Create core engine
120
+ const engine = createQNCEEngine(storyData);
121
+
122
+ // Enable advanced branching
123
+ const branchingEngine = engine.enableBranching(advancedStoryData);
124
+
125
+ // Evaluate available branches
126
+ const branches = await branchingEngine.evaluateAvailableBranches();
127
+ console.log(`Available paths: ${branches.length}`);
128
+
129
+ // Execute a narrative branch
130
+ await branchingEngine.executeBranch(branches[0].id);
131
+ ```
132
+
133
+ ### AI-Driven Content Generation
134
+
135
+ ```typescript
136
+ // Set AI context for personalized content
137
+ branchingEngine.setAIContext({
138
+ playerProfile: {
139
+ playStyle: 'explorer',
140
+ preferences: { adventure: 0.8, mystery: 0.6 },
141
+ historicalChoices: ['brave-path', 'investigate-clue']
142
+ },
143
+ narrativeContext: {
144
+ currentTone: 'mysterious',
145
+ thematicElements: ['exploration', 'discovery'],
146
+ plotTension: 0.7
147
+ }
148
+ });
149
+
150
+ // Generate AI-enhanced branches
151
+ const aiBranches = await branchingEngine.generateAIBranches(3);
152
+ console.log('AI-generated options:', aiBranches.map(b => b.displayText));
153
+ ```
154
+
155
+ ### Dynamic Content Management
156
+
157
+ ```typescript
158
+ // Insert new branch at runtime
159
+ const dynamicBranch = {
160
+ type: 'insert',
161
+ branchId: 'special-event',
162
+ targetLocation: { chapterId: 'main', nodeId: 'crossroads' },
163
+ payload: {
164
+ name: 'Special Event',
165
+ branchOptions: [{
166
+ id: 'event-choice',
167
+ displayText: 'Investigate the mysterious sound',
168
+ flagEffects: { event_discovered: true }
169
+ }]
170
+ }
171
+ };
172
+
173
+ await branchingEngine.insertDynamicBranch(dynamicBranch);
174
+
175
+ // Remove branch when no longer needed
176
+ await branchingEngine.removeDynamicBranch('special-event');
177
+ ```
178
+
179
+ ### Analytics & Monitoring
180
+
181
+ ```typescript
182
+ // Get branching analytics
183
+ const analytics = branchingEngine.getBranchingAnalytics();
184
+ console.log(`Branches traversed: ${analytics.totalBranchesTraversed}`);
185
+ console.log(`Popular choices: ${analytics.mostPopularBranches}`);
186
+
187
+ // Export comprehensive data
188
+ const exportData = branchingEngine.exportBranchingData();
189
+ // Contains: story structure, session data, player behavior, performance metrics
190
+ ```
191
+
192
+ ### Live Performance Monitoring
193
+
194
+ ```bash
195
+ # Real-time performance dashboard
196
+ qnce-perf dashboard
197
+
198
+ # Live monitoring with updates every 2 seconds
199
+ qnce-perf live
200
+
201
+ # Export performance data
202
+ qnce-perf export > performance-report.json
203
+ ```
204
+
205
+ ## ๐Ÿš€ Performance Guide
206
+
207
+ QNCE v1.2.0-sprint2 includes advanced performance infrastructure for production applications.
208
+
209
+ ### Performance Benchmarks
210
+
211
+ | Feature | Performance Gain | Impact |
212
+ |---------|-----------------|--------|
213
+ | Object Pooling | 90%+ allocation reduction | Eliminates GC hitches |
214
+ | Hot-Reload | 68% improvement (3.35ms) | Near-instant story updates |
215
+ | Background Processing | Non-blocking operations | Smooth user experience |
216
+ | Performance Monitoring | Real-time metrics | Production visibility |
217
+
218
+ ### CLI Performance Dashboard
219
+
220
+ ```bash
221
+ # Install CLI globally
222
+ npm install -g qnce-engine
223
+
224
+ # Real-time performance monitoring
225
+ qnce-perf live
226
+
227
+ # Performance dashboard output:
228
+ ๐Ÿš€ QNCE Performance Dashboard
229
+ =====================================
230
+ ๐Ÿ“Š Session Duration: 45.2s
231
+ ๐Ÿ”ข Total Events: 1,247
232
+
233
+ ๐Ÿ’พ Cache Performance:
234
+ โœ… Hit Rate: 92.3% (threshold: 80%)
235
+ โœ… Avg Cache Time: 0.8ms (threshold: 50ms)
236
+
237
+ ๐Ÿ”ฅ Hot-Reload Performance:
238
+ โš ๏ธ Avg Time: 3.35ms (threshold: 2ms)
239
+ ๐Ÿ“Š Max Time: 4.1ms
240
+ ๐Ÿ”„ Total Reloads: 12
241
+
242
+ ๐Ÿงต ThreadPool Status:
243
+ ๐Ÿ“Š Completed Jobs: 445
244
+ โณ Queued Jobs: 3
245
+ ๐Ÿƒ Active Workers: 2
246
+ ```
247
+
248
+ ### Performance Mode Usage
249
+
250
+ ```typescript
251
+ // Enable all performance optimizations
252
+ const engine = createQNCEEngine(storyData, {}, true, {
253
+ maxWorkers: 4, // Background processing
254
+ enableProfiling: true // Performance monitoring
255
+ });
256
+
257
+ // Object pooling and background caching happen automatically
258
+ // Monitor performance in real-time with CLI dashboard
259
+ ```
260
+
261
+ **๐Ÿ“– Complete Performance Guide:** [docs/PERFORMANCE_GUIDE.md](docs/PERFORMANCE_GUIDE.md)
262
+
43
263
  ## Core API
44
264
 
45
265
  ### QNCEEngine Class
@@ -190,6 +410,34 @@ async function playStory() {
190
410
  }
191
411
  ```
192
412
 
413
+ ## ๐Ÿ“š Examples & Demos
414
+
415
+ The repository includes comprehensive examples demonstrating all features:
416
+
417
+ ### ๐Ÿš€ Quickstart Example
418
+ - **File:** `examples/branching-quickstart.ts`
419
+ - **Features:** Basic branching, AI integration, dynamic operations
420
+ - **Run:** `npm run build && node dist/examples/branching-quickstart.js`
421
+
422
+ ### ๐ŸŽญ Advanced Demo
423
+ - **File:** `examples/branching-advanced-demo.ts`
424
+ - **Features:** Complex narrative flows, conditional branching, analytics
425
+ - **Story:** "The Mysterious Library" - Interactive mystery with multiple paths
426
+
427
+ ### ๐Ÿงช Validation Scripts
428
+ - **Real-world testing:** `scripts/validation-real-world.ts`
429
+ - **Comprehensive testing:** `scripts/validation-comprehensive.ts`
430
+
431
+ ```bash
432
+ # Run the quickstart example
433
+ npm run build
434
+ node dist/examples/branching-quickstart.js
435
+
436
+ # Run validation tests
437
+ npm run build
438
+ node dist/scripts/validation-real-world.js
439
+ ```
440
+
193
441
  ## Development
194
442
 
195
443
  ```bash
package/dist/cli/audit.js CHANGED
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { readFileSync } from 'fs';
3
- import { loadStoryData } from '../engine/core.js';
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const fs_1 = require("fs");
5
+ const core_js_1 = require("../engine/core.js");
4
6
  /**
5
7
  * QNCE Audit CLI Tool
6
8
  * Validates narrative structure and checks for loops, dead ends, etc.
@@ -8,8 +10,8 @@ import { loadStoryData } from '../engine/core.js';
8
10
  function auditStory(filePath) {
9
11
  try {
10
12
  console.log(`๐Ÿ” Auditing QNCE story: ${filePath}`);
11
- const jsonData = JSON.parse(readFileSync(filePath, 'utf-8'));
12
- const storyData = loadStoryData(jsonData);
13
+ const jsonData = JSON.parse((0, fs_1.readFileSync)(filePath, 'utf-8'));
14
+ const storyData = (0, core_js_1.loadStoryData)(jsonData);
13
15
  // Basic validation
14
16
  console.log(`๐Ÿ“– Story contains ${storyData.nodes.length} nodes`);
15
17
  console.log(`๐Ÿš€ Initial node: ${storyData.initialNodeId}`);
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/cli/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/cli/audit.ts"],"names":[],"mappings":"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"}
package/dist/cli/init.js CHANGED
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { writeFileSync, mkdirSync } from 'fs';
3
- import { join } from 'path';
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
4
6
  /**
5
7
  * QNCE Init CLI Tool
6
8
  * Scaffolds a new QNCE story project
@@ -9,7 +11,7 @@ function initProject(projectName) {
9
11
  try {
10
12
  console.log(`๐Ÿš€ Initializing QNCE project: ${projectName}`);
11
13
  // Create project directory
12
- mkdirSync(projectName, { recursive: true });
14
+ (0, fs_1.mkdirSync)(projectName, { recursive: true });
13
15
  // Create basic story template
14
16
  const storyTemplate = {
15
17
  initialNodeId: 'start',
@@ -49,8 +51,8 @@ function initProject(projectName) {
49
51
  ]
50
52
  };
51
53
  // Write story file
52
- const storyPath = join(projectName, 'story.json');
53
- writeFileSync(storyPath, JSON.stringify(storyTemplate, null, 2));
54
+ const storyPath = (0, path_1.join)(projectName, 'story.json');
55
+ (0, fs_1.writeFileSync)(storyPath, JSON.stringify(storyTemplate, null, 2));
54
56
  // Create package.json
55
57
  const packageJson = {
56
58
  name: projectName,
@@ -64,8 +66,8 @@ function initProject(projectName) {
64
66
  'qnce-engine': '^0.1.0'
65
67
  }
66
68
  };
67
- const packagePath = join(projectName, 'package.json');
68
- writeFileSync(packagePath, JSON.stringify(packageJson, null, 2));
69
+ const packagePath = (0, path_1.join)(projectName, 'package.json');
70
+ (0, fs_1.writeFileSync)(packagePath, JSON.stringify(packageJson, null, 2));
69
71
  // Create README
70
72
  const readme = `# ${projectName}
71
73
 
@@ -108,8 +110,8 @@ console.log(currentNode.text);
108
110
 
109
111
  Happy storytelling!
110
112
  `;
111
- const readmePath = join(projectName, 'README.md');
112
- writeFileSync(readmePath, readme);
113
+ const readmePath = (0, path_1.join)(projectName, 'README.md');
114
+ (0, fs_1.writeFileSync)(readmePath, readme);
113
115
  console.log(`โœ… Project created successfully!`);
114
116
  console.log(`๐Ÿ“ Files created:`);
115
117
  console.log(` - ${storyPath}`);
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * S2-T5: CLI Performance Dashboard
4
+ * QNCE Performance Monitor CLI Tool - Real-time profiler metrics and threshold alerts
5
+ */
6
+ interface PerformanceThresholds {
7
+ maxCacheHitTime: number;
8
+ minCacheHitRate: number;
9
+ maxHotReloadTime: number;
10
+ maxStateTransitionTime: number;
11
+ maxEventBacklog: number;
12
+ }
13
+ /**
14
+ * Display comprehensive performance dashboard
15
+ */
16
+ declare function displayDashboard(thresholds?: PerformanceThresholds): void;
17
+ /**
18
+ * Live monitor mode - continuously update performance metrics
19
+ */
20
+ declare function startLiveMonitor(intervalMs?: number, thresholds?: PerformanceThresholds): void;
21
+ /**
22
+ * Export performance summary as JSON
23
+ */
24
+ declare function exportSummary(): void;
25
+ /**
26
+ * Reset performance counters
27
+ */
28
+ declare function resetCounters(): void;
29
+ export { displayDashboard, startLiveMonitor, exportSummary, resetCounters };
30
+ //# sourceMappingURL=perf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perf.d.ts","sourceRoot":"","sources":["../../src/cli/perf.ts"],"names":[],"mappings":";AAKA;;;GAGG;AAEH,UAAU,qBAAqB;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;CACzB;AAUD;;GAEG;AACH,iBAAS,gBAAgB,CAAC,UAAU,GAAE,qBAA0C,GAAG,IAAI,CA4DtF;AAiDD;;GAEG;AACH,iBAAS,gBAAgB,CAAC,UAAU,GAAE,MAAa,EAAE,UAAU,GAAE,qBAA0C,GAAG,IAAI,CAmBjH;AAED;;GAEG;AACH,iBAAS,aAAa,IAAI,IAAI,CAY7B;AAED;;GAEG;AACH,iBAAS,aAAa,IAAI,IAAI,CAG7B;AA6ED,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,219 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.displayDashboard = displayDashboard;
5
+ exports.startLiveMonitor = startLiveMonitor;
6
+ exports.exportSummary = exportSummary;
7
+ exports.resetCounters = resetCounters;
8
+ const PerfReporter_js_1 = require("../performance/PerfReporter.js");
9
+ const ThreadPool_js_1 = require("../performance/ThreadPool.js");
10
+ const DEFAULT_THRESHOLDS = {
11
+ maxCacheHitTime: 50, // 50ms max for cache operations
12
+ minCacheHitRate: 80, // 80% minimum cache hit rate
13
+ maxHotReloadTime: 2, // 2ms max for hot-reload (S2-T3 target)
14
+ maxStateTransitionTime: 10, // 10ms max for state transitions
15
+ maxEventBacklog: 1000 // Max 1000 events in backlog
16
+ };
17
+ /**
18
+ * Display comprehensive performance dashboard
19
+ */
20
+ function displayDashboard(thresholds = DEFAULT_THRESHOLDS) {
21
+ console.log('\n๐Ÿš€ QNCE Performance Dashboard');
22
+ console.log('=====================================');
23
+ const summary = PerfReporter_js_1.perf.summary();
24
+ const threadPool = (0, ThreadPool_js_1.getThreadPool)();
25
+ // Header with time range
26
+ const durationSeconds = (summary.timeRange.duration / 1000).toFixed(2);
27
+ console.log(`๐Ÿ“Š Session Duration: ${durationSeconds}s`);
28
+ console.log(`๐Ÿ”ข Total Events: ${summary.totalEvents}`);
29
+ console.log('');
30
+ // Event breakdown
31
+ console.log('๐Ÿ“ˆ Event Breakdown:');
32
+ for (const [type, count] of Object.entries(summary.eventsByType)) {
33
+ const avg = summary.avgDurations[type]?.toFixed(2) || 'N/A';
34
+ const max = summary.maxDurations[type]?.toFixed(2) || 'N/A';
35
+ console.log(` ${type.padEnd(20)} ${count.toString().padStart(6)} events (avg: ${avg}ms, max: ${max}ms)`);
36
+ }
37
+ console.log('');
38
+ // Cache Performance
39
+ console.log('๐Ÿ’พ Cache Performance:');
40
+ const cacheStatus = summary.cacheHitRate >= thresholds.minCacheHitRate ? 'โœ…' : 'โš ๏ธ';
41
+ console.log(` ${cacheStatus} Hit Rate: ${summary.cacheHitRate.toFixed(1)}% (threshold: ${thresholds.minCacheHitRate}%)`);
42
+ const cacheTime = summary.avgDurations['cache-hit'] || 0;
43
+ const cacheTimeStatus = cacheTime <= thresholds.maxCacheHitTime ? 'โœ…' : 'โš ๏ธ';
44
+ console.log(` ${cacheTimeStatus} Avg Cache Time: ${cacheTime.toFixed(2)}ms (threshold: ${thresholds.maxCacheHitTime}ms)`);
45
+ console.log('');
46
+ // Hot-Reload Performance (S2-T3 metrics)
47
+ console.log('๐Ÿ”ฅ Hot-Reload Performance:');
48
+ const { avgTime, maxTime, totalReloads } = summary.hotReloadPerformance;
49
+ const hotReloadStatus = avgTime <= thresholds.maxHotReloadTime ? 'โœ…' : 'โš ๏ธ';
50
+ console.log(` ${hotReloadStatus} Avg Time: ${avgTime.toFixed(2)}ms (threshold: ${thresholds.maxHotReloadTime}ms)`);
51
+ console.log(` ๐Ÿ“Š Max Time: ${maxTime.toFixed(2)}ms`);
52
+ console.log(` ๐Ÿ”„ Total Reloads: ${totalReloads}`);
53
+ console.log('');
54
+ // State Transition Performance
55
+ console.log('๐Ÿ”„ State Transitions:');
56
+ const stateTime = summary.avgDurations['state-transition'] || 0;
57
+ const stateStatus = stateTime <= thresholds.maxStateTransitionTime ? 'โœ…' : 'โš ๏ธ';
58
+ console.log(` ${stateStatus} Avg Time: ${stateTime.toFixed(2)}ms (threshold: ${thresholds.maxStateTransitionTime}ms)`);
59
+ console.log('');
60
+ // ThreadPool Status (S2-T2 metrics)
61
+ console.log('๐Ÿงต ThreadPool Status:');
62
+ const stats = threadPool.getStats();
63
+ console.log(` ๐Ÿ“Š Completed Jobs: ${stats.completedJobs}`);
64
+ console.log(` โณ Queued Jobs: ${stats.queuedJobs}`);
65
+ console.log(` ๐Ÿƒ Active Workers: ${stats.activeWorkers}`);
66
+ console.log(` ๐Ÿ•’ Avg Execution Time: ${stats.avgExecutionTime.toFixed(2)}ms`);
67
+ console.log(` ๐Ÿ“ˆ Worker Utilization: ${stats.workerUtilization.toFixed(1)}%`);
68
+ console.log('');
69
+ // Performance Alerts
70
+ displayAlerts(summary, thresholds, stats);
71
+ }
72
+ /**
73
+ * Display performance threshold alerts
74
+ */
75
+ function displayAlerts(summary, thresholds, threadStats) {
76
+ console.log('๐Ÿšจ Performance Alerts:');
77
+ const alerts = [];
78
+ // Cache alerts
79
+ if (summary.cacheHitRate < thresholds.minCacheHitRate) {
80
+ alerts.push(`Low cache hit rate: ${summary.cacheHitRate.toFixed(1)}% < ${thresholds.minCacheHitRate}%`);
81
+ }
82
+ const cacheTime = summary.avgDurations['cache-hit'] || 0;
83
+ if (cacheTime > thresholds.maxCacheHitTime) {
84
+ alerts.push(`Slow cache operations: ${cacheTime.toFixed(2)}ms > ${thresholds.maxCacheHitTime}ms`);
85
+ }
86
+ // Hot-reload alerts (S2-T3 compliance)
87
+ if (summary.hotReloadPerformance.avgTime > thresholds.maxHotReloadTime) {
88
+ alerts.push(`Hot-reload exceeds target: ${summary.hotReloadPerformance.avgTime.toFixed(2)}ms > ${thresholds.maxHotReloadTime}ms`);
89
+ }
90
+ // State transition alerts
91
+ const stateTime = summary.avgDurations['state-transition'] || 0;
92
+ if (stateTime > thresholds.maxStateTransitionTime) {
93
+ alerts.push(`Slow state transitions: ${stateTime.toFixed(2)}ms > ${thresholds.maxStateTransitionTime}ms`);
94
+ }
95
+ // Event backlog alerts
96
+ if (summary.totalEvents > thresholds.maxEventBacklog) {
97
+ alerts.push(`High event backlog: ${summary.totalEvents} > ${thresholds.maxEventBacklog}`);
98
+ }
99
+ // ThreadPool alerts
100
+ if (threadStats.queuedJobs > 10) {
101
+ alerts.push(`High queued job count: ${threadStats.queuedJobs} jobs`);
102
+ }
103
+ if (alerts.length === 0) {
104
+ console.log(' โœ… All systems performing within thresholds');
105
+ }
106
+ else {
107
+ alerts.forEach(alert => console.log(` โš ๏ธ ${alert}`));
108
+ }
109
+ console.log('');
110
+ }
111
+ /**
112
+ * Live monitor mode - continuously update performance metrics
113
+ */
114
+ function startLiveMonitor(intervalMs = 2000, thresholds = DEFAULT_THRESHOLDS) {
115
+ console.log(`๐Ÿ”ด Starting live performance monitor (${intervalMs}ms interval)`);
116
+ console.log('Press Ctrl+C to stop');
117
+ const interval = setInterval(() => {
118
+ // Clear screen
119
+ console.clear();
120
+ displayDashboard(thresholds);
121
+ // Show live timestamp
122
+ console.log(`๐Ÿ•’ Last updated: ${new Date().toLocaleTimeString()}`);
123
+ }, intervalMs);
124
+ // Handle graceful shutdown
125
+ process.on('SIGINT', () => {
126
+ clearInterval(interval);
127
+ console.log('\n๐Ÿ‘‹ Live monitor stopped');
128
+ process.exit(0);
129
+ });
130
+ }
131
+ /**
132
+ * Export performance summary as JSON
133
+ */
134
+ function exportSummary() {
135
+ const summary = PerfReporter_js_1.perf.summary();
136
+ const threadStats = (0, ThreadPool_js_1.getThreadPool)().getStats();
137
+ const report = {
138
+ timestamp: new Date().toISOString(),
139
+ performanceSummary: summary,
140
+ threadPoolStats: threadStats,
141
+ thresholds: DEFAULT_THRESHOLDS
142
+ };
143
+ console.log(JSON.stringify(report, null, 2));
144
+ }
145
+ /**
146
+ * Reset performance counters
147
+ */
148
+ function resetCounters() {
149
+ (0, PerfReporter_js_1.getPerfReporter)().clear();
150
+ console.log('โœ… Performance counters reset');
151
+ }
152
+ /**
153
+ * Main CLI entry point
154
+ */
155
+ function main() {
156
+ const args = process.argv.slice(2);
157
+ const command = args[0] || 'dashboard';
158
+ switch (command) {
159
+ case 'dashboard':
160
+ case 'dash':
161
+ displayDashboard();
162
+ break;
163
+ case 'live':
164
+ case 'monitor':
165
+ const interval = parseInt(args[1]) || 2000;
166
+ startLiveMonitor(interval);
167
+ break;
168
+ case 'export':
169
+ case 'json':
170
+ exportSummary();
171
+ break;
172
+ case 'reset':
173
+ case 'clear':
174
+ resetCounters();
175
+ break;
176
+ case 'help':
177
+ case '--help':
178
+ case '-h':
179
+ console.log(`
180
+ ๐Ÿš€ QNCE Performance CLI
181
+
182
+ Usage: qnce-perf [command] [options]
183
+
184
+ Commands:
185
+ dashboard, dash Show performance dashboard (default)
186
+ live, monitor Start live monitoring mode
187
+ export, json Export performance data as JSON
188
+ reset, clear Reset performance counters
189
+ help Show this help
190
+
191
+ Options:
192
+ --interval <ms> Monitoring interval for live mode (default: 2000ms)
193
+
194
+ Examples:
195
+ qnce-perf dashboard
196
+ qnce-perf live 1000
197
+ qnce-perf export > performance-report.json
198
+ qnce-perf reset
199
+
200
+ Performance Thresholds:
201
+ Cache Hit Time: < 50ms
202
+ Cache Hit Rate: > 80%
203
+ Hot-Reload Time: < 2ms (S2-T3 target)
204
+ State Transition: < 10ms
205
+ Event Backlog: < 1000 events
206
+ `);
207
+ break;
208
+ default:
209
+ console.error(`โŒ Unknown command: ${command}`);
210
+ console.log('Run "qnce-perf help" for usage information');
211
+ process.exit(1);
212
+ }
213
+ }
214
+ // Run if called directly (ES module compatible)
215
+ const isMainModule = require.main === module;
216
+ if (isMainModule) {
217
+ main();
218
+ }
219
+ //# sourceMappingURL=perf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perf.js","sourceRoot":"","sources":["../../src/cli/perf.ts"],"names":[],"mappings":"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"}