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,208 @@
1
+ /**
2
+ * FICTION DIAGNOSTICS & REMEDIATION ENGINE
3
+ * ---------------------------------------------------------------------------
4
+ * Evaluates manuscripts against the 15 Core Failure Modes (FM-02 through FM-16)
5
+ * both DETERMINISTICALLY (local regex, frequency checks, clock analysis) and
6
+ * via LLM-assisted deep diagnostic scans.
7
+ */
8
+ import {
9
+ stripHarnessResidue,
10
+ normalizeChapterTitle,
11
+ RESIDUE_PATTERNS,
12
+ } from "./continuity";
13
+
14
+ export interface DiagnosticFinding {
15
+ code: string;
16
+ title: string;
17
+ severity: "critical" | "warning" | "info";
18
+ description: string;
19
+ count: number;
20
+ examples: string[];
21
+ suggestedPromptFix: string;
22
+ suggestedCodeFix: string;
23
+ autoFixAvailable: boolean;
24
+ }
25
+
26
+ export interface FullDiagnosticReport {
27
+ timestamp: number;
28
+ wordCount: number;
29
+ chapterCount: number;
30
+ findings: DiagnosticFinding[];
31
+ cleanlinessScore: number;
32
+ stasisRisk: "high" | "medium" | "low";
33
+ pacingRisk: "high" | "medium" | "low";
34
+ }
35
+
36
+ export function runDeterministicDiagnostics(manuscript: string): FullDiagnosticReport {
37
+ const text = manuscript || "";
38
+ const findings: DiagnosticFinding[] = [];
39
+ const words = (text.trim().match(/\S+/g) ?? []).length;
40
+ const chapterMatches = [...text.matchAll(/^(?:#{1,3}\s+|chapter\s+\d+|part\s+\d+).*$/gim)];
41
+ const chapterCount = chapterMatches.length;
42
+
43
+ // 1. FM-06: The The title bug
44
+ const doubleTheMatches = [...text.matchAll(/\b(?:The\s+The|A\s+A|An\s+An)\b/gi)].map((m) => m[0]);
45
+ if (doubleTheMatches.length > 0) {
46
+ findings.push({
47
+ code: "FM-06",
48
+ title: "Grammatical Concatenation Bug ('The The')",
49
+ severity: "critical",
50
+ description: "Chapter titles or headings contain duplicated definite or indefinite articles ('The The Reckoning').",
51
+ count: doubleTheMatches.length,
52
+ examples: doubleTheMatches.slice(0, 3),
53
+ suggestedPromptFix: "Specify: 'Format title as ## {N}. {Setting} without prepending an additional article if the setting already contains one.'",
54
+ suggestedCodeFix: "Apply `normalizeChapterTitle()` to all chapter headings before committing to manuscript.",
55
+ autoFixAvailable: true,
56
+ });
57
+ }
58
+
59
+ // 2. FM-07: Bracketed citation leakage
60
+ const residueHits: string[] = [];
61
+ for (const { id, re } of RESIDUE_PATTERNS) {
62
+ re.lastIndex = 0;
63
+ const ms = [...text.matchAll(re)].map((m) => m[0]);
64
+ if (ms.length > 0) residueHits.push(`${id} (${ms.length} hits: ${ms.slice(0, 2).join(", ")})`);
65
+ }
66
+ if (residueHits.length > 0) {
67
+ findings.push({
68
+ code: "FM-07",
69
+ title: "RAG / Grounding Citation Bracket Leakage",
70
+ severity: "critical",
71
+ description: "Bracketed citation or harness residue tokens ([Source 1], [CHECKSUM], [VERIFIED]) leaked into literary fiction prose.",
72
+ count: residueHits.length,
73
+ examples: residueHits.slice(0, 4),
74
+ suggestedPromptFix: "Append hard negative constraint: 'Never emit bracketed metadata of any kind: no [Source N], no [CHECKSUM], no status tags.'",
75
+ suggestedCodeFix: "Run `stripHarnessResidue(text)` before appending chapter output.",
76
+ autoFixAvailable: true,
77
+ });
78
+ }
79
+
80
+ // 3. FM-14: Instrument & Sensor Fetishism
81
+ const sensorMatches = [...text.matchAll(/\b\d[\d,.]*\s*(?:hertz|hz|decibels?|db|millimet(?:er|re)s?|mm|centimet(?:er|re)s?|cm|met(?:er|re)s?|kilomet(?:er|re)s?|km|milligauss|millirads?|millibars?|picoseconds?|milliseconds?|lux)\b/gi)].map((m) => m[0]);
82
+ if (sensorMatches.length > 10) {
83
+ findings.push({
84
+ code: "FM-14",
85
+ title: "Instrument & Sensor Fetishism as a Substitute for Voice",
86
+ severity: "warning",
87
+ description: "Excessive physical measurement readings (hertz, decibels, millibars) saturate the text in place of character action.",
88
+ count: sensorMatches.length,
89
+ examples: sensorMatches.slice(0, 5),
90
+ suggestedPromptFix: "Enforce craft budget: 'At most 4 numeric measurements with units in the entire chapter. Concrete specificity means named physical objects and consequences, not sensor telemetry.'",
91
+ suggestedCodeFix: "Set `DEFAULT_BUDGETS.measurements = 4` in `continuity.ts`.",
92
+ autoFixAvailable: false,
93
+ });
94
+ }
95
+
96
+ // 4. FM-15: Compulsive Currency Audits
97
+ const currencyMatches = [...text.matchAll(/\b\d[\d,.]*\s*(?:gold|silver|copper)?\s*(?:marks?|sovereigns?|crowns?|pieces?|francs?|credits?|shillings?)\b/gi)].map((m) => m[0]);
98
+ if (currencyMatches.length > 8) {
99
+ findings.push({
100
+ code: "FM-15",
101
+ title: "Compulsive Currency Audits (Bookkeeping Saturation)",
102
+ severity: "warning",
103
+ description: "Human interactions and narrative tension are constantly reduced to coin fees, fines, and ledger debits.",
104
+ count: currencyMatches.length,
105
+ examples: currencyMatches.slice(0, 4),
106
+ suggestedPromptFix: "Enforce craft budget: 'At most 2 explicit mentions of currency/fees. Emotional and philosophical stakes must not be converted into bookkeeping transactions.'",
107
+ suggestedCodeFix: "Set `DEFAULT_BUDGETS.currency = 2` in `continuity.ts`.",
108
+ autoFixAvailable: false,
109
+ });
110
+ }
111
+
112
+ // 5. FM-03: Procedural Deadlock / Stasis Verbs
113
+ const stasisVerbs = [...text.matchAll(/\b(measured|inspected|audited|checked|recorded|calibrated|reviewed|filed|signed)\b/gi)].map((m) => m[0].toLowerCase());
114
+ if (stasisVerbs.length > 15) {
115
+ findings.push({
116
+ code: "FM-03",
117
+ title: "Procedural Deadlock & Invariant Audit Activity",
118
+ severity: "critical",
119
+ description: "Repetitive procedural inspection verbs dominate scenes, causing characters to perform administrative tasks instead of narrative progression.",
120
+ count: stasisVerbs.length,
121
+ examples: stasisVerbs.slice(0, 6),
122
+ suggestedPromptFix: "Mandate: 'This chapter must change at least TWO of: physical location, who is present, what the protagonist knows, what the protagonist controls. An inspection or filing may not be the chapter's central action.'",
123
+ suggestedCodeFix: "Enable `enableFM03AntiStasis` in continuity governor.",
124
+ autoFixAvailable: false,
125
+ });
126
+ }
127
+
128
+ // 6. FM-04: Truncation Check
129
+ const trimmed = text.trim();
130
+ const unterminated = !!trimmed && !/[.!?"'”’)\]]$/.test(trimmed);
131
+ if (unterminated) {
132
+ findings.push({
133
+ code: "FM-04",
134
+ title: "Unterminated Sentence (Severe Truncation Risk)",
135
+ severity: "critical",
136
+ description: "The manuscript terminates abruptly on an incomplete sentence, indicating an output token cutoff or socket drop.",
137
+ count: 1,
138
+ examples: [trimmed.slice(-100)],
139
+ suggestedPromptFix: "Send continuation prompt: 'You are continuing ONE chapter of fiction cut off mid-delivery. Output ONLY the continuation prose starting from the final words.'",
140
+ suggestedCodeFix: "Enable auto-continuation loop in `story-engine.ts` with `truncationVerdict()`.",
141
+ autoFixAvailable: false,
142
+ });
143
+ }
144
+
145
+ // 7. FM-09: Climax Evasion / Administrative Anticlimax
146
+ const adminClimaxMatches = [...text.matchAll(/\b(?:petition is denied|court will issue an injunction|renewal of the records|matter of maintenance|dismissed as false|fine of \d+)\b/gi)].map((m) => m[0]);
147
+ if (adminClimaxMatches.length > 3) {
148
+ findings.push({
149
+ code: "FM-09",
150
+ title: "Climax Evasion via Administrative Trivialization",
151
+ severity: "warning",
152
+ description: "Climactic moments resolve through bureaucratic hearings, denied petitions, or paperwork rather than direct confrontations.",
153
+ count: adminClimaxMatches.length,
154
+ examples: adminClimaxMatches.slice(0, 3),
155
+ suggestedPromptFix: "Mandate: 'Stage the direct confrontation the book promised, in scene, with the antagonist present and acting. No hearing, memo, audit or petition may substitute for it.'",
156
+ suggestedCodeFix: "Enable Act Ladder obligations in `actObligation()` for chapters > 70% progress.",
157
+ autoFixAvailable: false,
158
+ });
159
+ }
160
+
161
+ const cleanlinessScore = Math.max(0, 100 - findings.filter((f) => f.severity === "critical").length * 25 - findings.filter((f) => f.severity === "warning").length * 10);
162
+ const stasisRisk = stasisVerbs.length > 20 ? "high" : stasisVerbs.length > 10 ? "medium" : "low";
163
+ const pacingRisk = findings.some((f) => f.code === "FM-03" || f.code === "FM-09" || f.code === "FM-04") ? "high" : "low";
164
+
165
+ return {
166
+ timestamp: Date.now(),
167
+ wordCount: words,
168
+ chapterCount,
169
+ findings,
170
+ cleanlinessScore,
171
+ stasisRisk,
172
+ pacingRisk,
173
+ };
174
+ }
175
+
176
+ /** Executes deterministic auto-fixes on text (strip residue, clean double-the titles). */
177
+ export function applyDeterministicAutoFixes(manuscript: string): { cleanedText: string; fixesApplied: string[] } {
178
+ const fixes: string[] = [];
179
+ let out = manuscript;
180
+
181
+ // 1. Strip residue
182
+ const { text: residueCleaned, removed } = stripHarnessResidue(out);
183
+ if (removed.length > 0) {
184
+ out = residueCleaned;
185
+ fixes.push(`Removed ${removed.length} harness residue token(s): ${removed.join(", ")}`);
186
+ }
187
+
188
+ // 2. Normalize titles
189
+ const lines = out.split("\n");
190
+ let titleFixes = 0;
191
+ const newLines = lines.map((l) => {
192
+ if (/^(?:#{1,4}\s+|chapter\s+\d+)/i.test(l)) {
193
+ const normalized = normalizeChapterTitle(l);
194
+ if (normalized !== l) {
195
+ titleFixes++;
196
+ return normalized;
197
+ }
198
+ }
199
+ return l;
200
+ });
201
+
202
+ if (titleFixes > 0) {
203
+ out = newLines.join("\n");
204
+ fixes.push(`Normalized ${titleFixes} chapter title(s) to remove double-article glitches.`);
205
+ }
206
+
207
+ return { cleanedText: out, fixesApplied: fixes };
208
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * DIFF UTILITIES — highlighted difference computation between drafts.
3
+ * ---------------------------------------------------------------------------
4
+ * Computes word-level and sentence-level diff chunks:
5
+ * - unchanged: text as is
6
+ * - added: new text highlighted with <ins> / green styling
7
+ * - removed: deleted text styled with <del> / red strikethrough
8
+ */
9
+
10
+ export interface DiffChunk {
11
+ type: "unchanged" | "added" | "removed";
12
+ value: string;
13
+ }
14
+
15
+ export function computeWordDiff(oldStr: string, newStr: string): DiffChunk[] {
16
+ if (oldStr === newStr) return [{ type: "unchanged", value: oldStr }];
17
+ if (!oldStr) return [{ type: "added", value: newStr }];
18
+ if (!newStr) return [{ type: "removed", value: oldStr }];
19
+
20
+ const oldWords = oldStr.split(/(\s+)/);
21
+ const newWords = newStr.split(/(\s+)/);
22
+
23
+ // Simple and fast Myers-like common prefix / suffix with middle diff
24
+ let start = 0;
25
+ while (start < oldWords.length && start < newWords.length && oldWords[start] === newWords[start]) {
26
+ start++;
27
+ }
28
+
29
+ let oldEnd = oldWords.length - 1;
30
+ let newEnd = newWords.length - 1;
31
+ while (oldEnd >= start && newEnd >= start && oldWords[oldEnd] === newWords[newEnd]) {
32
+ oldEnd--;
33
+ newEnd--;
34
+ }
35
+
36
+ const chunks: DiffChunk[] = [];
37
+ const prefix = oldWords.slice(0, start).join("");
38
+ if (prefix) chunks.push({ type: "unchanged", value: prefix });
39
+
40
+ const removedMiddle = oldWords.slice(start, oldEnd + 1).join("");
41
+ const addedMiddle = newWords.slice(start, newEnd + 1).join("");
42
+
43
+ if (removedMiddle) chunks.push({ type: "removed", value: removedMiddle });
44
+ if (addedMiddle) chunks.push({ type: "added", value: addedMiddle });
45
+
46
+ const suffix = oldWords.slice(oldEnd + 1).join("");
47
+ if (suffix) chunks.push({ type: "unchanged", value: suffix });
48
+
49
+ return chunks;
50
+ }
51
+
52
+ /** Formats diff chunks as an HTML string suitable for rendering in the main chatbox. */
53
+ export function formatDiffAsHtml(chunks: DiffChunk[]): string {
54
+ return chunks
55
+ .map((c) => {
56
+ if (c.type === "added") {
57
+ return `<mark class="diff-add" style="background-color: #d1fae5; color: #065f46; text-decoration: none; padding: 1px 3px; border-radius: 3px; font-weight: 500;">${escapeHtml(c.value)}</mark>`;
58
+ }
59
+ if (c.type === "removed") {
60
+ return `<del class="diff-del" style="background-color: #fee2e2; color: #991b1b; text-decoration: line-through; padding: 1px 3px; border-radius: 3px; opacity: 0.7;">${escapeHtml(c.value)}</del>`;
61
+ }
62
+ return escapeHtml(c.value);
63
+ })
64
+ .join("");
65
+ }
66
+
67
+ function escapeHtml(s: string): string {
68
+ return s
69
+ .replace(/&/g, "&amp;")
70
+ .replace(/</g, "&lt;")
71
+ .replace(/>/g, "&gt;")
72
+ .replace(/"/g, "&quot;")
73
+ .replace(/'/g, "&#039;");
74
+ }
@@ -0,0 +1,214 @@
1
+ /**
2
+ * ENTITY STATE MACHINE (ESM) & TOPOGRAPHIC ROUTER (NIVE LAYER 2 & 3)
3
+ * ---------------------------------------------------------------------------
4
+ * Solves:
5
+ * - Character resurrecting after somatic death (B.1.1)
6
+ * - Ontological metamorphosis (e.g. unicorn-man chimera drift) (B.1.2)
7
+ * - Biological sex and craft instability (A.1.2 / B.1.3)
8
+ * - Modulo-4 cyclical setting ping-pong (A.2.1 / B.2.1)
9
+ * - MacGuffin shape-shifting carousel (A.2.2)
10
+ */
11
+
12
+ export type MortalityStatus = "ALIVE" | "DEAD" | "EXILED" | "CAPTURED" | "ERASED";
13
+
14
+ export interface EntityStateRecord {
15
+ id: string;
16
+ name: string;
17
+ role: "protagonist" | "deuteragonist" | "antagonist" | "mentor" | "supporting";
18
+ species: "human" | "animal" | "hybrid" | "construct" | "spirit";
19
+ biologicalSex: "male" | "female" | "none" | "other";
20
+ mortalityStatus: MortalityStatus;
21
+ deathChapter: number | null;
22
+ deathCause?: string;
23
+ permanentWound: string;
24
+ lockedCraft: string;
25
+ inventory: string[];
26
+ currentLocationId: string;
27
+ }
28
+
29
+ export interface MacroObjectState {
30
+ name: string;
31
+ lockedForm: string; // e.g., "leather-bound vellum ledger in copper canister"
32
+ originChapter: number;
33
+ currentHolder: string;
34
+ status: "intact" | "damaged" | "destroyed" | "delivered";
35
+ }
36
+
37
+ export interface SpatialNode {
38
+ id: string;
39
+ name: string;
40
+ region: string;
41
+ neighbors: string[]; // Connected node IDs
42
+ transitHours: Record<string, number>; // Distance/time to neighbor
43
+ transitHazard?: string;
44
+ }
45
+
46
+ export class EntityStateMachine {
47
+ private entities: Map<string, EntityStateRecord> = new Map();
48
+ private macroObjects: Map<string, MacroObjectState> = new Map();
49
+ private worldNodes: Map<string, SpatialNode> = new Map();
50
+ private locationHistory: string[] = [];
51
+
52
+ constructor() {
53
+ this.initDefaultWorldGraph();
54
+ }
55
+
56
+ private initDefaultWorldGraph(): void {
57
+ const defaultNodes: SpatialNode[] = [
58
+ {
59
+ id: "borderland",
60
+ name: "The Limestone Borderland Promontory",
61
+ region: "Peripheral Sector 7",
62
+ neighbors: ["transit_tunnel", "salt_marshes"],
63
+ transitHours: { transit_tunnel: 3, salt_marshes: 5 },
64
+ },
65
+ {
66
+ id: "transit_tunnel",
67
+ name: "Merthe-Thares Sub-Surface Labyrinth",
68
+ region: "Intermediate Transit Conduit",
69
+ neighbors: ["borderland", "central_dystopia"],
70
+ transitHours: { borderland: 3, central_dystopia: 4 },
71
+ transitHazard: "humidity & limestone silt",
72
+ },
73
+ {
74
+ id: "central_dystopia",
75
+ name: "The Municipal Archive & Cryo Vaults",
76
+ region: "Urban Dystopia Core",
77
+ neighbors: ["transit_tunnel", "outer_village"],
78
+ transitHours: { transit_tunnel: 4, outer_village: 6 },
79
+ },
80
+ {
81
+ id: "outer_village",
82
+ name: "Tulkaaklang Cultivation Flats",
83
+ region: "Agrarian Periphery",
84
+ neighbors: ["central_dystopia", "salt_marshes"],
85
+ transitHours: { central_dystopia: 6, salt_marshes: 4 },
86
+ },
87
+ {
88
+ id: "salt_marshes",
89
+ name: "Keistlddsto Estuary & Lime Kilns",
90
+ region: "Coastal Shallows",
91
+ neighbors: ["borderland", "outer_village"],
92
+ transitHours: { borderland: 5, outer_village: 4 },
93
+ transitHazard: "shifting mud & tidal swell",
94
+ },
95
+ ];
96
+
97
+ for (const node of defaultNodes) {
98
+ this.worldNodes.set(node.id, node);
99
+ }
100
+ }
101
+
102
+ public registerEntity(record: EntityStateRecord): void {
103
+ this.entities.set(record.id.toLowerCase(), { ...record });
104
+ }
105
+
106
+ public registerMacroObject(obj: MacroObjectState): void {
107
+ this.macroObjects.set(obj.name.toLowerCase(), { ...obj });
108
+ }
109
+
110
+ public recordSomaticDeath(entityId: string, chapter: number, cause: string): void {
111
+ const ent = this.entities.get(entityId.toLowerCase());
112
+ if (ent) {
113
+ ent.mortalityStatus = "DEAD";
114
+ ent.deathChapter = chapter;
115
+ ent.deathCause = cause;
116
+ }
117
+ }
118
+
119
+ public isAlive(entityId: string): boolean {
120
+ const ent = this.entities.get(entityId.toLowerCase());
121
+ if (!ent) return true;
122
+ return ent.mortalityStatus === "ALIVE";
123
+ }
124
+
125
+ public getDeadEntities(): EntityStateRecord[] {
126
+ return Array.from(this.entities.values()).filter((e) => e.mortalityStatus === "DEAD");
127
+ }
128
+
129
+ public validateCandidateCast(candidateNames: string[], currentChapter: number): {
130
+ valid: string[];
131
+ banned: string[];
132
+ reasons: string[];
133
+ } {
134
+ const valid: string[] = [];
135
+ const banned: string[] = [];
136
+ const reasons: string[] = [];
137
+
138
+ for (const name of candidateNames) {
139
+ const ent = this.entities.get(name.toLowerCase());
140
+ if (ent && ent.mortalityStatus === "DEAD") {
141
+ banned.push(name);
142
+ reasons.push(
143
+ `Entity "${ent.name}" died in Chapter ${ent.deathChapter} (${ent.deathCause || "deceased"}). Cannot be cast in Chapter ${currentChapter}.`
144
+ );
145
+ } else {
146
+ valid.push(name);
147
+ }
148
+ }
149
+
150
+ return { valid, banned, reasons };
151
+ }
152
+
153
+ public stepLocation(newLocationName: string): {
154
+ validTransit: boolean;
155
+ transitNote?: string;
156
+ warning?: string;
157
+ } {
158
+ const locLower = newLocationName.toLowerCase();
159
+ this.locationHistory.push(locLower);
160
+
161
+ if (this.locationHistory.length >= 4) {
162
+ const recent4 = this.locationHistory.slice(-4);
163
+ const isPingPong =
164
+ recent4[0] === recent4[2] &&
165
+ recent4[1] === recent4[3] &&
166
+ recent4[0] !== recent4[1];
167
+
168
+ if (isPingPong) {
169
+ return {
170
+ validTransit: false,
171
+ warning: `Modulo-4 setting loop detected (${recent4[0]} <-> ${recent4[1]}). Enforcing directional transit out of loop.`,
172
+ };
173
+ }
174
+ }
175
+
176
+ return { validTransit: true };
177
+ }
178
+
179
+ /**
180
+ * Generates a deterministic State Invariant Block for injection into prompts.
181
+ */
182
+ public compileStateConstraintBlock(_currentChapter?: number): string {
183
+ const lines: string[] = [];
184
+ lines.push("=== ENTITY STATE MACHINE INVARIANTS (NIVE LAYER 2/3) ===");
185
+
186
+ const dead = this.getDeadEntities();
187
+ if (dead.length > 0) {
188
+ lines.push("BANNED ENTITIES (SOMATICALLY DECEASED — DO NOT RESURRECT):");
189
+ for (const d of dead) {
190
+ lines.push(` - ${d.name} (${d.role}): Died in Chapter ${d.deathChapter}. Cannot speak, walk, or be in the room.`);
191
+ }
192
+ }
193
+
194
+ const alive = Array.from(this.entities.values()).filter((e) => e.mortalityStatus === "ALIVE");
195
+ if (alive.length > 0) {
196
+ lines.push("LOCKED ENTITY ATTRIBUTES (NO SEX SWAPPING, NO DRIFT):");
197
+ for (const a of alive) {
198
+ lines.push(
199
+ ` - ${a.name}: ${a.biologicalSex.toUpperCase()} ${a.species.toUpperCase()} (${a.lockedCraft}). Wound: "${a.permanentWound}".`
200
+ );
201
+ }
202
+ }
203
+
204
+ const objects = Array.from(this.macroObjects.values());
205
+ if (objects.length > 0) {
206
+ lines.push("MACGUFFIN STABILITY (NO SHAPE-SHIFTING):");
207
+ for (const obj of objects) {
208
+ lines.push(` - ${obj.name}: Locked form is "${obj.lockedForm}". Held by ${obj.currentHolder}.`);
209
+ }
210
+ }
211
+
212
+ return lines.join("\n");
213
+ }
214
+ }