qnce-engine 0.1.0 → 1.2.1

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 (154) hide show
  1. package/README.md +959 -5
  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 +220 -0
  9. package/dist/cli/perf.js.map +1 -0
  10. package/dist/cli/play.d.ts +4 -0
  11. package/dist/cli/play.d.ts.map +1 -0
  12. package/dist/cli/play.js +259 -0
  13. package/dist/cli/play.js.map +1 -0
  14. package/dist/engine/condition.d.ts +69 -0
  15. package/dist/engine/condition.d.ts.map +1 -0
  16. package/dist/engine/condition.js +195 -0
  17. package/dist/engine/condition.js.map +1 -0
  18. package/dist/engine/core.d.ts +378 -11
  19. package/dist/engine/core.d.ts.map +1 -1
  20. package/dist/engine/core.js +1433 -13
  21. package/dist/engine/core.js.map +1 -1
  22. package/dist/engine/demo-story.d.ts.map +1 -1
  23. package/dist/engine/demo-story.js +103 -14
  24. package/dist/engine/demo-story.js.map +1 -1
  25. package/dist/engine/errors.d.ts +76 -0
  26. package/dist/engine/errors.d.ts.map +1 -0
  27. package/dist/engine/errors.js +178 -0
  28. package/dist/engine/errors.js.map +1 -0
  29. package/dist/engine/types.d.ts +445 -0
  30. package/dist/engine/types.d.ts.map +1 -0
  31. package/dist/engine/types.js +9 -0
  32. package/dist/engine/types.js.map +1 -0
  33. package/dist/engine/validation.d.ts +110 -0
  34. package/dist/engine/validation.d.ts.map +1 -0
  35. package/dist/engine/validation.js +261 -0
  36. package/dist/engine/validation.js.map +1 -0
  37. package/dist/examples/examples/autosave-undo-demo.js +248 -0
  38. package/dist/examples/examples/persistence-demo.js +63 -0
  39. package/dist/examples/src/engine/condition.js +194 -0
  40. package/dist/examples/src/engine/core.js +1382 -0
  41. package/dist/examples/src/engine/demo-story.js +200 -0
  42. package/dist/examples/src/engine/types.js +8 -0
  43. package/dist/examples/src/index.js +35 -0
  44. package/dist/examples/src/integrations/react.js +322 -0
  45. package/dist/examples/src/narrative/branching/engine-simple.js +348 -0
  46. package/dist/examples/src/narrative/branching/index.js +55 -0
  47. package/dist/examples/src/narrative/branching/models.js +5 -0
  48. package/dist/examples/src/performance/ObjectPool.js +296 -0
  49. package/dist/examples/src/performance/PerfReporter.js +280 -0
  50. package/dist/examples/src/performance/ThreadPool.js +347 -0
  51. package/dist/index.d.ts +4 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +35 -3
  54. package/dist/index.js.map +1 -1
  55. package/dist/integrations/react.d.ts +200 -0
  56. package/dist/integrations/react.d.ts.map +1 -0
  57. package/dist/integrations/react.js +365 -0
  58. package/dist/integrations/react.js.map +1 -0
  59. package/dist/narrative/branching/engine-simple.d.ts +84 -0
  60. package/dist/narrative/branching/engine-simple.d.ts.map +1 -0
  61. package/dist/narrative/branching/engine-simple.js +349 -0
  62. package/dist/narrative/branching/engine-simple.js.map +1 -0
  63. package/dist/narrative/branching/engine.d.ts +1 -0
  64. package/dist/narrative/branching/engine.d.ts.map +1 -0
  65. package/dist/narrative/branching/engine.js +2 -0
  66. package/dist/narrative/branching/engine.js.map +1 -0
  67. package/dist/narrative/branching/index.d.ts +12 -0
  68. package/dist/narrative/branching/index.d.ts.map +1 -0
  69. package/dist/narrative/branching/index.js +56 -0
  70. package/dist/narrative/branching/index.js.map +1 -0
  71. package/dist/narrative/branching/models.d.ts +223 -0
  72. package/dist/narrative/branching/models.d.ts.map +1 -0
  73. package/dist/narrative/branching/models.js +6 -0
  74. package/dist/narrative/branching/models.js.map +1 -0
  75. package/dist/performance/HotReloadDelta.d.ts +124 -0
  76. package/dist/performance/HotReloadDelta.d.ts.map +1 -0
  77. package/dist/performance/HotReloadDelta.js +328 -0
  78. package/dist/performance/HotReloadDelta.js.map +1 -0
  79. package/dist/performance/ObjectPool.d.ts +150 -0
  80. package/dist/performance/ObjectPool.d.ts.map +1 -0
  81. package/dist/performance/ObjectPool.js +297 -0
  82. package/dist/performance/ObjectPool.js.map +1 -0
  83. package/dist/performance/PerfReporter.d.ts +123 -0
  84. package/dist/performance/PerfReporter.d.ts.map +1 -0
  85. package/dist/performance/PerfReporter.js +281 -0
  86. package/dist/performance/PerfReporter.js.map +1 -0
  87. package/dist/performance/ThreadPool.d.ts +107 -0
  88. package/dist/performance/ThreadPool.d.ts.map +1 -0
  89. package/dist/performance/ThreadPool.js +348 -0
  90. package/dist/performance/ThreadPool.js.map +1 -0
  91. package/dist/ui/__tests__/AutosaveIndicator.test.d.ts +2 -0
  92. package/dist/ui/__tests__/AutosaveIndicator.test.d.ts.map +1 -0
  93. package/dist/ui/__tests__/AutosaveIndicator.test.js +329 -0
  94. package/dist/ui/__tests__/AutosaveIndicator.test.js.map +1 -0
  95. package/dist/ui/__tests__/UndoRedoControls.test.d.ts +2 -0
  96. package/dist/ui/__tests__/UndoRedoControls.test.d.ts.map +1 -0
  97. package/dist/ui/__tests__/UndoRedoControls.test.js +245 -0
  98. package/dist/ui/__tests__/UndoRedoControls.test.js.map +1 -0
  99. package/dist/ui/__tests__/autosave-simple.test.d.ts +2 -0
  100. package/dist/ui/__tests__/autosave-simple.test.d.ts.map +1 -0
  101. package/dist/ui/__tests__/autosave-simple.test.js +29 -0
  102. package/dist/ui/__tests__/autosave-simple.test.js.map +1 -0
  103. package/dist/ui/__tests__/setup.d.ts +2 -0
  104. package/dist/ui/__tests__/setup.d.ts.map +1 -0
  105. package/dist/ui/__tests__/setup.js +40 -0
  106. package/dist/ui/__tests__/setup.js.map +1 -0
  107. package/dist/ui/__tests__/smoke-test.d.ts +2 -0
  108. package/dist/ui/__tests__/smoke-test.d.ts.map +1 -0
  109. package/dist/ui/__tests__/smoke-test.js +18 -0
  110. package/dist/ui/__tests__/smoke-test.js.map +1 -0
  111. package/dist/ui/__tests__/smoke-test.test.d.ts +2 -0
  112. package/dist/ui/__tests__/smoke-test.test.d.ts.map +1 -0
  113. package/dist/ui/__tests__/smoke-test.test.js +18 -0
  114. package/dist/ui/__tests__/smoke-test.test.js.map +1 -0
  115. package/dist/ui/__tests__/useKeyboardShortcuts.test.d.ts +2 -0
  116. package/dist/ui/__tests__/useKeyboardShortcuts.test.d.ts.map +1 -0
  117. package/dist/ui/__tests__/useKeyboardShortcuts.test.js +374 -0
  118. package/dist/ui/__tests__/useKeyboardShortcuts.test.js.map +1 -0
  119. package/dist/ui/components/AutosaveIndicator.d.ts +18 -0
  120. package/dist/ui/components/AutosaveIndicator.d.ts.map +1 -0
  121. package/dist/ui/components/AutosaveIndicator.js +175 -0
  122. package/dist/ui/components/AutosaveIndicator.js.map +1 -0
  123. package/dist/ui/components/UndoRedoControls.d.ts +16 -0
  124. package/dist/ui/components/UndoRedoControls.d.ts.map +1 -0
  125. package/dist/ui/components/UndoRedoControls.js +144 -0
  126. package/dist/ui/components/UndoRedoControls.js.map +1 -0
  127. package/dist/ui/hooks/useKeyboardShortcuts.d.ts +22 -0
  128. package/dist/ui/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  129. package/dist/ui/hooks/useKeyboardShortcuts.js +162 -0
  130. package/dist/ui/hooks/useKeyboardShortcuts.js.map +1 -0
  131. package/dist/ui/index.d.ts +9 -0
  132. package/dist/ui/index.d.ts.map +1 -0
  133. package/dist/ui/index.js +14 -0
  134. package/dist/ui/index.js.map +1 -0
  135. package/dist/ui/types.d.ts +141 -0
  136. package/dist/ui/types.d.ts.map +1 -0
  137. package/dist/ui/types.js +51 -0
  138. package/dist/ui/types.js.map +1 -0
  139. package/docs/PERFORMANCE.md +355 -0
  140. package/docs/branching/ERD.md +214 -0
  141. package/docs/branching/PDM.md +443 -0
  142. package/docs/branching/RELEASE-v1.2.0.md +169 -0
  143. package/examples/autosave-undo-demo.ts +306 -0
  144. package/examples/branching-advanced-demo.ts +339 -0
  145. package/examples/branching-demo-simple.ts +0 -0
  146. package/examples/branching-demo.ts +0 -0
  147. package/examples/branching-quickstart.ts +314 -0
  148. package/examples/persistence-demo.ts +84 -0
  149. package/examples/quickstart-demo.js +82 -0
  150. package/examples/tsconfig.json +13 -0
  151. package/examples/ui-components-demo.tsx +320 -0
  152. package/examples/validation-demo-story.json +177 -0
  153. package/examples/validation-demo.js +163 -0
  154. package/package.json +41 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/narrative/branching/models.ts"],"names":[],"mappings":"AAGA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAM7D;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,IAAI,CAAC;IACjB,YAAY,EAAE,IAAI,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,OAAO,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC;AAE7E,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,kBAAkB,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC;AAE5G,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvD,QAAQ,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC/E,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC;CACnE;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,SAAS,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,aAAa,CAAC;IAC3B,WAAW,EAAE,SAAS,CAAC;IACvB,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,IAAI,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,IAAI,CAAC;CACxB;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,eAAe,CAAC,EAAE,eAAe,EAAE,CAAC;CACrC;AAMD;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAMD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,eAAe,EAAE,iBAAiB,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,CAAC;IAC7D,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ // QNCE Branching System - Platform Data Model (PDM)
3
+ // Sprint #3 - Advanced Narrative & AI Integration
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ // All interfaces are exported above and ready for engine integration
6
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/narrative/branching/models.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,kDAAkD;;AAuRlD,qEAAqE"}
@@ -0,0 +1,124 @@
1
+ import { NarrativeNode, StoryData } from '../engine/core';
2
+ export interface Asset {
3
+ id: string;
4
+ type: 'image' | 'audio' | 'video';
5
+ src: string;
6
+ size?: number;
7
+ }
8
+ export interface StoryDelta {
9
+ nodeChanges: NodeDelta[];
10
+ assetChanges: AssetDelta[];
11
+ timestamp: number;
12
+ }
13
+ export interface NodeDelta {
14
+ nodeId: string;
15
+ changeType: 'added' | 'modified' | 'removed';
16
+ oldNode?: NarrativeNode;
17
+ newNode?: NarrativeNode;
18
+ affectedFields: (keyof NarrativeNode | '*')[];
19
+ }
20
+ export interface AssetDelta {
21
+ assetId: string;
22
+ changeType: 'added' | 'modified' | 'removed';
23
+ oldAsset?: Asset;
24
+ newAsset?: Asset;
25
+ sizeChange: number;
26
+ }
27
+ interface PatchableEngine {
28
+ storyData: StoryData;
29
+ getState(): {
30
+ currentNodeId: string;
31
+ };
32
+ }
33
+ export interface ExtendedStoryData extends StoryData {
34
+ assets?: Asset[];
35
+ }
36
+ /**
37
+ * Delta Comparison Engine for Hot-Reload Story Updates
38
+ * Identifies minimal changes needed to update narrative content
39
+ */
40
+ export declare class StoryDeltaComparator {
41
+ /**
42
+ * Compare two story configurations and generate delta
43
+ */
44
+ compareStories(oldStory: ExtendedStoryData, newStory: ExtendedStoryData): StoryDelta;
45
+ /**
46
+ * Deep comparison of narrative nodes
47
+ */
48
+ private compareNodes;
49
+ /**
50
+ * Compare assets (future: images, audio, etc.)
51
+ */
52
+ private compareAssets;
53
+ /**
54
+ * Fine-grained field comparison for nodes
55
+ */
56
+ private findChangedFields;
57
+ /**
58
+ * Asset comparison logic
59
+ */
60
+ private assetsAreDifferent;
61
+ /**
62
+ * Deep equality check for objects
63
+ */
64
+ private deepEqual;
65
+ }
66
+ /**
67
+ * Hot-Reload Delta Patcher
68
+ * Applies story deltas with minimal engine disruption
69
+ */
70
+ export declare class StoryDeltaPatcher {
71
+ private engine;
72
+ constructor(engine: PatchableEngine);
73
+ /**
74
+ * Apply delta patch to running engine
75
+ * Target: <2ms frame stall for hot-reload
76
+ */
77
+ applyDelta(delta: StoryDelta): Promise<PatchResult>;
78
+ /**
79
+ * Validate delta is safe to apply
80
+ */
81
+ private validateDelta;
82
+ /**
83
+ * Apply node changes to story data
84
+ */
85
+ private applyNodeChanges;
86
+ /**
87
+ * Fast synchronous node changes for small deltas (no async overhead)
88
+ */
89
+ private applyNodeChangesFast;
90
+ /**
91
+ * Apply asset changes (placeholder for future implementation)
92
+ */
93
+ private applyAssetChanges;
94
+ /**
95
+ * Batch node changes by type for efficient processing
96
+ */
97
+ private batchNodeChanges;
98
+ /**
99
+ * Process a batch of node changes
100
+ */
101
+ private processBatch;
102
+ /**
103
+ * Apply individual node change
104
+ */
105
+ private applyNodeChange;
106
+ /**
107
+ * Refresh engine state after patch
108
+ */
109
+ private refreshEngineState;
110
+ }
111
+ export interface PatchResult {
112
+ success: boolean;
113
+ patchId: string;
114
+ duration: number;
115
+ nodesChanged?: number;
116
+ assetsChanged?: number;
117
+ error?: string;
118
+ }
119
+ export declare function createDeltaTools(engine: PatchableEngine): {
120
+ comparator: StoryDeltaComparator;
121
+ patcher: StoryDeltaPatcher;
122
+ };
123
+ export {};
124
+ //# sourceMappingURL=HotReloadDelta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HotReloadDelta.d.ts","sourceRoot":"","sources":["../../src/performance/HotReloadDelta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK1D,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IAC7C,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,cAAc,EAAE,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,eAAe;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,IAAI;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,oBAAoB;IAE/B;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,GAAG,UAAU;IAUpF;;OAEG;IACH,OAAO,CAAC,YAAY;IA+CpB;;OAEG;IACH,OAAO,CAAC,aAAa;IA4CrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IACH,OAAO,CAAC,SAAS;CAuBlB;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,eAAe;IAInC;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAmDzD;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB;;OAEG;YACW,gBAAgB;IAS9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;YACW,iBAAiB;IAK/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;YACW,YAAY;IAY1B;;OAEG;IACH,OAAO,CAAC,eAAe;IA8BvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAI3B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe;;;EAKvD"}
@@ -0,0 +1,328 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StoryDeltaPatcher = exports.StoryDeltaComparator = void 0;
4
+ exports.createDeltaTools = createDeltaTools;
5
+ /**
6
+ * Delta Comparison Engine for Hot-Reload Story Updates
7
+ * Identifies minimal changes needed to update narrative content
8
+ */
9
+ class StoryDeltaComparator {
10
+ /**
11
+ * Compare two story configurations and generate delta
12
+ */
13
+ compareStories(oldStory, newStory) {
14
+ const timestamp = performance.now();
15
+ return {
16
+ nodeChanges: this.compareNodes(oldStory.nodes || [], newStory.nodes || []),
17
+ assetChanges: this.compareAssets(oldStory.assets || [], newStory.assets || []),
18
+ timestamp
19
+ };
20
+ }
21
+ /**
22
+ * Deep comparison of narrative nodes
23
+ */
24
+ compareNodes(oldNodes, newNodes) {
25
+ const deltas = [];
26
+ const oldNodeMap = new Map(oldNodes.map(n => [n.id, n]));
27
+ const newNodeMap = new Map(newNodes.map(n => [n.id, n]));
28
+ // Check for removed nodes
29
+ for (const [nodeId, oldNode] of oldNodeMap) {
30
+ if (!newNodeMap.has(nodeId)) {
31
+ deltas.push({
32
+ nodeId,
33
+ changeType: 'removed',
34
+ oldNode,
35
+ affectedFields: ['*']
36
+ });
37
+ }
38
+ }
39
+ // Check for added and modified nodes
40
+ for (const [nodeId, newNode] of newNodeMap) {
41
+ const oldNode = oldNodeMap.get(nodeId);
42
+ if (!oldNode) {
43
+ // New node
44
+ deltas.push({
45
+ nodeId,
46
+ changeType: 'added',
47
+ newNode,
48
+ affectedFields: ['*']
49
+ });
50
+ }
51
+ else {
52
+ // Check for modifications
53
+ const affectedFields = this.findChangedFields(oldNode, newNode);
54
+ if (affectedFields.length > 0) {
55
+ deltas.push({
56
+ nodeId,
57
+ changeType: 'modified',
58
+ oldNode,
59
+ newNode,
60
+ affectedFields
61
+ });
62
+ }
63
+ }
64
+ }
65
+ return deltas;
66
+ }
67
+ /**
68
+ * Compare assets (future: images, audio, etc.)
69
+ */
70
+ compareAssets(oldAssets, newAssets) {
71
+ const deltas = [];
72
+ const oldAssetMap = new Map(oldAssets.map(a => [a.id, a]));
73
+ const newAssetMap = new Map(newAssets.map(a => [a.id, a]));
74
+ // Check for removed assets
75
+ for (const [assetId, oldAsset] of oldAssetMap) {
76
+ if (!newAssetMap.has(assetId)) {
77
+ deltas.push({
78
+ assetId,
79
+ changeType: 'removed',
80
+ oldAsset,
81
+ sizeChange: -(oldAsset.size || 0)
82
+ });
83
+ }
84
+ }
85
+ // Check for added and modified assets
86
+ for (const [assetId, newAsset] of newAssetMap) {
87
+ const oldAsset = oldAssetMap.get(assetId);
88
+ if (!oldAsset) {
89
+ // New asset
90
+ deltas.push({
91
+ assetId,
92
+ changeType: 'added',
93
+ newAsset,
94
+ sizeChange: newAsset.size || 0
95
+ });
96
+ }
97
+ else if (this.assetsAreDifferent(oldAsset, newAsset)) {
98
+ // Modified asset
99
+ deltas.push({
100
+ assetId,
101
+ changeType: 'modified',
102
+ oldAsset,
103
+ newAsset,
104
+ sizeChange: (newAsset.size || 0) - (oldAsset.size || 0)
105
+ });
106
+ }
107
+ }
108
+ return deltas;
109
+ }
110
+ /**
111
+ * Fine-grained field comparison for nodes
112
+ */
113
+ findChangedFields(oldNode, newNode) {
114
+ const changedFields = [];
115
+ const allFields = new Set([...Object.keys(oldNode), ...Object.keys(newNode)]);
116
+ for (const field of allFields) {
117
+ if (!this.deepEqual(oldNode[field], newNode[field])) {
118
+ changedFields.push(field);
119
+ }
120
+ }
121
+ return changedFields;
122
+ }
123
+ /**
124
+ * Asset comparison logic
125
+ */
126
+ assetsAreDifferent(oldAsset, newAsset) {
127
+ // Simple comparison - in practice, would use checksums/hashes
128
+ return JSON.stringify(oldAsset) !== JSON.stringify(newAsset);
129
+ }
130
+ /**
131
+ * Deep equality check for objects
132
+ */
133
+ deepEqual(a, b) {
134
+ if (a === b)
135
+ return true;
136
+ if (a === null || b === null)
137
+ return false;
138
+ if (typeof a !== typeof b)
139
+ return false;
140
+ if (typeof a === 'object') {
141
+ if (Array.isArray(a) !== Array.isArray(b))
142
+ return false;
143
+ const keysA = Object.keys(a);
144
+ const keysB = Object.keys(b);
145
+ if (keysA.length !== keysB.length)
146
+ return false;
147
+ for (const key of keysA) {
148
+ if (!keysB.includes(key))
149
+ return false;
150
+ if (!this.deepEqual(a[key], b[key]))
151
+ return false;
152
+ }
153
+ return true;
154
+ }
155
+ return false;
156
+ }
157
+ }
158
+ exports.StoryDeltaComparator = StoryDeltaComparator;
159
+ /**
160
+ * Hot-Reload Delta Patcher
161
+ * Applies story deltas with minimal engine disruption
162
+ */
163
+ class StoryDeltaPatcher {
164
+ engine;
165
+ constructor(engine) {
166
+ this.engine = engine;
167
+ }
168
+ /**
169
+ * Apply delta patch to running engine
170
+ * Target: <2ms frame stall for hot-reload
171
+ */
172
+ async applyDelta(delta) {
173
+ const startTime = performance.now();
174
+ const patchId = `patch-${Date.now()}`;
175
+ try {
176
+ // Phase 1: Validate delta can be applied safely (sync, fast)
177
+ const validation = this.validateDelta(delta);
178
+ if (!validation.safe) {
179
+ return {
180
+ success: false,
181
+ patchId,
182
+ duration: performance.now() - startTime,
183
+ error: validation.error
184
+ };
185
+ }
186
+ // Phase 2: Apply changes synchronously for speed
187
+ // For small deltas (<10 changes), apply immediately
188
+ // For larger deltas, use optimized batch processing
189
+ if (delta.nodeChanges.length <= 10) {
190
+ this.applyNodeChangesFast(delta.nodeChanges);
191
+ }
192
+ else {
193
+ await this.applyNodeChanges(delta.nodeChanges);
194
+ }
195
+ // Phase 3: Skip asset changes for now (async operation)
196
+ // Assets can be updated in background without frame stall
197
+ // Phase 4: Minimal state refresh
198
+ this.refreshEngineState();
199
+ const duration = performance.now() - startTime;
200
+ return {
201
+ success: true,
202
+ patchId,
203
+ duration,
204
+ nodesChanged: delta.nodeChanges.length,
205
+ assetsChanged: delta.assetChanges.length
206
+ };
207
+ }
208
+ catch (error) {
209
+ return {
210
+ success: false,
211
+ patchId,
212
+ duration: performance.now() - startTime,
213
+ error: error instanceof Error ? error.message : 'Unknown error'
214
+ };
215
+ }
216
+ }
217
+ /**
218
+ * Validate delta is safe to apply
219
+ */
220
+ validateDelta(delta) {
221
+ // Check if current node would be affected
222
+ const currentNodeId = this.engine.getState().currentNodeId;
223
+ const currentNodeChange = delta.nodeChanges.find(c => c.nodeId === currentNodeId);
224
+ if (currentNodeChange && currentNodeChange.changeType === 'removed') {
225
+ return {
226
+ safe: false,
227
+ error: 'Cannot remove currently active node'
228
+ };
229
+ }
230
+ // Additional safety checks could go here
231
+ return { safe: true };
232
+ }
233
+ /**
234
+ * Apply node changes to story data
235
+ */
236
+ async applyNodeChanges(nodeChanges) {
237
+ // Batch node changes to minimize engine updates
238
+ const batches = this.batchNodeChanges(nodeChanges);
239
+ for (const batch of batches) {
240
+ await this.processBatch(batch);
241
+ }
242
+ }
243
+ /**
244
+ * Fast synchronous node changes for small deltas (no async overhead)
245
+ */
246
+ applyNodeChangesFast(nodeChanges) {
247
+ for (const change of nodeChanges) {
248
+ this.applyNodeChange(change);
249
+ }
250
+ }
251
+ /**
252
+ * Apply asset changes (placeholder for future implementation)
253
+ */
254
+ async applyAssetChanges(assetChanges) {
255
+ // Future: Implement asset hot-reload
256
+ console.log(`Would apply ${assetChanges.length} asset changes`);
257
+ }
258
+ /**
259
+ * Batch node changes by type for efficient processing
260
+ */
261
+ batchNodeChanges(nodeChanges) {
262
+ const batches = [];
263
+ const batchSize = 25; // Larger batch size for efficiency
264
+ for (let i = 0; i < nodeChanges.length; i += batchSize) {
265
+ batches.push(nodeChanges.slice(i, i + batchSize));
266
+ }
267
+ return batches;
268
+ }
269
+ /**
270
+ * Process a batch of node changes
271
+ */
272
+ async processBatch(batch) {
273
+ // Use requestAnimationFrame or setTimeout to yield control
274
+ return new Promise(resolve => {
275
+ setTimeout(() => {
276
+ for (const change of batch) {
277
+ this.applyNodeChange(change);
278
+ }
279
+ resolve();
280
+ }, 0);
281
+ });
282
+ }
283
+ /**
284
+ * Apply individual node change
285
+ */
286
+ applyNodeChange(change) {
287
+ // Access engine's internal story data
288
+ const storyData = this.engine.storyData;
289
+ switch (change.changeType) {
290
+ case 'added': {
291
+ if (change.newNode) {
292
+ storyData.nodes.push(change.newNode);
293
+ }
294
+ break;
295
+ }
296
+ case 'removed': {
297
+ const removeIndex = storyData.nodes.findIndex((n) => n.id === change.nodeId);
298
+ if (removeIndex >= 0) {
299
+ storyData.nodes.splice(removeIndex, 1);
300
+ }
301
+ break;
302
+ }
303
+ case 'modified':
304
+ const modifyIndex = storyData.nodes.findIndex((n) => n.id === change.nodeId);
305
+ if (modifyIndex >= 0 && change.newNode) {
306
+ // For simplicity, always replace the entire node
307
+ storyData.nodes[modifyIndex] = change.newNode;
308
+ }
309
+ break;
310
+ }
311
+ }
312
+ /**
313
+ * Refresh engine state after patch
314
+ */
315
+ refreshEngineState() {
316
+ // Minimal state refresh - avoid full reinitialization
317
+ // Future: Could trigger cache invalidation, UI updates, etc.
318
+ }
319
+ }
320
+ exports.StoryDeltaPatcher = StoryDeltaPatcher;
321
+ // Factory function for creating delta tools
322
+ function createDeltaTools(engine) {
323
+ return {
324
+ comparator: new StoryDeltaComparator(),
325
+ patcher: new StoryDeltaPatcher(engine)
326
+ };
327
+ }
328
+ //# sourceMappingURL=HotReloadDelta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HotReloadDelta.js","sourceRoot":"","sources":["../../src/performance/HotReloadDelta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ export interface Poolable {
2
+ reset(): void;
3
+ isInUse(): boolean;
4
+ setInUse(inUse: boolean): void;
5
+ }
6
+ export interface PoolableConstructor<T extends Poolable> {
7
+ new (): T;
8
+ }
9
+ /**
10
+ * Generic Object Pool for QNCE narrative objects
11
+ * Reduces GC pressure by reusing objects instead of creating new ones
12
+ */
13
+ export declare class ObjectPool<T extends Poolable> {
14
+ private pool;
15
+ private createFn;
16
+ private maxSize;
17
+ private created;
18
+ private borrowed;
19
+ private returned;
20
+ constructor(createFn: () => T, initialSize?: number, maxSize?: number);
21
+ /**
22
+ * Borrow an object from the pool
23
+ */
24
+ borrow(): T;
25
+ /**
26
+ * Return an object to the pool
27
+ */
28
+ return(obj: T): void;
29
+ /**
30
+ * Get pool statistics for monitoring
31
+ */
32
+ getStats(): {
33
+ poolSize: number;
34
+ maxSize: number;
35
+ created: number;
36
+ borrowed: number;
37
+ returned: number;
38
+ inUse: number;
39
+ hitRate: number;
40
+ };
41
+ /**
42
+ * Clear the pool (useful for testing)
43
+ */
44
+ clear(): void;
45
+ /**
46
+ * Resize the pool
47
+ */
48
+ resize(newSize: number): void;
49
+ }
50
+ /**
51
+ * Pooled Flow object for narrative state management
52
+ */
53
+ export declare class PooledFlow implements Poolable {
54
+ private _inUse;
55
+ nodeId: string;
56
+ timestamp: number;
57
+ metadata: Record<string, unknown>;
58
+ transitions: string[];
59
+ constructor();
60
+ reset(): void;
61
+ isInUse(): boolean;
62
+ setInUse(inUse: boolean): void;
63
+ initialize(nodeId: string, metadata?: Record<string, unknown>): void;
64
+ addTransition(fromNodeId: string, toNodeId: string): void;
65
+ getDuration(): number;
66
+ }
67
+ /**
68
+ * Pooled Node object for narrative content
69
+ */
70
+ export declare class PooledNode implements Poolable {
71
+ private _inUse;
72
+ id: string;
73
+ text: string;
74
+ choices: unknown[];
75
+ flags: Record<string, unknown>;
76
+ lastAccessed: number;
77
+ constructor();
78
+ reset(): void;
79
+ isInUse(): boolean;
80
+ setInUse(inUse: boolean): void;
81
+ initialize(id: string, text: string, choices?: unknown[]): void;
82
+ touch(): void;
83
+ }
84
+ /**
85
+ * Pooled Asset object for narrative resources
86
+ */
87
+ export declare class PooledAsset implements Poolable {
88
+ private _inUse;
89
+ id: string;
90
+ type: string;
91
+ data: unknown;
92
+ size: number;
93
+ loaded: boolean;
94
+ constructor();
95
+ reset(): void;
96
+ isInUse(): boolean;
97
+ setInUse(inUse: boolean): void;
98
+ initialize(id: string, type: string, data: unknown): void;
99
+ private calculateSize;
100
+ }
101
+ /**
102
+ * Pool Manager - Centralized management of all object pools
103
+ */
104
+ export declare class PoolManager {
105
+ private static instance;
106
+ private flowPool;
107
+ private nodePool;
108
+ private assetPool;
109
+ private constructor();
110
+ static getInstance(): PoolManager;
111
+ borrowFlow(): PooledFlow;
112
+ returnFlow(flow: PooledFlow): void;
113
+ borrowNode(): PooledNode;
114
+ returnNode(node: PooledNode): void;
115
+ borrowAsset(): PooledAsset;
116
+ returnAsset(asset: PooledAsset): void;
117
+ getAllStats(): {
118
+ flows: {
119
+ poolSize: number;
120
+ maxSize: number;
121
+ created: number;
122
+ borrowed: number;
123
+ returned: number;
124
+ inUse: number;
125
+ hitRate: number;
126
+ };
127
+ nodes: {
128
+ poolSize: number;
129
+ maxSize: number;
130
+ created: number;
131
+ borrowed: number;
132
+ returned: number;
133
+ inUse: number;
134
+ hitRate: number;
135
+ };
136
+ assets: {
137
+ poolSize: number;
138
+ maxSize: number;
139
+ created: number;
140
+ borrowed: number;
141
+ returned: number;
142
+ inUse: number;
143
+ hitRate: number;
144
+ };
145
+ };
146
+ getGCPressureReduction(): number;
147
+ clearAllPools(): void;
148
+ }
149
+ export declare const poolManager: PoolManager;
150
+ //# sourceMappingURL=ObjectPool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectPool.d.ts","sourceRoot":"","sources":["../../src/performance/ObjectPool.ts"],"names":[],"mappings":"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"}