2sagaco48 1.0.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 (365) hide show
  1. package/diagnostics.mjs +141 -0
  2. package/dist/compute.worker-j5ahIpF-.js +1 -0
  3. package/dist/graph.worker-DG6iGCB9.js +1 -0
  4. package/dist/index.html +2314 -0
  5. package/flatten-guide.md +248 -0
  6. package/index.html +12 -0
  7. package/package.json +38 -0
  8. package/src/App.orig.tsx +204 -0
  9. package/src/App.orig1.tsx +27 -0
  10. package/src/App.orig2.tsx +25 -0
  11. package/src/App.tsx +3 -0
  12. package/src/BaseApp.tsx +18 -0
  13. package/src/INTEGRATION_LEDGER.md +22 -0
  14. package/src/PERSIST_CANARY.orig.txt +1 -0
  15. package/src/PERSIST_CANARY.txt +1 -0
  16. package/src/REGRESSION_LEDGER.md +651 -0
  17. package/src/TEMPLATE_PIPELINE_AUDIT.md +208 -0
  18. package/src/WILLIAMS_PERSONA_GUIDE.md +62 -0
  19. package/src/chat/VeritasChat.tsx +69 -0
  20. package/src/chat/synthesis.ts +31 -0
  21. package/src/chat/tier.ts +45 -0
  22. package/src/components/AdaptersPage.orig.tsx +99 -0
  23. package/src/components/AdaptersPage.tsx +3 -0
  24. package/src/components/AdversarialPanel.tsx +136 -0
  25. package/src/components/AnchorBaselinePanel.tsx +75 -0
  26. package/src/components/AnswerPanel.tsx +60 -0
  27. package/src/components/ArtifactPanel.tsx +43 -0
  28. package/src/components/ChatApp.orig.tsx +1582 -0
  29. package/src/components/ChatApp.orig1.tsx +722 -0
  30. package/src/components/ChatApp.tsx +95 -0
  31. package/src/components/ChatAugmentPanels.tsx +73 -0
  32. package/src/components/CitationLedgerPanel.tsx +313 -0
  33. package/src/components/ComputeSandboxPanel.tsx +130 -0
  34. package/src/components/ConfigPanel.tsx +110 -0
  35. package/src/components/ControlPlanePage.tsx +195 -0
  36. package/src/components/CreativeTreeLifePage.tsx +234 -0
  37. package/src/components/CreativeTreeOfLifePanel.tsx +149 -0
  38. package/src/components/DebugTracePanel.tsx +137 -0
  39. package/src/components/DeepReasoningTrace.tsx +48 -0
  40. package/src/components/EntitySheetPanel.tsx +51 -0
  41. package/src/components/FailureModesPanel.tsx +104 -0
  42. package/src/components/GBSDashboard.tsx +239 -0
  43. package/src/components/GraphView.tsx +116 -0
  44. package/src/components/HUD.tsx +125 -0
  45. package/src/components/HypothesisPanel.tsx +67 -0
  46. package/src/components/InnovationGenomeEngine.tsx +792 -0
  47. package/src/components/InnovationPersonaGuide.tsx +348 -0
  48. package/src/components/InnovationPersonaPanel.tsx +289 -0
  49. package/src/components/LiveResourceHUD.tsx +109 -0
  50. package/src/components/LongWriterPanel.tsx +112 -0
  51. package/src/components/MainPipelineV10Bridge.tsx +72 -0
  52. package/src/components/MarkdownLite.tsx +63 -0
  53. package/src/components/MemoryInspector.tsx +38 -0
  54. package/src/components/MemoryMonitor.tsx +52 -0
  55. package/src/components/MemoryStressPanel.tsx +176 -0
  56. package/src/components/ModulesPage.tsx +171 -0
  57. package/src/components/PipelineDebugConsole.orig.tsx +1856 -0
  58. package/src/components/PipelineDebugConsole.tsx +3 -0
  59. package/src/components/PreFlightHUD.tsx +67 -0
  60. package/src/components/PrismaFetchTracePanel.tsx +87 -0
  61. package/src/components/ReportOSPanel.tsx +165 -0
  62. package/src/components/ResourceEstimatorPage.tsx +327 -0
  63. package/src/components/RichText.tsx +181 -0
  64. package/src/components/SagaOsPanel.tsx +605 -0
  65. package/src/components/SagaOsReference.tsx +421 -0
  66. package/src/components/SagaOsV2Panel.tsx +594 -0
  67. package/src/components/SagaStyleTab.tsx +382 -0
  68. package/src/components/SageBlueprintPanel.tsx +416 -0
  69. package/src/components/SharedChatInput.tsx +77 -0
  70. package/src/components/StatFinancePanel.tsx +190 -0
  71. package/src/components/StylePersonaPanel.tsx +128 -0
  72. package/src/components/TemplatesPage.tsx +300 -0
  73. package/src/components/TestPanel.tsx +63 -0
  74. package/src/components/TraceLog.tsx +89 -0
  75. package/src/components/V15CalibrationAugment.tsx +1134 -0
  76. package/src/components/V15CalibrationDialog.tsx +1871 -0
  77. package/src/components/V15Overlay.orig.tsx +120 -0
  78. package/src/components/V15Overlay.tsx +4 -0
  79. package/src/components/V15OverlayWrapper.tsx +362 -0
  80. package/src/components/V15Toggle.tsx +34 -0
  81. package/src/console/DiagnosticRecoveryPanel.tsx +358 -0
  82. package/src/console/EngineeringConsole.tsx +103 -0
  83. package/src/console/FictionSystemPanels.tsx +882 -0
  84. package/src/console/InspectorPanels.tsx +254 -0
  85. package/src/console/ManuscriptGraderPanel.tsx +182 -0
  86. package/src/console/RecursiveReviserPanel.tsx +245 -0
  87. package/src/console/SeedControlPanel.tsx +135 -0
  88. package/src/console/StoryControllerPanel.tsx +443 -0
  89. package/src/console/engineBridge.ts +258 -0
  90. package/src/console/gemini.ts +106 -0
  91. package/src/console/grading.ts +250 -0
  92. package/src/console/util.ts +45 -0
  93. package/src/fiction/continuity.ts +372 -0
  94. package/src/fiction/crash-protection.ts +111 -0
  95. package/src/fiction/diagnostics.ts +208 -0
  96. package/src/fiction/diff.ts +74 -0
  97. package/src/fiction/entity-state-machine.ts +214 -0
  98. package/src/fiction/nive-engine.ts +404 -0
  99. package/src/fiction/pipeline-selftest.ts +132 -0
  100. package/src/fiction/seed-control.ts +193 -0
  101. package/src/fiction/story-engine.ts +326 -0
  102. package/src/fiction/types.ts +68 -0
  103. package/src/flatten-guide.md +379 -0
  104. package/src/index.css +14 -0
  105. package/src/index.orig.css +13 -0
  106. package/src/lib/academic-sources.base.ts +188 -0
  107. package/src/lib/academic-sources.orig.ts +28 -0
  108. package/src/lib/academic-sources.ts +10 -0
  109. package/src/lib/advanced-math.ts +119 -0
  110. package/src/lib/adversarial-engine.base.ts +409 -0
  111. package/src/lib/adversarial-engine.ts +82 -0
  112. package/src/lib/ai-revision.ts +623 -0
  113. package/src/lib/app-state.tsx +426 -0
  114. package/src/lib/artifact-registry.ts +97 -0
  115. package/src/lib/artifacts.ts +180 -0
  116. package/src/lib/atlas-dr.ts +167 -0
  117. package/src/lib/browser-mtls.ts +127 -0
  118. package/src/lib/browser-queue.ts +221 -0
  119. package/src/lib/browser-search-scraper.base.ts +382 -0
  120. package/src/lib/browser-search-scraper.orig.ts +90 -0
  121. package/src/lib/browser-search-scraper.ts +10 -0
  122. package/src/lib/calc-interceptor.ts +82 -0
  123. package/src/lib/citation-lane-tap.ts +78 -0
  124. package/src/lib/citation-ledger-store.ts +369 -0
  125. package/src/lib/citation-ledger.ts +203 -0
  126. package/src/lib/compute-sandbox.ts +215 -0
  127. package/src/lib/compute.worker.ts +153 -0
  128. package/src/lib/connectors/gemini.ts +120 -0
  129. package/src/lib/connectors/jina.ts +233 -0
  130. package/src/lib/connectors/marketdata.ts +51 -0
  131. package/src/lib/connectors/prismafetch.base.ts +175 -0
  132. package/src/lib/connectors/prismafetch.ts +1 -0
  133. package/src/lib/connectors/serpapi.ts +65 -0
  134. package/src/lib/connectors/wikidata.ts +44 -0
  135. package/src/lib/constraints.ts +331 -0
  136. package/src/lib/continuation-detector.base.ts +153 -0
  137. package/src/lib/continuation-detector.ts +48 -0
  138. package/src/lib/contradraft.ts +168 -0
  139. package/src/lib/cors-proxy.ts +120 -0
  140. package/src/lib/coverage.ts +81 -0
  141. package/src/lib/debug/architecture-prescription.ts +556 -0
  142. package/src/lib/debug/covea-repair.ts +543 -0
  143. package/src/lib/debug/helios-ground.ts +319 -0
  144. package/src/lib/debug/intent-decomposer.ts +281 -0
  145. package/src/lib/debug/intent-lattice.ts +349 -0
  146. package/src/lib/debug/pipeline-diagnosis.ts +1149 -0
  147. package/src/lib/debug/pipeline-trace-bus.ts +424 -0
  148. package/src/lib/debug/prompt-forge.ts +678 -0
  149. package/src/lib/debug/repair-sites.ts +513 -0
  150. package/src/lib/debug/research-phase.ts +266 -0
  151. package/src/lib/debug/retrieval-context.ts +76 -0
  152. package/src/lib/debug/retrieval-hardener.ts +142 -0
  153. package/src/lib/debug/scraper-debug-runner.ts +576 -0
  154. package/src/lib/debug/scraper-forensics.ts +418 -0
  155. package/src/lib/debug/scraper-lane-roadmap.ts +136 -0
  156. package/src/lib/debug/self-test.ts +415 -0
  157. package/src/lib/debug/step-attribution.ts +211 -0
  158. package/src/lib/debug/template-rubric.ts +301 -0
  159. package/src/lib/debug/unified-innovation.ts +126 -0
  160. package/src/lib/debug/veritas-hybrid-scraper.ts +335 -0
  161. package/src/lib/defense-registry.ts +104 -0
  162. package/src/lib/defenses.ts +162 -0
  163. package/src/lib/deterministic-citation-ledger.ts +174 -0
  164. package/src/lib/elo-registry.base.ts +117 -0
  165. package/src/lib/elo-registry.ts +1 -0
  166. package/src/lib/entity-resolver.ts +291 -0
  167. package/src/lib/failure-modes.ts +267 -0
  168. package/src/lib/feature-registry.ts +69 -0
  169. package/src/lib/flaw-registry.ts +143 -0
  170. package/src/lib/flaws/_template.ts +52 -0
  171. package/src/lib/flaws/builtins.ts +63 -0
  172. package/src/lib/flaws/finance.ts +169 -0
  173. package/src/lib/flaws/fixers.ts +10 -0
  174. package/src/lib/flaws/index.ts +32 -0
  175. package/src/lib/flaws/legal.ts +157 -0
  176. package/src/lib/flaws/medical.ts +188 -0
  177. package/src/lib/flaws/original-defenses-pack.ts +81 -0
  178. package/src/lib/flaws/sample-declarative-pack.json +38 -0
  179. package/src/lib/flaws/selftest.ts +201 -0
  180. package/src/lib/flaws/software-extended.ts +125 -0
  181. package/src/lib/flaws/software-rn-webgl.ts +182 -0
  182. package/src/lib/flaws/statistics-advanced.ts +46 -0
  183. package/src/lib/flaws/statistics.ts +61 -0
  184. package/src/lib/gbse/config.ts +20 -0
  185. package/src/lib/gbse/engine.ts +226 -0
  186. package/src/lib/gbse/graph.ts +118 -0
  187. package/src/lib/gbse/graph.worker.ts +21 -0
  188. package/src/lib/gbse/tests.ts +117 -0
  189. package/src/lib/gbse/tiers.ts +65 -0
  190. package/src/lib/gbse/types.ts +94 -0
  191. package/src/lib/innovation-genome-engine-v2.orig.ts +1001 -0
  192. package/src/lib/innovation-genome-engine-v2.ts +3 -0
  193. package/src/lib/innovation-genome-engine.orig.ts +330 -0
  194. package/src/lib/innovation-genome-engine.ts +3 -0
  195. package/src/lib/innovation-genome-v10.orig.ts +314 -0
  196. package/src/lib/innovation-genome-v10.ts +2 -0
  197. package/src/lib/innovation-genome-v3.orig.ts +2015 -0
  198. package/src/lib/innovation-genome-v3.ts +2 -0
  199. package/src/lib/innovation-genome-v4.orig.ts +1959 -0
  200. package/src/lib/innovation-genome-v4.ts +2 -0
  201. package/src/lib/innovation-genome-v5.orig.ts +1210 -0
  202. package/src/lib/innovation-genome-v5.ts +2 -0
  203. package/src/lib/innovation-genome-v7.orig.ts +2549 -0
  204. package/src/lib/innovation-genome-v7.ts +2 -0
  205. package/src/lib/innovation-genome-v8.orig.ts +1485 -0
  206. package/src/lib/innovation-genome-v8.ts +2 -0
  207. package/src/lib/innovation-genome-v9.orig.ts +643 -0
  208. package/src/lib/innovation-genome-v9.ts +2 -0
  209. package/src/lib/jina.base.ts +293 -0
  210. package/src/lib/jina.ts +1 -0
  211. package/src/lib/live-telemetry.ts +61 -0
  212. package/src/lib/longwriter.ts +84 -0
  213. package/src/lib/manuscript-grade-v2.ts +298 -0
  214. package/src/lib/memory-governor.ts +173 -0
  215. package/src/lib/memory-stress-tests.ts +248 -0
  216. package/src/lib/model-intelligence.ts +48 -0
  217. package/src/lib/model-rotator.ts +75 -0
  218. package/src/lib/models.orig.ts +513 -0
  219. package/src/lib/models.ts +151 -0
  220. package/src/lib/n-deep.base.ts +592 -0
  221. package/src/lib/n-deep.ts +51 -0
  222. package/src/lib/nih-simulator.ts +56 -0
  223. package/src/lib/nih-vulnerability-fixes.ts +460 -0
  224. package/src/lib/omega-templates.base.ts +294 -0
  225. package/src/lib/omega-templates.ts +225 -0
  226. package/src/lib/omni-nexus.ts +64 -0
  227. package/src/lib/oracle-adapters.ts +67 -0
  228. package/src/lib/oracle-registry.ts +163 -0
  229. package/src/lib/orchestrator.ts +357 -0
  230. package/src/lib/output-boundary.ts +235 -0
  231. package/src/lib/overrides/vite-native-chaos-harness.ts +154 -0
  232. package/src/lib/overrides/vite-native-contract-plane.ts +245 -0
  233. package/src/lib/overrides/vite-native-doctor-plane.ts +208 -0
  234. package/src/lib/overrides/vite-native-knowledge-store.ts +267 -0
  235. package/src/lib/overrides/vite-native-policy-plane.ts +190 -0
  236. package/src/lib/overrides/vite-native-replay-plane.ts +197 -0
  237. package/src/lib/overrides/vite-native-runtime-plane.ts +106 -0
  238. package/src/lib/overrides/vite-native-scraper.ts +848 -0
  239. package/src/lib/overrides/vite-native-selftest-functional.ts +217 -0
  240. package/src/lib/overrides/vite-native-selftest.ts +183 -0
  241. package/src/lib/overrides/vite-native-snapshot-plane.ts +123 -0
  242. package/src/lib/philosophy-toolkit.ts +75 -0
  243. package/src/lib/pipeline.orig.ts +659 -0
  244. package/src/lib/pipeline.ts +42 -0
  245. package/src/lib/precache.ts +128 -0
  246. package/src/lib/py-sandbox.ts +205 -0
  247. package/src/lib/quality-score.ts +96 -0
  248. package/src/lib/quant-engine.ts +231 -0
  249. package/src/lib/quant-lib.ts +80 -0
  250. package/src/lib/reportos.ts +175 -0
  251. package/src/lib/research-os.ts +306 -0
  252. package/src/lib/resource-estimator.ts +114 -0
  253. package/src/lib/rpm-governor.ts +93 -0
  254. package/src/lib/runtime-estimator.ts +135 -0
  255. package/src/lib/sage/empty-space-v6.ts +560 -0
  256. package/src/lib/sage/empty-space-v7.ts +222 -0
  257. package/src/lib/sage/empty-space.ts +733 -0
  258. package/src/lib/sage/engine.ts +786 -0
  259. package/src/lib/sage/index.ts +17 -0
  260. package/src/lib/sage/judge.ts +246 -0
  261. package/src/lib/sage/prng.ts +53 -0
  262. package/src/lib/sage/reality-grounding.ts +380 -0
  263. package/src/lib/sage/repetition.ts +151 -0
  264. package/src/lib/sage/saga-os-v2-engines.ts +1870 -0
  265. package/src/lib/sage/saga-os-v2.ts +274 -0
  266. package/src/lib/sage/saga-os-v3-core.ts +1491 -0
  267. package/src/lib/sage/saga-os-v3-release.ts +739 -0
  268. package/src/lib/sage/saga-os-v4-aureate.ts +1161 -0
  269. package/src/lib/sage/saga-os-v4.ts +212 -0
  270. package/src/lib/sage/saga-os-v5.ts +205 -0
  271. package/src/lib/sage/saga-os-v6.ts +346 -0
  272. package/src/lib/sage/saga-os-v7.ts +314 -0
  273. package/src/lib/sage/saga-os-v8.ts +505 -0
  274. package/src/lib/sage/saga-os.ts +329 -0
  275. package/src/lib/sage/taxonomy.ts +403 -0
  276. package/src/lib/sage/unified-roll.ts +524 -0
  277. package/src/lib/sage/worked-sketches.ts +44 -0
  278. package/src/lib/sage.ts +166 -0
  279. package/src/lib/scraper-debug-bus.ts +53 -0
  280. package/src/lib/scraper-enhanced.orig.ts +153 -0
  281. package/src/lib/scraper-enhanced.ts +10 -0
  282. package/src/lib/scraper-hardener.base.orig.ts +155 -0
  283. package/src/lib/scraper-hardener.base.ts +317 -0
  284. package/src/lib/scraper-hardener.ts +1 -0
  285. package/src/lib/scraper-palisade/palisade-adjudicator.orig.ts +419 -0
  286. package/src/lib/scraper-palisade/palisade-adjudicator.ts +13 -0
  287. package/src/lib/scraper-vnext/arbiter-omega.orig.ts +688 -0
  288. package/src/lib/scraper-vnext/arbiter-omega.ts +13 -0
  289. package/src/lib/scraper-vnext/canonical-portfolio-augments.ts +479 -0
  290. package/src/lib/scraper-vnext/canonical-portfolio-orchestrator.orig.ts +1529 -0
  291. package/src/lib/scraper-vnext/canonical-portfolio-orchestrator.ts +13 -0
  292. package/src/lib/scraper-vnext/conclave-omega.ts +1830 -0
  293. package/src/lib/scraper-vnext/content-extractor-v2.ts +226 -0
  294. package/src/lib/scraper-vnext/diagnostics-suite.ts +36 -0
  295. package/src/lib/scraper-vnext/epistemic-packer.ts +97 -0
  296. package/src/lib/scraper-vnext/fusion-v2.ts +65 -0
  297. package/src/lib/scraper-vnext/hydra-reader.orig.ts +1216 -0
  298. package/src/lib/scraper-vnext/hydra-reader.ts +13 -0
  299. package/src/lib/scraper-vnext/native-scraper-browser-vnext.orig.ts +91 -0
  300. package/src/lib/scraper-vnext/native-scraper-browser-vnext.ts +13 -0
  301. package/src/lib/scraper-vnext/nexus-consensus.orig.ts +905 -0
  302. package/src/lib/scraper-vnext/nexus-consensus.ts +13 -0
  303. package/src/lib/scraper-vnext/portfolio-consensus-adjudicator.ts +804 -0
  304. package/src/lib/scraper-vnext/portfolio-consensus-memory.ts +377 -0
  305. package/src/lib/scraper-vnext/portfolio-terminal-governor.ts +548 -0
  306. package/src/lib/scraper-vnext/query-strategist.orig.ts +224 -0
  307. package/src/lib/scraper-vnext/query-strategist.ts +423 -0
  308. package/src/lib/scraper-vnext/retrieval-accelerator.ts +708 -0
  309. package/src/lib/scraper-vnext/retrieval-audit-augments.ts +477 -0
  310. package/src/lib/scraper-vnext/retrieval-control-plane.ts +904 -0
  311. package/src/lib/scraper-vnext/retrieval-policy-augments.ts +358 -0
  312. package/src/lib/scraper-vnext/safe-fetch-v2.ts +157 -0
  313. package/src/lib/scraper-vnext/sentinel-omega.ts +56 -0
  314. package/src/lib/scraper-vnext/sentinel-orchestrator.ts +69 -0
  315. package/src/lib/scraper-vnext/sibyl-oracle.orig.ts +413 -0
  316. package/src/lib/scraper-vnext/sibyl-oracle.ts +13 -0
  317. package/src/lib/scraper-vnext/smart-read-v2.ts +55 -0
  318. package/src/lib/scraper-vnext/spa-rescue-bridge.ts +608 -0
  319. package/src/lib/scraper-vnext/strata-engine.orig.ts +2666 -0
  320. package/src/lib/scraper-vnext/strata-engine.ts +13 -0
  321. package/src/lib/scraper-vnext/structured-source-adapter.orig.ts +369 -0
  322. package/src/lib/scraper-vnext/structured-source-adapter.ts +34 -0
  323. package/src/lib/scraper-vnext/terminal-complete.ts +224 -0
  324. package/src/lib/scraper-vnext/terminal-final.ts +277 -0
  325. package/src/lib/scraper-vnext/terminal-saturation.ts +345 -0
  326. package/src/lib/scraper-vnext/terminal-wire.ts +425 -0
  327. package/src/lib/scraper-vnext/vanguard-titanium.orig.ts +467 -0
  328. package/src/lib/scraper-vnext/vanguard-titanium.ts +17 -0
  329. package/src/lib/search-cache.ts +138 -0
  330. package/src/lib/sloop-runner.base.ts +223 -0
  331. package/src/lib/sloop-runner.ts +104 -0
  332. package/src/lib/sloop.ts +114 -0
  333. package/src/lib/small-model-adapters.ts +82 -0
  334. package/src/lib/sscp.ts +86 -0
  335. package/src/lib/system-map.ts +54 -0
  336. package/src/lib/uni-node.ts +86 -0
  337. package/src/lib/universal-rigor-guard.ts +433 -0
  338. package/src/lib/v15-gate-testbed.ts +274 -0
  339. package/src/lib/v15-gemini.base.ts +89 -0
  340. package/src/lib/v15-gemini.ts +1 -0
  341. package/src/lib/v15-grounding.orig.ts +241 -0
  342. package/src/lib/v15-grounding.ts +79 -0
  343. package/src/lib/v15-pipeline.base.ts +769 -0
  344. package/src/lib/v15-pipeline.orig.ts +1154 -0
  345. package/src/lib/v15-pipeline.ts +674 -0
  346. package/src/lib/v15-questions.ts +64 -0
  347. package/src/lib/v15-rate-limiter.orig.ts +91 -0
  348. package/src/lib/v15-rate-limiter.ts +48 -0
  349. package/src/lib/v15-state.base.ts +87 -0
  350. package/src/lib/v15-state.ts +28 -0
  351. package/src/lib/visual-table-generator.tsx +207 -0
  352. package/src/lib/wasm-runtime.ts +133 -0
  353. package/src/lib/williams-persona-guide.ts +265 -0
  354. package/src/lib/williams-style.base.ts +464 -0
  355. package/src/lib/williams-style.ts +59 -0
  356. package/src/lib/worker-pool.ts +96 -0
  357. package/src/lib/writing-tiers.ts +125 -0
  358. package/src/main.orig.tsx +10 -0
  359. package/src/main.tsx +10 -0
  360. package/src/utils/cn.orig.ts +6 -0
  361. package/src/utils/cn.ts +6 -0
  362. package/src/vite-env.d.ts +1 -0
  363. package/tsconfig.json +31 -0
  364. package/unify.mjs +537 -0
  365. package/vite.config.ts +18 -0
@@ -0,0 +1,197 @@
1
+ /**
2
+ * vite-native-replay-plane.ts — L3: Traffic Logging & Deterministic Diffing
3
+ * Zero-dependency: node:* only.
4
+ */
5
+ import { createHash } from 'node:crypto';
6
+ import { createRequire } from 'node:module';
7
+ import { existsSync, mkdirSync } from 'node:fs';
8
+ import { join, dirname } from 'node:path';
9
+ import { fileURLToPath } from 'node:url';
10
+
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = dirname(__filename);
13
+
14
+ let DatabaseSync: any = null;
15
+ let dbAvailable = false;
16
+ try {
17
+ const anyProc: any = globalThis.process as any;
18
+ if (anyProc && typeof anyProc.getBuiltinModule === 'function') {
19
+ const mod = anyProc.getBuiltinModule('node:sqlite');
20
+ if (mod?.DatabaseSync) { DatabaseSync = mod.DatabaseSync; dbAvailable = true; }
21
+ }
22
+ } catch {}
23
+ if (!dbAvailable) {
24
+ try {
25
+ const req = createRequire(import.meta.url);
26
+ ({ DatabaseSync } = req('node:sqlite'));
27
+ dbAvailable = !!DatabaseSync;
28
+ } catch { dbAvailable = false; }
29
+ }
30
+
31
+ const AUDIT_DIR = join(__dirname, '..', '..', '..', 'src', 'audit');
32
+ const DB_PATH = join(AUDIT_DIR, 'knowledge.db');
33
+
34
+ let db: any = null;
35
+
36
+ function ensureDb(): boolean {
37
+ if (db) return true;
38
+ if (!dbAvailable) return false;
39
+ try {
40
+ if (!existsSync(AUDIT_DIR)) mkdirSync(AUDIT_DIR, { recursive: true });
41
+ db = new DatabaseSync(DB_PATH);
42
+ db.exec('PRAGMA journal_mode = WAL;');
43
+ db.exec('PRAGMA synchronous = NORMAL;');
44
+ db.exec('PRAGMA busy_timeout = 3000;');
45
+ db.exec(`
46
+ CREATE TABLE IF NOT EXISTS replay_log (
47
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
48
+ route TEXT NOT NULL,
49
+ requestJson TEXT NOT NULL,
50
+ responseJson TEXT NOT NULL,
51
+ statusCode INTEGER NOT NULL,
52
+ ok INTEGER NOT NULL,
53
+ durationMs REAL NOT NULL,
54
+ ts INTEGER NOT NULL
55
+ );
56
+ `);
57
+ // Indices for fast querying — prevents table scans on rolling cap deletion
58
+ db.exec(`
59
+ CREATE INDEX IF NOT EXISTS idx_replay_route ON replay_log(route);
60
+ CREATE INDEX IF NOT EXISTS idx_replay_ts ON replay_log(ts);
61
+ `);
62
+ return true;
63
+ } catch (e: any) {
64
+ console.warn('[replay-plane] DB init failed:', e?.message);
65
+ return false;
66
+ }
67
+ }
68
+
69
+ const ROLLING_CAP = 5000;
70
+ const TRIM_COUNT = 1000;
71
+
72
+ function safeStringify(obj: unknown): string {
73
+ try {
74
+ // Guard against BigInt and circular references
75
+ return JSON.stringify(obj, (_k, v) => {
76
+ if (typeof v === 'bigint') return v.toString() + 'n';
77
+ return v;
78
+ });
79
+ } catch {
80
+ return JSON.stringify({ error: 'Unstringifiable object' });
81
+ }
82
+ }
83
+
84
+ export interface ReplayEntry {
85
+ id?: number;
86
+ route: string;
87
+ requestJson: string;
88
+ responseJson: string;
89
+ statusCode: number;
90
+ ok: boolean;
91
+ durationMs: number;
92
+ ts: number;
93
+ }
94
+
95
+ export function recordReplay(entry: Omit<ReplayEntry, 'id' | 'ts'>): boolean {
96
+ if (!ensureDb()) return false;
97
+ try {
98
+ db.prepare(`
99
+ INSERT INTO replay_log (route, requestJson, responseJson, statusCode, ok, durationMs, ts)
100
+ VALUES (?, ?, ?, ?, ?, ?, ?)
101
+ `).run(
102
+ entry.route,
103
+ entry.requestJson,
104
+ entry.responseJson,
105
+ entry.statusCode,
106
+ entry.ok ? 1 : 0,
107
+ entry.durationMs,
108
+ Date.now(),
109
+ );
110
+
111
+ // Rolling cap enforcement
112
+ // Hand-trace: If table has 5001 rows after insert:
113
+ // SELECT COUNT(*) returns 5001 > 5000
114
+ // DELETE WHERE id IN (SELECT id FROM replay_log ORDER BY ts ASC LIMIT 1000)
115
+ // Deletes the 1000 oldest entries by timestamp (index on ts makes this efficient)
116
+ const count = (db.prepare(`SELECT COUNT(*) as c FROM replay_log`).get() as any)?.c ?? 0;
117
+ if (count > ROLLING_CAP) {
118
+ db.prepare(`
119
+ DELETE FROM replay_log WHERE id IN (
120
+ SELECT id FROM replay_log ORDER BY ts ASC LIMIT ${TRIM_COUNT}
121
+ )
122
+ `).run();
123
+ }
124
+ return true;
125
+ } catch { return false; }
126
+ }
127
+
128
+ export function getReplayLog(route?: string, limit = 50): ReplayEntry[] {
129
+ if (!ensureDb()) return [];
130
+ try {
131
+ if (route) {
132
+ return db.prepare(`SELECT * FROM replay_log WHERE route = ? ORDER BY ts DESC LIMIT ?`).all(route, limit) as ReplayEntry[];
133
+ }
134
+ return db.prepare(`SELECT * FROM replay_log ORDER BY ts DESC LIMIT ?`).all(limit) as ReplayEntry[];
135
+ } catch { return []; }
136
+ }
137
+
138
+ // ── Deterministic Diffing ─────────────────────────────────────────────────
139
+ // Hand-trace: stored = {a:1, b:2}, current = {b:2, a:1}
140
+ // JSON.stringify({a:1,b:2}) = '{"a":1,"b":2}'
141
+ // JSON.stringify({b:2,a:1}) = '{"b":2,"a":1}'
142
+ // SHA-256 of both are DIFFERENT — key order matters in standard JSON.stringify
143
+ // => hashMatch = false, structuralDrift contains analysis
144
+ export interface ReplayDiff {
145
+ storedHash: string;
146
+ currentHash: string;
147
+ hashMatch: boolean;
148
+ addedKeys: string[];
149
+ removedKeys: string[];
150
+ statusDrift: boolean;
151
+ structuralDrift: boolean;
152
+ }
153
+
154
+ export function summarizeReplayDiff(stored: unknown, current: unknown): ReplayDiff {
155
+ const storedStr = safeStringify(stored);
156
+ const currentStr = safeStringify(current);
157
+ const storedHash = createHash('sha256').update(storedStr).digest('hex');
158
+ const currentHash = createHash('sha256').update(currentStr).digest('hex');
159
+ const hashMatch = storedHash === currentHash;
160
+
161
+ let addedKeys: string[] = [];
162
+ let removedKeys: string[] = [];
163
+ let statusDrift = false;
164
+
165
+ try {
166
+ if (typeof stored === 'object' && stored && typeof current === 'object' && current) {
167
+ const storedKeys = new Set(Object.keys(stored as object));
168
+ const currentKeys = new Set(Object.keys(current as object));
169
+ addedKeys = [...currentKeys].filter(k => !storedKeys.has(k));
170
+ removedKeys = [...storedKeys].filter(k => !currentKeys.has(k));
171
+ const s = stored as any;
172
+ const c = current as any;
173
+ if (s.statusCode !== undefined && c.statusCode !== undefined) {
174
+ statusDrift = s.statusCode !== c.statusCode;
175
+ }
176
+ }
177
+ } catch {}
178
+
179
+ return {
180
+ storedHash,
181
+ currentHash,
182
+ hashMatch,
183
+ addedKeys,
184
+ removedKeys,
185
+ statusDrift,
186
+ structuralDrift: addedKeys.length > 0 || removedKeys.length > 0 || statusDrift,
187
+ };
188
+ }
189
+
190
+ export function getReplayStats(): { totalEntries: number; routes: string[] } {
191
+ if (!ensureDb()) return { totalEntries: 0, routes: [] };
192
+ try {
193
+ const total = (db.prepare(`SELECT COUNT(*) as c FROM replay_log`).get() as any)?.c ?? 0;
194
+ const routes = (db.prepare(`SELECT DISTINCT route FROM replay_log ORDER BY route`).all() as Array<{route:string}>).map(r => r.route);
195
+ return { totalEntries: total, routes };
196
+ } catch { return { totalEntries: 0, routes: [] }; }
197
+ }
@@ -0,0 +1,106 @@
1
+ /**
2
+ * vite-native-runtime-plane.ts — L2: Telemetry & Event Loop Governor
3
+ * Monitor Node.js event loop lag and memory usage to shed load during high stress.
4
+ * Zero-dependency: node:perf_hooks, node:diagnostics_channel only.
5
+ */
6
+ import { monitorEventLoopDelay } from 'node:perf_hooks';
7
+ import diagnosticsChannel from 'node:diagnostics_channel';
8
+
9
+ export type PressureLevel = 'ok' | 'warm' | 'hot';
10
+
11
+ export interface RuntimeEvent {
12
+ kind: string;
13
+ ts: number;
14
+ durationMs?: number;
15
+ meta?: Record<string, unknown>;
16
+ }
17
+
18
+ export interface RuntimeStats {
19
+ pressure: PressureLevel;
20
+ eventLoopMeanMs: number;
21
+ eventLoopMaxMs: number;
22
+ rssBytes: number;
23
+ heapUsedBytes: number;
24
+ recentEventCount: number;
25
+ uptime: number;
26
+ }
27
+
28
+ // ── Event Loop Governor ───────────────────────────────────────────────────
29
+ const lag = monitorEventLoopDelay({ resolution: 20 });
30
+ lag.enable();
31
+
32
+ // Reset timer every 60s — MUST .unref() to avoid zombie process
33
+ const lagResetTimer = setInterval(() => {
34
+ try { lag.reset(); } catch {}
35
+ }, 60_000);
36
+ (lagResetTimer as any).unref?.();
37
+
38
+ // ── Rolling Event Buffer — O(1) amortized ────────────────────────────────
39
+ // Hand-trace: After 505 emitRuntimeEvent calls:
40
+ // recentEvents.length reaches 501 after push
41
+ // splice(0, 501 - 500) = splice(0, 1)
42
+ // start=0, deleteCount=1
43
+ // Result: exactly MAX_EVENTS=500 elements remain
44
+ const recentEvents: RuntimeEvent[] = [];
45
+ const MAX_EVENTS = 500;
46
+
47
+ // Diagnostics channel for inter-module pub/sub
48
+ const channel = diagnosticsChannel.channel('vite-native-scraper.runtime');
49
+
50
+ // ── Pressure Calculation (exact thresholds) ───────────────────────────────
51
+ export function getRuntimeStats(): RuntimeStats {
52
+ // Guard against NaN/Infinity if lag not yet ticked
53
+ const meanMs = Number((lag as any).mean ?? 0) / 1e6 || 0;
54
+ const maxMs = Number((lag as any).max ?? 0) / 1e6 || 0;
55
+ const mem = process.memoryUsage();
56
+
57
+ // Hand-trace: rss=1073741825 (1GB+1byte)
58
+ // maxMs > 250 = depends on lag
59
+ // mem.rss > 1_073_741_824 = true (1073741825 > 1073741824)
60
+ // => pressure = 'hot'
61
+ const pressure: PressureLevel =
62
+ (maxMs > 250 || mem.rss > 1_073_741_824) ? 'hot' :
63
+ (maxMs > 80 || mem.rss > 536_870_912) ? 'warm' :
64
+ 'ok';
65
+
66
+ return {
67
+ pressure,
68
+ eventLoopMeanMs: Math.round(meanMs * 100) / 100,
69
+ eventLoopMaxMs: Math.round(maxMs * 100) / 100,
70
+ rssBytes: mem.rss,
71
+ heapUsedBytes: mem.heapUsed,
72
+ recentEventCount: recentEvents.length,
73
+ uptime: Math.floor(process.uptime()),
74
+ };
75
+ }
76
+
77
+ export function getPressure(): PressureLevel {
78
+ return getRuntimeStats().pressure;
79
+ }
80
+
81
+ // ── Load shedding decisions ───────────────────────────────────────────────
82
+ export function shouldDeferBackgroundWork(kind: 'prefetch' | 'rag' | 'cleanup' | string): boolean {
83
+ const { pressure } = getRuntimeStats();
84
+ if (pressure === 'hot') return true;
85
+ if (pressure === 'warm' && (kind === 'prefetch' || kind === 'rag')) return true;
86
+ return false;
87
+ }
88
+
89
+ // ── Event emission ────────────────────────────────────────────────────────
90
+ export function emitRuntimeEvent(ev: RuntimeEvent): void {
91
+ recentEvents.push(ev);
92
+ // MUST use splice, NOT shift() in a loop — avoids O(N) re-indexing
93
+ if (recentEvents.length > MAX_EVENTS) {
94
+ recentEvents.splice(0, recentEvents.length - MAX_EVENTS);
95
+ }
96
+ // Publish to diagnostics channel if subscribers exist
97
+ if (channel.hasSubscribers) channel.publish(ev);
98
+ }
99
+
100
+ export function getRecentEvents(limit = 100): RuntimeEvent[] {
101
+ return recentEvents.slice(-Math.min(limit, MAX_EVENTS));
102
+ }
103
+
104
+ export function clearEvents(): void {
105
+ recentEvents.splice(0, recentEvents.length);
106
+ }